#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);