簡體   English   中英

用於從數據列創建圖形的Python代碼

[英]Python code to create graphs from columns of data

我正在編寫一個腳本,在制表符分隔的文本文件中生成特定列的直方圖。 目前,該程序將從我用作占位符的硬編碼列號創建單個圖形。

輸入表看起來像這樣:

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

任何人都可以提供建議,允許我擴展/改進我的程序以執行以下任何操作嗎?

  1. 來自標題名稱指定的列的圖形數據,而不是列號

  2. 迭代包含多個標題名稱的列表,以一次創建/顯示多個直方圖

  3. 創建僅包含數據子集的圖表,由列中的特定值指定(即,對於特定樣本ID或特定COHORT值)

這里沒有顯示的一個組件是我最終會有一個單獨的輸入文件,其中包含一個標題列表(即“HDL”,“LDL”,“HEIGHT”)需要單獨繪制,然后一起顯示在網格中 - 喜歡的方式。

如果需要我可以提供更多信息。

好吧,我有一些意見和建議,希望它有所幫助。

在我看來,你應該做的第一件事是獲得你想要的所有東西是構建你的數據 嘗試為文件中的每一行創建一個字典

{'SAMPID': <value_1>, 'TRAIL': <value_2>, ...}

然后你將有一個這樣的dict對象的列表,你將能夠迭代它並按你希望的任何字段進行過濾。

這是第一個也是最重要的一點。

在您這樣做之后, 模塊化您的代碼 ,不要只創建一個腳本來完成所有工作。 識別將是冗余的代碼片段(作為過濾循環),將其放入函數並調用它,傳遞所有必要的args。

一個附加細節:您不需要像下面那樣編碼列表的大小

for E in input_table[1:3635]:

寫吧

for E in input_table[1:-1]

它應該為每個列表做。 當然,如果您停止將數據視為原始文本,則無需這樣做。 只需正常迭代你的dicts列表。

如果您有更多疑問,請告訴我。 弗朗西斯科

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM