《数据分析与可视化习题答案张涛.docx》由会员分享,可在线阅读,更多相关《数据分析与可视化习题答案张涛.docx(23页珍藏版)》请在第壹文秘上搜索。
1、课后习题答案项目1使用NUmPy分析空气质量状况-S选择题1 .D2,B3.A4.C5.C他可能是it64jt32)二、简答题12341 .已知ndarray数组MM=B*二2。根据以下要求写出对应代码。JLUJLJLJLX.13141516(1)获取前三条数据。(2)获取最后两列数据。(3)获取最后一列数据(两种方法)。(4)获取第23行,第23列数据。(5)求每一列的均值,最大值和最小值。(6)求每一行的均值,最大值和最小值。(7)将M中的每一个元素扩大为原来的两倍。importnumpyasnpM=np.arage(l,17)M=M.reshape(4,4)# (1)获取前三条数据fir
2、st_three_elements=M:3# (2)获取最后两列数据last_two_columns=ML-2:# (3)获取最后一列数据(两种方法)# 方法一:IasLcoIumn=M:,-1# 方法二:IasLcoIumn=M13# (4)获取第23行,第23列数据sub_matrix=Ml:3,1:3# (5)求每一列的均值,最大值和最小值mean,values=np.mea(M,axis=0)max_values=p.max(M1ais=O)min_values=p.min(M1axis=O)# (6)求每一行的均值,最大值和最小值mean,values=p.mean(M,axis=l
3、)max_values=np.max(Mlaxis=l)min_values=p.mi(M1axis=l)# (7)将M中的每一个元素扩大为原来的两倍doubled_M=M*22 .已知有两个ndaray数组M和N,求出M*N的值。1M= 3 .51 211 4 t N= 31 6 Is246.答案:141826343850三、编程题1.使用NumPy的random模块,生成一个符合标准正态分布的100*5的ndarray数组,计算每列的最大值、最小值和均值,最后将该数组保存到data.csv文件中。importnumpyasnp# 使用numpy的random模块生成一个100x5的ndar
4、ray数组,数组元素符合标准正态分布data=p.random.randn(100,5)# 计算每列的最大值、最小值和均值max_values=data.max(axis=0)min_values=data.mi(ais=O)mean_values=data.mean(ais=O)# 打印每列的最大值、最小值和均值Print(每列的最大值:,max_values)Print(每列的最小值:,min_values)Print(每列的均值:,mean_values)# 将结果保存到data.csv文件中p.savetxt(data.csv,data,delimiter=,)2.现有一个关于二手房的
5、数据集house.csv,部分数据如表18所示,请根据要求,编写一个预测房价的程序。(1)去除“脏数据”,即删除“编号”歹J,删除重复行和列。(2)统计数据集中总面积在080,80120以及120各自的数量是多少。(3)预测房价的公式为:PriCe=I8%+03x2-04x3-08%4+25+20m60(注意:这个公式有误,最后的+20%6)不需要,直接删掉。(4)将预测的结果持久化到txt文件中。importnumpyasnp# 读取数据集data=p.loadtxt(house.csv,delimiter=,skiprows=l,encoding=utf-8)# 去除脏数据data=p.d
6、elete(data10,ais=l)#删除编号列data=np.unique(data,axis=0)#删除重复行和列# 统计总面积的数量totaLarea=data:,0count_0_80=np.sum(totaLarea=0)&(totaLarea=80)&(totaLarea=120)# 预测房价price=1.8*data:,0+0.3*data:,1-0.4*data:,2-0.8*data:,3+2.5*data:,4# 将预测结果持久化到txt文件中np.savetxt(,prediction.tt,price,fmt=,%.2f)Print(总面积在080的数量:,coun
7、t_0_80)Print(总面积在80-120的数量:,count_80_120)Print(总面积大于120的数量:,count_120)项目2使用MatPIOtIib实现空气数据可视化一、选择题1.C2.A3.D4.C5.D6,A二、编程题1 .读取葡萄牙某公园火灾的数据集,数据集下载地址:https:archive.ics.ucidu/ml/datasets/Forest+FireSo要求完成以下图形的绘制。(1)绘制温度、湿度、风速和下雨量这四个特征与烧毁面积之间关系的散点图。(2)统计每个月平均烧毁面积,并绘制出对应的饼图。importnumpyasnp#导入numpy库,用于数值计
8、算importmatplotlib.pyplotaspit#导入matpiotiib库,用于绘图importpandasaspd#导入PandaS库,用于数据处理data=pd.read-csv(tforestfires.csv,#读取数据集plt.figure(figsize=(10,6)#设置图形大小plt.scatter(datatemp,data,area,1IabeI=lTemperature)#绘制温度与烧毁面积的散点图plt.scatter(dataRH,data,area11IabeI=1Humidity)#绘制湿度与烧毁面积的散点图plt.scatter(data,wind,
9、1dataarea,IabeI=1WindSpeed)#绘制风速与烧毁面积的散点图plt.scatter(data,rain,data,area,1IabeI=1RainfaII)#绘制降雨量与烧毁面积的散点图plt.xlabel(,Features,)#设置X轴标签plt.ylabel(Area,)#设置y轴标签plt.legend()#显示图例plt.show()#显示图形monthly_area=data.groupby(moth,),area,.mea()#按月份分组,计算每个月的平均烧毁面积plt.figure(figsize=(10,6)#设置图形大小plt.pie(monthly
10、_area,labels=monthly_area.index,autopct=,%l.lW)#绘制饼图,显示每个月的平均烧毁面积plt.title(,AverageAreaofForestFiresbyMonth)#设置饼图标题plt.show()#显示图形2 .读取皮马印第安人糖尿病数据集,要求完成以下图形的绘制。(1)绘制BMl与age的散点图,使用红色圆点表示患有糖尿病,绿色圆点表示没有糖尿病。(2)统计数据集中含有糖尿病和未患糖尿病的人数,并绘制出对应的饼图。importnumpyasnpimportmatplotlib.pyplotaspit# 读取数据集data=npOadtXt
11、(pimaindiansdiabetes.data.csv,delimiter=,skiprows=l)# 提取BMl和age数据bmi=data:,5age=data:,7has_diabetes=data:,8# 绘制BMl与age的散点图plt.figure(figsize=(8,6)plt.scatter(agehas_diabetes=1.bmihas_diabetes=1,c=red,IabeI=1HasDiabetes)plt.scatter(agehas_diabetes=0,bmihas_diabetes=0,c=,greenl,IabeI=1NoDiabetes)plt.x
12、label(,Age,)plt.yabel(BMI,)plt.title(BMIvsAge)plt.legend()plt.show()# 统计含有糖尿病和未患糖尿病的人数num_has_diabetes=p.sum(has-diabetes=1)num_no_diabetes=np.sum(has_diabetes=0)# 绘制饼图labels=HasDiabetes,NoDiabetessizes=num_has_diabetes,num_no_diabetescolors=,red,1greenplt.figure(figsize=(6,6)plt.pie(sizes,IabeIs=Ia
13、beIs1colors=colors,autopct=,%l.lf%,)plt.title(,DiabetesDistribution)plt.show()项目3使用PandaS分析股票交易数据一、选择题1.C2.C3.A4.D5.A6.B7.D二、编程题1.现有一个葡萄牙某银行直销活动的数据集,下载地址为http:/archive.ics.uci.edumldatasetsBank+Marketingo要求使用Pandas完成以下数据处理和分析任务。(1)读取该CSV数据集文件,将数据存储于一个DataFrame数组对象中。(2)判断数据集中是否有缺失值,如有,则使用上一个非缺失值填充。对于
14、第一条数据中的缺失值,使用下一个非缺失值填充。(3)将数据集中的最后一个字段“y”中的“yes”替换为1,“no”替换为0。(4)按照字段“job”(职业类型)分组,求得每个职业平均存款余额是多少。(字段balance”表示存款余额)(5)按照字段“education”(教育程度)分组,求得每个分组中,最大年龄和最小年龄是多少。importpandasaspd#读取CSV数据集文件,将数据存储于一个DataFrame数组对象中df=pd.read-csv(bak.csvlsep=;)#判断数据集中是否有缺失值,如有,则使用上一个非缺失值填充。对于第一条数据中的缺失值,使用下一个非缺失值填充df.filla(method=ffil,inplace=True)df.bfill(iplace=True)#将数据集中的最后一个字段uy,中的yes替换为1,ot替换为0df,y=dfy.replace(yes,:1,no,:0)#按照字段“job”(职业类型)分组,求得每