INTRODUCTION
这是一本写给初学者的数据分析和Python使用教程,比较通俗易懂,但是在关键知识点的解释上不尽如人意,是本入门级的书。
LIST OF KEY POINTS
Python基础部分
- 定义:带键值参数传递,变量的类型为键值对,但又与一般的字典类型的定义不同。举例为:函数定义:func(**[variable]) ;使用:func(aa=11,bb=22,cc=33) 此处的长度可随意。
- 定义:回调函数,传递变量给一个函数的方法。可以理解为一种更加自由的命名方式,方便使用。相关术语:回调函数、登记回调函数、出发回调关联事项、调用回调函数、响应回调事件。
- 关键点:递归的过程中,iterator(及 yield 关键词)的使用能够极大的减小内存使用。原理:yield 关键词把一个函数转变成了generator,函数返回itarable对象。
- 相似点:Haskell 中的 foldl 和 Python 的 reduce 函数及其相似,使用方法也是大同小异。(其他相似的还有 map 和 filter 函数)
- 定义:私有变量和私有方法也就是 java 中添加了 private 修饰词的方法。Python 中使用 双下划线的方式定义。举例:__func。
- 知识点:Python 的注释是纯文本形式,及 ‘’XXX’’ 的形式进行注释文档注释也是这种格式,但使用 ‘’’XXX’’’ (三个单引号)且换行的形式。
- 辅助知识:help([package/function]) 显示指定模块或函数的帮助文档。dir([package])查看指定模块中的所有成员或指定对象类型所支持的操作类型。ord(‘[a]’) 查询ASCII码。
- 注意事项:Python 使用全小写加下划线的驼峰命名方式。只有类名首字母大写。
- 补充知识:单一下划线开头的是特殊变量或函数,不能使用 from [module] import * 导入。推测是因为会和标准库或第三方库冲突。举例:_func。
- 补充:可以发布第三方库到PyPi。
数据处理部分
- 使用贴士:Numpy Series 可以存放多种数据类型,算是 List 对象的升级版,同时 Index 可以自定义,默认索引从0开始。Series 不可以追加元素,但可以追加序列。举例:aas = Series([X, X, X], index=[X, X, X])
- 使用贴士:Pandas DataFrame 是 Numpy Series 的容器,也就是对于一维的 Series 进行组合,得到高纬度的数据框格式。举例:df = DataFrame({“COLUMN_INDEX”:aas}) (aas是一个Numpy Series,“{}”属于字典,可以无限拉长。)综上所述,DataFrame 本质上是一种高级的字典。
- 使用贴士:所有的读取操作,一个 read 解决。
- 意义:数据处理能够提高数据的质量,另一方面能让数据更好的适应特定的数据分析工具。
- 定义:数据清洗,字面义就是对坏数据进行处理。坏数据包括:不完整的、不一致的、有异常的。方法:重复值处理、缺失值处理、垃圾数据清理、无关数据处理、平滑噪声数据。
- 经典语句:一个分析项目80%的工作量都是在清洗数据。
- 定义:数据抽取,从当前数据集中抽取片段。方法很多,属于筛选的操作,可以有的方法如:随机抽样、按顺序抽取、条件抽取。
- 注意:数据抽取是存在副作用的,可能需要重新设置索引。
- 小贴士:DataFrame 同时抽取几条数据时一定要使用列表索引,而不能简单的用逗号分隔。举例:【错误】df[1, 2] 【修正】df[[1, 2]] (解释:取数据表 index 等于1和2的数据,返回一个新的数据集)
- 定义:插入记录,在某一位置上插入一行数据。Pandas 中没有定义相关函数,需要根据实际情况自行构建。
- 定义:修改记录,顾名思义就是修改一些数据,可行的方式包括:整体替换、个别修改、
- 定义:交换行或列,不做解释。
- 定义:数据合并,不做解释。
- 定义:数据计算,就是对数据进行处理,得到更多得数据。
- 定义:数据标准化 (归一化):不同的数据拥有不同的量纲和量纲单位,会影响到数据分析的结果。为消除指标之间的量纲影响,原始数据在经过标准化后,各指标处于同一量级,变得适合进行综合对比评价。数据标准化的方法包括:离差标准化 (min-max normalization)、Z-score 标准化、
- 解释:离差标准化:对原始数据的线性转化,公式为$X^∗=(x−min)/(max−min)$
- 解释:Z-score 标准化:适用于未知最大值和最小值的情况,或存在超出取值范围的离群值的情况,公式为$X^∗=(x−\mu)/\sigma$ 。也就是正态分布。
- 定义:数据降维:和无关数据不同,数据降维归类为数据计算,因为数据降维针对的是相关数据,目的是为了方便计算和展示。
- 扩展:MDS降维:多维尺度 (Multidimensional Scaling) 原则是在降维的同时尽可能的保留样本间的相对距离。具体实现方法本书没有展开讲解,这里也不做介绍了。
- 扩展:PCA 降维:主成分分析 (Principal Component n) 把高维线性相关的变量合成线性无关的低维变量。使用了线代中的高维投影到低维的方法。
- 定义:数据分组,也就是数据分类,对于类似的数据组寻找特征。
数据分析
- 定义:数据分析:把数据的特征和内在结构展现出来的过程。包括:基本统计分析、分组分析、分布分析、交叉分析、结构分析、相关分析、聚类分析 (Cluster analysis)。
- 解释:分布分析:将定量数据进行等距或不等距的分组,研究各组分布规律的一种分析方法。
- 解释:交叉分析:固定某一变量,对其他个变量进行比较的分析方式。
- 解释:结构分析:在分组分析和交叉分析的基础上很多时候是看一个组数据在某一个维度的占比或者重要性。
- 解释:相关分析:分析两个维度之间是否线性相关,最直观的方式是直接画散点图。线性回归 (Linear Regression) 就是进行相关分析的一种方法。
- 解释:聚类分析:在没有给定划分类别的情况下,根据数据的相似程度进行分组的一种方法,分组的原则是组内距离最小化,组间距离最大化。换种说法就同一个子集中的成员拥有相似的一些属性,可以算作是一种非监督式学习。
- 补充:K-means 算法:典型的基于距离的非层次聚类算法,在最小化误差函数的基础上将数据划分为预定的 K 类别。相关词:随机、聚类质心、分配
- 补充:TF-IDF 聚类分析:词频逆文档频率 (Term Frequency-Inverse Document Frequency) 及一个词在一篇文章中的频率很高,但在其他文章中相对较低,则认为此词具有很好的分类区分能力,适合用来分类。TF-IDF 可以反映出语料库中的谋篇文档中某个词对这篇文档的重要性。
- 补充:HC 聚类:层次聚类 (Hierarchical Clustering) 可以理解为重复使用 K-means 算法构建聚类树。
- 注:聚类分析可以结合相关分析,采用线性回归的聚类方式 (可能可以对各维度聚类)。
数据可视化
- 定义:数据可视化:借助图形化的手段,清晰有效的传达与沟通信息。数据可视化的形式多种多样,这里不做更多阐述。
- 小贴士:Jupyter Notebook 支持 Markdown 和 Latex。
- 小贴士:为更好地使用Jupyter Notebook展示图像,我们可以添加以下代码:%matplotlib inline
- 小贴士:为提高图像的分辨率,我们可以添加:%config InlineBackend.figure_format=’retina’
- 注意:OpenCV 类库使用 BGR 颜色通道,而不是常说的 RGB 颜色通道,读取时要反过来。
- 补充:t-SEN 高维数据可视化:一种非线性降维算法,适用于高维数据降到二维或者三维,并进行可视化。感兴趣可以在之后研究一下。
网络爬虫技术
- 小贴士:Python 中有一个可以避免转义字符的写法就是以“r”开头。举例:【一般形式】str = ‘nihaoya\-001’ 【r 前缀形式】str = ‘nihaoya-001’ (可以发现这里的反斜杠少了一个,不需要进行转意操作)
- 小贴士:对于需要大量使用的正则表达式,为了提高速度,我们可以提前对正则表达式进行编译,方便之后使用。代码:re.compile(r’[regex]’) (结合上一个小贴士,我们这里添加了 r 前缀)
- 注:正则表达式每次使用时都需要有两步,编译+匹配,把编译的过程单独拿了出来,肯定会加快了运行速度,时间变量的系数减少了。
- 知识点:中国的编码:gb2312 –> gb18030 –> gbk,支持的字符逐渐变多,从7000多个到现在将近3万多个
- 知识点:文本读取:二进制文件读取是不能直接读,要注明使用二进制方法读取。代码:file = open(r’[PATH]’, ‘rb’); file.read; (这里的 ‘rb’ 就是注明二进制读取的参数,没有的话默认Unicode)
- 注意:Scrapy的依赖库安装顺序不能变化,可能会报错。顺序为:VC++10.0 –> pywin32 –> Twisted –> lxml –> Scrapy
Python 常用包整理
- 网络爬虫:scrapy (这是个框架)、bs4 (beautifulsoup4)
- 数学计算:numpy
- 数据处理:pandas
- 数据可视化:matplotlib
- 构建网络图:networkx
- 交互地图:folium
- 图像处理:PIL、pillow
- 计算机视觉问题:OpenCV
- 文本匹配 (正则表达式):re
- 中文分词:jieba
- 自然语言处理:NLTK (Natural Language Toolkit)
- 词云生成:wordcloud
- 网页打开:urllib
- 编码方式判断:chardet