2018년 7월 15일 일요일

3주/5강: SQL의 표 합치기(거주가능 외계행성)

[커세라 강좌 소개] 자료기반 천문학(Data-Driven Astronomy)

-----------------------------------------------------------------
Week 3: Querying data using SQL
제3주차: 스퀠(SQL)을 이용한 자료 조회
- How to use databases to analyse your data
  획득한 자료를 분석하기 위해 데이터베이스 활용하는 법
- Investigating exoplanets in other solar systems
  다른 태양계의 외계행성 탐사
-----------------------------------------------------------------
-----------------------------------------------------------------
-----------------------------------------------------------------
-----------------------------------------------------------------
Lesson 4: More Advanced SQL / 한글자막
-----------------------------------------------------------------
5강: SQL의 표 합치기(거주가능 외계행성)
Lesson 5: Joining Table in SQL / 한글자막 / 영문자막

[강의대본]



[00:06] 이제 큰 궁금증에 답할 만한 기법은 거의 배운 셈이다. 그 궁금증은 주성에서 생명체가 존재할만한 위치에 지구만한 크기의 행성들이 있을까? 라는 것이었다. 여기에 한가지 놓친 부분이 있다.

[00:16] 이 궁금증을 해소하려면 행성에 대한 정보를 알 필요가 있다. 그 정보들은 외계행성 표에 저장돼 있다. 아울러 주성에 대한 정보도 알아야 한다. 이 정보들은 별(Star)로 분류된 표에 따로 저장돼 있다. 왜 이 정보들은 다른 표에 저장되어 있는지 어떻게 하면 행성 표와 합칠 수 있을까?



[00:33] 자료와 그 관리체계를 조직하는 방법에 관한 사항은 별개의 연구 과제 인데 소위 데이터베이스 정규화(database normalization)라고 한다. 데이터베이스를 설계할 때 자료가 여러곳에 중복된 경우 중복성의 최소화와 자료 무결성 강화를 목표로 둬야 한다.

[00:50] 일반적으로 서로다른 형을 갖는 자료들 사이의 관계가 일대일로 대응된 경우 단일 표에 합치는 것이 타당하다. 하지만 우리의 예에서는 그렇지 못했다. 천문가들에 의해 관측된 많은 별들은 행성을 가지고 있지 않은 것으로 인식되었다. 동시에 많은 별들이 다수의 행성을 가진 것으로 알려졌다. 게다가 별에 관한 정보는 행성과는 별개로 다른 관측에 의해 얻어진다. 따라서 별과 행성의 정보가 별개의 표로 작성 되었더라도 이상할 것은 없다. 따라서 우리가 가진 행성정보을 담은 표는 이와 같다.



[00:01:19] 각 행성 후보는 기본 식별부호(primary key) 혹은 유일명(unique identifier)을 가진다. 위의 예에서 koi_name 이 이에 해당하는데 중요 케플러 대상(Kepler Object of Interest)라는 뜻이다. 그리고 별정보 표는 다음과 같다.



[01:30] 이에 역시 기본 식별부호를 가지고 있는데 kepler_id 라고 한다. 두 표를 구문을 써서 나열해 놓음으로써 느슨하게 이 두 정보의 합치기를 시도해 보고 싶을 것이다. 애석하지만 예상대로 제대로 되지 않는다. 이렇게 서로다른 두 표를 합치는 것을 교차 합침(cross joint)이라 하는데 별과 행성의 모든 조합을 나열한 것이다.



[01:47] 뭔가 잘못되가는 것이 확실해 보이는데 kepler_id가 일치하지 않은데도 연속적으로 중복된 값을 가지고 있기 때문이다. 좀더 세심한 방법으로 이런 정보들을 합치려면 행성 표에서 별 표에 있는 것과 맞추기 위한 속성(attribute)이 필요하다. 이런 속성을 외부 식별부호(foreign key)라 한다. 이 예에서는 외부 식별부호는 kepler_id 다. 이제 kepler_id 가 일치하는 행들만 가져올 수 있게 됐다. 결국 Kepler-227b가 kepler_id 10797460인 별에 속한 행성이란 것을 알게 됐다.



[02:20] 이 행성의 공전 주기는 9.5일 이다. 따라서 이 행성이 주성으로부터 받는 에너지 량은 지구의 142배에 달한다. 이와 별개로 합침의 또다른 형식이 있는데 조회시 사용 할 수 있는 내부 합침(inner join)으로 위와 같다.

[02:33] 이제 우리의 질문(지구만한 크기의 거주가능한 외계행성을 찾을 수 있을까?)에 답을 할 만큼 필요한 모든 사항을 배웠다. 거주가능한 지역에 존재하는 행성을 찾아내기 위해 행성의 에너지 수지(energy budget)를 고려해 보자. 주성으로부터 받은 에너지를 흡수량과 다시 우주로 내보내 량을 따져보자.



[02:46] 별은 매우 밝은 천체로 전 방향으로 균일하게 에너지를 방출한다. 그 에너지 중 아주 작은 량이 딸려있는 행성에 의해 차단되어 주성의 에너지 강도가 감소한다. 역제곱 법칙에 따라 광원으로부터 떨어진 거리를 A 비율로 증가 시키면 빛의 강도는 A의 제곱분의 일로 감소한다.





