2009-02-17 4 views
0

Редактировать: Первоначально я пытался быть общим, но это получилось неопределенным. Я привел более подробно ниже.Несколько выходных файлов

Я пишу сценарий, который извлекает данные из двух больших файлов CSV, одного из графиков людей и другой информации о своих графиках. Данные заминированы и объединены, чтобы в конечном итоге создать графики формата pajek для соединений с понедельниками по субботам, с седьмым графиком, представляющим все соединения за неделю со строкой 1 и 0, чтобы указать, какие дни недели будут сделаны соединениями. Этот последний график представляет собой разрыв с форматом pajek и используется отдельной программой, написанной другим исследователем.

Формат Pajek имеет большой заголовок, а затем перечисляет соединения как (vertex1 vertex2) неупорядоченные пары. Трудно хранить эти пары в словаре, потому что между двумя парами часто бывает несколько соединений в один и тот же день.

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

+0

@Lonnen: важный урок здесь (один я применяю почти ежедневно). Старайтесь избегать обобщения. Подробности имеют значение. –

+0

@ Lonnen: «Mined and Combined»? По вашему сценарию или какой-либо другой прикладной программе? –

ответ

2

«... извлекает данные из двух больших файлов CSV, одного из графиков людей и другой информации о своих графиках». Смутно, но я думаю, что понял.

«Данные заминированы и объединены, чтобы в конечном итоге создать графики формата pajek для соединений понедельника-субботы народов», Проведенные и объединенные. Круто. Где? В этом скрипте? В другом приложении? Каким-то сторонним модулем? Каким-то веб-сервисом?

Является ли этот алгоритм по времени? Включает ли одна строка ввода одно соединение, которое отправляется на один или несколько дневных графиков?

Является ли это алгоритмом, который должен видеть целую расписание, прежде чем он сможет что-либо создать? [Если это так, это, вероятно, неправильно, но я не знаю, и ваш вопрос довольно расплывчато по этой центральной детали.]

«... седьмой график, представляющий все соединения за неделю со строкой 1 и 0, чтобы указать, какие дни недели будут сделаны соединения ». Неполный, но, вероятно, достаточно хороший.

def makeKey2(row2): 
    return (row2[1], row2[2]) # Whatever the lookup key is for source2 

def makeKey1(row1): 
    return (row1[3], row1[0]) # Whatever the lookup key is for source1 

dayFile = [ open("day%d.pajek","w") for i in range(6) ] 
combined = open("combined.dat","w") 
source1 = open(schedules, "r") 
rdr1= csv.reader(source1) 
source2 = open(aboutSchedules, "r") 
rdr2= csv.reader(source2) 

# "Combine" usually means a relational join between source 1 and source 2. 
# We'll assume that source2 is a small-ish dimension and the 
# source1 is largish facts 

aboutDim = dict((makeKey2(row),row) for row in rdr2) 

for row in rdr1: 
    connection, dayList = mine_and_combine(row, aboutDim[ makeKey1(row) ]) 
    for d in dayList: 
     dayFile[d].write(connection) 
    flags = [ 1 if d is in dayList else 0 for d in range(6) ] 
    combined.write(connection, flags) 

Нечто подобное.

Точек являются:

  1. Один прохода через каждый источник данных. Нет вложенных циклов. O (n) обработка.

  2. Храните как можно меньше памяти, так как вам нужно создать полезный результат.

+0

Комбинированное начало скрипта. Одна строка ввода личных данных приводит к ~ 60 линиям вывода, и есть много нормализации и обработки, потому что некоторые данные не стандартизированы (ручной ввод). Спасибо, хотя это было очень полезно. – 2009-02-17 16:11:00

2

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

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