Проблема получения корреляционной матрицы из большого CSV-файла с помощью Python / Pandas - PullRequest
0 голосов
/ 15 февраля 2019

Прежде всего: я новичок в Python и аналитике данных, НО я уверен, что понимаю концепции достаточно, чтобы вам не пришлось слишком упрощать ваши ответы.

Моя задача заключается в том, чтобыЯ должен проанализировать огромные куски машинных данных (временных рядов за два года; 24 идентичных по структуре csv-файла, каждый из которых содержит 170 столбцов, ~ 2,5 миллиона строк, ~ 2,6 ГБ).

Эти данные должны бытьпроанализированы в отношении корреляций.Первоначально желаемым выходом является корреляционная матрица 170x170.Дальнейший анализ (задержка, асимметричная матрица корреляции Input x Output) должен быть отложен до следующего шага и не должен рассматриваться в первую очередь для вашего ответа.

Мне удалось прочитать один из файлов вдатафрейм (используя IPython-Console от Spyder; за счет большого объема моей 16-гигабайтной памяти).

import pandas as pd

df = pd.read_csv(r"C:\MyFilePath\...\TestData.csv", sep=';', encoding='iso-8859-1')

In[]: len(df.columns)
Out[]: 170

In[]: len(df)
Out[]: 2678401

Но оттуда я застрял ...

ПандыМетод .DataFrame.corr не работает должным образом и возвращает (если он работает) только матрицу 10 x 10 с большим количеством значений NaN (которые, на мой взгляд, являются отображением несуществующей корреляции Пирсона (близкой или равной нулю))).

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

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

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

Примечание: Яне привязан к пандам.Если вы предложите другую библиотеку, которая поможет решить эту проблему лучше, я буду рад услышать ваше решение.Но из-за политики безопасности моей компании я обязан не загружать никакого дополнительного программного обеспечения (или, если быть более точным: это сложно ...) Единственный другой вариант, который у меня есть, - это MATLAB R2018.a

1 Ответ

0 голосов
/ 15 февраля 2019

Pandas df.corr дает корреляционную матрицу NxN, где N - количество столбцов.Я попробовал это с 200 столбцами, и это работает.

Наиболее вероятная причина в том, что ваши данные не чистые.Если pandas находит точку данных, которая неприемлема для операции корреляции, она исключает этот столбец.Попытайтесь создать фрейм данных только с числами и одной строкой в ​​одном из полей, и вы поймете, что я имею в виду.

Если данные находятся не в хорошем состоянии, это объясняет, почему существует так многоНанс также.Я думаю, что вы должны сделать некоторую очистку и предварительную обработку данных.

...