PythonのPandasを使った行列の標準化・正規化
標準化=一般的に平均0、分散と標準偏差が1になるように値を変化させる
正規化=一般的に最大値を1、最小値0にする
ざっくり分けると
尺度が違うものを比べるときが標準化
値の閾値の上限・下限が決まっているようなものは正規化
標準化すると負の値になるものも出るので、その後の解析で不都合があるときは考えて使う。
#いつものおまじない import pandas as pd #データの用意 df = pd.read_csv("./任意.csv") df.head() #確認 #標準化 # axis=1 で、列ではなく行単位で正規化に変更可能 df.apply(lambda x: (x-x.mean())/x.std(), axis=0) #正規化 # axis=1 で、列ではなく行単位で正規化に変更可能 df.apply(lambda x: (x-x.min())/(x.max() - x.min()), axis=0)
PythonのPandasで上位(下位)10 %だけ抽出する(sort_valuesの話)
普段やらないヒトの解析をするにあたって、
先輩に相関で取れないなら、取り敢えず、
上位と下位だけで比較してみたらとアドバイスを貰ったので。
たぶんアカデミック的にはサンプル数を鬼のように増やして
相関を出すのだと思います。
民間で偉い人たちにもっとサンプルを増やす研究費を貰うために、
割り切って比較をする時にはそんな方法もあるみたいです。
※任意のところは好きに書き換える。
※Jupyter notebookで動かしているので塊で使うか、不要なところは省くこと
(確認のところでセルを切り替えている)
※列にサンプル、行に要素のデータテーブルCSVを用意
#読み込み import pandas as pd df = pd.read_csv("./任意.csv") df.head() #確認 #取り敢えずデータをざっと眺める df.describe() #確認 #ソートする df=df.sort_values(by='任意の列名') #下位10件取り出し df.head(10) #確認 #下位25 %取り出し(列にサンプル数があって、25 %計算時に小数点以下切り捨て) df.head(int(len(df)*0.25)) #確認 #CSVに書き出す時は df2=df.head(int(len(df)*0.25)) df2.to_csv("./任意.csv") #確認 #上位を取りたいときはデータソートを降順に df3=df.sort_values(by='任意の列名', ascending=False) df3.head(int(len(df)*0.25)) #確認
追記:コンパクト版(何も考えずに動かす用)
# DataFrameを使うためのライブラリ import pandas as pd df = pd.read_csv("./df.csv") #上位下位25 %をそれぞれ作成 df_up=df.sort_values(by='全体平均') df_low25=df_up.head(int(len(df)*0.25)) df_down=df.sort_values(by='全体平均', ascending=False) df_high25 = df_down.head(int(len(df)*0.25)) #簡易的なデータを眺める用の出力 df_high25.describe().to_csv("./mean_high.csv") df_low25.describe().to_csv("./mean_low.csv") #上位下位の25 %を連結してCSV出力 concat = pd.concat([df_high25,df_low25]) concat.to_csv("./concat.csv")