当前位置:   article > 正文

python数据分析三大基础库--(numpy、pandas、matplotlib)_numpy掩码或pandas掩码

numpy掩码或pandas掩码

引言

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应用程序服务器和四个图形用户界面工具包。

目录

引言

numpy库简介

pandas库简介

matplotlib库简介

numpy基础操作

创建数组

调整数据类型

保留小数

查看数组类型、数组中数据类型、查看数组形状

将数组形状进行重组

查看数组有多少个数据,用index进行查询、将数组转化为1维数组

数组运算

numpy读取文件数据

转置

取指定行或列

值的修改

数组拼接

数组交换行、列

获取数组中的最大、小值的位置

简介创建数组

随机种子

数组计算

将数组中为nan的值替换

pandas基础操作

创建一维列表,series

通过索引找值

pandas读取数据

pandas多维列表操作,dataframe

dataframe基础属性

dataframe整体情况查询

dataframe排序方法

pandas取行或者列,字符串为列、数字为行

pandas之loc

pandas之布尔索引操作

matplotlib基础操作

数据可视化可显示中文

记录x、y轴数据

修改画布大小

折线图

图形相关处理

网格线设置

设置图形详细信息

添加图例

保存图表

显示图表

折线图绘制

饼图绘制

散点图绘制

柱状图绘制

直方图绘制


numpy基础操作

创建数组

  1. #将列表转化为数组,里面的range函数可以看做为一个for循环创建的列表
  2. t1 = np.array(range(12),dtype="float32")#dtype参数更改数组中数据的类型
  3. t8 = np.array([range(10),range(10,20)])
  4. #和上面的语句相同,但语句更简洁
  5. t2 = np.arange(10)

调整数据类型

  1. #调整数据类型
  2. t3 = t2.astype("bool")

保留小数

  1. #保留小数
  2. t5 = np.round(t4,2)

查看数组类型、数组中数据类型、查看数组形状

  1. print(type(t4))
  2. print(t4.dtype)
  3. print(t1.shape)

将数组形状进行重组

  1. #再数组创建后进行重组
  2. t6 = t1.reshape((3,4))
  3. #在数组创建时进行重组
  4. t7 = np.array(range(27)).reshape(3,3,3)

查看数组有多少个数据,用index进行查询、将数组转化为1维数组

  1. print(t7.shape[0]*t7.shape[1]*t7.shape[2])
  2. t7 = t7.reshape((t7.shape[0]*t7.shape[1]*t7.shape[2],))
  3. t7 = t7.flatten()

数组运算

  1. t7 = np.array(range(27)).reshape(3,3,3)
  2. t9 = np.array(range(27,54)).reshape(3,3,3)
  3. t10 = np.array(range(3))
  4. t11 = np.array(range(3)).reshape(3,1)
  5. #数组运算,必须相同维度或者符合从后往前一个维度相同(其余维度为1)
  6. print(t9 - t7)
  7. print(t9 - t7)
  8. print(t9 * t7)
  9. print(t9 / t7)
  10. print(t9 - t10)
  11. print(t9 - t11)

numpy读取文件数据

  1. t12 = np.loadtxt(path,delimiter=',',dtype='int',unpack=False,skiprows=1,usecols=(0,1,2))
  2. #path文件路径、delimiter分隔符、dtype导入数据的类型、unpack是否转置、skiprows跳过前几行、usecols读取指定列

转置

  1. t13 = np.array(range(12)).reshape(3,4)
  2. t13 = t13.T
  3. t13 = t13.swapaxes(1,0)
  4. t13 = t13.transpose()

取指定行或列

  1. #取指定行
  2. a = t12[0]
  3. a = t12[1,:]
  4. #取连续几行
  5. a = t12[2:5]
  6. a = t12[2:5,:]
  7. #取不连续几行
  8. a = t12[[1,2,5]]
  9. a = t12[[1,2,5],:]
  10. #取指定列
  11. a = t12[:,1]
  12. #取连续几列
  13. a = t12[:,1:3]
  14. #取不连续几列
  15. a = t12[:,[0,2]]
  16. #取指定行列的值
  17. a = t12[1,2]
  18. #取多行多列的值
  19. # a = t12[1:5,1:3]
  20. #取多个不相邻的值
  21. a = t12[[1,2,5,8],[1,0,2,0]]

