天文学系データサイエンティストの略歴1|天文学とプログラミング

C言語の例 天文学
修士時代に書いたC言語の一部

Ciao!みなさんこんにちは!このブログでは主に
(1)pythonデータ解析,
(2)DTM音楽作成,
(3)お料理,
(4)博士転職
の4つのトピックについて発信していきます。
初回の今回は著者、The Silkwormsの天文学系データサイエンティストとしての略歴を一部ご紹介!
天文学系データサイエンティストって何者?という疑問に答えます。
天文学とデータサイエンティストの基礎スキルであるプログラミングの関係をお話します。

Abstract | プログラミングは天文学者の基礎スキル

天文学とプログラミング

プログラミングは天文学者の基礎スキルです。
天文学とは、観測、理論計算、コンピューターシミュレーションなどを駆使して宇宙の過去・現在・未来を解き明かす学問です。
私は観測から宇宙を解明するタイプの天文学者です。観測をベースにした天文学では、大型望遠鏡に搭載されたカメラで宇宙の写真を取り、その画像データから興味のある天体の謎に迫ります。
この過程では、画像データの解析、画像から得られた情報の統計的な分析、物理学的な分析、図表の作成といったあらゆる場面でプログラミングが必要になります。

データサイエンティストとプログラミング

一方のデータサイエンティストは、プログラミングや統計学を駆使して社会のデータから社会課題を解決する職業です。
こちらもプログラミングは基礎スキルといって良いでしょう。データサイエンティストがどのような職業で、どのようにプログラミングを使っているかについては別の機会にお話します。

天文学系データサイエンティストとpython

私の場合、C言語でプログラミングを始め、pythonにプログラミング言語が切り替わりました。
今はpythonがメインの言語になっています。このブログのpythonデータ解析の分野ではpythonを使った計算豆知識の紹介、特に数値計算ライブラリnumpyを駆使した様々な事例を扱っていきます。ぜひ楽しみにしていてください。

天文学との出会い | 一番わからないものへの挑戦

天文学とは宇宙の過去・現在・未来を解明する学問

私は大学(学部後半)、大学院(修士課程)、大学院(博士課程)、博士研究員(ポスドク)の約10年に加え、民間にシフト後も個人研究として天文学の研究をしています。
天文学とは、観測、理論計算、コンピューターシミュレーションなどを駆使し、宇宙がどのようにしてできたのか(過去)、どのような状態なのか(現在)、このあとどうなるのか(未来)を解き明かす学問です。
日本で天文学科・天文学専攻がある大学は数少なく、世間ではあまり知られていない学問かもしれませんね。天文学についてのお話も、またどこかでしていきたいと思います。

天文学への道 | 天文、宇宙物理、宇宙工学から天文を選択

私が天文学の道に明確に進んだのは、大学の学部3-4年生で学科を決めるときです。
私が通っていた大学には天文学科、物理学科(宇宙物理)、宇宙工学の3つの選択肢がありました。
天文学科と物理学科はどちらも理学部に所属しており、大きな違いはありません。宇宙工学は工学部です。ロケットを飛ばしたり、宇宙で使える技術を研究する学問をするので宇宙そのものの謎に迫るわけではありません。
宇宙そのものを研究できる天文学を選びました。

プログラミングとの出会い | C言語をゴリゴリ書いた日々

天文学とプログラミング

天文学には、
(1)観測,
(2)理論計算,
(3)コンピューターシミュレーション
の3つのアプローチがあります。
私は(1)の観測から宇宙の謎を解明するタイプの天文学者です。
観測といっても、望遠鏡を夜な夜な覗くわけではありません。望遠鏡に搭載されたカメラで画像データを取得します(可視光の観測ならCCDカメラが主流です)。
画像データを分析することで、興味のある星や銀河などの天体の情報を得るわけです。この画像データ、小さい場合でも200万画素、大きい場合には8億画素の画像が数十枚あるので、手作業で分析をするわけにはいきません。
そこで天文学者はプログラミングを使って画像を分析します。画像から天体の情報を取得した後も、統計的な比較・解釈、物理学的な計算、図表の作成など様々な場面でプログラミングを駆使します。

