感谢我女儿 Cindy 为本站提供的“涂鸦”缩略图~

第十七章 数据收集及报表

Python Alan 3周前 (03-02) 90次浏览 0个评论

本章中我们将学习科学计算中统计所使用的高级Python库。我们会学习Python的NumPy, Pandas, Matplotlib和Plotly模块。我们将学习到数据可视化的技术以及如何对收集的数据绘图。

本章中主要学习如下课题:

  • NumPy模块
  • Pandas模块
  • 数据可视化

NumPy模块

NumPY是一个可对数组进行有效运算的Python模块。NumPy是一个Python科学计算的基础包。这个包常被用作Python的数据分析。NumPy数组是一个多值网格。

在Terminal中使用如下命令安装NumPy:

我们将使用numpy库来对numpy数组执行运算。下面我们来看如何创建一个numpy数组。为此创建一个脚本simple_array.py并在其中编写如下内容:

运行脚本,我们将得到如下输出:

上例中,我们以np导入了numpy库来使用numpy的功能。然后我们创建了一个简单的列表,将其使用np.array()函数将其转化为数组。最后,我们打印了numpy数组及其类型,来学习常规的数组和numpy数组之间的不同。

上例是一个简单的一维数组。下面我们来看一个多维数组的示例。为此我们需要创建另一个列表,让我们一起来看另一个示例吧。创建一个名为mult_dim_array.py的脚本并在其中编写如下内容:

运行脚本,我们将得到如下输出:

上例中我们导入了numpy模块。然后我们创建了两个列表:my_list1和my_list2。接着我们创建了另一个列表(my_list1和my_list2)的列表,并在该列表(my_lists)上应用了np.array()函数,将其存储在一个名为my_array的对象中。最后我们打印出了这个numpy数组。

下面我来看可作用于数组的更多操作。我们将学习如何在知道数组的大小以及我们所创建的数组的数据类型,这里我们使用created array。为此我们仅需应用shape()函数并来获取数组的大小,以及使用dtype() 函数来了解所创建数组的数据类型。下面就来看一个示例。创建一个名为size_and_dtype.py的脚本并在其中编写如下内容:

运行脚本,我们将得到如下输出:

上例中,我们以my_array.shape对数组应用了shape函数来获取数据的大小。输出结果为(2, 4)。然后我们以my_array.dtype对数组应用了dtype函数,得到的输出为int64。

下面我们来看一些特殊数组的示例。

首先,我们会使用np.zeros() 创建一个所值为0的数组,如下所示:

在创建所有值为0的数据之后,我们将使用numpy的 np.ones()函数来创建所有值为1的数组,如下所示:

np.ones((5,5)) 创建一个 5*5的数组,其中的值均为1。

下面,我们将使用numpy的np.empty()函数创建一个空数组,如下所示:

np.empty()并不会像np.zeros()函数那样将数组中的值设为0。因此,速度可能会更快。此外,它要求用户手动在数组中输入所有值,所以使用时要格外小心。

下面我们来看如何使用np.eye() 函数来创建单位数组(identity array),它将生成主对角线的值全为1的数组,如下所示:

下面我们来看range函数,用于使用numpy中的np.arange()来创建数组,如下所示:

np.arange(10)函数创建一个0-9的数组。我们定义了范围10,,因此数组的索引值以0开始。

使用数组和标量

这一部分中,我们来看使用NumPy对数组进行不同的算术运算。首先要创建一个多维数组,如下:

这里我们导入了numpy模块来使用numpy的功能,接着我们导入了__future__模块来处理浮点数。然后我们创建了一个二维数组,来对其执行不同的操作。

下面我们来看数组上的一些算术运算。首先,我们将学习数组的乘法,如下所示:

以上的乘法运算中,我们对arr数组自身进行了相乘来获取到一个相乘后的数组。我们也可以对两个不同的数组进行相乘。

下面我们来看数组的减法运算,如下所示:

如前例所示,我们仅仅使用了一个 – 运算符来进行两个数组的减法。在数组相减之后,我们获得了结果数组,如以上代码所示。

下面我们来看含有标量数组的算术运算。我们来看一些示例:

上例中,我们使用1除以了我们的数组并得到了输出。记住,我们导入了__future__ 模块,有助于这类运算,来处理数组中的浮点值。

下面我们来看numpy数组的指数运算,如下所示:

上例中,我们对数组进行了立方运算,得到了一个数组中各项值立方的输出。

数组索引

数组的索引是通过将数组作为索引来实现的。对于索引数组,原数组的拷贝会被返回。numpy数组可使用除元组外的其它序列或通过使用其它数组来索引。数组的最后一个元素可使用-1作为索引,倒数第二的索引可使用-1,以此类推。

因此,要在数组上执行索引运算,首先我们创建一个numpy数组,我们将使用range()函数来创建一个数组,如下所示:

上例中,我们创建了一个范围为16的数组arr,即0-15。

下面我们将对数组arr执行一个不同的索引运算。首先,我们来获取数组中指定索引的值:

上例中,我们通过索引值访问了数组,在向数组arr传递了索引值之后,索引返回了值7,这也正是我们所传入的具体索引数。

