[Python--]用Python实现时间离散化
来源:互联网 发布:网络新词贫民窟女孩 编辑:程序博客网 时间:2024/06/06 14:21
最近在分析日志的时候遇到这样一个需求。统计每小时的角色创建总数和每10分钟的在线人数。需求具体实现不做讨论, 这里主要记录如何将日志时间离散到相应区间的问题。先解释每小时的概念,按24小时算,一天可以分这么几个时间点:00:00:00,01:00:00,02:00:00,...,23:00:00。那么在[N小时0分1秒,N+1小时0分0秒](注意是闭区间),这段时间是要划分到N+1小时的, 即, 从12:00:01开始到13:00:00结束这段时间归并13:00:00,特别的,23:00:01至次日00:00:00是属于次日的00:00:00。
【方案1】时间取到小时, 分钟和秒全部用0代替,这样造成的问题是区间划分不正确,[00:00:00,00:59:59]被划分到时间点00:00:00上,与需求方的意思相违背(这里真的要吐槽一下, 代码开始之前一定要做好需求分析, 大部分的统计结果不合适都是因为需求分析没有做好而导致的);
【方案2】通过判断分钟和秒是否为0,对hour进行操作,如果都为0,hour=N;如果不为0,hour=N+1。这里的问题在于,在23点时并不能单纯的做加1操作;
【Final】使用datetime模块中的timedelta, 不用判断分钟和秒是否为0,也不用判断是不是在23点,代码如下:
def time_to_interval(dt, minutesdelta): """ minutesdelta measured in minutes dt is time str like '%Y-%m-%d %H:%M:%S' """ try: date, time = dt.split() year, month, day = date.split('-') hour, minute, second = time.split(':') hour, minute, second = int(hour), int(minute), int(second) seconds = minute * 60 + second secondsdelta = minutesdelta * 60 delta = math.ceil(seconds/secondsdelta)*secondsdelta - seconds return datetime(int(year), int(month), int(day), hour, minute, second)\ + timedelta(seconds = delta) except Exception, ex: logger.error("%s" % traceback.format_exc()) return None
PS:函数里面有关时间字符串转换成datetime类型,python其实有专门的时间处理模块datetime,没有用的原因是因为,在日志比较多的情况下进行实时在线分析会导致时间性能的降低,至于如何分析及为什么会这样将在下一篇博文中记录。
Python 模块功能还是非常强大的, 只有你想不到。
- [Python--]用Python实现时间离散化
- python实现数据离散化
- 离散概率模型的Python实现
- python 数据离散化和面元划分
- python离散特征编码
- python实现时间的比较
- Python求离散序列导数
- PYTHON时间
- python 时间
- python 时间
- python 时间
- python 时间
- Python 时间
- python时间
- [Python] Python时间操作
- 数据预处理(2) ——数据变换与数据离散化 使用python(sklearn,pandas,numpy)实现
- 视频时间戳重排python实现
- Python实现系统时间自动校正
- mysql三种批量增加的性能分析
- EditText隐藏软键盘的方法
- java 判断电话号码,邮箱格式是否正确
- system表空间的数据文件损坏是否能恢复
- 使用JDBC的addBatch()方法
- [Python--]用Python实现时间离散化
- 字典序问题
- C++之WebBrowser容器,SDK实现
- 未来你好 记于2015-01-01
- Set IP automatically in Windows
- 云计算市场风云迭起,如何采用云战略?
- js 日期加减
- iOS-BLE流程图
- 树状数组(2)