matplotlib、numpy、pandas库的基本操作(代码示例)

一、matplotlib

matplotlib是绘制数学图像的常用模块,用法和代码实例如下

(一)绘制折线图

#绘制简单的折线图,模块pyplot有许多用于生成图标的函数
import matplotlib.pyplot as plt
input_values=[1,2,4,5]#指定x轴的值
squares=[1,2,5,8]#指定y轴的值
#plt.plot(squares)
#修改线条大小
plt.plot(input_values,squares,linewidth=6)#plot函数可以指定各种实参
#图标标题和字体大小
plt.title("Wangchongqiang",fontsize=24)
#给坐标轴加上标签
plt.xlabel("Value",fontsize=15)
plt.ylabel("Square of value",fontsize=15)
#设置刻度标记的大小
plt.tick_params(axis='both',labelsize=15)
plt.show()#打开查看器,显示绘制的图形

输出如下:
代码输出样例

(二)绘制散点图

import matplotlib.pyplot as a
lista=[1,2,3,4,5]
listb=[1,4,9,16,25]
a.scatter(lista,listb,s=14)#实参s设置点的尺寸
a.title('Wangchongqiang',fontsize=28)
a.xlabel('Value',fontsize=28)
a.ylabel('square of value',fontsize=28)
a.tick_params(axis='botn',which='major',labelsize=888)

代码输出

二、numpy

numpy提供了大量的矩阵运算函数,使矩阵运算快速且简单。因为它内部是通过C语言。

(一)数组array

from numpy import array
m = array([1,2,3,4])
p = array([1,2,3,4])
j = array([1,2,3],[1,2,3])#多维数组
print(m,p)
print(m+p) #数组元素相加
print(m*2) #数组元素加倍
print(m**3) #数组元素乘方
print(m[1]) #数组元素查找
print(m*p) #数组中对应元素相乘

输出

[1 2 3 4] [1 2 3 4]
[2 4 6 8]
[2 4 6 8]
[ 1 8 27 64]
2
[ 1 4 9 16]

(二)矩阵matrix

import numpy as np
w = np.matrix([1,2,3]) 
s = np.mat([1,2,3])  #矩阵初始化,也可以用matrix(),mat是缩写
print(s,w)
print(s[0,1])        #访问矩阵元素,行和列
listwang = [1,2,3]
a = np.mat(listwang) #把列表转化为矩阵
print(a)
d = s.T              #矩阵转置
print(w*d)           #矩阵相乘
f = s.I              #矩阵求逆
print(f)
n = np.eye(4)        #得到一个4*4的单位矩阵
print(n)
np.shape(n)          #查询矩阵维数

[[1 2 3]] [[1 2 3]]
2
[[1 2 3]]
[[14]]
[[0.07142857]
[0.14285714]
[0.21428571]]
[[1. 0. 0. 0.]
[0. 1. 0. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 1.]]
(4, 4)

(三)用numpy求各种距离

(1)计算欧氏距离

d = ∑ k = 1 n ( x 1 k − x 2 k ) 2 d=\sqrt[]{\sum_{k=1}^n(x_{1k}-x_{2k})^{2}} d=k=1n(x1kx2k)2

vector1 = np.array([1,2,3])  
vector2 = np.array([4,5,6])  
op1=np.sqrt(np.sum(np.square(vector1-vector2)))  
#对应元素相减并用square()方法平方,再用sum()方法求和,最后用sqrt()方法开方
op2=np.linalg.norm(vector1-vector2)              
#这是矩阵的范数方法,二范数(默认,ord = 2),可直接求
print(op1)  
print(op2) 

输出

5.196152422706632
5.196152422706632

(2)计算曼哈顿距离

d = ∑ k = 1 n ∣ x 1 k − x 2 k ∣ d=\sum_{k=1}^n|x_{1k}-x_{2k}| d=k=1nx1kx2k

#曼哈顿距离
vector1 = np.array([1,2,3])  
vector2 = np.array([4,5,6])  
op3=np.sum(np.abs(vector1-vector2))  
op4=np.linalg.norm(vector1-vector2,ord=1)  #一范数,求绝对值的和
print(op3)
print(op4)

输出

9
9.0

(3)切比雪夫距离

d = max ⁡ i ( ∣ x 1 i − x 2 i ∣ ) d=\max_{i}(|x_{1i}-x_{2i}|) d=maxi(x1ix2i)
等价于
d = lim ⁡ k → ∝ ( ∑ k = 1 n ∣ x 1 i − x 2 i ∣ k ) 1 k d=\lim_{k\rightarrow\propto}(\sum_{k=1}^n|x_{1i}-x_{2i}|^{k})^{\frac{1}{k}} d=limkk=1nx1ix2ikk1

#切比雪夫距离
vector1 = np.array([1,2,3])  
vector2 = np.array([4,7,5])  
op5=np.abs(vector1-vector2).max()  
op6=np.linalg.norm(vector1-vector2,ord=np.inf)  #ord = np.inf是无穷范数
print(op5)  
print(op6)  

输出

5
5.0

(4)夹角余弦

