《大数据分析:基于Python》 课后习题及解答 余本国_第1页
《大数据分析:基于Python》 课后习题及解答 余本国_第2页
《大数据分析:基于Python》 课后习题及解答 余本国_第3页
《大数据分析:基于Python》 课后习题及解答 余本国_第4页
《大数据分析:基于Python》 课后习题及解答 余本国_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

课后练习第一章语法基础1.在安装Anaconda时,要注意什么?解答:安装时尽可能地选择与自己机器相匹配的软件版本,安装时不要安装在含有中文的路径下,会出现一些无法预计的错误。2.请输出100除以3得到的商和余数,并求出商的余数次方的值。解答:>>>s,m=divmod(100,3)>>>print("100除以3的商是%d,余数是%d"%(s,m))100除以3的商是33,余数是1>>>print(s**m)333.在print()里面将“明月几时有”和“把酒问青天”两句分两行输入,但是在输出时显示在一行。解答:>>>print("明月几时有,\把酒问青天")明月几时有,把酒问青天4.请将“Lifeisshort,Ineedpython.”连起来输出100次。解答:>>>print("Lifeisshort,Ineedpython."*100)5.请说出运算法“=”“==”“+=”的含义。解答:=:表示赋值,将等号右边的值赋值给左边的变量,如a=1,即让a的值等于1;==:表示判断,判断双等号左右两边的值是否相等,返回的是布尔值True或False;+=:表示加法赋值操作,即自身加左侧的操作数,如k+=1等价于k=k+1。第二章数据类型1.已知:a=250,b=‘250’,请阐述a和b所引用的对象的区别。解答:>>>a,b=250,'250'>>>type(a)<class'int'>>>>type(b)<class'str'>250是整数类型的对象,’250’是字符串类型的对象。2.将字符串“map”的字符顺序倒转为“pam”。解答:>>>a="map">>>a[::-1]'pam'或>>>b=list(a)>>>b['m','a','p']>>>b.reverse()>>>b['p','a','m']>>>"".join(b)'pam'3.请用代码将字符串’abcd’转化为列表L,再将L还原为字符串’abcd’。解答:>>>s="abcd">>>L=list(s)>>>L['a','b','c','d']>>>"".join(L)'abcd'4.请提取自己身份证号码中的出生年月日。解答:>>>sfz=>>>birthday=sfz[6:14]>>>birthday‘19760803’5.请统计字符串“Iamateacher,youareastudent.Lifeisshort,Ineedpython.”中字符a和e出现的次数。解答:>>>s="Iamateacher,youareastudent.Lifeisshort,Ineedpython.">>>s.count("a")5>>>s.count("e")76.张三和李四的电话号码分别是6601和6602,请将他们的及其号码做成一个字典类型的数据,并将李四的号码改成6603。解答:>>>d={"张三":6601,"李四":6602}>>>d["李四"]=6603>>>d{'张三':6601,'李四':6603}7.集合set有个功能就是过滤重复值。请输出字符串“Lifeisshort,Ineedpython”中不同的字符,并做成列表。解答:>>>s="Lifeisshort,Ineedpython">>>set(s){'L','o','e','f','',',','h','d','p','s','I','t','r','i','n','y'}>>>list(_)#_下划线表示上一次运行的结果['L','o','e','f','',',','h','d','p','s','I','t','r','i','n','y']第三章流程控制1.请设计一个程序统计字符串"Lifeisshort,Ineedpython"中各个字符出现的次数。解答:s="Lifeisshort,Ineedpython"d={}foriins:ifiind:d[i]+=1else:d[i]=1print(d)2.写一段程序,实现如下功能:a)连续输入几个英文姓名,直到输入字母q时退出输入;b)按照字典顺序将所有姓名排序并打印输出。解答:name_lst=[]whileTrue:name=input("PleaseinputanEnglishname(input'q'thenexit)")ifname=="q":breakelse:name_lst.append(name)name_lst.sort()print(name_lst)3.将字典{“name”:“python”,lang”:”english”}的键和值对换。解答:dd={}d={"name":"python","lang":"english"}forj,kind.items():dd[k]=jprint(dd)第四章函数和类1.编写一个自定函数,当给出一段英文文本时,函数会自动输出文本中各单词出现的频率字典。解答:s="Thousandsofpeople?peoplehaveattendedarallyinthecapitalcity.calling\formoreaction。tobetakenonclimatechange.\Thedemonstration,towhichtookplaceonSunday?"defstr2dict_frequency(s):"""将输入的英文文本中的单词出现的频率做成字典。s:是文本输出是字典"""L=S.split()foriin[",",".","。","!","!","'","?",",","?"]:L=[x.strip(i)forxinL]d={}foriinL:ifiind.keys():d[i]+=1else:d[i]=1returnd2.编写一个函数,将两个列表自动组合成字典。解答:defto_dictionary(keys,values):returndict(zip(keys,values))keys=["a","b","c"]values=[2,3,4]to_dictionary(keys,values)3.编写一个函数,将给定的列表中的元素进行分类,若是数字则放在列表num中,若是其他的字符则放在strs列表中。如[1,"a","2",3,"c"],输出为num=[1,'2',3],strs=['a','c']。解答:defnum_str(L):"""本函数将数值和字符型数字与其他字符区分开。参数L是一个列表;返回两个列表,一个是L中的所有数值和字符型数字,另一个是其它字符。"""num=[]strs=[]foriinL:ifstr(i).isdigit():num.append(i)else:strs.append(i)print("num:",num,"\n","strs:",strs)returnnum,strsL=[1,"c","2",3,"a"]num_str(L)3.编写一个类,能识别输入的身份证号码对错,该类还有输出省份、出生年月、男女的方法属性。解答:classid_prov():"""写一个类识别输入的身份证号码对错,其方法有输出省份、出生年月、男女。"""#导入省份代码prv={11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江",31:"上海",32:"江苏",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",42:"湖北",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",51:"四川",52:"贵州",53:"云南",54:"西藏",61:"陕西",62:"甘肃",63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"}def__init__(self,w):self.w=wdefarear(self):p=self.prv[int(str(self.w)[:2])]print("你的身份证显示出生地是:%s"%p)defbirthday(self):print("你的身份证显示生日是:%s"%self.w[6:10])defsex(self):print("你的身份证显示性别为:%s"%("男"ifint(self.w[-1])%2==1else"女"))a=id_prov()a.sex()a.birthday()a.arear()第五章Numpy1.随机生成一个1~100之间的10*4的数组。2.将数组中含有某个指定的数n从数据行中找出来,并写成自定义函数rand_df_num(n)。解答:defrand_dataframe_num(n):importnumpyasnps=np.random.randint(1,100,size=(10,4))ss=np.where(s==n)print(s)ifss[0].size<1:print("产生的随机数组中没有%s。"%n)else:print("产生的随机数组中%s在行号为%s的行。"%(n,ss[0]))returnsum(ss[0])rand_dataframe_num(5)第六章Pandas1.读取Excel文件i_nuc.xlsx中Sheet3数据,并对数据做描述性统计分析。2.成绩表中有多个Sheet,要求把Sheet3中的数字改成对应的成绩档次,优、良、中、差四挡,其中:100分为“优”,80-99分为“良”,60-79分为“中”,60分以下为“差”。成绩中如果有汉字的,需要保留汉字。例如:“缺考”、“作弊”等。解答:importpandasaspddf_dict=pd.read_excel(r'd:\OneDrive\出版\2023人大出版社\i_nuc.xlsx',sheet_name=None,dtype='string')#读取excelsh3=df_dict['Sheet3']#读取excel中的Sheet3sh3.describe()#100分为“优”,80-99分为“良”,60-79分为“中”,60分以下为“差”ty=pd.to_numeric(sh3.体育,errors='coerce')ty_=[]foriinty:try:i=float(i)i=i*10ifi==100:ty_.append("优")elifi>=80:ty_.append("良")elifi>=60:ty_.append("中")else:ty_.append("差")except:ty_.append(i)print(ty_)i__=[]foriin['英语','军训','数分','高代','解几']:print(i)ty=pd.to_numeric(sh3[i],errors='coerce')i_=[]foriinty:try:i=float(i)i=i*10ifi==100:i_.append("优")elifi>=80:i_.append("良")elifi>=60:i_.append("中")else:i_.append("差")except:i_.append(i)print(i_)i__.append(i_)i__.insert(1,ty_)colum=['英语','体育','军训','数分','高代','解几']j=0foriincolum:sh2[i]=i__[j]j+=1sh3也可以采用以下正则方法。importpandasaspddf_dict=pd.read_excel(r'd:\python\i_nuc.xlsx',sheet_name=None,dtype='string')#读取excelsh1=df_dict['Sheet1']#读取excel中的Sheet1sh3=df_dict['Sheet3']sh7=df_dict['Sheet7']sh1.replace(regex={r'[1-5]\d\b':"差",r'[67]\d\b':"中",r'[89]\d\b':'良','100':'优',r"\d\b":"差"},inplace=True)sh3.replace(regex={r'[1-5]\d\b':"差",r'[67]\d\b':"中",r'[89]\d\b':'良','100':'优',r"\d\b":"差"},inplace=True)sh7.replace(regex={r'[1-5]\d\b':"差",r'[67]\d\b':"中",r'[89]\d\b':'良','100':'优',r"\d\b":"差"},inplace=True)第七章数据处理与分析1.现有excel文件含有两个表,分别放在sheet1和sheet2中,表格内容如下。表一:成绩表学号 C# 线代 Python16010203 78 88 9616010210 87 58 8316010205 84 65 8216010213 86 72 6716010215 67 76 8516010208 76 43 6916010209 56 68 9216010204 89 缺考 8616010211 81 81 7516010212 73 77 6916010206 65 80 8416010214 90 73 9116010207 91 64 86表二:信息表姓名 学号 手机号码张三 16010203 16699995521李四 16010204 16699995522王五 16010205 16699995523赵六 16010206 16699995524郑七 16010207 16699995525钱八 16010208 16699995526张千 16010209 16699995527赵六 16010210 16699995528李矛 16010211 16699995529张白 16010212 16699995510白九 16010213 16699995511冀二 16010214 16699995512余一 16010215 16699995513现请帮班主任做如下工作:1) 给成绩表加上姓名列;2) 给成绩表加上字段“总分”列,并求出总分;3) 增加列字段“等级”,标注每人“总分”的“优、良、中、及格、差”(270≤优,240≤良,210≤中,及格≤180,差≤180);4) 计算各门课程的平均成绩以及标准差。解答:importpandasaspd#读取表一中的数据为df1,表二中的数据为df2df1=pd.read_excel(r'c:\Users\yubg\sizhang.xlsx',sheetname='Sheet1')df2=pd.read_excel(r'c:\Users\yubg\sizhang.xlsx',sheetname='Sheet2')#问题1:按照学号对应合并表一表二数据保存为datadata=pd.merge(df1,df2,left_on='学号',right_on='学号')#将data中的“手机号码”列删除,data1数据即为我们的第一问答案data1=data.drop('手机号码',axis=1)#统计总成绩,由于数据中有缺考,所以要先将“缺考”替换为0##先找到“缺考”所在的位置。结果显示在index=7,并在“线代”这一列中foriinlist(df1.columns):s=df1[df1[i].isin(['缺考'])]#找出“缺考”所在的位置(行和列)print(s)#为了保持原数据不受破坏,我们拷贝一份数据为df。此处必须要“硬”拷贝,否则df和df1同时被修改了,如:df=df1[:]就不行。df=data1.copy()#定位到“缺考”位置,并赋值为0df.at[7,'线代']=0#查看df中的“缺考”是否替换成了数字0。如果不替换,也可以把缺考所在的行删除:df.drop(7)print(df)#问题2:在修改后的数据df中添加“总分”列,并计算出总成绩df['总分']=(df['C#']+df['线代']+df['Python']).astype(int)#问题3:增加列字段“等级”把“总分”按照“优、良、中、及格、差”(270≤优,240≤良,210≤中,及格≤180,差≤180)分类bins=[0,180,210,240,270,301]labels=["差","及格","中","良","优"]df['类别']=pd.cut(df['总分'],bins,labels=labels)#问题4:计算各门课程的平均成绩以及标准差;col=['C#','线代','Python']foriincol:m=df[i].mean()s=df[i].std()print(i,":mean",m,';std:',s)第八章数据可视化1.根据第七章的练习数据结果,做"总分"成绩分布图,纵坐标表示成绩,横坐标表示学号或者姓名,画出总分的均分横线,让每位同学的总分圆点分布在均分线上下,以便于观察每位同学的成绩离开均分的距离。解答:#为了便于图中显示中文importmatplotlibimportmatplotlib.pyplotaspltfont={'family':'SimHei'}matplotlib.rc('font',**font)#画图plt.plot(range(len(list(df['总分']))),df['总分'],'o')plt.xlabel('姓名')plt.xticks(df.index+1/2,df['姓名'],rotation=45)plt.ylabel('总分')plt.plot(range(len(list(df['总分']))),[df['总分'].mean()foriinrange(len(list(df['总分'])))],'-')#plt.grid(True)plt.show()第九章正则表达式与格式化输出1.请编写一段代码,在给定的文本中识别出电话号码和Email,要求使用re模块来处理。解答:importre#定义一个字符串text="我的电话号码是123-456-7890,邮箱是example@。"#使用正则表达式匹配电话号码phone_pattern=pile(r'\d{3}-\d{3}-\d{4}')phone=re.findall(phone_pattern,text)print(phone)#使用正则表达式匹配邮箱地址email_pattern=pile(r'[\w\.-]+@[\w\.-]+\.\w+')email=re.findall(email_pattern,text)print(email)2.编写一个程序,要求用户输入他们的姓名、年龄和身高,将这些信息格式化为一个格式化的字符串,其中姓名、年龄和身高之间用逗号分隔,并且每个信息之间用制表符分隔。当身高输入的不是数字时,需要提醒并且重新输入,直到输入的是数字为止。年龄这里要计算虚岁,所以在输入的年龄数字上需要加1。考虑到年龄有可能输入的不是数字,所以加1时可能会报错,编写代码时请使用try语句。解答:#获取用户输入name=input("请输入您的姓名:")height=input("请输入您的身高(cm):")whilenotheight.isdigit():height=input("请再次输入您的身高(cm):")try:age=int(input("请输入您的年龄:"))+1except:age=input("请重新输入您的年龄:")whilenotage.isdigit():age=input("请再次输入您的年龄:")age=int(age)+1#使用format()函数进行字符串格式化formatted_string="{:<15}\t{:<5}\t{:<10}".format(name,age,height)else:#使用format()函数进行字符串格式化formatted_string="{:<15}\t{:<5}\t{:<10}".format(name,age,height)#输出格式化后的字符串print(formatted_string)第十章综合应用

常用的70个数据分析网址数据分析常用网站字典,一共70个,可视化、词频词云、PPT模板等等面面俱到【数据可视化工具】百度ECharts /Cytoscape /图表秀 /数据观 /微博足迹可视化 /weibova/weibogeo_footprint/index.htmlBDP个人版 /home.html魔镜 /图表秀 文图 https://www.wentu.io百度图说 infogr.am https://infogr.am/Infographic visually https://visual.lyPiktochart slides 声享 AntV /index.html【词频分析工具、词云】Rost /downinfo/54638.html图悦 /语义分析系统 /nlpir/Tagul /腾讯文智 /semantic

温馨提示

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

评论

0/150

提交评论