发布时间:2023-10-12 10:30
本书系统阐述了Python进行数据控制、处理、整理、分析等多方面的具体细节和基本要点。我再学习这本书的过程中进行一个汇总和总结,通过笔记来强化牢记知识点。
数据的类别
本书中出现的数据类型均为结构化数据,即通用格式例如:
这并不是结构化数据的全部展现,当然我们经常试用Excel的用户肯定对这方面很熟悉。
在我学习的过程中,我也发现Python是一门很方便上手的语言,不仅是他简洁的语言格式,也有他对科学计算语言方面完善的轮子生态。使他能够在数据中心处理上独占一片。
Python能够如此成功的成为科学计算工具的部分原因,也包括他简洁完善的集成能力,它可以很轻松的集成C、C++以及Fortran的代码。大部分的计算环境都依赖与Fortran和C的库来进行实现线性代数等数学上的算法公式。当然会有人说Python的执行效率低下,这点我不否认,但是Python更容易上手的语法,以及当下运算资源不再那么紧缺的情况下,更多的开发人员希望花费更多的时间在代码逻辑的思考与完善上,而让其他的时间交给计算机来处理。
NumPy
NumPy(Numerical Python的简称)是Python科学计算的基础包。本书大部分内容都基于NumPy以及构建于其上的库。它提供了以下功能(不限于此):
除了为Python提供快速的数组处理能力,NumPy在数据分析方面还有另外一个主要作用,即作为在算法和库之间传递数据的容器。对于数值型数据,NumPy数组在存储和处理数据时要比内置的Python数据结构高效得多。此外,由低级语言(比如C和Fortran)编写的库可以直接操作NumPy数组中的数据,无需进行任何数据复制工作。因此,许多Python的数值计算工具要么使用NumPy数组作为主要的数据结构,要么可以与NumPy进行无缝交互操作。
Pandas
pandas提供了快速便捷处理结构化数据的大量数据结构和函数。自从2010年出现以来,它助使Python成为强大而高效的数据分析环境。本书用得最多的pandas对象是DataFrame,它是一个面向列(column-oriented)的二维表结构,另一个是Series,一个一维的标签化数组对象。
pandas兼具NumPy高性能的数组计算功能以及电子表格和关系型数据库(如SQL)灵活的数据处理功能。它提供了复杂精细的索引功能,能更加便捷地完成重塑、切片和切块、聚合以及选取数据子集等操作。因为数据操作、准备、清洗是数据分析最重要的技能,pandas是本书的重点。
作为背景,我是在2008年初开始开发pandas的,那时我任职于AQR Capital Management,一家量化投资管理公司,我有许多工作需求都不能用任何单一的工具解决:
我想只用一种工具就实现所有功能,并使用通用软件开发语言。Python是一个不错的候选语言,但是此时没有集成的数据结构和工具来实现。我一开始就是想把pandas设计为一款适用于金融和商业分析的工具,pandas专注于深度时间序列功能和工具,适用于时间索引化的数据。
对于使用R语言进行统计计算的用户,肯定不会对DataFrame这个名字感到陌生,因为它源自于R的data.frame对象。但与Python不同,data frames是构建于R和它的标准库。因此,pandas的许多功能不属于R或它的扩展包。
pandas这个名字源于panel data(面板数据,这是多维结构化数据集在计量经济学中的术语)以及Python data analysis(Python数据分析)。
matplotlib
matplotlib是最流行的用于绘制图表和其它二维数据可视化的Python库。它最初由John D.Hunter(JDH)创建,目前由一个庞大的开发团队维护。它非常适合创建出版物上用的图表。虽然还有其它的Python可视化库,matplotlib却是使用最广泛的,并且它和其它生态工具配合也非常完美。我认为,可以使用它作为默认的可视化工具。
IPython和Jupyter
IPython项目起初是Fernando Pérez在2001年的一个用以加强和Python交互的子项目。在随后的16年中,它成为了Python数据栈最重要的工具之一。虽然IPython本身没有提供计算和数据分析的工具,它却可以大大提高交互式计算和软件开发的生产率。IPython鼓励“执行-探索”的工作流,区别于其它编程软件的“编辑-编译-运行”的工作流。它还可以方便地访问系统的shell和文件系统。因为大部分的数据分析代码包括探索、试错和重复,IPython可以使工作更快。
2014年,Fernando和IPython团队宣布了Jupyter项目,一个更宽泛的多语言交互计算工具的计划。IPython web notebook变成了Jupyter notebook,现在支持40种编程语言。IPython现在可以作为Jupyter使用Python的内核(一种编程语言模式)。
IPython变成了Jupyter庞大开源项目(一个交互和探索式计算的高效环境)中的一个组件。它最老也是最简单的模式,现在是一个用于编写、测试、调试Python代码的强化shell。你还可以使用通过Jupyter Notebook,一个支持多种语言的交互式网络代码“笔记本”,来使用IPython。IPython shell 和Jupyter notebooks特别适合进行数据探索和可视化。
Jupyter notebooks还可以编写Markdown和HTML内容,它提供了一种创建代码和文本的富文本方法。其它编程语言也在Jupyter中植入了内核,好让在Jupyter中可以使用Python以外的语言。
对我个人而言,我的大部分Python工作都要用到IPython,包括运行、调试和测试代码。
SciPy
SciPy是一组专门解决科学计算中各种标准问题域的包的集合,主要包括下面这些包:
NumPy和SciPy结合使用,便形成了一个相当完备和成熟的计算平台,可以处理多种传统的科学计算问题。
scikit-learn
2010年诞生以来,scikit-learn成为了Python的通用机器学习工具包。仅仅七年,就汇聚了全世界超过1500名贡献者。它的子模块包括:
与pandas、statsmodels和IPython一起,scikit-learn对于Python成为高效数据科学编程语言起到了关键作用。虽然本书不会详细讲解scikit-learn,我会简要介绍它的一些模型,以及用其它工具如何使用这些模型。
statsmodels
statsmodels是一个统计分析包,起源于斯坦福大学统计学教授Jonathan Taylor,他设计了多种流行于R语言的回归分析模型。Skipper Seabold和Josef Perktold在2010年正式创建了statsmodels项目,随后汇聚了大量的使用者和贡献者。受到R的公式系统的启发,Nathaniel Smith发展出了Patsy项目,它提供了statsmodels的公式或模型的规范框架。
与scikit-learn比较,statsmodels包含经典统计学和经济计量学的算法。包括如下子模块:
statsmodels更关注与统计推断,提供不确定估计和参数p-值。相反的,scikit-learn注重预测。
由于人们用Python所做的事情不同,所以没有一个普适的Python及其插件包的安装方案。由于许多读者的Python科学计算环境都不能完全满足本书的需要,所以接下来我将详细介绍各个操作系统上的安装方法。我推荐免费的Anaconda安装包。写作本书时,Anaconda提供Python 2.7和3.6两个版本,以后可能发生变化。本书使用的是Python 3.6,因此推荐选择Python 3.6或更高版本。
windows
要在Windows上运行,先下载Anaconda安装包。推荐跟随Anaconda下载页面的Windows安装指导,安装指导在写作本书和读者看到此文的的这段时间内可能发生变化。
现在,来确认设置是否正确。打开命令行窗口(cmd.exe
),输入python
以打开Python解释器。可以看到类似下面的Anaconda版本的输出:
C:\Users\zhouxiaoyu>python
Python 3.7.0 (default, Jun 28 2018, 08:04:48) [MSC v.1912 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
要退出shell,按Ctrl-D(Linux或macOS上),Ctrl-Z(Windows上),或输入命令exit()
,再按Enter。
**Apple(OS X, MACOS)
下载OS X Anaconda安装包,它的名字类似Anaconda3-4.1.0-MacOSX-x86_64.pkg。双击.pkg文件,运行安装包。安装包运行时,会自动将Anaconda执行路径添加到.bash_profile
文件,它位于/Users/$USER/.bash_profile
。
为了确认成功,在系统shell打开IPython:
$ ipython
要退出shell,按Ctrl-D,或输入命令exit()
,再按Enter。
GNU/Linux
Linux版本很多,这里给出Debian、Ubantu、CentOS和Fedora的安装方法。安装包是一个脚本文件,必须在shell中运行。取决于系统是32位还是64位,要么选择x86 (32位)或x86_64 (64位)安装包。随后你会得到一个文件,名字类似于Anaconda3-4.1.0-Linux-x86_64.sh
。用bash进行安装:
$ bash Anaconda3-4.1.0-Linux-x86_64.sh
笔记:某些Linux版本在包管理器中有满足需求的Python包,只需用类似apt的工具安装就行。这里讲的用Anaconda安装,适用于不同的Linux安装包,也很容易将包升级到最新版本。
接受许可之后,会向你询问在哪里放置Anaconda的文件。我推荐将文件安装到默认的home目录,例如/home/$USER/anaconda
。
Anaconda安装包可能会询问你是否将bin/
目录添加到$PATH
变量。如果在安装之后有任何问题,你可以修改文件.bashrc
(或.zshrc
,如果使用的是zsh shell)为类似以下的内容:
export PATH=/home/$USER/anaconda/bin:$PATH
做完之后,你可以开启一个新窗口,或再次用~/.bashrc
执行.bashrc
。
安装或升级Python
在你阅读本书的时候,你可能想安装另外的不在Anaconda中的Python包。通常,可以用以下命令安装:
conda install package_name
如果这个命令不行,也可以用pip包管理工具:
pip install package_name
你可以用conda update
命令升级包:
conda update package_name
pip可以用--upgrade
升级:
pip install --upgrade package_name
本书中,你有许多机会尝试这些命令。
注意:当你使用conda和pip二者安装包时,千万不要用pip升级conda的包,这样会导致环境发生问题。当使用Anaconda或Miniconda时,最好首先使用conda进行升级。
集成开发环境(IDEs) 和文本编辑器
当被问到我的标准开发环境,我几乎总是回答“IPython加文本编辑器”。我通常在编程时,反复在IPython或Jupyter notebooks中测试和调试每条代码。也可以交互式操作数据,和可视化验证数据操作中某一特殊集合。在shell中使用pandas和NumPy也很容易。
但是,当创建软件时,一些用户可能更想使用特点更为丰富的IDE,而不仅仅是原始的Emacs或Vim的文本编辑器。以下是一些IDE:
因为Python的流行,大多数文本编辑器,比如Atom和Sublime Text 3,对Python的支持也非常好。
如果读者从未使用过Python,那么可能需要从第二章和第三章开始学起,简单介绍Python的基本特点,和编辑器Jupyter的使用技巧,这些都是为了后面所用的内容进行铺垫,如果已经掌握了Python的基本技巧,就可以直接从第四章开始学起。
由于你可能不太熟悉书中使用的一些有关编程和数据科学方面的常用术语,所以我在这里先给出其简单定义:
数据规整(Munge/Munging/Wrangling) 指的是将非结构化和(或)散乱数据处理为结构化或整洁形式的整个过程。这几个词已经悄悄成为当今数据黑客们的行话了。Munge这个词跟Lunge押韵。
伪码(Pseudocode) 算法或过程的“代码式”描述,而这些代码本身并不是实际有效的源代码。
语法糖(Syntactic sugar) 这是一种编程语法,它并不会带来新的特性,但却能使代码更易读、更易写。
如何用python写一个简单的postgres json包装器
java分层打印二叉树_一个完整的分层打印二叉树--Java实现
XGBoost、LightGBM与CatBoost算法对比与调参
使用 Docker 和 PyCharm 快速搭建 Rdkit 开发环境
[Video Transformer] VTN: Video Transformer Network
基于CNN的图像分类综述(包含小样本图像/零样本图像、细粒度图像分类)
Vue报错:Error in v-on handler: “TypeError: Cannot read properties of undefined (reading ‘skuId‘)“