V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Hiufan
V2EX  ›  问与答

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

  •  
  •   Hiufan · 2016-01-02 23:55:10 +08:00 · 2113 次点击
    这是一个创建于 3250 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 日)的监测值得到一个差值。五个年份的差值都拿到以后计算它的方差和标准差。

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

    5 条回复    2016-01-03 15:12:31 +08:00
    c742435
        1
    c742435  
       2016-01-03 00:28:51 +08:00
    遍历一遍也用不了多久。
    zakokun
        2
    zakokun  
       2016-01-03 00:33:05 +08:00
    遍历一遍判断一下就行了呗,也不难
    aaaron7
        3
    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
        4
    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
        5
    Comdex  
       2016-01-03 15:12:31 +08:00
    这些数据是按日递增的,那比如说找出最后一次出现的 2011 年的不是很简单么?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1376 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 23:43 · PVG 07:43 · LAX 15:43 · JFK 18:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.