学習記録(23日目)
勉強開始:12/7(土)〜
教材等:
・大重美幸『詳細! Python3 入門ノート』(ソーテック社、2017年):12/19(木)読了
・Progate Python講座(全5コース):12/21(土)終了
・Andreas C. Müller、Sarah Guido『(邦題)Pythonではじめる機械学習』(オライリージャパン、2017年):12月23日(土)読了
・Kaggle : Real or Not? NLP with Disaster Tweets :12月28日(土)投稿〜1月3日(金)まで調整
・Wes Mckinney『(邦題)Pythonによるデータ分析入門』(オライリージャパン、2018年):1月4日(土)〜
『Pythonによるデータ分析入門』
p.276 8章 データラングリング まで読み終わり。
6章 データの読み込み、書き出しとファイル形式
・pandasの特徴はテーブル形式データをデータフレームオブジェクトとして読み込む関数が豊富なこと。
read_csv、read_table、read_excel、read_html ...
読み込み関数のいくつかでは自動的に型推論が行われるため、必ずしも細部を設定する必要はない。
デフォルトの区切り文字(sep) : read_csv→カンマ、read_table→\t(水平タブ)
他のものを区切りとする場合は引数で指定する。
・一部の行の形式が異なるようなファイルのデータフレーム化
csf.readerに渡す。帰ってきたタプルをlinesで読み込む。ヘッダーとデータ行に分割
ディクショナリ内包表記とzip(*values)でディクショナリ形式に ...
・json(JavaScript Object Notation)
Webブラウザとアプリケーション間においてHTTPリクエストでデータをやりとりする際の形式の1つ。
・HTML/XML形式のデータ読み書きも可能。
read関数で読み込み、skipやindexを付けてディクショナリ化し、最後にデータフレーム化する。
いわゆるスクレイピングという作業。データの形を整えて使えるようにする。
Kaggleなどは整っているデータが多いのでやらない? むしろ実務で多く使いそうな技術。
・HDF5 科学的な配列データを保存するためのファイル形式。
Cで書かれており、効率よくデータを読み書きできるので、巨大なデータセットを使うのによい選択。
・excelも読み込める。sqlデータベースからも読み込める。
7章 データのクリーニングと前処理
・欠損値の取り扱い
dropnaで欠損値(NA, NaN)を含む行を丸ごと落とす。fillnaで埋める。前後に準ずるffillやbfillもある。
引数にhow='all'を指定で、全てがNAの行のみ落とすこともできる。列は他と同じでaxis=1を指定。
fillnaにディクショナリを与えると、列ごとに異なる数値で埋めることができる。inplaceは上書き。
fillnaにdata.meanを与えると、算術平均で穴埋めもできる。
・データ変形
duplicateで真偽値のシリーズを戻す。drop_duplicatesは真偽値がtrue(他と同じ要素)のみ削除
mapで要素ごとの変換。ディクショナリも渡せる。(どの関数も共通してディクショナリ渡せそう。)
replaceでもできる。kaggleでよく見るのはこっちな気がする。第1引数を第2の数値に変える。
・離散化とビニング
リストで要素を作り、pandasのcutに引数として渡すことでビンに分けられる。
・外れ値の検出
data[(np.abs(data) > 3).any(1)、3以上というのは例。
指定した数値よりもdata要素の絶対値が大きいものが1つでもある(any)ものをリストアップする。
= np.sign(data)*3 とすれば、各要素の符号に応じた数値を返すsignと組み合わせて上限を作れる。
・ランダムサンプリング
random.permutation(5)で5つのランダムを、takeで同等のサンプリングを行える。
非復元抽出を選択するにはsampleメソッドにreplace = Trueを渡す。
・標識変数の取り出し。リスト、for分、extend(x.split('|'))で|を基準に分割したデータをリストに入れる。
pandasのuniqueで取り出すと、構成する各要素のリストが作れる。p229
splitもkaggleでよく使ってた。
・正規表現。reモジュールを使用、complile、findall、regex.match ...
8章 データラングリング
・階層型インデックス。2つ以上のインデックスを持つデータ。
aというインデックスに1,2,3の要素、bというインデックスに1,2,3の要素。など。
unstackとstackでピボットできる。(内側の要素をcolumnsラベルとして使うなど)
・階層の順序変更はswaplevelでできる。sort_indexで並び替え。
levelを引数に渡すと、その階層を使うか指定。外側から0、1、...
・データフレームの列をインデックスにできる。set.index
set.index('a')とすれば、aの列を構成する要素がindexとして新たに加わる。
reset.indexはこの逆動作である。
・結合とマージ、concat、merge、でくっつける。基本的に内部結合(innner)で指定されており、共通なもののみ結果に含めるようになっている。独立であるものも、全てを結果に含めるのであればhow='outer'を指定する。
・stackは欠損値を除去するようになっているが、dropna=Falseで落とさないこともできる。
これに限らず、引数で指定することでだいたいの操作はできそう(と判断。)
もししたい操作があれば、まず引数を調べるとよいかもしれない。