您的位置:首页 > 编程语言 > Python开发

利用Python做数据分析——numpy基础

2017-10-03 18:05 726 查看
安装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:

importnumpy
asnp

我们可以使用numpy.array()函数直接从列表构造数组。要构建一个向量,我们需要传递一个列表(没有嵌套):

vector =np.array([
5,10,15,20 ])

该numpy.array()函数还接受列表列表,我们用于创建一个矩阵:

matrix =np.array([[
5,10,15 ],[20,25,30
],[35,40,45 ]])

2.获取数组或矩阵的元素个数

数组有一定数量的元素。下面的数组有5元素:

1986年
西太平洋
越南
红酒
0
矩阵代替使用行和列,这符合对数据集的想法。下面的矩阵有3行和5列,通常称为3×5矩阵:

1986年
西太平洋
越南
红酒
0
1986年
美洲
乌拉圭
其他
0.5
1985年
非洲
科特迪瓦
红酒
1.62
了解数组包含的元素通常很有用。我们可以使用ndarray.shape属性来确定数组中有多少个元素。

对于向量,shape属性包含一个1元素元组。元组是元素无法更改的列表。

vector =numpy.array([
1,2,3,4 ])
print(vector.shape)

上面的代码将导致元组(4,)。该元组表示数组vector具有一个维度,其长度4与我们对于vector具有4元素的直觉相匹配。
对于矩阵,shape属性包含一个2元素元组。

matrix =numpy.array([[
5,10,15 ],[20,25,30
]])
 print(matrix.shape)

上述代码将导致元组(2,3)指示matrix有2行和3列。

3.读取数据集到数组

我们可以使用numpy.genfromtxt()函数读取数据集。我们的数据集world_alcohol.csv是一个逗号分隔值数据集。我们可以使用delimiter参数指定分隔符:

import numpy
NFL =numpy.genfromtxt("data.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 =np.array([
1,2,3,4 ])
numbers.dtype

因为numbers只包含整数,它的数据类型是int64。

5.Numpy数据集简介

NumPy代表数据集的前几行如下:

array([[ nan,nan,
nan,nan,
nan ],
[ 1.98600000e + 03,nan,
nan,nan,
0.00000000e + 00 ],
[ 1.98600000e + 03,nan,
nan,nan,
5.00000000e-01 ]])

在许多项目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 =np.array([
5,10,15,20 ])
print(vector [0 ])

上面的代码将打印第一个元素vector,或5。
索引矩阵类似于列表的索引列表。以下是索引列表列表的更新:

list_of_lists = [
[ 5,10,15 ],
[ 20,25,30 ]
]

list_of_lists中的第一个项目是[5,
10, 15]。如果我们想要访问元素15,我们可以这样做:

first_item =list_of_lists [0 ]
first_item [2 ]

我们也可以把这样的符号缩小:

list_of_lists [0 ] [
2 ]

我们可以以类似的方式索引矩阵,但是我们将两个索引都放在方括号内。第一个索引指定数据来自哪个行,第二个索引指定数据来自哪个列:

>> matrix=
np.array([
[ 5,10,15 ],
[ 20,25,30 ]
])
>> 矩阵 [1,2 ]
30

在上面的代码中,当我们索引时,我们将两个索引传递到方括号中。 matrix

8.向量和数组切片

我们可以使用值切片来选择数组的子集,就像我们可以使用列表一样:

>> vector=
np。array([5,10,15,20
])
>> vector[0:3 ]
array([ 5,10,15 ])

像列表一样,向量切片是从第一个索引到但不包括第二个索引。矩阵切片有点复杂,有四种形式:
当我们要选择一个整体的维度,另一个元素从另一个元素。
当我们想要选择一个整体,另一个是一个切片。
当您要选择一个维度的切片,另一个元素选择另一个维度。
当我们想切割这两个维度。

我们将在此屏幕中进入第一个窗体。当我们要选择一个整体,另一个元素,我们可以这样做:

>> matrix=
np.array([
[ 5,10,15 ],
[ 20,25,30 ],
[ 35,40,45 ]
])
>> matrix [:,1 ]
array([ 10,25,40 ])

这将选择所有行,但只能选择具有索引 的列1。冒号本身:指定应选择单个维度的整体。将冒号设为从第一个元素中选择,直到并包括最后一个元素。

当我们要选择一个整体,另一个是一个切片时,我们需要使用特殊的符号:

>> matrix=
np.array([
[ 5,10,15 ],
[ 20,25,30 ],
[ 35,40,45 ]
])
>> matrix[:,0:2 ]
matrix([[ 5,10 ],
[ 20,25 ],
[ 35,40 ]])

我们可以通过在列区域中指定冒号来选择行。下面的代码选择行1和2,以及所有的列。

>> matrix[1:3,...]
matrix([[ 20,25,30 ],
[ 35,40,45 ]])

我们也可以沿整个维度选择一个值。代码初级讲座选择行1和2及列1:

>> matrix[1:3,1 ]
array([ 25,40 ])

我们也可以同时沿两个方向切片。下面的代码选择与行索引 1和2,并用列指数 0和1:

>> matrix=
np.array([
[ 5,10,15 ],
[ 20,25,30 ],
[ 35,40,45 ]
])
>> mtrix [1:3,0:2
]
arrya([[ 20,25 ],
[ 35,40 ]])

更多学习numpy的知识,请前往www.lynda.com, 里面有全球一流的培训,本人提供高级Premium代注册和激活,欢迎访问:http://item.taobao.com/item.htm?id=557746408785
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: