安装Numpy的方法: 点击win+R+cmd, 输入pip install numpy
---------------------------------------------------------------------------------------------------------------------------
Python列表在表示数据时提供了一些优势:
- 列表可以包含混合类型
- 列表可以缩小并动态增长
使用Python列表来表示和处理数据也有一些关键的缺点:
- 为了支持他们的灵活性,列表往往消耗大量的内存
- 他们努力与中型和大型数据集合
尽管有许多不同的方式对编程语言进行分类,但考虑到性能的一个重要方式是
低级
和
高级
语言
之间的区别
。
Python是一种高级编程语言,允许我们快速编写,原型和测试我们的逻辑。
另一方面,C编程语言是一种低级编程语言,性能非常高,但工作流程慢得多。
NumPy是一个将Python的灵活性和易用性与C速度相结合的库。在此任务中,我们将首先熟悉核心的NumPy数据结构,然后建立使用NumPy来处理数据集
world_alcohol.csv
,其中包含每个国家人均饮用酒精量的数据。
1.创建数组和矩阵
在NumPy的核心数据结构是ndarray对象,其代表N维阵列。一个数组是值的集合,类似的列表。N维是指从对象中选择各个值所需的索引数。
通常将1维阵列称为矢量,而2维阵列通常被称为矩阵。这两个术语都是从数学称为线性代数的一个分支借来的。他们还经常在数据科学文献中使用,因此我们将在本课程中使用这些词。
要使用NumPy,我们首先需要将它导入到我们的环境中。NumPy通常使用别名导入np:
我们可以使用numpy.array()函数直接从列表构造数组。要构建一个向量,我们需要传递一个列表(没有嵌套):
该numpy.array()函数还接受列表列表,我们用于创建一个矩阵:
2.获取数组或矩阵的元素个数
数组有一定数量的元素。
下面的数组有
5
元素:
1986年
|
西太平洋
|
越南
|
红酒
|
0
|
矩阵代替使用行和列,这符合对数据集的想法。下面的矩阵有3行和5列,通常称为3×5矩阵:
1986年
|
西太平洋
|
越南
|
红酒
|
0
|
1986年
|
美洲
|
乌拉圭
|
其他
|
0.5
|
1985年
|
非洲
|
科特迪瓦
|
红酒
|
1.62
|
了解数组包含的元素通常很有用。我们可以使用ndarray.shape属性来确定数组中有多少个元素。
对于向量,shape属性包含一个1元素元组。元组是元素无法更改的列表。
上面的代码将导致元组(4,)。该元组表示数组vector具有一个维度,其长度4与我们对于vector具有4元素的直觉相匹配。
对于矩阵,shape属性包含一个2元素元组。
上述代码将导致元组(2,3)指示matrix有2行和3列。
3.读取数据集到数组
我们可以使用numpy.genfromtxt()函数读取数据集。我们的数据集world_alcohol.csv是一个逗号分隔值数据集。我们可以使用delimiter参数指定分隔符:
上述代码将读入一个名为data.csv文件的文件进入NumPy 数组。使用numpy.ndarray类来表示NumPy数组。我们将ndarray在我们的材料中将对象称为NumPy数组。
以下是我们将使用的数据集的前几行:
年
|
世卫组织区
|
国家
|
饮料类型
|
显示值
|
1986年
|
西太平洋
|
越南
|
红酒
|
0
|
1986年
|
美洲
|
乌拉圭
|
其他
|
0.5
|
1985年
|
非洲
|
科特迪瓦
|
红酒
|
1.62
|
每一行规定了一个国家每一个公民在某一年内喝了多少升酒精。第一排显示越南平均每人喝多少升葡萄酒1986。
以下是每列表示的内容:
- Year - 该行中的数据的年份。
- WHO Region - 该国所在的地区。
- Country - 数据所在的国家。
- Beverage Types - 数据所用的饮料类型。
- Display Value - 平均来说,该国公民在某一年饮用的饮料类型的升数。
4.Numpy数组中的元素数据类型
NumPy 数组中的每个值必须具有相同的数据类型。NumPy数据类型与Python数据类型相似,但差别很小。您可以在这里找到完整的NumPy数据类型列表。这里有一些常见的:
- bool:布尔值。--可以True或False。
- int:整数值。--可能是int16,int32或int64。后缀16,32或64表示位数。
- float:浮点值。--可能是float16,float32或float64。后缀16,32或64表示数字可以具有小数点后的数字。
- string:字符串值。--可以是,string或者unicode,这是电脑可以存储文本的两种不同的方式。
NumPy将在读取数据或将列表转换为数组时自动找出适当的数据类型。您可以使用dtype属性检查NumPy 数组的数据类型。
因为numbers只包含整数,它的数据类型是int64。
5.Numpy数据集简介
NumPy代表数据集的前几行如下:
- 在许多项目world_alcoholARE nan在内的整个第一行。nan,代表“不是数字”,是用于表示缺失值的数据类型。
- 一些数字是写的1.98600000e+03。
数据类型world_alcohol是float。因为NumPy数组中的所有值都必须具有相同的数据类型,所以NumPy尝试在读入时将所有列转换为浮点数。numpy.genfromtxt()函数将尝试猜测正确的数据类型它创建的数组。
在这种情况下,WHO Region,Country,和Beverage Types列实际上是字符串,并不能转换为浮动。当NumPy无法将值转换为数字数据类型(如float或integer)时,它将使用nan代表“不是数字” 的特殊值。na当值不存在时,NumPy会分配一个值,表示“不可用”。 nan而na值是丢失数据的类型。我们将在以后的任务中更多地了解如何处理丢失的数据。
整个第一行world_alcohol.csv是一个标题行,其中包含每列的名称。这实际上不是数据的一部分,完全由字符串组成。由于字符串无法正确转换为浮点数,NumPy使用nan值来表示它们。
如果以前没有看到科学符号,你可能不会识别数字1.98600000e+03。科学符号是一种缩小数字大小或非常精确的数字的方式。我们可以100用科学的符号代表1e+02。这e+02表明我们应该将之前的东西乘以10 ^ 2(10与权力2或10平方)。这导致1 * 100或100。因此,1.98600000e+03实际上是1.986 * 10 ^ 3或1986。 1000000000000000可以写成1e+15。
在这种情况下,1.98600000e+03实际上比实际上更长1986,但NumPy默认以科学记数法显示数值,以计算更大或更精确的数字。
6.自定义读取数据的方式--dtype, skip_header
当使用numpy.genfromtxt()函数读取数据时,我们可以使用参数来自定义我们想要读取数据的方式。在我们处理的时候,我们也可以指定我们要跳过标题行world_alcohol.csv。
- 要指定整个NumPy数组的数据类型,我们使用keyword参数dtype并将其设置为"U75"。这指定我们要以每个值作为75字节unicode数据类型读取。我们将深入多地进入unicode和字节以后,但现在,这足以知道,这将在我们的数据正确读取。
- 要在读取数据时跳过标题,我们使用skip_header参数。该skip_header参数接受一个整数值,指定我们想要NumPy忽略的文件顶部的行数。
7.访问数组中的单个元素
现在数据是正确的格式,我们来学习如何探索它。我们可以像我们如何索引普通Python列表一样索引NumPy数组。以下是我们如何索引NumPy向量:
上面的代码将打印第一个元素vector,或5。
索引矩阵类似于列表的索引列表。以下是索引列表列表的更新:
list_of_lists中的第一个项目是[5, 10, 15]。如果我们想要访问元素15,我们可以这样做:
我们也可以把这样的符号缩小:
我们可以以类似的方式索引矩阵,但是我们将两个索引都放在方括号内。第一个索引指定数据来自哪个行,第二个索引指定数据来自哪个列:
在上面的代码中,当我们索引时,我们将两个索引传递到方括号中。 matrix
8.向量和数组切片
我们可以使用值切片来选择数组的子集,就像我们可以使用列表一样:
像列表一样,向量切片是从第一个索引到但不包括第二个索引。矩阵切片有点复杂,有四种形式:
- 当我们要选择一个整体的维度,另一个元素从另一个元素。
- 当我们想要选择一个整体,另一个是一个切片。
- 当您要选择一个维度的切片,另一个元素选择另一个维度。
- 当我们想切割这两个维度。
我们将在此屏幕中进入第一个窗体。当我们要选择一个整体,另一个元素,我们可以这样做:
这将选择所有行,但只能选择具有索引 的列1。冒号本身:指定应选择单个维度的整体。将冒号设为从第一个元素中选择,直到并包括最后一个元素。
当我们要选择一个整体,另一个是一个切片时,我们需要使用特殊的符号:
我们可以通过在列区域中指定冒号来选择行。下面的代码选择行1和2,以及所有的列。
我们也可以沿整个维度选择一个值。代码初级讲座选择行1和2及列1:
我们也可以同时沿
两个
方向
切片
。
下面的代码选择与行
索引
1
和
2
,并用列
指数
0
和
1
:
更多学习numpy的知识,请前往www.lynda.com, 里面有全球一流的培训,本人提供高级Premium代注册和激活,欢迎访问:
http://item.taobao.com/item.htm?id=557746408785