##0.日常に潜む問題
緊急事態宣言の中で迎える夏。
三密を徹底的に避けるために、遊びはおろか日頃から通ってアイデアを
もらっていたカフェにも行けず家に籠もっている。
話題といえば、コロナウィルスの感染者数と、暑さについてのみ。
都内に住む私としては、暑くて身動きが取れない話をしても、従姉妹や父からも地元も同じくらい暑い、暑い中でこんな運動(サイクリング)をしているなどの話を聞かされ、勝手に暑さ競争をされているようで辟易していた。
時々見るニュースでは、雪国でしられる地元は東京と変わりない位の最高気温を叩き出しているように見える。
地面から湯気が立っているのではないかと思うぐらいの暑さで、
10分歩いただけでフラフラする。
そしてカフェに入って冷たいドリンクを飲んでも、体中に充満した熱は簡単に取れない状態だ。
ドリンクを飲みながら、新潟と東京の暑さを最高気温で比較する方法を考えてみた。
##1.気温データの取得
気象庁から下記の手順で各地域の気象情報を取得することができた。
今回は新潟と東京のデータが必要なので、下記を東京の場合でも
実施して「csvファイルをダウンロード」ボタンを押す。
上記のcsvファイルの項目部分のみを使いやすいように編集した。
##2.様々な課題
(1)CSVファイルを読み込む
import pandas as pd
import datetime as dt
#グラフを表示するライブラリ
import matplotlib.pyplot as plt
#日本語化のライブラリ
import japanize_matplotlib
#文字コードを指定して読み込む
df = pd.read_csv("data_weather2.csv",encoding="sjis")
print(df)
出力結果
年月日 平均気温(℃)_東京 品質情報 均質番号 最高気温(℃)_東京 品質情報.1 均質番号.1 \
0 2020/1/1 5.5 8 1 10.2 8 1
1 2020/1/2 6.2 8 1 11.3 8 1
2 2020/1/3 6.1 8 1 12.0 8 1
3 2020/1/4 7.2 8 1 12.2 8 1
4 2020/1/5 5.4 8 1 10.2 8 1
.. ... ... ... ... ... ... ...
229 2020/8/17 30.8 8 1 36.5 8 1
230 2020/8/18 30.3 8 1 34.3 8 1
231 2020/8/19 29.0 8 1 34.2 8 1
232 2020/8/20 29.7 8 1 34.8 8 1
233 2020/8/21 30.1 8 1 36.0 8 1
最低気温(℃)_東京 品質情報.2 均質番号.2 平均気温(℃)_新潟 品質情報.3 均質番号.3 最高気温(℃)_新潟 \
0 3.2 8 1 3.6 8 1 5.6
1 1.9 8 1 3.0 8 1 5.7
2 1.4 8 1 4.2 8 1 6.9
3 3.6 8 1 5.5 8 1 8.3
4 0.6 8 1 4.2 8 1 7.2
.. ... ... ... ... ... ... ...
229 27.2 8 1 27.8 8 1 30.4
230 27.8 8 1 26.3 8 1 29.0
231 25.6 8 1 26.8 8 1 30.9
232 25.8 8 1 28.5 8 1 33.7
233 26.0 8 1 27.5 8 1 30.8
品質情報.4 均質番号.4 最低気温(℃)_新潟 品質情報.5 均質番号.5
0 8 1 1.0 8 1
1 8 1 2.0 8 1
2 8 1 1.7 8 1
3 8 1 2.4 8 1
4 8 1 1.7 8 1
.. ... ... ... ... ...
229 8 1 26.3 8 1
230 8 1 23.3 8 1
231 8 1 22.0 8 1
232 8 1 22.8 8 1
233 8 1 23.8 8 1
[234 rows x 19 columns]
(2)グラフ化する列の選択と範囲選択
(メモ1)上記から列名1と列名2を選んで表示するには
DataFrame[[‘列名1’,’列名2’]]
と指定する。
(メモ2)DataFrameの作成
DataFrame名=pd.DataFrame(データ,columns=指定したい列名のリスト)
(メモ3)列名3をデフォルトの日付型(yyyy-mm-dd)に変換するには
DataFrame名['列名3'] = pd.to_datetime(DataFrame名['列名3'], format='列名3の変更前のフォーマット')
new_columns = ['年月日', '最高気温(℃)_東京', '最高気温(℃)_新潟'] # カラム名
new_data=df[['年月日','最高気温(℃)_東京','最高気温(℃)_新潟']]
#dataframe再作成
new_df=pd.DataFrame(new_data,columns=new_columns)
#何もしない場合、日付タイプと認識されない
print(new_df.dtypes)
#年月日列を日付タイプに変換
new_df['年月日'] = pd.to_datetime(new_df['年月日'], format='%Y/%m/%d')
print(new_df.dtypes)
print(new_df)
出力結果
年月日 object
最高気温(℃)_東京 float64
最高気温(℃)_新潟 float64
dtype: object
年月日 datetime64[ns]
最高気温(℃)_東京 float64
最高気温(℃)_新潟 float64
dtype: object
年月日 最高気温(℃)_東京 最高気温(℃)_新潟
0 2020-01-01 10.2 5.6
1 2020-01-02 11.3 5.7
2 2020-01-03 12.0 6.9
3 2020-01-04 12.2 8.3
4 2020-01-05 10.2 7.2
.. ... ... ...
229 2020-08-17 36.5 30.4
230 2020-08-18 34.3 29.0
231 2020-08-19 34.2 30.9
232 2020-08-20 34.8 33.7
233 2020-08-21 36.0 30.8
[234 rows x 3 columns]
new_df2=new_df[(new_df['年月日'] >= dt.datetime(2020,8,1)) & (new_df['年月日'] < dt.datetime(2020,8,21))]
print(new_df2)
出力結果
年月日 最高気温(℃)_東京 最高気温(℃)_新潟
213 2020-08-01 31.8 28.8
214 2020-08-02 31.5 30.3
215 2020-08-03 32.3 32.2
216 2020-08-04 33.1 32.7
217 2020-08-05 34.2 33.4
218 2020-08-06 33.1 33.6
219 2020-08-07 35.4 28.3
220 2020-08-08 32.3 24.8
221 2020-08-09 34.7 28.4
222 2020-08-10 35.2 35.6
223 2020-08-11 37.3 35.7
224 2020-08-12 35.8 31.4
225 2020-08-13 36.1 31.4
226 2020-08-14 34.2 32.0
227 2020-08-15 36.1 30.1
228 2020-08-16 35.4 31.4
229 2020-08-17 36.5 30.4
230 2020-08-18 34.3 29.0
231 2020-08-19 34.2 30.9
232 2020-08-20 34.8 33.7
- 年月日がyyyy-mm-dd表示になっている。
(3)グラフ化
#グラフ化したいデータを指定
new_columns3 = ['最高気温(℃)_東京', '最高気温(℃)_新潟'] # カラム名
new_data3=new_df2[['最高気温(℃)_東京','最高気温(℃)_新潟']]
new_df3=pd.DataFrame(new_data3,columns=new_columns3)
#グラフ表示
new_df3.plot()
- 横軸のインデックス値が行数になっているので、日付に対する温度の対応がわからない。
- グラフが折れ線になっていて、比較がしにくい
##3.完成形(インデックスを日付に指定して、指定した期間の最高気温を出力する)
import pandas as pd
import datetime as dt
#グラフを表示するライブラリ
import matplotlib.pyplot as plt
#日本語化のライブラリ
import japanize_matplotlib
#文字コードを指定して読み込む、年月日をインデックスに
df = pd.read_csv("data_weather2.csv",encoding="sjis")
#年月日をインデックスに
df.index=pd.to_datetime(df['年月日'], format='%Y/%m/%d').values
#もともとの列を削除
df = df.drop(columns='年月日')
print(df)
###出力結果
- インデックスが日付型になっている。
平均気温(℃)_東京 品質情報 均質番号 最高気温(℃)_東京 品質情報.1 均質番号.1 最低気温(℃)_東京 \
2020-01-01 5.5 8 1 10.2 8 1 3.2
2020-01-02 6.2 8 1 11.3 8 1 1.9
2020-01-03 6.1 8 1 12.0 8 1 1.4
2020-01-04 7.2 8 1 12.2 8 1 3.6
2020-01-05 5.4 8 1 10.2 8 1 0.6
... ... ... ... ... ... ... ...
2020-08-17 30.8 8 1 36.5 8 1 27.2
2020-08-18 30.3 8 1 34.3 8 1 27.8
2020-08-19 29.0 8 1 34.2 8 1 25.6
2020-08-20 29.7 8 1 34.8 8 1 25.8
2020-08-21 30.1 8 1 36.0 8 1 26.0
品質情報.2 均質番号.2 平均気温(℃)_新潟 品質情報.3 均質番号.3 最高気温(℃)_新潟 品質情報.4 \
2020-01-01 8 1 3.6 8 1 5.6 8
2020-01-02 8 1 3.0 8 1 5.7 8
2020-01-03 8 1 4.2 8 1 6.9 8
2020-01-04 8 1 5.5 8 1 8.3 8
2020-01-05 8 1 4.2 8 1 7.2 8
... ... ... ... ... ... ... ...
2020-08-17 8 1 27.8 8 1 30.4 8
2020-08-18 8 1 26.3 8 1 29.0 8
2020-08-19 8 1 26.8 8 1 30.9 8
2020-08-20 8 1 28.5 8 1 33.7 8
2020-08-21 8 1 27.5 8 1 30.8 8
均質番号.4 最低気温(℃)_新潟 品質情報.5 均質番号.5
2020-01-01 1 1.0 8 1
2020-01-02 1 2.0 8 1
2020-01-03 1 1.7 8 1
2020-01-04 1 2.4 8 1
2020-01-05 1 1.7 8 1
... ... ... ... ...
2020-08-17 1 26.3 8 1
2020-08-18 1 23.3 8 1
2020-08-19 1 22.0 8 1
2020-08-20 1 22.8 8 1
2020-08-21 1 23.8 8 1
[234 rows x 18 columns]
#列の切り出し
new_columns = ['最高気温(℃)_東京', '最高気温(℃)_新潟'] # カラム名
new_data=df[['最高気温(℃)_東京','最高気温(℃)_新潟']]
#dataframe再作成
new_df=pd.DataFrame(new_data,columns=new_columns)
print(new_df)
###出力結果
最高気温(℃)_東京 最高気温(℃)_新潟
2020-01-01 10.2 5.6
2020-01-02 11.3 5.7
2020-01-03 12.0 6.9
2020-01-04 12.2 8.3
2020-01-05 10.2 7.2
... ... ...
2020-08-17 36.5 30.4
2020-08-18 34.3 29.0
2020-08-19 34.2 30.9
2020-08-20 34.8 33.7
2020-08-21 36.0 30.8
[234 rows x 2 columns]
new_df2=new_df['2020-08-01':'2020-08-21']
print(new_df2)
###出力結果
最高気温(℃)_東京 最高気温(℃)_新潟
2020-08-01 31.8 28.8
2020-08-02 31.5 30.3
2020-08-03 32.3 32.2
2020-08-04 33.1 32.7
2020-08-05 34.2 33.4
2020-08-06 33.1 33.6
2020-08-07 35.4 28.3
2020-08-08 32.3 24.8
2020-08-09 34.7 28.4
2020-08-10 35.2 35.6
2020-08-11 37.3 35.7
2020-08-12 35.8 31.4
2020-08-13 36.1 31.4
2020-08-14 34.2 32.0
2020-08-15 36.1 30.1
2020-08-16 35.4 31.4
2020-08-17 36.5 30.4
2020-08-18 34.3 29.0
2020-08-19 34.2 30.9
2020-08-20 34.8 33.7
2020-08-21 36.0 30.8
colorlist=["red","blue"]
#指定した色で棒グラフ表示
new_df2.plot.bar(color=colorlist)
#凡例の表示位置を右下に指定
plt.legend(loc="lower right")
plt.show()
##結論
最高気温は、東京の方が高い日が多い。