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

pandasでよく使うけど忘れやすい処理のメモ

特定の列削除 del df[‘column_name’] 行のイテレーション for key,row in df.iterrows(): 列条件に一致する行の抽出 df_n = df[df[‘column_name’]==’val’] 平均をとって平均からの差分を取得 mean = df.mean() df = df – mean 特定の列の条件によって変化する新しい列の生成 df[‘new_column_name’] = df[‘column_name’].apply(lambda x: ‘good’ if x>=0 else ‘bad’)