2013-06-27 3 views
1

У меня есть файлы с разделителями, которые фиксируют моментальный снимок некоторых процессов каждые 5 минут. Я бы хотел сделать статистический анализ по ним, группировать и наметить подмножества данных и т. Д., Часть которых включала бы подсчет времени, когда процесс был открыт (т. Е. Общие минуты = как моментальные снимки, появляющиеся в x 5). Я могу использовать Python, R или любой язык, который я выбираю.Рекомендовать структуру данных для снимков с моментальным снимком

Задача состоит в том, что ни полей являются уникальными (есть один-ко-многим и многие-ко-многим), так что единственный матч, когда каждый элемент по всей линии является одна и та же.

Может быть, пример поможет. Скажем, первый журнал снимок выглядит следующим образом:

R123,M,5,... <-- line A 
R190,Z,4,... 
R663,M,8,... 

Затем через 5 минут, следующий снимок показывает это:

R123,M,5,... <-- line A 
R123,P,3,... <-- line B 
R955,Z,3,... 

Очевидно, что процесс в линии А теперь уже в течение не менее 5 минут Теперь. Но даже если строка B имеет одно и то же первое поле, другие поля не совпадают, так что это не тот же процесс.

Я просто пытаюсь найти хорошую модель данных, которая упрощает работу этих данных.

Одним из вариантов было бы простое подсчет частоты: прочитайте каждую строку в Python dict или Perl хэш с линией в качестве ключа, так что, когда дублирующая строка появится в следующем снимке, она просто добавит к счету. Например, в Perl: $count{$_}++ foreach @lines;

Но будет ли полная строка данных действительной в качестве словарного ключа? А как насчет непересекающихся экземпляров, например, если строка A появляется для трех снимков в строке, а затем еще один день позже появляется снова? - это должны быть отдельные экземпляры, чтобы запросы по времени все еще были действительны.

Любые предложения для меня о том, как я могу обработать & хранить эти данные?

+2

Почему бы не вытащить дублированные линии? Существует функция 'duplicated', которая имеет метод dataframe. –

+0

@DWin: 'потому что мне нужно количественно продублировать его дублированные строки, так как ключевые данные о том, как долго этот процесс длится, можно найти, только видя, сколько раз или от времени его первого появления до последнего. – ewall

ответ

1

Первый вопрос - уверенный, по крайней мере, в Perl вы можете использовать любую строку как хэш-ключ. Без ограничений.

Далее: последовательно оценивайте моментальные снимки. На снимке 1 просто прочитайте все в памяти и присвойте счетчику 0 каждому элементу. Перейдите к снимку 2. На снимке N выполните следующие действия: все новое будет сохранено в памяти и присвоено значение 0. Все, что было уже в памяти, хранится в памяти с увеличенным счетчиком. Все, что находится в памяти, но больше не находится в текущем моментальном снимке, отправляется в выходной файл.

Если вы беспокоитесь о размере файлов журнала, вместо хэша Perl используйте базу данных SQL, например SQLite через DBI.

+0

Хмм ... чтение последовательно может позволить мне сделать свой собственный уникальный идентификатор для каждого процесса, решить проблему с несмежными экземплярами и сделать его подходящим для реляционной базы данных. Определенно хорошая возможность. – ewall