Numpy matplotlib pandas学习笔记

列表与数组的区别:列表中的数据数据类型可以不一样,数组的各个数据类型一样。

数据的维度

一维数据:由对等关系的有序或无需数据构成,线性组织方式。
二维数据:由多个一维数据构成,是一维数据的组合形式。如表格。
多维数据:多维数据由一维或二维数据在新维度上扩展而成。
高维数据:仅利用基本的二元关系展示数据间的复杂结构。键值对
在这里插入图片描述

一 numpy

1.1 ndarray基本概念及属性

N维数组对象ndarray,包含实际的数据、描述这些数据的元数据(数据维度、类型等)。ndarray数组一般要求所有元素类型相同(同质),数组下标从0开始。若是非同质的元素,则全为object对象类型。更关注数据结构表达
轴(axis):保存数据的维度
秩(rank):轴的数量,即有多少个维度nidm

import numpy as np 

a = np.array([[1,  2],  [3,  4]])  
print(a)
print ("秩:", a.ndim)  # 秩
print("shape:" ,  a.shape ) # ndarray 对象的尺度,n行m列   shape: (2, 2)
print("size:" , a.size)  # ndarray对象元素的个数,相当于n*m   size: 4
print(a.dtype) # ndarray对象元素类型   int64
print(a.itemsize) # ndarray对象每个元素的大小,以byte为单位  8

ndarray数据类型

数据类型说明数据类型说明
bool布尔类型,取值True Falseuint88位无符号整数,[0, 255]
intc与c语言int一致,一般是int32或int64uint1616位无符号整数,[0, 65535]
intp用于索引的整数,与c语言中ssize_t一致,一般是int32或int64uint3232位无符号整数
int88位长度的整数,[-128,127]uint6464位无符号整数
int1616位长度整数float1616位单精度浮点数,1位符号位,5位指数,10位尾数
int3232位长度整数float3232位单精度浮点数,1位符号位,8位指数,23位尾数
int6464位长度整数float6464位单精度浮点数,1位符号位,11位指数,52位尾数
complex64复数类型,实部和虚部都是32位浮点数complex128复数类型,实部和虚部都是64位浮点数
1.2 ndarray的创建

从列表、元祖等类型创建ndarray数组

x = np.array(list/tuple)
如:np.array([1,2,3,4])、np.array((1,2,3,4))、np.array([[1,2],(3,4)])

使用numpy中的函数创建 arange、ones、zeros等

函数说明
np.arange(n)类似python的range函数,返回元素为 0~n-1 的ndarray函数,默认类型整数
np.ones(shape)根据shape生成一个全1的数组,shape为元祖类型,默认类型浮点数
np.zeros(shape)根据shape生成一个全0的数组,shape为元祖类型,默认类型浮点数
np.full(shape, val)根据shape生成一个全为val的数组
np.eye(n)创建一个n*n的单位矩阵,对角线全1,其余全0 ,默认类型浮点数
np.ones_like(a)根据a的形状生成一个全1的数组
np.zeros_like(a)根据a的形状生成一个全0的数组
np.full_like(a, val)根据a的形状生成一个全为val的数组
np.linspace()根据起止数据,等间距地填充数据,形成数组,默认为浮点数
np.concatenate()将两个或多个数组合并生成一个新的数组
b = np.linspace(1,10,4)  # [ 1.  4.  7. 10.]
c = np.linspace(1,10,4, endpoint=False)  # [1. 3.25 5.5 7.75] endpoint表示10是否为生成元素中的一个,其实就是多生成一份,把最后一份砍掉 [1. 3.25 5.5 7.75 10.]

np.concatenate( [b,c] )  # [ 1.    4.    7.   10.    1.    3.25  5.5   7.75]

从字节流中创建

1.3 ndarray的变换
函数说明
.reshape(shape)不改变数组元素,返回一个shape形状的数组,原数组不变
.resize(shape)与reshape功能一致,但修改原数组
.swapaxes(ax1, ax2)将数组n个维度中两个维度进行调换,如2x3的数组变为3x2的数组
.flatten()对数组进行降维,返回一个折叠后的一维数组,原数组不变
.tolist()转为列表
.astype(new_type)改变元素类型,返回一个新数组,原数组不变
a = np.array( (2,3,4), dtype=np.int32 )
np.swapaxes( 0, 2)
a.astype(np.float32)  # 	[2. 3. 4.]
1.4 ndarray的操作——切片和索引
a = np.array([1,2,3,4,5])  # 一维数组
print(a[1:4:2])  # [2 4] 切片————起始编号:终止编号(不含):步长(每走2步取一个)

