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_a、dfyear_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_aとdf_bに、daysという列を作って1月1日から12月31日まで0から365(もしくは366)の日数のインデックスを代入しています。
これは、2016年と2020年のデータをプロットする際に、X軸を統一する変数が必要になってきます。もし、統一するX軸が無く、A列(年月日)をそのまま使用すると下記のようにプロットされてしまいます。
36,37行目:今回は最高気温でプロットします。変数sはプロットする点の大きさ、cはプロットする点の色を指定します。
39行目:グラフを表示する関数です。
プログラムを実行すると、下記の通りのグラフが表示されました。赤色の点(2016年の気温)が青色の点(2020年の気温)よりも上部にあることが分かります。2016年は気温が高い年だったんですね。
まとめ
いかがだったでしょうか。
最高気温でプロットしましたが、列名を変更すれば、平均気温、最低気温でもプロット出来ます。
今回はCSVデータからデータを抜き出してグラフを描画するプログラムを作りました。CSVを読み取る際のエンコーディング指定、日付の列を文字型から日付型に変える方法、日付の期間を指定してデータを抜き出すなどの方法が含まれていますので、これらの方法をマスターしておいて下さいね。
コメント