Python数据分析基础教程:NumPy学习指南(
第 1 章 NumPy 快速入门 ............................... 1
1.1 Python ........................................................ 1
1.2 动手实践:在不同的操作系统上
安装 Python ................................................ 1
1.3 Windows .................................................... 2
1.4 动手实践:在 Windows 上安装 NumPy、
Matplotlib、SciPy 和 IPython .................... 2
1.5 Linux .......................................................... 4
1.6 动手实践:在 Linux 上安装 NumPy、
Matplotlib、SciPy 和 IPython .................... 5
1.7 Mac OS X .................................................. 5
1.8 动手实践:在 Mac OS X 上安装 NumPy、
Matplotlib 和 SciPy .................................... 5
1.9 动手实践:使用 MacPorts 或 Fink 安装
NumPy、SciPy、Matplotlib 和 IPython .... 7
1.10 编译源代码 .............................................. 8
1.11 数组对象 .................................................. 8
1.12 动手实践:向量加法 ............................... 8
1.13 IPython:一个交互式 shell 工具 ........... 11
1.14 在线资源和帮助 .................................... 14
1.15 本章小结 ................................................ 15
第 2 章 NumPy 基础 ..................................... 16
2.1 NumPy 数组对象 ..................................... 16
2.2 动手实践:创建多维数组 ....................... 17
2.2.1 选取数组元素 .............................. 18
2.2.2 NumPy 数据类型 .......................... 19
2.2.3 数据类型对象 .............................. 20
2.2.4 字符编码 ...................................... 20
2.2.5 自定义数据类型 ........................... 21
2.2.6 dtype 类的属性 .......................... 22
2.3 动手实践:创建自定义数据类型 ........... 22
2.4 一维数组的索引和切片 ........................... 23
2.5 动手实践:多维数组的切片和索引 ........ 23
2.6 动手实践:改变数组的维度 ................... 26
2.7 数组的组合 .............................................. 27
2.8 动手实践:组合数组 .............................. 27
2.9 数组的分割 .............................................. 30
2.10 动手实践:分割数组 ............................. 30
2.11 数组的属性 ............................................ 32
2.12 动手实践:数组的转换 ......................... 34
2.13 本章小结 ................................................ 35
第 3 章 常用函数 ............................................ 36
3.1 文件读写 .................................................. 36
3.2 动手实践:读写文件 .............................. 36
3.3 CSV 文件 ................................................. 37
3.4 动手实践:读入 CSV 文件 ..................... 37
3.5 成交量加权平均价格(VWAP) ............ 38
3.6 动手实践:计算成交量加权平均价
格 ............................................................. 38
3.6.1 算术平均值函数 .......................... 38
3.6.2 时间加权平均价格 ....................... 39
3.7 取值范围 .................................................. 39
3.8 动手实践:找到最大值和最小值 ........... 40
3.9 统计分析 .................................................. 41
3.10 动手实践:简单统计分析 ..................... 41
3.11 股票收益率 ............................................ 43
3.12 动手实践:分析股票收益率 ................. 43
3.13 日期分析 ................................................ 45
3.14 动手实践:分析日期数据 ..................... 45
3.15 周汇总 ................................................... 48
图灵社区会员 heruihong 专享 尊重版权
2 目 录
3.16 动手实践:汇总数据 ............................ 48
3.17 真实波动幅度均值(ATR) ................. 52
3.18 动手实践:计算真实波动幅度均值 ...... 52
3.19 简单移动平均线 .................................... 54
3.20 动手实践:计算简单移动平均线 ......... 54
3.21 指数移动平均线 .................................... 56
3.22 动手实践:计算指数移动平均线 ......... 56
3.23 布林带 ................................................... 58
3.24 动手实践:绘制布林带 ......................... 58
3.25 线性模型 ................................................ 61
3.26 动手实践:用线性模型预测价格 ......... 61
3.27 趋势线 ................................................... 63
3.28 动手实践:绘制趋势线 ......................... 63
3.29 ndarray 对象的方法 ............................ 66
3.30 动手实践:数组的修剪和压缩 ............. 67
3.31 阶乘 ....................................................... 67
3.32 动手实践:计算阶乘 ............................ 67
3.33 本章小结 ................................................ 68
第 4 章 便捷函数 ............................................ 70
4.1 相关性 ..................................................... 70
4.2 动手实践:股票相关性分析 ................... 71
4.3 多项式 ..................................................... 74
4.4 动手实践:多项式拟合 ........................... 74
4.5 净额成交量 .............................................. 77
4.6 动手实践:计算 OBV ............................. 78
4.7 交易过程模拟 .......................................... 79
4.8 动手实践:避免使用循环 ....................... 80
4.9 数据平滑 ................................................. 82
4.10 动手实践:使用 hanning 函数平滑
数据 ........................................................ 82
4.11 本章小结 ................................................ 85
第 5 章 矩阵和通用函数 ............................... 86
5.1 矩阵 ......................................................... 86
5.2 动手实践:创建矩阵 .............................. 86
5.3 从已有矩阵创建新矩阵 ........................... 88
5.4 动手实践:从已有矩阵创建新矩阵 ....... 88
5.5 通用函数 ................................................. 89
5.6 动手实践:创建通用函数 ....................... 89
5.7 通用函数的方法 ...................................... 90
5.8 动手实践:在 add 上调用通用函数的
方法 ......................................................... 91
5.9 算术运算 ................................................. 93
5.10 动手实践:数组的除法运算 ................. 93
5.11 模运算 ................................................... 95
5.12 动手实践:模运算 ................................ 95
5.13 斐波那契数列 ........................................ 96
5.14 动手实践:计算斐波那契数列 ............. 96
5.15 利萨茹曲线 ............................................ 97
5.16 动手实践:绘制利萨茹曲线 ................. 97
5.17 方波 ....................................................... 99
5.18 动手实践:绘制方波 ............................ 99
5.19 锯齿波和三角波 .................................. 100
5.20 动手实践:绘制锯齿波和三角波 ....... 101
5.21 位操作函数和比较函数 ...................... 102
5.22 动手实践:玩转二进制位 ................... 102
5.23 本章小结 ............................................. 104
第 6 章 深入学习 NumPy 模块 ................. 105
6.1 线性代数 ............................................... 105
6.2 动手实践:计算逆矩阵 ........................ 105
6.3 求解线性方程组 .................................... 107
6.4 动手实践:求解线性方程组 ................. 107
6.5 特征值和特征向量 ................................ 108
6.6 动手实践:求解特征值和特征向量 ..... 108
6.7 奇异值分解 ........................................... 110
6.8 动手实践:分解矩阵 ............................ 110
6.9 广义逆矩阵 ........................................... 112
6.10 动手实践:计算广义逆矩阵 ............... 112
6.11 行列式 ................................................. 113
6.12 动手实践:计算矩阵的行列式 ........... 113
6.13 快速傅里叶变换 .................................. 114
6.14 动手实践:计算傅里叶变换 ............... 114
6.15 移频 ..................................................... 115
6.16 动手实践:移频 .................................. 116
6.17 随机数 ................................................. 117
6.18 动手实践:硬币赌博游戏 ................... 117
6.19 超几何分布 .......................................... 119
6.20 动手实践:模拟游戏秀节目 ............... 119
图灵社区会员 heruihong 专享 尊重版权
目 录 3
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
18
17
6.21 连续分布 .............................................. 121
6.22 动手实践:绘制正态分布 ................... 121
6.23 对数正态分布 ...................................... 122
6.24 动手实践:绘制对数正态分布 ........... 122
6.25 本章小结 .............................................. 123
第 7 章 专用函数 .......................................... 124
7.1 排序 ....................................................... 124
7.2 动手实践:按字典序排序 ..................... 124
7.3 复数 ....................................................... 126
7.4 动手实践:对复数进行排序 ................. 126
7.5 搜索 ....................................................... 127
7.6 动手实践:使用 searchsorted
函数 ........................................................ 127
7.7 数组元素抽取 ........................................ 128
7.8 动手实践:从数组中抽取元素 ............. 128
7.9 金融函数 ................................................ 129
7.10 动手实践:计算终值 ........................... 130
7.11 现值 ..................................................... 131
7.12 动手实践:计算现值 ........................... 131
7.13 净现值 .................................................. 131
7.14 动手实践:计算净现值 ....................... 132
7.15 内部收益率 .......................................... 132
7.16 动手实践:计算内部收益率 ............... 132
7.17 分期付款 .............................................. 133
7.18 动手实践:计算分期付款 ................... 133
7.19 付款期数 .............................................. 133
7.20 动手实践:计算付款期数 ................... 134
7.21 利率 ..................................................... 134
7.22 动手实践:计算利率 ........................... 134
7.23 窗函数 .................................................. 134
7.24 动手实践:绘制巴特利特窗 ............... 135
7.25 布莱克曼窗 .......................................... 135
7.26 动手实践:使用布莱克曼窗平滑股价
数据 ...................................................... 136
7.27 汉明窗 .................................................. 137
7.28 动手实践:绘制汉明窗 ....................... 137
7.29 凯泽窗 .................................................. 138
7.30 动手实践:绘制凯泽窗 ....................... 138
7.31 专用数学函数 ...................................... 139
7.32 动手实践:绘制修正的贝塞尔
函数 ...................................................... 139
7.33 sinc 函数 ............................................ 140
7.34 动手实践:绘制 sinc 函数 ................ 140
7.35 本章小结 .............................................. 142
第 8 章 质量控制 .......................................... 143
8.1 断言函数 ................................................ 143
8.2 动手实践:使用 assert_almost_
equal 断言近似相等 ............................ 144
8.3 近似相等 ................................................ 145
8.4 动手实践:使用 assert_approx_
equal 断言近似相等 ............................ 145
8.5 数组近似相等 ........................................ 146
8.6 动手实践:断言数组近似相等 ............. 146
8.7 数组相等 ................................................ 147
8.8 动手实践:比较数组 ............................ 147
8.9 数组排序 ................................................ 148
8.10 动手实践:核对数组排序 ................... 148
8.11 对象比较 .............................................. 149
8.12 动手实践:比较对象 ........................... 149
8.13 字符串比较 .......................................... 149
8.14 动手实践:比较字符串 ....................... 150
8.15 浮点数比较 .......................................... 150
8.16 动手实践:使用 assert_array_
almost_equal_nulp 比较浮点数 ..... 151
8.17 多 ULP 的浮点数比较 ......................... 151
8.18 动手实践:设置 maxulp 并比较
浮点数 .................................................. 151
8.19 单元测试 .............................................. 152
8.20 动手实践:编写单元测试 ................... 152
8.21 nose 和测试装饰器 ............................ 154
8.22 动手实践:使用测试装饰器 ............... 155
8.23 文档字符串 .......................................... 157
8.24 动手实践:执行文档字符串测试 ....... 157
8.25 本章小结 .............................................. 158
图灵社区会员 heruihong 专享 尊重版权
4 目 录
第 9 章 使用 Matplotlib 绘图 ..................... 159
9.1 简单绘图 ............................................... 159
9.2 动手实践:绘制多项式函数 ................. 159
9.3 格式字符串 ............................................ 161
9.4 动手实践:绘制多项式函数及其导
函数 ....................................................... 161
9.5 子图 ....................................................... 163
9.6 动手实践:绘制多项式函数及其导
函数 ....................................................... 163
9.7 财经 ....................................................... 165
9.8 动手实践:绘制全年股票价格 ............. 165
9.9 直方图 ................................................... 167
9.10 动手实践:绘制股价分布直方图 ....... 167
9.11 对数坐标图 .......................................... 169
9.12 动手实践:绘制股票成交量 ............... 169
9.13 散点图 ................................................. 171
9.14 动手实践:绘制股票收益率和成交量
变化的散点图 ...................................... 171
9.15 着色 ..................................................... 173
9.16 动手实践:根据条件进行着色 ........... 173
9.17 图例和注释 .......................................... 175
9.18 动手实践:使用图例和注释 ............... 175
9.19 三维绘图 .............................................. 177
9.20 动手实践:在三维空间中绘图 ........... 178
9.21 等高线图 .............................................. 179
9.22 动手实践:绘制色彩填充的等高
线图 ..................................................... 179
9.23 动画 ..................................................... 180
9.24 动手实践:制作动画 .......................... 180
9.25 本章小结 .............................................. 182
第 10 章 NumPy 的扩展:SciPy ............. 183
10.1 MATLAB 和 Octave ............................ 183
10.2 动手实践:保存和加载 .mat 文件 ...... 183
10.3 统计 ..................................................... 184
10.4 动手实践:分析随机数 ....................... 185
10.5 样本比对和 SciKits ............................. 187
10.6 动手实践:比较股票对数收益率 ....... 187
10.7 信号处理 ............................................. 190
10.8 动手实践:检测 QQQ 股价的线性
趋势 ..................................................... 190
10.9 傅里叶分析 .......................................... 192
10.10 动手实践:对去除趋势后的信号进
行滤波处理 ........................................ 192
10.11 数学优化 ........................................... 194
10.12 动手实践:拟合正弦波 .................... 195
10.13 数值积分 ........................................... 197
10.14 动手实践:计算高斯积分 ................. 198
10.15 插值 ................................................... 198
10.16 动手实践:一维插值 ........................ 198
10.17 图像处理 ........................................... 200
10.18 动手实践:处理 Lena 图像 ............... 200
10.19 音频处理 ........................................... 202
10.20 动手实践:重复音频片段 ................. 202
10.21 本章小结 ........................................... 204
第 11 章 玩转 Pygame ............................... 205
11.1 Pygame ................................................ 205
11.2 动手实践:安装 Pygame .................... 205
11.3 Hello World ......................................... 206
11.4 动手实践:制作简单游戏 ................... 206
11.5 动画 ..................................................... 208
11.6 动手实践:使用 NumPy 和 Pygame
制作动画对象 ...................................... 208
11.7 Matplotlib ............................................ 211
11.8 动手实践:在 Pygame 中使用
Matplotlib ............................................ 211
11.9 屏幕像素 ............................................. 214
11.10 动手实践:访问屏幕像素 ................. 214
11.11 人工智能 ........................................... 216
11.12 动手实践:数据点聚类 .................... 216
11.13 OpenGL 和 Pygame ........................... 218
11.14 动手实践:绘制谢尔宾斯基地毯 ..... 218
11.15 模拟游戏 ........................................... 221
11.16 动手实践:模拟生命 ........................ 221
11.17 本章小结 ........................................... 224
突击测验答案 .................................................. 225
Python网络数据采集
第 1 章 初见网络爬虫 ....................................................................................................................... 2
1.1 网络连接 .....................................................................................................................................2
1.2 BeautifulSoup 简介 .....................................................................................................................4
1.2.1 安装 BeautifulSoup ........................................................................................................5
1.2.2 运行 BeautifulSoup ........................................................................................................7
1.2.3 可靠的网络连接 ............................................................................................................8
第 2 章 复杂 HTML 解析 ............................................................................................................... 11
2.1 不是一直都要用锤子 ...............................................................................................................11
2.2 再端一碗 BeautifulSoup ...........................................................................................................12
2.2.1 BeautifulSoup 的 find() 和 findAll() ......................................................................13
2.2.2 其他 BeautifulSoup 对象 .............................................................................................15
2.2.3 导航树 ..........................................................................................................................16
2.3 正则表达式 ...............................................................................................................................19
2.4 正则表达式和 BeautifulSoup ...................................................................................................23
2.5 获取属性 ...................................................................................................................................24
2.6 Lambda 表达式 .........................................................................................................................24
2.7 超越 BeautifulSoup ...................................................................................................................25
vi | 目录
第 3 章 开始采集 .............................................................................................................................. 26
3.1 遍历单个域名 ...........................................................................................................................26
3.2 采集整个网站 ...........................................................................................................................30
3.3 通过互联网采集 .......................................................................................................................34
3.4 用 Scrapy 采集 ..........................................................................................................................38
第 4 章 使用 API .............................................................................................................................. 42
4.1 API 概述 ...................................................................................................................................43
4.2 API 通用规则 ...........................................................................................................................43
4.2.1 方法 ..............................................................................................................................44
4.2.2 验证 ..............................................................................................................................44
4.3 服务器响应 ...............................................................................................................................45
4.4 Echo Nest ..................................................................................................................................46
4.5 Twitter API ................................................................................................................................48
4.5.1 开始 ..............................................................................................................................48
4.5.2 几个示例 ......................................................................................................................50
4.6 Google API ................................................................................................................................52
4.6.1 开始 ..............................................................................................................................52
4.6.2 几个示例 ......................................................................................................................53
4.7 解析 JSON 数据 .......................................................................................................................55
4.8 回到主题 ...................................................................................................................................56
4.9 再说一点 API ...........................................................................................................................60
第 5 章 存储数据 .............................................................................................................................. 61
5.1 媒体文件 ...................................................................................................................................61
5.2 把数据存储到 CSV ..................................................................................................................64
5.3 MySQL ......................................................................................................................................65
5.3.1 安装 MySQL ................................................................................................................66
5.3.2 基本命令 ......................................................................................................................68
5.3.3 与 Python 整合 .............................................................................................................71
5.3.4 数据库技术与最佳实践 ..............................................................................................74
5.3.5 MySQL 里的“六度空间游戏” ..................................................................................75
5.4 Email .........................................................................................................................................77
第 6 章 读取文档 .............................................................................................................................. 80
6.1 文档编码 ...................................................................................................................................80
6.2 纯文本 .......................................................................................................................................81
6.3 CSV ...........................................................................................................................................85
6.4 PDF............................................................................................................................................87
6.5 微软 Word 和 .docx ..................................................................................................................88
目录 |
vii
第二部分 高级数据采集
第 7 章 数据清洗 .............................................................................................................................. 94
7.1 编写代码清洗数据 ...................................................................................................................94
7.2 数据存储后再清洗 ...................................................................................................................98
第 8 章 自然语言处理 ................................................................................................................... 103
8.1 概括数据 .................................................................................................................................104
8.2 马尔可夫模型 .........................................................................................................................106
8.3 自然语言工具包 .....................................................................................................................112
8.3.1 安装与设置 ................................................................................................................112
8.3.2 用 NLTK 做统计分析 ................................................................................................113
8.3.3 用 NLTK 做词性分析 ................................................................................................115
8.4 其他资源 .................................................................................................................................119
第 9 章 穿越网页表单与登录窗口进行采集 ........................................................................... 120
9.1 Python Requests 库 .................................................................................................................120
9.2 提交一个基本表单 .................................................................................................................121
9.3 单选按钮、复选框和其他输入 .............................................................................................123
9.4 提交文件和图像 .....................................................................................................................124
9.5 处理登录和 cookie .................................................................................................................125
9.6 其他表单问题 .........................................................................................................................127
第 10 章 采集 JavaScript ............................................................................................................ 128
10.1 JavaScript 简介 .....................................................................................................................128
10.2 Ajax 和动态 HTML ..............................................................................................................131
10.3 处理重定向 ...........................................................................................................................137
第 11 章 图像识别与文字处理 ................................................................................................... 139
11.1 OCR 库概述 ..........................................................................................................................140
11.1.1 Pillow .......................................................................................................................140
11.1.2 Tesseract ..................................................................................................................140
11.1.3 NumPy .....................................................................................................................141
11.2 处理格式规范的文字 ...........................................................................................................142
11.3 读取验证码与训练 Tesseract ...............................................................................................146
11.4 获取验证码提交答案 ...........................................................................................................151
第 12 章 避开采集陷阱 ................................................................................................................ 154
12.1 道德规范 ...............................................................................................................................154
12.2 让网络机器人看起来像人类用户 .......................................................................................155
viii | 目录
12.2.1 修改请求头 .............................................................................................................155
12.2.2 处理 cookie .............................................................................................................157
12.2.3 时间就是一切 .........................................................................................................159
12.3 常见表单安全措施 ...............................................................................................................159
12.3.1 隐含输入字段值 .....................................................................................................159
12.3.2 避免蜜罐 .................................................................................................................160
12.4 问题检查表 ...........................................................................................................................162
第 13 章 用爬虫测试网站 ............................................................................................................ 164
13.1 测试简介 ...............................................................................................................................164
13.2 Python 单元测试...................................................................................................................165
13.3 Selenium 单元测试 ...............................................................................................................168
13.4 Python 单元测试与 Selenium 单元测试的选择 .................................................................172
第 14 章 远程采集 ......................................................................................................................... 174
14.1 为什么要用远程服务器 .......................................................................................................174
14.1.1 避免 IP 地址被封杀 ...............................................................................................174
14.1.2 移植性与扩展性 .....................................................................................................175
14.2 Tor 代理服务器 ....................................................................................................................176
14.3 远程主机 ...............................................................................................................................177
14.3.1 从网站主机运行 .....................................................................................................178
14.3.2 从云主机运行 .........................................................................................................178
14.4 其他资源 ...............................................................................................................................179
14.5 勇往直前 ...............................................................................................................................180
附录 A Python 简介 ...................................................................................................................... 181
GitHub 漫游指南
我与 GitHub 的故事 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
GitHub 与收获 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
GitHub 与成长 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
为什么你应该深⼊ GitHub . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
⽅便⼯作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
获得⼀份⼯作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
扩⼤交际 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Git 基本知识与 GitHub 使⽤ 8
Git . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Git 初⼊ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
GitHub . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
版本管理与软件部署 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
GitHub 与 Git . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
在 GitHub 创建项⽬ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
GitHub 流⾏项⽬分析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Pull Request . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
我的第⼀个 PR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
CLA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
构建 GitHub 项⽬ 15
如何⽤好 GitHub . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
敏捷软件开发 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
测试 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
CI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
代码质量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1
⽬录 ⽬录
模块分离与测试 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
代码模块化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
⾃动化测试 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Jshint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Mocha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
测试⽰例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
代码质量与重构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Code Climate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
代码的坏味道 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
创建项⽬⽂档 29
README . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
在线⽂档 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
可⽤⽰例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
测试 33
TDD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
⼀次测试驱动开发 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
说说 TDD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
TDD 思考 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
功能测试 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
轻量级⽹站测试 TWill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Twill 登陆测试 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Twill 测试脚本 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Fake Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
重构 39
为什么重构? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
重构 uMarkdown . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
2
⽬录 ⽬录
代码说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Intellij Idea 重构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Rename . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Extract Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Inline Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Pull Members Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
重构之以查询取代临时变量 . . . . . . . . . . . . . . . . . . . . . . . . . . 46
如何在 GitHub“寻找灵感 (fork)” 50
Lettuce 构建过程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
需求 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
计划 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
实现第⼀个需求 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
实现第⼆个需求 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
GitHub ⽤户分析 55
⽣成图表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
数据解析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Matplotlib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
每周分析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
python github 每周情况分析 . . . . . . . . . . . . . . . . . . . . . . . . . 59
Python 数据分析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Python Matplotlib 图表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
存储到数据库中 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
SQLite3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
数据导⼊ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Redis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
邻近算法与相似⽤户 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
3
⽬录 ⽬录
GitHub 连击 71
100 天 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
40 天的提升 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
100 天的挑战 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
140 天的希冀 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
200 天的 Showcase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
⼀些项⽬简述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
google map solr polygon 搜索 . . . . . . . . . . . . . . . . . . . . . . . . . 77
技能树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
365 天 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
编程的基础能⼒ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
技术与框架设计 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
领域与练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
其他 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
500 天 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
500 天与 10000 ⼩时 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
编程的情绪周期 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
有意图的练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
预见性练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
MySQL性能管理及架构
第1章 实例和故事
决定电商11大促成败的各个关键因素。
第2章 什么影响了MySQL性能
详细介绍影响性能各个因素,包括硬件、操作系统等等。
第3章 MySQL基准测试
了解基准测试,MySQL基准测试工具介绍及实例演示。
第4章 MySQL数据库结构优化
详细介绍数据库结构设计、范式和反范式设计、物理设计等等。
第5章 MySQL高可用架构设计
详细介绍二进制日志及其对复制的影响、GTID的复制、MMM、MHA等等。
第6章 数据库索引优化
介绍BTree索引和Hash索引,详细介绍索引的优化策略等等。
第7章 SQL查询优化
详细介绍慢查询日志及示例演示,MySQL查询优化器介绍及特定SQL的查询优化等。
第8章 数据库的分库分表
详细介绍数据库分库分表的实现原理及演示案例等。
第9章 数据库监控
介绍数据库可用性监控、性能监控、MySQL主从复制监控等