参考视频:
https://www.bilibili.com/video/BV1HJ411j7NG?p=2
首先要安装Anaconda,安装好后配置环境变量,参考:
https://blog.csdn.net/qq_40733911/article/details/87298373
安装好并配置环境变量后,打开jupyter,一旦点击运行,jupyter就会退出,显示错误:
最后终于发现是电脑用户名是中文的问题,然后将电脑用户名修改为英文,根据文章:
https://blog.csdn.net/qq_41137110/article/details/102644516?tdsourcetag=s_pcqq_aiomsg
修改完之后,打开系统的环境变量,将原来的中文名也修改为英文。
之后就可以正常使用jupyter了。
使用jupyter打开某路径下的文件,比如使用jupyter打开 E:\
▲jupyter的使用:
快捷键:
几个常用的快捷键:
shift + enter :运行本行
点击输入框前面的部分:
a : 在本行上面增加一行
b:在本行下面增加一行
dd:删除本行(比如本行是一个变量,可以在页面上删除本行,但该变量不会删除,还是在内存中)
数据分析常用库:
python没有提供数组功能,而numpy的数据结构是数组。数组的运算速度比列表等数据结构运算速度快很多。
numpy简单介绍:
接下来创建一个二维数组:
注意,array中通常是一个列表。二维数组使用一个 [ ] 括起来使用的。
pandas简单介绍:
pandas 可以读取 csv、txt、excel中的数据。
如果桌面有这样一个文件:
则可以这样来访问:
注意,需要使用两个 \\ ,第一个 \ 代表转义字符,或者直接:
也是与加转义字符 \ 一样的效果。
一、Numpy基本用法
包括:数据的创建、数组的属性、索引和切片
▲数组创建
如上图所示,其中,array()的参数是数据结构,可以是列表、元组等,一般我们写列表。
我们还可以规定数组中的数据类型:
创建二维数组:
array()的参数是一个嵌套的列表。
上述创建数组的方法可能会比较麻烦,使用这一种方法来创建数组:
注意,python是左闭右开的,所以 arange(0,10) 是从0到9.
linespace()函数用来创建一个等差数列,上图表示创建一个从1开始到10结束,一共有5个数的等差数列。
该函数还有一个可选参数endpoint,表示是否取到最后一个数:
如上图所示,第一行代码要求创建从1开始到10结束,一共10个数,但是不取到最后一个数10的等差数列。如果不取到最后一个数,本质上是先创建一个 11个数的等差数列,然后去掉最后一个数。
创建一个全为0的数组:
如上图所示,zeros()函数中若参数为[4,5],表示创建一个四行五列的,值全为0的二维数组,如果参数为 6 ,表示创建一个有6个元素的值全为0的数组。
创建一个单位矩阵:
如上图所示,创建一个六阶的单位矩阵。
创建一个对角矩阵:
上图表示创建一个对角线为4,5,8的三阶对角矩阵。
注意,矩阵的加1是指矩阵内所有元素的值都加1,如下图所示:
这和列表的加1不同,列表不能直接加1,如下图所示:
列表直接加1就会报错,列表加法只能采用迭代的方法:
但是如果是数组,却可以直接加1:
而且数组是同时运算,而列表时迭代运算,所以数组效率比列表一般要高。
▲数组的属性特征:
arr.shape 用来查看数组的形状(例如二维数组有几行几列)
arr.ndim 用来查看数组的维度
arr.dtype 用来查看数组中元素的类型
arr.size用来查看数组的长度
如下图所示:
▲索引和切片
普通索引:
将上图看做二维数组,上图即数组的索引,是从0开始的,有三种索引方法。
上图所示,python是左闭右开的,所以使用 arr[3:5] 是取不到第六位(索引从0开始)的,只能取第四、五两位。
取数组的倒序:
取数组的最后一位:
数组元素的修改:
如图,将数组arr赋值给arr_change,若arr_change 改变,arr也改变,这点也跟列表一样。列表解决这个的方法是使用copy()函数(浅拷贝),数组中解决这个的方法也是使用copy()函数。
二维数组:
创建一个二维数组:
如果访问时对行数不作限制,对列数做限制:
上图表示访问时对行数不作限制,访问第3、4两列
同样的,对列数不作限制,访问第2、3行:
或者可以直接:
如果要取出二维数组中所有大于3.5的元素,可以这样写:
取上图相反的情况:
其他操作:
花式索引:
访问第三行以及第二行,并且先访问输出第三行,再访问输出第二行:
输出第四行第一列,第三行第二列的元素:
对行不作限制,先输出第四列,再输出第二列的内容:
花式索引可以指定行、列的顺序,同时和普通索引区别:
花式索引取出的是二维的数组,而普通索引取出的可能会是一维数组:
分别看一下它们的维度:
还可以使用 np.ix 来返回行列数不同的二维数组:
如果要使用花式索引返回该结果,不能这样:
应该使用如下方法:
上图意思是先取出二维数组的第1行和最后一行;然后再对行不做限制,取出二维数组的第1、2、4列。
二、Numpy高级用法:
▲数组形状改变
1)改变数组形状 reshape() 、resize() 、arr.shape = (x,y)
改变数组形状使用reshape()方法,但是不会改变原数组,只会返回一个新的数组
如上图所示,通过一个四行五列的二维数组返回为10行2列,原数组arr仍然是4行5列。
如果要直接改变原数组,可以使用 resize()方法:
或者 使用 arr.shape = (x,y) 的方式:
2)数组降维
使用 ravel() 方法可以给数组降维,但是不会改变原数组,默认是按照横向来降维一维数组
还可以加上参数 order = ‘F‘,按照纵向将二维数组降为一维:
arr.flatten() 与ravel()的效果一致。
使用 reshape 方法也可以返回一个展平的数组,即返回一个降维的数组:
在reshape()方法中,只要给定了一个参数,另一个参数就可以自动确定了,所以另一个参数写 -1 就可以。
如果reshape()的参数只有一个 -1 ,那么功能就和 flatten()和 ravel()一致了。
flatten()、ravel()以及 reshape(-1)三个方法的区别为:
如果更改展平后数组的元素(即更改返回的结果),那么更改 flatten()展平后的数组,原数组不会受到影响。
但是更改 ravel()以及reshape(-1)展平后的数组,原数组会受到影响。
但是注意,仅使用三个函数展平数组,是不会更改原数组的。
3)将多个数组合并为一个更大的数组
现在使用 np.hstack()函数将这两个二维数组(3行4列 以及 3行5列)横向合并为一个3行9列的二维数组:
使用 np.vstack()将arr1(3行4列)以及 arr3(4行4列)纵向合并为1个 7行4列的二维数组:
还可以使用 np.concatenate()函数来合并数组,有两个参数,第一个参数是一个元组,代表要合并的数组;第二个参数是 axis,当axis = 0 时,表示沿着行的方向进行操作(纵向合并);当axis = 1 时,表示沿着列的方向进行操作(横向合并)。
使用 np.tile() 来进行复制扩展二维数组。有两个参数,第一个参数是原数组,第二个参数是复制的倍数。该操作不会改变原数组。
三维数组:
▲数组的通用函数和广播机制
▲python广播运算机制:
如上图所示,两个同型二维数组相加,正常相加。
但是,如果是不同型的数组相加,也可以相加,如下图所示:
这是因为python会使用广播机制:
注意,补齐并不是补0.
列补齐方式:
行补齐方式:
如果两个不同型数组相加时,如果能够行、列补齐则补齐后相加,否则会报错。
▲通用函数运算
np.add()函数:
np.add()函数也会使用广播机制。add()函数只能同时支持两个数组相加。
np.subtract():
np.multiply():
np.power():对数组求幂(数组中的每个元素都求幂)
np.unique():去重复
np.in1d(a,b):分别判断数组a中的每个元素是否在数组b中(注意函数中是数字1不是字母 l )
np.intersect1d(a,b):返回a,b交集,同样函数名中是数字 1 不是字母 l
np.equal(a,b) 和 == :比较运算:(不同型数组比较时会执行广播机制)
np.greater(a,b) 与 > :比较大小
any():只要有一个返回True 就返回 True
all():所有都返回True时才返回True
numpy中的空值none 是 np.nan,对空值进行判断的函数 是 np.isnan()函数:
在数据分析时,能用numpy函数就用numpy函数,因为效率比较高。