数据分析应用项目化教程(Python) 孙仁鹏 习题参考答案_第1页
数据分析应用项目化教程(Python) 孙仁鹏 习题参考答案_第2页
数据分析应用项目化教程(Python) 孙仁鹏 习题参考答案_第3页
数据分析应用项目化教程(Python) 孙仁鹏 习题参考答案_第4页
数据分析应用项目化教程(Python) 孙仁鹏 习题参考答案_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目1认识数据分析一、填空题1、数据2、信息3、数据分析4、数据分析5、数据二、选择题1、C2、C3、C4、C5、C二、简答题1、数据来源、问题定义(分析目标)、数据准备、数据探索和可视化、预测模型、模型验证、部署项目2准备数据分析一、填空题1、大括号键值键2、c=dict(zip(a,b))3、不可以4、[6,7,9,11]5、[5foriinrange(10)]。二、选择题1、C2、B3、A4、C5、B二、简答题1、列表推导式基本结构:[表达式for变量xin容器if条件]字典推导式基本结构:{表达式for变量in容器if条件}集合推导式基本结构:{表达式for变量xin容器if条件}2、匿名函数:不使用def语句定义函数,python使用lambda来创建匿名函数。语法格式:lambda参数列表:表达式四、程序题1、deflists_sum(list1,list2):lists=[]forx,yinzip(list1,list2):list3=[]fora,binzip(x,y):list3.append(a+b)lists.append(list3)returnlistslist1=[[1,2,3],[4,5,6]]list2=[[7,8,9],[10,11,12]]lists_sum(list1,list2)2、defprime(i):j=2ifi==1:returnFalseforjinrange(2,i):if(i%j==0):returnFalsereturnTrueprint(list(filter(prime,range(1,101))))项目3NumPy的多维数组处理与存取一、填空题1、ndarray2、33、矢量运算、数组广播运算、数组与标量运算4、astype5、基本索引、切片索引、花式索引、布尔索引二、选择题1、 B2、A3、C4、C5、A三、简答题1、当数组发生运算时,如果shape不相等,则会自动发生广播。广播机制需要满足如下任意一个条件即可:(1)两个数组的某一维度等长。(2)其中一个数组的某一维度为1。广播机制需要扩展维度小的数组,使得它与维度最大的数组的shape值相同,以便使用元素级函数或者运算符进行运算。2、操作numpy数组中的元素。索引获得单个元素或数组;切片用于一次获取数组中的多个元素,并保持一定的数组结构。四、程序题1、arr[arr%2==0]或arr[np.where(arr%2==0)]2、fromnumpyimportrandomY=random.rand(10)Ŷ=random.rand(10)mse=((Ŷ-Y)**2).mean()mse或mse=np.sum((np.square(Ŷ-Y)))/Y.shape[0]mse项目4Pandas的数据对象构建和数据运算一、填空题1、Series2、DataFrame3、ilocloc4、reindexrename5、列表[key1,key2]二、选择题1、A2、A3、C4、D5、D6、C7、C8、B9、D10、B三、简答题1、Pandas有关索引的用法类似于NumPy数组的索引,只不过Pandas的索引既可以使用位置索引(下标),也可以使用标签索引(名称)。2、numpuy:[]、[,]、[][]pandas:[]、.、iloc[]、iloc[,]、loc[]、loc[,]四、程序题(1)importpandasaspdimportnumpyasnpdates=pd.date_range('20220101',periods=6)datesdf=pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))df(2)df.sort_index(ascending=False)(3)df.sort_values(by="B")(4)df.loc[:,['A','B']](5)df.loc['20220102':'2022-01-04',['A','B']](6)df.iloc[1:3,2:4](7)df.iloc[[0,2,4],[1,3]](8)df[df.A>0.5](9)df.mean(axis=0)项目5Pandas的数据读写一、填空题1、df.to_csv2、pd.read_csv3、df.to_json4、pd.read_json5、df.to_excel二、选择题1、A2、A3、A4、A5、A三、简答题1、基本参数:filepath_or_buffer:可以是文件路径、URL或者是对象sep:分隔符,默认为英文逗号,如果是其它分割方式,则要填写delimiter:sep的替代参数,默认为Nonedelim_whitespace(boolean):指定是否将空格(e.g.''or'\t')当作delimiter。encoding:pandas默认编码是utf-8,如果同样读取默认uft-8的txt或者json格式,则可以忽略这个参数;如果是csv,且数据中有中文时,则要指定encoding=‘gbk’header:指定第一行是否是列名,默认为infer。通常有三种用法,忽略或header=0(表示数据第一行为列名,header=None(表明数据没有列名),常与names搭配使用names:指定列名,通常用一个字符串列表表示,默认为None。当header=0时,用names可以替换掉数据中的第一行作为列名;如果header=None,用names可以增加一行作为列名;如果没有header参数时,用names会增加一行作为列名,原数据的第一行仍然保留usecols:一个字符串列表,可以指定读取的列名,默认为Noneindex_col:一个字符串列表,指定哪几列作为索引,默认为None。当index_col=False,pandas不再使用首列作为索引。skiprows:跳过多少行再读取数据,通常是数据不太干净,需要去除掉表头才会用到nrows:仅读取多少行,后面的处理也都仅限于读取的这些行2、基本参数:sql:要执行的SQL查询或表名con:数据库链接index_col:设置数据库表的列作为pandas对象的行索引coerce_float:尝试将非字符串,非数字对象的值转换为浮点值params:执行sql要传递的参数parse_dates:将某一列日期型字符串转换为datetime型数据,与pd.to_datetime函数功能类似。可以直接提供需要转换的列名以默认的日期形式转换,也可以用字典的格式提供列名和转换的日期格式columns:要选取的列四、程序题importpandasaspdimportpymysqlconn=pymysql.connect(host='localhost',user='root',passwd='root',db='students',port=3306,charset='utf8')df=pd.read_sql('select*fromscore',conn)项目6Pandas的数据清洗和整理一、填空题1、异常值检测与处理2、3σ3、concat4、merge5、stack二、选择题1、C2、D3、D4、A5、A三、简答题1、数据预处理操作有数据清洗、数据转换、数据合并、数据重塑等,在这几种操作中又分别含有不同的数据处理方法,例如在数据清洗过程中含有空值和缺失的检测、重复值的处理、异常值的处理等。2、Series.str的字符串处理函数是向量化操作,处理多个字符串无需编写循环代码,函数更加丰富,代码简洁,运行效率更高;Series.str的字符串处理函数集成了正则表达式的大部分功能,这使得pandas在处理字符串Series时,具有更强大能力;Series.str的字符串处理函数可以忽略NA值。在处理文本数据的时候,可以优先使用Pandas字符串方法。遇到复杂处理需求时,可以结合字符串内建函数与Pandas的apply(),就可以建立一个功能强大无比的字符串处理程序来清洗、转换文本数据了。四、程序题1、importpandasaspddf1=pd.DataFrame({'key':['a','b','a','b','b'],'value1':range(5)})df1df2=pd.DataFrame({'key':['a','c','c','c','c'],'value2':range(5)})df2pd.merge(df1,df2)2、importpandasaspdx=pd.DataFrame({'A':['a1','a2','a3'],'B':['b1','b2','b3']},index=[0,1,2])xy=pd.DataFrame({'C':['c1','c2','c3'],'D':['d1','d2','d3']},index=[0,1,2])yx.join(y)项目7pandas的数据分组与聚合一、填空题1、groupbyagg2、aggtransform3、聚合4、拆分应用合并5、mapapplyapplymap二、选择题1、B2、C3、A4、A5、B三、简答题1、当axis=0时,对每列columns执行指定函数;当axis=1时,对每行row执行指定函数。无论axis=0还是axis=1,其传入指定函数的默认形式均为Series。对每个Series执行结果后,会将结果整合在一起返回。若想有返回值,定义函数时需要return相应的值。DataFrame的apply和Series的apply一样,也能接收更复杂的函数,如传入参数。2、分组与聚合的过程大概分三步:1) 拆分:将数据集按照一些标准拆分为若干组。2) 应用:将某个函数或者方法应用到每个分组。3)合并:将产生的新值整合到结果对象中。四、程序题1、importnumpyasnpimportpandasaspddata=np.arange(6).reshape(2,3)frame=pd.DataFrame(data,index=['A','B'],columns=['O','T','C'])print(frame.apply(np.mean,axis=1))2、importnumpyasnpimportpandasaspddata=np.arange(12).reshape(3,4)frame=pd.DataFrame(data)defaddA(x):return"A"+str(x)print(frame.applymap(addA))3、在这个计算中最棘手的部分是,我们需要得到一个城市的总销售额,并将其合并到数据中,以得到百分比。有两种解决方案:groupby()、apply()和merge()groupby()和transform()解决方案1:groupby()、apply()和merge()第一种解决方案是使用groupby()分割数据,并使用apply()聚合每个组,然后使用merge()将结果合并回原始数据帧中。第1步:使用groupby()和apply()计算城市销售总额importpandasaspdimportnumpyasnpdf=pd.DataFrame({'restaurant_id':[101,102,103,104,105,106,107],'address':['A','B','C','D','E','F','G'],'city':['北京','北京','北京','上海','上海','南京','南京'],'sales':[10,500,48,12,21,22,14]})city_sales=df.groupby('city')['sales'].apply(sum).rename('city_total_sales').reset_index()groupby('city')通过在city列上分组来拆分数据。对于每个组,函数sum应用于sales列,以计算每个组的总和。最后,将新列重命名为city_total_sales并重置索引(注意:需要reset_inde()来清除groupby('city')生成的索引。此外,Pandas还有一个内置的sum()函数,下面是Pandassum()的等效函数:city_sales=df.groupby('city')['sales'].sum().rename('city_total_sales').reset_index()第2步:使用merge()函数合并结果df_new=pd.merge(df,city_sales,how='left')使用merge()和leftouterjoin的how='left'将组结果合并回到原始的DataFrame中。第3步:计算百分比最后,可以计算并格式化百分比。df_new['pct']=df_new['sales']/df_new['city_total_sales']df_new['pct']=df_new['pct'].apply(lambdax:format(x,'.2%'))解决方案2:groupby()和transform()这个解决方案改变了游戏规则。一行代码就可以解决应用和合并问题。步骤1:使用groupby()和transform()计算城市销售总额转换函数在执行转换后保留与原始数据集相同数量的项。因此,使用groupby后跟transform(sum)的单行步骤返回相同的输出。df['city_total_sales']=df.groupby('city')['sales'].transform('sum')第2步:计算百分比最后,这和求百分比是一样的。df['pct']=df['sales']/df['city_total_sales']df['pct']=df['pct'].apply(lambdax:format(x,'.2%'))项目8matplotlib图形库的数据可视化一、填空题1、折线图直方图2、面向对象3、plt.ylabel()y4、matplotlibrc5、注释二、选择题1、D2、D3、C4、D5、A三、简答题1、matplotlib的图形是画在figure(画布)上的,figure类似windows、jupyter窗体,每一个figure又包含了一个或多个axes(坐标系/绘图区/子图),但是一个axes只能属于一个figure。一个axes可以绘制各种图形。辅助显示层为axes内的除了根据数据绘制出的图形以外的内容,主要包括axes外观(facecolor)、边框线(spines)、坐标轴名称(axislabel)、坐标轴刻度(tick)、坐标轴刻度标签(ticklabel)、网格线(grid)、图例(legend)、标题(title)等内容。2、导库、准备数据设置绘图样式定义布局绘制图形完善图形四、程序题importnumpyasnpimportmatplotlib.pyplotaspltplt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_m

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论