【JP】第十章 时序数据

提问前先阅读此贴学习规范,同时要求问题表述清晰,报错相关的问题需以文字而非图片的形式给出代码与重要的错误信息。

耿老师,感觉这里这么写会更好一些image
2020-09-07 08:00:00 2020-09-07 10:00:00

好的,一会改下

编号:10,昵称:天国之影
内容:github中的jupyter notebook内容优化
image
image

EX2 第二题的1.c是求每月最后一天工作日的生梨销量总和
参考答案用的是mean()

请问这里是不是写错了,daysinmonth这个函数使用返回的是本月共有多少天数,不是该月的第几天.

EX2的第二小问中题目是“按月计算周一至周日各品种水果的平均记录条数,行索引外层为水果名称,内层为月份,列索引为星期”。
参考答案好像星期和月份好像反了

已改

image

时间戳-Datatime序列生成-P186
这个可以不用加head()

好的,谢谢

编号:107,昵称:Y’s
Ex2的1d,求每个月最后五天苹果销量的均值


答案是用了nlargest求一个月的最后五天,这样的话实际是计算的在苹果有销量的日子里的每个月的最后五天的均值,提供的数据里2019-12-31这天是苹果没有销量的一天,可以看出答案计算的结果里不包含这一天

>>>target_dt.tail()
55   2019-12-30
56   2019-12-29
57   2019-12-28
58   2019-12-27
59   2019-12-26
Name: Date, dtype: datetime64[ns]

题意描述的更像是求每个月的最后五天的日期,对应于12月应该是12-27到12-31这五天的均值,我的思路是这样,这样还用到了本次教程中学到的offset:

days = pd.Series([], dtype='datetime64[ns]')
for i in range(5):
    days = pd.concat([days, pd.Series(pd.date_range('20190101', '20191231', freq='M')) - pd.offsets.Day(i)])
df_apple = df[df.Fruit=='Apple']
df_apple[df_apple.Date.isin(days)].groupby(df_apple.Date.dt.month).Sale.mean()

这个问题就是出在对最后五天怎么定义,题目可以描述得更清楚些或者可以修改一下答案

编号:107,昵称:Y’s
Ex 2题目3 按天计算向前10个工作日窗口的苹果销量均值序列,非工作日的值用上一个工作日的结果填充。
答案的思路是:

df_apple = df[(df.Fruit=='Apple')&(~df.Date.dt.dayofweek.isin([5,6]))] 
s = pd.Series(df_apple.Sale.values, index=df_apple.Date).groupby('Date').sum() 
res = s.rolling('10D').mean().reindex(pd.date_range('20190101','20191231')).fillna(method='ffill') 

这里变量s的索引是只包含了工作日的日期,那么rolling('10D')的含义应该是每十天一个窗口,求这个窗口里的工作日的销量均值,我觉得应该改成rolling(10),表达每十个工作日为一个窗口

你说的是对的,答案需要修正

Ex1 第3题最后一个小问 题目是:image

答案Series:
image

因为主体是每个观测,所以最终Series的Index应该保持与df相同,添加如下代码:

res.index = df.index
res.name = '6小时前的辐射量'
res

结果:
image

Ex2 第一题 a
以2月为例对答案进行验证:
df_grape = df[df.Fruit==‘Grape’]
df_grape.insert(0,‘Month’,df_grape.apply(lambda x:x[0].split(’-’)[1],axis=1))
df_demo = df_grape[df_grape.Month==‘02’]
df_demo
image
2月总的销量是:
image
2月上半月的销量是:


求2月上半月与下半月的比值:
image
参考答案:

我的答案:
df_demo = df[df.Fruit==‘Grape’]
df_demo.insert(0,‘Month’,df_demo.apply(lambda x:x[0].split(’-’)[1],axis=1))
df_demo.insert(0,‘Day’,np.where(s_upDown.astype(‘int’)<=15,‘up’,‘down’))
res1 = df_demo.groupby(‘Month’)[‘Sale’].sum()
res2 = df_demo[df_demo.Day == ‘up’].groupby(‘Month’)[‘Sale’].sum()
res2/(res1-res2)
结果:
image