学習記録(25日目)
勉強開始:12/7(土)〜
教材等:
・大重美幸『詳細! Python3 入門ノート』(ソーテック社、2017年):12/7(土)〜12/19(木)読了
・Progate Python講座(全5コース):12/19(木)〜12/21(土)終了
・Andreas C. Müller、Sarah Guido『(邦題)Pythonではじめる機械学習』(オライリージャパン、2017年):12/21(土)〜12月23日(土)読了
・Kaggle : Real or Not? NLP with Disaster Tweets :12月28日(土)投稿〜1月3日(金)まで調整
・Wes Mckinney『(邦題)Pythonによるデータ分析入門』(オライリージャパン、2018年):1/4(水)〜1/13(月)読了
『Pythonによるデータ分析入門』
1月13日読了
11章 時系列データ
・ある時点において観測されたデータはどのようなものでも時系列を構成する。
特徴付けの例 タイムスタンプ、一定の期間、時間の感覚によるものなど。
何に応用するかで方法は変わってくる。
pandasは時系列のためのツールを多く提供している。金融やログデータ分析等に応用が効く。
・datetime、time、calendarモジュール
strやstrftimeで書式を指定できる。%Yは4桁の年、%yは2桁の年 など。
datetime.strftime('%Y-%m-%d')のように使う。
・インデックス参照 date['2000']のようにすれば、該当する年月日のデータを参照できる。
範囲指定での生成 date_range
データの移動 shift、オフセットを指定して移動もできる。
・時系列は協定世界時UTCで扱うのがほとんど。
pytz.timezoneでタイムゾーンオブジェクトを取得、生成
tz_localizeでローカライズ、tz_convertで別のタイムゾーンに変換する。
タイムスタンプを生成するときにタイムゾーンも指定できる。
・時系列の頻度は変換できる。resampleメソッドを用いる。
より低い頻度のデータに集約するダウンサンプリング、逆はアップサンプリング
resample('5min',closed = XXX), closedは左右どちらを閉区間(値に含まない)か決める。
OHLC(Open-High-Low-Close)関数、始値・終値・最高値・最安値を集約できる。
・窓関数:指数関数的に減少する重み付けをデータに行う。ある有限区間以外では0となる関数。
ノイズや隙間データを軽減するのに役立つ。rolling, expanding, span, applyで独自関数を適用できる。
12章 pandas:応用編
・pandasのCategorical(カテゴリ型)
活用することで処理速度やメモリ使用量を改善できる可能性がある。
・特定のデータセットを用いて大量の分析をする場合はカテゴリ変数で性能向上が得られる。
データフレームの列をカテゴリ表現に置き換えると、メモリも少量に抑えられる。
astype('category')
・カテゴリメソッド 追加、大小関係を設定、削除など。
add_categories, as_ordered,remove_categories
・機械学習ツール等を使用する場合には、ダミー変数形式に変換しなければならないことがある。
(one-hotエンコーディングのこと。) 0か1かで表現
get_dummiesで変換できる。
・groupbyは指定した要素に対し、共通の処理を行える。
lambda x : x.mean()のように、lambda式を用いればtransformでも同じことができる。
df.transform(lambda x:x.mean())
transformを活用することでグループ演算も可能
normalized = (df['A'] - b.transform('mean'))/b.transform('std') など。
グループごとの集約が複数回発生する場合があるか、ベクトル演算のメリットが全体的に上回る。
13章 Pythonにおけるモデリングライブラリ入門
・pandasと分析ライブラリの接点は、通常はNumPy配列。
データフレームをNumPyに変換するには.value属性を用いる。(ndarrayになる。)
data.values
戻す時は2次元のndarrayを渡し、列名を指定する。
pd.DataFrame(data.values, columns=['one', 'two', 'three']
・列の一部のみ使う場合 locでインデックス参照をしながらvaluesを使うとよい。
model_cols = ['x0', 'x1']
data.loc[:, model_cols].values
これで全行のx0,x1のみをarrayで抽出できる。
dummies = pd.get_dummies(data.category, prefix='category')
data_with_dummies = data.drop('category', axis=1).join(dummies)
#ダミーを作成、dropで元々あった列を削除し、joinで追加する。