macroscope

( はてなダイアリーから移動しました)

気象データの可視化、Python でとりかかったところ

【まだ書きかえます。どこをいつ書きかえたか、かならずしも明示しません。】

【この記事は、職務に関連するものではありますが、専門的知識の提供でも、意見の主張でもなく、自分の考えを整理するための おぼえがきです。】

- 1 -
わたしは、地球科学、そのうちでおもに気象学をおしえるたちばにある。気象では、時空間分布するデータを図にしてみることが必要だ。そのためにどんなソフトウェアをつかうべきか、まよってきた。いまの時代に通用するためには、わたし自身がまなんだものとは、変えないといけなくなっている。

大学で、情報リテラシー教育として、いわゆるオフィスソフトウェアの実習をするところが多い。そこで数量の計算には表計算ソフトウェア (おおくのばあい、Microsoft Excel) を経験する。Excel では VBA というプログラム言語がある。わたしの前任の先生は卒論生にそれをつかうように指導していたそうだ。しかし、わたしは VBA をつかった経験がないし、Excel であつかえるデータ量の限界にしばられたくない。(表計算ソフトウェアは、表形式のデータを手入力するための道具としては便利だと思っており、そのやりかたを教えもするが。)

- 2 -
わたしがつとめることになった学科の 2年生 むけの情報処理の科目で、プログラム言語 Python をつかうことになった。学科として Python を必修とするときめたわけではなく、選択科目の今年度の授業担当の先生が採用したのだが、その授業をうけた学生がさきにすすむときの教材は Python でつくるのがよさそうだ。[この段落、2021-05-11 改訂。]

【「Python」ということばは、ギリシャ神話由来だということは知っているので、わたしは「ピュトーン」と読みたいのだが、プログラム言語をさすばあい、「長いものにまかれる」思いで、わたしも「パイソン」と読むことにする。】

【わたしは、だいたい同じ目的をねらったプログラム言語 Ruby をひいきにしようと思っていたのだが、日本語圏内は別として、世界全体の同業者の利用人口でみれば多勢に無勢なので、「多勢」に参加するしかないと判断した。しかも、わたしは、数年まえに R を習得しようとしたときに、R と Ruby は文法表現が (論理的な文法ではなく、記号のくみあわせかたが) よくにているので (にていたほうが助かることもあるのだが) どちらを書いているのかわからなくなって、Ruby プログラムを書くのをあきらめたのだった。】

気象を専門にする3年生むけの技術指導は、わたしより若いが職場では先輩である同僚の発案にわたしも賛同して、Linux 上の Python でやることになった。

- 3 -
問題は、Windows 上のExcel にだけ慣れている4年生への指導だ。わたし自身もまだ慣れていない Python でおしえるのもつらいから、格子型気象データは GrADS、各地点での観測値は R でやろうと考えた。

そこで、まず使おうと思った格子型データが、気象庁の「解析雨量」だった。解析雨量のデータは 2006年以後は WMOがきめた GRIB version 2 (GRIB2) の形式になっている。GrADS は GRIB2 を、あらかじめインデックスファイルをつくっておけば、直接読める。ところが、実際やってみると、解析雨量のデータは、GRIB2 の規格内ではあるのだが、連長 (run length) 圧縮をやっているので、GrADS では直接読めず、あらかじめ別のプログラムで変換しておかなければならない。変換結果のファイルは圧縮されていないので、ディスク容量を大量に食う。ウェブ検索してみると、Python で解析雨量の GRIB2 データを読んで、地図上に表示した例がある。まねしてみると動いた。これならば中間ファイルをつくらないですむ。

そのプログラム例は、地図表示に、Basemap というパッケージをつかっていた。(わたしはPythonの「ライブラリ」と「パッケージ」と「モジュール」という用語をまだよく理解していない。ここでは仮に「パッケージ」としておく。) ところが、Basemap パッケージは開発をやめてしまったそうで、その開発者たちは、Cartopy をつかうことをすすめている。Cartopy をつかって気象の格子型データを表示している例をみつけて、それにならって、解析雨量を表示する例文の後半を書きかえて、ひとまず Linux 上で動かしてみた。Windows 上の Python にCartopy を入れるのは簡単ではないようだが、Anaconda というソフトウェアを入れてその中に Cartopy を入れるならば簡単だった。卒論生にはこのやりかたをすすめることにしよう。

