提交 5b488914 编写于 作者: W wizardforcel

2020-07-24 19:17:09

上级 48e1310b
......@@ -4,20 +4,20 @@ NumPy 是 Python 中功能强大的科学模块; 希望在前九章中,我
在本章中,我们将讨论以下主题:
* 大熊猫
* Pandas
* scikit 学习
* netCDF4
* 科学的
# 熊猫
# Pandas
到目前为止,pandas 是 Python 中最可取的数据预处理模块。 它处理数据的方式与 R 非常相似。它的数据框不仅为您提供视觉上吸引人的表打印输出,而且还允许您以更直观的方式访问数据。 如果您不熟悉 R,请尝试考虑以编程方式使用电子表格软件(例如 Microsoft Excel 或 SQL 表)。 这涵盖了熊猫所做的很多事情。
到目前为止,pandas 是 Python 中最可取的数据预处理模块。 它处理数据的方式与 R 非常相似。它的数据框不仅为您提供视觉上吸引人的表打印输出,而且还允许您以更直观的方式访问数据。 如果您不熟悉 R,请尝试考虑以编程方式使用电子表格软件(例如 Microsoft Excel 或 SQL 表)。 这涵盖了 Pandas 所做的很多事情。
您可以从 [Pandas 官方网站](http://pandas.pydata.org/)下载并安装熊猫。 一种更可取的方法是使用 pip 或安装 Python 科学发行版,例如 Anaconda。
您可以从 [Pandas 官方网站](http://pandas.pydata.org/)下载并安装 Pandas。 一种更可取的方法是使用 pip 或安装 Python 科学发行版,例如 Anaconda。
还记得我们如何使用`numpy.genfromtxt()`读取第 4 章, “Numpy 核心和子模块”中的`csv`数据吗? 实际上,使用熊猫来读取表格并将经过预处理的数据传递给`ndarray`(简单地执行`np.array(data_frame)`会将数据帧转换为多维`ndarray`)对于分析来说是更可取的工作流程。 在本节中,我们将向您展示熊猫的两个基本数据结构:`Series`(用于一维)和`DataFrame`(用于二维或多维)。然后,我们将向您展示如何使用熊猫来读取 表并将数据传递给
还记得我们如何使用`numpy.genfromtxt()`读取第 4 章, “Numpy 核心和子模块”中的`csv`数据吗? 实际上,使用 Pandas 来读取表格并将经过预处理的数据传递给`ndarray`(简单地执行`np.array(data_frame)`会将数据帧转换为多维`ndarray`)对于分析来说是更可取的工作流程。 在本节中,我们将向您展示 Pandas 的两个基本数据结构:`Series`(用于一维)和`DataFrame`(用于二维或多维)。然后,我们将向您展示如何使用 Pandas 来读取 表并将数据传递给
然后,我们将向您展示如何使用熊猫读取表并将数据传递给`ndarray`进行进一步分析。 让我们从`pandas.Series`开始:
然后,我们将向您展示如何使用 Pandas 读取表并将数据传递给`ndarray`进行进一步分析。 让我们从`pandas.Series`开始:
```py
In [1]: import pandas as pd
......@@ -34,7 +34,7 @@ dtype: int64
```
在前面的示例中,您可以看到我们已经将 Python 列表转换为大熊猫`series`,并且在打印`series`时,这些值完美对齐并具有与之关联的索引号(0 到 4 )。 当然,我们可以指定自己的索引(以 *1* 开头或以字母形式)。 看下面的代码示例:
在前面的示例中,您可以看到我们已经将 Python 列表转换为 Pandas`series`,并且在打印`series`时,这些值完美对齐并具有与之关联的索引号(0 到 4 )。 当然,我们可以指定自己的索引(以 *1* 开头或以字母形式)。 看下面的代码示例:
```py
In [5]: indices = ['A', 'B', 'C', 'D', 'E']
......@@ -50,7 +50,7 @@ dtype: int64
```
我们将索引从数字更改为从 *A-E* 的字母。 更方便的是,当我们将 Python 词典转换为熊猫`Series`时,执行此操作所需的键将自动成为索引。 尝试练习转换字典。 接下来,我们将探索`DataFrame`,这是大熊猫中最常用的数据结构:
我们将索引从数字更改为从 *A-E* 的字母。 更方便的是,当我们将 Python 词典转换为 Pandas`Series`时,执行此操作所需的键将自动成为索引。 尝试练习转换字典。 接下来,我们将探索`DataFrame`,这是 Pandas 中最常用的数据结构:
```py
In [8]: data = {'Name': ['Brian', 'George', 'Kate', 'Amy', 'Joe'],
......@@ -101,9 +101,9 @@ max 41.000000
```
在前面的示例中,我们仅获得`Age`列,并按`Age``DataFrame`进行排序。 当我们使用`describe()`时,它将计算所有数字字段的摘要统计信息(包括计数,均值,标准差,最小值,最大值和百分位数)。在本节的最后部分,我们将使用熊猫读取
在前面的示例中,我们仅获得`Age`列,并按`Age``DataFrame`进行排序。 当我们使用`describe()`时,它将计算所有数字字段的摘要统计信息(包括计数,均值,标准差,最小值,最大值和百分位数)。在本节的最后部分,我们将使用 Pandas 读取
在本节的最后部分,我们将使用熊猫读取`csv`文件并将一个字段值传递给`ndarray`以进行进一步的计算。 `example.csv`文件来自**国家统计局****ONS**)。 请访问[这里](http://www.ons.gov.uk/ons/datasets-and-tables/index.html)了解更多详细信息。 我们将在 ONS 网站上使用`Sale counts by dwelling type and local authority, England and Wales`(房屋类型和地方当局(英格兰和威尔士)的销售计数)。 您可以按主题名称搜索它,以访问下载页面或选择您感兴趣的任何数据集。在以下示例中,我们将示例数据集重命名为`sales.csv`
在本节的最后部分,我们将使用 Pandas 读取`csv`文件并将一个字段值传递给`ndarray`以进行进一步的计算。 `example.csv`文件来自**国家统计局****ONS**)。 请访问[这里](http://www.ons.gov.uk/ons/datasets-and-tables/index.html)了解更多详细信息。 我们将在 ONS 网站上使用`Sale counts by dwelling type and local authority, England and Wales`(房屋类型和地方当局(英格兰和威尔士)的销售计数)。 您可以按主题名称搜索它,以访问下载页面或选择您感兴趣的任何数据集。在以下示例中,我们将示例数据集重命名为`sales.csv`
```py
In [15]: sales = pd.read_csv('sales.csv')
......@@ -323,7 +323,7 @@ In [3]: image_data = ascent()
首先,我们从 SciPy 的其他例程中导入三个函数:`imread``imsave``ascent`。 在下面的示例中,我们使用内置图像`ascent`,它是 512 x 512 灰度图像。 当然,您可以使用自己的图像。 只需调用`imread('your_image_name')`,它将作为`ndarray`加载。
我们在此处导入的`matplotlib`模块的`pyplot`结果仅用于显示图像; 我们在第 6 章,“在 NumPy* 中进行了傅里叶分析”这样做了。 这是内置图像`ascent`
我们在此处导入的`matplotlib`模块的`pyplot`结果仅用于显示图像; 我们在第 6 章,“在 NumPy 中进行傅里叶分析”这样做了。 这是内置图像`ascent`
![SciPy](img/00040.jpeg)
......
......@@ -336,7 +336,7 @@ rec.array([(0, 0.07019801437854767, '2014-07-10'),
然后我们使用`numpy.core.records.fromarrays()`函数将三个数组合并为一个记录数组,并分配`names`(字段名称)和`formats`(数据类型)。 这里要注意的一件事是,记录数组不支持`numpy.datetime64`对象,因此我们将其作为长度为 10 的日期/时间字符串存储在数组中。
如果您使用的是 Python 3,则会在记录数组(例如`b'2014-09-25'`)的日期/时间字符串的前面找到前缀`b``b`在这里代表“字节文字”,这意味着它仅包含 ASCII 字符(Python 3 中的所有字符串类型均为 Unicode,这是 Python 2 和 3 之间的一大变化)。 因此,在 Python 3 中,将对象(`datetime64`)转换为字符串将添加前缀以区分普通字符串类型。 但是,这不会影响下一步将记录数组导出到 CSV 文件中的操作:
如果您使用的是 Python 3,则会在记录数组(例如`b'2014-09-25'`)的日期/时间字符串的前面找到前缀`b``b`在这里代表“字节字面值”,这意味着它仅包含 ASCII 字符(Python 3 中的所有字符串类型均为 Unicode,这是 Python 2 和 3 之间的一大变化)。 因此,在 Python 3 中,将对象(`datetime64`)转换为字符串将添加前缀以区分普通字符串类型。 但是,这不会影响下一步将记录数组导出到 CSV 文件中的操作:
```py
In [63]: np.savetxt('./record.csv', rec_array, fmt='%i,%.4f,%s')
......@@ -364,7 +364,7 @@ array([(0, 0.07020000368356705, '2014-07-10'),
我们使用`numpy.genfromtxt()`将文件读入 NumPy 记录数组。 第一个参数仍然是我们要访问的文件位置,`dtype`参数是可选的。 如果未指定,NumPy 将使用各列的内容分别确定`dtype`参数。 由于我们清楚地了解数据,因此建议您在每次读取文件时指定一次。
`delimiter`参数也是可选的,默认情况下,任何连续的空格都用作分隔符。 但是,对于 CSV 文件,我们使用了`,`。 我们在方法中使用的最后一个可选参数是`skip_header`。 尽管我们没有在文件中的记录顶部添加字段名称,但是 NumPy 提供了跳过文件开头多行的功能。
`delimiter`参数也是可选的,默认情况下,任何连续的空格都用作分隔符。 但是,对于 CSV 文件,我们使用了`,`。 我们在方法中使用的最后一个可选参数是`skip_header`。 尽管我们没有在文件中的记录顶部添加字段名称,但是 NumPy 提供了跳过文件开头多行的功能。
除了`skip_header`之外,`numpy.genfromtext()`函数还支持 22 种以上的操作参数以微调数组,例如定义缺失值和填充值。 有关更多详细信息,请参阅[这里](http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.genfromtxt.html)
......
......@@ -13,7 +13,7 @@ NumPy 专为数值计算而设计; 在引擎盖下,它仍然是功能强大
对于线性代数,使用矩阵可能更直接。 NumPy 中的矩阵对象继承了`ndarray`的所有属性和方法,但严格来说是二维的,而`ndarray`可以是多维的。 使用 NumPy 矩阵的众所周知的优点是它们提供矩阵乘法作为`*`表示法; 例如,如果`x``y`是矩阵,则`x * y`是它们的矩阵乘积。 但是,从 Python 3.5 / NumPy 1.10 开始,新的运算符“
但是,从 Python 3.5 / NumPy 1.10 开始,新的运算符`@`支持本机矩阵乘法。 因此这是使用[`ndarray`](https://docs.python.org/3/whatsnew/3.5.html#whatsnew-pep-465)的另一个很好的理由。
但是,从 Python 3.5 / NumPy 1.10 开始,新的运算符`@`支持本机矩阵乘法。 因此这是使用[`ndarray`](https://docs.python.org/3/whatsnew/3.5.html#whatsnew-pep-465)的另一个很好的理由。
但是,矩阵对象仍提供方便的转换,例如逆和共轭转置,而`ndarray`不提供。 让我们从创建 NumPy 矩阵开始:
......
......@@ -10,7 +10,7 @@
在开始之前,首先让我们了解这些工具是什么以及为什么我们偏爱另一个工具。 `Distutils`是 Python 默认提供的框架,`setuptools`建立在标准`Distutils`的基础上,以提供增强的功能和特性。 在现实世界中,您将永远不会使用`Distutils`。 您可能想单独使用`Distutils`的唯一情况是`setuptools`不可用。 (良好的设置脚本应在继续之前检查`setuptools`的可用性。)在大多数情况下,用户最好安装`setuptools`,因为当今大多数软件包都是基于它们构建的。 在接下来的章节中,我们将使用`setuptools`来构建 Cython 代码; 因此,出于我们的目的,我们现在将安装`setuptools`并从现在开始广泛使用它。
接下来,让我们从安装必需的工具开始,以构建我们的第一个虚拟(但有效)安装程序。 安装程序正常运行后,我们将在熊猫脚本模块的真实脚本中深入介绍 NumPy 的更多功能。 我们将研究脚本中进行的检查,以使其更强大,以及在发生故障时如何提供更多信息。
接下来,让我们从安装必需的工具开始,以构建我们的第一个虚拟(但有效)安装程序。 安装程序正常运行后,我们将在 Pandas 脚本模块的真实脚本中深入介绍 NumPy 的更多功能。 我们将研究脚本中进行的检查,以使其更强大,以及在发生故障时如何提供更多信息。
# 准备工具
......
......@@ -2,7 +2,7 @@
Python 与 NumPy 库相结合为用户提供了编写高度复杂的函数和分析的工具。 随着代码的大小和复杂性的增长,代码库中的低效率问题开始蔓延。一旦项目进入完成阶段,开发人员就应开始关注代码的性能并分析瓶颈。 Python 提供了许多工具和库来创建优化且性能更快的代码。
在本章中,我们将研究一种名为 Cython 的工具。 Cython 是 Python 和“ Cython”语言的静态编译器,在从事科学图书馆/数值计算的开发人员中特别流行。 许多用 Python 编写的著名分析库都大量使用 Cython(熊猫,SciPy,scikit-learn 等)。
在本章中,我们将研究一种名为 Cython 的工具。 Cython 是 Python 和“Cython”语言的静态编译器,在从事科学图书馆/数值计算的开发人员中特别流行。 许多用 Python 编写的著名分析库都大量使用 Cython(Pandas,SciPy,scikit-learn 等)。
Cython 编程语言是 Python 的超集,用户仍然喜欢 Python 所提供的所有功能和更高层次的结构。 在本章中,我们将研究 Cython 起作用的许多原因,并且您将学习如何将 Python 代码转换为 Cython。 但是,本章不是 Cython 的完整指南。
......@@ -208,7 +208,7 @@ cmdclass={'build_ext': build_ext}
```
虽然通过 Cython 代码获得的加速效果非常好,并且您可能会倾向于在 Cython 中编写大多数代码,但建议仅将性能至关重要的部分转换为 Cython。 NumPy 在优化对数组的访问和执行更快的计算方面做得非常出色。 该代码可以视为描述该代码的理想候选者。 前面的代码有很多“松散的结”,可以当作练习来解决 Python 中的性能问题,并在采用 Cython 方式之前先最佳地使用 NumPy。 由于 Python 的动态特性,盲目地对 NumPy 代码进行 Cython 化的速度提升可能不如具有真正问题的最优编写代码那样快。
虽然通过 Cython 代码获得的加速效果非常好,并且您可能会倾向于在 Cython 中编写大多数代码,但建议仅将性能至关重要的部分转换为 Cython。 NumPy 在优化对数组的访问和执行更快的计算方面做得非常出色。 该代码可以视为描述该代码的理想候选者。 前面的代码有很多“松散的结”,可以当作练习来解决 Python 中的性能问题,并在采用 Cython 方式之前先最佳地使用 NumPy。 由于 Python 的动态特性,盲目地对 NumPy 代码进行 Cython 化的速度提升可能不如具有真正问题的最优编写代码那样快。
最后,我们介绍在 Cython 中开发模块时应遵循的以下内容:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册