タグ

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

  • 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 でパイプ演算子を使いたい <2> - StatsFragments

    ネタ記事です。/ This is a joke post which makes no practical sense. 過去にこんなエントリを書いた。 sinhrks.hatenablog.com R では パイプ演算子 %>% を使って連続した処理を記述できる。式に含まれる x, y, z は非標準評価 (NSE) によって data.frame の列として解決される。 # R (magrittr + dplyr) df %>% mutate(x = y + z) %>% group_by(x) %>% summarize_each(funs(sum)) Python (pandas) ではほぼ同じ処理をメソッドチェインを使って書ける。チェインとパイプ演算子でどちらが読みやすいかは好みの問題だと思うものの、式の中に 何度も df が出てくるのはちょっとすっきりしない。 # Python

    Python でパイプ演算子を使いたい <2> - StatsFragments
  • 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 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
    masayoshinym
    masayoshinym 2015/11/16
    いつかpandasやろうって思ってから一年の月日が流れた。
  • 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

    最近の空き時間は GitHub で草植えをしている。まずは pandas を日語環境で使う場合に たまに必要になる処理をまとめた パッケージを作った。 インストール pip install japandas 機能 機能の一覧はこちら。 日時処理 日語日付のパース 日の祝日カレンダー 文字列処理 Unicode 正規化 全角/半角変換 リモートデータアクセス 詳細はドキュメントを。 http://japandas.readthedocs.org/en/stable/ 日時処理 日語日付のパース pandas には 日付らしい入力を適切に処理してくれる pandas.to_datetime があるが、これは日語の日付 ( "XX年XX月XX日" とか ) に対応していない。例えば 以下のような入力は日時としてパースされず 文字列のまま残ってしまう。 import pandas as

    Python pandas 日本語環境向けのちょっとしたパッケージ作った - StatsFragments
  • Python pandas で日本の株価情報取得とローソク足チャート描画 - StatsFragments

    以下の記事を読んでいて、pandas 標準では日株式の情報が直接とれないことに気づいたのでやり方をまとめたい。 この記事では以下 2 点の処理について書く。 Yahoo! ファイナンス からの株価取得 ローソク足チャートの描画 補足 標準の v0.15.2 で簡単に動きをみているが、ちゃんとテストはしてない。特にローソク足チャートについては pandas の plot クラスにかなり依存しているため、バージョンが変わると動かなくなる可能性がある。 1. 株価の取得 まず、pandas には標準機能として外部サイトのデータを DataFrame で取得する機能 DataReader がある。DataReader では 日株の情報は直接はとれないが、簡単に動きを書いておく。 DataReader での取得 DataReader では、0.15.2 現在で以下 6 つのデータソースをサポート

    Python pandas で日本の株価情報取得とローソク足チャート描画 - StatsFragments
  • Python pandas 図でみる データ連結 / 結合処理 - StatsFragments

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

    Python pandas 図でみる データ連結 / 結合処理 - 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
  • 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