タグ

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

  • 動的時間伸縮法 / DTW (Dynamic Time Warping) を可視化する - StatsFragments

    いま手元に 20万件くらいの時系列があって、それらを適当にクラスタリングしたい。どうしたもんかなあ、と調べていたら {TSclust} というまさになパッケージがあることを知った。 このパッケージでは時系列の類似度を測るためのさまざまな手法 (=クラスタリングのための距離) を定義している。うちいくつかの手法を確認し、動的時間伸縮法 / DTW (Dynamic Time Warping) を試してみることにした。 DTWの概要 時系列相関 (CCF) の場合は 片方を 並行移動させているだけなので 2つの系列の周期が異なる場合は 相関はでにくい。 DTW では 2つの時系列の各点の距離を総当りで比較した上で、系列同士の距離が最短となるパスを見つける。これが DTW 距離 になる。そのため、2つの系列の周期性が違っても / 長さが違っても DTW 距離を定義することができる。 アルゴリズム

    動的時間伸縮法 / DTW (Dynamic Time Warping) を可視化する - StatsFragments
    somemo
    somemo 2017/05/30
  • Python pandas アクセサ / Grouperで少し高度なグルーピング/集計 - StatsFragments

    語の説明がなさそうなので。 概要 pandas では groupby メソッドを使って、指定したカラムの値でデータをグループ分けできる。ここでは少し凝った方法を説明。 ※ dtアクセサ の追加、またグルーピング関連のバグ修正がいろいろ入っているので、0.15以降が必要。 ※簡単な処理については下の記事でまとめ。 はじめに 例えばこんなデータがあったとして、 import pandas as pd import datetime df = pd.DataFrame({'dt1': [datetime.datetime(2014, 10, 1), datetime.datetime(2014, 10, 2), datetime.datetime(2014, 10, 3), datetime.datetime(2014, 10, 4), datetime.datetime(2014, 10,

    Python pandas アクセサ / Grouperで少し高度なグルーピング/集計 - StatsFragments
    somemo
    somemo 2016/12/07
  • 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
    somemo
    somemo 2016/11/11
  • PyStan で「StanとRでベイズ統計モデリング」11.3節 - StatsFragments

    著者の松浦さんから「StanとRでベイズ統計モデリング」をいただきました。ありがとうございます! 書籍では Stan の R バインディングである RStan を利用していますが、Stan には Python 用の PyStan もあります。松浦さんが書籍 5.1節の PyStan での実行例を書かれています。 statmodeling.hatenablog.com 補足 PyStan については過去にも書いた内容があります。 sinhrks.hatenablog.com 同じように、「StanとRでベイズ統計モデリング」の内容を Python で実施してみました。 11.3 ゼロ過剰ポアソン分布 以降、書籍 "11.3節 ゼロ過剰ポアソン分布" の流れに沿って Python のスクリプトを記載します。ロジックや処理自体の説明は書籍をご参照ください。データと Stan のスクリプトは Gi

    PyStan で「StanとRでベイズ統計モデリング」11.3節 - StatsFragments
    somemo
    somemo 2016/11/01
    “書名は "StanとRで..." となっていますが、複雑な R コードは出てきません (本エントリの "Stanで実行" 部分がわかれば読める程度です)。そのため、統計モデリングに興味がある Python ユーザにもおすすめです”
  • PyConJP 2016: pandasでの時系列処理についてお話させていただきました - StatsFragments

    21日、22日と PyCon JP に参加させていただきました。ご参加いただいた皆様、スタッフの皆様ありがとうございました。資料はこちらになります。 pandas による時系列データ処理 pandas を使った時系列データの前処理と、statsmodels での時系列モデリングの触りをご紹介しました。 speakerdeck.com 時系列モデルの考え方については全く説明していないので、以下書籍などをご参照ください。 経済・ファイナンスデータの計量時系列分析 (統計ライブラリー) 作者: 沖竜義出版社/メーカー: 朝倉書店発売日: 2010/02/01メディア: 単行購入: 4人 クリック: 101回この商品を含むブログ (6件) を見る 元ネタ 以下のエントリをベースに新しい内容を追加しています。 sinhrks.hatenablog.com 時系列モデルを含む Python パッケ

    PyConJP 2016: pandasでの時系列処理についてお話させていただきました - StatsFragments
    somemo
    somemo 2016/09/26
    “PyFlux Python パッケージで広く使われているものはありません。 というわけで、作りました。 累積和法による変化点検知: R の {changepoint} の実装と同一 成分分解 + Generalized ESD test による異常検知: R の {AnomalyDetection} の実装”
  • KalmanFilter の動きを可視化する 二次元版 - StatsFragments

    こちらのつづき。一次元での動きはわかってきたので、今回は二次元でやってみる + KalmanFilter の予測 F を入れてみる。 二次元への拡張 まず以下の条件で考える。 二変数は とし、それぞれ独立に動く 観測誤差は それぞれの成分で独立 真値の予測, システムの入力はなし ( , ) 真値の誤差は時間変化しない ( ) 真値と観測値は同じ座標系 ( ) ※アニメーション部分のコードはちょっと汚いので省略 / gist に添付。 set.seed(1) # 観測系列のサンプルサイズ n <- 100 # 真の値 x <- c(rep(0, n / 4), seq(0, 10, length.out = n / 4), rep(10, n / 4), seq(10, 0, length.out = n / 4)) y <- c(seq(0, 10, length.out = n / 4

    somemo
    somemo 2016/04/28
  • KalmanFilter の動きを可視化する 一次元版 - StatsFragments

    KalmanFilter をきちんと理解したいのだが いまいち 具体的な動作がわからない、、、ということで実装 & 可視化してみた。 KalmanFilter とは 誤差が乗っているであろう観測値の系列について、直前の観測と現在の観測を用いて 真の状態を推定する手法。例えば GPSで取得した位置情報から、正しい位置を推定する 取得可能な経済指標から 真の景気の状態を推定する カルマンフィルター - Wikipedia 理論 はてなTeX 記法で うまく数式がかけないところがあるので 英語wikipedia の数式を使う。KalmanFilter はある時点で観測を行うたびに 入力値を使って次の状態を予測するとともに、現時点の予測値を補正する処理を繰り返す。 予測: k-1 時点の値を利用して予測した k 時点での"真値の予測値" k-1 時点の値を利用して予測した k 時点での「真

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

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

    Python pandas 欠損値/外れ値/離散化の処理 - StatsFragments
    somemo
    somemo 2016/02/04
  • 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
    somemo
    somemo 2015/11/15
  • Python 次世代の多次元配列パッケージ群 - StatsFragments

    このところ、たびたび NumPy 後継が...とか 並列処理が...という話を聞くので、この秋 注目の多次元配列パッケージをまとめたい。 バックエンド系 NumPy のように数値計算処理を自前で実装しているパッケージ。 DyND Blaze プロジェクトのひとつ。C++ 実装 + Python バインディング。GitHub にいくつか Example があがっているが、複合型やカテゴリカル型、GroupBy 操作がサポートされていて熱い。ラベルデータも NumPy より簡単に実装できそうだ。 speakerdeck.com 並列分散系 自身では直接 数値計算処理を行わず、バックエンド ( 主に NumPy )を利用して並列/分散処理を行うパッケージ。1 物理PC/複数コアでの並列計算を主用途とし、NumPy, pandas では少し苦しいが PySpark などを使うほどじゃない...とい

    Python 次世代の多次元配列パッケージ群 - StatsFragments
  • Python pandas のデータを Highcharts/Highstock + Jupyter でプロットしたい - StatsFragments

    R を使っている方はご存知だと思うが、R には {htmlwidgets} というパッケージがあり、R 上のデータを任意の Javascript ライブラリを使ってプロットすることが比較的カンタンにできる。{htmlwidgets} って何?という方には こちらの説明がわかりやすい。 RPubs - htmlwidgetsでJavascriptの可視化をRに 同じことを Python + pandas を使ってやりたい。サンプルとして利用する Javascript ライブラリは 上の資料と同じく Highcharts、Highstock にする。 www.highcharts.com 補足 pandas-highcharts という Python パッケージもあるが、このエントリでは任意の Javascript ライブラリで使えるであろう方法を記載する。 Highcharts でのプロット

    Python pandas のデータを Highcharts/Highstock + Jupyter でプロットしたい - StatsFragments
    somemo
    somemo 2015/08/12
  • ロジスティック回帰 (勾配降下法 / 確率的勾配降下法) を可視化する - StatsFragments

    いつの間にかシリーズ化して、今回はロジスティック回帰をやる。自分は行列計算ができないクラスタ所属なので、入力が3次元以上 / 出力が多クラスになるとちょっときつい。教科書を読んでいるときはなんかわかった感じになるんだが、式とか字面を追ってるだけだからな、、、やっぱり自分で手を動かさないとダメだ。 また、ちょっとした事情により今回は Python でやりたい。Python のわかりやすい実装ないんかな?と探していたら 以下の ipyton notebook を見つけた。 http://nbviewer.ipython.org/gist/mitmul/9283713 こちらのリンク先に2クラス/多クラスのロジスティック回帰 (確率的勾配降下法) のサンプルがある。ありがたいことです。理論的な説明も書いてあるので ロジスティック回帰って何?という方は上を読んでください (放り投げ)。 この記事で

    ロジスティック回帰 (勾配降下法 / 確率的勾配降下法) を可視化する - StatsFragments
    somemo
    somemo 2015/07/13
  • 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
    somemo
    somemo 2015/06/18
    “先日 リリースされた v0.16.2 にて pipe メソッドが追加された。これは R の {magrittr} というパッケージからインスパイアされたもの”
  • R {ggplot2} で独自の geom を手軽に作りたい - StatsFragments

    重要 このエントリは {ggplot2} 1.1.0 以前の情報です。v2.0.0 以降の方法は vignettes "Extending ggplot2" を読んでください。 CRAN - Package ggplot2 はじめに {ggplot2} を使っていると、新しい描画図形 (geom) を作りたいなという場合がたまにある。その方法は {ggplot2} の Wiki に書いてあり、手順は、 描画図形の実体を grid::Grob として定義する (リンク先の例では fieldGrob ) 定義した Grob を 呼び出す描画用クラスを ggplot2:::Geom を継承して作る (リンク先の例では GeomField ) 描画用関数 geom_xxx を作る (リンク先の例では geom_field ) 手順のうち 新しい Grob を作るのは少し面倒な感じだ。が、作りたい

    R {ggplot2} で独自の geom を手軽に作りたい - StatsFragments
    somemo
    somemo 2015/03/28
  • 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
  • 1