值的修改

  1. t13[0,3] = 0
  2. t13[1:,:] = 0
  3. t13[t13<6] = 0
  4. t13 = np.where(t13<6,0,1)
  5. t13 = t13.clip(4,7)
  6. t13 = t13.astype("float")
  7. t13[1,3] = np.nan

数组拼接

  1. # 数组拼接
  2. t14 = np.array(range(6))
  3. t15 = np.array(range(10,16))
  4. #竖直拼接
  5. a = np.vstack((t14,t15))
  6. #水平拼接
  7. a = np.hstack((t14,t15))

数组交换行、列

  1. #数组交换两行
  2. a[[0,1],:] = a[[1,0],:]
  3. #数组交换两列
  4. a[:,[1,4]] = a[:,[4,1]]

获取数组中的最大、小值的位置

  1. #获取数组中的最大值的位置
  2. b = np.argmax(a,axis=1)#axis参数表示行或列(0列,1行)
  3. #获取数组中的最小值的位置
  4. b = np.argmin(a,axis=1)#axis参数表示行或列(0列,1行)

简介创建数组

  1. #创建一个全为0的数组
  2. a = np.zeros(10,2)
  3. #创建一个全为1的数组
  4. a = np.ones(10,5)
  5. #创建一个标准数组
  6. a = np.eye(10)
  7. print(a)
  8. #创建一个均匀分布随机的数组
  9. a = np.random.rand(3,4)
  10. #创建一个标准正态分布的数组
  11. a = np.random.randn(3,4)
  12. #从给定的上下限中取随机数产生一个数组
  13. a = np.random.randint(0,10,(3,3))
  14. #从给定的上下限中取值生产一个均匀分布的数组
  15. a = np.random.uniform(0,10,(3,4))
  16. #生产一个正态分布的数组
  17. a = np.random.normal(1,2,(3,4))
  18. print(a)

随机种子

  1. #随机种子
  2. a = np.random.seed(1)
  3. #生产一个正态分布的数组
  4. a = np.random.normal(1,2,(3,4))
  5. print(a)
  6. #随机种子表示,从第一个随机数被取定之后,随机数不会发生改变

数组计算

  1. # 统计数组中nan的个数
  2. t16 = np.arange(15).reshape(3,5)
  3. t16 = t16.astype("float")
  4. t16[:,0] = np.nan
  5. a = np.count_nonzero(t16!=t16)
  6. a = np.count_nonzero(np.isnan(t16))
  7. # 数组求和(行0,列1)
  8. a = t16.sum(axis=0)
  9. # 数组求均值
  10. a = t16.mean(axis = 0)
  11. # 数组求中值
  12. a = np.median(t16,axis = 0)
  13. # 数组求最大值
  14. a = t16.max(axis=0)
  15. # 数组求最小值
  16. a = t16.min(axis = 0)
  17. # 数组求极值
  18. a = np.ptp(t16,axis = 0)
  19. # 数组求标准差
  20. a = t16.std(axis = 0)

将数组中为nan的值替换

  1. t17 = np.arange(15).reshape(3,5).astype("float")
  2. t17[1,:] = np.nan
  3. t17[1,1] = 0
  4. def mean_exchange(t):
  5. for i in range(t.shape[1]):
  6. a = np.count_nonzero(t[:,i] != t[:,i])
  7. if a != 0:
  8. mean_val = t[:,i][t[:,i]==t[:,i]].mean()
  9. # t[:,i][np.isnan(t[:,i])] = mean_val
  10. t[:,i][t[:,i]!=t[:,i]] = mean_val
  11. return t
  12. if __name__ == '__main__':
  13. print(mean_exchange(t17))

pandas基础操作

创建一维列表,series

  1. t1 = pd.Series(range(10),index=list("abcdefghij")) #index索引
  2. set1 = {"age":18,"name":'xsw',"gender":"n"}
  3. t2 = pd.Series(set1)

通过索引找值

  1. t1 = pd.Series(range(10),index=list("abcdefghij")) #index索引
  2. #查看类型
  3. print(type(t1))
  4. #通过索引找值
  5. print(t1[:2])
  6. print(t1["a"])
  7. print(t1[["a","d"]])
  8. print(t1[t1>7])
  9. #查看索引,索引可通过for遍历
  10. print(t1.index)
  11. #查看值,值可通过for遍历
  12. print(t1.values)

pandas读取数据

data1 = pd.read_csv("C:/pythonProject/test.csv")

pandas多维列表操作,dataframe

  1. t3 = pd.DataFrame(np.arange(12).reshape(3,4),index=list("abc"),columns=list("XSWD"))
  2. set2 = {"age":[18,50,30],"name":['xsw','sda','lfk'],"gender":["n","n","g"]}
  3. t4 = pd.DataFrame(set2)
  4. li1 = [{"age":18,"name":'xsw',"gender":"n"},{"age":50,"name":'sda',"gender":"n"},{"age":30,"name":'lfk',"gender":"g"}]
  5. t5 = pd.DataFrame(li1)

dataframe基础属性

  1. df1 = pd.read_csv("C:/pythonProject/你的名字.csv")
  2. print(df1.shape) #查看行列数
  3. print(df1.dtypes) #查看列数据类型
  4. print(df1.ndim) #查看数据维度
  5. print(df1.columns) #查看列索引
  6. print(df1.values) #查看对象值

dataframe整体情况查询

  1. df1 = pd.read_csv("C:/pythonProject/你的名字.csv")
  2. print(df1.head(3)) #指定查询前几行
  3. print(df1.tail(3)) #指定查询后几行
  4. print(df1.describe()) #快速综合统计结果
  5. print(df1.info()) #相关信息概览

dataframe排序方法

  1. df1 = pd.read_csv("C:/pythonProject/你的名字.csv")
  2. data4 = df1.sort_values(by="出现时间点",ascending=False) #ascending为True升序、False降序

pandas取行或者列,字符串为列、数字为行

  1. df1 = pd.read_csv("C:/pythonProject/你的名字.csv")
  2. print(df1[:20]) #通过索引取前几行数据
  3. print(df1["出现时间点"]) #通过标签取列数据

pandas之loc

  1. df1 = pd.read_csv("C:/pythonProject/你的名字.csv")
  2. #pandas之loc,通过标签索引行数据
  3. print(df1.loc[0,"出现时间点"])
  4. print(df1.loc[0])
  5. print(df1.loc[:,"出现时间点"])
  6. print(df1.loc[0:10,"出现时间点":"用户ID"])
  7. print(df1.loc[[0,3],["出现时间点","模式","字体"]])
  8. #pandas之iloc,通过位置获取行数据
  9. print(df1.iloc[0,1])
  10. print(df1.iloc[0])
  11. print(df1.iloc[:,1])
  12. print(df1.iloc[0:10,0:2])
  13. print(df1.iloc[[0,3],[0,2,4]])

pandas之布尔索引操作

  1. df1 = pd.read_csv("C:/pythonProject/你的名字.csv")
  2. #单条件选值
  3. df2 = df1[df1["出现时间点"] > 4000]
  4. # #多条件选值
  5. df3 = df1[(df1["出现时间点"] > 4000) & (df1["模式"] == 5)]
  6. #切割
  7. df4 = df1["出现时间点"].str().split(".").tolist()
  8. #判断数据是否为Nan
  9. t16 = np.arange(15).reshape(3,5)
  10. t16 = t16.astype("float")
  11. t16[:,0] = np.nan
  12. df5 = pd.DataFrame(t16)
  13. #判断数据是否为Nan,如果是就返回True,否则返回False
  14. d1 = pd.isnull(df5)
  15. # #判断数据是否为Nan,如果是就返回False,否则返回True
  16. d2 = pd.notnull(df5)
  17. #删除Nan所在行
  18. df6 = df5.dropna(axis=0,how="all",inplace=False)
  19. #axis表示对行或者列进行操作,how为all表示全部数值为nan时进行删除,为any只要有一个为nan就进行删除,inplace是否进行替代
  20. #填充数据
  21. df7 = df6.fillna(df6.mean(axis=1))
  22. #如果数据为0表示缺失值
  23. df6[df6==0] = np.nan
  24. #按行或者列累加
  25. df6 = df6.cumsum(axis=0)

matplotlib基础操作

数据可视化可显示中文

  1. #数据可视化可显示中文
  2. plt.rcParams['font.family'] = 'SimHei'

记录x、y轴数据

  1. #记录x、y轴数据
  2. x = [i for i in range(1,25)]
  3. 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]

修改画布大小

  1. #修改画布大小
  2. plt.figure(figsize=(20,8),dpi=80)#figsize画布大小,dpi清晰度

折线图

  1. plt.plot(x,y,label = "第一天",color='r',linestyle = '--',linewidth = 5,alpha = 0.5)
  2. #label参数添加标识,color参数添加颜色,linestyle参数调节线条风格,linewidth参数调整线条宽度,alpha调整线条透明度
  3. plt.plot(x,y_1,label = "第二天",color='b')

注:饼图pie、直方图hist、水平条形图barh、竖直条形图bar、散点图scatter等等,需要其它图可以去官网查找相应函数。

图形相关处理

  1. #显示x轴刻度
  2. x_label = ["{}小时".format(i) for i in x]
  3. plt.xticks(x,x_label,rotation = 90)#将x_label显示在x对应的位置上,rotation坐标显示旋转
  4. #显示y轴刻度
  5. plt.yticks([i for i in range(1,max(y)+1)])

网格线设置

plt.grid(alpha = 1)#alpha参数为网格线透明度设置

设置图形详细信息

  1. plt.xlabel('时间')
  2. plt.ylabel('温度')
  3. plt.title('一天的温度变化情况')

添加图例

plt.legend(loc = "upper left")#loc参数调整图列的位置

保存图表

plt.savefig('./graph1')

显示图表

plt.show()

折线图绘制

  1. from matplotlib import pyplot as plt
  2. #数据可视化可显示中文
  3. plt.rcParams['font.family'] = 'SimHei'
  4. #记录x、y轴数据
  5. x = [i for i in range(1,25)]
  6. 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]
  7. y_1 = [i for i in range(1,25)]
  8. #修改画布大小
  9. plt.figure(figsize=(20,8),dpi=80)#figsize画布大小,dpi清晰度
  10. #折线图
  11. plt.plot(x,y,label = "第一天",color='r',linestyle = '--',linewidth = 5,alpha = 0.5)
  12. #label参数添加标识,color参数添加颜色,linestyle参数调节线条风格,linewidth参数调整线条宽度,alpha调整线条透明度
  13. plt.plot(x,y_1,label = "第二天",color='b')
  14. #对图形进行相关处理
  15. #显示x轴刻度
  16. x_label = ["{}小时".format(i) for i in x]
  17. plt.xticks(x,x_label,rotation = 90)#将x_label显示在x对应的位置上,rotation坐标显示旋转
  18. #显示y轴刻度
  19. plt.yticks([i for i in range(1,max(y)+1)])
  20. #网格线设置
  21. plt.grid(alpha = 1)#alpha参数为网格线透明度设置
  22. #设置图形详细信息
  23. plt.xlabel('时间')
  24. plt.ylabel('温度')
  25. plt.title('一天的温度变化情况')
  26. #添加图例
  27. plt.legend(loc = "upper left")#loc参数调整图列的位置
  28. #保存图表
  29. plt.savefig('./graph1')
  30. #显示图表
  31. plt.show()

饼图绘制

  1. import matplotlib.pyplot as plt
  2. plt.rcParams['font.family'] = 'SimHei'
  3. plt.rcParams['axes.unicode_minus'] = False
  4. title = ['food','education','clothes','car','others']
  5. timelong = [2000,5000,1000,2000,1000]
  6. e = (0.1,0,0.1,0.2,0.2)
  7. color = ['b','r','g','y','orchid']
  8. plt.pie(timelong,explode=e,labels=title,colors=color,startangle=30,autopct='%1.3f%%')
  9. plt.title('时间安排')
  10. plt.legend(loc = "upper left")
  11. plt.show()

散点图绘制

  1. from matplotlib import pyplot as plt
  2. #数据可视化可显示中文
  3. plt.rcParams['font.family'] = 'SimHei'
  4. #记录x、y轴数据
  5. x = [i for i in range(1,25)]
  6. 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]
  7. y_1 = [i for i in range(1,25)]
  8. #修改画布大小
  9. plt.figure(figsize=(20,8),dpi=80)#figsize画布大小,dpi清晰度
  10. #折线图
  11. plt.scatter(x,y,label = "第一天",color='r',linewidth = 5,alpha = 0.5)
  12. #label参数添加标识,color参数添加颜色,linestyle参数调节线条风格,linewidth参数调整线条宽度,alpha调整线条透明度
  13. plt.scatter(x,y_1,label = "第二天",color='b')
  14. #对图形进行相关处理
  15. #显示x轴刻度
  16. x_label = ["{}小时".format(i) for i in x]
  17. plt.xticks(x,x_label,rotation = 90)#将x_label显示在x对应的位置上,rotation坐标显示旋转
  18. #显示y轴刻度
  19. plt.yticks([i for i in range(1,max(y)+1)])
  20. #设置图形详细信息
  21. plt.xlabel('时间')
  22. plt.ylabel('温度')
  23. plt.title('一天的温度变化情况')
  24. #添加图例
  25. plt.legend(loc = "upper left")#loc参数调整图列的位置
  26. #保存图表
  27. plt.savefig('./graph1')
  28. #显示图表
  29. plt.show()

