Использование Python для анализа большого набора сенсорных данных - PullRequest
0 голосов
/ 29 октября 2018

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

Каждый файл данных Excel имеет размер> 100 МБ для каждого участника исследования. Excelfile содержит 5 листов для измерения 5 различных физиологических параметров. Каждый лист содержит более 1 миллиона строк и двух столбцов (время, физиологический параметр).

После 1 миллиона строк сенсорных данных данные автоматически продолжаются в следующих столбцах (C и D) в файле Excel.

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

1) Как я могу сказать Python читать данные из специфического листа Excel? Это нормально, что это занимает так много времени?

Вот что я попробовал:

df = pd.read_excel("filepath", sheet_name="Sheetname")
print (df.head (5)) 

2) Возможно ли выполнить анализ данных для этого большого файла данных в Python с помощью Pandas? Я попытался это ускорить процесс:

import xlrd
work_book = xlrd.open_workbook('filepath', on_demand=True)
work_book.release_resources()

3) Позже: я хочу сравнить физиологические параметры разных участников исследования. Поскольку это анализ временных рядов между участниками исследования, как я могу начать делать это на Python?

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

Обновление: я думаю, что я только что закончил анализ временных рядов (фактически, только анализ трендов, используя тест Дики-Фуллера и методы визуализации скользящего среднего)! : D Спасибо всем большое за помощь !!! Мне было труднее всего обойти модуль datetime в pandas, и мой столбец datetime все еще распознается как «object». Это нормально? Разве это не должно быть datetime64?

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

IIUC, не похоже, что вам нужно будет постоянно читать данные с изменяющихся листов Excel. Я бы рекомендовал читать в листах Excel, как вы это сделали, и хранить их в сериализованных pandas данных с использованием to_pickle():

import pandas as pd

participants = ['P1','P2','P3']
physios = ['Ph1','Ph2','Ph3','Ph4','Ph5']

for p in participants:
    for ph in physios:
        df = pd.read_excel(p + r'.xlsx', sheet_name=ph)
        df.to_pickle(p + '_' + ph + r'.pkl')

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

0 голосов
/ 30 октября 2018

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

Единственная проблема в том, что у dask нет читателя Excel из того, что я могу сказать. Поскольку ваш вопрос говорит о том, что данные не помещаются в памяти ... вы можете вручную преобразовать данные в CSV в Excel, тогда вы можете просто:

# After pip install dask
import dask.dataframe as dd
df = dd.read_csv("./relpath/to/csvs/*.csv")
# Do data munging here
df.compute()

Если это не сработает, может быть, будет лучше, если вы попытаетесь загрузить данные в spark или базу данных и выполнить там преобразования.

Re: ваш вопрос о временных рядах, начните с прочтения документации по этой теме здесь .

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