Python-код для создания графиков из столбцов данных - PullRequest
1 голос
/ 26 марта 2012

Я пишу скрипт, который создает гистограммы определенных столбцов в текстовом файле с разделителями табуляции. В настоящее время программа создаст один график из номера столбца с жестким кодом, который я использую в качестве заполнителя.

Таблица ввода выглядит примерно так:

 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. Создание графика, который включает только подмножество данных, как указано конкретным значением в столбце (т. Е. Для конкретного идентификатора образца или определенного значения COHORT)

Один компонент, не показанный здесь, состоит в том, что в конечном итоге у меня будет отдельный входной файл, который будет содержать список заголовков (то есть «HDL», «LDL», «HEIGHT»), которые необходимо отобразить отдельно, но затем отобразить вместе в сетка, как.

При необходимости могу предоставить дополнительную информацию.

1 Ответ

4 голосов
/ 26 марта 2012

Ну, у меня есть несколько комментариев и предложений, надеюсь, это поможет.

По моему мнению, первое, что вы должны сделать, чтобы получить все те вещи, которые вам нужны, это структурировать ваши данные . Попробуйте создать для каждой строки в файле словарь типа

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

И тогда у вас будет список таких объектов dict, и вы сможете итерировать его и фильтровать по любому полю, которое пожелаете.

Это первый и самый важный момент.

После того, как вы это сделаете, модулирует ваш код , не просто создайте один скрипт, чтобы выполнить всю работу. Определите фрагменты кода, которые будут избыточными (как цикл фильтрации), поместите их в функцию и вызовите ее, передав все необходимые аргументы.

Еще одна деталь: вам не нужно указывать размер списка, как в

for E in input_table[1:3635]:

Просто напишите

for E in input_table[1:-1]

И так должно быть для каждого списка. Конечно, если вы перестанете относиться к своим данным как к необработанному тексту, в этом нет необходимости. Просто итерируйте свой список диктов обычно.

Если у вас есть больше сомнений, дайте мне знать. Франциско

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...