あれもPython,これもPython

Pythonメモ※本サイトはアフィリエイトを利用しています

PandasでWindow関数(行を残す集約:partition)を再現したい(transformを使う)

Window関数の中には、行を集約せず、集計結果を横に残す計算をすることがあります。 sum(col) over(partition by group_col) これをPandasで行うにはtransformを使います。 (あまりよくない方法として、集計をしたものをjoinする方法もあります) transformを…

PandasでWindow関数(行移動:lagなどを再現したい(shift()を使う)

Pandasでlag,lead,first_value,last_valueなどを再現します。 lag(col,1) over(order by sort_col) ,first_value(col) over(order by sort_col) lag,lead系 shiftを使います。 shiftはwindow関数のorder by句のような変数はないため、先にソートして使う必要…

PandasでWindow関数(移動演算系:移動平均)を再現したい(rolling().*を使う)

前回に引き続き、window関数を再現します。 今回は移動平均などです。 esu-ko.hatenablog.com SQLで7行移動平均を書く場合は avg(col) over(order by sort_col rows between 6 preceding and current row) です。 pandasの場合 import pandas as pd df.col.r…

PandasでWindow関数(累積系:runsum/cumsum)を再現したい(cum*を使う)

SQLの分析でよく使うウィンドウ関数、その中の累系の再現です。 sum(col) over(order by sort_col rows between unbounded preceding and current row みたいなやつです。 sort_colで並べて、そのカラムまでの累積を上では出しています。 Pandasの場合 df.co…

PythonでRFM分析を行いたい

RFM分析は、過去に書いたデシル分析の拡張です。 金額、行動頻度、最近行動タイミングの3つの属性から、ユーザーをセグメント分けします。 esu-ko.hatenablog.com 分析と言っても、ここから示唆を出すのは難しいですが、、、 たいていの使い方としては、先に…

Pandasで数値をもとにグループにわけたい(cut,qcutを使う)

使い方がややこしい、cutとqcutの話です。 デシル分析をする際に便利なqcutは下記記事でも使いました。 esu-ko.hatenablog.com 上記記事のなかで、グループの中のユーザー数ではなく、数値そのものを等分する場合の話も触れました。 実はPandasにはその時に…

Pandasでデシル分析をしたい(qcutを使う)

デシル分析は、施策の範囲や打ち分けを決める際にシンプルにできる手法です。 現状では、デジタルでは、施策を全体にうってもコストが変わらなかったり、 初めからidと紐づいたデータが取れることも増えたので、あまり使うことはなかもしれませんが、 それで…

Pythonの統計処理や機械学習でカテゴリ変数を扱いたい(get_dummiesを使う)

統計処理や機械学習でカテゴリ変数を扱う場合、 そのままでは使えないことが多く、数値変換やフラグ変換が必要です。 pandas.get_dummiesはフラグ変換をかなり簡単にしてくれますが、 引数の渡し方で挙動が変わるので注意が必要です。 カテゴリ変数の扱い方 …

Pythonでアソシエーション分析を行う(apyoriを使う)

過去にアソシエーション分析を書いたときはOrangeを用いました。 このパッケージ内からアソシエーション分析が消えたため、代替を探してみました。 esu-ko.hatenablog.com apyoriの基本 導入 !pip install apyori 基本的な使い方 from apyori import apriori…

sympyで文字列を直接数式として扱いたい(sympifyを使う)

過去にPythonで数式を扱い、微積などを扱う方法を書きました。 esu-ko.hatenablog.com このとき、数式の変数はsymbolsやSymbolで一度定義し、 その変数に直接計算式を追加しているのですが、これは大変。 特に、アプリケーションに組み込んだり、可変にした…

Pythonの辞書を様々なファイル形式で保存する

Pythonの辞書{}をファイルなどに永続化する方法は複数あります。 import json d = {'test':1} # jsonファイルとして保存 with open('json.json','w') as f: json.dump(d,f) # json stringとしてテキストファイルに保存 with open('json.txt','w') as f: txt …

Pandasでcross joinを行いたい

SQLでデータを用意する際、cross joinを用いて欠損がないデータセットをつくり、 そこに情報をleft outer joinしていくことがあります。 Pandasでも同様の処理をしたいと思い、ドキュメントをみたのですが、 Pandasのmerge(SQLのjoin)のhowはleft,right,oute…

Pythonでリストから出現が一番大きいものを探す(modeを使った小技)

完全に小ネタです。 リストの中で一番多くでてくる項目を出したいとき、 Counterを使ったりPandasで数を出して、並べたり、 自分でアルゴリズムを書いたりすると思います。 そんなときに、とりあえず、一番多く出現したものが何かを知りたい時、 デフォルト…

Pythonだけで乱数を扱いシミュレーションをしたい(randomを用いる)

シミュレーションなどをしたいときに、 適当にデータを生成したり、 既にあるデータを一旦へらすためにサンプリングしたい場合があります。 特に、自分で現実を表現したobjectをつくり、 乱数でデータを与えたい場合に、numpyやscipyをわざわざ使わず、 rand…

gzipを扱いたい(gzipかtarfileを使う)

最近人からデータをもらったとき、.tar.gzできました。 こうした、gzip系の圧縮ファイルをpythonで扱う場合、 標準のgzipモジュールかtarfileモジュールが使えます。 gzの場合 gzipモジュール 単純なgzipの解凍の場合はgzipモジュールでいけます。 対象のgzi…

Pandasでプログレスバーを出したい(tqdmを用いる)

分析でPandasを用いる場合、 量の多い行列方向の処理をしたいときに進捗を可視化したいことがあります。 Pythonのforループでプログレスバーを出すのにはtqdmを用いますが、 esu-ko.hatenablog.com pandasでも同様にtqdmを用いることができます。 pandasのメ…

分析用にファイルを読み込みたい(pd.read_csvを使う)

Python自体でcsvファイルを読み込むなら、 csvモジュールを使うのが基本です。 参考: esu-ko.hatenablog.com ただし、分析などの際は、ファイルを読み込んで最終的にデータフレームにすることがほとんどです。 そういった場合、pandas.read_csv()を使うと手…

今週のPython(2016年5月14日週)

Djangoのauto_nowなのにアップデートされないことがある PythonのフルスタックなWebフレームワークといえば、Django。 ただ、機能多すぎるのでなかなか覚えられませんね・・・。 Pythonのwebフレームワークの中では数少ない強力なORMを持ってるので、 そこを…

今週のPython(2016年4月23日週)

GWが始まりました。 みなさんはもちろん、GWにどんなPythonをやるかもう決まっていると思います。 ちなみに私はDeepLearningのお勉強の予定です。 Chainer可愛いよ、Chainer Python(twython)でPCからツイッターに30秒動画(mp4)を投稿してみる。 定期的に…

Pythonモジュール調査環境について(2016/04現在)

Pythonを使う上で、実際に開発するのに使用している環境と、 調査するための環境は切り分けています。 特に自分の場合、ブログのための調査などもあり、 これは開発の合間に必要になってするリサーチとは結構違うと思います。 その辺の環境に関して今回は書…

今週のPython(2016年4月16日週)

今週もPython記事です。

Cloud9でDjango入門(3_Modelの定義)

WebフレームワークとしてのDjango DjangoはWebフレームワークであるので、 Webアプリケーションを開発するにあたって必要だが複雑な実装を 隠ぺいしてくれます。 そのためWebアプリケーションの開発の際は、 Djangoの規則に基づいて実装することで、 ド定番…

Cloud9でDjango入門(2_初期設定)

ProjectとApplication Djangoでアプリケーションを作成する場合、 projectとappliationという単位が存在します。 django-admin.py startproject プロジェクト名 で作成されるのがプロジェクトであり、もっとも大きな一つのまとまりになります。 このプロジェ…

今週のPython(2016年4月9日週)

(近況) ここの所、忙しくてあまりPythonに触れられていません。 安西先生、Python(とtwitter)が、やりたいです。。。 そんなこんなで今週のPythonです。

PythonでBASE64を扱いたい(base64を使う)

PythonでBASE64を扱うには、まさしくその通りの名前のモジュールbase64を用います。 画像を扱う時に備えて勉強しておく必要があります。 そのまえに、BASE64とは BASE64はバイナリデータを64種類の文字に置き換えて表現する方法です。 64の内訳は 大文字英数…

Pythonで画像編集がしたい(Pillowを使う)

そろそろ画像まわりも覚えていきたいので、 まずPillowをためす。 機械学習なんかをするにはOpenCVやnumpyで画像を扱える必要があるのだろうけど、 まずは簡単な画像編集から。

今週のPython(2016年4月2日週)とイテレータ

はいはーい、今週のPythonです。 始めての方向けに説明すると、 毎週twitterで(手動で)キュレーションした記事を紹介してます。 で、その反応状態を見て、コメントをするシリーズ記事です。 今回は若干趣向を変えて、いきなり記事を全部紹介します。 Pytho…

Cloud9でDjango入門(1_Cloud9でプロジェクトを始める)

年度も変わり、今年はプログラミングに挑戦しようかな、という人も多いんじゃないでしょうか。 プログラミングといえばPythonなので(全俺調べ) Pythonでwebアプリ入門記事を書いていくことにしました。 (完成まで長くなりますが、ぜひお付き合い&応援いた…

PythonでさくっとwebAPIを立てる(falconを使う)

画面なんて作るから構築に時間がかかるんだ!(極論) ※なお、良心がタイトルを「まだテンプレートで消耗しているの?」にさせなかった模様。 Pythonの有名ドコロwebフレームワークは、 どれもデフォルトでテンプレート機能が用意されています。 (対してORMはDj…

Pythonで地図情報を扱いたい(foliumを使用する)

PythonだとCUIな処理のイメージが強いですが、 ビジュアライズでも強力なモジュールがそろっています。 例えば地理情報の処理では、 foliumというモジュールが便利です。 github.com