1、Python大数据基础与实战实验(实训)指导书实验项目内容与学时分配序号实验名称实验内容学时实验类型实验要求1anaconda安装和使用Anaconda的安装、配置和简单实用2验证必修2序列的使用列表、元组、字典、集合的使用2设计必修3字符串处理程序编写编写对字符串(正则表达式)进行操作的程序2设计必修4函数的使用函数的设计与使用2设计必修5类的使用类的设计与使用2设计必修6文件的操作和使用二进制和文本文件的操作使用2设计必修7异常处理异常处理程序的编写2设计必修8数据可视化数据可视化库matplotlib的使用2设计必修9数据分析Pandas库的使用2设计选修10网络爬虫设计lxml、req
2、uests库的使用2设计选修合计学时20实验一 anaconda安装与使用一、 实验目的和要求1) 掌握windows下Python IDEL的安装。2) 掌握anaconda的安装和配置、jupyter notebook、spyder工具的使用3) 掌握使用pip安装Python扩展库。4) 熟悉离线安装轮子文件的方法。二、实验内容1)Python IDL、anaconda下载和安装。2)Jupyter Notebook使用和常用功能。3)扩展库的安装。4) 轮子文件的安装。三、实验仪器、设备计算机一台,安装有Windows 7操作系统四、实验原理1) 从Python官网下载Python 3
3、.7.2。2) 从anaconda官网下载anaconda,建议下载3.6以上版本。3) Jupyter notebook是一个IDL,可以进行交互式编程,支持多种格式文件的编辑。4) IDEL也可以进行交互性编程。五、实验步骤1. 下载anaconda/Python IDEL1) 从官网www.anaconda.org上下载anaconda3.6,需要根据安装的OS来进行选择。2) 具体的安装环境要求可以查看官网的文档说明。3) 从www.python.org官网上下载Python,建议安装3.7.2版本。2. 安装anaconda1) 安装时选择定制安装,建议不要把anaconda安装在c
4、:盘上。2) 安装时选择针对所有用户。3) 不要把anacond自带的python解释器加入到path中。3. 启动Jupyter Notebook 1) 【开始 】-【所有程序】-【anaconda】-【Jupyter Notebook】选择复制链接。2) 修改属性,将%userprofile%更改为今后存放Python源程序的目录。3) 启动Jupyter Notebook。4) 单击【new】-“Python 3”,进入Python脚本编辑界面。5) 可以选择单元类型【code】,输入源代码,通过按下【shifit】+【enter】组合键,运行程序。6) 也可以选择单元类型【markdo
5、wn】。Markdown模式下可以对文本进行编辑,采用Markdown的语法规范,可以设定文本格式,插入链接、图片甚至数学公式,同样,通过按下【shifit】+【enter】组合键可运行Markdown单元,显示格式化的文本。在首行前加一个“#”字符和空格代表一级标题,加两个“#”字符和空格代表二级标题,以此类推。项目符号可以使用“+”、“-”、“*”加空格,公式使用两个“$”符号,例如“$E=mc2$”。完成以下内容的输入:4. 安装第三方扩展库(以安装matplotlib库为例。)1)升级pipwindows下进入命令行模式,输入python -m pip install -upgrade
6、 pip。2)切换到python安装目录的scripts子目录下3)依次输入 pip install numpy scipy、pip install matplotlib。5. 离线安装第三方扩展库 如果遇到安装不成功的扩展库,使用浏览器打开下面的网址,下载 whl 文件进行离线安装:https:/www.lfd.uci.edu/gohlke/pythonlibs/。6. 在 IDLE 中使用 import 导入安装好的扩展库,验证是否安装成功。六、实验注意事项1)Python是解释型语言,需要Python解释器支持。2)可以使用.tab来获取对象的属性,使用函数名?获取函数帮助信息,?函数名
7、获取函数源码。七、实验报告要求 实验报告以电子文档形式提交。 实验报告主要内容:anaconda安装过程、第三方扩展库的安装、Python程序基本结构。八、实验成绩考核(黑体、小四号、加粗、行距1.5倍缩进两个字符)(百分制)实验二 序列、流程控制语句的使用一、实验目的和要求1) 掌握列表的功能和使用。2) 掌握元组的功能和使用。3) 掌握字典的功能和使用。4) 掌握集合的功能和使用。5) 掌握选择结构和循环结构for、while的使用二、实验内容1) 把列表中的所有数字都加5,得到新列表。2) 输入三个序列,输出三个序列中最大值相乘的结果和最大值出现的位置。3) 生成包含1000个随机字符的
8、字符串,统计每个字符的出现次数。4) 已知有一个包含一些同学成绩的字典,现在需要计算所有成绩的最高分、最低分、平均分,并查找所有最高分同学。5) 编写一个程序,检查用户输入3条边能否构成三角形,如果可以构成,请判断三角形的类型(锐角、钝角和直角以及等腰、等边)。三、实验仪器、设备Windows7以上OS、安装有anaconda。四、实验原理 列表、集合、元组和集合的定义、可以进行的操作。五、实验步骤1)启动jupyter notebook2)单击【new】按钮。3)输入程序。3)使用【run】按钮执行程序。六、实验注意事项1)正确使用数据类型。2)先确定思路,在编写程序实现。七、实验报告要求
9、实验报告以电子文档形式提交。实验报告主要内容:1) 完成要求的程序编写,提交源代码和运行结果。2) 比较列表、元组、字典和集合的异同。3) 比较for、while循环的执行流程。八、实验成绩考核(黑体、小四号、加粗、行距1.5倍缩进两个字符)(百分制)参考程序1)x = list(range(10)y = for num in x:y.append(num+5)或者num+5 for num in x2)x = input(input first list:)x = list(map(int,x.split()i = max(x)iPos = x.index(i)y = input(input
10、 second list:)y = list(map(int,y.split()j = max(y)jPos = y.index(j)z = input(input third list:)z = list(map(int,z.split()k = max(z)kPos = z.index(k)print(max is ,i*j*k,position is %d,%d,%d.%(iPos,jPos,kPos) 3)import stringimport randomx = string.ascii_letters + string.digits + string.punctuationy =
11、random.choice(x) for i in range(1000)z = .join(y)d = dict() #使用字典保存每个字符出现次数for ch in z: dch = d.get(ch, 0) + 14) scores = Zhang San: 45, Li Si: 78, Wang Wu: 40, Zhou Liu: 96, Zhao Qi: 65, Sun Ba: 90, Zheng Jiu: 78, Wu Shi: 99, Dong Shiyi: 60highest = max(scores.values() #最高分lowest = min(scores.value
12、s() #最低分average = sum(scores.values() / len(scores) #平均分highestPerson = name for name, score in scores.items() if score = highest#或者scores = Li Si: 78, Zhao Qi: 65, Wang Wu: 40, Wu Shi: 99, Zheng Jiu: 78, Zhang San: 45, Sun Ba: 90, Zhou Liu: 96, Dong Shiyi: 60highest = max(scores.values()average = s
13、um(scores.values() / len(scores)for name,score in scores.items(): if score = highest: print(name)5)本程序完成对输入的3条边进行判断,如果构成三角形,则判断是锐角、钝角和直角三角形;还可以判断等腰和等边三角形x,y,z = eval(input(请输入三角形3条边的长度(以,分隔):) #输入三条边长度x,y,z = sorted(x,y,z,reverse=True) #降序排列三条边长度while y + z 0.0: print(锐角三角形)elif cosX = 0.0: print(直角
14、三角形)else: print(钝角三角形)if x = y = z : print(等边三角形)elif x = y or y = z or x = z: print(等腰三角形) 实验三 字符串处理程序编写一、实验目的和要求1) 熟悉并掌握字符串的定义2) 掌握字符串常用操作的使用 二、实验内容1) 生成指定长度的随机密码。2) 编写程序实现字符串加密和解密,循环使用指定密钥,采用简单的异或算法。3) 检查并判断密码字符串的安全强度,密码必须至少包含6个字符。4) 编写程序,模拟打字练习程序的成绩评定。假设 origin 为原始内容,userInput 为用户练习时输入的内容,要求用户输入
15、的内容长度不能大于原始内容的长度,如果对应位置的字符一致则认为正确,否则判定输入错误。最后成绩为:正确的字符数量/原始字符串长度,按百分制输出,要求保留 2 位小数。 三、实验仪器、设备计算机、windows 7操作系统+anaconda。 四、实验原理 1)在Python中,字符串属于不可变有序序列,使用单引号、双引号、三单引号或三双引号作为定界符,并且不同的定界符之间可以互相嵌套。 2) Python字符串对象提供了大量方法用于字符串的切分、连接、替换和排版等操作,另外还有大量内置函数和运算符也支持对字符串的操作。五、实验步骤1)启动jupyter notebook2)单击【new】按钮。
16、3)输入程序。4)使用【run】按钮执行程序。六、实验注意事项1) 正确使用字符串的方法和基本操作。2) 字符串编码方案。3) 编程规范。 七、实验报告要求实验报告以电子文档形式提交。实验报告主要内容:完成要求的程序编写,提交源代码和运行结果。八、实验成绩考核(黑体、小四号、加粗、行距1.5倍缩进两个字符)(百分制)参考程序:1)import stringimport randomcharacters = string.digits + string.ascii_lettersprint(.join(random.choice(characters) for i in range(8) #返回
17、8位的密码字段 print(.join(random.choice(characters) for i in range(10) #返回10位的密码字段print(.join(random.choice(characters) for i in range(16) #返回16位的密码字段2)from itertools import cyclesource = xijing univeisitykey = Fan Huiresult = temp = cycle(key)for ch in source: result = result + chr(ord(ch) ord(next(temp)
18、print(result)3)import stringpwd = input(input a password)#密码必须至少包含6个字符 if not isinstance(pwd, str) or len(pwd) 6: return not suitable for password #密码强度等级与包含字符种类的对应关系 d = 1:weak, 2:below middle, 3:above middle, 4:strong #分别用来标记pwd是否含有数字、小写字母、大写字母和指定的标点符号 r = False * 4for ch in pwd: #是否包含数字 if not r0
19、 and ch in string.digits: r0 = True #是否包含小写字母 elif not r1 and ch in string.ascii_lowercase: r1 = True #是否包含大写字母 elif not r2 and ch in string.ascii_uppercase: r2 = True #是否包含指定的标点符号 elif not r3 and ch in ,.!;?: r3 = True #统计包含的字符种类,返回密码强度 result = d.get(r.count(True), error)4)origin = Beautiful is be
20、tter than ugly.Explicit is better than implicit.Simple is better than complex.Complex is better than complicated.Flat is better than nested. print(原始字符串:,origin)userInput = input(请按照原始字符串输入:)if len(origin)len(userInput): print(输入字符串和原始字符串长度不一致!)# 精确匹配的字符个数right = sum(1 for oc, uc in zip(origin, user
21、Input) if oc=uc)rate = right/len(origin)print(正确率为:%.format(round(rate * 100, 2)实验四 函数的编写和使用一、实验目的和要求1) 熟悉并掌握函数的定义和调用2) 理解函数形参和实参的含义,能够正确设置形参类型3) 理解隐含函数lambda 二、实验内容1) 输出“水仙花数”。所谓水仙花数是指1个3位的十进制数,其各位数字的立方和等于该数本身。例如:153是水仙花数,因为153 = 13 + 53 + 33 。请使用函数式编程+内置函数来实现。2) 把列表中的所有数字都加5,得到新列表。请使用函数实现。3) 计算两点间
22、曼哈顿距离。4) 判断密码强度,数字、小写字母、大写字母和指定的标点符号,分别对应weak、below middle、above middle、strong。5) 编写函数,求任意一个数的立方根。 三、实验仪器、设备计算机、安装有anaconda。 四、实验原理 1)def定义函数 2)函数名参数后面添加:表示函数体开始 3)利用缩进表示函数体 4)函数内参数为局部变量五、实验步骤1)启动jupyter notebook2)单击【new】按钮。3)输入程序。3)使用【run】按钮执行程序。六、实验注意事项1) 函数的正确缩进。2) Lambda函数的定义和实现。3) 函数内变量的作用域。 七、
23、实验报告要求实验报告以电子文档形式提交。实验报告主要内容:完成要求的程序编写,提交源代码和运行结果。八、实验成绩考核(黑体、小四号、加粗、行距1.5倍缩进两个字符)(百分制)参考程序1)def sxh():for num in range(100, 1000): r = map(lambda x:int(x)*3, str(num) if sum(r) = num: print(num)2) def add5(alist):return i + 5 for i in alist3)def manhattanDistance(x, y): return sum(map(lambda i, j:
24、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)def check(pwd): #密码强度等级与包含字符种类的对应关系 d = 1:weak, 2:below middle, 3:above middle, 4:strong #分别用来标记pwd是否含有数字、小写字母、大写字母和指定的标点符号 r = False * 4 for ch in pwd: if not r0 and ch in
25、 string.digits: r0 = True elif not r1 and ch in string.ascii_lowercase: r1 = True elif not r2 and ch in string.ascii_uppercase: r2 = True elif not r3 and ch in ,.!;?: r3 = True #统计包含的字符种类,返回密码强度 return d.get(r.count(True), error)5)def cbrt(x): if x = 0.0: return 0.0 x1 = x while True: x2 = (2.0 * x1
26、 + x / x1 / x1) / 3 if abs(x2 - x1) / x1 ) 0.001: return x2 x1 = x2实验五 类的设计一、实验目的和要求1) 熟悉并掌握类的编写过程2) 理解类中成员的含义 二、实验内容1) 系统中的用户分类非常复杂,不同用户组具有不同的行为和权限,并且可能会经常改变,管理非常困难。这时候我们可以独立地定义一些行为,然后根据需要来为不同的用户设置相应的行为能力。请设计一个Person类,完成sing()、walk()、eat()等行为。2) 现有一个基类Animal,其中有一个方法show(),请使用多态性方法,实现Cat、Dog、Tiger中的
27、show()方法。3) 编写一个队列类myQueue,完成队列的初始化、删除、入队和出队等操作。三、实验仪器、设备计算机、安装有ananconda系统 四、实验原理 1) 使用jupyter notebook来编写类的Python程序 2) 执行类的Python程序 3) 根据提示信息判断程序中类的使用错误4) 修改程序5) 得出正确的结果五、实验步骤1)启动jupyter notebook2)单击【new】按钮。3)输入程序。3)使用【run】按钮执行程序。六、实验注意事项1) 使用jupyter notebook输入源代码。2) 熟悉类的语法结构。3) 当出现错误脚本会停止在错误行上,修正
28、错误后,重新运行脚本。 七、实验报告要求实验报告以电子文档形式提交。实验报告主要内容:完成要求的程序编写,提交源代码和运行结果。八、实验成绩考核(黑体、小四号、加粗、行距1.5倍缩进两个字符)(百分制)参考程序:1)import types class Person(object): def _init_(self, name): assert isinstance(name, str), name must be string self.name = name def sing(self): print(self.name+ can sing.) def walk(self): print(
29、self.name+ can walk.) def eat(self): print(self.name+ can eat.) 2) class Animal(object): #定义基类 def show(self): print(I am an animal.) class Cat(Animal): #派生类,覆盖了基类的show()方法 def show(self): print(I am a cat.) class Dog(Animal): #派生类 def show(self): print(I am a dog.) class Tiger(Animal): #派生类 def sho
30、w(self): print(I am a tiger.) class Test(Animal): #派生类,没有覆盖基类的show()方法 pass x = item() for item in (Animal, Cat, Dog, Tiger, Test) for item in x: #遍历基类和派生类对象并调用show()方法 item.show() 3)class myDeque: #构造方法,默认队列大小为10 def _init_(self, iterable=None,maxlen = 10): if iterable=None: self._content = self._c
31、urrent = 0 else: self._content = list(iterable) self._current = len(iterable) self._size = maxlen if self._size self._current: self._size = self._current #析构方法 def _del_(self): del self._content #修改队列大小 def setSize(self, size): if size self._current: #如果缩小队列,需要同时删除后面的元素 for i in range(size, self._cu
32、rrent):-1: #逆序 del self._contenti self._current = size self._size = size #在右侧入队 def appendRight(self, v): if self._current self._size: self._content.append(v) self._current = self._current + 1 else: print(The queue is full) #在左侧入队 def appendLeft(self, v): if self._current self._current: print(k must
33、 = +str(self._current) return self._content = self._content-k: + self._content:-k #元素翻转 def reverse(self): self._content = self._content:-1 #显示当前队列中元素个数 def _len_(self): return self._current #使用print()打印对象时,显示当前队列中的元素 def _str_(self): return myDeque( + str(self._content) + , maxlen=+ str(self._size)
34、 + ) #直接对象名当做表达式时,显示当前队列中的元素 _repr_ = _str_ #队列置空 def clear(self): self._content = self._current = 0 #测试队列是否为空 def isEmpty(self): return not self._content #测试队列是否已满 def isFull(self): return self._current = self._sizeif _name_ = _main_: print(Please use me as a module.)实验六 文件的操作和使用一、实验目的和要求1) 掌握文件的定义
35、、操作和使用2) 能够正确使用文件来获取和存储数据二、实验内容1) 递归遍历指定文件夹下的子文件夹和文件。2) 编写程序,递归删除指定文件夹中指定类型的文件。3) 编写程序,进行文件夹增量备份。三、实验仪器、设备计算机、安装有ananconda系统 四、实验原理 1) 使用jupyter notebook来编写类的Python程序 2) 执行类的Python程序 3) 根据提示信息判断程序中类的使用错误6) 修改程序7) 得出正确的结果五、实验步骤1)启动jupyter notebook2)单击【new】按钮。3)输入程序。3)使用【run】按钮执行程序。六、实验注意事项1) 使用jupyte
36、r notebook输入源代码。2) 熟悉文件的操作语法。3) 当出现错误脚本会停止在错误行上,修正错误后,重新运行脚本。 七、实验报告要求实验报告以电子文档形式提交。实验报告主要内容:完成要求的程序编写,提交源代码和运行结果。八、实验成绩考核(黑体、小四号、加粗、行距1.5倍缩进两个字符)(百分制)参考程序:1)from os import listdir from os.path import join, isfile, isdir def listDirDepthFirst(directory): #遍历文件夹,如果是文件就直接输出,如果是文件夹,就输出显示,然后递归遍历该文件夹 for
37、 subPath in listdir(directory): path = join(directory, subPath) print(path) if isdir(path): listDirDepthFirst(path)2)from os.path import isdir, join, splitext from os import remove, listdir import sys filetypes = .tmp, .log, .obj, .txt #指定要删除的文件类型def delCertainFiles(directory): if not isdir(director
38、y): return for filename in listdir(directory): temp = join(directory, filename) if isdir(temp): delCertainFiles(temp) elif splitext(temp)1 in filetypes: #检查文件类型 remove(temp) print(temp, deleted.)3)import os import filecmp import shutil import sys def autoBackup(scrDir, dstDir): if (not os.path.isdir(scrDir) or (not o