a = np.arange(24).reshape(2,3,4) # 多维数组
print(a)
'''[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]] '''
  
print(a[1,2,3]) # 23 第一个维度的第一个,第二个维度的第二个,第三个维度的第三个 
print(a[-1,-2,-3]) # 17
# 切片:
print( a[:, 1, -3] ) # [5,17] 不考虑第一个维度,即第一个维度的所有元素,考虑第二个取第1个,第三个维度取倒数第三个
print(:, 1:3, : ) # 不考虑第1和第3个维度。第二个维度取第1 2 号元素
'''[[[ 4  5  6  7]
  [ 8  9 10 11]]
  
 [[16 17 18 19]
  [20 21 22 23]]]'''

1.5 ndarray的计算
a = np.arange(24).reshape(2,3,4)
print(a.mean()) # 所有元素的算术平均值,即(0 + 1 + 2 +...+23)/24

一元函数说明
np.abs(x) np.fabs(x)计算数组x各元素的绝对值
np.sqrt(x)计算数组x各元素的平方根
np.square(x)计算数组x各元素的平方
np.log(x) np.log10(x) np.log2(x)计算数组x各元素的e底对数、10底对数、2底对数
np.ceil(x) np.floor(x)计算数组x各元素的向上取整、向下取整
np.rint(x)计算数组x各元素的四舍五入值
np.modf(x)将数组各元素的小数和整数部分以两个独立数组形式返回
np.cos(x) np.cosh(x) np.sin(x) np.sinh(x) np.tan(x) np.tanh(x)计算数组x各元素的普通型和双曲型的三角函数
np.exp(x)将数组各元素以e为底的指数值
np.sign(x)将数组各元素的符号值, 1(+),0,-1(-)
二元函数说明
+ - * /两个数组各元素进行对应运算
np.maximum(x, y) np.fmax() np.minimum(x, y) np.fmin()元素级的最大、最小值运算
np.mod(x, y)元素级的模运算
np.copysign(x, y)将数组y中各元素值的符号赋值给数组x对应元素
> = < != ==算术比较,产生布尔型数组
1.6 ndarray数组从文件存取
  1. 固定格式的数据存取

