Python教程

python基础:数据分析

本文主要是介绍python基础:数据分析,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

参考视频:

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函数,因为效率比较高。

这篇关于python基础:数据分析的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!