第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或上箭头。这样就可以搜索历史命令,匹配输入字符 ...
在这篇附录中,我会深入NumPy库的数组计算。这会包括ndarray更内部的细节,和更高级的数组操作和算法。
本章包括了一些杂乱的章节,不需要仔细研究。
A.1 ndarray对象的内部机理NumPy的ndarray提供了一种将同质数据块(可以是连续或跨越)解释为多维数组对象的方式。正如你之前所看到的那样,数据类型(dtype)决定了数据的解释方式,比如浮点数、整数、布尔值等。
ndarray如此强大的部分原因是所有数组对象都是数据块的一个跨度视图(strided view)。你可能想知道数组视图arr[::2,::-1]不复制任何数据的原因是什么。简单地说,ndarray不只是一块内存和一个dtype,它还有跨度信息,这使得数组能以各种步幅(step size)在内存中移动。更准确地讲,ndarray内部由以下内容组成:
一个指向数据(内存或内存映射文件中的一块数据)的指针。
数据类型或dtype,描述在数组中的固定大小值的格子。
一个表示数组形状(shape)的元组。
一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要“跨过”的字节数。
图A-1简单 ...
最近在使用Jupyter notebook的时候感觉到,没有个目录真心难受,当想查找需要的函数的时候,不能很快速的找到,这个时候,要是有个目录就好很多了,很不幸的是,默认Jupyter notebook事没有生成目录这个功能的,但很巧的是,有人已经开发了Jupyter插件,里面包含toc目录功能,开森 🦞
效果图如下:
同时toc目录的大小和位置可以随意改变,也支持对每个标题自动编号,默认的就挺好哈哈哈。
如何安装呢?
第一步:安装Jupyter notebook
这个不用说应该都安装了吧,数据分析特别好用的工具,没有之一。
第二步:安装Jupyter notebook extensions
1conda install -c conda-forge jupyter_contrib_nbextensions
第三步:开启toc插件
重新运行Jupyter notebook,会发现,多了Nbextensions按钮,点击这个tab,按照下图操作:
注意:旧版本可能不支持,试试把disable configuration那行前面的✅取消掉再试试,我就是遇到这个问题。
第四步:生 ...
信息可视化(也叫绘图)是数据分析中最重要的工作之一。它可能是探索过程的一部分,例如,帮助我们找出异常值、必要的数据转换、得出有关模型的idea等。另外,做一个可交互的数据可视化也许是工作的最终目标。
Python有许多库进行静态或动态的数据可视化,但我这里重要关注于matplotlib(http://matplotlib.org/)和基于它的库。
matplotlib是一个用于创建出版质量图表的桌面绘图包(主要是2D方面)。该项目是由John Hunter于2002年启动的,其目的是为Python构建一个MATLAB式的绘图接口。matplotlib和IPython社区进行合作,简化了从IPython shell(包括现在的Jupyter notebook)进行交互式绘图。matplotlib支持各种操作系统上许多不同的GUI后端,而且还能将图片导出为各种常见的矢量(vector)和光栅(raster)图:PDF、SVG、JPG、PNG、BMP、GIF等。除了几张,本书中的大部分图都是用它生成的。
随着时间的发展,matplotlib衍生出了多个数据可视化的工具集,它们使用matplo ...
单链表是一种链式的数据结构,链表中的数据用结点表示,保持了数据之间的逻辑关系,但存储空间不一定是按照顺序存储。
链表的基本元素有:
节点:包括数据域和指针域,数据域存放数据,指针域存放指向下一个元素的指针
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 ...
突发奇想,想用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 ...
栈是一种数据结构,只能从一端插入和删除操作,遵循着先进后出原则存储数据。
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 ...
本书正文的最后一章,我们来看一些真实世界的数据集。对于每个数据集,我们会用之前介绍的方法,从原始数据中提取有意义的内容。展示的方法适用于其它数据集,也包括你的。本章包含了一些各种各样的案例数据集,可以用来练习。
案例数据集可以在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.迷茫项目一蹲好几个月,厂子里的狗都混熟了,回家反而睡不着了…朋友圈逐渐没了圈…睡得比狗晚,起得比鸡早,挣得工资给房东交一半,给医院交一半…每个审计人可能时不时的会有“我是谁,我在那,我在干什么的”的错觉..
针对上述三点,说实话,没啥好的解决方法,特别是在刚入职的头几年,就好比饭店的小学徒,洗菜洗得手掉皮,好不容易拿起了刀,发现还只能干切菜的活一样… ...