【学习笔记】第二章 数据处理与可视化

本文介绍了Python中Numpy的数组操作,包括创建、属性、运算和文件存取;详细讲解了Pandas的序列、数据框以及外部文件存取;还探讨了Matplotlib的基础用法和可视化应用,包括散点图、柱状图、三维图形等。此外,还涉及文件操作、随机数生成和Scipy.stats模块的分布函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

2.1 数值计算工具 Numpy

2.1.1数组的创建,属性和操作

1.数组的创建

2.数组的属性

3.数组元素的索引

4.数组的修改 

5.数组的变形 

2.1.2 数组的运算,通用函数和广播运算

1.四则运算

2.比较运算 

3.ufunc函数 

4.ufunc函数的广播机制 

2.1.3 NumPy.random 模块的随机数生成

2.1.4 文本文件和二进制文件存取 

1.文本文件的存取 

2.二进制格式文件存取

2.2 文件操作 

2.2.1 文件基本操作

1.打开文件

2.文件对象属性

3.文件对象方法

4.关闭文件 

 2.2.2 文本文件的读写操作

2.2.3 文件管理方法 (os模块)

1. 文件和目录列表

2. 文件重命名

3. python中的目录操作

 2.3 数据处理工具Pandas

2.3.1  Pandas的序列和数据框

1. 序列 

2. 数据框 

2.3.2 外部文件的存取 

1.文本文件的读取

2. Excel文件的存取

3. 数据子集的获取

2.4 Matplotlib可视化 

2.4.1 基础用法

2.4.2 Matplotlib.pyplot的可视化应用 

1.散点图

2. 多个图形显示在一个图形画面 

3. 多个图形单独显示

4.三维空间的曲线

5. 三维曲面图形 

6. 等高线图

7. 向量图(箭图)

2.4.3 可视化的综合应用

2.5 scipy.stats模块简介

2.5.1 随机变量及分布

1. 连续型随机变量及分布 

2. 离散型随机变量及分布 

2.5.2 概率密度函数和分布律可视化 

定义:​函数分布定义


2.1 数值计算工具 Numpy

2.1.1数组的创建,属性和操作

1.数组的创建

例2.1 利用array函数创建数组示例

import numpy as np
a = np.array([2,4,8,20,16,30])
#如果向array函数传入了一个列表或元组,将构造简单的一维数组
b = np.array(((1,2,3,4,5),(6,7,8,9,10),(10,9,1,2,3),(4,5,6,8,9.0)))
#如果传入多个嵌套的列表或元组,将构造一个二维数组
#注意括号,array函数本身有一层括号,传入列表有一层中括号,传入元组有一层小括号,如果是嵌套的元组,则嵌套有一层多出来的括号
print('一维数组:',a)
#逗号分隔,表示输出多个对象
print('二维数组:\n',b)
#print函数的用法,格式如下:
    #print(*objects, sep=' ', end='\n', file=sys.stdout)
    #objects --表示输出的对象。输出多个对象时,需要用 , (逗号)分隔。
    #sep -- 用来间隔多个对象。
    #end -- 用来设定以什么结尾。默认值是换行符 \n,我们可以换成其他字符。
    #file -- 要写入的文件对象。

例2.2 利用arange,empty,linspace等函数生成数组示例

import numpy as np
a=np.arange(4,dtype=float)#创建[0,4)的浮点数数组
b=np.arange(0,10,2,dtype=int)#创建[0,10)间隔为2的整型数组
c=np.linspace(-1,2,5)#创建一个数组,元素为[0,2]均分为5份
d=np.empty((2,3),int)#创建一个2*3的空数组
#empty函数只分配内存,不初始化,速度最快,返回值随机
e=np.random.randint(0,3,(2,3))#创建一个2*3的随机数组,再[0,3)上取值
print(a),print(b),print(c),print(d),print(e)

例 2.3 使用虚数单位“j”生成数组

import numpy as np
a=np.linspace(0,2,5)#创建一个数组,元素为[0,2]均分为5份
b=np.mgrid[0:2:5j]#等价于np.linspace(0,2,5)
x,y=np.mgrid[0:2:4j,10:20:5j]#生成x数组,[0,2] 生成y数组,[10,20]
print(a),print(b)
print('x={}\ny={}'.format(x,y))#format方法用参数分别替换前面的{}

2.数组的属性

例2.4 生成一个3*5的[1,10]上取值的随机整数矩阵,并显示他的各个属性

知识点:数组的属性如下所示

  • ndim        返回值int,表示数组的维数
  • shape      返回值元组,表示数组的尺寸,eg:(3,4)表示3行4列矩阵
  •  size        返回值int,表示数组的元素总数
  • dtype       返回数据类型
  • itemsize   返回值int,表示每个元素的大小(字节)
import numpy as np
a=np.random.randint(1,11,(3,5))
print('维数:{}'.format(a.ndim))
print('维度:{}'.format(a.shape))
print('元素总数:{}'.format(a.size))
print('类型:{}'.format(a.dtype))
print('每个元素字节数:{}'.format(a.itemsize))

 

例2.5 生成数学上一维向量的三种模式

import numpy as np
a=np.array([1,2,3])
b=np.array([[1,2,3]])
c=np.array([[1],[2],[3]])
print(a,a.shape),print(b,b.shape),print(c,c.shape)

 

3.数组元素的索引

  • 一般索引
import numpy as np
a=np.array([2,4,8,20,16,30])
b=np.array(((1,2,3,4,5),(6,7,8,9,10),(10,9,1,2,3),(4,5,6,8,9.0)))
print(a)
print('-------------------------')
print(b)
print('-------------------------')
print(a[[2,3,5]])   #一维数组索引,输出[ 8 20 30]
print('-------------------------')
print(a[[-1,-2,-3]])#一维数组索引,输出[30 16 20]\
print('-------------------------')
print(b[1,2])       #二维数组索引,输出第二行第三列元素
print('-------------------------')
print(b[2])         #二维数组索引,输出第三行元素
print('-------------------------')
print(b[2,:])       #二维数组索引,输出第三行元素
print('-------------------------')
print(b[:,1])       #二维数组索引,输出第二列元素
print('-------------------------')
print(b[[2,3],1:4]) #输出第3、4行,第2、3、4列元素(列表前后取,切片后不取)
print('-------------------------')
print(b[1:3,1:3])   #输出第2、3行,第2、3列元素

如上述结果所示,在一维数组的索引中,可以将任意位置的索引组装为列表,用作对应元素的获取;在二维数组中,位置索引必须写成[rows,cols]的形式,方括号的前半部分用于控制二维数组的行索引,后半部分用于控制数组的列索引.如果需要获取所有的行或列元素,那么,对应的行索引或列索引需要用英文状态的冒号表示.

  •  布尔索引
from numpy import array,nan,isnan
a=array([[1,nan,2],[4,nan,3]])
b=a[~isnan(a)]  #~表示取反
print("b=",b)
print('b中大于2的元素有:',b[b>2])

  • 花式索引 
    from numpy import array
    x = array([[1,2],[3,4],[5,6]])
    print('前两行元素为:\n',x[[0,1]])
    print('x[0][0]和x[1][1]为:',x[[0,1],[0,1]])
    #下面两种格式是一样的
    print(x[[0,1]][:,[0,1]])
    print(x[0:2,0:2])

    花式索引的索引值是一个数组.对于使用一维整型数组作为索引,如果被索引
    数据是一维数组,那么索引的结果就是对应位置的元素;如果被索引数掂足--维蚁组,那么索引的结果就是对应下标的行.
    对于二维被索引数据来说,索引值可以是二维数据,当索引值为两个维度相同
    的一维数组组成的二维数组时,以两个维度作为横纵坐标索引出单值后组合成新的一维数组. 

4.数组的修改 

(这里指的是数组元素的修改和维度的扩大和缩小)

import numpy as np
x = np.array([[1,2],[3,4],[5,6]])
x[2,0] = -1#把第三行第一列元素的值修改为-1
y=np.delete(x,2,axis=0)
print(y)#删除数组的第三行
z=np.delete(y,0,axis=1)
print(z)#删除数组的第一列
t1=np.append(x,[[7,8]],axis=0)
print(t1)#给数组x增加一行,内容为[7,8]
t2=np.append(x,[[9],[10],[11]],axis=1)
print(t2)#给数组x增加一列,内容为[9,10,11]

  • 直接修改:

用一般索引直接修改即可

  • 删除一行(列):

numpy.delete()函数,其中有三个参数: 第一个参数:进行操作的数组名称;第二个参数:行号(列号);第三个参数:axis=0即修改行,axis=1即修改列。

  • 增加一行(一列):

numpy.append()函数,其中有三个参数: 第一个参数:进行操作的数组名称;第二个参数:要增加的内容。注意,最外层一个中括号,内部增加行时一个中括号括住全部元素即可,增加列时一个中括号括一个元素;第三个参数:axis=0即修改行,axis=1即修改列。

5.数组的变形 

 例2.10 reshape和resize变形示例