つづいて、地点ごとの観測値データの可視化も、まえに R でつくりかけていた例文を Python でつくりなおすことにした。R では CSV データを読みこむのに、データフレームという構造をつかっていた。Python でも Pandas というパッケージにデータフレーム (DataFrame) という構造があり、R のデータフレームと概念としてはほぼ同じらしい。Python の文法表現をまなびながら、R から翻訳していった。

R による教材づくりは、地図投影にどのパッケージをつかうかがさだまらず、経度・緯度を x, y にとった図化まででとどまっていた。Python にうつってから、Cartopy を利用して地図上に表示することができた。ただし、いまのところ成功したのは、実質的に経度・緯度を x, y にとったのと同じ「正距円筒図法」(Plate Carree) だけだ。Cartopy がまだ開発途上で、地図投影方法自体はいろいろあるのだが、緯度・経度のところに記号や文字を表示する機能がつかえる投影方法はかぎられているらしい。

- 4 -
Python によるプログラミングの本はたくさん出ていて読みきれないのだが、地理的分布をもつデータの可視化にふれているものはすくなく、直接わたしの役にたつものにはまだ出あっていない。ウェブ上の情報にたよることになる。これまで、ウェブ上でいろいろキーワード検索をこころみて、見つかった複数の記事を見くらべ、信頼がおけそうな (この判断はわたしの主観だが) ものを参照してきた。プログラムのコード断片をコピーしたばあいは出典をメモするようにしたが、参考にしただけのものは (つくりかけのプログラムを完成させることをいそいでいたので) 出典の確認もせずにきてしまった。

[この段落 2022-04-11 改訂] Python による気象データの可視化の例文としては、山下 陽介 さん (現所属は国立環境研究所) がウェブページに公開しているものがある。山下さんの前の所属の海洋研究開発機構にあったサイトが、海洋研究開発機構のネットワーク作業で見られなくなっていた。山下さんはその材料を GitHub に移動して公開していた。2022年4月に見たら、その GitHub のサイトに入口のウェブページもつくられたことがわかったので、そのURLを書いておく。内容を読んでからあらためて紹介したい。

- 5 -
わたしは 1980-90年代に NCAR Graphics をつかってきた。[2020-09-10 データの可視化の道具「NCARグラフィックス」および「GKS標準」とわたしのかかわり] でのべたように、NCAR Graphics を開発してきた人びとは、ちかごろ、Python 上で道具を整備する「GeoCAT」というプロジェクトにうつっている。

また、わたしが1990年代から、ちかごろも、つかっている GMT (Generic Mapping Tools) についても、Python から呼び出す「PyGMT」というインタフェースが開発されている。(ただし、GMT の version 6 で導入された新しい概念をつかっており、わたしがおしえられる version 5 までの GMT とはだいぶちがうらしい。)

Python による地図上のデータ表示については、 NCAR Graphics あるいは GMT をひきつぐパッケージを導入したほうがよいのかもしれない。しかし、わたしにはすぐにそちらに手をのばす時間がとれそうもない。もし Cartopy で行きづまったらそちらに方針転換することにしたい。

- 6 -
語源についての雑談。python は、ギリシャ神話の蛇神は別として、現代語としては、ニシキヘビをさす。【横浜で飼われていたアミメニシキヘビが逃げたというニュースを見たが、まさにそれが python だ。】

ついでに anaconda は何か見てみると、現代語としては、南アメリカにすむ、(ニシキヘビとは違う) ある系統のヘビをさす。ただし、その語は、南アメリカの先住民がつかっていたものではなく、17世紀ごろのヨーロッパ人がもちこんだもので、その語源はかならずしも確実ではないが、セイロン (現 スリランカ) でニシキヘビをさしていたという説もある。【だから、python と同じではないがそれと縁があるものにはふさわしい名まえなのだろう。】