タグ

ブックマーク / sinhrks.hatenablog.com (19)

  • Python pandas 欠損値/外れ値/離散化の処理 - StatsFragments

    データの前処理にはいくつかの工程がある。書籍「データ分析プロセス」には 欠損など 前処理に必要なデータ特性の考慮とその対処方法が詳しく記載されている。 が、書籍のサンプルは R なので、Python でどうやればよいかよく分からない。同じことを pandas でやりたい。 データ分析プロセス (シリーズ Useful R 2) 作者: 福島真太朗,金明哲出版社/メーカー: 共立出版発売日: 2015/06/25メディア: 単行この商品を含むブログ (2件) を見る とはいえ、pandas 自身は統計的 / 機械学習的な前処理手法は持っていない。また Python には R と比べると統計的な前処理手法のパッケージは少なく、自分で実装しないと使えない方法も多い。ここではそういった方法は省略し、pandas でできる前処理 / 可視化を中心に書く。 また、方法自体の説明は記載しないので、詳細

    Python pandas 欠損値/外れ値/離散化の処理 - StatsFragments
  • Python pandas + folium で Leaflet をもっと使いたい - StatsFragments

    先日参加させていただいた Japan.R でこんな話を聞いた。 RPubs - leafletではじめるRによる地図プロット Python でも folium というパッケージを使うと JavaScript を書かなくても Leaflet.js の一部機能が使えるのだがあまり情報がない。上の資料に書いてあるようなことが folium でもできるのか調べたい。 folium については前にこんなエントリを書いた。 sinhrks.hatenablog.com データの準備 import numpy as np np.__version__ # '1.10.2' import pandas as pd pd.__version__ # u'0.17.1' サンプルデータとして Wikipedia にある アメリカの国立公園 のデータを使う。まずは pd.read_html でデータを読みこむ。

    Python pandas + folium で Leaflet をもっと使いたい - StatsFragments
  • Python Dask.Array で 並列 / Out-Of-Core 処理 - StatsFragments

    この記事は Python Advent Calendar 2015 13 日目の記事です。 Python で手軽に並列 / Out-Of-Core 処理を行うためのパッケージである Dask について書きたい。Dask を使うと以下のようなメリットが得られる。 環境構築 / インストールが pip で簡単にできる 手軽に並列処理ができる Out-Of-Core (メモリに乗らないデータ) 処理ができる 補足 Dask は手持ちの PC の シングルコア / 物理メモリでは処理が少しきついかな、といった場合に利用するパッケージのため、より大規模 / 高速 / 安定した処理を行いたい場合には Hadoop や Spark を使ったほうがよい。 Dask は以下 3 つのサブパッケージを持つ。 サブモジュール ベースパッケージ dask.array NumPy dask.bag PyToolz

    Python Dask.Array で 並列 / Out-Of-Core 処理 - StatsFragments
  • Python Jupyter + pandas で DataFrame 表示をカスタマイズする - StatsFragments

    先日 pandas v0.17.1 がリリースされた。v0.17.0 に対するバグフィックスがメインだが、以下の追加機能もあるため その内容をまとめたい。 HTML 表示のカスタマイズ Jupyer 上では pandasの DataFrame は自動的に HTML として描画される。この HTML に対して、さまざまな CSS を柔軟に設定できるようになった。 このエントリでは、添付した公式ドキュメントとは少し違う例を記載する。 Style -- pandas documentation @TomAugspurger (コミッタの一人) 作成の Jupyter Notebook 重要 公式ドキュメントにも記載がされているが v0.17.1 時点で開発中 / Experimental な追加のため、今後 破壊的な変更が発生する可能性がある。ご要望やお気づきの点があれば GitHub issu

    Python Jupyter + pandas で DataFrame 表示をカスタマイズする - StatsFragments
  • Python pandas プロット機能を使いこなす - StatsFragments

    pandas は可視化のための API を提供しており、折れ線グラフ、棒グラフといった基的なプロットを簡易な API で利用することができる。一般的な使い方は公式ドキュメントに記載がある。 Visualization — pandas 0.17.1 documentation これらの機能は matplotlib に対する 薄い wrapper によって提供されている。ここでは pandas 側で一処理を加えることによって、ドキュメントに記載されているプロットより少し凝った出力を得る方法を書きたい。 補足 サンプルデータに対する見せ方として不適切なものがあるが、プロットの例ということでご容赦ください。 パッケージのインポート import matplotlib.pyplot as plt plt.style.use('ggplot') import matplotlib as mpl m

    Python pandas プロット機能を使いこなす - StatsFragments
  • Python Dask で 並列 DataFrame 処理 - StatsFragments

    はじめに 先日のエントリで少し記載した Dask について、その使い方を書く。Dask を使うと、NumPy や pandas の API を利用して並列計算/分散処理を行うことができる。また、Dask は Out-Of-Core (データ量が多くメモリに乗らない場合) の処理も考慮した実装になっている。 sinhrks.hatenablog.com 上にも書いたが、Daskは NumPy や pandas を置き換えるものではない。数値計算のためのバックエンドとして NumPy や pandas を利用するため、むしろこれらのパッケージが必須である。 Dask は NumPy や pandas の API を完全にはサポートしていないため、並列 / Out-Of-Core 処理が必要な場面では Dask を、他では NumPy / pandas を使うのがよいと思う。pandasとDas

    Python Dask で 並列 DataFrame 処理 - StatsFragments
  • Python xray で 多次元データを pandas ライクに扱う - StatsFragments

    はじめに pandas では 2 次元、表形式のデータ ( DataFrame ) を主な対象としているが、ときには 3 次元以上のデータを扱いたい場合がある。そういった場合 以下のような方法がある。 MultiIndex を使い、2 次元のデータにマッピングする。 3 次元データ構造である Panel、4 次元の Panel4D、もしくは任意の次元のデータ構造 ( PanelND ) をファクトリ関数 で定義して使う。 numpy.ndarray のまま扱う。 自分は MultiIndex を使うことが多いが、データを 2 次元にマップしなければならないため 種類によっては直感的に扱いにくい。Panel や PanelND は DataFrame と比べると開発が活発でなく、特に Panel4D、PanelND は 現時点で Experimental 扱いである。また、今後の扱いをどうす

    Python xray で 多次元データを pandas ライクに扱う - StatsFragments
  • Python pandas パフォーマンス維持のための 3 つの TIPS - StatsFragments

    pandas でそこそこ大きいデータを扱う場合、その処理速度が気になってくる。公式ドキュメントではパフォーマンス向上のために Cython や Numba を使う方法を記載している。 Enhancing Performance — pandas 0.16.2 documentation が、軽く試したいだけなのに わざわざ Cythonや Numba を使うのは手間だし、かといってあまりに遅いのも嫌だ。そんなとき、pandas 来のパフォーマンスをできるだけ維持するためのポイントを整理したい。 pandas に限らず、パフォーマンス改善の際にはボトルネックの箇所によってとるべき対策は異なる。pandas では速度向上/エッジケース処理のために データの型や条件によって内部で処理を細かく分けており、常にこうすれば速くなる! という方法を出すのは難しい。以下はこの前提のうえで、内部実装からみ

    Python pandas パフォーマンス維持のための 3 つの TIPS - StatsFragments
  • Python pandas データのイテレーションと関数適用、pipe - StatsFragments

    pandas ではデータを 列 や 表形式のデータ構造として扱うが、これらのデータから順番に値を取得 (イテレーション) して何か操作をしたい / また 何らかの関数を適用したい、ということがよくある。このエントリでは以下の 3 つについて整理したい。 イテレーション 関数適用 pipe (0.16.2 で追加) それぞれ、Series、DataFrame、GroupBy (DataFrame.groupbyしたデータ) で可能な操作が異なるため、順に記載する。 まずは必要なパッケージを import する。 import numpy as np import pandas as pd イテレーション Series Series は以下 2つのイテレーション用メソッドを持つ。各メソッドの挙動は以下のようになる。 __iter__: Series の値 ( values ) のみをイテレーシ

    Python pandas データのイテレーションと関数適用、pipe - StatsFragments
  • Python pandas + folium + Jupyter でリーフレット / コロプレス図を描きたい - StatsFragments

    引き続き、 R の可視化を Python に持ってくるシリーズ。R には以下のようなパッケージがあり、地図上へのリーフレット配置やコロプレス図の描画がカンタンにできる。それぞれの概要はリンク先を。 {leaflet}: リーフレット配置 Leaflet for R - Introduction (英語) {choroplethr}: コロプレス図の描画 choroplethrで大阪市のコロプレス図を描く - Technically, technophobic. これを Python でやりたい。調べてみると folium というパッケージが上記 両方をサポートしているようなので使ってみる。 github.com インストール pip で。 pip install folium 準備 以降の操作は Jupyter Notebook から行う。まずはパッケージをロードする。 import nu

    Python pandas + folium + Jupyter でリーフレット / コロプレス図を描きたい - StatsFragments
  • Python pandas 関連エントリの目次 - StatsFragments

    このブログ中の pandas 関連のエントリをまとめた目次です。 最近 pandas 開発チーム と PyData グループ の末席に加えていただき、パッケージ自体の改善にもより力を入れたいと思います。使い方についてご質問などありましたら Twitter で @ ください。 目次につけた絵文字は以下のような意味です。 🔰: 最初に知っておけば一通りの操作ができそうな感じのもの。 🚧: v0.16.0 時点で少し情報が古く、機能の改善を反映する必要があるもの。 🚫: 当該の機能が deprecate 扱いとなり、将来的に 代替の方法が必要になるもの。 基 簡単なデータ操作を Python pandas で行う 🔰 Python pandas でのグルーピング/集約/変換処理まとめ 🔰 また、上記に対応した比較エントリ: R {dplyr}, {tidyr} Rの data.tab

    Python pandas 関連エントリの目次 - StatsFragments
  • 簡単なデータ操作を PySpark & pandas の DataFrame で行う - StatsFragments

    Spark v1.3.0 で追加された DataFrame 、結構いいらしいという話は聞いていたのだが 自分で試すことなく時間が過ぎてしまっていた。ようやく PySpark を少し触れたので pandas との比較をまとめておきたい。内容に誤りや よりよい方法があればご指摘 下さい。 過去に基的なデータ操作について 以下 ふたつの記事を書いたことがあるので、同じ処理のPySpark 版を加えたい。今回は ひとつめの "簡単なデータ操作〜" に相当する内容。 pandas 版 簡単なデータ操作を Python pandas で行う - StatsFragments Python pandas でのグルーピング/集約/変換処理まとめ - StatsFragments 準備 環境は EC2 に作る。Spark のインストールについてはそのへんに情報あるので省略。サンプルデータは iris を

    簡単なデータ操作を PySpark & pandas の DataFrame で行う - StatsFragments
  • Python Theano function / scan の挙動まとめ - StatsFragments

    勉強のため たまに Pylearn2 など Theano を使ったパッケージのソースを眺めたりするのだが、theano.scan の挙動を毎回 忘れてしまう。繰り返し調べるのも無駄なので、一回 整理したい。theano.scan の動作は theano.function が前提となるため、あわせて書く。 準備 import numpy as np import theano import theano.tensor as T theano.function まずは Theano における関数にあたる Function インスタンスを作成する theano.function の基的な挙動について。引数はいろいろあるが、特に重要と思われるのは以下の4つ。 inputs : Function への入力 (引数) に対応するシンボル。 outputs : Function 化される式。 upda

    Python Theano function / scan の挙動まとめ - StatsFragments
  • Python pandas 図でみる データ連結 / 結合処理 - StatsFragments

    なんかぼやぼやしているうちにひさびさの pandas エントリになってしまった。基的な使い方については網羅したい気持ちはあるので、、、。 今回は データの連結 / 結合まわり。この部分 公式ドキュメント がちょっとわかりにくいので改訂したいなと思っていて、自分の整理もかねて書きたい。 公式の方はもう少し細かい使い方も載っているのだが、特に重要だろうというところだけをまとめる。 連結 / 結合という用語は以下の意味で使っている。まず憶えておいたほうがよい関数、メソッドは以下の 4 つだけ。 連結: データの中身をある方向にそのままつなげる。pd.concat, DataFrame.append 結合: データの中身を何かのキーの値で紐付けてつなげる。pd.merge, DataFrame.join 連結 (concatenate) 柔軟な連結 pd.concat ふたつの DataFram

    Python pandas 図でみる データ連結 / 結合処理 - StatsFragments
  • Python pandas strアクセサによる文字列処理 - StatsFragments

    概要 今週の 週刊 pandas は文字列処理について。やたらと文字数が多くなったのだが、これはデータを都度表示しているせいであって自分の話がムダに長いわけではない、、、と思いたい。 今回はこちらの記事に書いた内容も使うので、適宜ご参照ください。 サンプルデータ なんか適当な実データないかな?と探していたら 週間少年ジャンプの過去作品の連載作品 / ジャンルなどがまとめられているサイトをみつけた。これを pandas で集計できる形まで整形することをゴールにしたい。 KTR's Comic Room: Weekly Jump Database データの読み込み 上記リンクの "ジャンプ連載データ表" を、ファイル名 "jump_db.html" としてローカルに保存した。 補足 pd.read_html では引数に URL を渡して 直接ネットワークからファイルを読むこともできる。が、今回

    Python pandas strアクセサによる文字列処理 - StatsFragments
  • Python pandas データ選択処理をちょっと詳しく <後編> - StatsFragments

    概要 こちらの続き。これで pandas でのデータ選択についてはひとまず終わり。 Python pandas データ選択処理をちょっと詳しく <前編> - StatsFragments Python pandas データ選択処理をちょっと詳しく <中編> - StatsFragments サンプルデータの準備 データは 前編と同じものを使う。ただし変数名は変えた。 import pandas as pd s1 = pd.Series([1, 2, 3], index = ['I1', 'I2', 'I3']) df1 = pd.DataFrame({'C1': [11, 21, 31], 'C2': [12, 22, 32], 'C3': [13, 23, 33]}, index = ['I1', 'I2', 'I3']) s1 # I1 1 # I2 2 # I3 3 # dtype:

    Python pandas データ選択処理をちょっと詳しく <後編> - StatsFragments
  • pandas でメモリに乗らない 大容量ファイルを上手に扱う - StatsFragments

    概要 分析のためにデータ集めしていると、たまに マジか!? と思うサイズの CSV に出くわすことがある。なぜこんなに育つまで放っておいたのか、、、? このエントリでは普通には開けないサイズの CSV を pandas を使ってうまいこと処理する方法をまとめたい。 サンプルデータ たまには実データ使おう、ということで WorldBankから GDPデータを落とす。以下のページ右上の "DOWNLOAD DATA" ボタンで CSV を選択し、ローカルに zip を保存する。解凍した "ny.gdp.mktp.cd_Indicator_en_csv_v2.csv" ファイルをサンプルとして使う。 http://data.worldbank.org/indicator/NY.GDP.MKTP.CD?page=1 補足 pandas の Remote Data Access で WorldBan

    pandas でメモリに乗らない 大容量ファイルを上手に扱う - StatsFragments
  • Python pandas データ選択処理をちょっと詳しく <中編> - StatsFragments

    こちらの続き。 上の記事では bool でのデータ選択について 最後にしれっと書いて終わらせたのだが、一番よく使うところなので中編として補足。 まず __getitem__ や ix の記法では、次のような指定によって 行 / 列を選択することができた。 index, columns のラベルを直接指定しての選択 index, columns の番号(順序)を指定しての選択 index, columns に対応する bool のリストを指定しての選択 ここでは上記の選択方法をベースとして、ユースケースごとに Index や Series のプロパティ / メソッドを使ってできるだけシンプルにデータ選択を行う方法をまとめる。 補足 一部の内容はこちらの記事ともかぶる。下の記事のほうが簡単な内容なので、必要な方はまずこちらを参照。 簡単なデータ操作を Python pandas で行う - S

    Python pandas データ選択処理をちょっと詳しく <中編> - StatsFragments
  • Python pandas データ選択処理をちょっと詳しく <前編> - StatsFragments

    概要 書いていて長くなったため、まず前編として pandas で データを行 / 列から選択する方法を少し詳しく書く。特に、個人的にはけっこう重要だと思っている loc と iloc について 日語で整理したものがなさそうなので。 サンプルデータの準備 import pandas as pd s = pd.Series([1, 2, 3], index = ['I1', 'I2', 'I3']) df = pd.DataFrame({'C1': [11, 21, 31], 'C2': [12, 22, 32], 'C3': [13, 23, 33]}, index = ['I1', 'I2', 'I3']) s # I1 1 # I2 2 # I3 3 # dtype: int64 df # C1 C2 C3 # I1 11 12 13 # I2 21 22 23 # I3 31 32

    Python pandas データ選択処理をちょっと詳しく <前編> - StatsFragments
  • 1