遠くの銀河(赤), 夜空の発光(青), ノイズ(緑)のスペクトルをシミュレーションした例。横軸は波長(1Aは0.1ナノメートル)、縦軸は光の強さです。このような図を作るのにもプログラミングを駆使します。

C言語から始まったプログラミング生活

2020年末の今、天文学におけるプログラミングの主流はpythonと言って良いと思います。
ただし、ひと時代前はC言語、その前はFortranが主流でした。私がC言語でプログラミングを学んだのは学部4年生の頃、卒業研究で必要になり独学で勉強をはじめました。

大学院修士課程では画像解析、統計分析、場合によっては図表の作成までC言語でプログラムを書きました。
C言語はpythonに比べると原始的なプログラミング言語で、しっかり書けるようになるまでに時間がかかる一方、書けるようになると複雑で高速なプログラムを作成できるようになります。
特にコンピューター上のメモリ(←作業場所ぐらいのイメージ)の割り当てや開放を明示的に行う、ポインタを使ったループ処理で高速化するなど、pythonではあまり意識されないポイントがあります。
このような処理のために、自作ライブラリを作成する(合計何万行になるかも)ということもありました。pythonに以降してからも、しばらくは複雑な処理をするためにC言語を書くことがありましたが、ここ2-3年はめっきり書かなくなりました。

pythonとの出会い | あれ、カンタンやんこれ!

新しい観測カメラの解析システムをpythonで作る!

pythonとの出会いは、研究室で開発していた新しいCCDカメラのデータ解析のためのプログラミングです。
観測系天文学者は既存のカメラで観測するだけではなく、研究対象の天体の観測に適したカメラを開発することが多々あります。

私の研究室でもCCDカメラの開発を行っていました。私が大学院生だった当時、国内の大型望遠鏡に搭載してデータが取れたはいいものの解析のためのシステムが存在しない状態でした。小さな研究室なので、カメラも手作り、解析システムも当然手作りです。大学院生が作り上げるのです。
その解析システムの参考に教授から紹介されたのが、別の大学のカメラのデータ解析用にpythonで書かれたプログラミングコードでした。このコードを見様見真似でpythonを書いたのが私とpythonの出会いです。

見様見真似で書いたpythonコードの一部

見様見真似で書けてしまう、しかい奥が深いpython

pythonはすぐに書けるようになります。しかし、複雑な処理や高速な処理を行うためにはちょっとしたワザが必要になります。
pythonはスクリプト言語というもので、コードを書いてすぐに実行することができます。
C言語ではコンパイル(人間が読める言語をコンピュータ言語に変換)が必要になるため、
「コードをある程度書く→コンパイル→実行」
というステップが必要です。
ちょっと書いて試すということがしにくいのです。pythonなら少し書いて実行することができるので、書きながら学ぶことができます。

一方で、スクリプト言語特有の弱点もあります。特に、ループ処理が遅いため、大量の計算を行うにはnumpyなどの数値計算ライブラリを駆使する必要があります。ちなみにnumpyは裏側でC言語で書かれたプログラムが動いています。
numpy, scipyといったライブラリを上手く活用することがpythonプログラミングの奥深さであり肝と言って良いでしょう。
このブログでもnumpyを用いた計算手法を紹介していきます。ぜひ楽しみにしていてください!

まとめ

ブログ初回の今回は、天文学とプログラミングの関係について私の事例を紹介しました。
天文学とプログラミングは切っても切れない関係です。私の現在の本職は民間企業のデータサイエンティストですが、天文学の研究で培ったスキルをフル活用しています。

天文学専攻は日本の大学に設置されていることが少ないです。このブログでは、そんな超絶マイノリティーの私が天文学系データサイエンティストの視点から、pythonデータ解析についてお話していきます。

以上、「天文学系データサイエンティストとしての略歴1|天文学とプログラミング」でした!
またお会いしましょう!Ciao!

コメント

タイトルとURLをコピーしました