#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()