资源描述
《基于Python语言网络数据挖掘》实验指引书
电子科技大学信息与软件工程学院
二○一四年6月
一、 实验教学目和规定:
实验目:
本课程实验旨在加深学生对于网络大数据挖掘理解,培养学生分析、设计、实现基于Python语言网络数据挖掘算法,掌握科学实验办法,为后来其她专业课学习打下坚实基本。该实验内容采用循序渐进方式,从Python语言基本语法入手,在加深学生对于Python语言熟悉基本上突出数据挖掘应用。实验提供功能规定,学生自己拟定设计方案和需要思考如何设计最优化算法,并完毕成果记录和分析,充分发挥学生创造性和积极性。
实验规定:
理解并掌握Python语言基本语法、可以使用Python读取或写入数据表、获取并分析网络文本数据、获取并解决图像数据等。
二、 Python开发环境简介:
本课程实验使用Python开发环境为Python IDLE,其顾客界面图见图1所示。IDLE是开发python程序基本集成开发环境,具备基本IDE功能,是Python教学不错选取。当安装好python后来,IDLE就自动安装好了,不需要此外去找。同步,使用Eclipse这个强大框架时IDLE也可以非常以便调试Python程序。其基本功能涉及语法加亮、段落缩进、基本文本编辑、TABLE键控制、调试程序。
打开 Idle 后浮现一种增强交互命令行解释器窗口(具备比基本交互命令提示符更好剪切、粘贴、回行等功能)。除此之外,尚有一种针对 Python 编辑器(无代码合并,但有语法标签高亮和代码自动完毕功能)、类浏览器和调试器。菜单为 TK “剥离”式,也就是点击顶部任意下拉菜单虚线将会将该菜单提高到它自己永久窗口中去。特别是 "Edit" 菜单,将其“靠”在桌面一角非常实用。Idle 调试器提供断点、步进和变量监视功能。
图1 Python IDLE界面图
三、 实验项目名称及目规定:
实验项目1 Python语言基本语法及简朴应用
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('Please input a Fibonacci Series up to Number :'))
n = FibonacciUptoNumer
fibs = [0,1]
for number in range(n):
fibs.append(fibs[-2] + fibs[-1])
2) 设计删除一种list里面重复元素程序:一方面调用List.sort()对序列进行排序,
然后调用last = List[-1]语句从后向前找出重复元素,并逐个打印非重复元素。
此实验某些实当代码如下
if List:
List.sort()
last = List[-1]
for i in range(len(List)-2,-1,-1):
if last==List[i]:del List[i]
else:last=List[i]
print List
4、 实验环节
1)设计输出斐波那契数列Python程序
l 分析实验规定
l 逐个打印输出斐波那契数列元素
l 记录程序代码
l 记录并分析实验成果
2)设计程序删除一种list里面重复元素
l 分析实验规定
l 对list进行排序
l 从后向前查找并删除list中重复元素
l 记录程序代码
l 记录并分析实验成果
实验项目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,循环获取行数据语句为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(colnameindex) #某一行数据
list =[]
for rownum in range(1,nrows):
row = table.row_values(rownum)
if row:
app = {}
for i in range(len(colnames)):
app[colnames[i]] = row[i]
list.append(app)
return list
def excel_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 =[]
for rownum in range(1,nrows):
row = table.row_values(rownum)
if row:
app = {}
for i in range(len(colnames)):
app[colnames[i]] = row[i]
list.append(app)
return list
在该实验中,学生需用前述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文献。
此实验某些实当代码如下
from pyExcelerator import *
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()
for row in tables:
print row
endtime = datetime.datetime.now()
print endtime - starttime
starttime = datetime.datetime.now()
tables = excel_table_byname()
for row in tables:
print row
endtime = 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 分析实验规定
l 记录程序代码
l 比较并分析实验成果
l 总结,撰写实验报告
实验项目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源代码,咱们以淘宝网页中商品分类()为例,获取所有一级类别和二级类别标题。
本实验中要调用urllib2和sgmllib.SGMLParser模块,并使用语句content = urllib2.urlopen('网页URL').read()来获取网页内容。并使用list.feed(content)语句将网页内容存入列表,进行解决。
此实验某些实当代码如下
class ListName1(SGMLParser):
def __init__(self):
SGMLParser.__init__(self)
self.is_h4 = ""
self.name = []
def start_h4(self,attrs):
self.is_h4 = 1
def 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 start_h5(self,attrs):
self.is_h5 = 1
def 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)
在该实验中,学生需用前述爬虫算法实现语句实现写入读取淘宝网页商品分类标题功能,并在此基本上,思考如何实现读取其她网页数据办法,记录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 depth <= self.Maxdepth:
depth += 1
print 'Searching depth ',depth,'...\n\n'
self.downloadAll()
self.updateToDl()
content = '\n>>>Depth ' + str(depth)+':\n'
self.logfile.write(content)
i = 0
while i < len(g_toDlUrl):
content = str(g_totalcount + i + 1) + '->' + g_toDlUrl[i] + '\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): #线程工作-->下载html页面
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 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)设计多线程获取网站URL程序
l 分析实验规定
l 打印网站上有关URL
l 比较不同线程数算法性能
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网站中联系人名单进行收集。
3、实验原理
1)社交网络OAUTH合同原理:
OAUTH合同为顾客资源授权提供了一种安全、开放而又简易原则。与以往授权方式不同之处是OAUTH授权不会使第三方触及到顾客帐号信息(如顾客名与密码),即第三方无需使用顾客顾客名与密码就可以申请获得该顾客资源授权,因而OAUTH是安全。
本实验中Linkedin网站OAUTH合同是采用HMAC-SHA1加密。开发者需要注册LinkedIn账户,获得CONSUMER_KEY(即API Key) 和CONSUMER_SECRET。KEY跟SECRET使用方式跟其她某些合同中公钥私钥方案相类似,你可以使用你所熟悉编程语言将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_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 "Access Token:"
print " - oauth_token = %s" % access_token['oauth_token']
print " - oauth_token_secret = %s" % access_token['oauth_token_secret']
print
print "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.join语句将顾客有关信息存储到CSV或者XLS文献中,最后调用PrettyTable模块打印顾客信息表。
此实验某些实当代码如下
# Instantiate the developer authentication class
auth=linkedin.LinkedInDeveloperAuthentication(CONSUMER_KEY,CONSUMER_SECRET,USER_TOKEN,USER_SECRET,RETURN_URL,permissions=linkedin.PERMISSIONS.enums.values())
# Pass it in to the app...
app = linkedin.LinkedInApplication(auth)
# Use the app...
app.get_profile()
import json
import os
connections = 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 PrettyTable # pip install prettytable
pt = PrettyTable(field_names=['Name','Location'])
pt.align = 'l'
[ pt.add_row((c['firstName'] + ' ' + c['lastName'],c['location']['name']))
for c in connections['values']
if c.has_key('location')]
在该实验中,学生需用前述社交网络信息获取语句实现授权顾客LinkedIn联系人信息,并在此基本上,思考如何实现获取其她社交网络(微博)顾客信息办法,记录Python代码,并分析实验成果。
4、实验环节
1)设计社交网络授权顾客ACCESS TOKEN程序
l 分析实验规定
l 记录程序代码
2)设计社交网络授权顾客联系人信息程序
l 分析实验规定
l 打印授权顾客联系人信息
l 导入授权顾客联系人信息
l 记录程序代码
l 记录并分析实验成果
实验项目5 使用Python记录分析社交网络数据
1、实验目
1)强化Python程序设计和编程能力
2)学习社交网络数据清洗和数据记录分析办法
3)学习使用Python语言记录分析社交网络数据
2、实验内容
1)学习社交网络中联系人职位、公司、年龄等信息数据清洗和记录分析办法。
2)用Python语言中Counter、itemgetter等模块对LinkedIn网站中联系人名单信息进行初步记录分析。
3、实验原理
1)数据清洗:
数据清洗是指发现并纠正数据文献中可辨认错误,涉及检查数据一致性,解决无效值和缺失值等。由于数据仓库中数据是面向某一主题数据集合,这些数据从各种业务系统中抽取而来并且包括历史数据,这样就避免不了有数据是错误数据、有数据互相之间有冲突,这些错误或有冲突数据显然是咱们不想要,称为“脏数据”。咱们要按照一定规则把脏数据清除,这就是数据清洗。而数据清洗任务是过滤那些不符合规定数据,将过滤成果交给业务主管部门,确认与否过滤掉还是由业务单位修正之后再进行抽取。不符合规定数据重要是有不完整数据、错误数据、重复数据三大类。
本实验中使用数据来源是Linkedin网站中联系人信息,需要清洗数据重要是由于数据名称不统一导致。例如,联系人公司中诸多都带有后缀Inc.,Co.等,联系人职位中诸多带有Prof.,Dr.等,这些信息在记录时会有干扰作用。例如IBM Inc.和IBM代表都是IBM公司,但程序在进行记录分析时会误以为是两个不同公司。
实当代码如下:
transforms = [(',Inc.',''),(',Inc',''),(',LLC',''),(',LLP',''),(' LLC',''),(' Inc.',''),(' Inc','')]
csvReader = csv.DictReader(open(CSV_FILE),delimiter=',',quotechar='"')
contacts = [row for row in csvReader]
companies = [c['Company'].strip() for c in contacts if c['Company'].strip() != ' ']
for i,_ in enumerate(companies):
for transform in transforms:
companies[i] = companies[i].replace(*transform)
在该实验中,学生需用前述数据清洗办法实现对Linkedin社交网络联系人信息进行数据清洗,并在此基本上,思考如何实现清洗其她社交网络(如新浪微博)联系人信息办法,记录Python代码,并分析实验成果。
2)Python语句分析清洗后社交网站联系人信息时,一方面要调用Counter模块语句将联系人有关信息进行记录,并调用PrettyTable模块将联系人信息存储在表中,最后调用print语句按照降序打印顾客信息表。
此实验某些实当代码如下
pt = PrettyTable(field_names=['Company','Freq'])
pt.align = 'c'
c = Counter(companies)
[pt.add_row([company,freq])
for (company,freq) in sorted(c.items(),key=itemgetter(1),reverse=True)
if freq > 0]
print pt
titles = [c['Job Title'].strip() for c in contacts if c['Job Title'].strip() != ' ']
for i,_ in enumerate(titles):
for transform in transforms:
titles[i] = titles[i].replace(*transform)
pt2 = PrettyTable(field_names=['Job Title','Freq'])
pt2.align = 'c'
c = 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)设计记录分析社交网络联系人信息程序
l 分析实验规定
l 记录并打印联系人列表中信息数据
l 记录程序代码
l 记录并分析实验成果
实验项目6 使用Python大批量获取网络图片数据
1、实验目
1)强化Python程序设计和编程能力
2)理解大批量获取网络图片原理
3)学习使用Python语言批量获取网络图片
2、实验内容
1)理解大批量获取网络图片原理,并掌握批量获取网络图片办法。
2)用Python语言中urllib、urllib2等模块对图虫网站中图片进行批量下载,并存储在指定文献夹中。
3、实验原理
1)批量获取网络图片办法:
批量获取网络图片办法是通过解析网页HTML文献,运用正则表达式把源代码中图片地址过滤出来,从而依照过滤出来图片地址下载网络图片。详细来说,批量获取网络图片办法分为三种,一是用微软提供扩展库win32com来操作IE,二是用seleniumwebdriver,三是用python自带HTMLParser解析。win32com可以获得类似js里面document对象,但文献是只读。selenium则提供了对Chrome,IE,FireFox等浏览器支持,每种浏览器均有execute_script和find_element_by_xx办法,可以以便执行js脚本(涉及修改元素)和读取html里面元素。局限性是selenium只提供对python2.6和2.7支持。HTMLParser则是需要自己写个类继承基类,重写解析元素办法。
2)本实验中使用批量获取网络图片办法,属于第三种办法。一方面通过urllib2.urlopen(url).read().decode('utf-8')语句解析HTML文献,再使用re.findall将把源代码中图片地址过滤出来,最后使用urllib.urlretrieve(imgurl,target)语句将图片下载到指定途径文献夹中。
实当代码如下:
#获取二级页面url
def findUrl2(html):
re1 = r'\d+/\d+/|http://\w+(?<!photos)
url2list = re.findall(re1,html)
url2lstfltr = list(set(url2list))
url2lstfltr.sort(key=url2list.index)
#print url2lstfltr
return url2lstfltr
#获取html文本
def getHtml(url):
html = urllib2.urlopen(url).read().decode('utf-8')#解码为utf-8
return html
#下载图片到本地
def download(html_page ,pageNo):
#定义文献夹名字
x = time.localtime(time.time())
foldername=str(x.__getattribute__("tm_year"))+"-"+str(x.__getattribute__("tm_mon"))+"-"+str(x.__getattribute__("tm_mday"))
re2=r'+/f/.+\.jpg'
imglist=re.findall(re2,html_page)
print imglist
download_img=None
展开阅读全文