c o s ( θ ) = ∑ k = 1 n x 1 k x 2 k ∑ k = 1 n x 1 k 2 ∑ k = 1 n x 2 k 2 cos(\theta)=\frac{\sum_{k=1}^nx_{1k}x_{2k}}{\sqrt[]{\sum_{k=1}^nx_{1k}^{2}}\sqrt[]{\sum_{k=1}^nx_{2k}^{2}}} cos(θ)=k=1nx1k2 k=1nx2k2 k=1nx1kx2k

vector1 = np.array([1,2,3])  
vector2 = np.array([4,7,5])  
op7=np.dot(vector1,vector2)/(np.linalg.norm(vector1)*(np.linalg.norm(vector2)))  #np.dot()方法是求点乘
print(op7) 

输出

0.9296696802013682

三、pandas

(一)Series对象

Series是一种一维数据结构,和Numpy数组类似,但可以为数据自定义标签。

import numpy as np
import pandas as pd
wang = ['liu','liao','su','xie']
chong = [1,2,3,4]
qiang = pd.Series(chong,wang)
"""
    Series(data,index),data可以是任何数据对象
    可省略index,此时默认用数值索引
    只传入字典,会把keyvalue设为索引
    访问和字典一样
"""
print(qiang)
xin = pd.Series([1,2,3,4],['ling','liu','su','xie'])
"""
    Series对象加减乘除时根据索引对应值,
    没有对应的索引会返回一个空值NaN
"""
print(xin*qiang)

输出

liu 1
liao 2
su 3
xie 4
dtype: int64
liao NaN
ling NaN
liu 2.0
su 9.0
xie 16.0
dtype: float64

(二)DataFrame(数据表)

DataFrame是多维数据结构,是Series的高级版本

1.根据字典和Series对象的组合初始化一个Dataframe对象

import numpy as np
import pandas as pd
dic = {
    "name":['wangshuai','xielao','suming'],
    "age":[19,19,18],
    "money":[100,38,250]
}
wang = pd.DataFrame(dic,[1,2,3])
print(wang)

输出

name age money
1 wangshuai 19 100
2 xielao 19 38
3 suming 18 250

(三)清洗数据

提取的数据中难免会有一些不符合我们的要求,pandas里的dropna()和fillna()方法可以做些修改。

import numpy as np
import pandas as pd
dicw = {
    'A':[1,2,3],
    'B':[np.nan,3,4],
    'C':[1,np.nan,6]
}
dfw = pd.DataFrame(dicw,[1,2,3])
print(dfw)
print(dfw.dropna(axis=1)) #删除含有NaN的行或者列,参数axis=0删行,axis=1删列
dfw.fillna('3')           #填充NaN值

输出

A B C
1 1 NaN 1.0
2 2 3.0 NaN
3 3 4.0 6.0
A
1 1
2 2
3 3
A B C
1 1 3 1
2 2 3 3
3 3 4 6

(四)数据统计

import pandas as pd
dicw = {
   '名字':['王帅','刘小','苏够','谢某','刘小','罗多'],
   '年龄':[19,18,18,19,18,2],
   '体重':[116,99,10,125,99,25],
   '身高':[170,165,168,171,165,50],
}
dfw = pd.DataFrame(dicw,[1,2,3,4,5,6])
print(dfw)
dfw.groupby('名字').describe().transpose()  #竖版
print(dfw.groupby('名字').describe() ) #可对数据进行统计

名字 年龄 体重 身高
1 王帅 19 116 170
2 刘小 18 99 165
3 苏够 18 10 168
4 谢某 19 125 171
5 刘小 18 99 165
6 罗多 2 25 50
体重 年龄 …
count mean std min 25% 50% 75% max count mean …
名字 …
刘小 2.0 99.0 0.0 99.0 99.0 99.0 99.0 99.0 2.0 18.0 …
王帅 1.0 116.0 NaN 116.0 116.0 116.0 116.0 116.0 1.0 19.0 …
罗多 1.0 25.0 NaN 25.0 25.0 25.0 25.0 25.0 1.0 2.0 …
苏够 1.0 10.0 NaN 10.0 10.0 10.0 10.0 10.0 1.0 18.0 …
谢某 1.0 125.0 NaN 125.0 125.0 125.0 125.0 125.0 1.0 19.0 …
身高
75% max count mean std min 25% 50% 75% max
名字
刘小 18.0 18.0 2.0 165.0 0.0 165.0 165.0 165.0 165.0 165.0
王帅 19.0 19.0 1.0 170.0 NaN 170.0 170.0 170.0 170.0 170.0
罗多 2.0 2.0 1.0 50.0 NaN 50.0 50.0 50.0 50.0 50.0
苏够 18.0 18.0 1.0 168.0 NaN 168.0 168.0 168.0 168.0 168.0
谢某 19.0 19.0 1.0 171.0 NaN 171.0 171.0 171.0 171.0 171.0
[5 rows x 24 columns]

四、官方文档链接

Numpy中文文档
Numpy英文文档
Pandas中文文档
Pandas英文文档
Matplotlib中文文档
Matplotlib英文文档
Scipy官方文档(英文,含Numpy,Pandas,Matplorlib的官方文档链接)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值