【python】DataFrameの統計量
DataFrameのデータの計算や統計の方法。
#各モジュールをインポートする import pandas as pd import numpy as np from pandas import Series, DataFrame #テスト用のDataFrameの作成 data = np.array([[1,2,np.nan], [np.nan, 3, 4, ]]) dframe = DataFrame(data, index=['A','B'], columns=['col1', 'col2', 'col3'])
いろいろな計算方法
#足し算 dframe1.sum() #出力結果 col1 1.0 col2 5.0 col3 4.0 dtype: float64 #行方向に足し算 dframe1.sum(axis=1) #出力結果 A 3.0 B 7.0 dtype: float64 #累計 dframe1.cumsum() #出力結果 col1 col2 col3 A 1.0 2.0 NaN B NaN 5.0 4.0
平均や分散などをまとめて表示する
dframe1.describe() #出力結果 col1 col2 col3 count 1.0 2.000000 1.0 #個数 mean 1.0 2.500000 4.0 #平均値 std NaN 0.707107 NaN #標準偏差 min 1.0 2.000000 4.0 #最小値 25% 1.0 2.250000 4.0 #25% 50% 1.0 2.500000 4.0 #50% 75% 1.0 2.750000 4.0 #75% max 1.0 3.000000 4.0 #最大値
【python】DataFrameの並び替え
pandasのDataFrameの並び替えの方法について。
DataFrame.sort()ではエラーになってしまったので調べてみると、
0.19.0以降のバージョンからメソッドが削除されていて、
並び替えをするにはsort_values(), sort_index()を使用する必要がある。
まずはnumpyとpandasのインポート。
import numpy as np import pandas as pd from pandas import Series, DataFrame #ランダムなデータを作るために、randnもインポート from numpy.random import randn
sort_values(), sort_index()での並び替え
テスト用のDataFrameの作成
#randnを使用して、ランダムな5*3のDataFrameを作成 dframe = DataFrame(randn(15).reshape((5,3)) ,index=['A','C','D','B','E'],columns=['col1','col2','col3']) #出力結果 col1 col2 col3 A 1.065672 1.747904 0.035748 C 0.955697 0.472874 0.463158 D 0.286586 -0.695141 0.856504 B -1.279603 0.537965 -1.070702 E 1.100331 0.165572 -1.151672
sort_values()
sort_value()では、「by=''」で列を指定し、対象列を基準に並び替えされる。
降順にする場合は、ascending=Falseを指定する。
#sort_value()では、「by=''」で列を指定する dframe.sort_values(by='col2') #出力結果 col1 col2 col3 D 0.286586 -0.695141 0.856504 E 1.100331 0.165572 -1.151672 C 0.955697 0.472874 0.463158 B -1.279603 0.537965 -1.070702 A 1.065672 1.747904 0.035748 #降順にする場合は、ascending=Falseを指定する dframe.sort_values(by='col2', ascending=False) #出力結果 col1 col2 col3 A 1.065672 1.747904 0.035748 B -1.279603 0.537965 -1.070702 C 0.955697 0.472874 0.463158 E 1.100331 0.165572 -1.151672 D 0.286586 -0.695141 0.856504 #列の並び替えはaxis=1を指定する dframe.sort_values(by='B', axis=1) #出力結果 col1 col3 col2 A 1.065672 0.035748 1.747904 C 0.955697 0.463158 0.472874 D 0.286586 0.856504 -0.695141 B -1.279603 -1.070702 0.537965 E 1.100331 -1.151672 0.165572
sort_index()
sort_index()も同様に並び替えが出来る。
「by=''」は必要ない。
#indexで並び替え dframe.sort_index() #出力結果 col1 col2 col3 A 1.065672 1.747904 0.035748 B -1.279603 0.537965 -1.070702 C 0.955697 0.472874 0.463158 D 0.286586 -0.695141 0.856504 E 1.100331 0.165572 -1.151672 #columnで並び替え dframe.sort_index(axis=1, ascending=False) #出力結果 col3 col2 col1 A 0.035748 1.747904 1.065672 C 0.463158 0.472874 0.955697 D 0.856504 -0.695141 0.286586 B -1.070702 0.537965 -1.279603 E -1.151672 0.165572 1.100331
まとめ
DataFrameは、sort_index(), sort_values()で並び替えが出来る。
【python】スペース有無, 順番違いのキーワード重複の削除
派遣 事務 求人
派遣 事務
求人 事務 派遣
事務 求人
事務派遣
などのキーワードから、スペース有無や順番違いのキーワードを除外したい。
▼アウトプットイメージ
派遣 事務 求人
派遣 事務
事務 求人
キーワード重複の削除
下準備
#numpyのインポート import numpy as np #キーワードを配列に代入。 keywords = ['派遣 事務 求人', '派遣 事務','求人 事務 派遣','事務 求人'] #キーワード整形用の関数を作成 def shaping_kw(keyword): split_kw = keyword.split(' ') #キーワードをスペースで分割 sorted_kw = sorted(split_kw) #分割したキーワードを並び替え join_kw = ''.join(sorted_kw) #並び替えたキーワードを連結 return join_kw #shaping_kwを、keywordsの値に実行 shaped_keywords = list(map(lambda keyword:shaping_kw(keyword),keywords)) #shaped_keywords ['事務求人派遣', '事務派遣', '事務求人派遣', '事務求人', '事務派遣']
重複を削除したキーワードの取り出し
#numpyのunique()を使用して、ユニークなキーワードを取り出す
np.unique(shaped_keywords)
実行結果
array(['事務求人', '事務求人派遣', '事務派遣'],dtype='<U6')
まとめ
スペース有無,前後の順番が違うキーワードは下記の手順で重複除外出来る。
①スペースで分割
②分割したキーワードの並び替え
③並び替えたキーワードを連結
④numpyのunique()で、ユニークな値だけ取り出す
このままのデータだと、キーワード調査とかには活用出来ないので
整形前のキーワードを残した上で重複を除外する方法を考えないと・・。
2017/11/03追記:AdWordsのデータから、整形後データのCSV出力まで一気にする方法が分かった
otoha0510.hatenablog.com
【python】DataFrame, Seriesの計算
いつも通り、numpy , pandasのインポート。
import numpy as np import pandas as pd from pandas import Series, DataFrame
Seriesの計算
#テスト用のシリーズの作成 series1 = Series([1,2,3],index=['A','B','C']) series2 = Series([2,0,5,8],index=['B','C','D','E'])
足し算
series1 + series2 #出力結果 A NaN B 4.0 C 3.0 D NaN E NaN dtype: float64
series1,series2の両方にインデックスが存在している「B,C」は数値が足し算される。
インデックスが共通になっていないA,D,Eについては、NaNになる。
共通のインデックスが無い場合に数値を埋める
series1.add(series2, fill_value=0) #出力結果 A 1.0 B 4.0 C 3.0 D 5.0 E 8.0 dtype: float64
「fill_value=0」を指定する事で、共通していないインデックスを埋める事ができる。
DataFrameの計算
#テスト用のDataFrameの作成 dframe1 = DataFrame(np.arange(4).reshape((2,2)), columns=['col1','col3'], index=['B','D']) dframe2 = DataFrame(np.arange(9).reshape((3,3)), columns=['col1','col2','col3'], index=['A','B','C'])
足し算
dframe1 + dframe2 #出力結果 col1 col2 col3 A NaN NaN NaN B 3.0 NaN 6.0 C NaN NaN NaN D NaN NaN NaN
Series同様に、共通している箇所のみが足し算される。
共通のインデックスが無い場合に数値を埋める
dframe1.add(dframe2, fill_value=0) #出力結果 col1 col2 col3 A 0.0 1.0 2.0 B 3.0 4.0 6.0 C 6.0 7.0 8.0 D 2.0 NaN 3.0
こちらもSeries同様に、「fill_value=0」を指定すると数値を埋める事が出来る。
dframe1,dframe2の両方に数値がない箇所はNaNで表示される。
【python】DataFrameのデータ取り出し
pandasとnumpyのインポート。
また、pandasからSeriesとDataFrameもインポートする。
import pandas as pd import numpy as np from pandas import Series, DataFrame
テスト用のDataFrameを作成
dataframe1 = DataFrame(np.arange(15).reshape(5,3), index=['A','B','C','D','E'], columns=['col1','col2','col3'])
インデックス・行を指定して取り出し
#行を指定して取り出し dataframe1.ix[1] #インデックスを指定して取り出し dataframe1.ix['C']
実行結果
#行を指定して取り出し col1 3 col2 4 col3 5 Name: B, dtype: int32 #インデックスを指定して取り出し col1 6 col2 7 col3 8 Name: C, dtype: int32
条件を満たすデータのみ取り出し
特定の列が値を満たす場合のみ取り出す
dataframe1[dataframe1['col2']>8]
dataframe1のcol2の値が8より大きい場合のみを対象にする。
実行結果
col1 col2 col3 D 9 10 11 E 12 13 14
【python】DataFrameやSeriesでの行・列の削除
pandasとnumpyのインポート。
また、pandasからSeriesとDataFrameもインポートする。
import pandas as pd import numpy as np from pandas import Series, DataFrame
シリーズの場合
テスト用のシリーズを作成
series1 = Series(np.arange(5), index=['A','B','C','D','E'])
実行結果
A 0 B 1 D 3 E 4 dtype: int32
DataFrameの場合
テスト用のDataFrameを作成
dataframe1 = DataFrame(np.arange(9).reshape(3,3), index=['A','B','C'], columns=['col1','col2','col3'])
実行結果
col1 col2 col3 B 3 4 5 C 6 7 8
列の削除
dataframe1.drop('col2',axis=1)
列の削除を行う場合は、axis=1を指定する。
実行結果
col1 col3 A 0 2 B 3 5 C 6 8