#author("2018-03-05T17:46:21+09:00","default:Miyashita","Miyashita")
#author("2018-07-25T23:33:46+09:00","default:Miyashita","Miyashita")
*Python演習問題:トレンド解析の基礎 [#l201750e]
***インポート・エイリアス設定 [#b111ccdb]
 import numpy as np
 import matplotlib.pyplot as plt
 import datetime
 import csv
 from scipy import signal, interpolate
 from datautil.parser import parse
#codeprettify(lang-python){{
import numpy as np
import matplotlib.pyplot as plt
import datetime
import csv
from scipy import signal, interpolate
from datautil.parser import parse
}}
***問題 [#me6bacc6]
+csv(コンマ区切り)データ"dat_climate.csv"を読み込みなさい.~
読み込みに使う関数は自由.~
 with open(filename,'r') as f:
 f.readline()
 csv.reader(f)
#codeprettify(lang-python){{
with open(filename,'r') as f:
f.readline()
csv.reader(f)
}}
+読み込んだ時間データ(文字列)を数値に変換しなさい.~
 parse(time_str)
#codeprettify(lang-python){{
parse(time_str)
}}
+不等間隔のデータを1日毎に補間しなさい.~
下記に挙げるdatetime関数は必ずしも使わなくてよい.~
 datetime.timedelta(days=x)
 totalseconds, datetime.datetime
 interpolate.interp1d
#codeprettify(lang-python){{
datetime.timedelta(days=x)
totalseconds, datetime.datetime
interpolate.interp1d
}}
+補間データを元に,線形トレンドを求めて図にしなさい.~
 np.polyfit
 np.polyval
#codeprettify(lang-python){{
np.polyfit
np.polyval
}}
+データのスペクトル解析を行い,固有日数(1/f)を求めなさい.~
 signal.welch(val, fs, nperseg=xxx)
 signal.argrelmax
 ax.semilogx
#codeprettify(lang-python){{
signal.welch(val, fs, nperseg=xxx)
signal.argrelmax
ax.semilogx
}}
 
***データ [#mff0554e]
-csvファイル
#ref(https://main-t-miyashita.ssl-lolipop.jp/hydrocoast/image/python/dat_climate.csv,dat_climate.csv)~
1行目はヘッダー~
2行目以降は日時,データ
***解答例(参考) [#m22bec5d]
300〜400[days]で最も強い周期が現れればOKとする.~
パラメータは試行錯誤.~
&ref(https://main-t-miyashita.ssl-lolipop.jp/hydrocoast/image/python/trend.png);
&ref(https://main-t-miyashita.ssl-lolipop.jp/hydrocoast/image/python/periods.png);

Front page   Edit Diff Attach Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes