Огромный CSV-файл с временными метками, создающий график с количеством записей в каждом месяце года - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть довольно большой CSV-файл, содержащий все песни, которые я хотел бы опубликовать с января.Файл csv содержит метку времени UNIX и текстовую метку времени (в формате: 19 декабря 2018 года, 13:19).Я хотел бы составить график количества песен, посещаемых за месяц.

Я уже импортировал CSV-файл в кадр данных pandas и преобразовал текст datetime в pandas datetime:

scrobbles['text_timestamp'] = pd.to_datetime(scrobbles['text_timestamp'])

Я поиграл с scrobbles_split_month = [g for n, g in scrobbles.set_index('text_timestamp').groupby(pd.Grouper(freq='M'))] Это дает мне информационный фрейм, содержащий 12 информационных фреймов, каждый из которых содержит все песни за каждый месяц.Затем я подсчитываю каждую запись в каждом кадре данных, чтобы получить количество песен за каждый месяц следующим образом:

month_counts = [] for idx in range(len(scrobbles_split_month)): df = scrobbles_split_month[idx] month_counts.append(df['track'].count())

Это дает мне вывод примерно так: [11, 309, 698,1874, 1089, 901, 1193, 3105, 2220, 3065, 3095, 2202], где каждая запись - это песни в месяц.

Что я хотел бы сделать, это вывести эту информацию на линейный граф, используя maatplotlib,с месяцами на оси х, а песня рассчитывает на у.

Ответы [ 3 ]

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

Я считаю, что это то, что вы ищете:

import matplotlib.pyplot as plt
month_counts = [11, 309, 698, 1874, 1089, 901, 1193, 3105, 2220, 3065, 3095, 2202]
months = 'January February March April May June July August September October November December'.split()

plt.plot(months, month_counts)
plt.show()

Поскольку вы уже проделали большую часть тяжелой работы, все, что осталось, - это печать с помощью plt.plot () и plt.show ().Конечно, это считает, что month_counts правильно отсортировано.

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

Я не проверял, но что-то вроде этого должно работать:

scrobbles['Datetime'] = pd.to_datetime(scrobbles['text_timestamp'])
scrobbles['Month'] = scrobbles['Datetime'].dt.month
groupby_month = scrobbles.groupby('Month')
groupby_month['Datetime'].count().plot()
0 голосов
/ 19 декабря 2018

Я сделал график, похожий на то, что вы ищете некоторое время назад.Если я вас правильно понимаю, вам просто нужно создать общий диапазон дат для использования в качестве оси X.Я переиндексировал фрейм данных с моими ежемесячными агрегациями с соответствующими значениями даты и времени месяца / года.Так что-то вроде:

# your original code
scrobbles['text_timestamp'] = pd.to_datetime(scrobbles['text_timestamp'])

month_counts = []
    for idx in range(len(scrobbles_split_month)):
        df = scrobbles_split_month[idx]
        month_counts.append(df['track'].count())

# and then set the index to the time stamp which can be your x var and monthly_counts as # your y var
df.index = scrobbles['text_timestamp']
df['monthly_counts'] = month_counts

`` `

Возможно, вы захотите проверить метод панд: resample и groupby, который хорошо работает со значениями даты и времени.Хотя вы, вероятно, захотите преобразовать исходные метки времени в их значения месяца / года вместе с группировкой: from datetime import datetime as dt df.index = pd.Series(df.index).apply(lambda x: dt(x.year, x.month, 1)

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