あれもPython,これもPython

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

Pandasのhead,tailで表示しない行を指定する(n=-xを用いる)

pandasで最初数行を指定するhead,最後数行を指定するtailには負の数値を与えることもできます。 少々わかりにくいにですが、マイナスの値の場合、反対からその分をマイナスにした残りを返します。 import pandas as pd s = pd.Series([i for i in range(10)]…

Pythonでbox-cox変換をしたい

正規分布していなやつを、正規分布の形に近づける操作を一般化しているbox-cox変換のやりかたです。 社会事象は正規分布しておらず、対数変換などで強引に近い形にすることもあると思われます。 もちろん正規分布が仮定されないモデルを使うというてもありま…

Pandasでデータ加工に使うものを整理する

Pandasの加工フローは似たような書き方が複数あるため、ベースラインを整理しておきます。 各工程をつなぐ .\で改行ありでつないでいける pipeは使うケースが限られるので基本使わない 行列の抽出 カラムの指定にはfilter()を使う 引数はitems,like,regex 行…

Pythonで欠損値の分析をしたい(missingnoを使う)

データの中には、欠損の発生自体が、意味を持っていることがあります。 特にアンケートデータでは人の心理やアンケート手段の影響、センサーでは環境の要因の影響をうけるためです。 欠損はあんまり考えず、埋めたり取り除くことが多いかもしれませんが、上…

DescribeをPandasだけで可視化したい

データを最初に読み込んだ時に、なんとなくの傾向/分布をみることから始まります。 Pandasのdf.describeは正しくこの時に便利で、カラムごとの基本統計量を一発で手に入れることができます。 しかし、カラムの数が多いと、表が大きくなり、把握しにくくなる…

前処理でsklearnの結果がデータフレームで欲しい(sklearn_pandasを使う)

前処理をしている時に、集計などの処理はpandasで事足りますが、標準化などはsklearnを使いたいことがあります。 ▼例えばRobustScalerなど esu-ko.hatenablog.com このときに、sklearnのpreprocessingはDataFrameではなくnumpy.arrayで返してくるため、その…

Pythonでネットワーク構造のデータを扱いたい(networkxを扱う)

データ分析の仕事をしていると、基本的な表形式のデータ以外では表現しにくい現実事象が存在します。要素と関係性で表現されるネットワークもその一つです。 個人的にはこの形式のデータは、示唆までたどり着きにくいため、ビジネス的な分析とは言いにくいな…

Pythonでデータサイエンス(生存時間解析)

ビジネスの現場では、縦軸に発生日、横軸に経過日の表での残存をみる俗にいうコホート分析が使われることがよくあります。 これはビジネスのデータは日々更新され、始点が異なることが多いのと、終点がはっきりしないことが多いためです。 ロジスティック回…

Pythonで時系列解析をする(ホルトウィンターズ)

時系列データはどこの現場にも存在します。 ただし、説明変数が存在しないことも多いです。 その場合、1変量から構造を取り出す手法が存在します。 基本的なパターンはトレンド + 周期性 + ノイズに分割することです。今回利用するホルトウィンターズもその…

Pythonで時系列解析をしたい(時系列クラスタリング)

時系列のクラスタリングの場合、tslearnに実装されているのでそれを用います。 時系列と非時系列のクラスタリングの違い 非時系列の場合、1行がidとなり、列が変数でその変数でidをクラスタ化します。対して時系列の場合、(よく見る形は)行が時間であり、列…

Pythonでデータサイエンスを試す(回帰をランダムフォレストで)

ランダムフォレストは決定木と同様に、回帰にも使用可能です。 と言うわけで重回帰分析と比較してみます。 ▼重回帰分析はこちら esu-ko.hatenablog.com ランダムフォレスト回帰を試す 分類に使うときのコードは以下に書いていますが、ランダムフォレスト回帰…

Pythonでデータサイエンスを試す(重回帰2)

かつてこの記事を書いた時にOrangeというパッケージを使っていたのですが、もっぱらstatsmodelsなので、 書き直します。 esu-ko.hatenablog.com 当時とおなじく、用いるのはこの本のデータです。 本の中ではR実装です。 コード import pandas as pd df = #い…

Pythonでデータサイエンスを試す(並び替え検定/ブートストラップ検定)

パッケージを使った検定に関しては前に書きました。 esu-ko.hatenablog.com これら、パラメトリックな検定と異なった、並び替え検定を試してみます。 参考はカニ本です。(本の中ではRによる実装) ※クリックするとamazonにとびます。 並び替え検定について カ…

文字列のバイグラムをとりたい(自分で書く)

ユーザー入力のデータを扱っていると、 ゆらぎが存在し、そこからも傾向を取り出したいことがあります。 そうした、文書と言うほどではないカテゴリデータの場合、形態素解析では十分に情報がとりださせないことが多いです。 そこで、最初や最後の文字、文字…

Datatableでデータサイエンスの効率化をしたい(アソシエーションルール)

↓この続きです。 esu-ko.hatenablog.com 今回はアソシエーションルールに関してです。 アソシエーションルールはグラフ作成などではなく、 結果データを各指標やfrom/toで繰り返しソートしたくなります。 ▼アソシエーションルールはこちら esu-ko.hatenablog…

パラメータを変えて正規分布グラフを書きたい(sympyを使う)

確率分布を試しに書く際、データを発生させたりせず試したかったので、数式を扱うsympyで書いてみました。 使うもの # 描画 from sympy.plotting import plot # 数式 from sympy import symbols # 計算 from sympy import exp,pi,sqrt ▼上を読んで「ん?」と…

ipywidgetでデータサイエンスの効率化をしたい(重回帰分析)

これの続きです。 esu-ko.hatenablog.com 基本機能は上記で終わっているので、 今回は目的変数を足してみます。 変更点 ドロップダウンで目的変数を足すことにします。 dp = wi.Dropdown( options=bos.columns, disabled=False ) 使うモデルを回帰にします。…

ipywidgetでデータサイエンスの効率化をしたい(KMeans)

分析をしていると、少しだけ変数を変えたいが、同じ処理をいくつか試したい、ということがあります。 短期間であれば、ループを回し変数を変える、でいけるのですが、 やや時間があきながらやる場合、めんどくさいな、と思います。 逆にGUIツールを使うと、(…

Pandasでよくあるエクセル処理を自動化したい

エクセル業務を自動化する時に、Pandasで使うレシピです。 想定手順は ファイルの読み込み 各シートの結合 集計 見た目を整える 画像で出力 です ファイルを読み込む sheet_name = Noneにすることで、 全てのシートをdictで取得することができます。 import …

Metabaseのカードからデータを取得しデータフレームにしたい

無料で便利なMetabaseですが、クエリに対し、1グラフだったり、取り回しが悪いことがあります。 そこで、大枠のクエリだけはMetabase上で書き、 Python/Rで集計軸を変えたり、結合するといったことをしたくなりました。 基本的な手順 session_idを取得 上記…

APIの結果のjsonをdataframeにしたい(read_jsonを使う)

APIを叩いて取得したjson文字列をさくっとDataFrameにする方法です。 pandasにはread_jsonというjsonを読み込んで、 データフレームにしてくれるものがあります。 実はこれ、ファイルではないjson文字列も対象にできます。 コード import pandas as pd # req…

外れ値に強い標準化をしたい(RobustScalerを使う)

標準化をするときに、強い外れ値に引っ張られ、うまく行かないことがあります。 それを避けるためにロバストな標準化方法がないか調べたところ、中央値とIQRを用いたものがありました。 また、sklearnに実装されていました。 コード from sklearn.preprocess…

TFIDFをモジュールで計算したい(sklearn/nltk/gensimを使う)

TFIDFをパッケージでする場合、三種類の選択肢があります。 ただし、それぞれ入力や出力が違うので注意が必要です。 モジュール 入力 出力 nltk 各行、単語に分けたリスト 行、単語ごとに計算が必要 gensim 各行、単語に分けたリスト スパースマトリクス skl…

カテゴリ列を指定した値でダミー化したい(sklearnのLableBinarizerを使う)

カテゴリ列の種類が多い場合、いくつかを絞ってダミー化したい場合があります。 そんなときは、pandasのget_dummiesよりsklearnのLabelBinarizerの方が便利です。 コード from sklearn.preprocessing import LabelBinarizer lb = LabelBinarizer() #ダミー化…

行列を閾値で0/1化したい(sklearnのBinarizerを使う)

画像データを扱う時など、行列の中の数値をいっぺんに0or1に変換したい時があります。 そんなときはsklearnのBinarizerを用いると便利です。 コード from sklearn.preprocessing import Binarizer import numpy as np #3✖️3のサンプルデータ X = np.random.r…

複数のデータフレームを関数ひとつでmergeしたい(再帰を使う)

小ネタです。複数のデータをmergeする必要があり、見通しが悪くなるときに時々使っています。 使用するデータが頻繁に変わる時に、使うデータだけ管理すれば良いので再実行が楽です。 ※concatは複数渡せるのですが、mergeは渡せないため 再帰するマージを定…

記事来訪データなんかを、テキストマイニングをかける時の前処理

大量の要素が発生する場合、テキストマイニングで使う処理やネットワーク分析的な形におとしたいのですが、 その辺の定型インプットに持っていく前に、結構ケースバイケースの処理をかけなくては行けないことがあります。 Python的には基本中の基本の関数が…

Pandasでdate_trunc的な処理をする(resampleを使う)

pandasで日付ごとに集約する場合、resampleを使うと非常に楽です。 注意点としては、indexに入れておく必要があるところでしょうか。 date_trunc的な挙動 import pandas as pd #365日のデータ one_year = pd.Series(1,index = pd.date_range(start='2020-01-…

Pythonで複数のローカルデータファイルを結合して分析に使う(osを使う)

データ加工の処理をするときに、バラバラになったローカルファイルを扱う必要が出てくることがあります。 そんなときはosモジュールを使うと便利です。 ひとまず、あるディレクトリの中身をすべて出したい os.list_dirを使います。 ファイルオブジェクトやフ…

Pythonでフォーミュラを用いてGLMしたい(statsmodels.formulaを使う)

Rでモデルを作る時に使うフォーミュラのstatsmodels版です。 しょっちゅう、書き方を忘れるので、、、 基本 importします。 まず何をimportするのかを忘れます、、、 #たいてい.apiをつけ忘れる import statsmodels.formula.api as smf #こっちも使うんだけ…