为使数据有用且有意义,必须对其进行整理和提炼。本书将向读者传输这些过程背后的所有核心思想,并让读者掌握该领域中最通俗的工具和技术的相关知识。
本书从Python基础知识开始,主要聚焦于数据结构,接着简要介绍数据整理的基本工具NumPy和pandas库,之后介绍如何使用相同的Python后端从各种不同的数据源(如internet、大型数据库或Excel财务表)中提取和转换数据,以及如何根据下游的分析工具需求,处理缺失或不正确的数据并重新格式化数据。读者将通过现实世界的示例和数据集学习这些相关概念。最后,通过本书附录中的活动练习,读者将有足够的信心来处理大量的数据源,有效地提取、清理、转换和格式化数据。
封面图
目录
- 译者序
- 前言
- 第1章Python数据整理入门1
- 1.1引言1
- 1.2Python数据整理3
- 1.3列表、集合、字典、元组和字符串3
- 1.3.1列表4
- 练习1:访问列表成员 4
- 练习2:生成列表5
- 练习3:遍历列表并检查成员7
- 练习4:列表排序8
- 练习5:生成随机列表9
- 活动1:处理列表10
- 1.3.2集合11
- 1.3.3字典13
- 练习6:访问和设置字典中的值13
- 练习7:遍历字典14
- 练习8:再次讨论唯一值列表问题14
- 练习9:删除字典中的值15
- 练习10:字典推导式16
- 1.3.4元组16
- 练习11:处理元组17
- 1.3.5字符串18
- 练习12:访问字符串18
- 练习13:字符串切片19
- 练习14:字符串拆分与合并20
- 活动2:分析多行字符串并生成唯一单词数量21
- 1.4小结22
- 第2章高级数据结构和文件处理23
- 2.1引言23
- 2.2高级数据结构23
- 2.2.1迭代器24
- 练习15:迭代器介绍24
- 2.2.2栈25
- 练习16:在Python中实现栈26
- 练习17:使用用户定义的方法实现栈26
- 2.2.3Lambda表达式28
- 练习18:用Lambda表达式证明三角恒等式28
- 练习19:用于排序的Lambda表达式29
- 练习20:多元素成员检查30
- 2.2.4队列30
- 练习21:在Python中实现队列31
- 活动3:Permutations、迭代器、Lambda、列表32
- 2.3Python基本文件操作33
- 练习22:写入和读取环境变量33
- 练习23:打开和关闭文件34
- 练习24:逐行读取文件36
- 练习25:写入文件37
- 活动4:设计专属CSV解析器38
- 2.4小结39
- 第3章NumPy、pandas和Matplotlib简介40
- 3.1引言40
- 3.2NumPy数组操作40
- 练习26:从列表中创建NumPy数组41
- 练习27:两个NumPy数组相加42
- 练习28:NumPy数组的数学运算43
- 练习29:NumPy数组的高级数学运算43
- 练习30:使用arange和linspace生成数组44
- 练习31:创建多维数组45
- 练习32:二维数组的维度、形状、大小和数据类型46
- 练习33:全零、全一、随机、单位矩阵和向量46
- 练习34:reshape和 ravel函数48
- 练习35:索引和切片49
- 练习36:数组操作(数组-数组、数组-标量和通用函数)52
- 3.3pandas的DataFrame54
- 练习37:创建pandas序列55
- 练习38:pandas序列和数据处理56
- 练习39:创建pandas DataFrame57
- 练习40:查看部分DataFrame58
- 练习41:创建和删除新的列或行61
- 3.4NumPy和pandas的统计与可视化63
- 3.4.1基本描述性统计(用于可视化的Matplotlib库)63
- 练习42:通过散点图介绍Matplotlib64
- 3.4.2统计指标的定义—集中趋势和分布65
- 3.4.3随机变量与概率分布66
- 3.4.4统计和可视化中的数据整理68
- 3.4.5DataFrame的基本描述性统计计算68
- 练习43:从均匀分布生成随机数68
- 练习44:从二项分布和条形图生成随机数69
- 练习45:从正态分布和直方图生成随机数70
- 练习46:从DataFrame计算描述性统计71
- 练习47:内置绘图实用工具74
- 活动5:从CSV文件生成统计数据75
- 3.5小结75
- 第4章深入学习Python数据整理77
- 4.1引言77
- 4.2选取子集、过滤和分组77
- 4.2.1选取子集78
- 练习48:从Excel文件加载和检查超市的销售数据78
- 练习49:unique函数80
- 4.2.2条件选择与布尔过滤81
- 练习50:设定和重置索引84
- 4.2.3分组86
- 练习51:GroupBy方法86
- 4.3处理缺失值和检测异常值89
- 4.3.1pandas中的缺失值89
- 练习52:用fillna填充缺失值91
- 练习53:用dropna删除缺失值93
- 4.3.2使用简单的统计测试进行异常值检测94
- 4.4合并数据的方法:concat、merge和join96
- 练习54:concat方法96
- 练习55:merge方法(通过公共键)97
- 练习56:join方法100
- 4.5pandas的实用方法102
- 4.5.1随机抽样102
- 练习57:使用sample方法随机抽样102
- 4.5.2value_counts方法103
- 4.5.3数据透视表功能104
- 练习58:按列值排序—sort_values方法105
- 练习59:使用apply方法实现用户自定义函数的灵活性107
- 活动6:成人收入数据集的使用109
- 4.6小结110
- 第5章适应不同类型的数据源112
- 5.1引言112
- 5.2从不同的基于文本的(和非文本的)源中读取数据112
- 5.2.1本章提供的数据文件113
- 5.2.2本章需安装的库113
- 5.2.3从CSV文件中读取文件113
- 练习60:从缺少表头的CSV文件中读取数据113
- 练习61:读取不以逗号为分隔符的CSV文件115
- 练习62:重置CSV文件的表头116
- 练习63:读取CSV文件时跳过初始行和页脚116
- 练习64:结合使用skiprows和nrows来读取小块数据118
- 5.2.4使用sheet_name从Excel文件读取数据并处理不同的sheet_name120
- 5.2.5从文本文件中读取数据121
- 练习65:读取一般分隔的文本文件121
- 5.2.6从非文本源中读取数据121
- 练习66:从URL中直接读取HTML表121
- 练习67:从JSON文件中读取数据123
- 练习68:从PDF文件读取表格数据124
- 5.3BeautifulSoup 4和网页解析简介126
- 练习69:使用BeautifulSoup读取HTML文件并提取内容127
- 练习70:DataFrame和BeautifulSoup131
- 练习71:以Excel文件格式导出DataFrame 132
- 练习72:使用bs4栈文档中的URL133
- 活动7:从网页读取表格数据并创建DataFrame133
- 5.4小结134
- 第6章学习数据整理的隐藏秘密135
- 6.1引言135
- 6.2高级列表推导式和zip函数136
- 6.2.1生成器表达式简介136
- 练习73:生成器表达式136
- 练习74:一行生成器表达式137
- 练习75:提取包含单个单词的列表138
- 6.2.2zip函数140
- 练习76:zip函数140
- 练习77:处理杂乱的数据140
- 6.3数据格式化141
- 6.3.1%运算符141
- 6.3.2使用format函数143
- 练习78:使用{}表示数据144
- 6.4识别并清除异常值145
- 练习79:数值数据中的异常值146
- 练习80:使用z-score去除异常值148
- 练习81:字符串的模糊匹配149
- 活动8:异常值和缺失数据的处理150
- 6.6小结151
- 第7章高级网络抓取和数据收集152
- 7.1引言152
- 7.2网络抓取和BeautifulSoup库的基础152
- 7.2.1Python中的库152
- 7.2.2requests库153
- 练习82:使用requests库从Wikipedia主页获取响应153
- 练习83:检查网络请求的状态154
- 练习84:创建一个函数来解码响应的内容并检查其长度155
- 7.2.3BeautifulSoup库156
- 练习85:从BeautifulSoup对象中提取人类可读的文本156
- 练习86:使用高级bs4技术提取相关文本160
- 练习87:创建一个紧凑函数来从Wikipedia主页提取“On this day”文本163
- 7.3从XML读取数据164
- 练习88:创建XML文件并读取XML元素对象164
- 练习89:查找树(元素)中的各种数据元素165
- 7.3.1从本地XML文件读取数据到ElementTree对象166
- 练习90:遍历树,找到根,并探索所有子节点的标签和属性166
- 练习91:使用text方法提取有意义的数据167
- 7.3.2使用循环提取和输出人均GDP信息168
- 练习92:查找并输出每个国家的所有邻国169
- 练习93:通过网络抓取获得的XML数据的简单使用演示169
- 7.4从API读取数据172
- 7.4.1定义基URL(或API端点)172
- 练习94:定义和测试从API提取国家数据的函数173
- 7.4.2使用内置的JSON库读取和检查数据174
- 7.4.3输出所有数据元素175
- 7.4.4使用函数提取包含关键信息的DataFrame176
- 练习95:通过建立一个国家信息的小型数据库来测试这个函数177
- 7.5正则表达式的基础178
- 7.5.1网络抓取中的正则表达式178
- 练习96:使用match方法检查模式是否与字符串或序列匹配179
- 7.5.2使用compile方法创建正则表达式程序179
- 练习97:编译程序以匹配对象180
- 练习98:在匹配中使用附加参数来检查特定位置的匹配180
- 7.5.3正则表达式中的search方法182
- 练习99:正则表达式中的search方法182
- 练习100:使用Match对象的span方法来定位匹配模式的位置182
- 练习101:使用search进行单字符模式匹配的示例183
- 练习102:字符串开头或结尾的模式匹配示例184
- 7.5.4多种匹配模式185
- 练习103:多字符模式匹配示例185
- 练习104:贪婪匹配与非贪婪匹配186
- 练习105:控制重复次数的匹配187
- 练习106:匹配字符集188
- 练习107:在正则表达式中使用OR运算符190
- 7.5.5findall方法191
- 活动9:从古腾堡提取Top 100的电子书191
- 活动10:通过读取API构建自己的电影数据库192
- 7.6小结193
- 第8章关系数据库管理系统和结构化查询语言195
- 8.1引言195
- 8.2RDBMS和SQL概述196
- 8.2.1RDBMS是如何组织的196
- 8.2.2SQL196
- 8.3使用RDBMS(MySQL/PostgreSQL/SQLite)199
- 8.3.1使用SQLite处理单个表199
- 练习108:连接到SQLite中的数据库199
- 练习109:SQLite中的DDL和DML命令200
- 练习110:对数据库中的值进行排序202
- 练习111:更改表的结构并更新新添加的字段202
- 练习112: 对表中的值进行分组203
- 8.3.2数据库中的关系映射204
- 练习113:删除行208
- 练习114:RDBMS和DataFrame209
- 活动11:从数据库正确检索数据210
- 8.4小结212
- 第9章数据整理在现实生活中的应用213
- 9.1引言213
- 9.2将所学知识应用于现实生活中的数据整理任务213
- 活动12:数据整理任务—修复联合国数据214
- 活动13:数据整理任务—清理GDP数据215
- 活动14:数据整理任务—合并联合国数据和GDP数据216
- 活动15:数据整理任务—将新数据连接到数据库217
- 9.3数据整理拓展延伸217
- 9.3.1成为数据科学家所需的额外技能217
- 9.3.2大数据和云技术的基础知识218
- 9.3.3数据整理的地位219
- 9.3.4掌握机器学习的技巧和窍门220
- 9.4小结221
- 附录活动实施步骤222