* 거리의 역제곱 법칙을 증가하는 면적의 관점에서 보자. 빛은 전방향으로 동일하게 복사한다. 거리가 d=1일 때 전 구면을 통과하는 빛이나 d=2일때 전구면을 통과하는 빛의 량은 같다. 하지만 구면의 표면적은 거리의 제곱이다. 따라서 단위면적당 빛의 세기는 광원에서 거리의 제곱에 반비례한다. 거리에 상관 없이 총에너지량은 보존된다. 없던 에너지가 생기거나 이유없이 사라지지 않는다. 빛이 진행하는 경로상에 차단물체로 인해 흡수되어 열에너지로 바뀔 수도 있지만 어쨌든 총 에너지는 보존되어야 한다.

* 멀리있는 천체의 빛 에너지를 측정할 때 성간 물질(ISM, Inter-Stellar Material)에 의해 차단되는 에너지량도 계산되어야 한다. 이를 성간소광(interstellar extinction)이라 한다. 성간소광을 감안하지 않은 관측 결과로 우주크기에 대한 '대논쟁'의 원인이 되기도 했다.

[03:09] 행성으로 입사하는 에너지량은 명백히 주성의 밝기에 달렸다. 그리고 주성과의 얼마나 가깝게 있는지도 중요하다. 행성에 주입되는 에너지 플럭스(단위 면적당 시간당 통과하는 에너지량)를 계산하기 위해 이 두가지 요인을 합쳐보자.

[03:20] 먼저, 행성이 받는 별빛의 강도다. 지구의 경우 평방 미터당 1361 와트다. 이는 매우 상수에 가깝다. 실제로 이를 태양상수(solar  constant)라고 한다.




* 와트(Watt)는 일률(단위 시간당 일)의 단위
1W = 1J/s = 1N.m/s = 1Kg.(m/s)^2/s = 1V.1A


* 구구단만 알아도 미적분(고전역학)


00:03:34.510 --> 00:03:37.720
앞의 동영상 강좌에서 행성에 의해 차단되는 에너지 량이 단면적에 비례한다고 배웠다. 하지만 이 행성이 다시 우주로 내보내는 복사에 대해선 다루지 않았다. 흡수되는 에너지와 방출하는 에너지 모두 행성의 지름에 비례한다. 따라서 흡수량과 복사량을 서로 상쇄할 수 있다. 이는 행성의 지름이 표면온도 공식에 등장하지 않는 이유다.

* 동일한 차원의 항끼리 더하거나 빼도 물리공식에 영향을 주지 않는다.
* 흡수면적에서 복사면적을 빼면 총면적이다. 지구에서 측정하는 별의 복사 에너지량은 총면적에 의한 결과다. 그런데 거주가능한 행성을 찾기 위해 표면적 온도를 구해야 한다. 표면적 온도는 입사량과 방출 에너지량을 알아야 한다.

[03:57] 행성의 표면 온도 공식은 네배의 시그마로 나눈 입사 에너지 플럭스의 네제곱 근이다. 이때 시그마(σ)는 스테판-볼츠만 상수다. 이 공식이 어떻게 나왔는지 지금 알 필요는 없고 그냥 있는대로 사용하자. 만일 알고 싶다면 참고자료를 찾아보라.



[참고]
1.  Planetary equilibrium temperature ,
    https://en.wikipedia.org/wiki/Planetary_equilibrium_temperature
2. [마구잡이 수학] 1.4 요약 및 추가 문제 ,
   문제 1-12, 차원으로 풀어보는 슈테판 볼츠만 공식
   http://math-mass-goodkook.blogspot.com/2018/05/14.html


[04:15] 이 공식으로 계산한 불모지와 거주가능지의 온도 차이는 단 10켈빈에 불과하다. 물론 이 계산에서 자연적인 온실효과(natural greenhouse effect) 같은 요인은 무시했다. 이 효과는 대기의 조성과 밀접한 관련이 있고 행성의 표면 온도에 큰 영향을 미친다. 금성의 경우 자연온식효과로 인한 지표온도 상승은 500 켈빈이다. 짙은 대기는 온도를 순환 시키기도 하는데 해를 받는 낮의 온도와 그늘진 밤의 온도차가 작다. (대기가 없는 달의 온도차)



[04:45] 우리 지구 만한 행성의 존재를 알기 위해 주성의 크기가 어느정도 인지 알 필요가 있다. 하지만 우리가 측정하는 것은 행성에 의해 차단되는 빛의 비율일 뿐이다. 즉, 행성의 투영면적 대 주성의 단면적의 비다. 작은 행성이 작은 별을 공전할 때의 별빛 강도 변화비나 큰 행성이 큰 별을 공전하며 가렸을 때의 비는 같다.



[05:04] 별의 지름 정보를 차용하여 이 공식을 사용하여 행성의 지름을 구할 수 있다. 지구의 지름으로 측정된 행성의 지름은 태양의 지름으로 측정한 별의 직경에 횡단 깊이(Transit Depth, 행성이 별 앞을 지날 때 가려지는 별빛의 감소량)를 곱한 것과 같다.



