干货 | 时间序列数据的对齐和数据库的分批查询

Posted 数据魔术师

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了干货 | 时间序列数据的对齐和数据库的分批查询相关的知识,希望对你有一定的参考价值。

0. 前言

在机器学习里,我们对时间序列数据做预处理的时候,经常会碰到一个问题:有多个时间序列存在多个表里,每个表的的时间轴不完全相同,要如何把这些表在时间轴上进行对齐,从而合并成一个表呢?尤其是当这些表都存在数据库里,而且超级超级大的时候,怎样才能更高效地处理呢?

文章中,已经介绍过了如何在Python中创建数据库连接以及对数据库进行增删改查、分组聚合以及批量读取和处理等操作。

今天就以上面的问题为导向,手把手教你如何用Python一步步实现相应的功能。讲解的内容主要有:

  1. 如何实现两个有序序列的合并;

  2. 延伸到两个时间序列数据的对齐;

  3. 从数据库中自动循环分批读取数据。

需要掌握的主要编程技巧包括:

  • 用函数实现特定功能

  • 用类对功能进行封装

  • 实现基本的迭代器

使用的工具及版本:Python3.7,mysql8.0, Jupyter Notebook

----读者请注意:经测试发现,少部分手机不能正常显示本文代码框(例如不能左右滑动,会自动换行等),为了获得更好的阅读体验,建议这部分读者横屏阅读,或请移步至留言区获取源代码链接。----

1. 有序序列的合并

本节主要介绍如何实现将2个有序(默认从小到大排序)序列合并成一个序列,同时介绍Python中基本的循环结构。

其实在Python中固然有相应的方法可以很容易地做到(例如集合的set.union()方法),这里之所以要自己实现,主要是要理解这种思想,为后文的功能实现做铺垫。

1.1 Python知识点之条件测试

if 语句的语法结构为:

if boolean_expression1: #如果满足条件1,则执行suite1代码块
    suite1
elif boolean_expression2: #如果满足条件2,则执行suite2代码块
    suite2
else: #否则执行else_suite代码块
    else_suite

其中elifelse为可选。

1.2 Python知识点之循环控制

1.2.1 while循环

(1) 循环机制及应用场景

  • 用于编写通用迭代结构

  • 顶端测试为真时执行循环体,并会重复多次测试直到为假后结束循环

(2) 语法格式

while boolean_expression: #如果测试为真,则执行while_suite代码块(循环执行)
    while_suite
else: #直到测试为假,则执行一遍else_suite代码块之后结束循环
    else_suit

其中else为可选。

1.2.2 for 循环

(1)循环机制及应用场景

  • 通用的序列迭代器,用于遍历任何有序的序列对象内的元素

  • 可用于字符串、元组、列表和其它的内置可迭代对象,以及通过类所创建的新对象

(2)语法格式

for expression in iterable:
    for_suite
else:
    else_suite

其中else为可选。

以上是关于干货 | 时间序列数据的对齐和数据库的分批查询的主要内容,如果未能解决你的问题,请参考以下文章

从数据库中分批取数据进行处理

从数据库中分批取数据进行处理

oracle分批查询数据提交

循环分批从数据库获取数据

循环分批从数据库获取数据

循环分批从数据库获取数据