时间序列(time series)数据是一种重要的结构化数据形式,应用于多个领域,包括金融学、经济学、生态学、神经科学、物理学等。在多个时间点观察或测量到的任何事物都可以形成一段时间序列。很多时间序列是固定频率的,也就是说,数据点是根据某种规律定期出现的(比如每15秒、每5分钟、每月出现一次)。时间序列也可以是不定期的,没有固定的时间单位或单位之间的偏移量。时间序列数据的意义取决于具体的应用场景,主要有以下几种:
时间戳(timestamp),特定的时刻。
固定时期(period),如2007年1月或2010年全年。
时间间隔(interval),由起始和结束时间戳表示。时期(period)可以被看做间隔(interval)的特例。
实验或过程时间,每个时间点都是相对于特定起始时间的一个度量。例如,从放入烤箱时起,每秒钟饼干的直径。
本章主要讲解前3种时间序列。许多技术都可用于处理实验型时间序列,其索引可能是一个整数或浮点数(表示从实验开始算起已经过去的时间)。最简单也最常见的时间序列都是用时间戳进行索引的。
提示:pandas也支持基于timedeltas的指数,它可以有效代表 ...
本书中,我已经介绍了Python数据分析的编程基础。因为数据分析师和科学家总是在数据规整和准备上花费大量时间,这本书的重点在于掌握这些功能。
开发模型选用什么库取决于应用本身。许多统计问题可以用简单方法解决,比如普通的最小二乘回归,其它问题可能需要复杂的机器学习方法。幸运的是,Python已经成为了运用这些分析方法的语言之一,因此读完此书,你可以探索许多工具。
本章中,我会回顾一些pandas的特点,在你胶着于pandas数据规整和模型拟合和评分时,它们可能派上用场。然后我会简短介绍两个流行的建模工具,statsmodels和scikit-learn。这二者每个都值得再写一本书,我就不做全面的介绍,而是建议你学习两个项目的线上文档和其它基于Python的数据科学、统计和机器学习的书籍。
13.1 pandas与模型代码的接口模型开发的通常工作流是使用pandas进行数据加载和清洗,然后切换到建模库进行建模。**开发模型的重要一环是机器学习中的“特征工程”。**它可以描述从原始数据集中提取信息的任何数据转换或分析,这些数据集可能在建模中有用。本书中学习的数据聚合和GroupBy工具常用于 ...
在这篇附录中,我会深入NumPy库的数组计算。这会包括ndarray更内部的细节,和更高级的数组操作和算法。
本章包括了一些杂乱的章节,不需要仔细研究。
A.1 ndarray对象的内部机理NumPy的ndarray提供了一种将同质数据块(可以是连续或跨越)解释为多维数组对象的方式。正如你之前所看到的那样,数据类型(dtype)决定了数据的解释方式,比如浮点数、整数、布尔值等。
ndarray如此强大的部分原因是所有数组对象都是数据块的一个跨度视图(strided view)。你可能想知道数组视图arr[::2,::-1]不复制任何数据的原因是什么。简单地说,ndarray不只是一块内存和一个dtype,它还有跨度信息,这使得数组能以各种步幅(step size)在内存中移动。更准确地讲,ndarray内部由以下内容组成:
一个指向数据(内存或内存映射文件中的一块数据)的指针。
数据类型或dtype,描述在数组中的固定大小值的格子。
一个表示数组形状(shape)的元组。
一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要“跨过”的字节数。
图A-1简单 ...
突发奇想,想用Python把数据结构的知识再过一遍,所以就开始从顺序表从头来一遍,Python内置了一些功能,感觉只需要定义方法调用就好了,或者不想这么干的话,直接调用内置的方法咯。
list 是一种元素个数可变的线性表,采用了分离式技术实现的动态顺序表。可以加入和删除元素,并在各种操作中维持已有元素的顺序(即保序)。
1.1 创建顺序表123456# 创建顺序表def CreateSeqList(self): element = input("please enter(input #:end):") while element != '#': self.seqList.append(int(element)) element = input("please enter(input #:end):")
1.2 查找元素123456789# 查找顺序表中某一个元素def FindElement(self): key = int(input("please ente ...
单链表是一种链式的数据结构,链表中的数据用结点表示,保持了数据之间的逻辑关系,但存储空间不一定是按照顺序存储。
链表的基本元素有:
节点:包括数据域和指针域,数据域存放数据,指针域存放指向下一个元素的指针
head:头结点
tail:尾结点
None:链表最后一个结点的指针域为None
Python中没有显式的指针,但是有引用啊,所以我们可以通过定义节点类和引用来实现链表!
链表分为单链表和单循环链表,双向链表和双向循环链表,本篇先讲一下单链表:
2.1 定义节点类节点类中包括节点数据和下一个节点地址,即引用
1234567891011121314# 节点类class Node(object): # 单个节点 初始化 输入一个值data,将值变为一个节点 def __init__(self, data): self.data = data self.next = None # 打印对象中具体的属性值 def __str__(self): # 测试基本功能,输出data return self.dat ...
栈是一种数据结构,只能从一端插入和删除操作,遵循着先进后出原则存储数据。
3.1 栈的初始化1234def __init__(self): self.stack = [] # 栈列表 self.size = 20 # 栈大小 self.top = -1 # 栈顶位置
3.2 元素进栈1234# 元素进栈def push(self, element): self.stack.append(element) self.top += 1
3.3 元素出栈123456# 元素出栈def pop(self): element = self.stack[-1] self.top -= 1 del self.stack[-1] return element
这里可以直接调用pop函数,使用如下:
1self.stack.pop() # 弹出栈顶元素
3.4 获取栈顶元素123# 获取栈顶位置def getTop(self): return self.top
这里也可以直接使用列表,使用如下:
1self.s ...
第2章中,我们学习了IPython shell和Jupyter notebook的基础。本章中,我们会探索IPython更深层次的功能,可以从控制台或在jupyter使用。
B.1 使用命令历史Ipython维护了一个位于磁盘的小型数据库,用于保存执行的每条指令。它的用途有:
只用最少的输入,就能搜索、补全和执行先前运行过的指令;
在不同session间保存命令历史;
将日志输入/输出历史到一个文件
这些功能在shell中,要比notebook更为有用,因为notebook从设计上是将输入和输出的代码放到每个代码格子中。
搜索和重复使用命令历史Ipython可以让你搜索和执行之前的代码或其他命令。这个功能非常有用,因为你可能需要重复执行同样的命令,例如%run命令,或其它代码。假设你必须要执行:
1In[7]: %run first/second/third/data_script.py
运行成功,然后检查结果,发现计算有错。解决完问题,然后修改了data_script.py,你就可以输入一些%run命令,然后按Ctrl+P或上箭头。这样就可以搜索历史命令,匹配输入字符 ...
本书正文的最后一章,我们来看一些真实世界的数据集。对于每个数据集,我们会用之前介绍的方法,从原始数据中提取有意义的内容。展示的方法适用于其它数据集,也包括你的。本章包含了一些各种各样的案例数据集,可以用来练习。
案例数据集可以在Github仓库找到,见第一章。
14.1 来自Bitly的USA.gov数据2011年,URL缩短服务Bitly跟美国政府网站USA.gov合作,提供了一份从生成.gov或.mil短链接的用户那里收集来的匿名数据。在2011年,除实时数据之外,还可以下载文本文件形式的每小时快照。写作此书时(2017年),这项服务已经关闭,但我们保存一份数据用于本书的案例。
以每小时快照为例,文件中各行的格式为JSON(即JavaScript Object Notation,这是一种常用的Web数据格式)。例如,如果我们只读取某个文件中的第一行,那么所看到的结果应该是下面这样:
12345678910In [5]: path = 'datasets/bitly_usagov/example.txt'In [6]: open(path).readline()O ...
01 闲扯两句写之前那先撤两句没用的…
首先那,不要把IPO妖魔化,虽然“一个项目从入职干到离职”的情况属实,而导致离职的本质原因,个人认为原因有三…
1.把审计干成了统计至少在项目经理之前,特别是在刚入职时很容易就把审计干成了统计…当然这种囧境对于小朋友来说,其实是挺无奈的,即便在办离职的那一天,也没有从人形复印机、行走的扫描仪的阴影中走出来,周而复始的文本、数字录入,说实话,真的挺劝退的…
2.调调调从进场的第一天到出报告报告的最后一分钟,各种调调调也属于对审计人员的一种灵魂拷问,最终版、打死不改版、再改我是狗版…无论是底稿、调整分录、报告还是文件,作业的过程中感觉啥啥永远都只有最新版,木有最终版,通知改数的那一刻只能一笑而逝了…
3.迷茫项目一蹲好几个月,厂子里的狗都混熟了,回家反而睡不着了…朋友圈逐渐没了圈…睡得比狗晚,起得比鸡早,挣得工资给房东交一半,给医院交一半…每个审计人可能时不时的会有“我是谁,我在那,我在干什么的”的错觉..
针对上述三点,说实话,没啥好的解决方法,特别是在刚入职的头几年,就好比饭店的小学徒,洗菜洗得手掉皮,好不容易拿起了刀,发现还只能干切菜的活一样… ...

