前提・実現したいこと
極値理論を使って多摩川の氾濫は推測できたのか検証してみる
https://qiita.com/hrkz_szk/items/3b17a45f9e8c55634597
を参考に多摩川の水位をスクレイピングしたのですが
年毎の水位を表示したいのですがうまくいきません。
年でグループ化はできたのですが一緒にplotすると年があるため続きに表示されてしまいます。
年、月日時間で分けることができたら表示できると思うのですが
Pandasでindex=年,columns=月日時間のdataframe作成の仕方を教えてください。
|year|01-01 1:00|01-01 2:00|01-01 3:00|01-01 4:00|…|12-31 24:00|
|:--|:--:|--:|--:|--:|--:|
|2000|||||||
|2001|||||||
|2002|||||||
|2003|||||||
該当のソースコード
スクレイピング
python
1import pandas as pd 2from tqdm import tqdm_notebook 3import time 4 5years = [2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019] 6 7dfs = [] 8 9for year in tqdm_notebook(years): 10 for month in tqdm_notebook(range(1, 13), desc=str(year)): 11 12 data = pd.read_html(f"http://www1.river.go.jp/cgi-bin/DspWaterData.exe?KIND=2&ID=303051283310030&BGNDATE={year}{month:02}01&ENDDATE=20191231&KAWABOU=NO", skiprows=1, header=0, index_col=0, na_values=["欠測", "閉局"]) 13 dfs.append(data[1].iloc[:-1,:]) 14 15 time.sleep(1) 16 17df = pd.concat(dfs) 18 19df.to_csv("result.csv")
整形
python
1df1 = pd.read_csv("result.csv", parse_dates=["date"], names=["date", 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24], header=None, skiprows=1) 2 3df2 = pd.melt(df1, id_vars='date', var_name='hour', value_name='level') 4df2 = df2.sort_values(['date','hour']).reset_index(drop = True) 5 6import datetime 7 8df2["datetime"] = pd.to_datetime(df2["date"] + df2["hour"].apply(lambda x: datetime.timedelta(hours=x))) 9df2.set_index("datetime", inplace=True) 10df2["level"].plot(figsize=(15,5))
試したこと
年ごとのグループを作成
python
1df3 = df2["level"].copy() 2df3 3df_year = [g for n, g in df3.groupby(pd.Grouper(freq="Y"))] 4 5ax = df_year[18].plot(figsize=(15,5)) 6df_year[19].plot(figsize=(15,5), ax=ax)
補足情報(FW/ツールのバージョンなど)
google colaboratory
回答1件
あなたの回答
tips
プレビュー