[05:18] 횡단 깊이에 제곱근을 취한 이유는 별빛 감소량을 면적의 비례식인데 우리가 원하는 것은 직경(길이)이기 때문이다. 행성의 반경을 이런식으로 알아냄으로써 이 행성의 딱딱한 지표면을 가지고 있는지  생명채가 존재하기에 충분한지 알아낼 수 있다. 별과 행성의 자료표를 합침으로 분석할 가치있는 다양한 추가 정보를 제공 받을 수 있다. 이는 최신 외계행성 연구에 있어서 특히 유용하다. 수차례 우주개발 임무를 통해 획들한 자료를 동시에 활용할 수 있기 때문이다.


2018년 7월 13일 금요일

3주/4강: SQL 약간 고급 사용법

[커세라 강좌 소개] 자료기반 천문학(Data-Driven Astronomy)

-----------------------------------------------------------------
Week 3: Querying data using SQL
제3주차: 스퀠(SQL)을 이용한 자료 조회
- How to use databases to analyse your data
  획득한 자료를 분석하기 위해 데이터베이스 활용하는 법
- Investigating exoplanets in other solar systems
  다른 태양계의 외계행성 탐사
-----------------------------------------------------------------
-----------------------------------------------------------------
-----------------------------------------------------------------
-----------------------------------------------------------------
4강: SQL 약간 고급 사용법

[강의대본]


[00:05] 이제까지 SQL의 기본 조회문을 살펴봤다. 간단한 SELECT, FROM, WHERE가 들어간 문장으로 표(table)에서 간단한 조건을 주어 이에 맞는 정보를 추출해 냈다. 이번 강의는 조회문의 좀더 고급의 기능을 살펴보겠다. 외계행성 관측자료를 담은 데이터 베이스를 계속 사용할 텐데 케플러 우주망원경 임무를 통해 얻은 외계행성의 탐사자료들이다.


[00:27] SQL 문으로 가능한 일곱개의 구문이 있다. 앞서 SELECT, FROM 그리고 WHERE 가 들어간 문장을 사용해 봤었고 아울러 GROUP BY를 사용해 여러 행(row)을 한데 묶을 수 있었다. 그리고 HAVING 구문인데 한데묶은 자료(group data)중 일부를 걸러내는 용도로 사용한다. ORDER BY 는 묶은 결과를 정렬(sort)할 때 쓰이고, LIMIT는 말 그대로 조회에 의해 얻은 행의 갯수를 제한 할 때 쓰인다.

[00:49] 이번 강의는 SELECT 문을 좀더 효과적으로 사용하는 방법에 대해 배운다. 시작하기 전에, 기술 명령에 대해 설명을 덧붙이고자 한다.



포스트그레스큐엘(PostgresSQL, 확장표준 SQL)에서 \d 라고 쓰는데 지금 사용중인 데이터베이스에서 표의 구조를 들여다 볼 수 있다. 이는 원하는 조회를 결정 할 때 매우 유용하다.

[01:09] 이 시점에서 먼저 NULL 값의 중요한 의미를 짚어보고 가자. 아마도 NULL의 의미를 '값 없음(no value)'이라고 알고 있을 것이다. 하지만 NULL에는 세가지 다른 의미를 가지고 사용되고 있다. 첫째, NULL 은 '해당사항 없음(not applicable)'의 뜻이 있다.



예를 들어 외계행성 데이터베이스에서 케플러 명(kepler_name)이 지정되지 않았을 경우다. 이를 긍정오류(false positive)라고 하는데 오류(false)가 아니라 아직 명명되지 않은 상태라는 뜻이다.

[01:35] 둘째, NULL은 '아직 모른다'는 의미다. 예를 들어 외계행성의 밀도는 무게와 반경으로 계산 되는데 아직 측정되지 않았다는 뜻이다.

* 천체의 무게는 만유인력 법칙에 따라 공전 반경을 알아야 한다. 공전 주기가 긴 경우 측정에 상당한 관측 기간이 요구된다.



[01:45] 세번째, NULL은 '아직 정의되지 않음'의 의미다. 예를 들어, 외계행성의 공전주기가 데이터베이스에 정의되어 있지 않은 경우다.



[01:55] 여기서 정말로 중요한 것은 널(NULL)은 값이 '없다'라는 점이다. 값이 널이 될 수 있는데 널과 '같다'라고 등가(equality) 판단 할 수 없다. 따라서 '=NULL' 과 같은 연산은 작동하지 않는다. 사실 널은 자기 자신을 비롯해 어떤 값과도 비교대상이 될 수 없다. 단지 'IS NULL' 구문으로 값의 부재를 확인 할 수 있을 뿐이다. 따라서 공란 자료와 자료 존재가 혼동 되지 않을 것이다. (다른 결과를 얻게될 것이다.)



[02:22] 때로 이미 구성된 데이터베이스 표에 없는 항목을 가지고 계산해야 하는 경우도 있다. 예를 들어 별로부터 방출된 빛이 행성에 의해 차단된 에너지의 양을 계산하고 싶다고 하자. 이는 행성이 받을 에너지 량이라고 볼 수 있는데 행성의 지표면에 물의 존재를 판단할 요인이기도 하다. 행성은 거의 구의 모습을 할 것이므로 단면은 원이다. 이 원의 면적은 곧 행성에 쏟아지는 별빛의 양이다. 확인된 외계행성에 의해 차단되는 면적을 계산하여 조회 해보자. 



[03:02]  명령어 AS 가 데이터 베이스의 열 표제 area 와 함께 사용되 것이 눈에 띈다. 또한 조회문장에 IS NOT NULL 이 사용되고 있다. 소용없는 계산에 시간을 낭비하고 싶지 않을 것이다. 위의 예제에서 이름이 공식적으로 명명되지 않는 행성은 굳이 면적을 계산하지 않는다.



