Python大数据基础与实战_第1页
Python大数据基础与实战_第2页
Python大数据基础与实战_第3页
Python大数据基础与实战_第4页
Python大数据基础与实战_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

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

文档简介

Python大数据基础与实战实验(实训)指导书

实验项目内容与学时分配序号实验名称实验内容学时实验类型实验要求1anaconda安装和使用Anaconda的安装、配置和简单实用2验证必修2序列的使用列表、元组、字典、集合的使用2设计必修3字符串处理程序编写编写对字符串(正则表达式)进行操作的程序2设计必修4函数的使用函数的设计与使用2设计必修5类的使用类的设计与使用2设计必修6文件的操作和使用二进制和文本文件的操作使用2设计必修7异常处理异常处理程序的编写2设计必修8数据可视化数据可视化库matplotlib的使用2设计必修9数据分析Pandas库的使用2设计选修10网络爬虫设计lxml、requests库的使用2设计选修合计学时20实验一anaconda安装与使用实验目的和要求掌握windows下PythonIDEL的安装。掌握anaconda的安装和配置、jupyternotebook、spyder工具的使用3)掌握使用pip安装Python扩展库。4)熟悉离线安装轮子文件的方法。二、实验内容1)PythonIDL、anaconda下载和安装。2)JupyterNotebook使用和常用功能。3)扩展库的安装。4)轮子文件的安装。三、实验仪器、设备计算机一台,安装有Windows7操作系统四、实验原理从Python官网下载Python3.7.2。从anaconda官网下载anaconda,建议下载3.6以上版本。Jupyternotebook是一个IDL,可以进行交互式编程,支持多种格式文件的编辑。IDEL也可以进行交互性编程。五、实验步骤1.下载anaconda/PythonIDEL从官网上下载anaconda3.6,需要根据安装的OS来进行选择。具体的安装环境要求可以查看官网的文档说明。从官网上下载Python,建议安装3.7.2版本。安装anaconda安装时选择定制安装,建议不要把anaconda安装在c:盘上。安装时选择针对所有用户。不要把anacond自带的python解释器加入到path中。启动JupyterNotebook

