《基于Python语言的网络数据挖掘实验指导书样本.doc》由会员分享,可在线阅读,更多相关《基于Python语言的网络数据挖掘实验指导书样本.doc(36页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、资料内容仅供您学习参考,如有不当之处,请联系改正或者删除。基于Python语言的网络数据挖掘实验指导书电子科技大学信息与软件工程学院二一四年6月一、 实验教学目的和要求: 实验目的: 本课程实验旨在加深学生对于网络大数据挖掘的理解, 培养学生分析、 设计、 实现基于Python语言的网络数据挖掘算法, 掌握科学的实验方法, 为以后其它专业课的学习打下坚实的基础。该实验内容采用循序渐进的方式, 从Python语言的基本语法入手, 在加深学生对于Python语言熟悉的基础上突出数据挖掘应用。实验提供功能要求, 学生自己确定设计方案和需要思考如何设计最优化的算法, 并完成结果记录和分析, 充分发挥学
2、生的创造性和主动性。实验要求: 了解并掌握Python语言的基本语法、 能够使用Python读取或写入数据表、 获取并分析网络文本数据、 获取并处理图像数据等。二、 Python开发环境简介: 本课程实验使用的Python开发环境为Python IDLE, 其用户界面图见图1所示。IDLE是开发python程序的基本集成开发环境, 具备基本的IDE的功能, 是Python教学的不错的选择。当安装好python以后, IDLE就自动安装好了, 不需要另外去找。同时, 使用Eclipse这个强大的框架时IDLE也能够非常方便的调试Python程序。其基本功能包括语法加亮、 段落缩进、 基本文本编辑
3、、 TABLE键控制、 调试程序。打开 Idle 后出现一个增强的交互命令行解释器窗口( 具有比基本的交互命令提示符更好的剪切、 粘贴、 回行等功能) 。除此之外, 还有一个针对 Python 的编辑器( 无代码合并, 但有语法标签高亮和代码自动完成功能) 、 类浏览器和调试器。菜单为 TK ”剥离”式, 也就是点击顶部任意下拉菜单的虚线将会将该菜单提升到它自己的永久窗口中去。特别是 Edit 菜单, 将其”靠”在桌面一角非常实用。Idle 的调试器提供断点、 步进和变量监视功能。图1 Python IDLE界面图三、 实验项目名称及目的要求: 实验项目1 Python语言的基本语法及简单应用
4、1、 实验目的1) 掌握Python语言的基本语法2) 掌握Python语言中创立模块的方法3) 了解Python语言中定义类及其使用方法4) 学习使用Python语言输出斐波那契数列的方法5) 学习使用Python语言实现删除一个list里面的重复元素的方法2、 实验内容1) 根据Python基本语法功能设计出实现输出斐波那契数列的方法, 并比较不同实现方法的性能。2) 根据Python语言中的排序和循环功能, 实现删除一个list里面的重复元素3、 实验原理1) 设计输出斐波那契数列的Python程序: 首先调用raw_input输入要打印的斐波那契数列的长度, 然后把斐波那契数列存储于一
5、个序列当中, 并逐个打印序列的元素。此实验部分实现代码如下#经过输入斐波那契数列的长度打印斐波那契数列 FibonacciUptoNumer = int(raw_input(Please input a Fibonacci Series up to Number : )n = FibonacciUptoNumerfibs = 0, 1for number in range(n): fibs.append(fibs-2 + fibs-1)2) 设计删除一个list里面的重复元素程序: 首先调用List.sort()对序列进行排序, 然后调用last = List-1语句从后向前找出重复的元素,
6、并逐个打印非重复的元素。此实验部分实现代码如下if List:List.sort()last = List-1for i in range(len(List)-2, -1, -1): if last=Listi: del Listi else: last=Listiprint List4、 实验步骤1) 设计输出斐波那契数列的Python程序l 分析实验要求l 逐个打印输出斐波那契数列的元素l 记录程序代码l 记录并分析实验结果2) 设计程序删除一个list里面的重复元素l 分析实验要求l 对list进行排序l 从后向前查找并删除list中的重复元素l 记录程序代码l 记录并分析实验结果实验项
7、目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表数据时,
8、首先要调用xlrd模块, 然后使用语句data = xlrd.open_workbook(excelFile.xls)打开Excel表格。当一个Excel表格中包含多个Sheet时, 能够经过索引或者名称顺序获取某一个Sheet中的数据。使用的语句分别为table = data.sheet_by_index(0)和table = data.sheet_by_name(uSheet1)。当获取某个Sheet的数据并存储在工作表table后, 获取获取整行和整列的值( 数组) 的语句为table.row_values(i)和table.col_values(i), 获取行数和列数的语句为nrows
9、 = table.nrows和ncols = table.ncols, 循环获取行数据的语句为for i in range(nrows): print table.row_values(i)。此实验部分实现代码如下#根据索引获取Excel表格中的数据def excel_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(col
10、nameindex) #某一行数据 list = for rownum in range(1,nrows): row = table.row_values(rownum) if row: app = for i in range(len(colnames): appcolnamesi = rowi list.append(app) return listdef excel_table_byname(file= abc.xls,colnameindex=0,by_name=abc): data = open_excel(file) table = data.sheet_by_name(by_na
11、me) nrows = table.nrows #行数 colnames = table.row_values(colnameindex) #某一行数据 list = for rownum in range(1,nrows): row = table.row_values(rownum) if row: app = for i in range(len(colnames): appcolnamesi = rowi list.append(app) return list在该实验中, 学生需用前述的Excel数据操作语句实现读取某一个Sheet数据的功能, 并在此基础上, 思考如何读取其它格式的
12、数据, 记录Python代码, 并分析实验结果。2) Python语句写入Excel表数据时, 首先要调用pyExcelerator模块, 然后使用语句w = Workbook()和ws = w.add_sheet(excelFile.xls)创立一个空白的工作表。在某一个cell写入数据的语句为ws.write (i, j, string), 而w.save(mini.xls)实现了存储写入后的Excel文件。此实验部分实现代码如下from pyExcelerator import *w = Workbook() #创立一个工作簿ws = w.add_sheet(test) #创立一个工作表
13、ws.write(0,0,uestc) #在1行1列写入uestcws.write(0,1,Sofrware) #在1行2列写入Softwarews.write(1,0,cs) #在2行1列写入csw.save(mini.xls) #保存至mini.xls文件中在该实验中, 学生需用前述的Excel数据操作语句实现写入某一个Sheet数据的功能, 并在此基础上, 思考如何写入其它格式的数据( 如csv格式) , 记录Python代码, 并分析实验结果。3) 比较两种不同的读取Excel数据的方法时, 需要计算每种方法的运行时间。首先导入datetime模块, 并调用datetime.now()
14、函数, 记录某一段代码运行前后的时间点, 经过开始和结束的时间点的差值计算出程序运行的时间。此实验部分实现代码如下starttime = datetime.datetime.now()tables = excel_table_byindex()for row in tables: print rowendtime = datetime.datetime.now()print endtime - starttime starttime = datetime.datetime.now()tables = excel_table_byname()for row in tables: print ro
15、wendtime = datetime.datetime.now()print endtime - starttime在该实验中, 学生需用前述的CPU时间控制语句实现计算某一段代码的运算时间, 并在此基础上, 比较并分析两种Excel数据读取方法的性能。记录Python代码, 并分析实验结果。4、 实验步骤1) 设计按名称和按索引读取Excel数据的程序l 分析实验要求l 按行打印Excel表中的数据l 记录程序代码l 记录并分析实验结果2) 设计写入Excel数据的程序l 分析实验要求l 按行将数据写入Excel表中l 记录程序代码l 记录并分析实验结果3) 设计计算程序运行时间的程序l
16、分析实验要求l 记录程序代码l 比较并分析实验结果l 总结, 撰写实验报告实验项目3 使用Python实现网络爬虫算法1、 实验目的1) 强化Python程序的设计和编程能力2) 学习网络爬虫算法的原理3) 学习使用Python语言实现网络爬虫算法2、 实验内容1) 理解网络爬虫算法的原理, 并设计使用Python语言获取网页数据的程序。2) 用Python语言中的threading和GetUrl模块对网站中URL进行搜集。3、 实验原理1) 爬虫算法原理: 网络爬虫( 又被称为网页蜘蛛, 网络机器人, 网页追逐者) , 是一种按照一定的规则, 自动的抓取万维网信息的程序或者脚本。很多搜索引擎
17、都使用爬虫提供最新的数据, 搜索引擎利用用户访问过页面的一个副本进行索引, 以提供快速的访问。网络爬虫也能够在web上用来自动执行一些任务, 例如检查链接, 确认html代码; 也能够用来抓取网页上某种特定类型信息, 例如抓取电子邮件地址。本实验中使用的网络爬虫算法是广度优先搜索(BFS)。广度优先搜索策略是指在抓取过程中, 在完成当前层次的搜索后, 才进行下一层次的搜索。有很多研究将广度优先搜索策略应用于聚焦爬虫中。其基本思想是认为与初始URL在一定链接距离内的网页具有主题相关性的概率很大。另外一种应用是将广度优先搜索与网页过滤技术结合使用, 先用广度优先策略抓取网页, 再将其中无关的网页过
18、滤掉。这些方法的缺点在于, 随着抓取网页的增多, 大量的无关网页将被下载并过滤, 算法的效率将变低。2) Python语句在某一个网页上获取数据时, 首先要分析网页的HTML源代码, 我们以淘宝网页中的商品分类()为例, 获取所有一级类别和二级类别的标题。本实验中要调用urllib2和sgmllib.SGMLParser模块, 并使用语句content = urllib2.urlopen(网页URL).read()来获取网页的内容。并使用list.feed(content)语句将网页内容存入列表, 进行处理。此实验部分实现代码如下class ListName1(SGMLParser):def
19、_init_(self):SGMLParser._init_(self)self.is_h4 = self.name = def start_h4(self, attrs):self.is_h4 = 1def end_h4(self):self.is_h4 = def handle_data(self, text):if self.is_h4 = 1:self.name.append(text)class ListName2(SGMLParser):def _init_(self):SGMLParser._init_(self)self.is_h5 = self.name = def star
20、t_h5(self, attrs):self.is_h5 = 1def end_h5(self):self.is_h5 = def handle_data(self, text):if self.is_h5 = 1:self.name.append(text)content = urllib2.urlopen().read()listname1 = ListName1()listname2 = ListName2()listname1.feed(content)listname2.feed(content)在该实验中, 学生需用前述的爬虫算法实现语句实现写入读取淘宝网页商品分类标题的功能, 并
21、在此基础上, 思考如何实现读取其它网页数据的方法, 记录Python代码, 并分析实验结果。3) 在获取网站上的URL时, 需要调用GetUrl模块。本实验中经过调用threading 模块采用多线程算法实现网站URL的获取。此实验部分实现代码如下def Craw(self,entryUrl): #这是一个深度搜索, 到g_toDlUrl为空时结束 g_toDlUrl.append(entryUrl) self.logfile.write(Entry:n) self.logfile.write(entryUrl) depth = 0 while len(g_toDlUrl) != 0 and
22、depth Depth + str(depth)+:n self.logfile.write(content) i = 0 while i + g_toDlUrli + n self.logfile.write(content) i += 1 class CrawlerThread(threading.Thread): def _init_(self, url, fileName): threading.Thread._init_(self) self.url = url #本线程下载的url self.fileName = fileName def run(self): #线程工作-下载ht
23、ml页面 global g_mutex global g_failedUrl global g_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 Failed downloading
24、 and saving,self.url return None #记着返回! g_mutex.acquire() #线程锁-锁上 g_pages.append(s) g_dledUrl.append(self.url) g_mutex.release() #线程锁-释放在该实验中, 学生需用上述网络爬虫算法和多线程控制语句实现获取某一网站所有URL的程序, 并在此基础上, 比较并分析采用不同线程数时算法的性能。记录Python代码, 并分析实验结果。4、 实验步骤1) 设计某一个网页上获取数据的程序l 分析实验要求l 打印网页上获取的数据l 记录程序代码l 记录并分析实验结果2) 设计多线程
25、的获取网站URL的程序l 分析实验要求l 打印网站上相关的URLl 比较不同线程数的算法性能l 记录程序代码l 记录并分析实验结果实验项目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网站中联系人名单进
26、行搜集。3、 实验原理1) 社交网络OAUTH协议原理: OAUTH协议为用户资源的授权提供了一个安全的、 开放而又简易的标准。与以往的授权方式不同之处是OAUTH的授权不会使第三方触及到用户的帐号信息( 如用户名与密码) , 即第三方无需使用用户的用户名与密码就能够申请获得该用户资源的授权, 因此OAUTH是安全的。本实验中Linkedin网站的OAUTH协议是采用HMAC-SHA1加密的。开发者需要注册LinkedIn账户, 获得CONSUMER_KEY(即API Key) 和CONSUMER_SECRET。KEY跟SECRET的使用方式跟其它一些协议中的公钥私钥的方案相类似, 你能够使用
27、你所熟悉的编程语言将KEY和SECRET结合, 为你发出的每个请求添加签名, 以此来向Linkedin开放平台表明自己身份的合法性。然后根据CONSUMER_KEY和CONSUMER_SECRET获取USER_TOKEN和USER_SECRET。这个步骤主要有两个目的: 第一, 告诉Linkedin将要做什么; 第二, 告诉Linkedin在callback里要做什么。另外, USER_TOKEN和USER_SECRET能够帮助提供ACCESS TOKEN。实现代码如下: access_token_url = token=oauth.Token(request_tokenoauth_token
28、, request_tokenoauth_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 Access Token:print - oauth_token = %s % access_tokenoauth_tokenprint - oauth_token_secr
29、et = %s % access_tokenoauth_token_secretprintprint You may now access protected resources using the access tokens above.Print在该实验中, 学生需用前述的OAUTH协议原理实现获取Linkedin社交网络的ACCESS TOKEN, 并在此基础上, 思考如何实现读取其它社交网络(如新浪微博)ACCESS TOKEN的方法, 记录Python代码, 并分析实验结果。2) Python语句获取社交网站用户信息时, 首先要获得ACCESS TOKEN, 然后调用os.path.
30、join语句将用户相关信息存储到CSV或者XLS文件中, 最后调用PrettyTable模块打印用户信息表。此实验部分实现代码如下# Instantiate the developer authentication classauth=linkedin.LinkedInDeveloperAuthentication(CONSUMER_KEY, CONSUMER_SECRET, USER_TOKEN, USER_SECRET, RETURN_URL, permissions=linkedin.PERMISSIONS.enums.values()# Pass it in to the app.ap
31、p = linkedin.LinkedInApplication(auth)# Use the app.app.get_profile()import jsonimport osconnections = app.get_connections()connections_data = os.path.join(C:/, Users, 用户名, Desktop, save.csv)f = open(connections_data, w)f.write(json.dumps(connections, indent=1)f.close()from prettytable import Pretty
32、Table # pip install prettytablept = PrettyTable(field_names=Name, Location)pt.align = l pt.add_row(cfirstName + + clastName, clocationname) for c in connectionsvalues if c.has_key(location)在该实验中, 学生需用前述的社交网络信息获取语句实现授权用户的LinkedIn联系人信息, 并在此基础上, 思考如何实现获取其它社交网络(微博)用户信息的方法, 记录Python代码, 并分析实验结果。4、 实验步骤1)
33、设计社交网络授权用户ACCESS TOKEN的程序l 分析实验要求l 记录程序代码2) 设计社交网络授权用户联系人信息的程序l 分析实验要求l 打印授权用户联系人信息l 导入授权用户联系人的信息l 记录程序代码l 记录并分析实验结果实验项目5 使用Python统计分析社交网络数据1、 实验目的1) 强化Python程序的设计和编程能力2) 学习社交网络数据清洗和数据统计分析的方法3) 学习使用Python语言统计分析社交网络数据2、 实验内容1) 学习社交网络中联系人职位、 公司、 年龄等信息的数据清洗和统计分析方法。2) 用Python语言中的Counter、 itemgetter等模块对L
34、inkedIn网站中联系人名单信息进行初步的统计分析。3、 实验原理1) 数据清洗: 数据清洗是指发现并纠正数据文件中可识别的错误, 包括检查数据一致性, 处理无效值和缺失值等。由于数据仓库中的数据是面向某一主题的数据的集合, 这些数据从多个业务系统中抽取而来而且包含历史数据, 这样就避免不了有的数据是错误数据、 有的数据相互之间有冲突, 这些错误的或有冲突的数据显然是我们不想要的, 称为”脏数据”。我们要按照一定的规则把脏数据清除, 这就是数据清洗。而数据清洗的任务是过滤那些不符合要求的数据, 将过滤的结果交给业务主管部门, 确认是否过滤掉还是由业务单位修正之后再进行抽取。不符合要求的数据主
35、要是有不完整的数据、 错误的数据、 重复的数据三大类。本实验中使用的数据来源是Linkedin网站中联系人信息, 需要清洗的数据主要是由于数据名称不统一造成的。例如, 联系人公司中很多都带有后缀Inc., Co.等, 联系人职位中很多带有Prof., Dr.等, 这些信息在统计时会有干扰作用。例如IBM Inc.和IBM代表的都是IBM公司, 但程序在进行统计分析时会误认为是两个不同的公司。实现代码如下: transforms = (, Inc., ), (, Inc, ), (, LLC, ), (, LLP, ), ( LLC, ), ( Inc., ), ( Inc, )csvReade
36、r = csv.DictReader(open(CSV_FILE), delimiter=, quotechar=)contacts = row for row in csvReadercompanies = cCompany.strip() for c in contacts if cCompany.strip() != for i, _ in enumerate(companies): for transform in transforms: companiesi = companiesi.replace(*transform)在该实验中, 学生需用前述的数据清洗方法实现对Linkedin
37、社交网络联系人信息进行数据清洗, 并在此基础上, 思考如何实现清洗其它社交网络(如新浪微博)联系人信息的方法, 记录Python代码, 并分析实验结果。2) Python语句分析清洗后的社交网站联系人信息时, 首先要调用Counter模块语句将联系人相关信息进行统计, 并调用PrettyTable模块将联系人信息存储在表中, 最后调用print语句按照降序打印用户信息表。此实验部分实现代码如下pt = PrettyTable(field_names=Company, Freq)pt.align = cc = Counter(companies)pt.add_row(company, freq)
38、for (company, freq) in sorted(c.items(), key=itemgetter(1), reverse=True) if freq 0print pttitles = cJob Title.strip() for c in contacts if cJob Title.strip() != for i, _ in enumerate(titles): for transform in transforms: titlesi = titlesi.replace(*transform)pt2 = PrettyTable(field_names=Job Title,
39、Freq)pt2.align = cc = Counter(titles)pt2.add_row(title, freq)for (title, freq) in sorted(c.items(), key=itemgetter(1), reverse=True) if freq 0在该实验中, 学生需用前述的统计分析方法分析LinkedIn联系人信息, 并在此基础上, 思考如何实现分析其它社交网络(微博)联系人信息的方法, 记录Python代码, 并分析实验结果。4、 实验步骤1) 设计社交网络数据清晰的程序l 分析实验要求l 清洗网络中的脏数据l 记录程序代码2) 设计统计分析社交网络联系
40、人信息的程序l 分析实验要求l 统计并打印联系人列表中的信息数据l 记录程序代码l 记录并分析实验结果实验项目6 使用Python大批量获取网络图片数据1、 实验目的1) 强化Python程序的设计和编程能力2) 了解大批量获取网络图片的原理3) 学习使用Python语言批量获取网络图片2、 实验内容1) 了解大批量获取网络图片的原理, 并掌握批量获取网络图片的方法。2) 用Python语言中的urllib、 urllib2等模块对图虫网站中的图片进行批量下载, 并存储在指定的文件夹中。3、 实验原理1) 批量获取网络图片的方法: 批量获取网络图片的方法是经过解析网页的HTML文件, 利用正则
41、表示式把源代码中的图片地址过滤出来, 从而根据过滤出来的图片地址下载网络图片。具体来说, 批量获取网络图片的方法分为三种, 一是用微软提供的扩展库win32com来操作IE, 二是用selenium的webdriver, 三是用python自带的HTMLParser解析。win32com能够获得类似js里面的document对象, 但文件是只读的。selenium则提供了对Chrome, IE, FireFox等浏览器的支持, 每种浏览器都有execute_script和find_element_by_xx方法, 能够方便的执行js脚本( 包括修改元素) 和读取html里面的元素。不足是sel
42、enium只提供对python2.6和2.7的支持。HTMLParser则是需要自己写个类继承基类, 重写解析元素的方法。2) 本实验中使用的批量获取网络图片的方法, 属于第三种方法。首先经过urllib2.urlopen(url).read().decode(utf-8)语句解析HTML文件, 再使用re.findall将把源代码中的图片地址过滤出来, 最后使用urllib.urlretrieve(imgurl, target)语句将图片下载到指定路径的文件夹中。实现代码如下: #获取二级页面urldef findUrl2(html): re1 = rd+/d+/|http:/w+(?!photos)