[03:22] 또한 SQL 언어에서 제공하는 함수를 쓸모있게 사용했다. 반지름을 게곱하기 위해 함수 POWER()를 사용 했다. 그외에도 상당량의 내장 함수(built-in functions)가 제공된다. 또다른 유용한 함수로 ROUND 가 있다. 계산을 수행 한 결과 소숫점 아래로 매우 긴 숫자가 딸려오기 마련이다. 측정은 오차가 있으므로 계산으로 나온 긴 소숫점 아래 숫자는 큰 의미 없다.(측정치와 계산 값을 비교하는 경우) ROUND 함수를 사용하여 숫자의 정밀도를 완화할 수 있다. 온-라인 과제에서 그외 내장 함수를 연습해 보기로 하자.

[참조]
1. PostrgesSQL, https://www.postgresql.org/
2. PostgresSQL Useful Functions,
   https://www.tutorialspoint.com/postgresql/postgresql_useful_functions.htm
3. PostgresSQL - C/C++ Interface,
   https://www.tutorialspoint.com/postgresql/postgresql_c_cpp.htm
4. PostgresSQL - Python Interface,
   https://www.tutorialspoint.com/postgresql/postgresql_python.htm

[03:50] 이번 강의는 다양한 함수 중에서 일부 몇가지와 당장 익혀야하는 약간의 SQL 명령어를 살펴봤을 뿐이다. 다음 강의는 SQL의 막강한 기능을 좀더 알아볼 것이며 대규모 데이터 베이스를 다뤄본다.


2018년 7월 12일 목요일

3주/3강: SQL로 천문관측 데이터베이스 자료 검색

[커세라 강좌 소개] 자료기반 천문학(Data-Driven Astronomy)

-----------------------------------------------------------------
Week 3: Querying data using SQL
제3주차: 스퀠(SQL)을 이용한 자료 조회
- How to use databases to analyse your data
  획득한 자료를 분석하기 위해 데이터베이스 활용하는 법
- Investigating exoplanets in other solar systems
  다른 태양계의 외계행성 탐사
-----------------------------------------------------------------
-----------------------------------------------------------------
-----------------------------------------------------------------
3강: SQL로 천문관측 데이터베이스 자료 검색

[강의대본]

[00:06] 이번 강의에서 데이터 베이스 조회(query)를 직접 해보고 어떻게 작동하는지 보기로 하자. 모든 조회는 구조화된 조회언어(SQL, structured query language)로 작성된다. 아마 사람들이 SQL을 '스퀠'이라고 부르는 것을 들어봤을 것이다. SQL은 선언형(declarative) 프로그래밍 언어다. 여러분이 아마 사용해 봤을 C 나 파이썬 같은 절차형(procedural) 언어와는 작동 방식이 다소 다르다. 절차형 언어가 목적에 접근하는 순서를 서술하는 반면 선언형 언어는 원하는 것을 정의한다.

* 구조적(structured): 계층'구조'의 의미로 독립된 함수를 정의 할 수 있다. 함수의 독립은 변수의 완전한 지역화도 포함된다. 함수 내에서 다른 함수를 호출 하므로써 상하위 함수관계를 갖는다. 대부분 컴퓨터 언어는 '구조화' 되어 있다. 

[절차형언어]------------------------------
OPEN_DATABASE_FILE(exoplanet);
WHILE(NOT END_OF_FILE)
BEGIN
  IF kepler_id==545661 THEN
    GET kepler_name;
    BREAK;
  ELSE
    NEXT_FILE_POINTER();
  ENDIF
END

[선언형언어]------------------------------
SELECT kepler_name FROM exoplanet WHERE kepler_id EQ 5456651;

[00:33] 데이터 베이스에 보유된 자료들은 모두 표로 저장되어 있다. 이번 강좌에서 표로 만들어진 외계행성에 관한 정보를 사용할 것이다. 이 표는 NASA의 외계행성 자료 보관철에서 일부 따와 준비했다.



[00:43] 각 행(row)에 행성에 관한 정보를 담고 있고 열(column)은 그 행성의 속성(attribute) 또는 특성(property)을 기술한다. 예를 들어 두번째 행에 케플러 239c(Kepler-239 c)라는 이름(kepler_name)의 행성이 있다. 이 행성은 외계행성으로 확인된(CONFIRMED) 상태(status)이며, 공전 주기(orbit period)가 56일이다. 그리고 반경(radius)이 지구보다 2.19배 크다. 가장 왼쪽 열은 이 행성이 속한 별의 식별 부호다(kepler_id).

[01:09] 각 속성은 허용될 값의 범위가 있는데 흔히 자료형(data type)이라는 것이다. 예를 들어 '상태(status)'라는 속성은 문자열(string) 형식의 자료를 담을 수 있고, kepler_id는 정수형(integer)이다. SQL의 조회에서 한개 이상의 표(table)를 인수로 취하며 조회결과로 새로운 표로 되돌려준다. 자 이제 첫번째 조회를 시도해 보자.

SELECT kepler_name FROM exoplanet WHERE kepler_id = '5456651';

[01:35] 영어 평상문으로 하면 이런 뜻이다.

