研究員リツのNote.

メーカーで研究員しているリツです。主にPythonの解析系のコードのメモ書きをゆるーく残しています。

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") 

Python初心者のあんちょこ用のブログです。

割とアナログな会社で、

バイオ系の研究職と研究所のDX化探索をお仕事にしているPython初心者です。

 

ルーチンより常に新しいことやりがちで、

すぐにコードを忘れるので半分自分用に作ってみました。

守秘義務的に怒られない範囲の汎用性があるものだけ。

 

生物科学専攻なのにプログラミングを使い倒す、

赤木リツコ博士ぐらい仕事のできる人間に憧れます。