【第31回PYTHON講座】一年間の気温をプロット その② 違う年を同じグラフに表示

PYTHON

PYTHONを使って、東京の一年間の気温をプロットするプログラムの続きです。

前回の記事はこちらをご覧ください。

今回はいよいよ気温データをグラフにプロットしていきます。

プログラムの内容

前回はCSVファイルをpandasで操作できるように編集しました。

今回は、編集したCSVファイルから2016年と2020年の違う年(違う期間)の気温のデータを取り出し、散文図でグラフ表示をさせプログラムを完成させます。

プログラム

import matplotlib.pyplot as plt
import pandas as pd
import datetime as dt

foldername = 'C:/Labo/trial/'
a_file = foldername + 'data.csv'
b_file = foldername + 'data2.csv'
i = 0

f1 = open(a_file, mode='r')
f2 = open(b_file, mode='w')

for fline in f1:
    i += 1
    if i == 4 or i > 6 :
        f2.write(fline)

f1.close()
f2.close()

dfyear_a = 2016
dfyear_b = 2020

df =pd.read_csv(b_file, encoding="shift_jis") 
df['年月日'] = pd.to_datetime(df['年月日']) 
df = df.drop(df.columns[[2, 3, 5, 6, 8,9]], axis=1) 
df_a =df[(df['年月日'] >= dt.datetime(dfyear_a,1,1)) & (df['年月日'] <= dt.datetime(dfyear_a,12,31))] 
df_b =df[(df['年月日'] >= dt.datetime(dfyear_b,1,1)) & (df['年月日'] <= dt.datetime(dfyear_b,12,31))] 

for i in range(df_a.shape[0]):  
    df_a.loc[df_a.index[0]+i, 'days'] = i
for i in range(df_b.shape[0]):  
    df_b.loc[df_b.index[0]+i, 'days'] = i


plt.scatter(df_a['days'], df_a['最高気温(℃)'],s=2, c="red")
plt.scatter(df_b['days'], df_b['最高気温(℃)'],s=2, c="blue")

plt.show()


20行目まで:前回のプログラムの通りです。

21,22行目:抽出したい年をdfyear_adfyear_bで宣言します。

24行目:CSVファイルをpandasの関数で読み込みます。前回も説明しましたが、今回のCSVファイルがSHIFT-JISでエンコードされている為、encoding=”shift_jis”と記述述することを忘れないで下さい。

25行目:編集後のCSVは下の通りです。年月日のA列、気温のB、E、H列を操作することになります。

A列をチェックして2016年、2020年の期間を取り出しますが、A列は文字型(string)として読み込まれています。文字型の操作で期間を取り出すこともできますが、日付型(datetime)の方が処理が簡単なので、A列を文字型(string)から日付型(datetime)に型変換します。

型変換を行うにはpd.to_datetimeを使用します。

26行目:A、B、E、H列以外はデータフレームから削除します。A列は0に相当するので、2=C、3=D、 5=F、6=G、8=I、9=Jを削除します。

27,28行目:2016年、2020年の1月1日から12月31日のデータを取り出します。

30から33行目:これは2016年と2020年のデータフレームdf_adf_bに、daysという列を作って1月1日から12月31日まで0から365(もしくは366)の日数のインデックスを代入しています。

これは、2016年と2020年のデータをプロットする際に、X軸を統一する変数が必要になってきます。もし、統一するX軸が無く、A列(年月日)をそのまま使用すると下記のようにプロットされてしまいます。

X軸を統一しない場合

36,37行目:今回は最高気温でプロットします。変数sプロットする点の大きさcプロットする点の色を指定します。

39行目:グラフを表示する関数です。

プログラムを実行すると、下記の通りのグラフが表示されました。赤色の点(2016年の気温)が青色の点(2020年の気温)よりも上部にあることが分かります。2016年は気温が高い年だったんですね。

プロットされたグラフ

まとめ

いかがだったでしょうか。

最高気温でプロットしましたが、列名を変更すれば、平均気温、最低気温でもプロット出来ます。

今回はCSVデータからデータを抜き出してグラフを描画するプログラムを作りました。CSVを読み取る際のエンコーディング指定、日付の列を文字型から日付型に変える方法、日付の期間を指定してデータを抜き出すなどの方法が含まれていますので、これらの方法をマスターしておいて下さいね。


コメント

タイトルとURLをコピーしました