"exoplanet라는 표에서 kepler_id 열의 값이 5456651과 일치하는 행을 찾아라. 그렇게 찾은 행에서 kepler_name 이라는 열의 값을 가져오라." 



[01:49] 이 조회문의 결과는 다음과 같다. 케플러 ID가 5456651인 별은 두개의 행성을 가지고 있는데 그 이름이 각각 Kepler-239b 와 Kepler-239c 다. 관례에 의하면 행성의 이름은 케플러 숫자 뒤에 소문자를 붙인다. 소문자 a 는 없는데 행성계의 중심별에 붙이기 때문이다.



[02:12] 앞서 본 대로 SQL의 SELECT 조회문은 세개의 부분으로 나뉜다.  먼저 조회에 사용할 표를 입력으로 명시하고 그 표에서 조건에 맞는 행을 찾아내어 결과표를 만든다. 그리고 결과로 만든 표에서 열에 해당하는 값을 가져온다. 이 프로그램에는 그외 다른 어떤 정보도 포함하지 않는다. 자료가 어떻게 저장되었는지 어떤 형식을 취하는지 따질 필요도 없다. 값을 어떻게 읽어내며 어떻게 전달하는지도 명시하지 않는다. 또는 파이썬 처럼 절차형 언어에서 읽어올 자료형에 대한 고려도 필요없다.

*절차적 언어느 경우 값을 읽고 가져오는 방법을 지정한다. 예를 들어,

int kepler_id = 5456651; // 정수형 데이터 읽어 변수에 담기
char *kepler_name;
string_copy(kepler_name, "Kepler-239b"); // 문자열 데이터 읽기

[02:42] 그럼 이 조회문을 실행하면 어떤일이 벌어질까? 조회문이 데이터베이스 서버로 전달되면 일련의 점검단계를 거친다. 이 문장을 실행하기 위한 승인 인데 자료에 접근하기 위해 승인되었는지, 문장의 문법이 요건에 맞는지 검사한다. 이 검사에 하자가 없다면 조회문은 조회 최적화 장치에 전달된다. 이 장치는 조회를 실행하기 위한 가장 효율적인 방법을 결정한다. (파이썬으로 프로그램을 작성 할 때 검색 알고리즘을 직접 작성 했었다.) 최적화 장치는 조회를 수행하기 위해 서버에서 사용할 실행 계획을 세운다. (조회에 적합한 검색 알고리즘을 선택한다.) 끝으로 조회 결과를 되돌려준다.



[03:14] 이 과정은  컴퓨터 과학의 여러 사항들을 포함하고 있다. 하지만 (컴퓨터 기술자가 아닌) 과학자로서 무엇보다도 유용한 점은 그 구체적인 절차를 직접 만들어 내야 하는 입장이 아니라면 이런 절차를 알고 있어야 할 필요가 없다는 것이다. 이번 강의의 끝에 가서 좀더 복잡한 조회 문장을 다뤄보기로 한다.

[03:29] 데이터 베이스에서 자료를 고를 때 '~보다 크다' 또는 '작다'와 같은 관계 연산자를 사용 했다. 이번에는 우리의 자료뭉치에서 지구의 지름의 0.6배보다 작은 행성을 모두 찾아 보기로 하자.

SELECT * FROM exoplanet WHERE radius < 0.6;

(주) 위 문장에서 '*'는 와일드카드 문자로 '모든'의 의미다.

[03:42] 이 조회문으로 같은 자료철에서 두개의 행성을 조회해 냈다. 둘다 같은 행성계에 있다. 그 둘은 Kepler-102b 와 Kepler-102c 다. Kepler-102는 다행성계로 잘 알려져 있는데 다섯개의 행성을 가지고 있으며 지구 지름에 비해 0.5에서 2.5배에 이른다.



[03:59] 행성의 크기별 조회 목록은 유용하다. 행성의 크기로 지표면의 상태를 추청해볼 수 있기 때문이다. 목성처럼 거대하면 기체행성이 된다. 반면 지구보다 작은 행성은 바위 투성일 가능성이 높다. 초 지구라고 하는 행성이 관심의 대상이다. 우리 태양계에는 지구보다 조금 큰 부류의 행성이 존재하지 않는다. 따라서 우리는 그런 행성이 어떤 모습을 하게될지 알지 못한다. 그 행성에 매우 깊은 바다가 존재할까? 해왕성처럼 기체행성 일까? 혹은 금성처럼 바위 투성이 일까? 지름으로 행성을 분류해 놓고 천문학자들은 행성 과학 분야의 후속 연구를 진행 할 수 있을 것이다.

2018년 7월 11일 수요일

3주/2강:외계 행성을 찾아서

[커세라 강좌 소개] 자료기반 천문학(Data-Driven Astronomy)

-----------------------------------------------------------------
Week 3: Querying data using SQL
제3주차: 스퀠(SQL)을 이용한 자료 조회
- How to use databases to analyse your data
  획득한 자료를 분석하기 위해 데이터베이스 활용하는 법
- Investigating exoplanets in other solar systems
  다른 태양계의 외계행성 탐사
-----------------------------------------------------------------
-----------------------------------------------------------------
2강: 외계 행성을 찾아서



[강의대본]


[00:02] 외계행성, 다른 별의 주위를 공전하는 행성이다. 외계행성(exoplanet)은 최근 천문학계에서 아주 뜨거운 주제가 됐다.


