Структурирование данных для Pandas / Matplotlib

#python #pandas #dataframe #matplotlib #data-structures

#python #pandas #фрейм данных #matplotlib #структуры данных

Вопрос:

У меня есть Raspberry pi, собирающий данные о качестве воздуха, которые я хочу отправить на веб-сервер с помощью flask. Моя проблема заключается в том, как я изначально структурировал текстовый файл для хранения данных, а именно::

 > (Sun Aug  9 08:59:05 2020,  PM1.0 ug/m3 (ultrafine particles):        
> 20 PM2.5 ug/m3 (combustion particles, organic compounds, metals): 30
> PM10 ug/m3  (dust, pollen, mould spores):                      32
> PM1.0 ug/m3 (atmos env):                                       19
> PM2.5 ug/m3 (atmos env):                                       29 PM10
> ug/m3 (atmos env):                                        32
> >0.3um in 0.1L air:                                            3990
> >0.5um in 0.1L air:                                            1089
> >1.0um in 0.1L air:                                            180
> >2.5um in 0.1L air:                                            10
> >5.0um in 0.1L air:                                            2
> >10um in 0.1L air:                                             0 ), (Sun Aug  9 09:00:06 2020,  PM1.0 ug/m3 (ultrafine particles):        
> 21 PM2.5 ug/m3 (combustion particles, organic compounds, metals): 31
> PM10 ug/m3  (dust, pollen, mould spores):                      33
> PM1.0 ug/m3 (atmos env):                                       20
> PM2.5 ug/m3 (atmos env):                                       30 PM10
> ug/m3 (atmos env):                                        33
> >0.3um in 0.1L air:                                            3990
> >0.5um in 0.1L air:                                            1089
> >1.0um in 0.1L air:                                            180
> >2.5um in 0.1L air:                                            10
> >5.0um in 0.1L air:                                            2
> >10um in 0.1L air:                                             0 ), (Sun Aug  9 09:01:06 2020,  PM1.0 ug/m3 (ultrafine particles):        
> 21 PM2.5 ug/m3 (combustion particles, organic compounds, metals): 31
> PM10 ug/m3  (dust, pollen, mould spores):                      33
> PM1.0 ug/m3 (atmos env):                                       20
> PM2.5 ug/m3 (atmos env):                                       30 PM10
> ug/m3 (atmos env):                                        33
> >0.3um in 0.1L air:                                            3990
> >0.5um in 0.1L air:                                            1089
> >1.0um in 0.1L air:                                            180
> >2.5um in 0.1L air:                                            10
> >5.0um in 0.1L air:                                            2
> >10um in 0.1L air:                                             0 ),
  

Как вы можете видеть, данные, вероятно, плохо структурированы для моих намерений, и ниже показано, что я сделал с помощью Pandas в надежде обеспечить визуализацию данных с помощью matplotlib.

 sample_data = pd.read_fwf('particulates.txt',  header=None)
  

Это возвращает фрейм данных, который выглядит следующим образом:
Фрейм данных

Я пытался найти наилучший способ упорядочения данных таким образом, чтобы:

  • Дата, которая отображается в первом столбце каждой новой записи и отделяется символом » ,», может быть использована в качестве моей оси x.
  • Каждая другая точка данных, такая как «РМ1.0 мкг / м3 (ультрадисперсные частицы):», может быть сгруппирована вместе для соответствующего графика данных.

Я больше ищу указатели на наилучший способ достижения этой цели, а не само решение. Один из способов, который я рассматривал, состоял в том, чтобы использовать тяжелые манипуляции со строками и использовать modulo , поскольку данные содержат ровно 14 строк на запись, для переноса их в базу данных SQL, однако, без сомнения, этого можно достичь с помощью Pandas.

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

Ответ №1:

Попробуйте это:

 sample_data = pd.read_csv('particulates.txt',  sep=':')
  

Комментарии:

1. Спасибо за указатель. Я должен был отметить, что я пытался сделать это раньше и использовал варианты этого и в итоге достиг тех же результатов, что и то, что ваше решение предоставляет с помощью this — sample_data[[0,3]]). С этим фреймом данных моя проблема по-прежнему заключается в том, что я пытаюсь достичь точки, в которой я использую дату в качестве измерения x, а остальные заголовки — в качестве измерения y. Это мой пробел в знаниях pandas и matplotlib. Как бы я мог указать дату в качестве измерения x, а остальное — в качестве измерения y? Будет ли это использовать какой-то словарь?

Ответ №2:

К сожалению, я пока не могу комментировать, но на ваш вопрос ответил gtomer, так что отдайте ему должное. Ваши данные уже будут структурированы для использования в matplotlib.

Если вы хотите использовать дату в качестве измерения x, используйте следующий код:

 sample_data.set_index(['date'])
  

После этого просто используйте:

 sample_data.plot(subplots = True)
plt.show()