はじめの一歩#

Pythonは最も人気のあるプログラミング言語です。人工知能や機械学習が盛んになったことで,Pythonの勢いは一層増しています。 気象学においてもPython利用者が増加しています。 この章では,これまで用いられてきた道具を概観した後,Pythonの特徴について述べます。 Pythonの標準的な描画ライブラリであるmatplotlibを用いて簡単な図を描きます。 Pythonの科学技術計算において基本的なパッケージであるNumPyの基本的な使い方についても学びます。

Python環境の準備#

始める前にPython環境を準備しましょう。自分のパソコンにPythonの環境を構築することもできますが,本書ではGoogle Colaboratoryで説明します。Google ColaboratoryはJupyter notebooksを提供するクラウドサービスで,負荷制限がありますが無料で利用できます。スクリプトの入力や結果の出力には,ウェブブラウザを用います。Googleアカウント(Gメールアドレス)が必要ですので,お持ちでない方はGoogleのログイン画面で「アカウントを作成」をクリックして作成してください。

Colaboratoryの追加#

Googleドライブにフォルダを作ります。ドライブでドキュメントやスプレッドシート,スライド同様にColaboratoryのファイルが作成できるように,Colaboratoryのアプリケーションを追加します。作成したフォルダ名クリックして「アプリで開く」を選択すると「+アプリを追加」が出てきます。 drive 「apps内を検索」にColaboratoryと入力してください。右下の+のついたGoogleドライブのアイコンをクリックするとインストールされます。これで準備完了です。 install

ノートブックの作成#

Googleドライブの「新規」ボタンから「その他」「Google Colaboratory」を選んでください。Jupyter notebooksのファイル(拡張子ipynb)が作成されます。「Untitled0.ipynb」のような名前がつけられますが,ファイル名をクリックすると変更できます。 ipynb

乾燥空気の平均分子量の計算#

まずは簡単な計算をしてみます。地球大気の成分は窒素,酸素,アルゴンが主な成分です。容積比はそれぞれおよそ78%,21%,1%です。乾燥空気の平均分子量は容積比を重みとして分子量の平均を計算して求めることができます。

28 * 0.78 + 32 * 0.21 + 40 * 0.01
28.959999999999997

コラム: 気象データの解析や可視化に用いられるツール#

気象データの解析や可視化に用いられてきた道具を概観しておきたいと思います。気象データ解析においては,GrADSやNCLなどが用いられてきました。GrADSやNCLのような言語は,ドメイン固有言語(Domain Specific Language, DSL)と呼ばれています。つまり,気象データ(という領域,ドメイン)に用途が限定されているという意味です。DSLは用途を特定することにより,簡潔な記述が可能となる一方,独自の文法を覚えなければなりません。GrADSはTcl風の「コマンド 引数…」という簡潔な文法で対話的にデータを描画できます。NCLはFortran風の文法で,多様なデータを解析し,論文品質の図を描くことができます。Pythonが勢いを増す中,独自の言語を維持することが得策ではないと判断され,NCLはベースとなる言語をPythonに移行することがアナウンスされています。

日本においては,Fortranで書かれた地球流体電脳ライブラリが開発され,Rubyから使える電脳Rubyに発展してきました。言語は異なりますが,汎用スクリプト言語を採用した電脳Rubyは先見の明があったと思います。

ECMWFの描画ライブラリMagicsは,開発言語をFortranからC++に移し,CやFortran,Pythonから使えるインターフェースを提供しています。気象データ解析アプリケーションのMetviewの描画にもMagicsが用いられ,Macroと呼ばれるMetviewのDSLを使うこともできます。MagicsやMetviewも便利なのですが,本書ではNumPyとmatplotlibを中心にデータ解析や可視化の基礎を重視して解説します。

Pythonの特徴#

Pythonが親しまれている大きな理由は,簡潔に書けてソースコードが見やすいということにあると思います。C言語系統のC++やJavaでは{}で文をまとめたブロックを表します。科学技術計算で長い間用いられてきたFortranではprogramに対してend program,ifに対してend ifなどが必要です。一方Pythonは字下げ(インデント)でブロックを表します。親しみやすいからといって,できることに制約が大きいということではありません。

Pythonにはデータ構造やテキスト処理,ファイル,ネットワーク等を扱う標準ライブラリが添付されています。さらに,Pythonが人気であることから,他の言語で作成されたツールやライブラリがPythonから使えるようにインターフェースが作成されています。  本書で扱う気象データに限らず,Pythonを科学技術の問題に応用する際に欠かせないのが,SciPyです。SciPyは以下のようなオープンソースの数学や科学,工学ソフトウェアパッケージの総称です。

  • NumPy: Pythonはリストや辞書のようなデータ構造を扱うことができますが,気象データのようなビッグデータを扱う機能は備わっていません。配列とそれに対する演算にはNumPyを用います。NumPyは,Fortranのように多次元配列を高速に処理するためのndarrayというデータ構造を提供しています。FortranはCやC++などと比較して多次元配列の処理に適していますが,NumPyは配列の生成や操作などでFortranよりも多機能であり,線型代数演算などの機能もあります。Fortranの資産を活用するためのf2pyが含まれています。

  • SciPy: 通常はそれに含まれるSciPyライブラリを指します。SciPyライブラリには,数値積分,内挿,最適化などが含まれています。

  • matplotlib 数ある描画ライブラリで標準とされているのがmatplotlibで,SciPyの一部を構成しています。MATLABに準拠した使い方から出発していますが,オブジェクト指向の柔軟な描画ライブラリに発展しています。

  • IPython: IPythonはPythonを対話的に使うためのシェルです。pythonコマンドよりも機能が強化されています。IPythonから派生してウェブブラウザから使えるようにしたものがJupyterです。

  • SymPy: 記号計算を行います。本書では扱いません。

  • pandas: 表形式のデータ構造に対してRのような統計やデータ分析が行えます。行や列にラベルをつけて,番号ではなくラベルを使った処理が可能になります。

本書では網羅的に解説することはしませんが,SciPyを活用して気象データを扱います。 SciPyに基づくそれ以外のライブラリやその他のライブラリも適宜利用します。 特にxarrayはpandasのように,NumPyの配列に対して座標や要素にラベルをつけることができるので,大変有用です。