[00:08] 외계행성에 관한 과학적 연구는 1990년대로 거슬러 올라가지만 코롯 CoRoT, 케플러 Kepler 같은 우주망원경 덕에 이분야의 연구가 가속화 됐다.



[00:17] 90년대로 거슬러 가보면 연평균 한두개 정도 발견되던 것이 지금은 특히 케플러 망원경 덕에 매년 백여개의 행성이 새롭게 확인되고 있고 천여개의 후보군이 발견된다. 케플러 망원경이 많이 발견해 내기도 했지만 외계행성에 대한 우리의 지식 또한 변해온 탓이다.



[00:34] 행성을 감지해내는 몇가지 방법들이 있다.  초창기에 발견되던 외계행성은 주로 매우 큰(무거운) 것들이 주를 이뤘다. 대부분 목성 크기의 행성이었고 해왕성(Neptune)보다 가벼운 경우는 15%에 불과 했다.



[00:49] 그런데 케플러 망원경이 등장하자 대부분 행성들이 실제로는 아주 작다는 것이 밝혀졌다. 실제로, 해왕성보다 큰 행성은 15% 미만이었다. 그리고 지구만한 크기의 행성이 우리가 생각 했던 것보다 많았다.




[01:00] 대부분 흔한 행성은 모두 초지구(Super-Earths) 혹은 소해왕성(Mini-Neptunes)이라고 부를 만 하다. 우리의 태양계에 이와 직접 견줄 행성이 없어서 실제로 어떤 모습을 하고 있는지 알 수 없다. 그 행성들은 바위 투성이 일 수도 있고 표면 전체가 깊은 물로 뒤덮혀 있을지 알 수 없다. 케플러 망원경이 만들어 놓은 거대한 분량의 자료에서 지금도 외계행성을 추정하기 위한 연구가 계속되고 있다. 한가지 분명한 사실은 목성이나 토성처럼 거대한 가스 행성은 아주 드믈다. 회고해 보면 초기에 발견한 외계행성이 주로 거대한 목성 크기 였던 이유가 아마 발견하기 수월했기 때문이다.



[01:41] 하지만 케플러 망원경은 발견하기 어려운 행성을 특정하기 위해 만들어 졌고 특히 우리 은하내에 지구와 비슷한 행성의 수를 헤아리기 위해 설계되었다. 매우 우수한 감도를 가지고 있어서 아주 흥미로운 행성계를 발견 하기도 했는데, 여섯개의 행성을 가진 케플러 11, 다섯개의 행성을 보유한 케플러 186등으로 행성의 크기는 지구와 비슷하거나 절반 만 했다. 그중 하나가 매우 흥미로운데 케플러 186F로 이제껏 찾은 중에 지구와 매우 흡사하다.



[02:12] 케플러 망원경은 '통과(transit)'방법으로 행성을 찾는다. 행성이 별 앞을 지날 때 빛이 약간 차단된다. 망원경은 이 잠깐 동안 밝기가 줄어드는 것을 감지한다. 하지만 행성의 공전 궤도가 망원경의 시선과 일치하는 경우에 만 이 방법이 통한다.



[02:26] 우주에서 행성 궤도의 축이 갖는 각도는 매우 무작위 이기 때문에 '통과' 방법으로 관측 될 만한 공전축을 가질 확률은 0.5%가량에 불과하다. 따라서 많은 행성을 발견하고 싶으면 많은 별을 관측해야 한다.



[02:44] 케플러 망원경의 시야각 내에 약 오십만개 이상의 별이 들어오고 그중 십오만개의 별이 관측대상으로 선정된다. 그리고 케플러는 이 별들을 동시에 관측한다. (한 시야각에 들어온 모든별을 보고있다. 행성이 통과할 때 변화하는 빛의 양을 관측하는 것이므로 일년간 같은 방향을 보고 있다)









[02:56] 외계행성이 발견되면 통과한다는 그 사실만으로 그 행성의 특징을 잡아낸다. 특히 통과할 때 변하는 빛의 변화하는 깊이(변화량)으로 별과 행성의 크기비를 알 수 있다.



한가지 문제는 크기는 모두 상대적인 비율이라는 점이다. 통과의 관측으로 큰 별에 딸린 큰 행성 또는 작은 별을 공전하는 작은 행성인지 확실치 않다. 행성의 실제 크기가 어떤 경우든 관측한 신호는 같다.



[03:24] 행성 지름의 추정범위를 좀더 좁히려면 별에 대해 살펴봐야 한다.

* 빛을 내지 않는 멀리 떨어진 행성을 직접 관측할 수 없다. 별(항성)에 대해 더 많은 정보를 가지면 그에 딸린 행성도 자세히 알 수 있다. 

[03:29] 이 문제를 해결하기 위해 케플러는 망원경의 시야각 내에 있는 수십만개의 별들의 정보를 수록한 목록을 활용한다. 활용하는 항목 특성의 하나로 별의 지름인데 이를 토대로 감지된 각 외계행성의 반경을 계산한다. 이런 방법으로 과학자들은 발견되는 수가 급격히 증가하는 외계행성을 일일이 규정 할 수 있게 됐다.



--------------------------------------------------------------------------
[퀴즈] 답을 선택하고 그 이유도 함께 설명하시오.

