《Python 数据科学实践指南》读书笔记
全书总评
- 书本印刷质量:4 星。印刷清楚,排版合适,错误很少。
- 著作编写质量:3 星。Python 入门和与数据处理相关的各种模块的入门,以及数据处理的入门。作者是原著,写的确实是自己的东西,不是东抄西抄。只是实践部分的内容实在太浅薄了些。
- 代码质量:4星。Python入门这本书的IT功底不够,中间可能会碰到一些坑,最好有点Python基础以后,用这本书查遗补缺。下载地址
- 阅读笔记:记录需要记住的重点,方便快速回忆。
C01.Python 介绍
Python 版本
- Python 2.x:2001 年发布,有许多资料和库基于这个版本编写;
- Python 3.x:2009 年发布,与旧版本不兼容;
Python 解释器
- Python是开源的,因此它的解释器有许多种实现,主流的是官方的解释器;
Python 之禅
- import this
C02.Python 基础知识
基础知识
- 基础数据类型:在 Python 中,所有的元素都是“对象”。
- None:表示什么都没有的类型;
- int:表示整数的类型;
- float:表示浮点数的类型;
- bool:表示布尔数值的类型;
- str:表示字符串的类型;
- 变量与赋值:Python 的书写规范(PEP8)
- 序列解包
- 操作符与表达式:
- 算术操作符:
- 位操作符:
- 比较操作符:
- 逻辑操作符:and,or,not
- 文本编辑器:
- 文件编码:UTF-8
流程控制:
- 条件判断(if…elif…else…):
- 循环:
- while:
- for…in…:
- 缩进,空白与注释
- 缩进:分割代码块;
- 空白:没有任何意义,只为美观;
- 注释:
- 单行注释:“#”
- 多行注释:”"”…”””
函数及异常
函数:
- 函数定义:def func_name()
- 参数定义:
- 实参:
- 形参:
- 位置参数(参数绑定):根据定义和调用函数时参数的位置进行参数的赋值;
- 关键字参数:非关键字参数不能定义在关键字参数后面。
- 可变数量的参数:def func(*args, **kwargs)
- *args:位置形参,表示任意数量的位置参数都会合并成一个元组,绑定到 args 上;
- **kwargs:关键字形参,表示任意数量的关键字参数都会合并成一个元组,绑定以 kwargs 上;
- 递归:
- 闭包(closure):又称词法闭包(Lexical Closure)或函数闭包(Function Closure),是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创建它的环境也不例外。
异常
- 异常:(try…except…finally…)
字符串
- 运算符:
- “+”:字符串拼接;
- “*”:字符串复制多份,然后拼接;
- 切片 [start,stop,step]:
- len():字符串长度;
获取键盘输入:
- input(str):
字符串处理
- 字符集
- 字符(Character):是各种文字和符号的总称;
- 字符集(Character Set):是多个字符的集合,字符集的各类很多,每个字符集包含的字符个数也不同。
- 字符编码(Character Encoding):也称字集码,是把字符集中的字符编码按指定集合中的某一个对象,以便在计算机中存储和通过通信网络传递文本。
- ASCII 字符集和编码
- Unicode 字符集和 UTF-8 编码
字符串操作
- 基本操作:
- strip():移除字符串两侧的所有空白符;
- capitalize():使字符串的首字母大写;
- title():使字符串中每个单词的首字母大写;
- lower():使字符串的所有字母小写;
- upper():使字符串的所有字母大写;
- isalnum():字符串中包含字母或者数字时为 True;
- isdigit():字符串中只包含数字时为 True;
- 分割:
- split(delimiter):将字符串按指定分隔符分割;
- rsplit(delimiter):将字符串从右边开始按指定分隔符分割;
- 格式化:
- %:print(‘%s’ %name)
- format():print(‘{one} and {two}’.format(one=’1’,two=’2’))
正则表达式
- 转义符:P55
- re 模块:
- re.compile():匹配模式;
- match():匹配字符串;
- re.compile():匹配模式;
C05. 容器(Container)与集合(Collections)
元组(Tuple)
- 元组:与字符串一样,是有序的序列,不可以改变内容
- 基本操作:连接、切片都与字符串保持一致;
- 序列解包:也称多重赋值;
- 支持迭代器协议,支持 for 循环
列表(List)
- 列表:也是序列类型的对象,但是可以改变列表中的内容;
- 基本操作:连接、切片都与字符串保持一致;
- 更改操作:
- pop():删除列表中的数据,并将删除的数据返回;
- insert():插入数据;
- append():追加数据;
- extend():拼接列表;
- 引用传递:所有的赋值都只是引用的传递,并没有创建新的数据;
- list[:]:浅拷贝,只拷贝第一层引用的数据;
- deepcopy():深拷贝,拷贝所有引用的数据;
- 列表解析式:构造列表的方式,将一个函数作用到整个列表中每个元素的方式;[x for x in range(1,3)]
字典(Dictionary)
- 字典在其他语言中被称为散列表,由 key:value 对通过{}组成的无序结构。
- 常用的函数:
- get(key):通过 key 取得对应的 value;还可以通过链式调用取值;
- dict(list):构建新的字典;
- dict.keys():获取字典的 keys 迭代;
- dict.values():获取字典的 values 迭代;
- dict.items():获取字典的 key:value 对的迭代;
- dict.pop(key):取出指定关键字的值;
- dict.update(key):更新字典中对应的 key 中的 value;
集合(Collections)
- namedtuple():具名元组。
- Counter():累加器,可以用来做经典的 word count;
- defaultdict():为字典设定一个默认值;
- OrderedDict():使字典有序;
C06.Python 标准库
数学模块:math
- 常见常量:默认精度为 15 位,最多可以取得 48 位
- math.pi
- math.e
- 无穷大与无效数字:
- math.inf:表示“无穷大”,是 infinite 的缩写。math.inf*math.inf==math.inf
- math.nan:表示“无效数字”,是 Not a number 的缩写。math.inf/math.inf==math.nan
- int 的范围:在 3.5 中 int 长度理论上是无限的
- float 的范围:1e-309~1e+309
- 浮点数转换为整数:
- math.trunc(f):截掉浮点型小数点后面的数字;
- math.floor(f):取最接近浮点型数字的整数;
- math.ceil(f):取比当前浮点型数字大的整数;
- 绝对值和符号:
- math.fabs(f):浮点数的绝对值;
- math.copysign(x,y):符号函数,将 y 的符号传递给 x;
- 常用计算:
- math.fsum(values):解决 sum(values) 不能精确计算的问题;
- math.factorial(x):阶乘计算函数。
- 指数和对数:
- math.pow(x,y):x 的 y 次幂;
- math.log(x):x 以 e 为底的对数;
- math.log10(x):x 以 10 为底的对数;
时间模块:time,datetime,calendar
- time 模块:基础的时间处理模块;
- time.time():表示为数字时间戳,即从格林威治时间:1970-1-1,0:0:0(北京时间:1970-1-1,8:0:0)以来所经历过的秒数;
- time.ctime(x):没有 x 则返回当前时间的字符串版本,有 x 则返回从时间戳开始经过了 x 秒后的时间的字符串。
- struct_time:具名元组,可以分别获得年 (tm_year)、月 (tm_mon)、当月第几日 (tm_mday)、时 (tm_hour)、分 (tm_min)、秒 (tm_sec),星期几 (tm_way,星期一是 0),当年第几天 (tm_yday),是否夏令时 (tm_isdst,没有为 0);
- time.gmtime():格林威治下的 struct_time;
- time.localtime():当前电脑所在时区的 struct_time;
- time.mktime(struct_time):还原成数字时间戳的方式;
- time.strptime(string,format):将字符串格式的时间按照格式转换成 struct_time 格式;
- time.strftime(format,struct_time):将 struct_time 格式的时间元组转换成字符串格式;
- datetime 模块:针对年月日和时分秒分别进行处理;
- calendar 模块:处理万年历;
随机数模块:random
- 随机数生成器:
- random.random():生成均匀分布的浮点随机数,在半开半闭区间 [0.0, 1.0);
- random.seed():设置随机数种子;
- random.randint(a,b):返回整型随机数,在闭区间 [a,b];
- random.randrange():返回整型随机数,在半开半闭区间 [a,b);
取样:
- random.shuffle(list):按随机性质将列表重新排列顺序;
- random.choice(list):按随机性质从列表中抽取数据;
- random.sample(list,k):按随机性质从列表中抽取指定长度的数据;
文件处理:glob 和 fileinput
- open(filename,mode):基于 mode 模式打开 filename 文件;还支持上下文管理器 with 模式;
- glob 模块:目录处理;
- fileinput 模块:批量文件读入;是一个帮助类;
压缩:bz2 和 gzip
- 不建议使用的压缩格式:
- rar:专门服务于 Windows 下,Python 需要第三方库才能打开;
- tar:只用于打包文件,不对文件进行压缩;
- zip:既可以压缩文件,还可以打包文件,因为自带打包功能,不适合用于对文件单独压缩;
- 建议使用的压缩格式
- bz2 模块:对单个文件可写可读,非常方便;
- gzip 模块:对单个文件可写可读,非常方便;
漂亮打印:pprint 模块
跟踪异常日志:traceback 模块
网络数据传输:JSON
- json.loads():将 JSON 转换成字典;
- json.dumps():将字典转换成 JSON;
C07. 用 Python 读写外部数据
CSV,csv 模块
- csv.reader():读取文件;
- csv.writer():写入文件;
- csv.register_dialect():delimiter= 注册分割符;
- csv.DictReader():按照字典结构读取数据;*
Excel,pandas 模块(参考 C10)
- pandas.read_excel():读取文件;
- pandas.to_excel():写入文件;
- pandas.set_option():设置属性值;
- pandas.DataFrame():表格结构;
MySQL,MySQLdb 模块,torndb 模块
- db=torndb.Connection(host,database,user,password):建立数据库链接;
- db.insert(SQL),db.insertmany(SQL):向数据库中插入单行数据,插入多行数据;
- db.query(SQL):从数据库读取数据;
PostgreSQL,psycopg2 模块
MongoDB,pymongo 模块
ElasticSearch,elasticsearch 模块
C08. 用 Python 解决统计问题
- pandas 模块许多函数发生了改变;在 Python 3.7 下 read_excel() 运行有问题;统计都没办法测试了。
描述性统计
- 均值:
- 中位数:
- 方差:
- 标准差:
数据可视化
- 基本函数:
- plot()
- show()
- figure()
- title()
- xlabel()
- ylabel()
- legend()
- 图形:
- 折线图:
- 散点图:
- 柱状图:bar()
- 饼图:pie()
C09. 爬虫入门
request 模块
- HTTP 协议:
- 获取 HTML 内容:
Xpath 模块
- 解析 HTML 内容:
- 这个模块已经没有匹配 Python3.7 的版本了,放弃这个学习。
C10. 数据科学的第三方库
Numpy 模块
- ndarray:
- 创建:
- arange()
- linspace():度量等宽
- random.random():随机数
- 属性:
- ndim:数组的维度;
- shape:数组的形状;
- dtype.name:数组中数据的类型;
- itemsize:数组类型占用的内存空间大小;
- size:数组中元素个数;
- 创建特定数组:
- zeros():全零矩阵;
- ones():全 1 矩阵;
- empty():随机的小值组成的矩阵;
- 创建:
- 基本运算:数组运算是基于元素计算的
- 矩阵乘法:dot()
- 迭代:与列表类似,直接迭代按行取数,flat() 可以把数组摊平为一维数组
- 变形:resize() 原地修改数组;reshape() 输出一个变形后的数组,原数组不变;
- 堆叠:hstack() 行数相同,水平堆叠;vstack() 列数相同,垂直堆叠;
- 高级运算
- transpose():转置;
- linalg.inv():取逆;
- eye():单位阵;
- trace():取迹;
- linalg.solve():解线性方程;
- linalg.eig():解特征方程;
从这里开始,先弃了,这本书适合了解了以后,再来根据作者的实践角度查遗补缺。
Pandas 模块
Scikit-Learn 模块
C11. 图数据分析
图论基础
NetworkX 模块
利用 NetworkX 进行图分析
C12. 大数据工具
Hadoop
Spark
《Python 数据科学实践指南》读书笔记的更多相关文章
- csapp读书笔记-并发编程
这是基础,理解不能有偏差 如果线程/进程的逻辑控制流在时间上重叠,那么就是并发的.我们可以将并发看成是一种os内核用来运行多个应用程序的实例,但是并发不仅在内核,在应用程序中的角色也很重要. 在应用级 ...
- CSAPP 读书笔记 - 2.31练习题
根据等式(2-14) 假如w = 4 数值范围在-8 ~ 7之间 2^w = 16 x = 5, y = 4的情况下面 x + y = 9 >=2 ^(w-1) 属于第一种情况 sum = x ...
- CSAPP读书笔记--第八章 异常控制流
第八章 异常控制流 2017-11-14 概述 控制转移序列叫做控制流.目前为止,我们学过两种改变控制流的方式: 1)跳转和分支: 2)调用和返回. 但是上面的方法只能控制程序本身,发生以下系统状态的 ...
- CSAPP 并发编程读书笔记
CSAPP 并发编程笔记 并发和并行 并发:Concurrency,只要时间上重叠就算并发,可以是单处理器交替处理 并行:Parallel,属于并发的一种特殊情况(真子集),多核/多 CPU 同时处理 ...
- 读书笔记汇总 - SQL必知必会(第4版)
本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...
- 读书笔记--SQL必知必会18--视图
读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...
- 《C#本质论》读书笔记(18)多线程处理
.NET Framework 4.0 看(本质论第3版) .NET Framework 4.5 看(本质论第4版) .NET 4.0为多线程引入了两组新API:TPL(Task Parallel Li ...
- C#温故知新:《C#图解教程》读书笔记系列
一.此书到底何方神圣? 本书是广受赞誉C#图解教程的最新版本.作者在本书中创造了一种全新的可视化叙述方式,以图文并茂的形式.朴实简洁的文字,并辅之以大量表格和代码示例,全面.直观地阐述了C#语言的各种 ...
- C#刨根究底:《你必须知道的.NET》读书笔记系列
一.此书到底何方神圣? <你必须知道的.NET>来自于微软MVP—王涛(网名:AnyTao,博客园大牛之一,其博客地址为:http://anytao.cnblogs.com/)的最新技术心 ...
- Web高级征程:《大型网站技术架构》读书笔记系列
一.此书到底何方神圣? <大型网站技术架构:核心原理与案例分析>通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计 ...
随机推荐
- 解决mysql中只能通过localhost访问不能通过ip访问的问题
解决mysql中只能通过localhost访问不能通过ip访问的问题 原因是没开权限 SELECT * FROM USER WHERE USER='root'; grant all privilege ...
- Elasticsearch安装配置
文档地址: https://www.elastic.co/guide/en/elasticsearch/reference/6.5/setup.html 官方页面提供自0.9版本以来的说明文档,由于我 ...
- pytest框架之命令行参数2
前言 上篇博客说到命令行执行测试用例的部分参数如何使用?今天将继续更新其他一些命令选项的使用,和pytest收集测试用例的规则! pytest执行用例命令行参数 --collect-only:罗列出所 ...
- windows 安装zookeeper
1 .下载 java sdk 和zookeeper 安装包 因为zookeeper是依赖java sdk,运行zookeeper先要,安装javaSDK . 2.安装zookeeper,zookee ...
- Linux 桌面玩家指南:04. Linux 桌面系统字体配置要略
特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...
- ansible基础-安装与配置
一 安装 1.1 ansible架构 ansible是一个非常简单的自动化部署项目,由python编写并且开源.用于提供自动化云配置.配置文件管理.应用部署.服务编排和很多其他的IT自动化需求. an ...
- mysql的学习笔记(四)
---恢复内容开始--- 1.插入操作 INSERT (1)INSERT table_name(col_name,...) VALUES(...),(....) CREATE TABLE user( ...
- Java设计模式系列-抽象工厂模式
原创文章,转载请标注出处:https://www.cnblogs.com/V1haoge/p/10755412.html 一.概述 抽象工厂模式是对工厂方法模式的再升级,但是二者面对的场景稍显差别. ...
- Asp.Net Core 轻松学-实现跨平台的自定义Json数据包
前言 在前后端分离的业务开发中,我们总是需要返回各种各样的数据包格式,一个良好的 json 格式数据包是我们一贯奉行的原则,下面就利用 Json.Net 来做一个简单具有跨平台的序列化数据包实 ...
- 图像检索(2):均值聚类-构建BoF
在图像检索时,通常首先提取图像的局部特征,这些局部特征通常有很高的维度(例如,sift是128维),有很多的冗余信息,直接利用局部特征进行检索,效率和准确度上都不是很好.这就需要重新对提取到的局部特征 ...