在获取具体索引的值之后,我们将获取一个范围内的值。我们来看如下示例:

上例中,首先我们访问了数组并获取一个范围内的值(2-10)。结果以array([2, 3, 4, 5, 6, 7, 8, 9])显示了输出。第二个例子中的arr[2:10:2],实际上是说以步长间隔2访问范围在2-10的数组。这类索引的语法为arr[_start_value_:_stop_value_:_steps_]。因此,第二条命令的输出结果为array([2, 4, 6, 8])。

我们还可以获取一个数组中从指定索引直到结尾的值,如下例所示:

如我们在上例中所见,我们访问了数组中从第5个开始直到结果的值。结果得到了输出array([ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])。

下面我们来看看numpy数组的切片。在切片中,实际上我们获取了原数组的某一部分并将其存储在指定的数组名中。一起来看一个示例:

上例中,我们获取了原数组的一个切片。结果我们获取了数组的一个切片,值为0,1,2,…..,7。我们还要将更新付下赋给数组的切片。我们来看一个示例:

上例中,我们设置了数组切片中的所有值为29。但对数组切片赋值的一个重点是赋给切版的值同样会被赋给原数组。

下面我们来看在向数组切片赋值后原数组的效果:

下面我们来看另一个运算:即数组的复制。数组的切片和拷贝的区别在于在进行数组的切片时,所做的修改会应用到原数组上。在获取数组的拷贝时,则给出一个原数组的明确的拷贝。因此,对数组拷贝所应用的改变不会影响到原数组。让我们来看一个复制数组的示例:

上例中,我们仅仅接收了一个原数组的拷贝。使用array_name.copy()来实现拷贝,输出为原数组的一个拷贝。

二维数组的索引

二维数组是一个数组的数组。这一数组中的数据元素的位置通常引用两个索引值而非单个,分别表示数据表格的行和列。下面我们将做该类型数组的索引。

下面我们来看一个二维数组的示例:

上例中,我们创建了一个名为td_array的二维数组。在创建数组后,我们打印出了数组。下面我们还将通过索引获取td_array中的值。一起来看通过索引获取值的示例:

上例中,我们访问了数组中索引为1的值并获取了输出。在这类索引中,访问值时我们获取到了整个数组。除了获取整个数组外,我们还可获取指定值。来看一个示例:

上例中,我们通过传入两个值行和列访问了td_array。正如在输出中所见,我们获得的值为8。

我们还可以另一种方式创建二维数组。首先,设置一个长度更大的二维数组。这里我们设置为10。那么我们创建一个值全部为0的示例数组,然后在其中填入值。示例如下:

上例中,我们创建了一个10*10的二维数组。

下面我人们再对其做一些特别的索引,如下例所示:

上例中,我们获取了指定的索引值,因此得到以上输出。

通用数组函数

能用函数对numpy数组中的每一个元素执行操作。下面我们来看一个在数组上执行多个通用函数的示例。首先,我们获取数组的平方根。创建一个名为sqrt_array.py的脚本并在其中编写如下内容:

运行脚本,我们将得到如下输出:

上例中,我们使用numpy的一个函数range创建了一个简单的数组。然后我们对所生成的数组应用于sqrt()函数,来获取数组的平方根。在获取数组的平方根之后,我们将对数组应另一个能用方法,即指数函数exp()。我来看一个示例。创建一个名为expo_array.py的脚本并编写如下内容:

运行脚本,我们将得到如下输出:

上例中,我们使用numpy的range函数创建了一个简单的数组。然后对所生成的数组应用了exp()函数来获取数组的指数(以 e为底的自然指数)。

Pandas模块

这一部分中,我们将学习pandas模块。pandas模块提供了快速灵活的数组结构,设计用于处理结构化和时间序列数据。pandas模块用于数据分摊。pandas建立在NumPy 和Matplotlib等包的基础上,让我们可以进行大部的分析和可视化。要使用这一模块,首先需要进行导入。

首先通过运行如下命令来安装示例中所需的包:

这里,我们将来看一些使用pandas模块的示例。我们会学习两具数据 结构:序列(Series)和数据帧(DataFrames)。我们还将看看如何使用pandas从csv文件中读取数据。

序列

pandas序列是一个一维数组。其中可包含任意数据类型。它的标签被称为索引。下面我们来看一个不声明索引的序列和一个声明了索引的序列。首先,我们来看一个未声明索引的序列。创建一个名为series_without_index.py的脚本并在其中编写如下内容:

运行脚本,我们将得到如下输出:

上例中,我们学习未声明索引的序列。首先我们导入了两个模块:pandas和numpy。然后我创建了存储序列数据的对象s_data。在这个序列中,我们创建一个列表而没有声明索引,传入了name属性来为列表赋予一个名称,然后我们打印出了数据。在输出中,左列是数据的索引。即便我们没有传入索引,pandas还是会暗自赋予一个索引。这个索引从0开始。在数据列的下面是序列的名称以及值的数据类型。

 

数据帧

数据可视化

Matplotlib

直方图

散点图

柱状图

Plotly

散点图

线状散点图

箱形图

等高线图

总结

课后问题

扩展阅读

更新中…

 

 

喜欢 (2)
[]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址