Python 使用每日数据集绘制以月份为x轴的seaborn箱线图
我有这样一个数据集:Python 使用每日数据集绘制以月份为x轴的seaborn箱线图,python,seaborn,boxplot,Python,Seaborn,Boxplot,我有这样一个数据集: >>> 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 174
>>> 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行每日数据。
我想绘制一个箱线图,以便查看每月的值。
像这样的
我需要x轴上的月份,如一月/二月/三月等
如果我有一个每日数据集,我找不到任何可以实现这一点的工作解决方案。我想我必须先做数据准备并将每月的值分组?
或者,我如何以简单快捷的方式对此进行编程?假设您的数据框
df
包含两列“日期”和“总和”,我们需要在“日期”字段中对其进行排序,以使各行在绘图中的顺序正确,否则我们可能会以错误的顺序看到月份。然后我们需要创建一个支持列,其中包含每个日期月份的名称。就这样,我们已经准备好了
代码如下:
将熊猫作为pd导入
导入seaborn作为sns
#只是一个例子。。。
df=pd.数据帧([[“2013-08-31”,19],“2013-09-01”,37],“2013-09-02”,10.75]],列=[“日期”,“总和])
#按日期对行进行排序
df.sort_值(by=“date”,inplace=True)
#创建具有每行月份名称的支持系列
月份名称=[“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”、“八月”、“九月”、“十月”、“十一月”、“十二月”]
月份=df[“日期”]。应用(lambda日期:月份名称[int(date.split(“-”[1])-1])
#策划它
sns.箱线图(月,df[“总和])
我希望它能有所帮助。假设您的数据框
df
包含两列“日期”和“总和”,我们需要在“日期”字段中对其进行排序,以使各行按正确的顺序进行绘图,否则我们可能会以错误的顺序看到月份。然后我们需要创建一个支持列,其中包含每个日期月份的名称。就这样,我们已经准备好了
代码如下:
将熊猫作为pd导入
导入seaborn作为sns
#只是一个例子。。。
df=pd.数据帧([[“2013-08-31”,19],“2013-09-01”,37],“2013-09-02”,10.75]],列=[“日期”,“总和])
#按日期对行进行排序
df.sort_值(by=“date”,inplace=True)
#创建具有每行月份名称的支持系列
月份名称=[“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”、“八月”、“九月”、“十月”、“十一月”、“十二月”]
月份=df[“日期”]。应用(lambda日期:月份名称[int(date.split(“-”[1])-1])
#策划它
sns.箱线图(月,df[“总和])
我希望它有帮助。您可以从datetime开始使用该函数
以下是一个例子:
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'])
您可以从datetime开始使用该函数
以下是一个例子:
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'])
您可以使用
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()
绘图颜色和其他参数未设置为OP的显示绘图。您可以使用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()
打印颜色和其他参数未设置为OP的显示打印