pythonでゲノム解析をしている、python初心者です。
以下のスクリプトをを作成し、統計的な計算をしています。
スクリプトそのものは問題なく動きますが、大きなファイル(数百万行)を
計算した場合数時間以上かかることがあります。
普段はlinuxターミナル上で
script.py input.txt > result.txt
の様に出力させているのですが、この方法だと結果がある程度たまってからの出力となるようで
リアルタイムで1行ずつの結果の確認ができません。
今、どこまで進んでいるのか等をその都度確認したいので
スクリプト上でファイルに一行ずつ出力できるように完結させたいです。
改良したスクリプトでは行末に次の行が追加され、またタブを認識してくれない
状況となっています。オリジナルのスクリプトと全く同じ出力を1行ずつ出力させるには
どうしたらいいでしょうか。
どなたかご教授よろしくお願いいたします。
*スクリプト上の2081等の実数は計算に必要な固定値でここでは特に意味はありません。
input.txtの中身例 AAAAAA 3846 231 AAAAAC 4406 264 AAAAAG 4796 287 AAAAAT 2497 166 AAAACA 3426 183 AAAACC 2276 125 AAAACG 4087 209 AAAACT 2393 149
#上のデータを以下のコマンドで計算、出力 # script.py input.txt > result.txt import sys from sys import argv import pandas as pd import scipy.stats as st data = sys.argv[1] lst = [] with open(data, 'r',) as c: for line in c: lst.append(line.split()) for c in lst: df = pd.DataFrame([[int(c[2]),int(c[1])],[2081-int(c[2]),36892-int(c[1])]]) #print(df) oddsratio, p = st.fisher_exact(df) print(c[0], "\t",c[1], "\t",c[2], "\t", p, "\t", oddsratio) #出力 AAAAAA 3846 231 0.3204463665946933 1.0728768393979002 AAAAAC 4406 264 0.31434358314046873 1.0712744491363781 AAAAAG 4796 287 0.29968379487508934 1.0706097519021331 AAAAAT 2497 166 0.03579730913537198 1.1940323165866926 AAAACA 3426 183 0.48411384449369754 0.9418274190363531 AAAACC 2276 125 0.8147318042803129 0.9719541692273964
#スクリプト内で出力できるように改良してみたもの import sys from sys import argv import pandas as pd import scipy.stats as st data = sys.argv[1] lst = [] with open(data, 'r',) as c: for line in c: lst.append(line.split()) for c in lst: df = pd.DataFrame([[int(c[2]),int(c[1])],[2081-int(c[2]),36892-int(c[1])]]) #print(df) oddsratio, p = st.fisher_exact(df) s = c[0], "\t",c[1], "\t",c[2], "\t", p, "\t", oddsratio f = open('result.txt','a') f.write(str(s)) #出力 ('AAAAAA', '\t', '3846', '\t', '231', '\t', 0.3204463665946933, '\t', 1.0728768393979002)('AAAAAC', '\t', '4406', '\t', '264', '\t', 0.31434358314046873, '\t', 1.0712744491363781)('AAAAAG', '\t', '4796', '\t', '287', '\t', 0.29968379487508934, '\t', 1.0706097519021331)('AAAAAT', '\t', '2497', '\t', '166', '\t', 0.03579730913537198, '\t', 1.1940323165866926)('AAAACA', '\t', '3426', '\t', '183', '\t', 0.48411384449369754, '\t', 0.9418274190363531)('AAAACC', '\t', '2276', '\t', '125', '\t', 0.8147318042803129, '\t', 0.9719541692273964)('AAAACG', '\t', '4087', '\t', '209', '\t', 0.15010252876242494, '\t', 0.8961399653686172)('AAAACT', '\t', '2393', '\t', '149', '\t', 0.23528418325511075, '\t', 1.1118416897455397)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/02 05:59
2020/12/02 06:48 編集
2020/12/02 06:47
2020/12/02 06:49