2014-01-05 3 views
0

Ok, так что у меня есть некоторые данные в CSV-файл, который выглядит примерно так:CSV чтения столбцов и строк

[fragment1, peptide1, gene1, replicate1, replicate2, replicate3] 
[fragment1, peptide2, gene1, replicate1, replicate2, replicate3] 
[fragment2, peptide1, gene2, replicate1, replicate2, replicate3] 
[fragment2, peptide2, gene2, replicate1, replicate2, replicate3] 
[fragment3, peptide1, gene2, replicate1, replicate2, replicate3] 

И проблема это - мне нужно использовать эти данные (в трех повторностей) несколько различных способов:

  1. Над каждую строку (т.е. просто replicate1-3 для каждой строки)
  2. Над каждой репликация столбца для каждого фрагмента (т.е. replicate1 от peptides1 и 2 из fragment1, и то же самое для replicate2 и 3)
  3. Над каждой репликационной колонкой для каждого гена (т.е. такие же, как (2), но с использованием генов вместо фрагментов

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

Вариант в строках просто использует три репликации (всегда три значения из одной строки) и, конечно, очень просто добраться. Оба варианта по фрагментам и по генам сначала вычисляют статистику для использования первой статистики из каждого применимого репликации1, затем каждый репликат2, а затем репликацию3 (т. Е. Неизвестное количество значений из неизвестного числа строк) и после этого выполняют ту же статистику, используя ранее значения (т. е. всегда три значения).

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

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

+0

Этот вопрос не соответствует теме, потому что он лучше подходит для http://codereview.stackexchange.com – jonrsharpe

+0

Не могли бы вы использовать [pandas] (http://pandas.pydata.org/)? Я думаю, что панды очень подходят для такого рода данных. – joris

+0

Спасибо большое! Я проверю Панды, и я спрошу также о кодеревью - я даже не знал, что это существовало! – Sajber

ответ

0

Я пошел бы за numpy.loadtxt.

import numpy as np 

data = np.loadtxt(open('myfile.csv', 'rb'), delimiter=',') 

# 1 Access all rows 
for row in data: 
    print row 

# Get all data in column 2 and 3 
print data[:, (2,3)] 

Я не уверен, что вы спрашиваете в пунктах 2 и 3. Можете ли вы предоставить образец ввода и ожидаемый выход?

Смежные вопросы