Python基础(五)图表和数据处理
机器学习里面有很多场景需要图标展示,这简单介绍一下一个图表库
图表库
# #折线图
import matplotlib.pyplot as plt
import numpy as np
plt.figure(figsize=(4,4)) #设置画布大小
plt.title("i am title") ##标题
plt.plot(np.arange(5),np.arange(6,11))#折线图
plt.bar(np.arange(5),np.arange(6,11))#条形图
plt.hist(np.random.randint(10,20,15))#直方图
plt.pie([10,40,50],labels=['11','22','33'],explode=[0.01, 0.01, 0.01])#饼图
plt.scatter([1, 2, 3, 4, 5, 6, 7, 8], [1, 4, 9, 16, 7, 11, 23, 18]) #散点图
plt.boxplot([(100, 10, 200),(70, 30, 200),(80, 20, 200)])#箱型图
X, Y = np.meshgrid(np.linspace(0, 5, 50), np.linspace(0, 5, 40))
Z = np.sin(X) ** 10 + np.cos(10 + Y * X * np.cos(X))
plt.contour(X,Y,Z,colors='black');#轮廓图
plt.show()
numpy 数据维度和矩阵运算的库
import numpy as np
array = np.array([1,2,3,4,5])
print(array)
print(type(array))
array = np.array([1,2,3.0,4,5]) #结果全部按照浮点了
print(array)
array = np.array([[1,2,3,4,5],[6,7,8,9]]) #两位数组
print(array)
array = np.array([1,2,3,4,5],ndmin=2) #结生成数组的最小维度 生成几维数组
print(array)
print(np.asarray([1,2,3,4,5]))#转换成array
print(np.asarray([1,2,3,4,5],dtype=np.str0)) #转换成array 限定参数类型
print(np.empty([3,2],dtype=np.int_)) #创建一个3行2列的数组
print(np.zeros([3,2],dtype=np.int_)) #创建一个3行2列的数组 默认值是0
print(np.ones([3,2],dtype=np.int_)) #创建一个3行2列的数组 默认值是1
print(np.full([3,2],fill_value=7,dtype=np.int_)) #创建一个3行2列的数组 默认值是7
print(np.eye(3,2,dtype=np.int_)) #创建一个3行2列的数组 对角线是1,其他是0
print(np.arange(start=1,stop=20,step=1,dtype=np.int_)) #创建一个一维数组
print(np.fromiter(iter([1,2,3,4,5]),dtype=np.int32)) #从可迭代对象中创建数组
print(np.linspace(1,100,num=5,dtype=np.int32)) #从等差数列中创建数组 num限定数量的数组
print(np.logspace(1,10,num=5,base=2,dtype=np.int32)) #从等比数列中创建数组 num限定数量的数组
print(np.random.rand(4,3,2)) #生成四个 三行两列随机数
print(np.random.random(5)) #生成随机数
print(np.random.randint(low=10,high=30,size=5)) #在[low,high)之间生成size个随机数
print(np.random.randn(4,3,2))#生成四个 三行两列具有正态分布的数据 0为均值 1为标准查的正态分布
print(np.random.normal(loc=1,scale=2,size=10))#生成均值为loc 标准查为scale 个数为size 高斯分布的随机数(就是正态分布)
numpy 效率和python效率对比
list=[]
for index in range(10000000):
list.append(np.random.random())
import time
t1=time.time()
print(sum(list),time.time()-t1)#0.0624
nplist=np.array(list)
t1=time.time()
print(nplist.sum(),time.time()-t1)#0.0156
数组属性
ndim:行 shape:矩阵的大小结果(2,3,4) size:元素的个数 dtype:元素的类型
itemsize:每个元素的大小 flags:内存信息 real:元素的实部 imag:元素的虚部
array = np.arange(24).reshape(2,3,4) #矩阵的重新划分
print(array,array.ndim,array.shape,array.size,array.dtype)
print(array.itemsize,array.flags,array.real,array.imag)
array = np.arange(24)
print(array[slice(2,20,2)],array[2:20:2]) #矩阵的切割,我只能看到一维的矩阵切割
array = np.arange(24).reshape(4,6)
print(array,array[1:3:1]) #多维数组切割 开始行,结束行,步长 按照最外层元素切割的
print(array,array[...,1],array[1:3,1]) #第一列
rows=np.array([[0,0],[3,3]])
cols=np.array([[0,2],[0,2]])
上下组成了索引的下标/1-3行 1-3列/所有行 1-3列
print(array,array[rows,cols],array[1:3,1:3],array[...,1:3])
array = np.arange(24).reshape(2,3,4)
array2=np.array((1,2,3))
print(array,array2,array+array2) #广播不同维度的数组相加
for x in np.nditer(array):#数据的迭代 顺序和原始顺序保持一致
print(x)
print(np.transpose(array)) #数组行列反转
np.rollaxis(array,2,0) 2个3行4列=>4个2行3列 数组反转
print(array,np.rollaxis(array,2,0)) #将第2列放到第0列的前面
np.swapaxes(array,2,0) 2个3行4列=>4个3行2列
print(array,np.swapaxes(array,2,0)) #将第2列放到第0列位置互换
array=np.array((1,2,3)) #修改数组的维度
print(np.broadcast_to(array,(10,3))) #将数组变成10行3列
array = np.arange(24).reshape(6,4)
print(np.expand_dims(array,axis=0)) #数组增加一个维度
array = np.arange(8).reshape(2,1,4)
print(array,np.squeeze(array,axis=1)) #数组删除一个维度 维度数必须为1 axis指定的元素必须为1
array1=np.arange(24).reshape(3,2,4)
array2=np.arange(24,48).reshape(3,2,4)
print("concatenate:",np.concatenate((array1,array2)),np.concatenate((array1,array2)).shape) #数据的union axis的轴可以不同(2,6,4)
print(np.stack((array1,array2),axis=2)) #按照固定方向堆叠 axis的轴可以不同(2, 3, 2, 4)
print("hstack:",np.hstack((array1,array2)),np.hstack((array1,array2)).shape) #按照第一个元素聚合 (3, 4, 4)
print("hstack:",np.vstack((array1,array2)),np.vstack((array1,array2)).shape) #按照第零个元素聚合 (6, 2, 4)
print(np.split(np.arange(24),3)) #切成3个相同的数据
print(np.split(np.arange(24),[4,9])) #从4的位置和9的位置切
print(np.arange(24).reshape(4,6),np.hsplit(np.arange(24).reshape(4,6),2)) #按照第二个元素切割
print(np.arange(24).reshape(4,6),np.vsplit(np.arange(24).reshape(4,6),2)) #按照第一个元素切割
array=np.arange(9).reshape(3,3)
print(np.resize(array,(6,16))) #数组元素的重新规划
print(np.append(array,(11,12,13))) #数组添加元素 默认变成一维数组
print(np.insert(array,5,(11,12,13))) #数组添加元素 默认变成一维数组
print(np.delete(array,1))
字符串操作
print(np.char.add(["abcd","1234"],["efgh","5678"])) #字符串数据相加
print(np.char.multiply(["abcd","1234"],3)) #重复数据个数
print(np.char.center(["abcd","1234"],20,"|")) #按照|填充字符串到100位,并居中
print(np.char.capitalize(["abcd","1234"])) #首字母大写
print(np.char.title(["abcd efgh","1234"])) #每个单词的首字母大写
print(np.char.lower(["ABCD EFGH","1234"])) #单词小写
print(np.char.upper(["abcd efgh","1234"])) #单词大写
print(np.char.split(["abcd efgh sdbr"]," ")) #切分字符串
print(np.char.splitlines(["abcd\nefgh\nsdbr"])) #换行符切分字符串
print(np.char.strip(["**ab*cd***"],"*")) #移除左右特殊字符
print(np.char.join(":",["abcd"])) #指定分隔符连接元素
print(np.char.replace(["abcd"],"b","l")) #b替换成l
print(np.char.encode(["abcd"],"utf-8"))
print(np.char.decode(np.char.encode(["abcd"],"utf-8"),"utf-8"))
数学函数
data=np.array([0,30,60,90])
print(np.sin(data/180))#正弦函数
print(np.cos(data/180))#余弦函数
print(np.tan(data/180))#正切函数
print(np.arcsin(data/180))#反正弦函数
print(np.arccos(data/180))#反余弦函数
print(np.arctan(data/180))#反正切函数
print(np.around(3.1415926,4))#四舍五入值
print(np.floor(3.5415926))#向下取整
print(np.ceil(3.1415926))#向上取整
算术函数
data1=np.arange(1,10).reshape(3,3)
data2=np.array([2,3,4])
print(data1,np.add(data1,data2))#数组相加
print(data1,np.subtract(data1,data2))#数组相减
print(data1,np.multiply(data1,data2))#数组相乘
print(data1,np.divide(data1,data2))#数组相除
print(data1,np.reciprocal(data2))#数组倒数
第一个数组中元素作为底数,计算第二个数组值
print(data1,np.power(data1,data2))
print(np.mod(data1,data2)) #余数
print(np.remainder(data1,data2)) #余数
统计函数
data1=np.arange(12).reshape(1,12)
print(data1,np.amin(data1,0),np.amin(data1,1))#按照行行之间 列列之间取最小值
print(data1,np.amax(data1,0),np.amax(data1,1))#按照行行之间 列列之间取最大值
print(np.max(data1,0),np.max(data1,1))#按照行行之间 列列之间取最小值
print(np.min(data1,0),np.min(data1,1))#按照行行之间 列列之间取最大值
print(data1,np.ptp(data1,0),np.ptp(data1,1))#按照行行之间 列列之间最大值最小值差
print(data1,np.percentile(data1,25,0))#按照行行之间 大于25的数
print(data1,np.percentile(data1,25,1)) #按照列列之间 大于25的数
print(np.median(data1,0),np.median(data1,1)) #按照行行之间 列列之间中位数
print(np.mean(data1,0),np.mean(data1,1)) #按照行行之间 列列之间平均值
print(np.average(data1,weights=data1)) #加权平均值
print(np.average(data1,axis=1,weights=data1)) #按照行行之间 列列之间加权平均值
print(np.std(data1)) #标准差
print(np.var(data1)) #方差
排序函数
data=np.random.random(12).reshape(3,4)
print(data,np.sort(data,axis=0))#排序
print(data,np.argsort(data,axis=0))#
搜索函数
data=np.arange(12).reshape(3,4)
print(np.argmax(data,axis=0),np.argmax(data,axis=1))#按照行行之间 列列之间取最小值的索引
print(np.argmin(data,axis=0),np.argmin(data,axis=1))#按照行行之间 列列之间取最大值的索引
print(np.nonzero(data))#非零的索引 两个array组合
print(np.where(data>5))#满足条件的索引 两个array组合
con=np.mod(data,2)==0
print(np.extract(con,data))#根据条件抽取元素 两个array组合
拷贝函数
data=np.arange(12).reshape(3,4)
data1=data #之间不会新生成数据
print(id(data),id(data1))
data1=data.view() #之间空间是新申请的,但是操作会同步
print(id(data),id(data1)) #shape 可以不相同
data1=data.copy() #之间空间是新申请的,操作不同步
print(id(data),id(data1))
IO函数
data=np.arange(12).reshape(3,4)
np.save("D:\data\\aa.npy",data) #将数据保存为文件
print(np.load("D:\data\\aa.npy")) #从文件中读取数据
np.savez("D:\data\\aa.npz",data,data,data) #保存多个数组
result = np.load("D:\data\\aa.npz")
print(result["arr_0"],result["arr_1"],result["arr_2"]) #读取多个数组
np.savetxt("D:\data\\aa.txt",data)
data_read = np.loadtxt("D:\data\\aa.txt")
print(data_read)
pandas
import pandas as pd
import matplotlib.pyplot as plt
data = pd.read_csv('C:\\Users\\xiaolong.wu\\Desktop\\result.csv')
data1 = pd.read_csv('C:\\Users\\xiaolong.wu\\Desktop\\result.csv')
data_all = pd.concat([data, data1]) #按照行进行拼接
data_all.dropna(axis = 1,inplace=True) #删除空行
# print(data_all['scorecard_score'].mean()) #平均值函数
# print(data_all['scorecard_score'].value_counts()) #值统计函数
score_detail=data_all['scorecard_score'].value_counts()
score_detail.plot(kind='line',color='red')#显示折线图
#score_detail.plot(kind='bar')
data = pd.read_csv('C:\\Users\\xiaolong.wu\\Desktop\\result.csv')
data1 = pd.read_csv('C:\\Users\\xiaolong.wu\\Desktop\\result.csv')
data_all = pd.concat([data, data1]) #按照行进行拼接
data_all.dropna(axis = 1,inplace=True) #删除空行
score_detail=data_all['scorecard_score'].value_counts()
score_detail.plot(kind='bar',color=['#E0EEE0'],fontsize=10)#显示折线图
plt.title("score+user",color='red')#图表名称
plt.xlabel("user count",fontsize=10)#X名称
plt.ylabel("score",fontsize=12)#Y名称
样例
import pandas as pd
import matplotlib.pyplot as plt
plt.subplot(221)#设置一个两行两列的子图,现在是第一个
data = pd.read_csv('C:\\Users\\xiaolong.wu\\Desktop\\result.csv')
data.drop_duplicates() #删除重复的数据
data.dropna(axis=0,how="any",inplace=True) #有空值整行删除,替换原数据
data.drop(columns=["delete_column"],inplace=True,axis=0) #删除 需要删除的列
data.groupby(["a","b"]).size()#group 操作
data.reset_index(drop=True,inplace=True)#删除index 重置index
data.describe() #标准差 最大最小值 分位数
data["new_column"]="1234" #新增列
data.info() #显示数据的列
def data_del(number=""):
if number.find("a") != -1:
print(float(number.replace("a",""))*100)
else:
print(float(number)*10)
data_del("a232")
# data["jine"].map
# print(data.info)
# data["count"]=1
# data["date"]=pd.to_datetime(data["date"])
# data["hour"]=data["date"].map(lambda x:x.hour)
# sortdata = data[["scorecard_score","sim_cnt"]].groupby("scorecard_score").sum().sort_values("scorecard_score",ascending=False)
# sortdata.plot(kind='bar',color=['#E0EEE0'],fontsize=10)
data.plot(kind='scatter',x="",y="") #用户的散点图
# plt.show()
搬砖多年终不得要领,遂载源码看之望得真经。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 我与微信审核的“相爱相杀”看个人小程序副业
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求