Как построить график данных панд с интервалом в 24 часа?(несколько участков) - PullRequest
0 голосов
/ 09 мая 2019

У меня есть pandas dataframe около 3 лет с разрешением 6 секунд, и я хочу сгруппировать данные в 24-часовые корзины и строить каждый день , используя matplotlib в цикле .Это голова моего информационного кадра:

  timestamp                    consumption
0 2012-11-11 12:00:03          468
1 2012-11-11 12:00:09          476
2 2012-11-11 12:00:16          463
3 2012-11-11 12:00:22          449
4 2012-11-11 12:00:28          449 

Включает энергопотребление дома с 2012 по 2015 гг. После предварительной обработки информационный кадр начинается примерно в 12 часов дня первого дня.Мне нужно составить график всех данных с 24-часовыми интервалами, и каждый график должен представлять один день, который начинается примерно с 12:00 и заканчивается примерно в 12:00 следующего дня

Итак, мне нужно около 1500 графиков , которые показывают энергопотребление каждый день, начиная с 12 часов, в течение примерно 1500 дней моего кадра данных.

Заранее спасибо.

Обновление: Причина, по которой я хочу построить 1500 дней отдельно, заключается в том, что я хочу проверять энергопотребление каждой ночи и маркировать режим сна пассажира.И я считал, что каждый день с 12 до 12 часов должен иметь полный цикл сна на одном участке.А после подготовки этикеток я смогу использовать их в качестве обучающих и тестовых данных для классификации

Ответы [ 2 ]

0 голосов
/ 09 мая 2019

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

df['day'] = (df['timestamp'] + pd.Timedelta('12h')).dt.date
for day in df['day'].unique():
    mask = (df['day'] == day)
    #<the code for the plot that you want>
    plt.plot(x=df[mask]['timestamp'].dt.time,y=df[mask]['consumption'])
    plt.savefig('filename'+str(day)+'.png')
    plt.close()
0 голосов
/ 09 мая 2019

Считайте, что это не только ответ, но и предложение.Сначала преобразуйте столбец timestamp в индекс (DatetimeIndex)

df.set_index(df['timestamp'], inplace=True, drop=True)

Затем получите все уникальные дни, которые происходят в вашем DataFrame

unique_days = list(set(df.index.to_period('D').strftime('%Y-%m-%d')))

Затем мы сжимаем DataFrame всерия

del df['timestamp']
df = df.squeeze()

Теперь просто нанесите уникальные дни в вашей серии на отдельных участках.

import matplotlib.pyplot as plt

unique_days = list(set(df.index.to_period('D').strftime('%Y-%m-%d')))
fig, axes = plt.subplots(nrows=len(unique_days), ncols=1)

row = 0
for day in unique_days:
    df[day].plot(ax=axes[row], figsize=(50,10))
    row += 1

plt.show()

Plot for two sample days

Теперь,настало время поиграться с параметрами plots , чтобы вы могли настроить их под свои нужды.

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