数据分析与可视化习题答案张涛.docx
课后习题答案项目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)获取前三条数据first_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(M1a×is=O)min_values=p.min(M1axis=O)# (6)求每一行的均值,最大值和最小值mean,values=p.mean(M,axis=l)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 Is2'46.答案:141826343850三、编程题1.使用NumPy的random模块,生成一个符合标准正态分布的100*5的ndarray数组,计算每列的最大值、最小值和均值,最后将该数组保存到data.csv文件中。importnumpyasnp# 使用numpy的random模块生成一个100x5的ndarray数组,数组元素符合标准正态分布data=p.random.randn(100,5)# 计算每列的最大值、最小值和均值max_values=data.max(axis=0)min_values=data.mi(a×is=O)mean_values=data.mean(a×is=O)# 打印每列的最大值、最小值和均值Print("每列的最大值:",max_values)Print("每列的最小值:",min_values)Print("每列的均值:",mean_values)# 将结果保存到data.csv文件中p.savetxt("data.csv",data,delimiter=",")2.现有一个关于二手房的数据集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.delete(data10,a×is=l)#删除"编号"列data=np.unique(data,axis=0)#删除重复行和列# 统计总面积的数量totaLarea=data:,0count_0_80=np.sum(totaLarea>=0)&(totaLarea<80)count_80_120=np.sum(total_area>=80)&(totaLarea<120)count_120=np.sum(total_area>=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.t×t',price,fmt=,%.2f')Print("总面积在080的数量:",count_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.uci©du/ml/datasets/Forest+FireSo要求完成以下图形的绘制。(1)绘制温度、湿度、风速和下雨量这四个特征与烧毁面积之间关系的散点图。(2)统计每个月平均烧毁面积,并绘制出对应的饼图。importnumpyasnp#导入numpy库,用于数值计算importmatplotlib.pyplotaspit#导入matpiotiib库,用于绘图importpandasaspd#导入PandaS库,用于数据处理data=pd.read-csv(tforestfires.csv,#读取数据集plt.figure(figsize=(10,6)#设置图形大小plt.scatter(data'temp',data,area,1IabeI=lTemperature')#绘制温度与烧毁面积的散点图plt.scatter(data'RH',data,area11IabeI=1Humidity')#绘制湿度与烧毁面积的散点图plt.scatter(data,wind,1data'area",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_area,labels=monthly_area.index,autopct=,%l.lW)#绘制饼图,显示每个月的平均烧毁面积plt.title(,AverageAreaofForestFiresbyMonth')#设置饼图标题plt.show()#显示图形2 .读取皮马印第安人糖尿病数据集,要求完成以下图形的绘制。(1)绘制BMl与age的散点图,使用红色圆点表示患有糖尿病,绿色圆点表示没有糖尿病。(2)统计数据集中含有糖尿病和未患糖尿病的人数,并绘制出对应的饼图。importnumpyasnpimportmatplotlib.pyplotaspit# 读取数据集data=npOadtXt("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.xlabel(,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','NoDiabetes'sizes=num_has_diabetes,num_no_diabetescolors=,red,1'green'plt.figure(figsize=(6,6)plt.pie(sizes,IabeIs=IabeIs1colors=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)判断数据集中是否有缺失值,如有,则使用上一个非缺失值填充。对于第一条数据中的缺失值,使用下一个非缺失值填充。(3)将数据集中的最后一个字段“y”中的“yes”替换为1,“no”替换为0。(4)按照字段“job”(职业类型)分组,求得每个职业平均存款余额是多少。(字段"balance”表示存款余额)(5)按照字段“education”(教育程度)分组,求得每个分组中,最大年龄和最小年龄是多少。importpandasaspd#读取CSV数据集文件,将数据存储于一个DataFrame数组对象中df=pd.read-csv("bak.csv"lsep="")#判断数据集中是否有缺失值,如有,则使用上一个非缺失值填充。对于第一条数据中的缺失值,使用下一个非缺失值填充df.filla(method='ffil,inplace=True)df.bfill(iplace=True)#将数据集中的最后一个字段uy,'中的"yes"替换为1,"o't替换为0df,y'=df'y'.replace('yes,:1,'no,:0)#按照字段“job”(职业类型)分组,求得每