Gunosyデータ分析ブログスマートフォン用の表示で見るGunosyデータ分析ブログGunosyで働くデータエンジニアが知見を共有するブログです。Pandasこんにちは。データ分析部のオギワラです。(feat.米津玄師)」をよく聞いています。By)」「時系列処理」の3カテゴリに分けてご紹介していきます。Pandasに関する基本的な内容については、前エントリーで既に紹介されているので、是非こちらもご一読して頂けると幸いです。今回、サンプルデータとしてKaggle上に公開されているFourSquareの行動ログデータを利用しています。Kaggleこのデータは、2012年の4月から2013年2月まで間にFourSquareを利用したユーザの、以下のようなチェックイン情報が記載されています。(timestamp)このデータを利用して実際の分析内容・シチュエーションにも触れながらPandasの実践テクニックをご紹介していきます。NotebookをGitHubのリポジトリに配置したので、実際の動作等を確認したい方はぜひ利用して下さい。GitHubデータ処理データの取り出し(query)今回のデータには197ものお店カテゴリが存在し全カテゴリを一度に分析することは困難です。そこで対象のお店カテゴリを交通機関に絞って見ます。関数を利用することができます。query関数はSQLのクエリのように条件を記述することでデータの取り出しを行うことができます。06:04:04+09:00'''条件文に基づくデータ処理の適用(where)今回のデータでは特に必要ありませんが、データによって欠損値や異常値が含まれていることがあります。これらの値を含む行を除く場合欠損値はdropna、外れ値はquery関数を利用することができます。fillna関数で利用することができますが、異常値に対しては利用することができません。このような時にwhere関数を利用することができます。where関数は条件文に基づく行に対してのみ処理を適用することができます。2292'''各行への関数の適用(apply)各行に対して関数を適用したい時、apply関数を利用することができます。することで適用することができます。大規模なデータセットを分析している場合apply関数は非常に時間がかかるため、DataFrameを一旦リスト化・numpyでベクトル化して関数を適用するなどの工夫をした方が良いです。次回以降の高速化に関する内容も執筆していきたいと思っています。By)カラム毎に異なる集計を適用する(agg)地点・時間別でのチェックイン数の平均・中央値などを知りたい時に、agg関数を利用することでまとめて集計することができます。今回は例として15分ごとに各店舗(カテゴリ)のチェックイン人数をカウントし、その後店舗(カテゴリ)ごとにチェックイン人数の平均・中央値を求めてみます。1'''最大・最小値である行を取り出す(first)各ユーザの最終アクションに関するデータを抽出したい時、groupby及びfirst関数等を用いることで実現することができます。以下に各ユーザの最終地点(timestampが最後の行)を抽出する例を示します。21:36:10+09:00'''標準化や正規化処理を適用する(transform)カテゴリごとに標準化・正規化したい時、groupby及びtransform関数を利用することができます。以下に店舗(カテゴリ)ごとにチェックイン数を標準化する例を示します。時間の丸め処理(round)既に上記でも登場していましたが、日付や1時間単位での集計だけではなく、15分や3分など独自の時間間隔で集計したいことがあります。このような時、round関数を利用することができます。round関数はtimestampを指定した間隔に丸めることができます。移動平均値はrolling関数を用いることで簡単に算出することができます。店舗(カテゴリ)別やuser_id別で算出したい場合もgroupbyと組み合わせることで実現することができます。Notebookでデータ分析していく際に是非利用した方が良いライブラリを2つご紹介します。CLIPythonのfor文などの進捗を色付きバーでリアルタイムに表示してくれます。平常心を保ちながら大規模データを分析していくためにはこのライブラリは必須ですね。変更し実行することで表示されます。TSV.分析結果をGithubのissueなどに転記する時に利用しています。DataFrameを自動的にMarkdown形式で出力してくれます。1.33'''さいごにPandasには今回紹介したメソッド以外にも、数多くのメソッドが実装されています。Pandasの公式ドキュメントは例を交えた説明が多く、非常にわかりやすいです。