




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
《基于Python語言的網(wǎng)絡(luò)數(shù)據(jù)挖掘》實(shí)驗(yàn)指導(dǎo)書2014《基于Python語言的網(wǎng)絡(luò)數(shù)據(jù)挖掘》實(shí)驗(yàn)指導(dǎo)書電子科技大學(xué)信息與軟件工程學(xué)院二○一四年6月實(shí)驗(yàn)教學(xué)目的和要求:實(shí)驗(yàn)?zāi)康模罕菊n程實(shí)驗(yàn)旨在加深學(xué)生對于網(wǎng)絡(luò)大數(shù)據(jù)挖掘的理解,培養(yǎng)學(xué)生分析、設(shè)計、實(shí)現(xiàn)基于Python語言的網(wǎng)絡(luò)數(shù)據(jù)挖掘算法,掌握科學(xué)的實(shí)驗(yàn)方法,為以后其他專業(yè)課的學(xué)習(xí)打下堅實(shí)的基礎(chǔ)。該實(shí)驗(yàn)內(nèi)容采用循序漸進(jìn)的方式,從Python語言的基本語法入手,在加深學(xué)生對于Python語言熟悉的基礎(chǔ)上突出數(shù)據(jù)挖掘應(yīng)用。實(shí)驗(yàn)提供功能要求,學(xué)生自己確定設(shè)計方案和需要思考如何設(shè)計最優(yōu)化的算法,并完成結(jié)果記錄和分析,充分發(fā)揮學(xué)生的創(chuàng)造性和主動性。實(shí)驗(yàn)要求:了解并掌握Python語言的基本語法、能夠使用Python讀取或?qū)懭霐?shù)據(jù)表、獲取并分析網(wǎng)絡(luò)文本數(shù)據(jù)、獲取并處理圖像數(shù)據(jù)等。Python開發(fā)環(huán)境簡介:本課程實(shí)驗(yàn)使用的Python開發(fā)環(huán)境為PythonIDLE,其用戶界面圖見圖1所示。IDLE是開發(fā)python程序的基本集成開發(fā)環(huán)境,具備基本的IDE的功能,是Python教學(xué)的不錯的選擇。當(dāng)安裝好python以后,IDLE就自動安裝好了,不需要另外去找。同時,使用Eclipse這個強(qiáng)大的框架時IDLE也可以非常方便的調(diào)試Python程序。其基本功能包括語法加亮、段落縮進(jìn)、基本文本編輯、TABLE鍵控制、調(diào)試程序。打開Idle后出現(xiàn)一個增強(qiáng)的交互命令行解釋器窗口(具有比基本的交互命令提示符更好的剪切、粘貼、回行等功能)。除此之外,還有一個針對Python的編輯器(無代碼合并,但有語法標(biāo)簽高亮和代碼自動完成功能)、類瀏覽器和調(diào)試器。菜單為TK“剝離”式,也就是點(diǎn)擊頂部任意下拉菜單的虛線將會將該菜單提升到它自己的永久窗口中去。特別是"Edit"菜單,將其“靠”在桌面一角非常實(shí)用。Idle的調(diào)試器提供斷點(diǎn)、步進(jìn)和變量監(jiān)視功能。圖1PythonIDLE界面圖實(shí)驗(yàn)項(xiàng)目名稱及目的要求:實(shí)驗(yàn)項(xiàng)目1Python語言的基本語法及簡單應(yīng)用1、實(shí)驗(yàn)?zāi)康恼莆誔ython語言的基本語法掌握Python語言中創(chuàng)建模塊的方法了解Python語言中定義類及其使用方法學(xué)習(xí)使用Python語言輸出斐波那契數(shù)列的方法學(xué)習(xí)使用Python語言\o"查看:Python面試題:請寫出一段Python代碼實(shí)現(xiàn)刪除一個list里面的重復(fù)元素"實(shí)現(xiàn)刪除一個list里面的重復(fù)元素的方法2、實(shí)驗(yàn)內(nèi)容1)根據(jù)Python基本語法功能設(shè)計出實(shí)現(xiàn)輸出斐波那契數(shù)列的方法,并比較不同實(shí)現(xiàn)方法的性能。2)根據(jù)Python語言中的排序和循環(huán)功能,\o"查看:Python面試題:請寫出一段Python代碼實(shí)現(xiàn)刪除一個list里面的重復(fù)元素"實(shí)現(xiàn)刪除一個list里面的重復(fù)元素3、實(shí)驗(yàn)原理設(shè)計輸出斐波那契數(shù)列的Python程序:首先調(diào)用raw_input輸入要打印的斐波那契數(shù)列的長度,然后把斐波那契數(shù)列存儲于一個序列當(dāng)中,并逐個打印序列的元素。此實(shí)驗(yàn)部分實(shí)現(xiàn)代碼如下#通過輸入斐波那契數(shù)列的長度打印斐波那契數(shù)列FibonacciUptoNumer=int(raw_input('PleaseinputaFibonacciSeriesuptoNumber:'))n=FibonacciUptoNumerfibs=[0,1]fornumberinrange(n):fibs.append(fibs[-2]+fibs[-1])設(shè)計\o"查看:Python面試題:請寫出一段Python代碼實(shí)現(xiàn)刪除一個list里面的重復(fù)元素"刪除一個list里面的重復(fù)元素程序:首先調(diào)用List.sort()對序列進(jìn)行排序,然后調(diào)用last=List[-1]語句從后向前找出重復(fù)的元素,并逐個打印非重復(fù)的元素。此實(shí)驗(yàn)部分實(shí)現(xiàn)代碼如下ifList:List.sort()last=List[-1]foriinrange(len(List)-2,-1,-1):iflast==List[i]:delList[i]else:last=List[i]printList實(shí)驗(yàn)步驟1)設(shè)計輸出斐波那契數(shù)列的Python程序分析實(shí)驗(yàn)要求逐個打印輸出斐波那契數(shù)列的元素記錄程序代碼記錄并分析實(shí)驗(yàn)結(jié)果2)設(shè)計程序\o"查看:Python面試題:請寫出一段Python代碼實(shí)現(xiàn)刪除一個list里面的重復(fù)元素"刪除一個list里面的重復(fù)元素分析實(shí)驗(yàn)要求對list進(jìn)行排序從后向前查找并刪除list中的重復(fù)元素記錄程序代碼記錄并分析實(shí)驗(yàn)結(jié)果實(shí)驗(yàn)項(xiàng)目2使用Python讀寫Excel數(shù)據(jù)1、實(shí)驗(yàn)?zāi)康?)強(qiáng)化Python程序的設(shè)計和編程能力2)學(xué)習(xí)兩種讀取的Excel數(shù)據(jù)的方法3)學(xué)習(xí)寫入Excel數(shù)據(jù)的方法4)掌握如何讀寫其他格式數(shù)據(jù)的方法5)掌握如何比較不同讀寫方法的運(yùn)算性能2、實(shí)驗(yàn)內(nèi)容1)用xlrd模塊中的open_workbook實(shí)現(xiàn)打開Excel數(shù)據(jù)表,并設(shè)計使用索引和名稱兩種方法讀取Excel數(shù)據(jù),最終寫入csv文件中。2)用datetime模塊中的datetime.now來計算兩種不同的讀取方法所用CPU時間,從而比較并分析不同算法的性能。3、實(shí)驗(yàn)原理1)Python語句讀取Excel表數(shù)據(jù)時,首先要調(diào)用xlrd模塊,然后使用語句data=xlrd.open_workbook('excelFile.xls')打開Excel表格。當(dāng)一個Excel表格中包含多個Sheet時,可以通過索引或者名稱順序獲取某一個Sheet中的數(shù)據(jù)。使用的語句分別為table=data.sheet_by_index(0)和table=data.sheet_by_name(u'Sheet1')。當(dāng)獲取某個Sheet的數(shù)據(jù)并存儲在工作表table后,獲取獲取整行和整列的值(數(shù)組)的語句為table.row_values(i)和table.col_values(i),獲取行數(shù)和列數(shù)的語句為nrows=table.nrows和ncols=table.ncols,循環(huán)獲取行數(shù)據(jù)的語句為foriinrange(nrows):printtable.row_values(i)。此實(shí)驗(yàn)部分實(shí)現(xiàn)代碼如下#根據(jù)索引獲取Excel表格中的數(shù)據(jù)defexcel_table_byindex(file='abc.xls',colnameindex=0,by_index=0):data=open_excel(file)table=data.sheets()[by_index]nrows=table.nrows#行數(shù)colnames=table.row_values(colnameindex)#某一行數(shù)據(jù)list=[]forrownuminrange(1,nrows):row=table.row_values(rownum)ifrow:app={}foriinrange(len(colnames)):app[colnames[i]]=row[i]list.append(app)returnlistdefexcel_table_byname(file='abc.xls',colnameindex=0,by_name='abc'):data=open_excel(file)table=data.sheet_by_name(by_name)nrows=table.nrows#行數(shù)colnames=table.row_values(colnameindex)#某一行數(shù)據(jù)list=[]forrownuminrange(1,nrows):row=table.row_values(rownum)ifrow:app={}foriinrange(len(colnames)):app[colnames[i]]=row[i]list.append(app)returnlist在該實(shí)驗(yàn)中,學(xué)生需用前述的Excel數(shù)據(jù)操作語句實(shí)現(xiàn)讀取某一個Sheet數(shù)據(jù)的功能,并在此基礎(chǔ)上,思考如何讀取其他格式的數(shù)據(jù),記錄Python代碼,并分析實(shí)驗(yàn)結(jié)果。2)Python語句寫入Excel表數(shù)據(jù)時,首先要調(diào)用pyExcelerator模塊,然后使用語句w=Workbook()和ws=w.add_sheet('excelFile.xls')創(chuàng)建一個空白的工作表。在某一個cell寫入數(shù)據(jù)的語句為ws.write(i,j,'string'),而w.save('mini.xls')實(shí)現(xiàn)了存儲寫入后的Excel文件。此實(shí)驗(yàn)部分實(shí)現(xiàn)代碼如下frompyExceleratorimport*w=Workbook()#創(chuàng)建一個工作簿ws=w.add_sheet('test')#創(chuàng)建一個工作表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文件中在該實(shí)驗(yàn)中,學(xué)生需用前述的Excel數(shù)據(jù)操作語句實(shí)現(xiàn)寫入某一個Sheet數(shù)據(jù)的功能,并在此基礎(chǔ)上,思考如何寫入其他格式的數(shù)據(jù)(如csv格式),記錄Python代碼,并分析實(shí)驗(yàn)結(jié)果。3)比較兩種不同的讀取Excel數(shù)據(jù)的方法時,需要計算每種方法的運(yùn)行時間。首先導(dǎo)入datetime模塊,并調(diào)用datetime.now()函數(shù),記錄某一段代碼運(yùn)行前后的時間點(diǎn),通過開始和結(jié)束的時間點(diǎn)的差值計算出程序運(yùn)行的時間。此實(shí)驗(yàn)部分實(shí)現(xiàn)代碼如下starttime=datetime.datetime.now()tables=excel_table_byindex()forrowintables:printrowendtime=datetime.datetime.now()printendtime-starttimestarttime=datetime.datetime.now()tables=excel_table_byname()forrowintables:printrowendtime=datetime.datetime.now()printendtime-starttime在該實(shí)驗(yàn)中,學(xué)生需用前述的CPU時間控制語句實(shí)現(xiàn)計算某一段代碼的運(yùn)算時間,并在此基礎(chǔ)上,比較并分析兩種Excel數(shù)據(jù)讀取方法的性能。記錄Python代碼,并分析實(shí)驗(yàn)結(jié)果。實(shí)驗(yàn)步驟1)設(shè)計按名稱和按索引讀取Excel數(shù)據(jù)的程序分析實(shí)驗(yàn)要求按行打印Excel表中的數(shù)據(jù)記錄程序代碼記錄并分析實(shí)驗(yàn)結(jié)果2)設(shè)計寫入Excel數(shù)據(jù)的程序分析實(shí)驗(yàn)要求按行將數(shù)據(jù)寫入Excel表中記錄程序代碼記錄并分析實(shí)驗(yàn)結(jié)果3)設(shè)計計算程序運(yùn)行時間的程序分析實(shí)驗(yàn)要求記錄程序代碼比較并分析實(shí)驗(yàn)結(jié)果總結(jié),撰寫實(shí)驗(yàn)報告實(shí)驗(yàn)項(xiàng)目3使用Python實(shí)現(xiàn)網(wǎng)絡(luò)爬蟲算法1、實(shí)驗(yàn)?zāi)康?)強(qiáng)化Python程序的設(shè)計和編程能力2)學(xué)習(xí)網(wǎng)絡(luò)爬蟲算法的原理3)學(xué)習(xí)使用Python語言實(shí)現(xiàn)網(wǎng)絡(luò)爬蟲算法2、實(shí)驗(yàn)內(nèi)容1)理解網(wǎng)絡(luò)爬蟲算法的原理,并設(shè)計使用Python語言獲取網(wǎng)頁數(shù)據(jù)的程序。2)用Python語言中的threading和GetUrl模塊對網(wǎng)站中URL進(jìn)行搜集。3、實(shí)驗(yàn)原理爬蟲算法原理:網(wǎng)絡(luò)爬蟲(又被稱為網(wǎng)頁蜘蛛,網(wǎng)絡(luò)機(jī)器人,網(wǎng)頁追逐者),是一種按照一定的規(guī)則,自動的抓取萬維網(wǎng)信息的程序或者腳本。很多搜索引擎都使用爬蟲提供最新的數(shù)據(jù),搜索引擎利用用戶訪問過頁面的一個副本進(jìn)行索引,以提供快速的訪問。網(wǎng)絡(luò)爬蟲也可以在web上用來自動執(zhí)行一些任務(wù),例如檢查鏈接,確認(rèn)html代碼;也可以用來抓取網(wǎng)頁上某種特定類型信息,例如抓取電子郵件地址。本實(shí)驗(yàn)中使用的網(wǎng)絡(luò)爬蟲算法是廣度優(yōu)先搜索(BFS)。廣度優(yōu)先搜索策略是指在抓取過程中,在完成當(dāng)前層次的搜索后,才進(jìn)行下一層次的搜索。有很多研究將廣度優(yōu)先搜索策略應(yīng)用于聚焦爬蟲中。其基本思想是認(rèn)為與初始URL在一定鏈接距離內(nèi)的網(wǎng)頁具有主題相關(guān)性的概率很大。另外一種應(yīng)用是將廣度優(yōu)先搜索與網(wǎng)頁過濾技術(shù)結(jié)合使用,先用廣度優(yōu)先策略抓取網(wǎng)頁,再將其中無關(guān)的網(wǎng)頁過濾掉。這些方法的缺點(diǎn)在于,隨著抓取網(wǎng)頁的增多,大量的無關(guān)網(wǎng)頁將被下載并過濾,算法的效率將變低。2)Python語句在某一個網(wǎng)頁上獲取數(shù)據(jù)時,首先要分析網(wǎng)頁的HTML源代碼,我們以淘寶網(wǎng)頁中的商品分類(/browse/cat-0.htm)為例,獲取所有一級類別和二級類別的標(biāo)題。本實(shí)驗(yàn)中要調(diào)用urllib2和sgmllib.SGMLParser模塊,并使用語句content=urllib2.urlopen('網(wǎng)頁URL').read()來獲取網(wǎng)頁的內(nèi)容。并使用list.feed(content)語句將網(wǎng)頁內(nèi)容存入列表,進(jìn)行處理。此實(shí)驗(yàn)部分實(shí)現(xiàn)代碼如下classListName1(SGMLParser): def__init__(self): SGMLParser.__init__(self) self.is_h4="" =[] defstart_h4(self,attrs): self.is_h4=1 defend_h4(self): self.is_h4="" defhandle_data(self,text): ifself.is_h4==1: .append(text) classListName2(SGMLParser): def__init__(self): SGMLParser.__init__(self) self.is_h5="" =[] defstart_h5(self,attrs): self.is_h5=1 defend_h5(self): self.is_h5="" defhandle_data(self,text): ifself.is_h5==1: .append(text)content=urllib2.urlopen('/browse/cat-0.htm').read()listname1=ListName1()listname2=ListName2()listname1.feed(content)listname2.feed(content)在該實(shí)驗(yàn)中,學(xué)生需用前述的爬蟲算法實(shí)現(xiàn)語句實(shí)現(xiàn)寫入讀取淘寶網(wǎng)頁商品分類標(biāo)題的功能,并在此基礎(chǔ)上,思考如何實(shí)現(xiàn)讀取其他網(wǎng)頁數(shù)據(jù)的方法,記錄Python代碼,并分析實(shí)驗(yàn)結(jié)果。3)在獲取網(wǎng)站上的URL時,需要調(diào)用GetUrl模塊。本實(shí)驗(yàn)中通過調(diào)用threading模塊采用多線程算法實(shí)現(xiàn)網(wǎng)站URL的獲取。此實(shí)驗(yàn)部分實(shí)現(xiàn)代碼如下defCraw(self,entryUrl):#這是一個深度搜索,到g_toDlUrl為空時結(jié)束g_toDlUrl.append(entryUrl)self.logfile.write('>>>Entry:\n')self.logfile.write(entryUrl)depth=0whilelen(g_toDlUrl)!=0anddepth<=self.Maxdepth:depth+=1print'Searchingdepth',depth,'...\n\n'self.downloadAll()self.updateToDl()content='\n>>>Depth'+str(depth)+':\n'self.logfile.write(content)i=0whilei<len(g_toDlUrl):content=str(g_totalcount+i+1)+'->'+g_toDlUrl[i]+'\n'self.logfile.write(content)i+=1classCrawlerThread(threading.Thread):def__init__(self,url,fileName):threading.Thread.__init__(self)self.url=url#本線程下載的urlself.fileName=fileNamedefrun(self):#線程工作-->下載html頁面globalg_mutexglobalg_failedUrlglobalg_dledUrltry: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.urlreturnNone#記著返回!g_mutex.acquire()#線程鎖-->鎖上g_pages.append(s)g_dledUrl.append(self.url)g_mutex.release()#線程鎖-->釋放在該實(shí)驗(yàn)中,學(xué)生需用上述網(wǎng)絡(luò)爬蟲算法和多線程控制語句實(shí)現(xiàn)獲取某一網(wǎng)站所有URL的程序,并在此基礎(chǔ)上,比較并分析采用不同線程數(shù)時算法的性能。記錄Python代碼,并分析實(shí)驗(yàn)結(jié)果。4、實(shí)驗(yàn)步驟1)設(shè)計某一個網(wǎng)頁上獲取數(shù)據(jù)的程序分析實(shí)驗(yàn)要求打印網(wǎng)頁上獲取的數(shù)據(jù)記錄程序代碼記錄并分析實(shí)驗(yàn)結(jié)果2)設(shè)計多線程的獲取網(wǎng)站URL的程序分析實(shí)驗(yàn)要求打印網(wǎng)站上相關(guān)的URL比較不同線程數(shù)的算法性能記錄程序代碼記錄并分析實(shí)驗(yàn)結(jié)果實(shí)驗(yàn)項(xiàng)目4使用Python獲取社交網(wǎng)絡(luò)數(shù)據(jù)1、實(shí)驗(yàn)?zāi)康?)強(qiáng)化Python程序的設(shè)計和編程能力2)學(xué)習(xí)社交網(wǎng)絡(luò)OAUTH協(xié)議的原理3)學(xué)習(xí)使用Python語言獲取社交網(wǎng)絡(luò)數(shù)據(jù)2、實(shí)驗(yàn)內(nèi)容1)理解社交網(wǎng)絡(luò)OAUTH協(xié)議的原理,并學(xué)習(xí)獲取CONSUMER_KEY、CONSUMER_SECRET、USER_TOKEN、USER_SECRET的方法。2)用Python語言中的Json、OS、Linkedin模塊對LinkedIn網(wǎng)站中聯(lián)系人名單進(jìn)行搜集。3、實(shí)驗(yàn)原理1)社交網(wǎng)絡(luò)OAUTH協(xié)議原理:OAUTH協(xié)議為用戶資源的授權(quán)提供了一個安全的、開放而又簡易的標(biāo)準(zhǔn)。與以往的授權(quán)方式不同之處是OAUTH的授權(quán)不會使第三方觸及到用戶的帳號信息(如用戶名與密碼),即第三方無需使用用戶的用戶名與密碼就可以申請獲得該用戶資源的授權(quán),因此OAUTH是安全的。本實(shí)驗(yàn)中Linkedin網(wǎng)站的OAUTH協(xié)議是采用HMAC-SHA1加密的。開發(fā)者需要注冊LinkedIn賬戶,獲得CONSUMER_KEY(即APIKey)和CONSUMER_SECRET。KEY跟SECRET的使用方式跟其他一些協(xié)議中的公鑰私鑰的方案相類似,你可以使用你所熟悉的編程語言將KEY和SECRET結(jié)合,為你發(fā)出的每個請求添加簽名,以此來向Linkedin開放平臺表明自己身份的合法性。然后根據(jù)CONSUMER_KEY和CONSUMER_SECRET獲取USER_TOKEN和USER_SECRET。這個步驟主要有兩個目的:第一,告訴Linkedin將要做什么;第二,告訴Linkedin在callback里要做什么。此外,USER_TOKEN和USER_SECRET可以幫助提供ACCESSTOKEN。實(shí)現(xiàn)代碼如下:access_token_url='/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']printprint"Youmaynowaccessprotectedresourcesusingtheaccesstokensabove."Print在該實(shí)驗(yàn)中,學(xué)生需用前述的OAUTH協(xié)議原理實(shí)現(xiàn)獲取Linkedin社交網(wǎng)絡(luò)的ACCESSTOKEN,并在此基礎(chǔ)上,思考如何實(shí)現(xiàn)讀取其他社交網(wǎng)絡(luò)(如新浪微博)ACCESSTOKEN的方法,記錄Python代碼,并分析實(shí)驗(yàn)結(jié)果。2)Python語句獲取社交網(wǎng)站用戶信息時,首先要獲得ACCESSTOKEN,然后調(diào)用os.path.join語句將用戶相關(guān)信息存儲到CSV或者XLS文件中,最后調(diào)用PrettyTable模塊打印用戶信息表。此實(shí)驗(yàn)部分實(shí)現(xiàn)代碼如下#Instantiatethedeveloperauthenticationclassauth=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()importjsonimportosconnections=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()fromprettytableimportPrettyTable#pipinstallprettytablept=PrettyTable(field_names=['Name','Location'])pt.align='l'[pt.add_row((c['firstName']+''+c['lastName'],c['location']['name']))forcinconnections['values']ifc.has_key('location')]在該實(shí)驗(yàn)中,學(xué)生需用前述的社交網(wǎng)絡(luò)信息獲取語句實(shí)現(xiàn)授權(quán)用戶的LinkedIn聯(lián)系人信息,并在此基礎(chǔ)上,思考如何實(shí)現(xiàn)獲取其他社交網(wǎng)絡(luò)(微博)用戶信息的方法,記錄Python代碼,并分析實(shí)驗(yàn)結(jié)果。4、實(shí)驗(yàn)步驟1)設(shè)計社交網(wǎng)絡(luò)授權(quán)用戶ACCESSTOKEN的程序分析實(shí)驗(yàn)要求記錄程序代碼2)設(shè)計社交網(wǎng)絡(luò)授權(quán)用戶聯(lián)系人信息的程序分析實(shí)驗(yàn)要求打印授權(quán)用戶聯(lián)系人信息導(dǎo)入授權(quán)用戶聯(lián)系人的信息記錄程序代碼記錄并分析實(shí)驗(yàn)結(jié)果實(shí)驗(yàn)項(xiàng)目5使用Python統(tǒng)計分析社交網(wǎng)絡(luò)數(shù)據(jù)1、實(shí)驗(yàn)?zāi)康?)強(qiáng)化Python程序的設(shè)計和編程能力2)學(xué)習(xí)社交網(wǎng)絡(luò)數(shù)據(jù)清洗和數(shù)據(jù)統(tǒng)計分析的方法3)學(xué)習(xí)使用Python語言統(tǒng)計分析社交網(wǎng)絡(luò)數(shù)據(jù)2、實(shí)驗(yàn)內(nèi)容1)學(xué)習(xí)社交網(wǎng)絡(luò)中聯(lián)系人職位、公司、年齡等信息的數(shù)據(jù)清洗和統(tǒng)計分析方法。2)用Python語言中的Counter、itemgetter等模塊對LinkedIn網(wǎng)站中聯(lián)系人名單信息進(jìn)行初步的統(tǒng)計分析。3、實(shí)驗(yàn)原理1)數(shù)據(jù)清洗:數(shù)據(jù)清洗是指發(fā)現(xiàn)并糾正數(shù)據(jù)文件中可識別的錯誤,包括檢查數(shù)據(jù)一致性,處理無效值和缺失值等。由于數(shù)據(jù)倉庫中的數(shù)據(jù)是面向某一主題的數(shù)據(jù)的集合,這些數(shù)據(jù)從多個業(yè)務(wù)系統(tǒng)中抽取而來而且包含歷史數(shù)據(jù),這樣就避免不了有的數(shù)據(jù)是錯誤數(shù)據(jù)、有的數(shù)據(jù)相互之間有沖突,這些錯誤的或有沖突的數(shù)據(jù)顯然是我們不想要的,稱為“臟數(shù)據(jù)”。我們要按照一定的規(guī)則把臟數(shù)據(jù)清除,這就是數(shù)據(jù)清洗。而數(shù)據(jù)清洗的任務(wù)是過濾那些不符合要求的數(shù)據(jù),將過濾的結(jié)果交給業(yè)務(wù)主管部門,確認(rèn)是否過濾掉還是由業(yè)務(wù)單位修正之后再進(jìn)行抽取。不符合要求的數(shù)據(jù)主要是有不完整的數(shù)據(jù)、錯誤的數(shù)據(jù)、重復(fù)的數(shù)據(jù)三大類。本實(shí)驗(yàn)中使用的數(shù)據(jù)來源是Linkedin網(wǎng)站中聯(lián)系人信息,需要清洗的數(shù)據(jù)主要是由于數(shù)據(jù)名稱不統(tǒng)一造成的。例如,聯(lián)系人公司中很多都帶有后綴Inc.,Co.等,聯(lián)系人職位中很多帶有Prof.,Dr.等,這些信息在統(tǒng)計時會有干擾作用。例如IBMInc.和IBM代表的都是IBM公司,但程序在進(jìn)行統(tǒng)計分析時會誤認(rèn)為是兩個不同的公司。實(shí)現(xiàn)代碼如下:transforms=[(',Inc.',''),(',Inc',''),(',LLC',''),(',LLP',''),('LLC',''),('Inc.',''),('Inc','')]csvReader=csv.DictReader(open(CSV_FILE),delimiter=',',quotechar='"')contacts=[rowforrowincsvReader]companies=[c['Company'].strip()forcincontactsifc['Company'].strip()!='']fori,_inenumerate(companies):fortransformintransforms:companies[i]=companies[i].replace(*transform)在該實(shí)驗(yàn)中,學(xué)生需用前述的數(shù)據(jù)清洗方法實(shí)現(xiàn)對Linkedin社交網(wǎng)絡(luò)聯(lián)系人信息進(jìn)行數(shù)據(jù)清洗,并在此基礎(chǔ)上,思考如何實(shí)現(xiàn)清洗其他社交網(wǎng)絡(luò)(如新浪微博)聯(lián)系人信息的方法,記錄Python代碼,并分析實(shí)驗(yàn)結(jié)果。2)Python語句分析清洗后的社交網(wǎng)站聯(lián)系人信息時,首先要調(diào)用Counter模塊語句將聯(lián)系人相關(guān)信息進(jìn)行統(tǒng)計,并調(diào)用PrettyTable模塊將聯(lián)系人信息存儲在表中,最后調(diào)用print語句按照降序打印用戶信息表。此實(shí)驗(yàn)部分實(shí)現(xiàn)代碼如下pt=PrettyTable(field_names=['Company','Freq'])pt.align='c'c=Counter(companies)[pt.add_row([company,freq])for(company,freq)insorted(c.items(),key=itemgetter(1),reverse=True)iffreq>0]printpttitles=[c['JobTitle'].strip()forcincontactsifc['JobTitle'].strip()!='']fori,_inenumerate(titles):fortransformintransforms:titles[i]=titles[i].replace(*transform)pt2=PrettyTable(field_names=['JobTitle','Freq'])pt2.align='c'c=Counter(titles)[pt2.add_row([title,freq])for(title,freq)insorted(c.items(),key=itemgetter(1),reverse=True)iffreq>0]在該實(shí)驗(yàn)中,學(xué)生需用前述的統(tǒng)計分析方法分析LinkedIn聯(lián)系人信息,并在此基礎(chǔ)上,思考如何實(shí)現(xiàn)分析其他社交網(wǎng)絡(luò)(微博)聯(lián)系人信息的方法,記錄Python代碼,并分析實(shí)驗(yàn)結(jié)果。4、實(shí)驗(yàn)步驟1)設(shè)計社交網(wǎng)絡(luò)數(shù)據(jù)清晰的程序分析實(shí)驗(yàn)要求清洗網(wǎng)絡(luò)中的臟數(shù)據(jù)記錄程序代碼2)設(shè)計統(tǒng)計分析社交網(wǎng)絡(luò)聯(lián)系人信息的程序分析實(shí)驗(yàn)要求統(tǒng)計并打印聯(lián)系人列表中的信息數(shù)據(jù)記錄程序代碼記錄并分析實(shí)驗(yàn)結(jié)果實(shí)驗(yàn)項(xiàng)目6使用Python大批量獲取網(wǎng)絡(luò)圖片數(shù)據(jù)1、實(shí)驗(yàn)?zāi)康?)強(qiáng)化Python程序的設(shè)計和編程能力2)了解大批量獲取網(wǎng)絡(luò)圖片的原理3)學(xué)習(xí)使用Python語言批量獲取網(wǎng)絡(luò)圖片2、實(shí)驗(yàn)內(nèi)容1)了解大批量獲取網(wǎng)絡(luò)圖片的原理,并掌握批量獲取網(wǎng)絡(luò)圖片的方法。2)用Python語言中的urllib、urllib2等模塊對圖蟲網(wǎng)站中的圖片進(jìn)行批量下載,并存儲在指定的文件夾中。3、實(shí)驗(yàn)原理1)批量獲取網(wǎng)絡(luò)圖片的方法:批量獲取網(wǎng)絡(luò)圖片的方法是通過解析網(wǎng)頁的HTML文件,利用正則表達(dá)式把源代碼中的圖片地址過濾出來,從而根據(jù)過濾出來的圖片地址下載網(wǎng)絡(luò)圖片。具體來說,批量獲取網(wǎng)絡(luò)圖片的方法分為三種,一是用微軟提供的擴(kuò)展庫win32com來操作IE,二是用selenium的webdriver,三是用python自帶的HTMLParser解析。win32com可以獲得類似js里面的document對象,但文件是只讀的。selenium則提供了對Chrome,IE,F(xiàn)ireFox等瀏覽器的支持,每種瀏覽器都有execute_script和find_element_by_xx方法,可以方便的執(zhí)行js腳本(包括修改元素)和讀取html里面的元素。不足是selenium只提供對python2.6和2.7的支持。HTMLParser則是需要自己寫個類繼承基類,重寫解析元素的方法。2)本實(shí)驗(yàn)中使用的批量獲取網(wǎng)絡(luò)圖片的方法,屬于第三種方法。首先通過urllib2.urlopen(url).read().decode('utf-8')語句解析HTML文件,再使用re.findall將把源代碼中的圖片地址過濾出來,最后使用urllib.urlretrieve(imgurl,target)語句將圖片下載到指定路徑的文件夾中。實(shí)現(xiàn)代碼如下:#獲取二級頁面urldeffindUrl2(html):re1=r'/\d+/\d+/|http://\w+(?<!photos)./\d+/'url2list=re.findall(re1,html)url2lstfltr=list(set(url2list))url2lstfltr.sort(key=url2list.index)#printurl2lstfltrreturnurl2lstfltr#獲取html文本defgetHtml(url):html=urllib2.urlopen(url).read().decode('utf-8')#解碼為utf-8returnhtml#下載圖片到本地defdownload(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)printimglistdownload_img=Noneforimgurlinimglist:picpath='C:\\Users\\peterlindi\\Desktop\\lindi\\%s\\%s'%(foldername,str(pageNo))filename=str(uuid.uuid1())ifnotos.path.exists(picpath):os.makedirs(picpath)target=picpath+"\\%s.jpg"%filenameprint"Thephotoslocationis:"+targetdownload_img=urllib.urlretrieve(imgurl,target)time.sleep(1)print(imgurl)returndownload_img在該實(shí)驗(yàn)中,學(xué)生需用前述的批量網(wǎng)絡(luò)圖片獲取方法實(shí)現(xiàn)對圖蟲網(wǎng)制定頁面圖片進(jìn)行批量下載,并在此基礎(chǔ)上,思考如何實(shí)現(xiàn)批量下載其他圖庫的方法,記錄Python代碼,并分析實(shí)驗(yàn)結(jié)果。4、實(shí)驗(yàn)步驟設(shè)計批量獲取圖片的程序分析實(shí)驗(yàn)要求批量獲取并存儲網(wǎng)絡(luò)圖片記錄程序代碼記錄并分析實(shí)驗(yàn)結(jié)果實(shí)驗(yàn)項(xiàng)目7使用Python處理圖片尺寸和角度1、實(shí)驗(yàn)?zāi)康?)強(qiáng)化Python程序的設(shè)計和編程能力2)學(xué)習(xí)圖片的像素矩陣表示方法3)學(xué)習(xí)使用Python語言調(diào)整圖像尺寸和角度2、實(shí)驗(yàn)內(nèi)容1)學(xué)習(xí)使用像素矩陣表示圖片的方法。2)用Python語言中的Image等模塊對圖片尺寸、角度等進(jìn)行處理的方法。3、實(shí)驗(yàn)原理1)圖片的像素矩陣表示:數(shù)字圖像數(shù)據(jù)可以用矩陣來表示,因此可以采用矩陣?yán)碚摵途仃囁惴▽?shù)字圖像進(jìn)行分析和處理。最典型的例子是灰度圖像?;叶葓D像的像素數(shù)據(jù)就是一個矩陣,矩陣的行對應(yīng)圖像的高(單位為像素),矩陣的列對應(yīng)圖像的寬(單位為像素),矩陣的元素對應(yīng)圖像的像素,矩陣元素的值就是像素的灰度值。在計算機(jī)數(shù)字圖像處理程序中,通常用二維數(shù)組來存放圖像數(shù)據(jù)。二維數(shù)組的行對應(yīng)圖像的高,二維數(shù)組的列對應(yīng)圖像的寬,二維數(shù)組的元素對應(yīng)圖像的像素,二維數(shù)組元素的值就是像素的灰度值。采用二維數(shù)組來存儲數(shù)字圖像,符合二維圖像的行列特性,同時也便于程序的尋址操作,使得計算機(jī)圖像編程十分方便。圖像的位圖數(shù)據(jù)是一個二維數(shù)組(矩陣),矩陣的每一個元素對應(yīng)了圖像的一個像素,當(dāng)保存一幅圖像時,不但要保存圖像的位圖數(shù)據(jù)矩陣,還要將每個像素的顏色保存下來,顏色的記錄是利用顏色表來完成的。顏色表,也叫顏色查找表,是圖像像素數(shù)據(jù)的顏色索引表。以一個4色位圖為例,則其顏色表有4個表項(xiàng),表中每一行記錄一種顏色的R、G、B值,這樣,當(dāng)表示一個像素的顏色時,只需要指出該顏色在第幾行,即該顏色在表中的索引值即可。2)Python語句調(diào)整圖片的尺寸和角度時,首先要調(diào)用Image模塊中的im=Image.open("xxx.jpg")語句打開指定的預(yù)處理圖片,并調(diào)用im.size和im.resize記錄并調(diào)整圖片的尺寸,調(diào)用im.rotate語句調(diào)整圖片的角度,最后調(diào)用im.convert實(shí)現(xiàn)圖片格式的轉(zhuǎn)換。此實(shí)驗(yàn)部分實(shí)現(xiàn)代碼如下importImageim=Image.open("messi.jpg")printim.sizewidth=200ratio=float(width)/im.size[0]height=int(im.size[1]*ratio)nim1=im.resize((width,height),Image.BILINEAR)printnim1.sizenim1.save("resize.jpg")nim2=im.rotate(45,Image.BILINEAR)nim2.save("rotated45.jpg")nim3=im.rotate(90,Image.BILINEAR)nim3.save("rotated90.jpg")gray_img=im.convert("L")gray_img2=gray_img.resize((128,128),Image.BILINEAR)printgray_img2.histogram()在該實(shí)驗(yàn)中,學(xué)生需用前述的圖片處理方法對指定圖片的尺寸和角度進(jìn)行調(diào)整,并在此基礎(chǔ)上,思考如何實(shí)現(xiàn)調(diào)整其他圖片參數(shù)的方法,記錄Python代碼,并分析實(shí)驗(yàn)結(jié)果。4、實(shí)驗(yàn)步驟設(shè)計圖片處理方法的程序分析實(shí)驗(yàn)要求實(shí)現(xiàn)指定圖片的尺寸和角度進(jìn)行調(diào)整記錄程序代碼記錄并分析實(shí)驗(yàn)結(jié)果實(shí)驗(yàn)項(xiàng)目8使用Python處理圖片亮度、對比度和飽和度1、實(shí)驗(yàn)?zāi)康?)強(qiáng)化Python程序的設(shè)計和編程能力2)學(xué)習(xí)圖像的亮度、對比度和飽和度等參數(shù)的表示方法3)學(xué)習(xí)使用Python語言調(diào)整圖像亮度、對比度和飽和度2、實(shí)驗(yàn)內(nèi)容1)學(xué)習(xí)圖像的亮度、對比度和飽和度等參數(shù)的表示方法。2)用Python語言中的Image、ImageDraw、ImageEnhance等模塊對圖片亮度、對比度和飽和度等進(jìn)行處理的方法。3、實(shí)驗(yàn)原理1)圖像的主要指標(biāo)參數(shù):在圖像處理中,圖像的主要指標(biāo)參數(shù)包括亮度、對比度、飽和度等。亮度是指圖片的明亮程度,計算亮度的基準(zhǔn)是灰度測試卡。黑色為0,白色為10,在0—10之間等間隔的排列為9個階段。色彩可以分為有彩色和無彩色,但后者仍然存在著亮度。作為有彩色,每種色各自的亮度在灰度測試卡上都具有相應(yīng)的位置值。彩度高的色對亮度有很大的影響,不太容易辨別。在明亮的地方鑒別色的亮度比較容易的,在暗的地方就難以鑒別。對比度指的是一幅圖像中明暗區(qū)域最亮的白和最暗的黑之間不同亮度層級的測量,即指一幅圖像灰度反差的大小。差異范圍越大代表對比越大,差異范圍越小代表對比越小,好的對比率120:1就可容易地顯示生動、豐富的色彩,當(dāng)對比率高達(dá)300:1時,便可支持各階的顏色。但對比率遭受和亮度相同的困境,現(xiàn)今尚無一套有效又公正的客觀標(biāo)準(zhǔn)來衡量對比率,所以最好的辨識方式還是依靠使用者眼睛。色彩是由于物體上的物理性的光反射到人眼視神經(jīng)上所產(chǎn)生的感覺,顏色的不同是由光的波長的長短差別所決定的。作為色彩度,指的是這些不同波長的色的情況。波長最長的是紅色,最短的是紫色。把紅、黃、綠、藍(lán)、紫和處在它們各自之間的黃紅、黃綠、藍(lán)綠、藍(lán)紫、紅紫這5種中間色——共計10種色作為HYPERLINK"/search?word=%E8%89
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 習(xí)作:身邊那些有特點(diǎn)的人(教學(xué)設(shè)計)2023-2024學(xué)年-部編版語文三年級下冊
- 2024-2025版教材新高中化學(xué)第3章第2節(jié)第1課時自然界中不同價態(tài)的硫元素及其之間的轉(zhuǎn)化練習(xí)含解析魯科版必修第一冊
- 第21課《莊子二則-北冥有魚》教學(xué)設(shè)計 2023-2024學(xué)年統(tǒng)編版語文八年級下冊
- 13畫楊桃(教學(xué)設(shè)計)-2024-2025學(xué)年語文二年級下冊統(tǒng)編版
- 人教版新課標(biāo)《歷史與社會》七年級上冊教學(xué)設(shè)計:第三單元各具特色的區(qū)域生活第5課干旱的寶地
- 反彈高度(教學(xué)設(shè)計)-2024-2025學(xué)年六年級上冊數(shù)學(xué)北師大版
- 第十一單元課題1生活中常見的鹽教學(xué)設(shè)計-2023-2024學(xué)年九年級化學(xué)人教版下冊
- 2025年渦輪螺槳發(fā)動機(jī)項(xiàng)目合作計劃書
- 第三單元微項(xiàng)目1《體驗(yàn)智能生活-人臉識別技術(shù)》教學(xué)設(shè)計-2023--2024學(xué)年泰山版(2018)初中信息技術(shù)第二冊
- 2025年中國網(wǎng)絡(luò)團(tuán)購市場評估分析及投資發(fā)展盈利預(yù)測報告
- 可愛的四川精編版課件
- 蘇教版二年級數(shù)學(xué)下冊第一單元第一課時
- 磁致伸縮液位計使用說明書
- 臨床放射檢查資料互認(rèn)項(xiàng)目清單
- 新部編版四年級下冊道德與法治全冊優(yōu)秀教學(xué)課件(1-12課)
- 侵權(quán)責(zé)任法(第五版)完整版課件
- 門診醫(yī)師出診申請表(2022版)
- 蘇教版小學(xué)六年級數(shù)學(xué)下冊 《解決問題的策略(第2課時)》教學(xué)設(shè)計
- 開學(xué)第一課學(xué)生心理調(diào)適家長會PPT
- 《管理系統(tǒng)中計算機(jī)應(yīng)用》實(shí)踐報告88301
- 口腔科四手操作[]通用課件
評論
0/150
提交評論