Exoplanets - test your understanding
Quiz, 5 questions

Question 1 (b)
Which of the following methods has led to the most discoveries of planets orbiting near their parent stars?

a) Detection of the gravitational effect of orbiting planets in the spectrum of light from a star.
b) Detection of the drop in light as a planet passes in front of its host star.
c) Detection of infrared light emitted by planets.
d) Detection of the shift of a star's position against the sky due to the gravitational pull of the planet.

Question 2 (c)
Approximately how much brighter is a Sun-like star than the reflected light from a planet orbiting around it?

a) Ten thousand times brighter.
b) A hundred times brighter.
c) A billion times brighter.
d) A million times brighter.

Question 3 (b)
What effect most directly determines the depth of the dip in a star's brightness due to the transit of a planet?

a) The planet's mass.
b) The planet's size.
c) The size of the planet's orbit.
d) The eccentricity of the planet's orbit.

Question 4 (d)
Planets discovered around nearby stars are likely to be relatively massive and lie very close to their parent stars. Why is this?

a) These are the most common type of planet.
b) Few planetary systems have giant planets further from the star than Earth is from the Sun.
c) Smaller, rocky planets are expected to lie closer to the star but are undetectable.
d) Detection of smaller and less massive planets is still quite difficult.

Question 5 (b)
Why are many of the newly detected extrasolar planets called ‘hot Jupiters’?

a) Their masses and composition are similar to what we would expect if Jupiter were hotter.
b) Their masses are similar to Jupiter but they orbit very close to the central star.
c) The planets tend to be detected around more massive, hotter stars than our Sun.
d) Their masses are similar to Jupiter but their composition is similar to Mercury.

2018년 7월 10일 화요일

3주/1강: 조직적인 자료관리(데이터베이스 활용 입문)

[커세라 강좌 소개] 자료기반 천문학(Data-Driven Astronomy)
https://www.coursera.org/learn/data-driven-astronomy

-----------------------------------------------------------------
Week 3: Querying data using SQL
제3주차: 스퀠(SQL)을 이용한 자료 조회
- How to use databases to analyse your data
  획득한 자료를 분석하기 위해 데이터베이스 활용하는 법
- Investigating exoplanets in other solar systems
  다른 태양계의 외계행성 탐사
-----------------------------------------------------------------
1강: 조직적인 자료관리(데이터베이스 활용 입문)
Lesson 1. Organizing your data / 한글자막 / 영문자막

[강의대본]


[00:06] 천문학자 뿐만 아니라 과학자들은 흔히 (관측, 실험)목록을 만든다. 이 목록안에 수천에서 백만개의 항목들을 망라한다. 그리고 각 항목 마다 백여개의 특성을 가지고 있기 마련이다. 이들 자료들의 규모가 커지고 복잡해짐에 따라 그 자료들을 조직화하고 효과적으로 접근하는 일이 아주 중요하게 됐다. 이번주 강의는 자료를 조직화하는 일반적인 한 방법을 살펴보려고 한다. 바로 관계형 데이터 베이스라는 것이다(Relational-Database).


[00:28] 먼저 외계 행성계 목록을 가지고 시작해 보자. 이 목록은 공전하는 행성을 가지고 있다고 알려진 우리 태양계 밖의 별을 수집해놓았다. 이번주 강좌를 끝까지 마치면 기초적인 과학항목에 답하기 위한 검색에 SQL을 사용하게 된다. 그 질문항목의 예를 들면 중심별에서 생명가능 거주지역에 지구만한 크기의 외계행성이 공전할 수 있는 궤도의 숫자가 몇개나 가능할까? 다른말로 하면 그 질문은 얼마나 많은 생명이 존재할 외계행성을 가지고 있을까?

[00:52] 우리 태양계넘어 주위에 행성이 존재 하는 별의 발견은 우리 시대에 아주 획기적인 과학적 발견이다. 계속 이어지는 발견으로 이 분야의 연구에 많은 노력이 들어 갔는데 상당량의 결과가 케플러 우주 망원경으로 별의 앞을 통과하는 물체를 관측(transit method)하는 중에 나왔다. 이에 관한 사항은 다음 강좌에서 좀더 다룰 것이다.



[01:10] 외계행성을 자료 중 가장 큰것은 2016 벌의 기록인데, 케플러 팀이 천여개에 달하는 새로운 행성을 확인하기 위해 통계적으로 유효성을 적용하여 얻은 것이다. 처리해야 할 외계행성 자료가 너무 많기 때문에 이 정도가 가능한 숫자다. 발견된 수천에 이르는 외계행성 중 하나하나 마다 살펴봐야 할 기본 특성(생명체가 가능한 여부)의 량이 엄청나다. 예를 들어 행성의 공전주기, 그 행성의 공전 궤도의 중심 별의 종류, 혹은 그 행성의 표면온도 같은 것들이다. 행성의 표면 온도는 생명체의 거주 가능성을 알아보는데 매우 중요한 항목이다. 거주가능한(habitable) 행성이라고 추정하려면 표면에 물이 있어야 한다. 만일 그 행성이 별과 너무 가깝다면 행성의 표면은 너무 뜨거워 물이 끓어 증발되어 버렸을 것이다.



