Python基础(五)图标和数据处理

发布时间 2023-04-05 21:47:33作者: Kotlin

机器学习里面有很多场景需要图标展示,这简单介绍一下一个图表库

图表库

# #折线图
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.010.010.01])#饼图
plt.scatter([12345678], [149167112318]) #散点图
plt.boxplot([(10010200),(7030200),(8020200)])#箱型图
X, Y = np.meshgrid(np.linspace(0550), np.linspace(0540))
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,0234列=>423列  数组反转
print(array,np.rollaxis(array,2,0))  #将第2列放到第0列的前面
np.swapaxes(array,2,0234列=>432
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()