2017/10/02 [長年日記]
_ 時系列データを扱うことについての今日の学び
- 時間情報、対象(目的変数)は絶対必要。他に説明変数を付け加えることで精度が向上できる。
- モデルを生成するためには、「今から予測地点」までの期間Aを過去に遡って見たときに、”期間A”より前のデータを使う必要あり。これは、モデルに使ってよい時系列データ期間という意味であり、期間Aよりも後の時系列データを使うと、「未来を知ったデータで予測」することになりNG
- 時系列データを扱う場合の交差検定(CV)の考え方
T:学習用データ V:検定用データ 時系列でない場合は TTTTV TTTVT TTVTT TVTTT VTTTT 時系列データならばこうする TTTTV TTTTV TTTTV TTTTV TTTTV
- モデルの良しあしは、「検定用データ」がどれだけうまく説明できるか。モデル高めるために、説明できていない変数を見直す。
- 周期性パターンを把握する。パターン変動がある場合、説明変数にパターンを説明する特徴量を加えて考えてみる。(1日のうちに特定の変動がある、特定の月、など)
- 長期のデータを用意する(パターンが複数回発生するトレーニングデータ)。
- 原因が説明変数として入っていない変数は手動で排除・修正など前処理する。起きる頻度が非常に少ない事柄について、手動で目的変数の影響を処理しておく。(普段は変化がないのに、急激に変化してすぐ戻る場合)
特に最後のあたりは、先日「データよりアイデアを重んじる」と学んだことに近い考えだと思う。
2017/10/13 [長年日記]
_ 今日の学び
勉強目的で「ある場所」へ出かけて話を聞いてみたが、一番期待していた話題について、 俺の知識レベルが低いのだろうか、コレ!という学びが得られなかった。
ローソク足を生で喰わせて、そこから汎化結果が得られるとも思えなかったが、 それでも僅かながらも利益率が得られるということは、どんな変化を特徴量として判断したんだろうか (?_?)
次に続く話題は、まったく興味がなかったので右から左へスルー ┐(´д`)┌
最後の話題は少し興味があり聞き入ってしまった。ARcore を勉強してみたくなった (^O^)/
2017/10/16 [長年日記]
こんな感じのデータを貰った。TSV と JSONの混合体 (+_+)。 pandas に入れたいけど、どう解釈(プログラミング)していいかさっぱり orz
AAA BBB CCC {key1:{key2:VVV,key3:[1,2,3,4] } } ※スペースのあるところには、実際には Tab になっている。
実際はもっと複雑な階層構造になっていて、配列も長さがまちまち (>_<)
さて、around google のたびに出るか orz
ちなみにこんな DataFrame にしたい。
col1 | col2 | col3 | col4 | col5 | col6 | col7 | col8 | |
key1 | <-マルチカラム化 | |||||||
key2 | key3 | <-マルチカラム化 | ||||||
AAA | BBB | CCC | VVV | 1 | 2 | 3 | 4 |
2017/10/17 [長年日記]
2017/10/19 [長年日記]
_ [Python]nested dictionary を展開するのは json_normalize で
色々とググってみたら、nested dictionary を展開するのは json_normalize を使うみたいだ。
もともと入手していたデータは、こんな形式
AAA BBB CCC {key1:{key2:VVV,key3:[1,2,3,4]}} ※スペースのあるところには、実際には Tab になっている。
普通に pandas に取り込んでも 4つのカラムに取り込まれるので、 4番目のカラムに対して json_normalize してみた。
from pandas.io.json import json_normalize dict = '{key1:{key2:VVV,key3:[1,2,3,4]}}' json_normalize(dict)
出力結果
key1.key2 key1.key3 VVV [1,2,3,4]
key を連結していけば対象カラムにアクセスできるので、階層構造を理解した後だとすんなり指定できる(^o^)/
もともと期待していた結果は、"key1.key3" もカラムに展開してもらいたかったけど、 よくよく考えてみると この数値列は後で比較したり演算したりする可能性があるので、 一塊になっていたほうが便利なんじゃないのか、と思い直した。\(^o^)/
後は pandas の連結方法だな
参考にさせていただいたサイト:
2017/10/20 [長年日記]
_ [Python]nested dictionary の Array を読み込むのは大変 (+_+)
ネストされた辞書型の要素を json_normalize で取得できることは解ったけど、 それが複数行の配列になっている状態から DataFrame化したい。
配列(Series) を json_normalize で処理させようとするとエラー (>_<) 入力として受け付けてくれるのは辞書型だけで、辞書型の配列はダメみたいだ。
ググってみたところ、json_normalize -> DataFrame -> concat する手順 を見つけた。
その例に沿って記述してみた。
dict = '{key1:{key2:VVV,key3:[1,2,3,4]}}, {key1:{key2:WWW,key3:[5,6,7,8]}}, {key1:{key2:XXX,key3:[9,10,11,12]}}' new_df = pd.concat( [pd.DataFrame( json_normalize(json.loads(x)) ) for x in dict], ignore_index=True) print(new_df)
出力結果
key1.key2 key1.key3 VVV [1,2,3,4] WWW [5,6,7,8] XXX [9,10,11,12]
希望の結果は得られたけど、実際のデータは 63万行くらいあって、それを読み込むのに 数十分かかった (>_<)
1行ずつ処理しているからなんだろうけど、単に DataFrame 化したいだけなんだから 並列化とかして高速処理できないものだろうか。orz
参考にさせていただいたサイト:
2017/10/23 [長年日記]
_ [SQL]sqlite3 でどんどん溜め込んでいるファイルへのアクセスで "database is locked"
Tick STREAM データを取得して各足を作成し sqlite3 DB へ保存しているけど、 そのファイルに対して別のシェルスクリプトから”直近の1分足" を読み込もうとしたら "database is locked" エラーが発生している (+_+) 頻度は10日くらいに1回くらいかな。
色々とググってみたところ、原因は「書き込み処理中に別処理の要求が来たけど timeout した」 と推測される。
シェルスクリプトから読み込みを掛けているので、こちらの timeout を引き伸ばせないかと 色々とググって見たところ、sqlite3 のコマンド引数で指定できそうだ。(!_!)
とりあえずスクリプトに仕込んでみた。timeout はミリ秒指定。
sqlite3 -cmd ".timeout 3000" -column USDJPYm1.db 'select date,time,close from hd where id=(select max(rowid) from hd)'
これでしばらく様子見してみよう (^-^)/
参考にさせていただいたサイト: