本人小白,在学习python数据分析与应用,这个是课后作业,为了方便以后应用时查看,特此记录。仅供参考,互相学习。
链接:https://pan.baidu.com/s/1KKpqtBTBz_81dZanemKWzQ
提取码:y6h5
1996-2015年人口数量数据集:population.npz
鸢尾花数据集:iris.npz
共150行数据,仅展现部分
人口数据总共拥有6个特征,分别为年末总人口、男性人口、女性人口、城镇人口、乡村人口和年份。查看各个特征随着时间推移发生的变化情况。
散点图+折线图import numpy as np import matplotlib.pyplot as plt #画图识别中文 plt.rcParams['font.sans-serif'] = 'SimHei' plt.rcParams['axes.unicode_minus'] = False #(1)读取并处理数据 data = np.load("populations.npz",allow_pickle=True) values = data["data"] name = data["feature_names"] #删除日期里的汉字 for temp in range(19,-1,-1): values[temp][0] = values[temp][0][:-1] #删除后两行的nan values=np.delete(values,-1,0) values=np.delete(values,-1,0) values=np.flipud(values)#翻转操作 print(values) print(name) # (2)建立画布并添加子图 p1=plt.figure(figsize=(12,15)) ax1 = p1.add_subplot(2,1,1) plt.ylim(0,250000) #(3)绘制散点图 plt.title('1996-2015年人口数据变化图') plt.xlabel('年份') plt.ylabel('人口数据') x = values[:,0] col = ['r','b','g','y','black'] label_list = name[1:] for i in range(1,6,1): plt.scatter(x,values[:,i],c=col[i-1],label=label_list[i-1]) plt.legend() #(4)绘制折线图 ax2 = p1.add_subplot(2,1,2) plt.ylim(0,250000) plt.title('1996-2015年人口数据变化图') plt.xlabel('年份') plt.ylabel('人口数据') for i in range(1,6,1): plt.plot(x,values[:,i],marker = '*',c=col[i-1],label=label_list[i-1]) plt.legend() plt.savefig('./savefig/1996-2015年人口数据变化图.png') plt.show()
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748结果
通过绘制各年份男女人口数目及城乡人口数目的直方图,男女人口比例及城乡人口比例的饼图可以发现人口结构的变化。而绘制每个特征的箱线图则可以发现不同特征的增长或减少的速率是否变得缓慢。
直方图import numpy as np import matplotlib.pyplot as plt #画图识别中文 plt.rcParams['font.sans-serif'] = 'SimHei' plt.rcParams['axes.unicode_minus'] = False #(1)读取并处理数据 data = np.load("populations.npz",allow_pickle=True) values = data["data"] name = data["feature_names"] #删除日期里的汉字 for temp in range(19,-1,-1): values[temp][0] = values[temp][0][:-1] #删除后两行的nan values=np.delete(values,-1,0) values=np.delete(values,-1,0) values=np.flipud(values)#翻转操作 print(values) print(name) #(2)男女人口数目直方图 p1 = plt.figure(figsize=(18,20)) ax1 = p1.add_subplot(2,1,1) plt.ylim(0,80000) plt.title('1996-2015年男女人口数目对比直方图') plt.xlabel('年份') plt.ylabel('人口数据') #(2.1)数据二次处理 sex = ('男','女') year = [] for i in values: year.append(i[0]) population = [[],[]] for i in values: population[0].append(i[2]) population[1].append(i[3]) bar_width = 0.4 x = np.arange(len(year)) #(2.2)画两种柱状图,编程思维:只要第二个柱状图的横坐标+第一个柱状图的宽度,他们就会贴在一起 rects1 = plt.bar(x,population[0],bar_width,color='r',label = sex[0]) rects2 = plt.bar(x+bar_width,population[1],bar_width,color='y',label = sex[1]) plt.xticks(x+0.2,year)#横坐标刻度 #添加数据标签 def add_labels(rects): for rect in rects: height = rect.get_height() plt.text(rect.get_x()+rect.get_width()/2,height+500,height,ha='center',va='bottom',fontsize=9)#第一个height为标签纵坐标,第二个为数值 add_labels(rects1) add_labels(rects2) plt.legend()#添加图例 #(3)城乡人口数目直方图 ax2 = p1.add_subplot(2,1,2)#添加子图 plt.ylim(0,90000) plt.title('1996-2015年城镇人口数目对比直方图') plt.xlabel('年份') plt.ylabel('人口数据') place = ('城镇','乡村') population_place = [[],[]] for i in values: population_place[0].append(i[4]) population_place[1].append(i[5]) #画两种柱状图,编程思维:只要第二个柱状图的横坐标+第一个柱状图的宽度,他们就会贴在一起 rects3 = plt.bar(x,population_place[0],bar_width,color='c',label = place[0]) rects4 = plt.bar(x+bar_width,population_place[1],bar_width,color='b',label = place[1]) plt.xticks(x+0.2,year)#横坐标刻度 add_labels(rects3) add_labels(rects4) plt.legend()#添加图例 plt.savefig('./savefig/1996-2015年男女人口数目及城乡人口数目直方图.png')#保存图片 plt.show()
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778结果
import numpy as np import matplotlib.pyplot as plt #画图识别中文 plt.rcParams['font.sans-serif'] = 'SimHei' plt.rcParams['axes.unicode_minus'] = False #(1)读取并处理数据 data = np.load("populations.npz",allow_pickle=True) values = data["data"] name = data["feature_names"] #删除日期里的汉字 for temp in range(19,-1,-1): values[temp][0] = values[temp][0][:-1] #删除后两行的nan values=np.delete(values,-1,0) values=np.delete(values,-1,0) values=np.flipud(values)#翻转操作 print(values) print(name) p1 = plt.figure(figsize=(30,24))#建立画布4:5(总共20个子图,5行4列) label = ['男','女'] explode = [0.01,0.01] year = 1996 for i in range(20): ax = p1.add_subplot(5,4,i+1) plt.title('{}年男女人口比例饼状图'.format(year)) year+=1 plt.pie(values[i,2:4],explode=explode,labels=label,autopct='%1.1f%%') plt.legend() plt.show() p2 = plt.figure(figsize=(30,24))#建立画布4:5(总共20个子图,5行4列) label = ['城镇','乡村'] explode = [0.01,0.01] year = 1996 for i in range(20): ax = p2.add_subplot(5,4,i+1) plt.title('{}年城乡人口比例饼状图'.format(year)) year+=1 plt.pie(values[i,4:6],explode=explode,labels=label,autopct='%1.1f%%') plt.legend() plt.savefig('./savefig/1996-2015年城乡人口比例变化饼状图.png') plt.show()
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647结果
男女人口变化:
城镇人口变化:
import numpy as np import matplotlib.pyplot as plt #画图识别中文 plt.rcParams['font.sans-serif'] = 'SimHei' plt.rcParams['axes.unicode_minus'] = False #(1)读取并处理数据 data = np.load("populations.npz",allow_pickle=True) values = data["data"] name = data["feature_names"] #删除日期里的汉字 for temp in range(19,-1,-1): values[temp][0] = values[temp][0][:-1] #删除后两行的nan values=np.delete(values,-1,0) values=np.delete(values,-1,0) values=np.flipud(values)#翻转操作 print(values) print(name) pop = (list(values[:,1]),list(values[:,2]),list(values[:,3]),list(values[:,4]),list(values[:,5])) label = name[1:] print(pop) print(label) p = plt.figure(figsize=(15,12)) plt.title('1996-2015年人口变化箱线图') plt.ylabel('人口数量') plt.boxplot(pop,notch=True,labels=label,meanline=True) plt.savefig('./savefig/1996-2015年人口变化箱线图') plt.show()
123456789101112131415161718192021222324252627282930结果
(1)读取鸢尾花数据集,使用循环和子图绘制各个特征之间的散点图
import numpy as np import matplotlib.pyplot as plt #画图识别中文 plt.rcParams['font.sans-serif'] = 'SimHei' plt.rcParams['axes.unicode_minus'] = False #(1)读取并处理数据 data = np.load("iris.npz",allow_pickle=True) values = data['data'] features = data['features_name'] # x = np.arange(len(values)) #筛选鸢尾花种类 label_list = values[:,-1] label_list = list(set(label_list)) p1 = plt.figure(figsize=(15,15))#建立画布 col = ['r','b','g'] name = ['sepal','petal'] for i in range(2):#2副子图 ax = p1.add_subplot(2,1,i+1) plt.title('鸢尾花{}特征的散点图'.format(name[i])) plt.xlabel('{}'.format(features[i*2])) plt.ylabel('{}'.format(features[i*2+1])) for j in range(3):#3种花,每副子图画3次scatter #根据花的类别,将特征筛选出来 values_temp = [] for k in values: if k[4] == label_list[j]: values_temp.append(list(k)) values_temp = np.delete(values_temp, -1, axis=1) values_temp = np.array(values_temp,float)#变成标准矩阵 #统计重复覆盖的点的个数 # count = 0 # for p in range(50): # for q in range(p+1,50): # if values_temp[p][i*2] == values_temp[q][i*2] and values_temp[p][i*2+1]==values_temp[q][i*2+1]: # count+=1 # print(count) plt.scatter(values_temp[:,i*2],values_temp[:,i*2+1],label = label_list[j],c=col[j]) plt.legend() plt.savefig('./savefig/鸢尾花特征散点图') plt.show()
12345678910111213141516171819202122232425262728293031323334353637383940414243444546结果
备注:画出来的点数量与数据数量不符,我统计过有不少点是相同的,我认为是点覆盖所导致的
(2)绘制各个特征的箱线图,查看是否存在异常值
import numpy as np import matplotlib.pyplot as plt #画图识别中文 plt.rcParams['font.sans-serif'] = 'SimHei' plt.rcParams['axes.unicode_minus'] = False #(1)读取并处理数据 data = np.load("iris.npz",allow_pickle=True) values = data['data'] features = data['features_name'] print(features) # x = np.arange(len(values)) #筛选鸢尾花种类 label_list = values[:,-1] label_list = list(set(label_list)) iris = (list(values[:,0]),list(values[:,1]),list(values[:,2]),list(values[:,3])) # iris = np.array(iris,float) label = features[:-1] print(iris) print(label) p = plt.figure(figsize=(15,12)) plt.title('鸢尾花各个特征箱线图') plt.ylabel('length_or_width') plt.boxplot(iris,notch=True,labels=label,meanline=True) plt.savefig('./savefig/鸢尾花各个特征箱线图') plt.show()
123456789101112131415161718192021222324252627结果
Python绘制精美图表之双柱形图:https://segmentfault.com/a/1190000004103325
书:《python数据分析与应用》
相关知识
使用pandas绘制两列csv的直方图
Python中的数据可视化:Matplotlib基础与高级技巧
鸢尾花数据集如何可视化
鸢尾花分类与直方图、散点图的绘制及可视化决策树
python花瓣长度和花瓣宽度散点图鸢尾花
玫瑰成分数据分析方法是什么
ggplot2包画图总结
3.4 数据可视化
【python】python双十一美妆数据分析(源码+报告)【独一无二】课程设计
python 鸢尾花数据集下载
网址: matplotlib练习:散点图、折线图、直方图、饼图、箱线图 https://m.huajiangbk.com/newsview1548638.html
上一篇: 【机器学习3】鸢尾花数据集可视化 |
下一篇: 蒲葵果实能吃吗 |