
朝乐门老师的《Python编程:从数据分析到数据科学(原稿)》作为全国高校大数据教育联盟主办的“Python编程及数据分析骨干教师高级研修班”的指定教材,得到与会代表的一致好评。该教材较好地反映了本学科的基本理论、基本知识、基本技能,并注重知识体系的系统性、科学性和先进性,对于大数据类专业中开设Python编程课程具有重要的示范意义和指导作用。—— 全国高校大数据教育联盟
前 言 “写好一本书”是一件功德无量的事情。因为,写书可以用自己的时间来节约他人的时间。在这浮躁而现实的时代,不去写论文或争课题,而是低头写教材,明知不会计入工作量或业绩,但我还是乐此不疲。按自己的常规速度计算,写本教材大概也就3 个月的时间,但这次实际投入了整整18个月的精力,目的只有一个——用自己的18个月,为他人节约15个月的时间。 “写好一本书”需要有好的顶层设计。我在近几年的教学一线中意识到,国内亟需一本面向数据科学和大数据技术专业人才培养的Python 好教材。目前,相关图书中存在的问题有:第一、“将Python 当作Java/C 来教(或学)”,换一个“新语言”来讨论“老问题”,根本品不出Python 特有的味道;第二、“先讲知识点,后摆代码”式教材编写风格,以“文字”为主,“代码”为辅,导致主次颠倒;第三、“数据科学类专业与计算机科学类专业中选用的Python 教材没什么区别”,不知道谁是谁;第四、“把读者(或自己)当作编程白痴来写(或读)”。目前,多数读者已有C/Java 等语言的基础,Python 属于“第二外语”,不需要低级重复,更不应该用不同语言反复学习同一个知识点,始终徘徊在知识殿堂的门口。突破上述局限并且探索出新的教学模式和教材编写方式是我编写这本书的初心。是否达到了预期目标,需要各位仔细阅读全书之后明鉴。 “写好一本书”需要有十本书的真材实料。在本书撰写过程中,我参阅了大量国内外专著、教材、论文、开源项目和原始数据,虽然书中对参考文献多有标注,但难免挂一漏万,敬希相关作者鉴谅。书中还吸收了自2015 年以来我和我的团队撰写或翻译的部分短文,同时借鉴了我的课堂上学生曾提问或关注的问题。 “写好一本书”离不开他人的鼎力相助。电子工业出版社领导及编辑,尤其是章海涛编辑为本书的出版做出了大量工作;感谢教育部—IBM产学合作协同育人项目的资助和支持;感谢中国人民大学刘岩、杨灿军、李昊璟、王雨晴、曲涵晴、赵群等学生参与了本书的校对工作;家人给予了长期的理解与支持,本人从事基础研究,淡泊名利,她们却从不抱怨。 “写好一本书”是一个长期反复打磨的过程。本书第一版中必有不足之处,望各位读者不吝赐教。我们将通过华信教育资源网(http://www.hxedu.com.cn)和微信公众号“数据科学DataScience”实时发布勘误或更新内容。这是继《数据科学》《数据科学理论与实践》之后,我的第三本书。曾有人跟我说,“朝老师,您硕果累累,还那么拼命,未来一定是数据科学领域最大的牛”。我回答,“No,那不是我的目的。我的奋斗目的只有一个:争取做到数据科学领域最努力的人,也就是最舍得投入时间和精力的人。其他的都无所谓。”希望“我的努力”成为“您的努力”! 朝乐门 于中国人民大学 2018 年12 月
目 录 第一篇 准备工作 1 为什么要学习Python?学习Python 的什么.............................................................................. 3 2 学习Python 之前需要准备的工作有哪些.................................................................................. 6 3 如何看懂和运行本书代码............................................................................................................ 8 3.1 输入部分..................................................................................................................................8 3.2 输出部分............................................................................................................................... 10 3.3 错误与异常信息.................................................................................................................. 11 3.4 外部数据文件.......................................................................................................................12 3.5 注意事项............................................................................................................................... 14 第二篇 Python基础 4 数据类型......................................................................................................................................19 4.1 查看数据类型的方法.......................................................................................................... 20 4.2 判断数据类型的方法...........................................................................................................21 4.3 数据类型的转换方法...........................................................................................................22 4.4 特殊数据类型.......................................................................................................................23 4.5 序列类型...............................................................................................................................26 5 变量..............................................................................................................................................28 5.1 变量的定义方法...................................................................................................................29 5.2 Python 是动态类型语言.....................................................................................................29 5.3 Python 是强类型语言........................................................................................................ 30 5.4 Python 中的变量名是引用.................................................................................................31 5.5 Python 中区分大小写.........................................................................................................32 5.6 变量命名规范.......................................................................................................................32 5.7 iPython 的特殊变量............................................................................................................33 5.8 查看Python 关键字的方法............................................................................................... 34 5.9 查看已定义的所有变量.......................................................................................................35 5.10 删除变量.............................................................................................................................37 6 语句书写规范..............................................................................................................................39 6.1 一行一句............................................................................................................................... 40 6.2 一行多句............................................................................................................................... 40 6.3 一句多行............................................................................................................................... 41 6.4 复合语句.............................................................................................................................. 42 6.5 空语句................................................................................................................................... 43 7 赋值语句.......................................................................................................................................44 7.1 赋值语句在Python 中的重要地位................................................................................... 45 7.2 链式赋值语句...................................................................................................................... 45 7.3 复合赋值语句...................................................................................................................... 46 7.4 序列的拆包式赋值.............................................................................................................. 46 7.5 两个变量值的调换.............................................................................................................. 47 8 注释语句......................................................................................................................................48 8.1 注释方法............................................................................................................................... 48 8.2 注意事项............................................................................................................................... 49 9 运算符..........................................................................................................................................50 9.1 特殊运算符...........................................................................................................................53 9.2 内置函数................................................................................................................................57 9.3 math 模块.............................................................................................................................58 9.4 优先级与结合方向...............................................................................................................59 10 if语句...........................................................................................................................................61 10.1 基本语法.............................................................................................................................61 10.2 elif 语句..............................................................................................................................62 10.3 if 与三元运算......................................................................................................................63 10.4 注意事项............................................................................................................................ 64 11 for语句.........................................................................................................................................67 11.1 基本语法.............................................................................................................................67 11.2 range()函数........................................................................................................................67 11.3 注意事项.............................................................................................................................68 12 while语句....................................................................................................................................71 12.1 基本语法.............................................................................................................................71 12.2 注意事项.............................................................................................................................72 13 pass语句.....................................................................................................................................74 13.1 含义.................................................................................................................................... 74 13.2 作用.....................................................................................................................................75 14 列表.............................................................................................................................................76 14.1 定义方法.............................................................................................................................78 14.2 切片操作.............................................................................................................................79 14.3 反向遍历.............................................................................................................................81 14.4 类型转换.............................................................................................................................83 14.5 extend 与append 的区别...............................................................................................83 14.6 列表推导式........................................................................................................................ 84 14.7 插入与删除.........................................................................................................................87 14.8 常用操作函数.....................................................................................................................89 15 元组.............................................................................................................................................94 15.1 定义方法.............................................................................................................................95 15.2 主要特征.............................................................................................................................97 15.3 基本用法.............................................................................................................................99 15.4 应用场景.......................................................................................................................... 100 16 字符串...................................................................................................................................... 103 16.1 定义方法.......................................................................................................................... 104 16.2 主要特征.......................................................................................................................... 105 16.3 字符串的操作.................................................................................................................. 106 17 序列...........................................................................................................................................111 17.1 支持索引.......................................................................................................................... 112 17.2 支持切片.......................................................................................................................... 113 17.3 支持迭代.......................................................................................................................... 114 17.4 支持拆包.......................................................................................................................... 114 17.5 支持*运算........................................................................................................................ 115 17.6 通用函数.......................................................................................................................... 117 18 集合.......................................................................................................................................... 120 18.1 定义方法.......................................................................................................................... 121 18.2 主要特征.......................................................................................................................... 122 18.3 基本运算.......................................................................................................................... 123 18.4 应用场景.......................................................................................................................... 125 19 字典...........................................................................................................................................126 19.1 定义方法.......................................................................................................................... 127 19.2 字典的主要特征.............................................................................................................. 128 19.3 字典的应用场景.............................................................................................................. 129 20 迭代器与生成器..................................................................................................................... 130 20.1 可迭代对象与迭代器...................................................................................................... 131 20.2 生成器与迭代器.............................................................................................................. 132 21 函数.......................................................................................................................................... 134 21.1 内置函数...........................................................................................................................135 21.2 模块函数...........................................................................................................................135 21.3 用户自定义函数...............................................................................................................136 22 内置函数..................................................................................................................................137 22.1 内置函数的主要特点...................................................................................................... 138 22.2 数学函数.......................................................................................................................... 138 22.3 类型函数.......................................................................................................................... 139 22.4 其他功能函数.................................................................................................................. 140 23 模块函数................................................................................................................................. 145 23.1 import 模块名................................................................................................................. 146 23.2 import 模块名as 别名................................................................................................... 147 23.3 from 模块名import 函数名.......................................................................................... 147 24 自定义函数............................................................................................................................. 149 24.1 定义方法.......................................................................................................................... 151 24.2 函数中的docString....................................................................................................... 152 24.3 自定义函数的调用方法.................................................................................................. 152 24.4 返回值.............................................................................................................................. 153 24.5 自定义函数的形参与实参.............................................................................................. 154 24.6 变量的可见性.................................................................................................................. 156 24.7 值传递与地址传递.......................................................................................................... 158 24.8 自定义函数时的注意事项.............................................................................................. 160 25 lambda 函数............................................................................................................................162 25.1 lambda 函数的定义方法............................................................................................... 163 25.2 lambda 函数的调用方法................................................................................................ 164 26 模块..........................................................................................................................................166 26.1 导入与用法...................................................................................................................... 167 26.2 查看内置模块清单的方法.............................................................................................. 168 27 包..............................................................................................................................................171 27.1 包的基本术语.................................................................................................................. 172 27.2 安装包.............................................................................................................................. 172 27.3 查看已安装包.................................................................................................................. 173 27.4 更新(或删除)已安装包.............................................................................................. 173 27.5 导入包.............................................................................................................................. 174 27.6 查看包的帮助.................................................................................................................. 175 27.7 常用包.............................................................................................................................. 176 28 帮助文档..................................................................................................................................177 28.1 help 函数......................................................................................................................... 178 28.2 DocString ....................................................................................................................... 178 28.3 查看源代码...................................................................................................................... 179 28.4 doc 属性........................................................................................................................... 180 28.5 dir()函数........................................................................................................................... 181 28.6 其他方法.......................................................................................................................... 183 第三篇 Python进阶 29 异常与错误..............................................................................................................................187 29.1 try/except/finally......................................................................................................... 188 29.2 异常信息的显示模式...................................................................................................... 189 29.3 断言.................................................................................................................................. 190 30 程序调试方法..........................................................................................................................192 30.1 调试程序的基本方法 ...................................................................................................... 193 30.2 设置错误信息的显示方式.............................................................................................. 194 30.3 设置断言的方法.............................................................................................................. 195 31 面向对象编程...........................................................................................................................197 31.1 类的定义方法.................................................................................................................. 198 31.2 类中的特殊方法.............................................................................................................. 199 31.3 类之间的继承关系.......................................................................................................... 201 31.4 私有属性及@property 装饰器..................................................................................... 203 31.5 self 和cls ........................................................................................................................ 204 31.6 new 与init 的区别和联系............................................................................................. 205 32 魔术命令................................................................................................................................. 208 32.1 运行.py 文件:%run...................................................................................................... 209 32.2 统计运行时间:%timeit 与%%timeit....................................................................... 210 32.3 查看历史In 和Out 变量:%history .......................................................................... 211 32.4 更改异常信息的显示模式:%xmode.......................................................................... 212 32.5 调试程序:%debug....................................................................................................... 214 32.6 程序运行的逐行统计:%prun 与%lprun .................................................................. 215 32.7 内存使用情况的统计:%memit .................................................................................. 216 33 搜索路径..................................................................................................................................218 33.1 变量搜索路径.................................................................................................................. 219 33.2 模块搜索路径.................................................................................................................. 221 34 当前工作目录..........................................................................................................................224 34.1 显示当前工作目录的方法.............................................................................................. 225 34.2 更改当前工作目录的方法.............................................................................................. 225 34.3 读、写当前工作目录的方法.......................................................................................... 226 第四篇 数据加工 35 随机数......................................................................................................................................229 35.1 一次生成一个数.............................................................................................................. 230 35.2 一次生成一个随机数组.................................................................................................. 231 36 数组..........................................................................................................................................234 36.1 创建方法.......................................................................................................................... 238 36.2 主要特征.......................................................................................................................... 241 36.3 切片/读取......................................................................................................................... 243 36.4 浅拷贝和深拷贝.............................................................................................................. 249 36.5 形状和重构...................................................................................................................... 250 36.6 属性计算.......................................................................................................................... 254 36.7 ndarray 的计算............................................................................................................... 256 36.8 ndarray 的元素类型....................................................................................................... 258 36.9 插入与删除...................................................................................................................... 259 36.10 缺失值处理.................................................................................................................... 260 36.11 ndarray 的广播规则..................................................................................................... 261 36.12 ndarray 的排序............................................................................................................. 262 37 Series ........................................................................................................................................265 37.1 Series 的主要特点.......................................................................................................... 266 37.2 Series 的定义方法.......................................................................................................... 266 37.3 Series 的操作方法.......................................................................................................... 269 38 DataFrame...............................................................................................................................274 38.1 DataFrame 的创建方法................................................................................................. 277 38.2 查看行或列...................................................................................................................... 278 38.3 引用行或列...................................................................................................................... 279 38.4 index 操作...................................................................................................................... 283 38.5 删除或过滤行/列............................................................................................................ 285 38.6 算术运算.......................................................................................................................... 290 38.7 大小比较运算.................................................................................................................. 296 38.8 统计信息.......................................................................................................................... 297 38.9 排序.................................................................................................................................. 299 38.10 导入/导出...................................................................................................................... 301 38.11 缺失数据处理................................................................................................................ 302 38.12 分组统计........................................................................................................................ 308 39 日期与时间..............................................................................................................................311 39.1 常用包与模块.................................................................................................................. 312 39.2 时间和日期类型的定义.................................................................................................. 312 39.3 转换方法.......................................................................................................................... 314 39.4 显示系统当前时间.......................................................................................................... 316 39.5 计算时差.......................................................................................................................... 317 39.6 时间索引.......................................................................................................................... 317 39.7 period_range()函数....................................................................................................... 320 40 可视化......................................................................................................................................321 40.1 Matplotlib 可视化......................................................................................................... 323 40.2 改变图的属性.................................................................................................................. 326 40.3 改变图的类型.................................................................................................................. 329 40.4 改变图的坐标轴的取值范围.......................................................................................... 330 40.5 去掉边界的空白.............................................................................................................. 332 40.6 在同一个坐标上画两个图.............................................................................................. 333 40.7 多图显示.......................................................................................................................... 334 40.8 图的保存.......................................................................................................................... 335 40.9 散点图的画法.................................................................................................................. 335 40.10 Pandas 可视化.............................................................................................................. 336 40.11 Seaborn 可视化............................................................................................................ 339 40.12 数据可视化实战............................................................................................................ 343 41 自然语言处理...........................................................................................................................346 41.1 自然语言处理的常用包 .................................................................................................. 347 41.2 自然语言处理的包导入及设置...................................................................................... 347 41.3 数据读入.......................................................................................................................... 348 41.4 分词处理.......................................................................................................................... 349 41.5 自定义词汇...................................................................................................................... 350 41.6 停用词处理...................................................................................................................... 354 41.7 词性分布分析.................................................................................................................. 356 41.8 高频词分析...................................................................................................................... 358 41.9 词频统计.......................................................................................................................... 360 41.10 关键词分析.................................................................................................................... 362 41.11 生成词云........................................................................................................................ 363 42 Web爬取.................................................................................................................................365 42.1 Scrapy 的下载与安装.................................................................................................... 367 42.2 Scrapy Shell 的基本原理.............................................................................................. 368 42.3 Scrapy Shell 的应用...................................................................................................... 370 42.4 自定义Spider 类............................................................................................................. 374 42.5 综合应用.......................................................................................................................... 379 第五篇 数据分析 43 统计分析..................................................................................................................................389 43.1 业务理解.......................................................................................................................... 390 43.2 数据读入.......................................................................................................................... 391 43.3 数据理解.......................................................................................................................... 392 43.4 数据准备.......................................................................................................................... 393 43.5 模型类型的选择与超级参数的设置.............................................................................. 394 43.6 训练具体模型及查看其统计量...................................................................................... 396 43.7 拟合优度评价.................................................................................................................. 397 43.8 建模前提假定的讨论...................................................................................................... 398 43.9 模型的优化与重新选择.................................................................................................. 400 43.10 模型的应用.................................................................................................................... 404 44 机器学习................................................................................................................................. 405 44.1 机器学习的业务理解...................................................................................................... 406 44.2 数据读入.......................................................................................................................... 407 44.3 数据理解.......................................................................................................................... 408 44.4 数据准备.......................................................................................................................... 411 44.5 算法选择及其超级参数的设置...................................................................................... 414 44.6 具体模型的训练.............................................................................................................. 415 44.7 用模型进行预测.............................................................................................................. 415 44.8 模型评价.......................................................................................................................... 416 44.9 模型的应用与优化.......................................................................................................... 417 第六篇 大数据处理 45 Spark 编程.............................................................................................................................. 421 45.1 导入pyspark 包............................................................................................................. 423 45.2 SparkSession 及其创建................................................................................................ 423 45.3 Spark 数据抽象类型...................................................................................................... 426 45.4 Spark DataFrame 操作................................................................................................. 429 45.5 SQL 编程.......................................................................................................................... 433 45.6 DataFrame 的可视化..................................................................................................... 436 45.7 Spark 机器学习.............................................................................................................. 438 46 Spark Python 开发环境的搭建过程.................................................................................... 445 46.1 安装Anaconda .............................................................................................................. 446 46.2 安装和配置Java............................................................................................................. 449 46.3 安装和配置Spark .......................................................................................................... 451 46.4 安装和配置Hadoop ...................................................................................................... 454 46.5 测试Spark ...................................................................................................................... 455 47 NoSQL数据库.........................................................................................................................456 47.1 下载Memcached............................................................................................................457 47.2 安装Memcached............................................................................................................457 47.3 安装和导入包pymemcache .........................................................................................459 47.4 准备试验数据.................................................................................................................. 460 47.5 定义Client 并进行数据读写......................................................................................... 460 47.6 Memcached 的更多操作...............................................................................................462 第七篇 继续学习 48 Python 初学者常见错误及纠正方法.....................................................................................467 48.1 NameError: name ‘xxxx‘ is not defined ................................................................. 467 48.2 IndentationError: unexpected indent ..................................................................... 468 48.3 SyntaxError: invalid character in identifier .......................................................... 469 48.4 TypeError: ‘XXXX‘ object does not support item assignment ...................... 470 48.5 TypeError: unsupported operand type(s) for XXXX ......................................... 470 48.6 IndexError: list index out of range ......................................................................... 471 48.7 TypeError: type() takes XXXX arguments ........................................................... 472 48.8 SyntaxError: unexpected EOF while parsing ...................................................... 472 48.9 ModuleNotFoundError: No module named XXXX ............................................ 473 48.10 TypeError: ‘ list‘ object is not callable ................................................................ 474 48.11 SyntaxError: invalid syntax .................................................................................... 475 48.12 AttributeError:XXXX object has no attribute XXXX ..................................... 476 48.13 TypeError: XXXX object is not an iterator......................................................... 477 48.14 FileNotFoundError: File XXXX does not exist................................................. 478 48.15 IndexError: too many indices for array ................................................................ 480 48.16 TypeError: Required argument XXXX not found ............................................ 481 48.17 TypeError: an XXXX is required (got type YYYY) .......................................... 482 48.18 ValueError: Wrong number of items passed XXXX, placement implies YYYY ................... 483 49 Python 数据分析和数据科学面试题.....................................................................................485 50 继续学习本书内容的推荐资源..............................................................................................496 50.1 重要网站.......................................................................................................................... 496 50.2 重要图书.......................................................................................................................... 476 50.3 常用模块与工具包.......................................................................................................... 497 50.4 常用统计模型.................................................................................................................. 497 50.5 核心机器学习算法.......................................................................................................... 498 50.6 继续学习数据科学的建议路线图...................................................................................499 参考文献.......................................................................................................................................... 503
朝乐门,男,1979年生,中国人民大学信息资源管理学院、数据工程与知识工程教育部重点实验室副教授,博士生导师。中国计算机学会信息系统专委员会委员、ACM高级会员、国际知识管理协会正式委员、全国高校大数据教育联盟大数据教材专家指导委员会委员、清华大学博士后校友会IT分会副秘书长;主持完成国家自然科学基金、国家社会科学基金等重要科学研究项目10余项;参与完成核高基、973、863、国家自然科学基金重点项目、国家社会科学基金重大项目等国家重大科研项目10余项;发表SCI/SSCI/EI/CSCI论文30余篇,软件著作权5个、发明专利3项、出版学术专著3部;获得北京市中青年骨干教师称号、国际知识管理与智力资本杰出成就奖、IBM全球卓越教师奖、Emerald/EFMD国际杰出博士论文奖、国家自然科学基金项目优秀项目、中国大数据学术创新奖、中国大数据创新百人榜单、全国大数据教育行业杰出贡献奖等多种奖励30余项。