pandasで線形回帰をする

pandasで線形回帰をするにはols関数を使えばいけますが、statsmodelsという特殊なパッケージをインストールしていないといけません statsmodelsをインストールしていないと ImportError: No module named scikits.statsmodels.api みたいなエラーがでます。 それを踏まえて線形回帰をするとこのような感じ import pandas as pd import matplotlib.pyplot as plt plt.style.use(‘ggplot’) df_origin = #適当な系列データ linear_model = pd.ols(y=df_origin[‘売上’],x=df_origin[‘時間’]) df_test = pd.DataFrame({ ‘origin’:df_origin[‘売上’], ‘regresssion’:linear_model.y_fitted },index=df_origin[‘時間’]) df_test.plot()

python pandasのDataFrameをいい感じにmultiprocessingで並列処理する

pandasのDataFrameに文字列データとかを入れてるとなんとなく並列処理したくなります。そんな時のTips とりあえずデータを作る import pandas as pd import numpy as np from multiprocessing import Pool import multiprocessing df = pd.DataFrame({ ‘animal’:[‘monkey’,’dog’,’monkey’,’cat’,’dog’], ‘count’:[2,4,1,4,5] }) df データを等分割して並列化する 各行が独立していて、計算処理を分割した各行に実行したい場合。 numpyのarray_splitはDataFrameを入れても均等に分割してくれます。それを利用して均等にDataFrameを分割して並列化します。 今回は普通に各行のcountを3倍する計算を並列化してみます。 def split_parallel(df,num_split,map_func): p = Pool(multiprocessing.cpu_count()) df_split = np.array_split(df,num_split) result = p.map(map_func,df_split) p.close() return pd.concat(result) def map_count(df): df[‘count’] *=3 return df df = split_parallel(df,10,map_count) df データをキーごとに分割する 例えばanimalの種類ごとに並列化したい場合(map reduceによくある感じ)、下記のようにDataFrameを指定カラムの種類ごとに分割して並列化できます。 def…

pandasで不均衡データをアンダーサンプリング、オーバーサンプリングする

何やらよさげな記事を見つけたんですが pandasを使った不均衡データの整形 – drilldripper’s blog imblearnというパッケージを使えばもっと簡単にアンダー(オーバー)サンプリング可能なのでgistにあげました(ipynbをwordpressに貼り付けられないのつらすぎる) https://gist.github.com/garicchi/0a587042bb74dfd2c7c3fccbd43a9fcf

LUISをPythonから使う

MicrosoftのCognitiveServiceの一つであるLUISはPythonのSDKが用意されているのでそれを利用すればかんたんにLUISの構築済みモデルにPythonからアクセスできます。 ここでは構築済みLUISモデルをPythonから使う例を解説するので予めLUISでモデルをつくってpublishしておいてください。 まずSDKをインストールします。おそらくPyPIに公開されていないのでgitリポジトリからインストールします。 pip install git+https://github.com/Microsoft/Cognitive-LUIS-Python.git あとはこのようなコードでテキストを分類し、最も高いスコアをつけたインテントを取得できます。 from luis_sdk import LUISClient appid = “{app id}” appkey = “{app key}” text = “あああ” client = LUISClient(appid,appkey,True) res = client.predict(text) top = res.get_top_intent() top_name = top.get_name() top_score = top.get_score()