引言
numpy库简介
NumPy是Python中科学计算的基础包。它是一个Python库,提供多维数组对象,各种派生对象(如掩码数组和矩阵),以及用于数组快速操作的各种API,有包括数学、逻辑、形状操作、排序、选择、输入输出、离散傅立叶变换、基本线性代数,基本统计运算和随机模拟等等。
pandas库简介
Pandas 是 Pythonopen in new window 的核心数据分析支持库,提供了快速、灵活、明确的数据结构,旨在简单、直观地处理关系型、标记型数据。Pandas 的目标是成为 Python 数据分析实践与实战的必备高级工具,其长远目标是成为最强大、最灵活、可以支持任何语言的开源数据分析工具。经过多年不懈的努力,Pandas 离这个目标已经越来越近了。
matplotlib库简介
Matplotlib是一个Python 2D绘图库,它以多种硬拷贝格式和跨平台的交互式环境生成出版物质量的图形。 Matplotlib可用于Python脚本,Python和IPythonopen in new window Shell、Jupyteropen in new window笔记本,Web应用程序服务器和四个图形用户界面工具包。
目录
查看数组有多少个数据,用index进行查询、将数组转化为1维数组
numpy基础操作
创建数组
#将列表转化为数组,里面的range函数可以看做为一个for循环创建的列表
t1 = np.array(range(12),dtype="float32")#dtype参数更改数组中数据的类型
t8 = np.array([range(10),range(10,20)])
#和上面的语句相同,但语句更简洁
t2 = np.arange(10)
调整数据类型
#调整数据类型
t3 = t2.astype("bool")
保留小数
#保留小数
t5 = np.round(t4,2)
查看数组类型、数组中数据类型、查看数组形状
print(type(t4))
print(t4.dtype)
print(t1.shape)
将数组形状进行重组
#再数组创建后进行重组
t6 = t1.reshape((3,4))
#在数组创建时进行重组
t7 = np.array(range(27)).reshape(3,3,3)
查看数组有多少个数据,用index进行查询、将数组转化为1维数组
print(t7.shape[0]*t7.shape[1]*t7.shape[2])
t7 = t7.reshape((t7.shape[0]*t7.shape[1]*t7.shape[2],))
t7 = t7.flatten()
数组运算
t7 = np.array(range(27)).reshape(3,3,3)
t9 = np.array(range(27,54)).reshape(3,3,3)
t10 = np.array(range(3))
t11 = np.array(range(3)).reshape(3,1)
#数组运算,必须相同维度或者符合从后往前一个维度相同(其余维度为1)
print(t9 - t7)
print(t9 - t7)
print(t9 * t7)
print(t9 / t7)
print(t9 - t10)
print(t9 - t11)
numpy读取文件数据
t12 = np.loadtxt(path,delimiter=',',dtype='int',unpack=False,skiprows=1,usecols=(0,1,2))
#path文件路径、delimiter分隔符、dtype导入数据的类型、unpack是否转置、skiprows跳过前几行、usecols读取指定列
转置
t13 = np.array(range(12)).reshape(3,4)
t13 = t13.T
t13 = t13.swapaxes(1,0)
t13 = t13.transpose()
取指定行或列
#取指定行
a = t12[0]
a = t12[1,:]
#取连续几行
a = t12[2:5]
a = t12[2:5,:]
#取不连续几行
a = t12[[1,2,5]]
a = t12[[1,2,5],:]
#取指定列
a = t12[:,1]
#取连续几列
a = t12[:,1:3]
#取不连续几列
a = t12[:,[0,2]]
#取指定行列的值
a = t12[1,2]
#取多行多列的值
# a = t12[1:5,1:3]
#取多个不相邻的值
a = t12[[1,2,5,8],[1,0,2,0]]
值的修改
t13[0,3] = 0
t13[1:,:] = 0
t13[t13<6] = 0
t13 = np.where(t13<6,0,1)
t13 = t13.clip(4,7)
t13 = t13.astype("float")
t13[1,3] = np.nan
数组拼接
# 数组拼接
t14 = np.array(range(6))
t15 = np.array(range(10,16))
#竖直拼接
a = np.vstack((t14,t15))
#水平拼接
a = np.hstack((t14,t15))
数组交换行、列
#数组交换两行
a[[0,1],:] = a[[1,0],:]
#数组交换两列
a[:,[1,4]] = a[:,[4,1]]
获取数组中的最大、小值的位置
#获取数组中的最大值的位置
b = np.argmax(a,axis=1)#axis参数表示行或列(0列,1行)
#获取数组中的最小值的位置
b = np.argmin(a,axis=1)#axis参数表示行或列(0列,1行)
简介创建数组
#创建一个全为0的数组
a = np.zeros(10,2)
#创建一个全为1的数组
a = np.ones(10,5)
#创建一个标准数组
a = np.eye(10)
print(a)
#创建一个均匀分布随机的数组
a = np.random.rand(3,4)
#创建一个标准正态分布的数组
a = np.random.randn(3,4)
#从给定的上下限中取随机数产生一个数组
a = np.random.randint(0,10,(3,3))
#从给定的上下限中取值生产一个均匀分布的数组
a = np.random.uniform(0,10,(3,4))
#生产一个正态分布的数组
a = np.random.normal(1,2,(3,4))
print(a)
随机种子
#随机种子
a = np.random.seed(1)
#生产一个正态分布的数组
a = np.random.normal(1,2,(3,4))
print(a)
#随机种子表示,从第一个随机数被取定之后,随机数不会发生改变
数组计算
# 统计数组中nan的个数
t16 = np.arange(15).reshape(3,5)
t16 = t16.astype("float")
t16[:,0] = np.nan
a = np.count_nonzero(t16!=t16)
a = np.count_nonzero(np.isnan(t16))
# 数组求和(行0,列1)
a = t16.sum(axis=0)
# 数组求均值
a = t16.mean(axis = 0)
# 数组求中值
a = np.median(t16,axis = 0)
# 数组求最大值
a = t16.max(axis=0)
# 数组求最小值
a = t16.min(axis = 0)
# 数组求极值
a = np.ptp(t16,axis = 0)
# 数组求标准差
a = t16.std(axis = 0)
将数组中为nan的值替换
t17 = np.arange(15).reshape(3,5).astype("float")
t17[1,:] = np.nan
t17[1,1] = 0
def mean_exchange(t):
for i in range(t.shape[1]):
a = np.count_nonzero(t[:,i] != t[:,i])
if a != 0:
mean_val = t[:,i][t[:,i]==t[:,i]].mean()
# t[:,i][np.isnan(t[:,i])] = mean_val
t[:,i][t[:,i]!=t[:,i]] = mean_val
return t
if __name__ == '__main__':
print(mean_exchange(t17))
pandas基础操作
创建一维列表,series
t1 = pd.Series(range(10),index=list("abcdefghij")) #index索引
set1 = {"age":18,"name":'xsw',"gender":"n"}
t2 = pd.Series(set1)
通过索引找值
t1 = pd.Series(range(10),index=list("abcdefghij")) #index索引
#查看类型
print(type(t1))
#通过索引找值
print(t1[:2])
print(t1["a"])
print(t1[["a","d"]])
print(t1[t1>7])
#查看索引,索引可通过for遍历
print(t1.index)
#查看值,值可通过for遍历
print(t1.values)
pandas读取数据
data1 = pd.read_csv("C:/pythonProject/test.csv")
pandas多维列表操作,dataframe
t3 = pd.DataFrame(np.arange(12).reshape(3,4),index=list("abc"),columns=list("XSWD"))
set2 = {"age":[18,50,30],"name":['xsw','sda','lfk'],"gender":["n","n","g"]}
t4 = pd.DataFrame(set2)
li1 = [{"age":18,"name":'xsw',"gender":"n"},{"age":50,"name":'sda',"gender":"n"},{"age":30,"name":'lfk',"gender":"g"}]
t5 = pd.DataFrame(li1)
dataframe基础属性
df1 = pd.read_csv("C:/pythonProject/你的名字.csv")
print(df1.shape) #查看行列数
print(df1.dtypes) #查看列数据类型
print(df1.ndim) #查看数据维度
print(df1.columns) #查看列索引
print(df1.values) #查看对象值
dataframe整体情况查询
df1 = pd.read_csv("C:/pythonProject/你的名字.csv")
print(df1.head(3)) #指定查询前几行
print(df1.tail(3)) #指定查询后几行
print(df1.describe()) #快速综合统计结果
print(df1.info()) #相关信息概览
dataframe排序方法
df1 = pd.read_csv("C:/pythonProject/你的名字.csv")
data4 = df1.sort_values(by="出现时间点",ascending=False) #ascending为True升序、False降序
pandas取行或者列,字符串为列、数字为行
df1 = pd.read_csv("C:/pythonProject/你的名字.csv")
print(df1[:20]) #通过索引取前几行数据
print(df1["出现时间点"]) #通过标签取列数据
pandas之loc
df1 = pd.read_csv("C:/pythonProject/你的名字.csv")
#pandas之loc,通过标签索引行数据
print(df1.loc[0,"出现时间点"])
print(df1.loc[0])
print(df1.loc[:,"出现时间点"])
print(df1.loc[0:10,"出现时间点":"用户ID"])
print(df1.loc[[0,3],["出现时间点","模式","字体"]])
#pandas之iloc,通过位置获取行数据
print(df1.iloc[0,1])
print(df1.iloc[0])
print(df1.iloc[:,1])
print(df1.iloc[0:10,0:2])
print(df1.iloc[[0,3],[0,2,4]])
pandas之布尔索引操作
df1 = pd.read_csv("C:/pythonProject/你的名字.csv")
#单条件选值
df2 = df1[df1["出现时间点"] > 4000]
# #多条件选值
df3 = df1[(df1["出现时间点"] > 4000) & (df1["模式"] == 5)]
#切割
df4 = df1["出现时间点"].str().split(".").tolist()
#判断数据是否为Nan
t16 = np.arange(15).reshape(3,5)
t16 = t16.astype("float")
t16[:,0] = np.nan
df5 = pd.DataFrame(t16)
#判断数据是否为Nan,如果是就返回True,否则返回False
d1 = pd.isnull(df5)
# #判断数据是否为Nan,如果是就返回False,否则返回True
d2 = pd.notnull(df5)
#删除Nan所在行
df6 = df5.dropna(axis=0,how="all",inplace=False)
#axis表示对行或者列进行操作,how为all表示全部数值为nan时进行删除,为any只要有一个为nan就进行删除,inplace是否进行替代
#填充数据
df7 = df6.fillna(df6.mean(axis=1))
#如果数据为0表示缺失值
df6[df6==0] = np.nan
#按行或者列累加
df6 = df6.cumsum(axis=0)
matplotlib基础操作
数据可视化可显示中文
#数据可视化可显示中文
plt.rcParams['font.family'] = 'SimHei'
记录x、y轴数据
#记录x、y轴数据
x = [i for i in range(1,25)]
y = [24,25,33,35,32,21,10,16,24,25,33,35,32,21,10,16,24,25,33,35,32,21,10,16]
修改画布大小
#修改画布大小
plt.figure(figsize=(20,8),dpi=80)#figsize画布大小,dpi清晰度
折线图
plt.plot(x,y,label = "第一天",color='r',linestyle = '--',linewidth = 5,alpha = 0.5)
#label参数添加标识,color参数添加颜色,linestyle参数调节线条风格,linewidth参数调整线条宽度,alpha调整线条透明度
plt.plot(x,y_1,label = "第二天",color='b')
注:饼图pie、直方图hist、水平条形图barh、竖直条形图bar、散点图scatter等等,需要其它图可以去官网查找相应函数。
图形相关处理
#显示x轴刻度
x_label = ["{}小时".format(i) for i in x]
plt.xticks(x,x_label,rotation = 90)#将x_label显示在x对应的位置上,rotation坐标显示旋转
#显示y轴刻度
plt.yticks([i for i in range(1,max(y)+1)])
网格线设置
plt.grid(alpha = 1)#alpha参数为网格线透明度设置
设置图形详细信息
plt.xlabel('时间')
plt.ylabel('温度')
plt.title('一天的温度变化情况')
添加图例
plt.legend(loc = "upper left")#loc参数调整图列的位置
保存图表
plt.savefig('./graph1')
显示图表
plt.show()
折线图绘制
from matplotlib import pyplot as plt
#数据可视化可显示中文
plt.rcParams['font.family'] = 'SimHei'
#记录x、y轴数据
x = [i for i in range(1,25)]
y = [24,25,33,35,32,21,10,16,24,25,33,35,32,21,10,16,24,25,33,35,32,21,10,16]
y_1 = [i for i in range(1,25)]
#修改画布大小
plt.figure(figsize=(20,8),dpi=80)#figsize画布大小,dpi清晰度
#折线图
plt.plot(x,y,label = "第一天",color='r',linestyle = '--',linewidth = 5,alpha = 0.5)
#label参数添加标识,color参数添加颜色,linestyle参数调节线条风格,linewidth参数调整线条宽度,alpha调整线条透明度
plt.plot(x,y_1,label = "第二天",color='b')
#对图形进行相关处理
#显示x轴刻度
x_label = ["{}小时".format(i) for i in x]
plt.xticks(x,x_label,rotation = 90)#将x_label显示在x对应的位置上,rotation坐标显示旋转
#显示y轴刻度
plt.yticks([i for i in range(1,max(y)+1)])
#网格线设置
plt.grid(alpha = 1)#alpha参数为网格线透明度设置
#设置图形详细信息
plt.xlabel('时间')
plt.ylabel('温度')
plt.title('一天的温度变化情况')
#添加图例
plt.legend(loc = "upper left")#loc参数调整图列的位置
#保存图表
plt.savefig('./graph1')
#显示图表
plt.show()
饼图绘制
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
title = ['food','education','clothes','car','others']
timelong = [2000,5000,1000,2000,1000]
e = (0.1,0,0.1,0.2,0.2)
color = ['b','r','g','y','orchid']
plt.pie(timelong,explode=e,labels=title,colors=color,startangle=30,autopct='%1.3f%%')
plt.title('时间安排')
plt.legend(loc = "upper left")
plt.show()
散点图绘制
from matplotlib import pyplot as plt
#数据可视化可显示中文
plt.rcParams['font.family'] = 'SimHei'
#记录x、y轴数据
x = [i for i in range(1,25)]
y = [24,25,33,35,32,21,10,16,24,25,33,35,32,21,10,16,24,25,33,35,32,21,10,16]
y_1 = [i for i in range(1,25)]
#修改画布大小
plt.figure(figsize=(20,8),dpi=80)#figsize画布大小,dpi清晰度
#折线图
plt.scatter(x,y,label = "第一天",color='r',linewidth = 5,alpha = 0.5)
#label参数添加标识,color参数添加颜色,linestyle参数调节线条风格,linewidth参数调整线条宽度,alpha调整线条透明度
plt.scatter(x,y_1,label = "第二天",color='b')
#对图形进行相关处理
#显示x轴刻度
x_label = ["{}小时".format(i) for i in x]
plt.xticks(x,x_label,rotation = 90)#将x_label显示在x对应的位置上,rotation坐标显示旋转
#显示y轴刻度
plt.yticks([i for i in range(1,max(y)+1)])
#设置图形详细信息
plt.xlabel('时间')
plt.ylabel('温度')
plt.title('一天的温度变化情况')
#添加图例
plt.legend(loc = "upper left")#loc参数调整图列的位置
#保存图表
plt.savefig('./graph1')
#显示图表
plt.show()
柱状图绘制
from matplotlib import pyplot as plt
#数据可视化可显示中文
plt.rcParams['font.family'] = 'SimHei'
#记录x、y轴数据
x = [i for i in range(1,25)]
y = [24,25,33,35,32,21,10,16,24,25,33,35,32,21,10,16,24,25,33,35,32,21,10,16]
y_1 = [i for i in range(1,25)]
#修改画布大小
plt.figure(figsize=(20,8),dpi=80)#figsize画布大小,dpi清晰度
#纵向条形图
plt.barh(x,y,label = "第一天",color='r',width=0.2,alpha = 0.5)
#label参数添加标识,color参数添加颜色,alpha调整线条透明度,width参数为条形图宽度
plt.barh(x,y_1,label = "第二天",color='b',width=0.2,alpha = 0.5)
#横向条形图
plt.barh(x,y,label = "第一天",color='r',height=0.2,alpha = 0.5)
#label参数添加标识,color参数添加颜色,alpha调整线条透明度,width参数为条形图宽度
plt.barh(x,y_1,label = "第二天",color='b',height=0.2,alpha = 0.5)
#对图形进行相关处理
#显示x轴刻度
x_label = ["{}小时".format(i) for i in x]
plt.xticks(x,x_label,rotation = 90)#将x_label显示在x对应的位置上,rotation坐标显示旋转
#显示y轴刻度
plt.yticks([i for i in range(1,max(y)+1)])
#网格线设置
plt.grid(alpha = 1)#alpha参数为网格线透明度设置
#设置图形详细信息
plt.xlabel('时间')
plt.ylabel('温度')
plt.title('一天的温度变化情况')
#添加图例
plt.legend(loc = "upper left")#loc参数调整图列的位置
#保存图表
plt.savefig('./graph1')
#显示图表
plt.show()
直方图绘制
import numpy as np
from matplotlib import pyplot as plt
#数据可视化可显示中文
plt.rcParams['font.family'] = 'SimHei'
#记录x数据
x = np.random.randint(2,100,200)
#组距
distance = 10
#修改画布大小
plt.figure(figsize=(20,8),dpi=80)#figsize画布大小,dpi清晰度
#绘制频数直方图
plt.hist(x,(max(x)-min(x))//distance)
#label参数添加标识,color参数添加颜色,alpha调整线条透明度,width参数为条形图宽度
#绘制频率直方图
plt.hist(x,(max(x)-min(x))//distance,density=True)
# #对图形进行相关处理
# #显示x轴刻度
plt.xticks(range(min(x),max(x)+distance,distance))#将x_label显示在x对应的位置上,rotation坐标显示旋转
#网格线设置
plt.grid(alpha = 1)#alpha参数为网格线透明度设置
#设置图形详细信息
plt.xlabel('时间')
plt.ylabel('温度')
plt.title('一天的温度变化情况')
#添加图例
plt.legend(loc = "upper left")#loc参数调整图列的位置
#保存图表
plt.savefig('./graph1')
#显示图表
plt.show()
接下来还会更新关于数据分析的文章,期待下一篇关于数据分析的文章吧!
在这里谢谢小伙伴们的支持啦!