[01:55] 좋은 예로 케플러 10b 인데 궤도가 별에 너무 가까워서 평균 온도가 거의 2천도 켈빈에 달한다. 한편 별에서 멀리 공전하는 행성은 너무 추워서 마치 우리 태양계의 외부행성 처럼 표면이 모두 얼음으로 덮혀있다. 물이 액체로 존재하는 적당한 온도를 유지하는 지점에서 논의를 시작하자.



[02:16] 흔히 거주 가능한 지역으로 더 잘 알려진 흔리 골디락스(Goldilocks) 지역 말이다. 자료에 기반한 연구의 기본사항 중 하나로 우리가 가진 자료에 대해 의심을 해본다. 일예로, 지구보다 작은 외계행성이 얼마나 많은지 알고 싶다(지구보다 작은 행성은 거주가능성이 낮으므로 걸러내기로 하자). 전통적으로 과학자들은 간단한 프로그램을 작성하여 이에 대해 답해왔다. 그 프로그램은 아마 시스템 명령어 묶음(Shell), 파이썬 또는 잘 아는 컴퓨터 언어를 사용해서 작성했으며 문자로 기록된 컴퓨터 자료철(text file)에서 자료를 읽고 일련의 가정문(if statement)을 사용하여 그 자료들을 걸러 냈다.

* 검색 프로그램은 수집된 자료중 조건에 맞는 항목을 찾아내는 문장들로 가득하다. 조건을 찾기 위한 컴퓨터 언어의 문장은 당연히 if 문이다.

찾고자 하는 사항이 명료하다면 이런 방식이 효과있고 그 문제에 딱 맞춘 프로그램이 된다. 하지만 만일 다른 연구자가 우리가 수집한 자료를 활용하고 싶다면 어떻게 할까?

[02:53] 우리는 그가 원하는 사항을 미리 알 수 없다. 혹은 그가 걸러내고 싶은 자료의 조건이 무엇인지 모른다. 또한 우리의 자료에 대한 보안이나 체계가 흐트려지지 않을지 염려스럽다. 그리고 우리 방식대로 자료들을 정기적으로 갱신하고 싶다. 그런데 누군가 이 자료를 들쑤셔 놓지 않을까 걱정이다. 이런 곤란한 상황에 대처하기 위한 좋은 방안으로 흔히 데이터 베이스라 부르는 자료 관리 시스템을 활용한다. 대규모 자료를 다루는 곳이라면 안쓰이는 데가 없다. 은행, 대학의 수강신청, 건강보험 시스템등.

[03:21] 과학분야에서 데이터베이스가 점점더 많이 사용되는 추세다.(측정기술의 발전 덕에 관측 및 실험자료가 방대해 지고 있다) 천문관측 자료에 데이터베이스를 활용한 가장 잘 알려진 초창기 예가 슬로언 디지털 스카이 서베이(SDSS)다. 마이크로소프트사의 데이터베이스 고수인 짐 그레이에 의해 이 분야(천문학과 IT기술 활용)가 개척되었다. SDSS는 대규모 천문관측 자료를 온-라인으로 공개하는 초기 프로젝트중 하나였다. 전 하늘에 걸친 관측 자료와 연관된 정보의 모든 자료를 공개한다.

* 사진은 물론 위치 좌표, 특이사항등을 포함, 심지어 오류난 관측 자료까지 모두 공개한다. 진흙속에 진주가 있을지도 모르므로.



[03:39] 자료와 검색할 명령창을 제공하는데 사용자가 원하는 항목을 자료 서버에 요청 한다. 온-라인에 공개되어 누구나 사용가능 하므로 수백만 건의 사용자 검색 요청이 가능하다.이는 향후 있을 천문자료 관리 방법에 커다란 영향을 주었다. 과학자의 입장에서 봤을 때 아마도 데이터베이스의 가장 강력한 기능은 검색 요청을 주기만 하면 다 찾아준다는 점일 것이다. 자료를 관리하는 프로그램을 직접 짜야 하는 부담도 없다. 데이터베이스 시스템은 사용자가 원하는 모든 것을 갖추고 있다. 그러니까 자료의 규모가 커져도 걱정할 것이 없다는 뜻이다.

* 지난주 강좌의 가장 큰 숙제는 자료규모의 증가에 따른 처리시간이 급격하게 늘어나는 문제를 푸는 것이었다. 자료를 읽어내고 최적화된 검색 알고리즘을 직접 개발하고 작성 해야 했다.
* 데이터 베이스 시스템을 도입하면 검색용 키워드만 활용하면 된다. 자료 화일을 읽고 빠르게 검색하는 일은 데이터 베이스 시스템 내에 모두 내장되어있다.

[04:08] 대규모 자료철을 다룰 때 핵심적인 요령을 하나 꼽자면 사용자의 특정 용도에 맞는 바른 답(검색어)를 선택하는가에 달렸다. 이번주 강좌는 원천 자료파일을 다룰 때에 비해 데이터 베이스를 활용 하는 경우 얻는 장점을 다루기로 한다. 데이터베이스는 어떻게 자료들을 조직화 하고 SQL을 활용하여 데이터베이스에서 원하는 자료를 검색하도록 조회하는지 설명한다. SQL의 사용법을 배우게 될 것이며 표준 조회명령으로 데이터베이스에서 외계행성을 찾아보기로 한다. 이는 우리가 얼마나 많은 외계행성을 찾아낼지 보여주고 생명을 유지할 바른 인수 조건이 무엇인지도 알게된다.