Как изобразить частоту события в течение ряда? - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть фрейм данных с датами и манекеном качества (0 или 1):

      unixTimestamp         date     quality
 0       1370131200   06 2, 2013           1
 1       1290643200  11 25, 2010           1
 2       1283990400   09 9, 2010           1
 3       1290556800  11 24, 2010           1
 4       1317254400  09 29, 2011           1
 5       1388707200   01 3, 2014           1
 6       1398556800  04 27, 2014           1
 7       1399161600   05 4, 2014           0
 8       1405036800  07 11, 2014           1
 9       1390176000  01 20, 2014           1
 10      1397606400  04 16, 2014           1

Что я хочу сделать: построить частоту да (1) в quality с течением времени.

То, что я пробовал: построить гистограмму следующим образом:

plt.hist(x=df.loc[df['quality'] == 1].unixTimestamp, bins=78)
plt.show()

Я выбрал 78, потому что самая последняя дата, где quality равно 1, - 1405123200, а самая ранняя - 1203379200. Этопереводит на 12.07.2014 и 19.02.2008 соответственно.Разница между ними составляет 78 месяцев.В результате получается довольно грязный результат:

enter image description here

Может кто-нибудь сказать мне, как построить эту тенденцию на графике рассеяния?Я работаю только с unixTimestamp.Предложения о лучшем способе работы с данными временных рядов очень приветствуются.

Кроме того, он выполнялся на 170 строках df.Фактические данные имеют ~ 10 миллионов строк.Может ли кто-то также предложить лучший способ представления данных?Заранее спасибо!

1 Ответ

0 голосов
/ 27 декабря 2018

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

Эта работавырезать для метода .groupby в пандах.Перед тем, как мы сделаем группировку, давайте удостоверимся, что даты также распознаются Python.

import pandas as pd

df['alt_date'] = pd.to_datetime(df['unixTimestamp'], unit='s')
daily_quality = df.groupby('alt_date')['quality'].sum()

Теперь вы можете построить результат, используя pd.DataFrame.plot(), который использует matplotlib для простого рисования графиков из кадров данных pandas:

import matplotlib.pyplot as plt

daily_quality.plot(kind='bar')
plt.show()

Если вместо этого вы хотите сгруппировать дату по месяцам, вы можете использовать pd.Grouper(), который работает следующим образом:

monthly_quality = df.groupby(pd.Grouper(key='alt_date', freq='M'))['quality']
                    .sum()
                    .fillna(0)   # in case you have missing months

monthly_quality.plot(kind='bar')
plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...