柱状图绘制

  1. from matplotlib import pyplot as plt
  2. #数据可视化可显示中文
  3. plt.rcParams['font.family'] = 'SimHei'
  4. #记录x、y轴数据
  5. x = [i for i in range(1,25)]
  6. 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]
  7. y_1 = [i for i in range(1,25)]
  8. #修改画布大小
  9. plt.figure(figsize=(20,8),dpi=80)#figsize画布大小,dpi清晰度
  10. #纵向条形图
  11. plt.barh(x,y,label = "第一天",color='r',width=0.2,alpha = 0.5)
  12. #label参数添加标识,color参数添加颜色,alpha调整线条透明度,width参数为条形图宽度
  13. plt.barh(x,y_1,label = "第二天",color='b',width=0.2,alpha = 0.5)
  14. #横向条形图
  15. plt.barh(x,y,label = "第一天",color='r',height=0.2,alpha = 0.5)
  16. #label参数添加标识,color参数添加颜色,alpha调整线条透明度,width参数为条形图宽度
  17. plt.barh(x,y_1,label = "第二天",color='b',height=0.2,alpha = 0.5)
  18. #对图形进行相关处理
  19. #显示x轴刻度
  20. x_label = ["{}小时".format(i) for i in x]
  21. plt.xticks(x,x_label,rotation = 90)#将x_label显示在x对应的位置上,rotation坐标显示旋转
  22. #显示y轴刻度
  23. plt.yticks([i for i in range(1,max(y)+1)])
  24. #网格线设置
  25. plt.grid(alpha = 1)#alpha参数为网格线透明度设置
  26. #设置图形详细信息
  27. plt.xlabel('时间')
  28. plt.ylabel('温度')
  29. plt.title('一天的温度变化情况')
  30. #添加图例
  31. plt.legend(loc = "upper left")#loc参数调整图列的位置
  32. #保存图表
  33. plt.savefig('./graph1')
  34. #显示图表
  35. plt.show()

直方图绘制

  1. import numpy as np
  2. from matplotlib import pyplot as plt
  3. #数据可视化可显示中文
  4. plt.rcParams['font.family'] = 'SimHei'
  5. #记录x数据
  6. x = np.random.randint(2,100,200)
  7. #组距
  8. distance = 10
  9. #修改画布大小
  10. plt.figure(figsize=(20,8),dpi=80)#figsize画布大小,dpi清晰度
  11. #绘制频数直方图
  12. plt.hist(x,(max(x)-min(x))//distance)
  13. #label参数添加标识,color参数添加颜色,alpha调整线条透明度,width参数为条形图宽度
  14. #绘制频率直方图
  15. plt.hist(x,(max(x)-min(x))//distance,density=True)
  16. # #对图形进行相关处理
  17. # #显示x轴刻度
  18. plt.xticks(range(min(x),max(x)+distance,distance))#将x_label显示在x对应的位置上,rotation坐标显示旋转
  19. #网格线设置
  20. plt.grid(alpha = 1)#alpha参数为网格线透明度设置
  21. #设置图形详细信息
  22. plt.xlabel('时间')
  23. plt.ylabel('温度')
  24. plt.title('一天的温度变化情况')
  25. #添加图例
  26. plt.legend(loc = "upper left")#loc参数调整图列的位置
  27. #保存图表
  28. plt.savefig('./graph1')
  29. #显示图表
  30. plt.show()

接下来还会更新关于数据分析的文章,期待下一篇关于数据分析的文章吧!

在这里谢谢小伙伴们的支持啦!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/364050
推荐阅读
相关标签
  

闽ICP备14008679号