np.savetxt(fname, array, fmt=‘%.18e’, delimiter=’ ')

fname: 文件名称 ,如a.txt、 b.csv,可以是.gz .bz2的压缩文件
array:存入文件的数组
fmt:写入文件的格式,如:%d %.2f %.18e
delimiter:分割字符串,默认为任何空格

np.loadtxt(fname, dtype=np.float, delimiter=None, unpack=False)

fname:文件名称,可以是.gz .bz2的压缩文件
dtype:数据类型
delimiter:分割字符串,默认为任何空格
unpack:如果为True,读入属性将被拆分,分别写入不同变量

  1. numpy便捷存取

np.save(fname,array) 或 np.savez(fname, array):默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为 .npy 的文件中。

fname:文件名,以.npy为扩展名,压缩扩展名为.npz
array:数组变量

np.load(fname)

fname:文件名

  1. 对于多维数据的存取如下,将数据降维一维存入到文件中,因此在读的时候需要提前知道数据的维度以及格式。

x.tofile(fname, sep=‘’, format=‘%s’)

fname:文件名称
sep:数据分割字符串,如果是空串,即不指定,写入文件为二进制格式
format:写入数据的格式

np.fromfile(file, dtype=None, count=-1, sep=‘’)

file: 文件名称
dtype:读取的数据类型,默认float
count:读入元素个数,-1表示读入整个文件
sep:数据分割字符串,如果是空串,即不指定,读入文件为二进制格式

1.7 numpy随机数函数(numpy.random包中)
函数说明
np.random.rand(d0,d1,…,dn)根据d0-dn创建shape为(d0,d1,d2,…)的随机数数组,浮点数,[0,1),均匀分布
randn(d0,d1,…,dn)根据d0-dn创建shape为(d0,d1,d2,…)的随机数数组,标准正态分布
randint(low,high,size)根据size创建随机整数数组,范围为[low,high)
seed(s)指定随机数生成时所用算法开始的整数值,s是给定的种子值,如果使用相同的种子,则每次生成的随即数都相同
choice(a, size, replace, p)从一维数组a中以概率p抽取元素,形成size形状的新数组,replace表示是否可以重用已抽取的元素,默认为True
uniform(low,high,size)产生具有均匀分布的数组,low为起始值,high为结束值,size形状
normal(loc,scale,size)产生具有正态分布的数组,loc为均值,scale为标准差,size形状
poisson(lam,size)产生具有泊松分布的数组,lam随机事件发生概率,size形状
shuffle(a)根据数组a的第1轴进行随机排列(整体移动),改变数组a
permutation(a)根据数组a的第1轴产生一个新的乱序数组(整体移动),不改变数组a

在这里插入图片描述

1.8 numpy统计函数
函数说明
np.sum(a, axis=None)根据给定轴asix计算数组a相关元素的之和,axis整数或元组
np.mean(a, axis=None)根据给定轴asix计算数组a相关元素的期望,axis整数或元组
np.average(a, axis=None, weights=None)根据给定轴asix计算数组a相关元素的加权平均值,axis整数或元组
np.std(a, axis=None)根据给定轴asix计算数组a相关元素的标准差
np.var(a, axis=None)根据给定轴asix计算数组a相关元素的方差
np.min(a) np.max(a)计算数组a中的最大、最小值
np.argmin(a) np.argmax(a)计算数组a中的最大、最小值的降一维后下标
np.unravel_index(index, shape)根据shape将一维下标index转换成多维下标
np.ptp(a)计算数组a中的最大与最小值的差
np.median(a)计算数组a中元素的中位数
1.9 numpy梯度函数

np.gradient(f): 计算数组f中元素的梯度(连续值之间的变化率,即斜率),当f为多维时,返回每个维度梯度;
如,XY坐标轴连续三个X坐标对应的Y轴值:a,b,c,其中b的梯度为:(c-a)/2

  • 一维:

一维

  • 多维:
    多维

二 pandas

基于numpy实现,提供高性能易用数据类型和分析工具,两个重要数据类型:series、DataFrame。更关注数据应用表达

2.1 Series类型(一维数据类型)

由一组数据及与之相关的数据索引组成,可由列表、标量、字典、ndarray创建等 ,对Series的操作类似ndarray类型的操作。

import pandas as pd
pd.Series(data, index, dtype, name, copy)
# data:一组数据(ndarray 类型)。
# index:数据索引标签,如果不指定,默认从 0 开始。
# dtype:数据类型,默认会自己判断。
# name:设置名称。
# copy:拷贝数据,默认为 False。
2.2 DataFrame类型(二维数据类型)
  • axis = 1,1轴向右水平延伸,按行计算 ;axis = 0,0 轴垂直往下,按列计算
  • NaN与任何数据计算都为NaN
2.2.1 DataFrame索引

DataFrame类型索引分为行索引和列索引,由一个行索引+一个列索引可以确定唯一一个数据。行标签(index),列标签(column)。

  • loc:根据行标签索引
  • iloc:integer loc,用整数索引
  • ix:loc和iloc的综合版本,既可以按标签选取,又可以按位置选取
import pandas as pd

a = pd.DataFrame(data = {
  "height": [180, 175, 190],
  "weight": [140, 120, 170]
})
'''
   height  weight
0     180     140
1     175     120
2     190     170
0    180
1    175
2    190
'''
print(a)
print(a["height"])  # 取某一列
print(a.loc[0])     # 取某一行
print(a["height"][0])  # 取某一格  180
print(a.loc[0]["height"])     # 取某一格 180
2.3 Pandas数据类型操作
函数说明
.reindex()能够改变或者重排Series或DataFrame索引
.drop()删除某一行或某一列的数据,不改变原有df,生成新对象
import pandas as pd
a = pd.DataFrame(data = {
  "height": [180, 175, 190],
  "weight": [140, 120, 170]
})
'''
   height  weight
0     180     140
1     175     120
2     190     170
0    180
1    175
2    190
'''
# ---------drop--------------:
a.drop([0,1]) # 删除第0、1行
a.drop(["height"], axis=1)  # 删除height列,删除列时要加axis=1
# ---------reindex-----------:
a = a.reindex(columns=["weight", "height"], index=[1, 2, 0])
# index, columns:新的行、列自定义索引
# fill_value:重新索引中,用于填充数据缺失位置的值
# method:填充方法,ffill当前值向前填充,bfill当前值向后填充
# limit:最大填充量
# copy:默认True,更换索引后生成新的对象,False时,新旧相等不复制
'''
   weight  height
1     120     175
2     170     190
0     140     180
'''

Series和DataFrame的索引是Index类型,Index对象是不可以修改类型

索引类型的常用函数(df.index.xxx / df.columns.xxx)说明
.append(idx)连接另一个index对象,产生新的index对象
.diff(idx)计算差集,产生新的index对象
.intersection(idx)计算交集
.union(idx)计算并集
.delete(loc)删除loc位置的元素
.insert(loc, e)在loc位置增加一个元素e
2.4 Pandas数据类型运算
  • 算术运算:根据行、列索引,补齐后运算,运算默认产生浮点数。补齐时填充NaN(NaN与任何运算都是NaN),二维和一维(默认二维的每一与一维进行运算,函数中指定axis=0二维的每一与一维进行运算)、一维和零维间为广播运算。采用±*/进行的二元运算产生新的对象。
import numpy as np
import pandas as pd
a = pd.DataFrame(np.arange(12).reshape(3,4))
b = pd.DataFrame(np.arange(20).reshape(4,5))
print(a+b)
'''
      0     1     2     3   4
0   0.0   2.0   4.0   6.0 NaN
1   9.0  11.0  13.0  15.0 NaN
2  18.0  20.0  22.0  24.0 NaN
3   NaN   NaN   NaN   NaN NaN
'''
函数说明
.add(d, **argws)类型间加法运算,可选参数
.sub(d, **argws)类型间减法运算,可选参数
.mul(d, **argws)类型间乘法运算,可选参数
.div(d, **argws)类型间除法运算,可选参数
import numpy as np
import pandas as pd
a = pd.DataFrame(np.arange(12).reshape(3,4))
b = pd.DataFrame(np.arange(20).reshape(4,5))
print(a.add(b, fill_value = 0)) # 可以选择fill_value去替代NaN
'''
      0     1     2     3     4
0   0.0   2.0   4.0   6.0   4.0
1   9.0  11.0  13.0  15.0   9.0
2  18.0  20.0  22.0  24.0  14.0
3  15.0  16.0  17.0  18.0  19.0
'''
  • 比较运算:>、 <、 == 同维度运算,尺寸一致才可以,否则会报错;不同维度,广播运算,与上述广播机制一致。
2.5 Pandas数据排序
函数说明
.sort_index()在指定轴上根据索引进行排序,默认axis=0,升序
.sort_values()在指定轴上根据数值进行排序,默认axis=0,升序
import numpy as np
import pandas as pd
a = pd.DataFrame(np.arange(12).reshape(3,4))
a.sort_index(axis= 1, ascending=True) # 对a的列索引(columns)进行升序排序

Series.sort_values(axis=0,ascending=True)
DataFrame.sort_values(by, axis=0,ascending=True) # by:axis轴上的某个索引或索引列表

2.6 Pandas基本统计分析函数
函数说明
df.sum()计算数据的总和,默认按0轴计算,即每一行之和,下同
df.count()非NaN值的数量
df.mean() .median()计算数据的算数平均值、算术中位数
df.var() df.std()计算数据的方差、标准差
df.min() df.max()计算数据的最小值、最大值
df.describe()针对0轴(每一列)的统计汇总

只适用于Series

函数说明
.argmin() .argmax()计算数据最大值、最小值所在位置的索引位置(自动索引)
.idxmin() .idxmax()计算数据最大值、最小值所在位置的索引位置(自定义索引)
2.7 Pandas累计统计分析函数
函数说明
.cumsum()依次给出前1、2、…、n个数的和
.cumprod()依次给出前1、2、…、n个数的积
.cummax()依次给出前1、2、…、n个数的最大值
.cummin()依次给出前1、2、…、n个数的最小值
窗口计算函数说明
.rolling(w).sum()依次计算相邻(从该元素往上)w个元素的和,默认0轴,下同
.rolling(w).mean()依次计算相邻w个元素的算术平均值
.rolling(w).var()依次计算相邻w个元素的方差
.rolling(w).std()依次计算相邻w个元素的标准差
.rolling(w).min().max()依次计算相邻w个元素的最小值和最大值
2.8 数据相关分析

协方差:
在这里插入图片描述

函数说明
.cov()计算协方差矩阵
series1.corr( series2, method )计算相关系数矩阵,Pearson、Spearman、Kendall等系数,method可选Pearson等

三 matplotlib(暂无内容)

暂无内容

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值