这个系列是专门学习python里有关数据科学的两个包:Numpy和Pandas
numpy和pandas是两个数据科学领域很重要的包,用这两个包可以很轻松的处理大量数据,面对十万百万级的数据集,excel就有点乏力了,这时候我们的numpy和pandas就派上用场了。
本教程源于https://www.codecademy.com 一个很不错的编程教学网站
首先安装numpy和pandas和jupter notebook:
在命令提示符里输入:
pip install numpy
回车后等待安装完毕
pip install pandas
回车后等待安装完毕
pip install jupyter
回车后等待安装完毕
首先,什么是jupyter notebook?
Jupyter Notebook是基于网页的用于交互计算的应用程序。其可被应用于全过程计算:开发、文档编写、运行代码和展示结果。——Jupyter Notebook官方介绍
简单点说,Jupyter Notebook就是一个网页形式的编译器,简单,轻量,基于Ipython,可以即时的看到out结果.
如何打开jupyter notebook?
打开命令提示符(在菜单里的运行中输入cmd),键入jupyter notebook,回车
等待数秒后会自动打开默认浏览器,浏览器会打开一个端口为8888的网页,这就是jupyter notebook的主界面了
主界面点击右上角的new,选择python3,就可以新建一个python3的文档啦,我们就可以在这上面演示了,下面开始今天的正题:Numpy(我会尽量用图片的方式去表达,免得有些小伙伴直接复制粘贴,学习编程最重要的就是动手实操了)
首先,我们新建好一个python3notebook文档后,第一步先导入numpy模块
然后我们按ctrl+enter后,就会执行当前的单元格,如果报错就代表你的输入有误或者你还没有安装numpy这个包,如果无事发生则代表已经成功导入numpy了
写作as np
允许我们将np
用作NumPy的简写,这可以节省我们调用NumPy函数的时间(减少输入=减少错误!)
NumPy包含一个称为 array (数组)的强大数据结构。NumPy数组是一种特殊类型的列表。它是一种多组的数据结构。每个组可以是任何类型(字符串,数字,甚至其他数组)。
这是因为数组为我们提供了执行数学运算的特殊方法,这些运算既易于编写又更高效。我们稍后会对此有所了解。
NumPy数组看起来很像Python列表(list):
my_array=np.array([1,2,3,4,5,6])
我们可以通过使用np.array()
并将值保存到新变量来将常规列表转换为NumPy数组:
想象一下,你是一名教师,你需要记录你学生的考试成绩。在第一次测试中,学生们获得了以下分数:92, 94, 88, 91, 87
使用这些值创建NumPy数组并使用名称保存test_1
。
用CSV创建阵列
我们可以使用np.genfromtxt()
函数将CSV(逗号分隔值)文件转换为数组:
我们可以使用以下代码将sample.csv导入NumPy数组:
csv_array=np.genfromtxt('sample.csv',delimiter=',')
如果报错,在后面加上csv_array=np.genfromtxt('sample.csv',delimiter=',',encoding='utf-8)
请注意,在这种情况下,我们的文件的sample.csv
值以逗号分隔,因此我们使用delimiter=','
,但有时你会找到包含其他分隔符的文件,最常见的是制表符或冒号。
导入后,此CSV将创建一个这样的阵列
>>>csv_arrayarray([34,9,12,11,7])
我们现在有这么一个数组:test_3 = np.array([87, 85, 72, 90, 92])
现在要给每个元素+1,用列表的话可以这么做:
用numpy给l列表每个元素+3:
同理,给l的每个元素平方:
同理,开方:
同理,几个数组相加:
同理,除法:
前面我们试的都是一维数组,现在我们开始用二维数组。
在Python中,我们可以创建由其他列表组成的列表。同样,在NumPy中我们可以创建一个数组数组。
首先,我们假设我们抛硬币得到了一组一维数据,1代表正面,0代表背面,将数组保存在变量coin_toss中:
我们再抛硬币,记一组数据,将两组数据做成一个二维数组:
NumPy允许我们使用它们的索引从数组中选择元素,和列表索引是一样的.
在典型的Python方式中,数组的索引从0
开始。在上面的数组中,5被称为第0个元素a[0]
。由此得出2是第一个元素,a[1]
。
我们也可以选择负数指数,它从数组的另一端开始计算并从中开始-1
。当您想要访问数组的最后一个或两个元素时,这非常有用:
如果我们希望选择阵列中的多个元素,我们可以定义一个范围内,例如a[1:4]
,这将选择所有从元素a[1]
到a[4]
之间的元素,包括a[1]
但不包括a[4]
(左闭右开)。
同样,如果我们想选a[3]
之前所有元素:
同理,我要选择最后三个:
从二维数组中选择元素与从一维数组中选择它们非常相似,我们只有两个索引可供选择。用于从2-d阵列中选择的语法a[row,column]
,其中a
为阵列row是行,column是列。
值得注意的是,当我们处理具有多个维度的数组时,内部数组之间的关系是根据轴(axis)定义的。二维数组有两个轴:轴0表示共享相同索引位置的值(在同一列中),轴1表示共享数组的值(在同一行中)。这如下图所示。
现在我们有以下数组:
a = np.array([[32, 15, 6, 9, 14],
[12, 10, 5, 23, 1],
[2, 16, 13, 40, 37]])
我们把它打印出来:
现在我们要选择第3行第2列的16这个值,我们就可以这么写:
注意任何索引都是从0开始的哦~
假设我们想要选择整个列,我们可以插入:
行索引:
如果我们想要选择整行,则同样有效:
我们可以进一步缩小范围并从特定行中选择范围:
数组可以做的另一件有用的事情是执行元素逻辑操作。例如,假设我们想知道一个数组中有多少元素大于5。我们可以很容易地编写一些代码来检查该语句对于数组中的每个项的计算结果是否为true,而不必使用for循环:
然后,我们可以使用逻辑运算符根据特定条件来评估和选择项。要从上一个数组中选择大于5的所有元素,我们将编写以下内容:
我们还可以组合逻辑语句来进一步指定我们的标准。为此,我们将每个语句放在括号中,并使用 &(and)和 |(or)等布尔运算符。在我们的示例中,我们可以使用组合语句查找大于5或小于2的元素:
计数
可以使用函数np.sum(a == xx)来统计a数组中一共有多少个xx元素,例如:
小练习:
现在我们有这么一个数组:porridge = np.array([79, 65, 50, 63, 56, 90, 85, 98, 79, 51])
1.找出其中小于60的数并赋值到cold变量中
2.找出其中大于80的数并赋值到hot变量中
3.找出其中介于60和80之间的数并复制到just_right变量中
4.打印所有变量,观察是否正确
下面是答案:
OK,这一小节到此结束,让我们回顾一下这次的内容,很简单,很少,很基础
以下是一些要点:
np.array()
或使用导入CSV来定义数组来创建数组np.genfromtxt('file.csv', delimiter=',')
。之后将探讨如何分析这些数组,并使用平均值、中位数和标准差来描述数据。
这是本章的小练习,大家试一下?
Tao:小白数据科学之Numpy入门02(Numpy01之练习)zhuanlan.zhihu.com未完待续~