Photo by Skaja Lee
秋山です。
今年は暑いですな。(台風前の東京はちょっと涼しかったですが…)
毎年こんな暑かったっけ?ということで、気象庁が公開している気温のオープンデータとPythonを使って、気温データを可視化しながら遊んでみました。
今回は、機械学習でもよく使うPythonライブラリのPandasやMatplotlib、Seabornを使います。
■どんなデータを使うか
気象に関するオープンデータは気象庁のサイトからCSVダウンロードできます。
とりあえず1910年から108年分ダウンロードしてみました。(※やってみたところダウンロードサイズ制限のようなものがあり、最低気温、最高気温に関しては10年程度ごとに分割しないとダウンロードできませんでした)あと、sjisだったので適宜変換しつつutf-8に結合しました。
CSVデータの形式ついてはこちらに記載がありますが、最高気温、最低気温のカラムの横にはそれぞれ品質番号と均質番号が付与されてます。(品質番号は欠測などを意味しているようです)
今回ダウンロードした1910年以降だと、以下の3日分は欠測があり統計値がありません。
1923-09-01
1923-09-02
1994-07-18
また、以下の3日分が疑わしい値ということになっています。(疑問値)
2015-05-18
2015-11-16
2018-05-15
2018/5/15は割と最近なので実際の値を見てみましたが、特に大きく変な感じではなかったのと…
date | high | low |
---|---|---|
2018-05-13 | 21.4 | 14.6 |
2018-05-14 | 28.6 | 15.2 |
2018-05-15 | 28.4 | 14.8 |
2018-05-16 | 29.0 | 18.8 |
2018-05-17 | 28.4 | 21.4 |
2015/11/16も見てみましたが、そんなに変な値でもないような。というわけで、特に気にせず使っていくことにします。
date | high | low |
---|---|---|
2015-11-14 | 14.0 | 12.2 |
2015-11-15 | 20.0 | 13.6 |
2015-11-16 | 21.2 | 12.2 |
2015-11-17 | 23.7 | 15.6 |
2015-11-18 | 20.8 | 14.4 |
ちなみに均質番号は、観測値変更などに伴ってインクリメントされる数値のようです。
最高気温・最低気温の観測場所に関しては、2014/12/1までは同じ場所で、2014/12/2からは変更されているそうです。
※詳しくはこちら
東京管区気象台|「東京」の気象観測地点の移転について
北の丸公園の観測地点はポケモンGoのピカチュウを捕まえるために現地へ行ったことがありますが、緑に囲まれていてなかなか快適な場所でした。アスファルトの上で暮らしている我々との体感はかなり違いそう…。
というわけで、集めたデータを可視化してみましょう。
■使用するライブラリについて
今回可視化に使うPandasとSeabornですが、ざっくり言うと
Pandas:データ解析ライブラリ。データフレームを作ったり操作したりできる、R言語に近い位置づけのライブラリ。
Matplotlib:図の描画をするときのライブラリ。
Seaborn:Matplotlibをベースに、さらに見た目のよいグラフなどを描画できるようにしたライブラリ。
といった感じです。
Pythonをインストール済の環境であれば
pip install pandas matplotlib seaborn
でインストールできるはずです。
Pandasについては前にもチュートリアル記事を書いているので、興味のある人は見てみてください。
paiza.hatenablog.com
■折れ線グラフを描画してみる
環境ができたら、こんな感じでまずは2017年・2016年分の最低・最高気温グラフを作ってみましょう。
import numpy import pandas import datetime data = pandas.read_csv('res.txt',index_col='date', parse_dates=['date']) %matplotlib inline start = data.index.searchsorted(datetime.datetime(2017, 1, 1)) end = data.index.searchsorted(datetime.datetime(2018, 1, 1)) data[start:end].plot() start = data.index.searchsorted(datetime.datetime(2016, 1, 1)) end = data.index.searchsorted(datetime.datetime(2017, 1, 1)) data[start:end].plot()
こんな感じで最低・最高気温グラフができあがりました。
2017年のほうが暑そう(特に春先)な感じがしますが、折れ線グラフだけだとよくわからないので、ヒートマップを作ってみましょう。
■ヒートマップを描画してみる
Seabornを使って、こんな感じのコードでヒートマップを作ることができます。(今回はひとまずざっくり様子が見られるヒートマップを出したいので、うるう年とかはスルーしています)
import seaborn import matplotlib %matplotlib inline tmp = [] for i in range(100): start = data.index.searchsorted(datetime.datetime(2016-i, 1, 1)) end = data.index.searchsorted(datetime.datetime(2017-i, 1, 1)) t = data[start:end].values tmp.append([t[i][0] for i in range(365)])#うるう年面倒なので1日データが欠損しちゃう matplotlib.pyplot.figure(figsize=(50,50)) ax = seaborn.heatmap(tmp,vmin=15, vmax=35,center=25)
できました。2017年から100年前までの東京の最高気温のヒートマップになっています(上にいくほど最近)。黒い部分は中央の値として25度、最大値を35度、最小値を15度としてカラーマップを当てています。
もちろん東京のみの100年ぽっちのデータで日本全体・地球全体の分析ができるわけではないですが、ヒートマップにして見るとやっぱり上(最近)にいくほど赤っぽい範囲が広がっていて、昔より暑くなってきているような気がしますねぇ。
なんかこんなことしてたら余計暑くなってきました。皆さんも夏場は無理せず養生してください。
■まとめ
というわけでPythonライブラリを使い、気温データをグラフやヒートマップとして可視化してみました。
データの集計・分析は、機械学習をするのに大前提として必要な作業なので、初心者の人はこんな感じで身近なオープンデータを拾ってきていろいろ試してみると勉強になると思います。
あと、データ分析やグラフ表示というとR言語を使っている方も多いと思いますが、「R言語難しいナー」という人(私だ)や、Pythonが好きな人(私だ)はぜひ試してみてください。
これまでもPythonを使ったデータ分析や機械学習に関する記事をいろいろ書いているので、気になった人はぜひ見てみてください。
動画でプログラミングが学べるpaizaラーニングでは、新たに「Python×AI・機械学習入門編」が追加されました。
人気声優の上坂すみれさん演じる進行役のスベトラーナ・小百合・ベレフスカヤと一緒に、実際に画像認識技術を使いながら、初心者でも機械学習を体験・学習できるレッスン内容になっています。
Python×AI・機械学習入門編は全編無料でごらんいただけます。詳しくはこちら
「paizaラーニング」では、未経験者でもブラウザさえあれば、今すぐプログラミングの基礎が動画で学べるレッスンを多数公開しております。
詳しくはこちら
そしてpaizaでは、Webサービス開発企業などで求められるコーディング力や、テストケースを想定する力などが問われるプログラミングスキルチェック問題も提供しています。
スキルチェックに挑戦した人は、その結果によってS・A・B・C・D・Eの6段階のランクを取得できます。必要なスキルランクを取得すれば、書類選考なしで企業の求人に応募することも可能です。「自分のプログラミングスキルを客観的に知りたい」「スキルを使って転職したい」という方は、ぜひチャレンジしてみてください。
詳しくはこちら