1)【开始】-->【所有程序】-->【anaconda】-->【JupyterNotebook】选择复制链接。修改属性,将%userprofile%更改为今后存放Python源程序的目录。启动JupyterNotebook。单击【new】--->“Python3”,进入Python脚本编辑界面。可以选择单元类型【code】,输入源代码,通过按下【shifit】+【enter】组合键,运行程序。也可以选择单元类型【markdown】。Markdown模式下可以对文本进行编辑,采用Markdown的语法规范,可以设定文本格式,插入链接、图片甚至数学公式,同样,通过按下【shifit】+【enter】组合键可运行Markdown单元,显示格式化的文本。在首行前加一个“#”字符和空格代表一级标题,加两个“#”字符和空格代表二级标题,以此类推。项目符号可以使用“+”、“-”、“*”加空格,公式使用两个“$”符号,例如“$E=mc^2$”。完成以下内容的输入:4.安装第三方扩展库(以安装matplotlib库为例。)1)升级pipwindows下进入命令行模式,输入python-mpipinstall--upgradepip。2)切换到python安装目录的scripts子目录下3)依次输入pipinstallnumpyscipy、pipinstallmatplotlib。5.离线安装第三方扩展库如果遇到安装不成功的扩展库,使用浏览器打开下面的网址,下载whl文件进行离线安装:/~gohlke/pythonlibs/。在IDLE中使用import导入安装好的扩展库,验证是否安装成功。六、实验注意事项1)Python是解释型语言,需要Python解释器支持。2)可以使用.tab来获取对象的属性,使用函数名?获取函数帮助信息,??函数名获取函数源码。七、实验报告要求实验报告以电子文档形式提交。实验报告主要内容:anaconda安装过程、第三方扩展库的安装、Python程序基本结构。八、实验成绩考核(黑体、小四号、加粗、行距1.5倍缩进两个字符)(百分制)实验二序列、流程控制语句的使用一、实验目的和要求掌握列表的功能和使用。掌握元组的功能和使用。掌握字典的功能和使用。掌握集合的功能和使用。掌握选择结构和循环结构for、while的使用二、实验内容把列表中的所有数字都加5,得到新列表。输入三个序列,输出三个序列中最大值相乘的结果和最大值出现的位置。生成包含1000个随机字符的字符串,统计每个字符的出现次数。已知有一个包含一些同学成绩的字典,现在需要计算所有成绩的最高分、最低分、平均分,并查找所有最高分同学。编写一个程序,检查用户输入3条边能否构成三角形,如果可以构成,请判断三角形的类型(锐角、钝角和直角以及等腰、等边)。三、实验仪器、设备Windows7以上OS、安装有anaconda。四、实验原理列表、集合、元组和集合的定义、可以进行的操作。五、实验步骤1)启动jupyternotebook2)单击【new】按钮。3)输入程序。3)使用【run】按钮执行程序。六、实验注意事项1)正确使用数据类型。2)先确定思路,在编写程序实现。七、实验报告要求实验报告以电子文档形式提交。实验报告主要内容:完成要求的程序编写,提交源代码和运行结果。比较列表、元组、字典和集合的异同。比较for、while循环的执行流程。八、实验成绩考核(黑体、小四号、加粗、行距1.5倍缩进两个字符)(百分制)参考程序1)x=list(range(10))y=[]fornuminx: y.append(num+5)或者[num+5fornuminx]2)x=input("inputfirstlist:")x=list(map(int,x.split()))i=max(x)iPos=x.index(i)y=input("inputsecondlist:")y=list(map(int,y.split()))j=max(y)jPos=y.index(j)z=input("inputthirdlist:")z=list(map(int,z.split()))k=max(z)kPos=z.index(k)print("maxis",i*j*k,",positionis%d,%d,%d."%(iPos,jPos,kPos))3)importstringimportrandomx=string.ascii_letters+string.digits+string.punctuationy=[random.choice(x)foriinrange(1000)]z=''.join(y)d=dict()#使用字典保存每个字符出现次数forchinz:d[ch]=d.get(ch,0)+14)scores={"ZhangSan":45,"LiSi":78,"WangWu":40,"ZhouLiu":96,"ZhaoQi":65,"SunBa":90,"ZhengJiu":78,"WuShi":99,"DongShiyi":60}highest=max(scores.values())#最高分lowest=min(scores.values())#最低分average=sum(scores.values())/len(scores)#平均分highestPerson=[nameforname,scoreinscores.items()ifscore==highest]#或者scores={'LiSi':78,'ZhaoQi':65,'WangWu':40,'WuShi':99,'ZhengJiu':78,'ZhangSan':45,'SunBa':90,'ZhouLiu':96,'DongShiyi':60}highest=max(scores.values())average=sum(scores.values())/len(scores)forname,scoreinscores.items():ifscore==highest:print(name)5)"""本程序完成对输入的3条边进行判断,如果构成三角形,则判断是锐角、钝角和直角三角形;还可以判断等腰和等边三角形"""x,y,z=eval(input("请输入三角形3条边的长度(以,分隔):"))#输入三条边长度x,y,z=sorted([x,y,z],reverse=True)#降序排列三条边长度whiley+z<=x:print("不能构成三角形,请重新输入3条边的长度:")x,y,z=eval(input("请输入三角形3条边的长度(以,分隔):"))x,y,z=sorted([x,y,z],reverse=True)cosX=(y**2+z**2-x**2)/2.0/y/zifcosX>0.0:print("锐角三角形")elifcosX==0.0:print("直角三角形")else:print("钝角三角形")ifx==y==z:print("等边三角形")elifx==yory==zorx==z:print("等腰三角形")实验三字符串处理程序编写一、实验目的和要求熟悉并掌握字符串的定义掌握字符串常用操作的使用二、实验内容生成指定长度的随机密码。编写程序实现字符串加密和解密,循环使用指定密钥,采用简单的异或算法。检查并判断密码字符串的安全强度,密码必须至少包含6个字符。编写程序,模拟打字练习程序的成绩评定。假设origin为原始内容,userInput为 用户练习时输入的内容,要求用户输入的内容长度不能大于原始内容的长度,如果对应 位置的字符一致则认为正确,否则判定输入错误。最后成绩为:正确的字符数量/原始 字符串长度,按百分制输出,要求保留2位小数。三、实验仪器、设备计算机、windows7操作系统+anaconda。四、实验原理1)在Python中,字符串属于不可变有序序列,使用单引号、双引号、三单引号或三双引号作为定界符,并且不同的定界符之间可以互相嵌套。2)Python字符串对象提供了大量方法用于字符串的切分、连接、替换和排版等操作,另外还有大量内置函数和运算符也支持对字符串的操作。五、实验步骤1)启动jupyternotebook2)单击【new】按钮。3)输入程序。4)使用【run】按钮执行程序。六、实验注意事项正确使用字符串的方法和基本操作。字符串编码方案。编程规范。七、实验报告要求实验报告以电子文档形式提交。实验报告主要内容:完成要求的程序编写,提交源代码和运行结果。八、实验成绩考核(黑体、小四号、加粗、行距1.5倍缩进两个字符)(百分制)参考程序:1)importstringimportrandomcharacters=string.digits+string.ascii_lettersprint(''.join([random.choice(characters)foriinrange(8)]))#返回8位的密码字段print(''.join([random.choice(characters)foriinrange(10)]))#返回10位的密码字段print(''.join([random.choice(characters)foriinrange(16)]))#返回16位的密码字段2)fromitertoolsimportcyclesource='xijinguniveisity'key='FanHui'result=''temp=cycle(key)forchinsource:result=result+chr(ord(ch)^ord(next(temp)))print(result)3)importstringpwd=input(‘inputapassword’)#密码必须至少包含6个字符ifnotisinstance(pwd,str)orlen(pwd)<6:return'notsuitableforpassword'#密码强度等级与包含字符种类的对应关系d={1:'weak',2:'belowmiddle',3:'abovemiddle',4:'strong'}#分别用来标记pwd是否含有数字、小写字母、大写字母和指定的标点符号r=[False]*4forchinpwd:#是否包含数字ifnotr[0]andchinstring.digits:r[0]=True#是否包含小写字母elifnotr[1]andchinstring.ascii_lowercase:r[1]=True#是否包含大写字母elifnotr[2]andchinstring.ascii_uppercase:r[2]=True#是否包含指定的标点符号elifnotr[3]andchin',.!;?<>':r[3]=True#统计包含的字符种类,返回密码强度result=d.get(r.count(True),'error')4)origin='''Beautifulisbetterthanugly.\Explicitisbetterthanimplicit.\Simpleisbetterthancomplex.\Complexisbetterthancomplicated.\Flatisbetterthannested.'''print("原始字符串:",origin)userInput=input("请按照原始字符串输入:")iflen(origin)<len(userInput):print("输入字符串和原始字符串长度不一致!")#精确匹配的字符个数right=sum(1foroc,ucinzip(origin,userInput)ifoc==uc)rate=right/len(origin)print("正确率为:{}%".format(round(rate*100,2)))实验四函数的编写和使用一、实验目的和要求熟悉并掌握函数的定义和调用理解函数形参和实参的含义,能够正确设置形参类型理解隐含函数lambda二、实验内容输出“水仙花数”。所谓水仙花数是指1个3位的十进制数,其各位数字的立方和等于该数本身。例如:153是水仙花数,因为153=13+53+33。请使用函数式编程+内置函数来实现。把列表中的所有数字都加5,得到新列表。请使用函数实现。计算两点间曼哈顿距离。判断密码强度,数字、小写字母、大写字母和指定的标点符号,分别对应weak、belowmiddle、abovemiddle、strong。编写函数,求任意一个数的立方根。三、实验仪器、设备计算机、安装有anaconda。四、实验原理1)def定义函数2)函数名参数后面添加:表示函数体开始3)利用缩进表示函数体4)函数内参数为局部变量五、实验步骤1)启动jupyternotebook2)单击【new】按钮。3)输入程序。3)使用【run】按钮执行程序。六、实验注意事项函数的正确缩进。Lambda函数的定义和实现。函数内变量的作用域。七、实验报告要求实验报告以电子文档形式提交。实验报告主要内容:完成要求的程序编写,提交源代码和运行结果。八、实验成绩考核(黑体、小四号、加粗、行距1.5倍缩进两个字符)(百分制)参考程序1)defsxh():fornuminrange(100,1000):r=map(lambdax:int(x)**3,str(num))ifsum(r)==num:print(num)2)defadd5(alist):return[i+5foriinalist]3)defmanhattanDistance(x,y):returnsum(map(lambdai,j:abs(i-j),x,y))print(manhattanDistance([1,2],[3,4]))print(manhattanDistance([1,2,3],[4,5,6]))print(manhattanDistance([1,2,3,4],[5,6,7,8]))4)defcheck(pwd):#密码强度等级与包含字符种类的对应关系d={1:'weak',2:'belowmiddle',3:'abovemiddle',4:'strong'}#分别用来标记pwd是否含有数字、小写字母、大写字母和指定的标点符号r=[False]*4forchinpwd:ifnotr[0]andchinstring.digits:r[0]=Trueelifnotr[1]andchinstring.ascii_lowercase:r[1]=Trueelifnotr[2]andchinstring.ascii_uppercase:r[2]=Trueelifnotr[3]andchin',.!;?<>':r[3]=True#统计包含的字符种类,返回密码强度returnd.get(r.count(True),'error')5)defcbrt(x): ifx==0.0: return0.0 x1=x whileTrue: x2=(2.0*x1+x/x1/x1)/3 ifabs((x2-x1)/x1)<0.001: returnx2 x1=x2实验五类的设计一、实验目的和要求熟悉并掌握类的编写过程理解类中成员的含义二、实验内容系统中的用户分类非常复杂,不同用户组具有不同的行为和权限,并且可能会经常改变,管理非常困难。这时候我们可以独立地定义一些行为,然后根据需要来为不同的用户设置相应的行为能力。请设计一个Person类,完成sing()、walk()、eat()等行为。现有一个基类Animal,其中有一个方法show(),请使用多态性方法,实现Cat、Dog、Tiger中的show()方法。编写一个队列类myQueue,完成队列的初始化、删除、入队和出队等操作。三、实验仪器、设备计算机、安装有ananconda系统四、实验原理 1)使用jupyternotebook来编写类的Python程序2)执行类的Python程序3)根据提示信息判断程序中类的使用错误修改程序得出正确的结果五、实验步骤1)启动jupyternotebook2)单击【new】按钮。3)输入程序。3)使用【run】按钮执行程序。六、实验注意事项使用jupyternotebook输入源代码。熟悉类的语法结构。当出现错误脚本会停止在错误行上,修正错误后,重新运行脚本。七、实验报告要求实验报告以电子文档形式提交。实验报告主要内容:完成要求的程序编写,提交源代码和运行结果。八、实验成绩考核(黑体、小四号、加粗、行距1.5倍缩进两个字符)(百分制)参考程序:1)importtypesclassPerson(object):def__init__(self,name):assertisinstance(name,str),'namemustbestring'=namedefsing(self): print(+'cansing.')defwalk(self): print(+'canwalk.') defeat(self): print(+'caneat.')2)classAnimal(object):#定义基类defshow(self):print('Iamananimal.')classCat(Animal):#派生类,覆盖了基类的show()方法defshow(self):print('Iamacat.')classDog(Animal):#派生类defshow(self):print('Iamadog.')classTiger(Animal):#派生类defshow(self):print('Iamatiger.')classTest(Animal):#派生类,没有覆盖基类的show()方法passx=[item()foritemin(Animal,Cat,Dog,Tiger,Test)]foriteminx:#遍历基类和派生类对象并调用show()方法item.show()3)classmyDeque:#构造方法,默认队列大小为10def__init__(self,iterable=None,maxlen=10):ifiterable==None:self._content=[]self._current=0else:self._content=list(iterable)self._current=len(iterable)self._size=maxlenifself._size<self._current:self._size=self._current#析构方法def__del__(self):delself._content#修改队列大小defsetSize(self,size):ifsize<self._current:#如果缩小队列,需要同时删除后面的元素foriinrange(size,self._current)[::-1]:#逆序delself._content[i]self._current=sizeself._size=size#在右侧入队defappendRight(self,v):ifself._current<self._size:self._content.append(v)self._current=self._current+1else:print('Thequeueisfull')#在左侧入队defappendLeft(self,v):ifself._current<self._size:self._content.insert(0,v)self._current=self._current+1else:print('Thequeueisfull')#在左侧出队defpopLeft(self):ifself._content:self._current=self._current-1returnself._content.pop(0)else:print('Thequeueisempty')#在右侧出队defpopRight(self):ifself._content:self._current=self._current-1returnself._content.pop()else:print('Thequeueisempty')#循环移位defrotate(self,k):ifabs(k)>self._current:print('kmust<='+str(self._current))returnself._content=self._content[-k:]+self._content[:-k]#元素翻转defreverse(self):self._content=self._content[::-1]#显示当前队列中元素个数def__len__(self):returnself._current#使用print()打印对象时,显示当前队列中的元素def__str__(self):return'myDeque('+str(self._content)+',maxlen='+str(self._size)+')'#直接对象名当做表达式时,显示当前队列中的元素__repr__=__str__#队列置空defclear(self):self._content=[]self._current=0#测试队列是否为空defisEmpty(self):returnnotself._content#测试队列是否已满defisFull(self):returnself._current==self._sizeif__name__=='__main__':print('Pleaseusemeasamodule.')实验六文件的操作和使用一、实验目的和要求掌握文件的定义、操作和使用能够正确使用文件来获取和存储数据二、实验内容递归遍历指定文件夹下的子文件夹和文件。编写程序,递归删除指定文件夹中指定类型的文件。编写程序,进行文件夹增量备份。三、实验仪器、设备计算机、安装有ananconda系统四、实验原理 1)使用jupyternotebook来编写类的Python程序2)执行类的Python程序3)根据提示信息判断程序中类的使用错误修改程序得出正确的结果五、实验步骤1)启动jupyternotebook2)单击【new】按钮。3)输入程序。3)使用【run】按钮执行程序。六、实验注意事项使用jupyternotebook输入源代码。熟悉文件的操作语法。当出现错误脚本会停止在错误行上,修正错误后,重新运行脚本。七、实验报告要求实验报告以电子文档形式提交。实验报告主要内容:完成要求的程序编写,提交源代码和运行结果。八、实验成绩考核(黑体、小四号、加粗、行距1.5倍缩进两个字符)(百分制)参考程序:1)fromosimportlistdirfromos.pathimportjoin,isfile,isdirdeflistDirDepthFirst(directory):#遍历文件夹,如果是文件就直接输出,如果是文件夹,就输出显示,然后递归遍历该文件夹forsubPathinlistdir(directory):path=join(directory,subPath)print(path)ifisdir(path):listDirDepthFirst(path)2)fromos.pathimportisdir,join,splitextfromosimportremove,listdirimportsysfiletypes=['.tmp','.log','.obj','.txt']#指定要删除的文件类型defdelCertainFiles(directory):ifnotisdir(directory):returnforfilenameinlistdir(directory):temp=join(directory,filename)ifisdir(temp):delCertainFiles(temp)elifsplitext(temp)[1]infiletypes:#检查文件类型remove(temp)print(temp,'deleted....')3)importosimportfilecmpimportshutilimportsysdefautoBackup(scrDir,dstDir):if((notos.path.isdir(scrDir))or(notos.path.isdir(dstDir))or(os.path.abspath(scrDir)!=scrDir)or(os.path.abspath(dstDir)!=dstDir)):usage()foriteminos.listdir(scrDir):scrItem=os.path.join(scrDir,item)dstItem=scrItem.replace(scrDir,dstDir)ifos.path.isdir(scrItem):#创建新增的文件夹,保证目标文件夹的结构与原始文件夹一致ifnotos.path.exists(dstItem):os.makedirs(dstItem)print('makedirectory'+dstItem)#递归调用自身函数autoBackup(scrItem,dstItem)elifos.path.isfile(scrItem):#只复制新增或修改过的文件if((notos.path.exists(dstItem))or(notfilecmp.cmp(scrItem,dstItem,shallow=False))):shutil.copyfile(scrItem,dstItem)print('file:'+scrItem+'==>'+dstItem)defusage():print('scrDiranddstDirmustbeexistingabsolutepathofcertaindirectory')print('Forexample:{0}c:\\olddirc:\\newdir'.format(sys.argv[0]))sys.exit(0)if__name__=='__main__':iflen(sys.argv)!=3:usage()scrDir,dstDir=sys.argv[1],sys.argv[2]autoBackup(scrDir,dstDir)实验七异常处理一、实验目的和要求掌握Python的异常处理结构能够独立编写异常处理程序二、实验内容编写函数模拟猜数游戏。系统随机产生一个数,并且指定玩家最多可以猜的次数,系统会根据玩家的猜测进行提示,玩家则可以根据系统的提示对下一次的猜测进行适当调整。用户输入若干个分数,求所有分数的平均分。每输入一个分数后询问是否继续输入下一个分数,回答“yes”就继续输入下一个分数,回答“no”就停止输入分数。请使用异常处理机制来编写程序编写自定义异常类,完成对异常信息的记录,将异常信息写入到app_log_file.txt文件中。三、实验仪器、设备计算机、安装有ananconda系统四、实验原理 1)使用jupyternotebook来编写异常处理的Python程序2)执行Python程序3)根据提示信息判断程序中的使用错误修改程序得出正确的结果五、实验步骤1)启动jupyternotebook2)单击【new】按钮。3)输入程序。4)使用【run】按钮执行程序。六、实验注意事项使用jupyternotebook输入源代码。熟悉文件的操作语法。当出现错误脚本会停止在错误行上,修正错误后,重新运行脚本。七、实验报告要求实验报告以电子文档形式提交。实验报告主要内容:完成要求的程序编写,提交源代码和运行结果。八、实验成绩考核(黑体、小四号、加粗、行距1.5倍缩进两个字符)(百分制)参考程序:1)fromrandomimportrandintdefguess(maxValue=100,maxTimes=5):value=randint(1,maxValue)#随机生成一个整数foriinrange(maxTimes):prompt='StarttoGUESS:'ifi==0else'Guessagain:'try:#使用异常处理结构,防止输入不是数字的情况x=int(input(prompt))except:print('YouMustinputanintegerbetween1and',maxValue)else:ifx==value:#猜对了print('Congratulations!')breakelifx>value:print('Toobig')else:print('Toolittle')else:#次数用完还没猜对,游戏结束,提示正确答案print('Gameover.FAIL.')print('Thevalueis',value)2)numbers=[]#使用列表存放临时数据whileTrue:x=input('请输入一个成绩:')try:#异常处理结构numbers.append(float(x))except:print('不是合法成绩')whileTrue:flag=input('继续输入吗?(yes/no)').lower()ifflagnotin('yes','no'):#限定用户输入内容必须为yes或noprint('只能输入yes或no')else:breakifflag=='no':breakprint(“平均分是{0:.1f}”.format(sum(numbers)/len(numbers)))3)fromdatetimeimportdatetimeimporttraceback,sysclassMyException(Exception):logfile="c:\\app_log_file.txt"defdoLog(self):log=open(self.logfile,"wt")day=datetime.today()x=sys.exc_info()print("\n------出错了------",file=log)print("\n日期时间:",day,file=log)log.write("\n异常类型:%s"%x[0].__name__)log.write("\n异常描述:%s"%x[1])print("\n堆栈跟踪信息:",file=log)traceback.print_tb(self.args[1],file=log)#获得堆栈跟踪信息log.close()try:try:print(5/'0')exceptExceptionasex:raiseMyException(ex.args[0],ex.__traceback__)except(MyException)asex:ex.doLog()finally:print("程序执行结束")实验八数据可视化一、实验目的和要求掌握折线图的作用与绘制方法。掌握柱形图的作用与绘制方法。掌握条形图的作用与绘制方法。掌握散点图的作用与绘制方法掌握气泡图的作用与绘制方法。掌握面积图的作用与绘制方法。掌握雷达图的绘制方法掌握三维曲面图、三维散点图的绘制方法掌握数学函数图形的绘制方法掌握树地图的绘制方法实验内容折线图的绘制方法。柱形图的绘制方法。条形图的绘制方法。散点图的绘制方法气泡图的绘制方法。面积图的绘制方法。雷达图的绘制方法三维曲面图、三维散点图的绘制方法数学函数图形的绘制方法树地图的绘制方法三、实验仪器、设备计算机、安装有ananconda系统四、实验原理 1)使用jupyternotebook来编写Python程序。2)导入matplotlib.pyplot和seaborn库。3)使用seaborn和matplotlib库提供的函数来编写代码。五、实验步骤1)启动jupyternotebook2)单击【new】按钮。3)输入程序4)使用【run】按钮执行程序。六、实验注意事项使用jupyternotebook输入源代码。在代码第一行加入指令

