我有 8 年的每日数据。我想绘制一周中每天、一年中的每周和一年中的每个月的所有值。我怎么做?

3tw*_*zzy 5 python data-visualization matplotlib pandas

我希望能够将我的数据点可视化为一周中的每一天、一年中的每一周和每月。我能够每年可视化我的数据。但是当我调整每月和每周的代码时,x 轴仍然是每年。

我有8年的住院记录。我的数据被组织成 2 列。第 1 列是我的“日期”列,从 2010-03-10 开始到 2017-12-31 结束。第 2 列是我的值列。本专栏列出了我是否有患者前来接受治疗。第 2 列中的值为 0 或 x 数字。例如 0 表示我没有患者 x 表示我有 x 名患者。当我尝试以图形方式表示这些数据时,它只计算我每周拥有的最大 x 数。

df=pd.read_csv('Data 3.csv', parse_dates=["Dates"], index_col="Dates")
# create the plot space upon which to plot the data
fig, ax = plt.subplots(figsize = (10,10))

# add the x-axis and the y-axis to the plot
ax.plot(df.resample('Y').sum()['Total # Events'],color = 'blue')

# rotate tick labels
plt.setp(ax.get_xticklabels(), rotation=45)

# set title and labels for axes
ax.set(xlabel="Years",
ylabel="Total # of Events",
title="Yearly Treatment Events from 2010-2017");
Run Code Online (Sandbox Code Playgroud)

图结果

所以我得到了正确的图形。但是,当我将每月的 (df.resample('Y').sum() 从 ('Y') 更改为 ('M') 时,我会得到一个显示年度 X 轴和值的图表。我该如何更改这是为了获得每月 X 轴和每周 X 轴?

Ami*_*ola 4

因此,正如我所假设的,鉴于日期可用,这很容易。

因此,首先创建新列来表示日期所属的周、年和月。为此,您需要在读取 csv 时将日期设置为索引和 parse_dates:

data=pd.read_csv('Data 3.csv',index_col='Dates',parse_dates=True)
Run Code Online (Sandbox Code Playgroud)

现在您可以创建三列:

data['Week']=data.index.week
data['Month']=data.index.month
data['Year']=data.index.year
Run Code Online (Sandbox Code Playgroud)

这将为您提供如下数据:

            Total # Events  Week  Year  Month
Dates                                        
2010-03-10               0    10  2010      3
2010-03-11               4    10  2010      3
2010-03-12               0    10  2010      3
2010-03-13               0    10  2010      3
2010-03-14               0    10  2010      3
2010-03-15               0    11  2010      3
2010-03-16               0    11  2010      3
2010-03-17               0    11  2010      3
2010-03-18               2    11  2010      3
2010-03-19               0    11  2010      3
Run Code Online (Sandbox Code Playgroud)

我不会为您分享整个代码,而只会显示 Year 输出及其工作原理,其余的我希望您可以自己完成,否则您将不会以这种方式学到任何东西。

所以下一步是:

Yearwise=data.groupby(by=('Year')).sum()['Total # Events']
Run Code Online (Sandbox Code Playgroud)

就是这样,绘制它:

plt.figure(figsize=(14,10))
Yearwise.plot()
Run Code Online (Sandbox Code Playgroud)

您也分享的图表是: 在此输入图像描述

请记住,对于月份而言,您需要将年份和月份一起进行分组,否则最终会将所有相同编号的月份分组在一起。我的意思是这样的——

by=('Year','Month'))
Run Code Online (Sandbox Code Playgroud)

休息一下,我相信您可以自己解决。不过,如果您遇到错误,请告诉我。