データ分析のデータ処理系

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

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

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

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

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

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

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を使います。 ファイルオブジェクトやフ…

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…

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

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