Как создать график из списка даты и времени (python3, pandas, matplotlib)? - PullRequest
0 голосов
/ 14 февраля 2020

У меня проблемы с визуализацией данных даты и времени.

Я хочу написать код, который генерирует диаграмму (график) из даты и времени в формате (%Y%m%d) с python библиотека matplotlib.

Ниже приведен мой исходный код.

Я написал код, который генерирует список в pandas DataFrame;

neg_date = pd.to_datetime(neg_date, format='%Y-%m-%d')
neg_date_data = pd.DataFrame({'datetime':neg_date})
neg_date

(и вывод выглядит так:)

DatetimeIndex(['2018-07-04', '2018-07-04', '2018-07-04', '2018-07-04',
               '2018-07-04', '2018-07-04', '2018-07-04', '2018-07-04',
               '2018-07-04', '2018-07-04',
               ...
               '2020-01-19', '2020-01-21', '2020-01-21', '2020-01-23',
               '2020-01-24', '2020-01-26', '2020-01-26', '2020-01-27',
               '2020-02-01', '2020-02-02'],
              dtype='datetime64[ns]', length=149, freq=None)

Теперь мне нужно посчитать количество дат в каждом году-месяце. У меня проблемы с этим. Вот код, который я нашел на этом сайте.

d = {}
neg_d = []
for date in neg_date_list:
    pubdate, time = date.split('T')
    year, month, date = pubdate.split('-')
    if year in d:
        if month in d[year]:
            d[year][month].append(date)
        else:
            d[year][month] = [date]
    else:
        d[year] = {month: [date]}
neg_d.append(d)
#print(json.dumps(d, indent=4))
print(neg_d)

df = pd.DataFrame(neg_d, index = ['monthdate'])
df

(затем вывод)

2018    2019    2020
monthdate   {'07': ['04', '04', '04', '04', '04', '04', '0...   {'01': ['20', '01', '05', '14', '16', '19', '2...   {'01': ['02', '03', '03', '04', '04', '05', '0...

Как извлечь число дат из каждого месяца, а затем сделать график из него?

вот весь код.

pos_date = [i.split('T', 1)[0] for i in pos_date_list]
pos_date = pd.to_datetime(pos_date, format='%Y-%m-%d')
pos_date_data = pd.DataFrame({'datetime':pos_date})
neu_date = [i.split('T', 1)[0] for i in neu_date_list]
neu_date = pd.to_datetime(neu_date, format='%Y-%m-%d')
neu_date_data = pd.DataFrame({'datetime':neu_date})
neg_date = [i.split('T', 1)[0] for i in neg_date_list]
neg_date = pd.to_datetime(neg_date, format='%Y-%m-%d')
neg_date_data = pd.DataFrame({'datetime':neg_date})
neg_date

с кодом ниже:

%matplotlib inline
import random
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import matplotlib.cbook as cbook

startdate = "2018-07-04"
N = 20
drange = pd.date_range(startdate, periods=N, freq="MS")

#generate dataframe
df = pd.DataFrame({'Positive': pos_date ,'Neutral': neu_date ,
                   'Negative' : neg_date }, index=drange)

введите описание изображения здесь

Как я могу исправить код, чтобы показать разницу в количестве дат?

1 Ответ

0 голосов
/ 14 февраля 2020

Использование crosstab:

df = pd.crosstab(neg_date_data['datetime'].dt.month.rename('m'),
                 neg_date_data['datetime'].dt.year.rename('y'))
print (df)
y  2018  2020
m            
1     0     8
2     0     2
7    10     0

А затем DataFrame.plot:

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