鱼C论坛

 找回密码
 立即注册
查看: 618|回复: 5

气温填充求教

[复制链接]
发表于 2019-6-11 19:17:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
已知当天的最高温和最低温,有什么办法,将其扩充成每4个小时的气温记录么? (一般情况下,最高温都是在中午12点左右,而最低温则是在凌晨4点左右)。
只要大概的填充方法即可。。求指点
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-6-11 19:27:15 | 显示全部楼层
你的温度数据什么分布
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-11 19:59:49 | 显示全部楼层
按均匀分布计算。设最高32.4℃,最低17.2℃
  1. temp = [[i, 0] for i in range(0, 24, 4)]
  2. temp[3][1] = 32.4
  3. temp[1][1] = 17.2

  4. temp[2][1] = (32.4 - 17.2) / 2 + 17.2
  5. temp[0][1] = (32.4 - 17.2) / 4 + 17.2
  6. temp[5][1] = (32.4 - 17.2) * 2 / 4 + 17.2
  7. temp[4][1] = (32.4 - 17.2) * 3 / 4 + 17.2
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-11 21:06:31 | 显示全部楼层
塔利班 发表于 2019-6-11 19:27
你的温度数据什么分布

具体倒没有要求什么分布。。。常规是正态分布。。
情况是这样的,我从网上爬了一个时间段的气象数据,里面都是以天计的数据,其中有个最高温和最低温。
我需要将其扩充成每隔4小时的气温数据,用于机器学习的建模。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-11 21:11:03 | 显示全部楼层
冬雪雪冬 发表于 2019-6-11 19:59
按均匀分布计算。设最高32.4℃,最低17.2℃

谢谢。
如果是针对整个dataframe格式的数据,里面有两个字段,分别是最高温和最低温。
而这两个温度数据,是以天计的。
我需要扩充成每隔4小时的温度。。因为一般情况下,气温都是在中午前后达到最高,而凌晨4点左右最低。所以我的初步考虑是将最高温和最低温填充到当天的12点和凌晨4点,然后考虑用线性插值法,再填充其他数据。
我明天去办公室试下你的思路,看能否应用到一整年的气象数据中去。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-12 08:47:45 | 显示全部楼层
冬雪雪冬 发表于 2019-6-11 19:59
按均匀分布计算。设最高32.4℃,最低17.2℃


下面是我自己想的做法:
1. 先将以天为记录的高低温数据,用resample命令,扩充成每隔4小时的情况。原高低温的数据会保留在当天的0点位置,其余时间段为空值。
2. 生成一个新的气温字段,根据0点的高低温数值,分别将其填充到12点和4点的气温字段中。----这样就是,当天的数据中,气温字段里,12点为最高温,4点为最低温。其余字段为空值;
具体代码如下:
  1. #需要生成新的气温字段,将高温数值设置到当天的12点,而低温数值设置为当天的4点。然后再进行插值填充处理。
  2. data = data.resample('4H',).asfreq()
  3. data['气温'] = np.nan
  4. for i in data.index: #时间点为索引字段
  5. #先查找当天时间的0点,因为时间扩充后,当天时间的高低温数值,都位于0点所在的行。原数据记录为以天计,将其扩充为每隔4小时计后,原数据保留在0点位置。其余时段为空值
  6. #然后将该行对应的高、低温值,对应到新生成气温字段的相应时间中(12点的数值为高温,4点的数值为低温,其余为空值,准备填充)
  7.     time1 = i.split(' ')[0]  + " 00:00:00"
  8.     if '12:00:00' in i:        
  9.         data.loc[i,'气温'] = data.loc[time1,'高温']
  10.     if '04:00:00' in i:
  11.         data.loc[i,'气温'] = data.loc[time1,'低温']
复制代码


生成的结果如下图所示:
微信图片_20190612084439.png

现在的问题在于如何对气温字段,进行插值填充了。。
如果用Series.interpolate方法,貌似无法相对较好地拟合当天的温度走势吧?
有什么好办法呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-1-16 07:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表