fc2ブログ
Pandas.DataFrameに行や列を追加する
すぐにできそうで、ちょっと面倒な作業かとおもったので、メモを。

import pandas as pd
#サンプルデータの作成
d = pd.DataFrame({'a':[1,2],'b':[3,4]},index=['00','11'])
a b
00 1 3
11 2 4
[2 rows x 2 columns]

#追加用の行を、Seriesで作成
s = pd.Series([2,3],index=['a','b'],name='22')
a 2
b 3
Name: 22, dtype: int64

#dに追加
d.append(d)
a b
00 1 3
11 2 4
22 5 6

#追加する列のデータを作成
c = pd.Series([5,6],index=['00','11'],name='22')
#dの行と列を入れ替えてから、cを追加してもどす
d.T.append(c).T
a b 22
00 1 3 5
11 2 4 6
[2 rows x 3 columns]

どうも、列の追加がちょっとややこしいので、もっと良い方法があるかもしれません。
スポンサーサイト



【2014/06/27 15:44】 | Python | トラックバック(0) | コメント(0) | page top↑
P値の補正
統計的検定を無造作に何回も繰り返すとき、P値を補正する必要があると言われておりますが、Pythonならそんなこともすぐできます。

from statsmodels.sandbox.stats.multicomp import multipletests
import scipy.stats as ss
ps = ss.ttest_ind(data[cols_0],data[cols_1],axis=1)[1]
cps = multipletests(ps, method='fdr_bh',alpha=0.01)
len(cps[1][cps[0]])

pandas.DataFrameになっているデータを使い、cols_0とcols_1の2群間でt検定を行って、FDR(Benjamini & Hochberg)でP値を補正しています。これで、cps[1]に補正されたP値が入ると、statsmodelsのドキュメントには書いてあるんですが、なぜか全部nan。。。
原因を究明したいところですが、人間ついつい楽をしたくなってしまうもので、Rに渡せばすぐです。

import rpy2.robjects as R
p_adjust = R.r['p.adjust'](R.FloatVector(ps),method='BH')
pvs = np.array(p_adjust)
len(pvs[pvs < 0.01])

それっぽい値もはいっているし、だいたい数も合っているのでいいんじゃないでしょうか。便利な物が多すぎると、ついつい甘えてしまうのは良くないとは思いつつ、世界に貢献したいと思っても、探すとすぐ出てきてしまう世の中なので、創作意欲が削られると言い訳してみたり。
【2014/06/05 19:36】 | Python | トラックバック(0) | コメント(0) | page top↑
Pandas.read_csvでファイル読み込み
タブ区切りなどになったテキストファイルから一括してデータを読み込むのに、read_csvは便利です。

import pandas as pd
data = pd.read_csv('***.txt',index_col=0,sep='\t')

これで、タブ区切りのテキストファイルを、一番左の列をindexとして読み込めます。しかし、欠損値が空白文字などで入っていると面倒なことになります。data.dtypesで、各列のデータ型が表示されますが、これがobjectになっていると、欠損値の空白に引きずられて全体が文字列になってしまっていて数値として認識されていません。そうなると、meanの計算などが出来ませんので、ファイルを読み込むときに、デフォルトで欠損値扱いになるN/Aなどの文字列の他に、以下のように追加で欠損値を認識するための文字列を指定します。

data = pd.read_csv('***.txt',index_col=0,sep='\t',na_values=(' '))

これでOK。meanは計算出来ないのに、medianは計算できるので、ちょっと原因に気が付くまで時間がかかりました。まだまだ修行が足りません。
【2014/06/04 12:11】 | Python | トラックバック(0) | コメント(0) | page top↑
| ホーム |