《基于Python语言的网络数据挖掘》实验指导书.docx
- 文档编号:27827239
- 上传时间:2023-07-05
- 格式:DOCX
- 页数:26
- 大小:203.38KB
《基于Python语言的网络数据挖掘》实验指导书.docx
《《基于Python语言的网络数据挖掘》实验指导书.docx》由会员分享,可在线阅读,更多相关《《基于Python语言的网络数据挖掘》实验指导书.docx(26页珍藏版)》请在冰豆网上搜索。
《基于Python语言的网络数据挖掘》实验指导书
《基于Python语言的网络数据挖掘》实验指导书
电子科技大学信息与软件工程学院
二○一四年6月
一、实验教学目的和要求:
实验目的:
本课程实验旨在加深学生对于网络大数据挖掘的理解,培养学生分析、设计、实现基于Python语言的网络数据挖掘算法,掌握科学的实验方法,为以后其他专业课的学习打下坚实的基础。
该实验容采用循序渐进的方式,从Python语言的基本语法入手,在加深学生对于Python语言熟悉的基础上突出数据挖掘应用。
实验提供功能要求,学生自己确定设计方案和需要思考如何设计最优化的算法,并完成结果记录和分析,充分发挥学生的创造性和主动性。
实验要求:
了解并掌握Python语言的基本语法、能够使用Python读取或写入数据表、获取并分析网络文本数据、获取并处理图像数据等。
二、Python开发环境简介:
本课程实验使用的Python开发环境为PythonIDLE,其用户界面图见图1所示。
IDLE是开发python程序的基本集成开发环境,具备基本的IDE的功能,是Python教学的不错的选择。
当安装好python以后,IDLE就自动安装好了,不需要另外去找。
同时,使用Eclipse这个强大的框架时IDLE也可以非常方便的调试Python程序。
其基本功能包括语法加亮、段落缩进、基本文本编辑、TABLE键控制、调试程序。
打开Idle后出现一个增强的交互命令行解释器窗口(具有比基本的交互命令提示符更好的剪切、粘贴、回行等功能)。
除此之外,还有一个针对Python的编辑器(无代码合并,但有语法标签高亮和代码自动完成功能)、类浏览器和调试器。
菜单为TK“剥离”式,也就是点击顶部任意下拉菜单的虚线将会将该菜单提升到它自己的永久窗口中去。
特别是"Edit"菜单,将其“靠”在桌面一角非常实用。
Idle的调试器提供断点、步进和变量监视功能。
图1PythonIDLE界面图
三、实验项目名称及目的要求:
实验项目1Python语言的基本语法及简单应用
1、实验目的
1)掌握Python语言的基本语法
2)掌握Python语言中创建模块的方法
3)了解Python语言中定义类及其使用方法
4)学习使用Python语言输出斐波那契数列的方法
5)学习使用Python语言实现删除一个list里面的重复元素的方法
2、实验容
1)根据Python基本语法功能设计出实现输出斐波那契数列的方法,并比较不同实现方法的性能。
2)根据Python语言中的排序和循环功能,实现删除一个list里面的重复元素
3、实验原理
1)设计输出斐波那契数列的Python程序:
首先调用raw_input输入要打印的斐
波那契数列的长度,然后把斐波那契数列存储于一个序列当中,并逐个打印序列的元素。
此实验部分实现代码如下
#通过输入斐波那契数列的长度打印斐波那契数列
FibonacciUptoNumer=int(raw_input('PleaseinputaFibonacciSeriesuptoNumber:
'))
n=FibonacciUptoNumer
fibs=[0,1]
fornumberinrange(n):
fibs.append(fibs[-2]+fibs[-1])
2)设计删除一个list里面的重复元素程序:
首先调用List.sort()对序列进行排序,
然后调用last=List[-1]语句从后向前找出重复的元素,并逐个打印非重复的元素。
此实验部分实现代码如下
ifList:
List.sort()
last=List[-1]
foriinrange(len(List)-2,-1,-1):
iflast==List[i]:
delList[i]
else:
last=List[i]
printList
4、实验步骤
1)设计输出斐波那契数列的Python程序
●分析实验要求
●逐个打印输出斐波那契数列的元素
●记录程序代码
●记录并分析实验结果
2)设计程序删除一个list里面的重复元素
●分析实验要求
●对list进行排序
●从后向前查找并删除list中的重复元素
●记录程序代码
●记录并分析实验结果
实验项目2使用Python读写Excel数据
1、实验目的
1)强化Python程序的设计和编程能力
2)学习两种读取的Excel数据的方法
3)学习写入Excel数据的方法
4)掌握如何读写其他格式数据的方法
5)掌握如何比较不同读写方法的运算性能
2、实验容
1)用xlrd模块中的open_workbook实现打开Excel数据表,并设计使用索引和名称两种方法读取Excel数据,最终写入csv文件中。
2)用datetime模块中的datetime.now来计算两种不同的读取方法所用CPU时间,从而比较并分析不同算法的性能。
3、实验原理
1)Python语句读取Excel表数据时,首先要调用xlrd模块,然后使用语句data=xlrd.open_workbook('excelFile.xls')打开Excel表格。
当一个Excel表格中包含多个Sheet时,可以通过索引或者名称顺序获取某一个Sheet中的数据。
使用的语句分别为table=data.sheet_by_index(0)和table=data.sheet_by_name(u'Sheet1')。
当获取某个Sheet的数据并存储在工作表table后,获取获取整行和整列的值(数组)的语句为table.row_values(i)和table.col_values(i),获取行数和列数的语句为nrows=table.nrows和ncols=table.ncols,循环获取行数据的语句为foriinrange(nrows):
printtable.row_values(i)。
此实验部分实现代码如下
#根据索引获取Excel表格中的数据
defexcel_table_byindex(file='abc.xls',colnameindex=0,by_index=0):
data=open_excel(file)
table=data.sheets()[by_index]
nrows=table.nrows#行数
colnames=table.row_values(colnameindex)#某一行数据
list=[]
forrownuminrange(1,nrows):
row=table.row_values(rownum)
ifrow:
app={}
foriinrange(len(colnames)):
app[colnames[i]]=row[i]
list.append(app)
returnlist
defexcel_table_byname(file='abc.xls',colnameindex=0,by_name='abc'):
data=open_excel(file)
table=data.sheet_by_name(by_name)
nrows=table.nrows#行数
colnames=table.row_values(colnameindex)#某一行数据
list=[]
forrownuminrange(1,nrows):
row=table.row_values(rownum)
ifrow:
app={}
foriinrange(len(colnames)):
app[colnames[i]]=row[i]
list.append(app)
returnlist
在该实验中,学生需用前述的Excel数据操作语句实现读取某一个Sheet数据的功能,并在此基础上,思考如何读取其他格式的数据,记录Python代码,并分析实验结果。
2)Python语句写入Excel表数据时,首先要调用pyExcelerator模块,然后使用语句w=Workbook()和ws=w.add_sheet('excelFile.xls')创建一个空白的工作表。
在某一个cell写入数据的语句为ws.write(i,j,'string'),而w.save('mini.xls')实现了存储写入后的Excel文件。
此实验部分实现代码如下
frompyExceleratorimport*
w=Workbook()#创建一个工作簿
ws=w.add_sheet('test')#创建一个工作表
ws.write(0,0,'uestc')#在1行1列写入uestc
ws.write(0,1,'Sofrware')#在1行2列写入Software
ws.write(1,0,'cs')#在2行1列写入cs
w.save('mini.xls')#保存至mini.xls文件中
在该实验中,学生需用前述的Excel数据操作语句实现写入某一个Sheet数据的功能,并在此基础上,思考如何写入其他格式的数据(如csv格式),记录Python代码,并分析实验结果。
3)比较两种不同的读取Excel数据的方法时,需要计算每种方法的运行时间。
首先导入datetime模块,并调用datetime.now()函数,记录某一段代码运行前后的时间点,通过开始和结束的时间点的差值计算出程序运行的时间。
此实验部分实现代码如下
starttime=datetime.datetime.now()
tables=excel_table_byindex()
forrowintables:
printrow
endtime=datetime.datetime.now()
printendtime-starttime
starttime=datetime.datetime.now()
tables=excel_table_byname()
forrowintables:
printrow
endtime=datetime.datetime.now()
printendtime-starttime
在该实验中,学生需用前述的CPU时间控制语句实现计算某一段代码的运算时间,并在此基础上,比较并分析两种Excel数据读取方法的性能。
记录Python代码,并分析实验结果。
4、实验步骤
1)设计按名称和按索引读取Excel数据的程序
●分析实验要求
●按行打印Excel表中的数据
●记录程序代码
●记录并分析实验结果
2)设计写入Excel数据的程序
●分析实验要求
●按行将数据写入Excel表中
●记录程序代码
●记录并分析实验结果
3)设计计算程序运行时间的程序
●分析实验要求
●记录程序代码
●比较并分析实验结果
●总结,撰写实验报告
实验项目3使用Python实现网络爬虫算法
1、实验目的
1)强化Python程序的设计和编程能力
2)学习网络爬虫算法的原理
3)学习使用Python语言实现网络爬虫算法
2、实验容
1)理解网络爬虫算法的原理,并设计使用Python语言获取网页数据的程序。
2)用Python语言中的threading和GetUrl模块对中URL进行搜集。
3、实验原理
1)爬虫算法原理:
网络爬虫(又被称为网页蜘蛛,网络机器人,网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本。
很多搜索引擎都使用爬虫提供最新的数据,搜索引擎利用用户访问过页面的一个副本进行索引,以提供快速的访问。
网络爬虫也可以在web上用来自动执行一些任务,例如检查,确认html代码;也可以用来抓取网页上某种特定类型信息,例如抓取电子地址。
本实验中使用的网络爬虫算法是广度优先搜索(BFS)。
广度优先搜索策略是指在抓取过程中,在完成当前层次的搜索后,才进行下一层次的搜索。
有很多研究将广度优先搜索策略应用于聚焦爬虫中。
其基本思想是认为与初始URL在一定距离的网页具有主题相关性的概率很大。
另外一种应用是将广度优先搜索与网页过滤技术结合使用,先用广度优先策略抓取网页,再将其中无关的网页过滤掉。
这些方法的缺点在于,随着抓取网页的增多,大量的无关网页将被下载并过滤,算法的效率将变低。
2)Python语句在某一个网页上获取数据时,首先要分析网页的HTML源代码,我们以淘宝网页中的商品分类(list.taobao./browse/cat-0.htm)为例,获取所有一级类别和二级类别的标题。
本实验中要调用urllib2和sgmllib.SGMLParser模块,并使用语句content=urllib2.urlopen('网页URL').read()来获取网页的容。
并使用list.feed(content)语句将网页容存入列表,进行处理。
此实验部分实现代码如下
classListName1(SGMLParser):
def__init__(self):
SGMLParser.__init__(self)
self.is_h4=""
self.name=[]
defstart_h4(self,attrs):
self.is_h4=1
defend_h4(self):
self.is_h4=""
defhandle_data(self,text):
ifself.is_h4==1:
self.name.append(text)
classListName2(SGMLParser):
def__init__(self):
SGMLParser.__init__(self)
self.is_h5=""
self.name=[]
defstart_h5(self,attrs):
self.is_h5=1
defend_h5(self):
self.is_h5=""
defhandle_data(self,text):
ifself.is_h5==1:
self.name.append(text)
content=urllib2.urlopen('list.taobao./browse/cat-0.htm').read()
listname1=ListName1()
listname2=ListName2()
listname1.feed(content)
listname2.feed(content)
在该实验中,学生需用前述的爬虫算法实现语句实现写入读取淘宝网页商品分类标题的功能,并在此基础上,思考如何实现读取其他网页数据的方法,记录Python代码,并分析实验结果。
3)在获取上的URL时,需要调用GetUrl模块。
本实验过调用threading模块采用多线程算法实现URL的获取。
此实验部分实现代码如下
defCraw(self,entryUrl):
#这是一个深度搜索,到g_toDlUrl为空时结束
g_toDlUrl.append(entryUrl)
self.logfile.write('>>>Entry:
\n')
self.logfile.write(entryUrl)
depth=0
whilelen(g_toDlUrl)!
=0anddepth<=self.Maxdepth:
depth+=1
print'Searchingdepth',depth,'...\n\n'
self.downloadAll()
self.updateToDl()
content='\n>>>Depth'+str(depth)+':
\n'
self.logfile.write(content)
i=0
whilei content=str(g_totalcount+i+1)+'->'+g_toDlUrl[i]+'\n' self.logfile.write(content) i+=1 classCrawlerThread(threading.Thread): def__init__(self,url,fileName): threading.Thread.__init__(self) self.url=url#本线程下载的url self.fileName=fileName defrun(self): #线程工作-->下载html页面 globalg_mutex globalg_failedUrl globalg_dledUrl try: f=urllib.urlopen(self.url) s=f.read() fout=file(self.fileName,'w') fout.write(s) fout.close() except: g_mutex.acquire()#线程锁-->锁上 g_dledUrl.append(self.url) g_failedUrl.append(self.url) g_mutex.release()#线程锁-->释放 print'Faileddownloadingandsaving',self.url returnNone#记着返回! g_mutex.acquire()#线程锁-->锁上 g_pages.append(s) g_dledUrl.append(self.url) g_mutex.release()#线程锁-->释放 在该实验中,学生需用上述网络爬虫算法和多线程控制语句实现获取某一所有URL的程序,并在此基础上,比较并分析采用不同线程数时算法的性能。 记录Python代码,并分析实验结果。 4、实验步骤 1)设计某一个网页上获取数据的程序 ●分析实验要求 ●打印网页上获取的数据 ●记录程序代码 ●记录并分析实验结果 2)设计多线程的获取URL的程序 ●分析实验要求 ●打印上相关的URL ●比较不同线程数的算法性能 ●记录程序代码 ●记录并分析实验结果 实验项目4使用Python获取社交网络数据 1、实验目的 1)强化Python程序的设计和编程能力 2)学习社交网络OAUTH协议的原理 3)学习使用Python语言获取社交网络数据 2、实验容 1)理解社交网络OAUTH协议的原理,并学习获取CONSUMER_KEY、CONSUMER_SECRET、USER_TOKEN、USER_SECRET的方法。 2)用Python语言中的Json、OS、Linkedin模块对LinkedIn中联系人进行搜集。 3、实验原理 1)社交网络OAUTH协议原理: OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。 与以往的授权方式不同之处是OAUTH的授权不会使第三方触及到用户的信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此OAUTH是安全的。 本实验中Linkedin的OAUTH协议是采用HMAC-SHA1加密的。 开发者需要注册LinkedIn账户,获得CONSUMER_KEY(即APIKey)和CONSUMER_SECRET。 KEY跟SECRET的使用方式跟其他一些协议中的公钥私钥的方案相类似,你可以使用你所熟悉的编程语言将KEY和SECRET结合,为你发出的每个请求添加签名,以此来向Linkedin开放平台表明自己身份的合法性。 然后根据CONSUMER_KEY和CONSUMER_SECRET获取USER_TOKEN和USER_SECRET。 这个步骤主要有两个目的: 第一,告诉Linkedin将要做什么;第二,告诉Linkedin在callback里要做什么。 此外,USER_TOKEN和USER_SECRET可以帮助提供ACCESSTOKEN。 实现代码如下: access_token_url='https: //api.linkedin./uas/oauth/accessToken' token=oauth.Token(request_token['oauth_token'], request_token['oauth_token_secret']) token.set_verifier(oauth_verifier) client=oauth.Client(consumer,token) resp,content=client.request(access_token_url,"POST") access_token=dict(urlparse.parse_qsl(content)) print"AccessToken: " print"-oauth_token=%s"%access_token['oauth_token'] print"-oauth_token_secret=%s"%access_token['oauth_token_secret'] print print"Youmaynowaccessprotectedresourcesusingtheaccesstokensabove." Print 在该实验中,学生需用前述的OAUTH协议原理实现获取Linkedin社交网络的ACCESSTOKEN,并在此基础上,思考如何实现读取其他社交网络(如新浪微博)ACCESSTOKEN的方法,记录Python代码,并分析实验结果。 2)Python语句获取社交用户信息时,首先要获得ACCESSTOKEN,然后调用os.path.join语句将用户相关信息存储到CSV或者XLS文件中,最后调用PrettyTable模块打印用户信息表。 此实验部分实现代码如下 #Instantiatethedeveloperauthenticationclass auth=linkedin.LinkedInDeveloperAuthentication(CONSUMER_KEY,CONSUMER_SECRET,USER_TOKEN,USER_SECRET,RETURN_URL,permissions=linkedin.PERMISSIONS.enums.values()) #Passitintotheapp... app=linkedin.LinkedInApplication(auth) #Usetheapp... app.get_profile() importjson importos connections=app.get_connections() connections_data=os.path.join("C: /","Users"
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于Python语言的网络数据挖掘 基于 Python 语言 网络 数据 挖掘 实验 指导书