import numpy as np
a = np.arange(4).reshape(2,2)#生成数组[[0,1][2,3]]
b = np.arange(4).reshape(2,2)#生成数组[[0,1][2,3]]
print(a.reshape(4,),'\n',a)#输出[0,1,2,3]和[[0,1][2,3]]
print(b.resize(4,),'\n',b)#输出none和[0,1,2,3]

 

 reshape和resize在数组变形方面的区别:

1.reshape函数最多三个参数,a.reshape(m,n,s),即把数组a变为m个n行s列的数组。如果只给两个参数,为n,s。返回值为改变的结果,不修改原数组。

2.resize函数最多三个参数,a.resize(m,n,s),即把数组a变为m个n行s列的数组。如果只给两个参数,为n,s。没有返回值,修改原数组。

例2.11 数组降维示例

import numpy as np
a=np.arange(4).reshape(2,2)#生成数组[[0,1][2,3]]
b=np.arange(4).reshape(2,2)#生成数组[[0,1][2,3]]
c=np.arange(4).reshape(2,2)#生成数组[[0,1][2,3]]
print(a.reshape(-1),'\n',a)#输出[0,1,2,3]和[[0,1],[2,3]]
print(b.ravel(),'\n',a)#输出[0,1,2,3]和[[0,1],[2,3]]
print(c.flatten(),'\n',a)#输出[0,1,2,3]和[[0,1],[2,3]]

 

将多维数组降为一维时可以选择a.flatten()方法a.ravel()方法,它们都没有改变原有数组,而是返回一个修改后的新数组。a.reshape(-1)方法也可以用来做降维,将参数设为-1即可。

例2.12 数组组合效果示例

import numpy as np
a=np.arange(4).reshape(2,2)#生成数组[[0,1][2,3]]
b=np.arange(4,8).reshape(2,2)#生成数组[[4,5][6,7]]
c1=np.vstack([a,b])#垂直方向组合
c2=np.r_[a,b]#垂直方向组合
d1=np.hstack([a,b])#水平方向组合
d2=np.c_[a,b]#水平方向组合
print(c1)
print('---------------')
print(c2)
print('---------------')
print(d1)
print('---------------')
print(d2)

 

 多个数组组合分为垂直方向组合和水平方向组合两种

垂直方向组合: c1=np.vstack([a,b])
                          c2=np.r_[a,b]        注意:vstack需要多一个小括号

水平方向组合:d1=np.hstack([a,b])
                         d2=np.c_[a,b]        注意:hstack需要多一个小括号

 例2.13 数组分割示例

import numpy as np
a=np.arange(4).reshape(2,2)#生成数组[[0,1][2,3]]
b=np.hsplit(a,2)#把a平均分成两个列数组
c=np.vsplit(a,2)#把a平均分成两个行数组
print(b)
print('---------------')
print(c)
print('---------------')

数组可以按行分割,也可以按列分割

按行分割:c=np.vsplit(a,2)

按列分割:b=np.hsplit(a,2)

两个函数都有两个参数,第一个参数是被分割的原数组,第二个参数是分割成的份数。

2.1.2 数组的运算,通用函数和广播运算

 1.四则运算

numpy库中实现四则运算可以使用运算符号+,-,*,/,也可以使用函数add(),substract(),multiply(),divide()。需要注意的是,函数只能接受两个对象的运算,如果有多个对象,可以选择运算符号或者嵌套运算。

除了加减乘除,还有三个数学运算符,分别是:余数,整除和幂次,可以使用符号:%,//,**,也可以使用函数fmod(),modf()和power()。需要注意的是,整除的函数略有复杂,需要写作np.modf(a/b)[1],因为modf()函数可以返回数值的小数部分或者整数部分

注意,以上7种数学运算都是对每一个对应元素分别计算。

例2.14 数组的简单运算示例

import numpy as np
a=np.arange(10,15)#生成数组[10,11,12,13,14]
b=np.arange(5,10)#生成数组[5,6,7,8,9]
c=a+b;d=a*b#对应元素分别相加或者相乘
e1=np.modf(a/b)[0]#对应元素相除的小数部分,返回值为浮点数
e2=np.modf(a/b)[1]#对应元素相除的整数部分,返回值为浮点数
print(a)
print('---------------')
print(b)
print('---------------')
print(e1)
print('---------------')
print(e2)
print('---------------')

2.比较运算 

注意:比较运算符返回值为True或False。 

比较运算符结合布尔索引可以取出特定元素。

例2.15 比较运算符示例

import numpy as np
a=np.array([[3,4,9],[12,15,1]])
b=np.array([[2,6,3],[7,8,12]])
print(a[a>b])#输出a中大于b的所有元素
print(a[a>10])#输出a中大于10的所有元素
print(np.where(a>10,-1,a
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值