年平均気温のヒートマップを作ってみよう(1)

me-el で全国の年平均気温 CSV をダウンロードし、Python の seaborn を使ってヒートマップを作ってみましょう。

まずは、上記リンクからダウンロードしてください。[【年別】年平均気温_me-el.csv] というファイル名になります。

次に、Python で必要な以下をインストールします。

$ pip install numpy pandas matplotlib japanize-matplotlib seaborn

ざっくり以下の用途です。

  • numpy : 数値計算ライブラリ
  • pandas : 統計情報を扱うための支援ライブラリ。numpy を必要に応じて呼び出している
  • matplotlib : 統計データをグラフ化する為のライブラリ。こちらも numpy を利用している
  • japanize-matplotlib : matplotlib の日本語対応版(都道府県名が漢字の為)
  • seaborn : matplotlib の支援ライブラリ

ダウンロードした CSV ファイルと同じフォルダに、以下のテキストファイルを hm.py の名前で作成します。

#pip install pandas matplotlib japanize-matplotlib seaborn

import pandas as pd
import matplotlib.pyplot as plt
import japanize_matplotlib
import seaborn as sns

# CSV を読み込む
data = pd.read_csv('【年別】年平均気温_me-el.csv', skiprows=1)

# 年の列を pandas.Series として取得
index = data['']

# 行と列を入れ替え
data = data.transpose()

# 先頭行()を削除
data = data.drop('', axis=0)

#  index を変更
data.columns = index


# 図を作成
plt.figure()
sns.heatmap(data)
plt.show()

ソースを簡単に解説します。
元の CSV は、1行目がコメント、2行目が列見出しとなっています。
1列目が年、2列目以降が都道府県で、行方向に年が進んでいます。

表計算ソフトにインポートすると以下です。

そのため、CSV読み込み時に1行目をスキップし(9行目)、A列(“年”)を index として抽出(12行目)した上で、行と列を入れ替え(15行目)て、先頭行をカット(18行目)、columns に index をセット(21行目)します。
あとは、データを渡して描画するだけです。

以下で実行してみます。

$ python3 hm.py

実行結果は以下になりました。

多少以下のような問題は残っていますが、調整すれば使えそうですね。

  • 岡山県のデータ欠損が目立つ上に、可視化の温度範囲が広くなってしまいます。
  • 都道府県が全県名表示されない状態です。