построить график морского побережья с месяцем в виде осей X с ежедневным набором данных - PullRequest
0 голосов
/ 30 августа 2018

У меня есть такой набор данных:

>>> print(ds.head())

         date     sum
  0  2013-08-31  19.000
  1  2013-09-01  37.000
  2  2013-09-02  10.750
  3  2013-09-03  21.500
  4  2013-09-04  44.125

>>> print(ds.tail())


            date      sum
    1742  2018-08-24  129.875
    1743  2018-08-25  196.375
    1744  2018-08-26  247.000
    1745  2018-08-27  104.125
    1746  2018-08-28  149.250

Набор данных содержит около 1700 строк с ежедневными данными. Я хочу построить коробочный график, чтобы увидеть месячные значения. Что-то вроде этого monthly boxplot

Мне нужны месяцы на осях X, таких как JAN / FEB / MAR и т. Д.

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

Ответы [ 3 ]

0 голосов
/ 30 августа 2018

Вы можете использовать функцию strftime с даты и времени.

Вот пример:

from datetime import date
import random
import pandas as pd
from seaborn import boxplot

dates = [date.today()]*10
dataSum = [random.randint(1,100) for x in range(10)] 

d = {'date': dates, 'sum':dataSum}
df = pd.DataFrame(data = d)

dateData =  [x.strftime('%B') for x in df['date']]
boxplot(dateData, df['sum'])

Итоговый график

0 голосов
/ 30 августа 2018

Вы можете использовать элемент dt.strftime('%b') и создать столбец месяца следующим образом:

df=pd.DataFrame(np.random.randint(50,1000,365).reshape(-1,1),
                index=pd.date_range('2018-01-01','2018-12-31',freq='D'),
                columns=['sum'])
df.reset_index(inplace=True)
df.columns = ['Date','sum']
df.head()

          Date  sum
0   2018-01-01  984
1   2018-01-02  582
2   2018-01-03  967
3   2018-01-04  503
4   2018-01-05  330

df['month'] = df['Date'].dt.strftime('%b')

Используйте seaborn.boxplot и передайте x='month', y='sum' и data=df в качестве параметра. Вы получите желаемый участок.

fig, ax = plt.subplots()
fig.set_size_inches((12,4))
sns.boxplot(x='month',y='sum',data=df,ax=ax)
plt.show()

Actual Plot look like this Цвета графика и другие параметры не заданы в качестве отображаемого графика OP.

0 голосов
/ 30 августа 2018

Предполагая, что ваш DataFrame df содержит два столбца "date" и "sum", нам нужно отсортировать его в поле "date", чтобы строки были в правильном порядке для графика, иначе мы могли бы видеть месяцы в неправильном порядке. Затем нам нужно создать столбец поддержки, содержащий название месяца каждой даты. Вот и все, мы готовы к сюжету.

Вот код:

import pandas as pd
import seaborn as sns

# just an example...
df = pd.DataFrame([["2013-08-31", 19], ["2013-09-01", 37], ["2013-09-02", 10.75]], columns=["date", "sum"])

# sort the rows by date
df.sort_values(by="date", inplace=True)

# create a support series with the name of the month of each row
month_names = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
months = df["date"].apply(lambda date: month_names[int(date.split("-")[1])-1])

# plot it
sns.boxplot(months, df["sum"])

Надеюсь, это поможет.

...