Introduction to the programming language Python in radio astronomy

  • 2024-04-08 @ Python tutorials #0
  • Presented by: Akio Taniguchi (Tamura group)

Contents

  • なぜ天文学でPythonを学ぶのか
    • (電波)天文学とプログラミング
    • プログラミング言語Python
  • Pythonを学ぶ上で知っておきたいこと
    • 公式の機能・ドキュメントを知る癖をつけよう
    • 「分からないこと」はどんどん質問をしよう
    • Pythonだけで全てを解決しないようにしよう
    • 他者への技術的な思いやりを持った書き方を心がけよう

なぜ天文学でPythonを学ぶのか

(電波)天文学とプログラミング

  • データ解析
    • リダクション:生データから画像・スペクトルデータを生成
    • 要約・可視化:観測データのプロット・統計量への要約など
    • シミュレーション:理論モデルの生成・観測データとの比較
  • 装置開発
    • 望遠鏡制御:装置間の通信制御・データ取得・観測計画立案
    • 性能評価:装置の仕様と実観測データの比較・考察

プログラミング言語Python

  • 特徴
    • 高水準の汎用スクリプト言語(オブジェクト指向言語)
    • シンプルで習得しやすい文法とデータ構造
    • 豊富な標準ライブラリ(battery included)
    • 科学用途の豊富な外部ライブラリ
  • 用途
    • 科学計算・機械学習・ウェブ開発・通信制御など
    • 天文学に限らずプログラム初学者が学ぶ言語の筆頭候補

プログラミング言語Python

import openai


def answer(question: str) -> str:
    """Return the answer to a given question by GPT-3.5."""
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=[{"role": "user", "content": question}],
    )
    return response.choices[0].text


openai.api_key = "*****"
print(answer("Pythonを学ぶには?"))

プログラミング言語Python

  • 2024年4月時点でのPython
  • 参考:バージョン2.x系のPython
    • 3.x系とは文法等が互換ではないことに注意
      • 例:3/2 -> 1 (2.x), 3/2 -> 1.5 (3.x)
    • CASAなど一部の天文ソフトウェアで必要になることも

プログラミング言語Python

  • 科学計算ライブラリ
    • NumPy, xarray, pandas: 多次元配列・表データの処理
    • SciPy, scikit-learn: 科学計算ライブラリ
    • Astropy: 天文計算ライブラリ
  • 可視化ライブラリ
    • Matplotlib: 1-2次元データプロット
  • その他
    • Jupyter: ブラウザ+ノートブックのPython対話実行環境

Pythonを学ぶ上で知っておきたいこと

公式の機能・ドキュメントを知ろう

  • 標準ライブラリ:これだけでかなりのことができます
    • 時刻計算・並列計算・OS操作などなど
    • 全部覚える必要はないが、機能を探す癖を付けておく
  • 言語ドキュメント
    • 標準ライブラリのヘルプ(引数の意味など)を全て網羅
    • Pythonのインタプリタではhelp(<関数名>)でも見られる
  • 外部ライブラリドキュメント(英語)
    • 例えばastropy documentationなどで検索してみましょう

「分からないこと」は質問しよう

  • 調べたら分かること
    • エラー(例外)の意味(大抵は検索すればヒットする)
    • ライブラリの使い方(大抵はドキュメントがある)
  • 調べても分からないこと
    • ある目的に対するライブラリの使い所(技術選定)
    • 専門知識(天体物理学)を必要とするコード
  • ただ、最初のうちはあまり気にせず質問した方が良いかも
    • M1以上は「○○が分からない」的な質問から脱却しましょう

Pythonだけで全てを解決しないように

  • Pythonにも得意不得意があります
    • 実行速度はそこまで高速ではないことが多い→外部ライブラリ
    • 文字列操作など、かえってシンプルに書きづらいことも
  • 外部ライブラリが使えないかを検討する
    • 例えばNumPyの配列計算は高速な科学計算では必須
  • 最適な他のプログラミング言語を検討する
    • 例えばウェブ関連の開発ならJavaScriptなど
    • (ただし、学習コスト・引継ぎコストと要相談)

Pythonだけで全てを解決しないように

  • シェルスクリプト(UNIXコマンド)の理解も大事
    • パイプライン:簡潔なデータ連続処理
    • 正規表現:効率的な文字列検索
  • よく使われる一般的なデータ形式を知っておく
    • FITS, netCDF: 多次元配列
    • JSON, YAML, TOML: データ記述言語
    • CSV: 表形式
    • オリジナルのデータ形式は極力作らないようにしましょう

他者への技術的な思いやり(難しい)

  • Pythonらしい標準的な書き方→tutorialsで学びましょう
  • 可読性の高いコードの書き方を理解する
    • コードを複雑にしない書き方(例えば早期リターン)
    • 変数の命名方法(例えばendlastはどっちを使うべき?)
  • ドキュメントを残す(例えばAzelyのdocstrings)
  • 重要:ここでいう他者には「数ヶ月後の自分」も含まれます

参考文献・書籍

参考文献・書籍