%matplotlibinline,以确保图形能够在浏览器中显示。如果要将图形存盘,使用如下代码:plt.savefig(r"d:\test2.jpg",dpi=1000,bbox_inches='tight',pad_inches=0)。七、实验报告要求实验报告以电子文档形式提交。实验报告主要内容:完成要求的程序编写,提交源代码和运行结果。八、实验成绩考核(黑体、小四号、加粗、行距1.5倍缩进两个字符)(百分制)数学函数图形的绘制1)初等函数绘图代码:importnumpyasnpimportpandasaspdimportmatplotlib.pyplotaspltplt.rcParams['font.sans-serif']=['KaiTi']#SIMHei黑体plt.rcParams['axes.unicode_minus']=False#正常显示图中负号plt.figure(figsize=(15,4))#设置画布大小fig,ax=plt.subplots(2,2,figsize=(15,12))#一个绘制4个图形importmathx=np.linspace(0,2*math.pi);ax[0,0].plot(x,np.sin(x),c='red',linestyle='--');ax[0,1].plot(x,np.cos(x))ax[1,0].plot(x,np.log(x))ax[1,1].plot(x,np.exp(x))plt.show()运行截图:2)极坐标图形的绘制代码:#根据函数式的基本绘图,在直角坐标下可使用参数方法:#(x/a)^2+(y/b)^2=1等价于x=asin(c),y=bcos(c),(0<c<2*pi)#其图形绘制方法如下importnumpyimportmathimportmatplotlib.pyplotaspltt=numpy.linspace(0,2*math.pi)x=2*numpy.sin(t)y=2*numpy.cos(t)plt.plot(x,y)plt.text(0,0,r'$\frac{x^2}{2}+\frac{y^2}{3}=1$',fontsize=20);plt.show()运行截图:2.绘制折线图代码:importnumpyasnpimportmathimportmatplotlib.pyplotasplt#折线图常用于表示随着时间的推某指标的变化趋势,使用的是plt库中的plot方法。#plot方法的具体参数如下:#plt.plot(x,y,color,linestyle,linewidth,marker,markeredgeclor,markeredgwidth,markerfacecolor,markersize,label)#其中,参数x,y分别表示x轴和y轴的数据;color表示折线图的颜色,linestyle表示显得风格,linewith表示线的宽度。#绘制某公司1-9月份注册用户量的折线图。plt.subplot(1,1,1)#建立一个坐标系x=np.array([1,2,3,4,5,6,7,8,9])#指定x值y=np.array([886,2335,5710,6482,6120,1605,3813,4428,4631])plt.plot(x,y,color='r',linestyle='dashdot',linewidth=1,marker='o',markersize=5,label='注册用户数')#绘图plt.title('某公司1-9月注册用户量',loc='center')#设置标题名及标题的位置#添加数据标签fora,binzip(x,y):plt.text(a,b,b,ha='center',va='bottom',fontsize=10)plt.grid(True)#设置网格线plt.legend()#设置图例,调用显示出plot的labelplt.show()plt.savefig(r'C:\Users\Administrator\Desktop\8.1.jpg')#保存到本地运行截图:3.绘制柱形图代码:importnumpyasnpimportmathimportmatplotlib.pyplotaspltfrompylabimport*mpl.rcParams['font.sans-serif']=['SimHei']#柱形图常用于比较不同类别之间的数据情况,使用的是plt库中的bar方法。#bar方法实现如下:#plt.bar(x,height,width=0.8,bottom=None,align='center',color,edgecolor)#其中,height表示每根柱子的高度,width表示每根柱子的宽度,bottom表示每根柱子的底部位置,每根柱子的底部位置读可以一样,也可以不一样;#align表示柱子的位置与x值得关系,有center、edge两个参数可选,center表示柱子位于x值得中心位置,edge表示柱子位于x值的边缘位置;color表示颜色;edgecolor表示柱子边缘的颜色#绘制一张全国各分区任务量的普通柱形图plt.subplot(1,1,1)#建立一个坐标系x=np.array(['东区','北区','南区','西区'])y=np.array([8566,6482,5335,7310])plt.bar(x,y,width=0.5,align='center',label='任务量',color=['r','g','b','k'])#绘图plt.title('全国各分区任务量',loc='center')#设置标题fora,binzip(x,y):plt.text(a,b,b,ha='center',va='bottom',fontsize=10)#添加数据标签plt.xlabel('分区')#设置x轴坐标plt.ylabel('任务量')#设置y轴坐标plt.legend()#显示图例plt.show()#簇状柱形图常用来表示不同类别随着同一变量的变化情况,使用的同样是plt库中的bar方法,只不过需要调整柱子的显示位置。#如绘制全国各分区任务量和完成量的簇状图形图。plt.subplot(1,1,1)#建立一个坐标系x=np.array([1,2,3,4])y1=np.array([8566,6482,5335,7310])#任务量y2=np.array([4283,2667,3655,3241])#任务量plt.bar(x,y1,width=0.3,label='任务量')#柱形图的宽度为0.3plt.bar(x+0.3,y2,width=0.3,label='完成量')#x+0.3相当于把完成量的每个柱子右移动0.3plt.title('全国各分区任务量',loc='center')#设置标题fora,binzip(x,y1):plt.text(a,b,b,ha='center',va='bottom',fontsize=12)#添加数据标签fora,binzip(x+0.3,y2):plt.text(a,b,b,ha='center',va='bottom',fontsize=12)#添加数据标签plt.xlabel('分区')#设置x轴坐标plt.ylabel('任务情况')#设置y轴坐标#设置x轴刻度值plt.xticks(x+0.15,['东区','南区','西区','北区'])#设置网格线plt.grid(False)plt.legend()#显示图例plt.show()#堆积柱形图实例#堆积柱形图常用来比较同类别各变量和不同类别变量的总和差异,使用的同样是plt库中的bar方法,只要在相同的x位置绘制不同的y,y就会自动叠加。#如,绘制全国各分区任务量和完成量的堆积柱形图plt.subplot(1,1,1)#建立一个坐标系x=np.array([1,2,3,4])y1=np.array([8566,6482,5335,7310])#任务量y2=np.array([4283,2667,3655,3241])#任务量plt.bar(x,y1,width=0.3,label='任务量')plt.bar(x,y2,width=0.3,label='完成量')plt.title('全国各分区任务量和完成量',loc='center')#设置标题fora,binzip(x,y1):plt.text(a,b,b,ha='center',va='top',fontsize=12)#添加数据标签fora,binzip(x,y2):plt.text(a,b,b,ha='center',va='bottom',fontsize=12)#添加数据标签plt.xlabel('分区')#设置x轴坐标plt.ylabel('任务情况')#设置y轴坐标#设置x轴刻度值plt.xticks(x,['东区','南区','西区','北区'])#设置网格线plt.grid(False)plt.legend(loc='uppercenter',ncol=2)#显示图例plt.show()运行截图:4.条形图代码:importnumpyasnpimportmathimportmatplotlib.pyplotaspltfrompylabimport*mpl.rcParams['font.sans-serif']=['SimHei']#条形图与柱形图类似,只不过是将柱形图的x轴和y轴进行了调换,纵向柱形图变成了横向柱形图,使用plt库中的barth方法。#barth方法如下所示:#plt.barth(y,width,height,align,color,edgecolor)#barth方法的参数及说明如下表:#width表示柱子的宽度#height表示柱子的高度#align表示柱子的对齐方式#color表示颜色#edgeclolor表示柱子边缘颜色#绘制全国各分区任务量的条形图plt.subplot(1,1,1)#建立一个坐标系x=np.array(['东区','北区','南区','西区'])y=np.array([8566,6482,5335,7310])plt.barh(x,height=0.5,width=y,align='center',color=['r','g','b','k'])#绘图plt.title('全国各分区任务量',loc='center')#设置标题fora,binzip(x,y):plt.text(b,a,b,ha='center',va='bottom',fontsize=12)#添加数据标签plt.ylabel('分区')#设置y轴坐标plt.xlabel('任务量')#设置x轴坐标plt.grid(False)#不要网格线plt.show()运行截图:实验九数据分析一、实验目的和要求熟悉Python标准库csv的用法。熟悉使用Python扩展库pandas进行数据分析的基本操作。熟悉CSV和TXT文件操作。二、实验内容(1)运行下面的程序,在d:\文件夹中生成饭店营业额模拟数据文件data.csv。importcsvimportrandomimportdatetimefn=r'd:\data.csv'withopen(fn,'w',newline="")asfp:#创建csv文件写入对象wr=csv.writer(fp)#写入表头wr.writerow(['日期','销量'])#生成模拟数据startDate=datetime.date(2020,1,1)#生成200个模拟数据foriinrange(200):#生成一个模拟数据,写入csv文件amount=200+i*5+random.randrange(100)wr.writerow([str(startDate),amount])#生产下一天数据startDate=startDate+datetime.timedelta(days=1)2)然后完成下面的任务:使用pandas读取文件data.csv中的数据,创建DataFrame对象,并删除其中所有缺失值;使用matplotlib生成折线图,反应该饭店每天的营业额情况,并把图形保存为本地文件first.jpg;按月份进行统计,使用matplotlib绘制柱状图显示每个月份的营业额,并把图形保存为本地文件second.jpg;按月份进行统计,找出相邻两个月最大涨幅,并把涨幅最大的月份写入文件maxMonth.txt;按季度统计该饭店2020年的营业额数据,使用matplotlib生成饼状图显示2020年4个季度的营业额分布情况,并把图形保存为本地文件third.jpg。三、实验仪器、设备计算机、安装有ananconda系统四、实验原理 1)使用jupyternotebook来编写Python程序2)执行Python程序3)根据提示信息判断程序中的使用错误4)修改程序5)得出正确的结果五、实验步骤1)启动jupyternotebook2)单击【new】按钮。3)输入程序。4)使用【run】按钮执行程序。六、实验注意事项使用jupyternotebook输入源代码。熟悉函数的使用。当出现错误脚本会停止在错误行上,修正错误后,重新运行脚本。七、实验报告要求实验报告以电子文档形式提交。实验报告主要内容:完成要求的程序编写,提交源代码和运行结果。八、实验成绩考核(黑体、小四号、加粗、行距1.5倍缩进两个字符)(百分制)参考程序:%matplotlibinlineimportpandasaspdimportmatplotlib.pyplotaspltplt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=False#读取数据,删除缺失值df=pd.read_csv(r'd:\data.csv',encoding='cp936')df=df.dropna()#生成营业额折线图plt.figure()df.plot(x=df['日期'])plt.savefig('first.jpg')#按月统计,生成柱状图plt.figure()df1=df[:]df1['month']=df1['日期'].map(lambdax:x[:x.rindex('-')])df1=df1.groupby(by='month',as_index=False).sum()df1.plot(x=df1['month'],kind='bar')plt.savefig('second.jpg')#查找涨幅最大的月份,写入文件df2=df1.drop('month',axis=1).diff()m=df2['销量'].nlargest(1).keys()[0]withopen(r'd:\maxMonth.txt','w')asfp:fp.write(df1.loc[m,'month'])#按季度统计,生成饼状图plt.figure()one=df1[:3]['销量'].sum()two=df1[3:6]['销量'].sum()three=df1[6:9]['销量'].sum()four=df1[9:12]['销量'].sum()plt.pie([one,two,three,four],labels=['one','two','three','four'])plt.savefig('third.jpg')实验十网络爬虫设计一、实验目的和要求掌握requests、lxml库的使用掌握多线程爬虫系统设计掌握爬虫系统设计过程二、实验内容使用多线程爬虫(Q房爬虫实例)爬取目标网站是深圳Q房网(/)三、实验仪器、设备计算机、安装有ananconda系统四、实验原理 1)使用jupyternotebook来编写Python程序2)导入requests、lxml、multiprocessing.dummy库3)按照页面HTML内容分析、编写爬虫代码、提取信息存盘步骤来设计程序五、实验步骤1)启动jupyternotebook2)单击【new】按钮。3)输入程序。4)使用【run】按钮执行程序。六、实验注意事项使用jupyternotebook输入源代码。熟悉爬虫库的操作语法。当出现错误脚本会停止在错误行上,修正错误后,重新运行脚本。七、实验报告要求实验报告以电子文档形式提交。实验报告主要内容:完成要求的程序编写,提交源代码和运行结果。八、实验成绩考核(黑体、小四号、加粗、行距1.5倍缩进两个字符)(百分制)参考程序:#coding:utf-8##使用多线程爬虫(Q房爬虫实例)###说明:爬取目标网站是深圳Q房网(/)###1)页面分析(分析页面特点和URL构造规律)###2)编写爬虫代码###3)保存爬取到的信息####本示例演示多层页面的爬虫和使用函数组织代码#"""首先导入requests库和lxml库。我们准备把爬取的数据保存为CSV格式,因此还需要导入csv模块。为了控制爬取速度,还需要导入time模块。控制爬取速度的目的主要是防止被Q房网站的服务器反爬虫。为了提高爬取速度,使用多线程技术,因此需要导入multiprocessing.dummy库"""importrequestsfromlxmlimportetreeimportcsvimporttimefrommultiprocessing.dummyimportPoolasplpre_url="/sale/f"#为防止被WEB服务器反爬虫禁止,定义一个头部headersheaders={"user-agent":"Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/63.0.3239.132Safari/537.36"}#cookies具有一定的时效性,需要使用最新的cookiescookies="""acw_tc=db90631615547077210513243e12071b450b0885c180a9d3ef34797998;qchatid=75762117-5c92-46d8-9f52-0af0199e9b1b;__guid=29133566.2612920276169135600.1554707722539.75;_ga=GA1.3.59492559.1554707726;WINDOW_DEVICE_PIXEL_RATIO=1;CITY_NAME=SHENZHEN;sid=21761161-2b38-4ffb-a956-395898cb18f8;language=SIMPLIFIED;JSESSIONID=aaa-RFGCNMtCo8R_mJfQw;_qzjc=1;_jzqc=1;_jzqckmp=1;_gid=GA1.3.

温馨提示

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

评论

0/150

提交评论