Получение гистограммы datetime list python - PullRequest
0 голосов
/ 06 ноября 2018

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

2018-06-22 00:47:25.000000
2018-06-22 00:47:34.000000
2018-06-22 00:52:55.000000
2018-06-22 00:59:43.000000
2018-06-22 01:00:14.000000
2018-06-22 01:00:26.000000
2018-06-22 01:00:32.000000
2018-06-22 01:00:58.000000
...

Я хочу создать гистограмму с разными интервалами.

вывод с интервалом в 1 минуту:

2018-06-22 00:47-00:48  =2
2018-06-22 00:48-00:49  =0
2018-06-22 00:49-00:50  =0
...
2018-06-22 00:52-00:53  =1
...
2018-06-22 00:59-01:00  =1
2018-06-22 01:00-01:01  =4

вывод 5-минутного интервала:

2018-06-22 00:47-00:52  =2
2018-06-22 00:52-00:57  =1
2018-06-22 00:57-01:02  =5

«Разбор дат и интервалов подсчета вручную» кажется сложным. как я могу сделать это легко?

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Я это исправлю. Я использую панда и NumPy. Дайте два datetime для диапазона и установите частоту.

intervals = pd.date_range('2018-06-22 00:00:00','2018-06-23 00:00:00', freq='60min')

Чтобы подсчитать количество твитов в правильном интервале, создайте массив, заполненный нулями

count_interval = np.zeros(intervals.size)

Время хранения твитов в списке «tDate», поиск подходящего интервала для времени каждого твита с кодом ниже.

for tDate in tweetDates:
    index = 0
    for inter in intervals:
        if (pd.Timestamp(tDate) >= intervals[index]) & (pd.Timestamp(tDate) < intervals[index + 1]):
            count_interval[index] = count_interval[index]+1
            break
        else:
            index = index+1

После этого заговор с библиотекой matplotlib.

plt.plot(intervals, count_interval, linewidth=1.0)
plt.show()
0 голосов
/ 06 ноября 2018

Я бы разбил его на 3 шага: начало и конец интервала, затем сделал бы дельту с функцией от datime,

import datetime
date= '2018-06-22 00:47-00:52'
start= date[0:-6]
print( start) 
start_parsed = datetime.datetime.strptime(start, '%Y-%m-%d %H:%M').strftime("%d/%m/%y - %H:%M")

Надеюсь, это поможет сделать то же самое для конца интервала и использовать из той же библиотеки дельта-функцию,

...