Pythonと本と子供と雑談と

いつからはじめても遅くない

データの前処理でよく使うPandasなどのメソッド

f:id:mazarimono:20190524102610j:plain

さて、機械学習とかディープラーニングの本を買って勉強して、さてじゃあやるかという段階で問題になるのが、使えるデータがちゃんとした形をしていないという問題です。

うん、そうなんだ。

私も以前はデータを拾ってきては、「これはこうせんかい!!」と思っていましたが、データがあるだけましで、それを加工してさっさと使えるようにする作業を黙々とすべきだと思いました。使いやすいデータなど自分で作る以外、存在しないと思った方が良いです。

今日はそんなときによく使う、pandasのメソッドメモです。

apply

pandasを使っていてよく触るのがapplyです。行とか列とかにダァーっと処理させたい時に利用します。lambdaも共用しています。

pandas.pydata.org

さてちょっとやってみましょう。

pandasとnumpyをインポートして、まずはnumpyのランダムを使って8行、4列のデータフレームを作ります。

そしてそれに一列加えて、applyとlamdaを使って、横に(axis=1)数値を足し、その列に入れます。

f:id:mazarimono:20190524095035p:plain

こうすることにより、処理が簡単に行えます。forで回してとかいらない。

lambda

lambdaはちょっとわかりにくいですよね。まぁ私は最初全然何やっているのか分かりませんでした。分かりにくさの根源は・・・と考えるとlambdaのあとのx(まぁ大体xっておいてるけど、変数は何でもよい)が何を渡しているのか分からないという点に問題があるような気がしました。 なので、今回はprint()を使って何が来ているのか見てみましょう。

f:id:mazarimono:20190524095651p:plain

はい。このケースだと、列のデータを全部渡してくれているということが分かります。

axis=0, 行のデータを取るということに変えると、

f:id:mazarimono:20190524100019p:plain

という感じで8個数値を取ってきていることが分かります。

じゃあ、1列の4番目の数字だけが欲しい時は・・・スライスすると取ってくれます。x[3]

f:id:mazarimono:20190524100339p:plain

一時期中二病のようにlambdaを乱用していた私ですが、今では使うのはこのケース位です。あと、JSを勉強したら、なんかちょっとわかった気がしました。

melt

このブログでワイドフォームとロングフォームの話をしたかは忘れましたが、よくあるデータの形はワイドフォームです。それを可視化など行う際に使いやすい形がロングフォームです。まぁ一列見たらデータがどんなものか分かるってのがロングフォームの良いところです。

で、大体ワイドフォームでデータが存在しておりまして、それを変数を一つな形に直したいわけですね。そんなときに使えるのがmelt()です。

なんか一気にデータフレームを変えてしまうので、黒魔術的なところがあって、私は最近一番のお気に入りです。

pandas.pydata.org

ワイドフォームをロングフォームにしてくれるのには、wide_to_long()ってそのままな名前のものもありますが、こっちは長いし、ちょっとわかりにくいのでもっぱらmelt()を使っています。

さて、使用例ということで、以下のようなワイドフォームデータがあります。

f:id:mazarimono:20190524101232p:plain

一日のデータが1時間おきに並んでいる。これをロングフォームにするには・・・

f:id:mazarimono:20190524101454p:plain

上のような感じで、そのまま置いておくところはid_varsに、溶かしてしまう部分はvalue_varsに指し渡すと一気に処理してくれます。

なんか爽快感があって超良いです。

まとめ

というような感じで、簡単ながら知っていると処理が超楽になる方法3つをメモしておきました。

もっとてくったやつを知りたいとかでしたら、ぜひPandasの達人kunaiに聞ける、6月のはんなりPython pandas-hands-onへ!!!

次はdatetime編を書こう。

hannari-python.connpass.com

残念ながら関西じゃないという方は本で勉強しましょう!そういや2版出たんですねぇ~

Pythonによるデータ分析入門 第2版 ―NumPy、pandasを使ったデータ処理

Pythonによるデータ分析入門 第2版 ―NumPy、pandasを使ったデータ処理