如何从历史数据中取出一年中的第一天和最后一天的值?

2016-01-02 23:55:10 +08:00
 Hiufan

2011-08-10: "1"
2011-08-12: "1"
2011-08-19: "0.998"
2011-08-26: "1"
2011-09-02: "0.993"
.
.
.
2015-01-05: "1.145"
2015-01-06: "1.209"
2015-01-07: "1.208"
2015-01-08: "1.244"
2015-01-09: "1.249"
2015-01-12: "1.295"
2015-01-13: "1.337"
2015-01-14: "1.325"
.
.
.
2015-12-17: "3.001"
2015-12-18: "2.954"
2015-12-21: "2.941"
2015-12-22: "2.996"
2015-12-23: "2.896"
2015-12-24: "2.94"
2015-12-25: "2.953"
2015-12-28: "2.96"
2015-12-29: "3.02"
2015-12-30: "3.126"
2015-12-31: "3.062"

有一批历史数据是这样的,从 11 年的 8 月 10 日开始,每一个工作日,会得到一个监测值。
现在需要做的是用每年最后一天(考虑周末等情况,不一定是 12 月 31 日)的监测值减去每年第一天(考虑公共假期,不一定是 1 月 1 日)的监测值得到一个差值。五个年份的差值都拿到以后计算它的方差和标准差。

不过第一步费了好长时间也没想出一个好的方法来取到一年中第一天和最后一天的数值。希望大家集思广益,一起探讨个算法出来。感谢。

1990 次点击
所在节点    问与答
5 条回复
c742435
2016-01-03 00:28:51 +08:00
遍历一遍也用不了多久。
zakokun
2016-01-03 00:33:05 +08:00
遍历一遍判断一下就行了呗,也不难
aaaron7
2016-01-03 01:01:13 +08:00
这个数据量,遍历即可。一个用 swift 写的简单示例:

let arr = ["2015-12-01","2015-12-02","2015-01-16","2015-01-08",
"2011-08-19","2015-12-30","2014-01-12","2014-01-12","2014-01-12","2014-04-12","2014-10-12","2014-01-12","2014-11-12","2014-01-13"]


func getFirstLastDayOf(year : String!)->(first : String?,last : String?){
let r = arr.filter({$0.hasPrefix(year)})
return (r.minElement(),r.maxElement())
}

PS :这里简化了输入
imn1
2016-01-03 08:11:41 +08:00
In [1]: bool("2015-01-04">"2014-12-31")
Out[1]: True

In [2]: bool("2014-12-30">"2015-01-01")
Out[2]: False

min(for x in date if x>"2014-12-31")
Comdex
2016-01-03 15:12:31 +08:00
这些数据是按日递增的,那比如说找出最后一次出现的 2011 年的不是很简单么?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/247894

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX