版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、基于 python 語言的網(wǎng)絡(luò)數(shù)據(jù)挖掘?qū)嶒?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è)計(jì)、實(shí)現(xiàn)基于 python 語言的網(wǎng)絡(luò)數(shù)據(jù)挖掘算法,掌握科學(xué)的實(shí)驗(yàn)方法,為以后其他專業(yè)課的學(xué)習(xí)打下堅(jiān)實(shí)的基礎(chǔ)。該實(shí)驗(yàn)內(nèi)容采用循序漸進(jìn)的方式,從python 語言的基本語法入手,在加深學(xué)生對于python 語言熟悉的基礎(chǔ)上突出數(shù)據(jù)挖掘應(yīng)用。實(shí)驗(yàn)提供功能要求, 學(xué)生自己確定設(shè)計(jì)方案和需要思考如何設(shè)計(jì)最優(yōu)化的算法,并完成結(jié)果記錄和分析,充分發(fā)揮學(xué)生的創(chuàng)造性和主動(dòng)性。實(shí)驗(yàn)要求:了解并掌握 python語言的基本
2、語法、能夠使用python讀取或?qū)懭霐?shù)據(jù)表、獲取并分析網(wǎng)絡(luò)文本數(shù)據(jù)、獲取并處理圖像數(shù)據(jù)等。二、 python 開發(fā)環(huán)境簡介:本課程實(shí)驗(yàn)使用的python 開發(fā)環(huán)境為 python idle, 其用戶界面圖見圖1 所示。idle 是開發(fā) python 程序的基本集成開發(fā)環(huán)境,具備基本的ide 的功能,是python教學(xué)的不錯(cuò)的選擇。當(dāng)安裝好python 以后,idle 就自動(dòng)安裝好了,不需要另外去找。同時(shí),使用eclipse 這個(gè)強(qiáng)大的框架時(shí)idle 也可以非常方便的調(diào)試 python程序。其基本功能包括語法加亮、段落縮進(jìn)、基本文本編輯、table鍵控制、調(diào)試程序。打開 idle 后出現(xiàn)一個(gè)增強(qiáng)
3、的交互命令行解釋器窗口(具有比基本的交互命令提示符更好的剪切、 粘貼、回行等功能)。除此之外,還有一個(gè)針對python 的編輯器(無代碼合并,但有語法標(biāo)簽高亮和代碼自動(dòng)完成功能)、類瀏覽器和調(diào)試器。菜單為tk “剝離”式,也就是點(diǎn)擊頂部任意下拉菜單的虛線將會(huì)將該菜單提升到它自己的永久窗口中去。特別是edit 菜單,將其“靠”在桌面一角非常實(shí)用。 idle 的調(diào)試器提供斷點(diǎn)、步進(jìn)和變量監(jiān)視功能。圖 1 python idle 界面圖三、 實(shí)驗(yàn)項(xiàng)目名稱及目的要求:實(shí)驗(yàn)項(xiàng)目 1 python語言的基本語法及簡單應(yīng)用1、實(shí)驗(yàn)?zāi)康?)掌握 python語言的基本語法2)掌握 python語言中創(chuàng)建模塊的
4、方法3)了解 python語言中定義類及其使用方法4)學(xué)習(xí)使用 python語言輸出斐波那契數(shù)列的方法5)學(xué)習(xí)使用 python語言實(shí)現(xiàn)刪除一個(gè)list 里面的重復(fù)元素的方法2、實(shí)驗(yàn)內(nèi)容1)根據(jù) python基本語法功能設(shè)計(jì)出實(shí)現(xiàn)輸出斐波那契數(shù)列的方法,并比較不同實(shí)現(xiàn)方法的性能。2)根據(jù) python語言中的排序和循環(huán)功能,實(shí)現(xiàn)刪除一個(gè)list 里面的重復(fù)元素3、實(shí)驗(yàn)原理1)設(shè)計(jì)輸出斐波那契數(shù)列的python程序:首先調(diào)用raw_input 輸入要打印的斐波那契數(shù)列的長度, 然后把斐波那契數(shù)列存儲(chǔ)于一個(gè)序列當(dāng)中,并逐個(gè)打印序列的元素。此實(shí)驗(yàn)部分實(shí)現(xiàn)代碼如下#通過輸入斐波那契數(shù)列的長度打印斐波那
5、契數(shù)列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)設(shè)計(jì)刪除一個(gè) list 里面的重復(fù)元素程序: 首先調(diào)用 list.sort()對序列進(jìn)行排序,然后調(diào)用last = list-1 語句從后向前找出重復(fù)的元素,并逐個(gè)打印非重復(fù)的元素。此實(shí)驗(yàn)部分實(shí)現(xiàn)代碼如下if list: list.sort()
6、last = list-1 for i in range(len(list)-2, -1, -1): if last=listi: del listi else: last=listi print list 4、實(shí)驗(yàn)步驟1)設(shè)計(jì)輸出斐波那契數(shù)列的python程序分析實(shí)驗(yàn)要求逐個(gè)打印輸出斐波那契數(shù)列的元素記錄程序代碼記錄并分析實(shí)驗(yàn)結(jié)果2)設(shè)計(jì)程序刪除一個(gè)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è)計(jì)和編程能力2)學(xué)習(xí)
7、兩種讀取的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è)計(jì)使用索引和名稱兩種方法讀取excel 數(shù)據(jù),最終寫入 csv 文件中。2) 用 datetime模塊中的 datetime.now來計(jì)算兩種不同的讀取方法所用cpu時(shí)間,從而比較并分析不同算法的性能。3、實(shí)驗(yàn)原理1)python語句讀取 excel 表數(shù)據(jù)時(shí),首先要調(diào)用 xlrd 模塊,然后使用語句 data = xlrd.open_workbook(e
8、xcelfile.xls)打開 excel 表格。當(dāng)一個(gè) excel 表格中包含多個(gè) sheet時(shí),可以通過索引或者名稱順序獲取某一個(gè) sheet中的數(shù)據(jù)。使用的語句分別為table = data.sheet_by_index(0) 和 table = data.sheet_by_name(usheet1)。當(dāng)獲取某個(gè) sheet的數(shù)據(jù)并存儲(chǔ)在工作表table 后,獲取獲取整行和整列的值(數(shù)組)的語句為table.row_values(i)和 table.col_values(i),獲取行數(shù)和列數(shù)的語句為 nrows = table.nrows和 ncols = table.ncols , 循
9、環(huán)獲取行數(shù)據(jù)的語句為for i in range(nrows): print table.row_values(i)。此實(shí)驗(yàn)部分實(shí)現(xiàn)代碼如下#根據(jù)索引獲取 excel 表格中的數(shù)據(jù)def excel_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 = for rownum
10、 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 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 # 行數(shù)colnam
11、es = table.row_values(colnameindex) # 某一行數(shù)據(jù)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 在該實(shí)驗(yàn)中,學(xué)生需用前述的excel 數(shù)據(jù)操作語句實(shí)現(xiàn)讀取某一個(gè)sheet數(shù)據(jù)的功能,并在此基礎(chǔ)上,思考如何讀取其他格式的數(shù)據(jù),記錄python 代碼,并分析實(shí)驗(yàn)結(jié)果。2)python語句寫入
12、 excel 表數(shù)據(jù)時(shí),首先要調(diào)用pyexcelerator模塊,然后使用語句 w = workbook() 和 ws = w.add_sheet(excelfile.xls) 創(chuàng)建一個(gè)空白的工作表。在某一個(gè) cell 寫入數(shù)據(jù)的語句為ws.write (i, j, string), 而 w.save(mini.xls)實(shí)現(xiàn)了存儲(chǔ)寫入后的 excel 文件。此實(shí)驗(yàn)部分實(shí)現(xiàn)代碼如下from pyexcelerator import * w = workbook() #創(chuàng)建一個(gè)工作簿ws = w.add_sheet(test) #創(chuàng)建一個(gè)工作表ws.write(0,0,uestc) #在 1 行
13、1 列寫入 uestc ws.write(0,1,sofrware) #在 1 行 2 列寫入 software ws.write(1,0,cs) #在 2 行 1 列寫入 cs w.save(mini.xls) #保存至 mini.xls 文件中在該實(shí)驗(yàn)中,學(xué)生需用前述的excel 數(shù)據(jù)操作語句實(shí)現(xiàn)寫入某一個(gè)sheet數(shù)據(jù)的功能,并在此基礎(chǔ)上,思考如何寫入其他格式的數(shù)據(jù)(如csv 格式) ,記錄python代碼,并分析實(shí)驗(yàn)結(jié)果。3)比較兩種不同的讀取excel 數(shù)據(jù)的方法時(shí),需要計(jì)算每種方法的運(yùn)行時(shí)間。首先導(dǎo)入 datetime 模塊,并調(diào)用datetime.now()函數(shù),記錄某一段代碼運(yùn)
14、行前后的時(shí)間點(diǎn),通過開始和結(jié)束的時(shí)間點(diǎn)的差值計(jì)算出程序運(yùn)行的時(shí)間。此實(shí)驗(yàn)部分實(shí)現(xiàn)代碼如下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 endti
15、me = datetime.datetime.now() print endtime - starttime 在該實(shí)驗(yàn)中,學(xué)生需用前述的cpu 時(shí)間控制語句實(shí)現(xiàn)計(jì)算某一段代碼的運(yùn)算時(shí)間,并在此基礎(chǔ)上,比較并分析兩種 excel 數(shù)據(jù)讀取方法的性能。 記錄 python代碼,并分析實(shí)驗(yàn)結(jié)果。4、實(shí)驗(yàn)步驟1)設(shè)計(jì)按名稱和按索引讀取excel 數(shù)據(jù)的程序分析實(shí)驗(yàn)要求按行打印 excel 表中的數(shù)據(jù)記錄程序代碼記錄并分析實(shí)驗(yàn)結(jié)果2)設(shè)計(jì)寫入 excel 數(shù)據(jù)的程序分析實(shí)驗(yàn)要求按行將數(shù)據(jù)寫入 excel 表中記錄程序代碼記錄并分析實(shí)驗(yàn)結(jié)果3)設(shè)計(jì)計(jì)算程序運(yùn)行時(shí)間的程序分析實(shí)驗(yàn)要求記錄程序代碼比較并分析實(shí)
16、驗(yàn)結(jié)果總結(jié),撰寫實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)項(xiàng)目 3 使用 python 實(shí)現(xiàn)網(wǎng)絡(luò)爬蟲算法1、實(shí)驗(yàn)?zāi)康?)強(qiáng)化 python程序的設(shè)計(jì)和編程能力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è)計(jì)使用python 語言獲取網(wǎng)頁數(shù)據(jù)的程序。2)用 python語言中的 threading和 geturl 模塊對網(wǎng)站中 url 進(jìn)行搜集。3、實(shí)驗(yàn)原理1)爬蟲算法原理:網(wǎng)絡(luò)爬蟲(又被稱為網(wǎng)頁蜘蛛,網(wǎng)絡(luò)機(jī)器人,網(wǎng)頁追逐者),是一種按照一定的規(guī)則,自動(dòng)的抓取萬維網(wǎng)信息的程序或者腳本。很多搜索引擎都使用爬蟲提供最新的數(shù)據(jù), 搜索引擎利用用戶訪問過頁面的一個(gè)
17、副本進(jìn)行索引,以提供快速的訪問。網(wǎng)絡(luò)爬蟲也可以在web 上用來自動(dòng)執(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)
18、網(wǎng)頁將被下載并過濾,算法的效率將變低。2)python語句在某一個(gè)網(wǎng)頁上獲取數(shù)據(jù)時(shí),首先要分析網(wǎng)頁的html 源代碼,我們以淘寶網(wǎng)頁中的商品分類(http:/ 為例,獲取所有一級(jí)類別和二級(jí)類別的標(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)代碼如下class listname1(sgmlparser): def _init_(self): sgmlpars
19、er._init_(self) self.is_h4 = = 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: .append(text) class listname2(sgmlparser): def _init_(self): sgmlparser._init_(self) self.is_h5 = = def start_h5(self,
20、attrs): self.is_h5 = 1 def end_h5(self): self.is_h5 = def handle_data(self, text): if self.is_h5 = 1: .append(text) content = urllib2.urlopen(http:/ listname1 = listname1() listname2 = listname2() listname1.feed(content) listname2.feed(content) 在該實(shí)驗(yàn)中,學(xué)生需用前述的爬蟲算法實(shí)現(xiàn)語句實(shí)現(xiàn)寫入讀取淘寶網(wǎng)頁商品分類標(biāo)題的功能, 并在此基
21、礎(chǔ)上, 思考如何實(shí)現(xiàn)讀取其他網(wǎng)頁數(shù)據(jù)的方法,記錄python代碼,并分析實(shí)驗(yàn)結(jié)果。3) 在獲取網(wǎng)站上的 url 時(shí),需要調(diào)用 geturl 模塊。本實(shí)驗(yàn)中通過調(diào)用threading 模塊采用多線程算法實(shí)現(xiàn)網(wǎng)站url 的獲取。此實(shí)驗(yàn)部分實(shí)現(xiàn)代碼如下def craw(self,entryurl): #這是一個(gè)深度搜索,到g_todlurl 為空時(shí)結(jié)束g_todlurl.append(entryurl) self.logfile.write(entry:n) self.logfile.write(entryurl) depth = 0 while len(g_todlurl) != 0 and de
22、pth 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): #線程工作 -下載 h
23、tml 頁面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 downloadin
24、g and saving,self.url return none #記著返回 ! 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ù)時(shí)算法的性能。記錄 python代碼,并分析實(shí)驗(yàn)結(jié)果。4、實(shí)驗(yàn)步驟1)設(shè)計(jì)某一個(gè)網(wǎng)頁上獲取數(shù)據(jù)的程序分析實(shí)驗(yàn)要求打印網(wǎng)頁上獲取的數(shù)據(jù)記錄程序代碼記錄并分析實(shí)驗(yàn)結(jié)果2)設(shè)計(jì)多線程的獲取網(wǎng)站url
25、 的程序分析實(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è)計(jì)和編程能力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)社交
26、網(wǎng)絡(luò) oauth 協(xié)議原理:oauth 協(xié)議為用戶資源的授權(quán)提供了一個(gè)安全的、開放而又簡易的標(biāo)準(zhǔn)。與以往的授權(quán)方式不同之處是oauth的授權(quán)不會(huì)使第三方觸及到用戶的帳號(hào)信息(如用戶名與密碼) ,即第三方無需使用用戶的用戶名與密碼就可以申請獲得該用戶資源的授權(quán),因此oauth 是安全的。本實(shí)驗(yàn)中 linkedin 網(wǎng)站的 oauth 協(xié)議是采用 hmac-sha1 加密的。開發(fā)者 需 要 注 冊linkedin賬 戶 , 獲 得consumer_key( 即api key) 和consumer_secret。key 跟 secret 的使用方式跟其他一些協(xié)議中的公鑰私鑰的方案相類似,你可以使用你
27、所熟悉的編程語言將key 和 secret 結(jié)合,為你發(fā)出的每個(gè)請求添加簽名,以此來向linkedin 開放平臺(tái)表明自己身份的合法性。 然后根據(jù) consumer_key 和 consumer_secret 獲取 user_token和 user_secret。這個(gè)步驟主要有兩個(gè)目的:第一,告訴linkedin 將要做什么;第二,告訴linkedin 在 callback 里要做什么。此外,user_token 和user_secret可以幫助提供 access token。實(shí)現(xiàn)代碼如下:access_token_url = https:/ token=oauth.token(request_
28、tokenoauth_token, 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_token p
29、rint - oauth_token_secret = %s % access_tokenoauth_token_secret print print you may now access protected resources using the access tokens above. print 在該實(shí)驗(yàn)中,學(xué)生需用前述的oauth 協(xié)議原理實(shí)現(xiàn)獲取linkedin 社交網(wǎng)絡(luò)的 access token,并在此基礎(chǔ)上, 思考如何實(shí)現(xiàn)讀取其他社交網(wǎng)絡(luò)(如新浪微博)access token 的方法,記錄 python代碼,并分析實(shí)驗(yàn)結(jié)果。2)python 語句獲取社交網(wǎng)站用戶信息時(shí),首先要獲
30、得access token ,然后調(diào)用 os.path.join 語句將用戶相關(guān)信息存儲(chǔ)到csv 或者 xls 文件中,最后調(diào)用prettytable模塊打印用戶信息表。此實(shí)驗(yàn)部分實(shí)現(xiàn)代碼如下# instantiate the developer authentication class auth=linkedin.linkedindeveloperauthentication(consumer_key , consumer_secret, user_token, user_secret, return_url, permissions=linkedin.permissions.enums.v
31、alues() # 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, in
32、dent=1) f.close() from prettytable import prettytable # pip install prettytable pt = prettytable(field_names=name, location) pt.align = l pt.add_row(cfirstname + + clastname, clocationname) for c in connectionsvalues if c.has_key(location) 在該實(shí)驗(yàn)中,學(xué)生需用前述的社交網(wǎng)絡(luò)信息獲取語句實(shí)現(xiàn)授權(quán)用戶的linkedin 聯(lián)系人信息,并在此基礎(chǔ)上,思考如何實(shí)現(xiàn)獲取
33、其他社交網(wǎng)絡(luò)(微博)用戶信息的方法,記錄python 代碼,并分析實(shí)驗(yàn)結(jié)果。4、實(shí)驗(yàn)步驟1)設(shè)計(jì)社交網(wǎng)絡(luò)授權(quán)用戶access token 的程序分析實(shí)驗(yàn)要求記錄程序代碼2)設(shè)計(jì)社交網(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)計(jì)分析社交網(wǎng)絡(luò)數(shù)據(jù)1、實(shí)驗(yàn)?zāi)康?)強(qiáng)化 python程序的設(shè)計(jì)和編程能力2)學(xué)習(xí)社交網(wǎng)絡(luò)數(shù)據(jù)清洗和數(shù)據(jù)統(tǒng)計(jì)分析的方法3)學(xué)習(xí)使用 python語言統(tǒng)計(jì)分析社交網(wǎng)絡(luò)數(shù)據(jù)2、實(shí)驗(yàn)內(nèi)容1)學(xué)習(xí)社交網(wǎng)絡(luò)中聯(lián)系人職位、公司、年齡等信息的數(shù)據(jù)清洗和統(tǒng)計(jì)分析方法。2)用 pytho
34、n語言中的 counter、itemgetter等模塊對 linkedin 網(wǎng)站中聯(lián)系人名單信息進(jìn)行初步的統(tǒng)計(jì)分析。3、實(shí)驗(yàn)原理1)數(shù)據(jù)清洗:數(shù)據(jù)清洗是指發(fā)現(xiàn)并糾正數(shù)據(jù)文件中可識(shí)別的錯(cuò)誤,包括檢查數(shù)據(jù)一致性,處理無效值和缺失值等。由于數(shù)據(jù)倉庫中的數(shù)據(jù)是面向某一主題的數(shù)據(jù)的集合,這些數(shù)據(jù)從多個(gè)業(yè)務(wù)系統(tǒng)中抽取而來而且包含歷史數(shù)據(jù),這樣就避免不了有的數(shù)據(jù)是錯(cuò)誤數(shù)據(jù)、 有的數(shù)據(jù)相互之間有沖突, 這些錯(cuò)誤的或有沖突的數(shù)據(jù)顯然是我們不想要的,稱為 “ 臟數(shù)據(jù) ” 。我們要按照一定的規(guī)則把臟數(shù)據(jù)清除,這就是數(shù)據(jù)清洗。而數(shù)據(jù)清洗的任務(wù)是過濾那些不符合要求的數(shù)據(jù),將過濾的結(jié)果交給業(yè)務(wù)主管部門,確認(rèn)是否過濾掉還是
35、由業(yè)務(wù)單位修正之后再進(jìn)行抽取。不符合要求的數(shù)據(jù)主要是有不完整的數(shù)據(jù)、錯(cuò)誤的數(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)計(jì)時(shí)會(huì)有干擾作用。例如 ibm inc. 和 ibm 代表的都是 ibm 公司,但程序在進(jìn)行統(tǒng)計(jì)分析時(shí)會(huì)誤認(rèn)為是兩個(gè)不同的公司。實(shí)現(xiàn)代碼如下:transforms = (, inc., ), (, inc, ), (, llc, ), (, llp, ), ( llc, ), ( inc
36、., ), ( inc, ) csvreader = csv.dictreader(open(csv_file), delimiter=, quotechar=) contacts = row for row in csvreader companies = ccompany.strip() for c in contacts if ccompany.strip() != for i, _ in enumerate(companies): for transform in transforms: companiesi = companiesi.replace(*transform) 在該實(shí)驗(yàn)中
37、,學(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)系人信息時(shí),首先要調(diào)用counter 模塊語句將聯(lián)系人相關(guān)信息進(jìn)行統(tǒng)計(jì), 并調(diào)用 prettytable模塊將聯(lián)系人信息存儲(chǔ)在表中,最后調(diào)用 print 語句按照降序打印用戶信息表。此實(shí)驗(yàn)部分實(shí)現(xiàn)代碼如下pt = prettytable(field_names=company, freq) pt.align = c c = counter(companies
38、) pt.add_row(company, freq) for (company, freq) in sorted(c.items(), key=itemgetter(1), reverse=true) if freq 0 print pt titles = 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 = pret
39、tytable(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 在該實(shí)驗(yàn)中,學(xué)生需用前述的統(tǒng)計(jì)分析方法分析linkedin 聯(lián)系人信息,并在此基礎(chǔ)上,思考如何實(shí)現(xiàn)分析其他社交網(wǎng)絡(luò)(微博)聯(lián)系人信息的方法,記錄python代碼,并分析實(shí)驗(yàn)結(jié)果。4、實(shí)驗(yàn)步驟1)設(shè)計(jì)社交網(wǎng)絡(luò)數(shù)據(jù)清晰的程序分析實(shí)驗(yàn)要求清洗網(wǎng)絡(luò)中的
40、臟數(shù)據(jù)記錄程序代碼2)設(shè)計(jì)統(tǒng)計(jì)分析社交網(wǎng)絡(luò)聯(lián)系人信息的程序分析實(shí)驗(yàn)要求統(tǒng)計(jì)并打印聯(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è)計(jì)和編程能力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)行批量下載,并存儲(chǔ)在指定的文件夾中。3、實(shí)驗(yàn)原理1)批量獲取網(wǎng)絡(luò)圖片的方法:批量獲取網(wǎng)絡(luò)圖片的方法是通過解析網(wǎng)頁的h
41、tml 文件,利用正則表達(dá)式把源代碼中的圖片地址過濾出來,從而根據(jù)過濾出來的圖片地址下載網(wǎng)絡(luò)圖片。具體來說,批量獲取網(wǎng)絡(luò)圖片的方法分為三種,一是用微軟提供的擴(kuò)展庫win32com 來操作ie,二是用selenium 的 webdriver,三是用python 自帶的htmlparser 解析。win32com 可以獲得類似 js 里面的 document對象,但文件是只讀的。 selenium 則提供了對 chrome,ie,firefox 等瀏覽器的支持,每種瀏覽器都有 execute_script和 find_element_by_xx 方法,可以方便的執(zhí)行js 腳本(包括修改元素)和讀取
42、html 里面的元素。不足是selenium 只提供對 python2.6 和2.7 的支持。 htmlparser 則是需要自己寫個(gè)類繼承基類,重寫解析元素的方法。2)本實(shí)驗(yàn)中使用的批量獲取網(wǎng)絡(luò)圖片的方法,屬于第三種方法。首先通過urllib2.urlopen(url).read().decode(utf-8)語句解析html文件,再使用re.findall將把源代碼中的圖片地址過濾出來,最后使用 urllib.urlretrieve(imgurl, target) 語句將圖片下載到指定路徑的文件夾中。實(shí)現(xiàn)代碼如下:#獲取二級(jí)頁面 url def findurl2(html): re1 =
43、rhttp:/ 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
44、 = time.localtime(time.time() foldername=str(x._getattribute_(tm_year)+-+str(x._getattribute_(tm_mon)+-+str(x._getattribute_(tm_mday) re2=rhttp:/ imglist=re.findall(re2,html_page) print imglist download_img=none for imgurl in imglist: picpath=c:userspeterlindidesktoplindi%s%s%(foldername,str(pageno)
45、 filename = str(uuid.uuid1() if not os.path.exists(picpath): os.makedirs(picpath) target = picpath+%s.jpg % filename print the photos location is:+target download_img = urllib.urlretrieve(imgurl, target) time.sleep(1) print(imgurl) return download_img 在該實(shí)驗(yàn)中,學(xué)生需用前述的批量網(wǎng)絡(luò)圖片獲取方法實(shí)現(xiàn)對圖蟲網(wǎng)制定頁面圖片進(jìn)行批量下載, 并在此基礎(chǔ)
46、上, 思考如何實(shí)現(xiàn)批量下載其他圖庫的方法,記錄 python代碼,并分析實(shí)驗(yàn)結(jié)果。4、實(shí)驗(yàn)步驟設(shè)計(jì)批量獲取圖片的程序分析實(shí)驗(yàn)要求批量獲取并存儲(chǔ)網(wǎng)絡(luò)圖片記錄程序代碼記錄并分析實(shí)驗(yàn)結(jié)果實(shí)驗(yàn)項(xiàng)目 7 使用 python 處理圖片尺寸和角度1、實(shí)驗(yàn)?zāi)康?)強(qiáng)化 python程序的設(shè)計(jì)和編程能力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ù)字圖像
47、進(jìn)行分析和處理。 最典型的例子是灰度圖像。 灰度圖像的像素?cái)?shù)據(jù)就是一個(gè)矩陣,矩陣的行對應(yīng)圖像的高(單位為像素),矩陣的列對應(yīng)圖像的寬(單位為像素) ,矩陣的元素對應(yīng)圖像的像素,矩陣元素的值就是像素的灰度值。在計(jì)算機(jī)數(shù)字圖像處理程序中, 通常用二維數(shù)組來存放圖像數(shù)據(jù)。二維數(shù)組的行對應(yīng)圖像的高, 二維數(shù)組的列對應(yīng)圖像的寬, 二維數(shù)組的元素對應(yīng)圖像的像素,二維數(shù)組元素的值就是像素的灰度值。采用二維數(shù)組來存儲(chǔ)數(shù)字圖像,符合二維圖像的行列特性, 同時(shí)也便于程序的尋址操作, 使得計(jì)算機(jī)圖像編程十分方便。圖像的位圖數(shù)據(jù)是一個(gè)二維數(shù)組(矩陣) ,矩陣的每一個(gè)元素對應(yīng)了圖像的一個(gè)像素, 當(dāng)保存一幅圖像時(shí), 不但
48、要保存圖像的位圖數(shù)據(jù)矩陣,還要將每個(gè)像素的顏色保存下來, 顏色的記錄是利用顏色表來完成的。顏色表,也叫顏色查找表,是圖像像素?cái)?shù)據(jù)的顏色索引表。以一個(gè) 4 色位圖為例, 則其顏色表有 4 個(gè)表項(xiàng),表中每一行記錄一種顏色的r、g、b 值,這樣,當(dāng)表示一個(gè)像素的顏色時(shí),只需要指出該顏色在第幾行,即該顏色在表中的索引值即可。2) python 語 句調(diào) 整圖 片的尺 寸和角 度時(shí), 首先要 調(diào) 用 image 模塊 中 的im=image.open( xxx.jpg )語句打開指定的預(yù)處理圖片,并調(diào)用im.size 和im.resize記錄并調(diào)整圖片的尺寸, 調(diào)用 im.rotate 語句調(diào)整圖片的角
49、度, 最后調(diào)用im.convert 實(shí)現(xiàn)圖片格式的轉(zhuǎn)換。此實(shí)驗(yàn)部分實(shí)現(xiàn)代碼如下import image im = image.open( messi.jpg ) print im.size width = 200 ratio = float(width)/im.size0 height = int(im.size1*ratio) nim1 = im.resize( (width, height), image.bilinear ) print nim1.size nim1.save( resize.jpg ) nim2 = im.rotate( 45, image.bilinear ) nim
50、2.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) print gray_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è)計(jì)圖片處理方法的程序分析實(shí)驗(yàn)要求實(shí)現(xiàn)
51、指定圖片的尺寸和角度進(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è)計(jì)和編程能力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ù)包括亮度、對比度、飽和度等。亮度是指圖片的明亮程度,計(jì)算亮度的基準(zhǔn)是灰度測試卡。黑色為0,白色為 10,在 010 之間等間隔的排列為9 個(gè)階段。色彩可以分為有彩色和無彩色,但后者仍然存在著亮度。 作為有彩色, 每種色各自的亮度在灰度測試卡上都具有相應(yīng)的位置值。 彩度高的色對亮度有很大的影響,不太容易辨別。 在明亮的地方鑒別色的亮度比較容易的,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年金融租賃產(chǎn)品委托借貸居間合同范本3篇
- 2025年新型建筑外架施工勞務(wù)分包合同模板9篇
- 2025年水產(chǎn)養(yǎng)殖場養(yǎng)殖廢棄物處理與環(huán)保技術(shù)引進(jìn)合同3篇
- 2025年陶瓷水杯采購與市場渠道建設(shè)合同3篇
- 二零二五年度美發(fā)店美容美發(fā)行業(yè)投資咨詢與評(píng)估合同4篇
- 二零二五年度民政局官方版自愿離婚協(xié)議書及子女撫養(yǎng)協(xié)議4篇
- 二零二五版文化旅游用地租賃及項(xiàng)目合作協(xié)議3篇
- 保險(xiǎn)賠償流程解析模板
- 鋼梯制作安裝施工方案
- 2025年度個(gè)人旅游貸款合同樣本11篇
- 油氣行業(yè)人才需求預(yù)測-洞察分析
- DB34∕T 4010-2021 水利工程外觀質(zhì)量評(píng)定規(guī)程
- 2024年內(nèi)蒙古中考英語試卷五套合卷附答案
- 2024年電工(高級(jí))證考試題庫及答案
- 華為集團(tuán)干部管理
- 圖書館前臺(tái)接待工作總結(jié)
- 衛(wèi)生院藥品管理制度
- 理論力學(xué)智慧樹知到期末考試答案章節(jié)答案2024年中國石油大學(xué)(華東)
- 2024老年人靜脈血栓栓塞癥防治中國專家共識(shí)(完整版)
- 四年級(jí)上冊脫式計(jì)算100題及答案
- 上海市12校2023-2024學(xué)年高考生物一模試卷含解析
評(píng)論
0/150
提交評(píng)論