我正在編寫一個腳本,用於生成製表符分隔文本文件中特定列的直方圖。目前,該程序將根據我用作佔位符的硬編碼列號創建單個圖形。用於創建來自數據列的圖形的Python代碼
輸入表看起來是這樣的:
SAMPID TRAIT COHORT AGE BMI WEIGHT WAIST HEIGHT LDL HDL
123 LDL STUDY1 52 32.2 97.1 102 149 212.5 21.4
456 LDL STUDY1 33 33.7 77.0 101 161 233.2 61.2
789 LDL STUDY2 51 25.1 67.1 107 162 231.1 21.3
abc LDL STUDY2 76 33.1 80.4 99 134 220.5 21.2
...
而且我有以下代碼:
import csv
import numpy
from matplotlib import pyplot
r = csv.reader(open("path",'r'), delimiter = '\t')
input_table=[]
for row in r:
input_table.append(row)
column=[]
missing=0
nonmissing=0
for E in input_table[1:3635]: # the number of rows in the input table
if E[8] == "": missing+=1 # [8] is hard coded now, want to change this to column header name "LDL"
else:
nonmissing +=1
column.append(float(E[8]))
pyplot.hist(column, bins=20, label="the label") # how to handle multiple histogram outputs if multiple column headers are specified?
print "n = ", nonmissing
print "numer of missing values: ", missing
pyplot.show()
任何人都可以提出建議,讓我展開/改善我的程序做任何以下的?從列由標題名稱,而不是列號指定
圖形數據
迭代在包含多個報頭的名稱來創建/顯示幾個直方圖一次
列表創建一個圖,其僅包括數據的子集,如由列中的特定值所指定的(即針對特定樣本ID或特定COHORT值)
這裏沒有顯示的一個組件是我最終將有一個單獨的輸入文件,它將包含需要單獨繪圖的標題列表(即「HDL」,「LDL」,「HEIGHT」),但隨後一起顯示在網格狀的方式。
如果需要,我可以提供其他信息。
感謝您回覆我,我同意您在Python中更好地構建數據的建議。你知道CSV模塊的DictReader方法是否適合這項任務?我正在瀏覽文檔,但對我來說有點令人困惑,因爲我是編程新手(如果不是那麼明顯):) – alexhli 2012-03-26 21:28:28
我從來沒有使用過這樣的lib,但據我所知可用的文檔http://docs.python.org/dev/library/csv.html對於DictReader方法來說,它完全是您用最小的努力完成結構工作所需要的。您的數據看起來組織得非常好,但我會記住文檔中關於'restKey'和'restVal'生成的字典字段的說法,這是確保數據正確性的一個好方法。但是,第一次嘗試,只是繞過它們。它應該很好地工作。 – Francisco 2012-03-27 18:13:43