文章目錄
前言
大數據技術成為前沿專業 也是現在甚至未來的朝陽產業,大數據有分別是 數據預處理 數據存儲 大數據處理和分析 數據可視化 部分組成 ,大數據行業有數據則稱王,大數據的核心是數據本身 怎么獲取有價值的數據呢?本章講具體講解大數據預處理技術和獲取手段和平臺。
一、公開數據庫
1.常見數據公開網站
UCI:經典的機器學習,數據挖掘,UCI數據集是一個常用的機器學習標準測試數據集,是加州大學歐文分校(University of CaliforniaIrvine)提出的用于機器學習的數據庫。機器學習算法的測試大多采用的便是UCI數據集了,其重要之處在于“標準”二字,新編的機器學習程序可以采用UCI數據集進行測試。???UCI Machine Learning Repository? 相關實驗案例參考文章。
http://t.csdnimg.cn/CVFIs
國家數據:數據來源于國家統計局,包含我國經濟民生等多個方面的數據,并且在月度季度年度都有覆蓋,全面又權威。http://t.csdnimg.cn/wc7bC
CEIC:最完整的一套超過128個國家的經濟數據,能夠精準查找GDP,CPI,進口,出口,進口,外資直接投資,零售,銷售等深度數據。
萬得:金融業有著全面的數據覆蓋,金融數據的類目更新非常快,商業分析者和投資者的青睞。
搜數網:匯集中國資訊行業收集的所有統計和調查數據,并提供多樣化的搜索功能。
中國統計信息網:國家統計局的官方網站,匯集了海量的全國各級政府各年度的國民經濟和社會發展統計信息。
亞馬遜:跨科學云數據平臺,多個領域的數據集。
figshare:研究成果共享平臺,在這里可以找到來自世界得大牛們研究成果分享,獲取其中的研究數據。
github: 一個全面得數據獲取渠道,包含各個細分領域得數據庫資源,自然科學和社會科學得覆蓋都很全面,適合做研究和數據分析的人員。
2.政府開放數據
北京市政務數據資源網:包含競技,交通,醫療,天氣等數據。
深圳市政府數據開放平臺:交通,文娛,就業,基礎設施等數據。
上海市政務數據服務網:覆蓋經濟建設,文化科技,信用服務,交通出行等12個領域數據。
貴州省政府數據開放平臺:包含了政府及國有企業數據。
Data.gov:美國政府開放數據,包含氣候,教育,能源金融等各領域數據。
3.數據競賽網站
競賽的數據集通常干凈且可研究性非常高。
DataCastle:專業的數據科學競賽平臺。
Kaggle:全球最大的數據競賽平臺。
天池:阿里旗下數據科學競賽平臺。
Datafountain:CCF指定的大數據競賽平臺。
二、網絡爬蟲
1.網絡爬蟲原理
網絡爬蟲的價值其實就是數據的價值,在互聯網社會中,數據是無價之寶,一切皆為數據,誰擁有了大量有用的數據,誰就擁有了決策的主動權
認識爬蟲
我們所熟悉的一系列搜索引擎都是大型的網絡爬蟲,比如百度、搜狗、360瀏覽器、谷歌搜索等等。每個搜索引擎都擁有自己的爬蟲程序,比如 360 瀏覽器的爬蟲稱作 360Spider,搜狗的爬蟲叫做 Sogouspider。
百度搜索引擎,其實可以更形象地稱之為百度蜘蛛(Baiduspider),它每天會在海量的互聯網信息中爬取優質的信息,并進行收錄。當用戶通過百度檢索關鍵詞時,百度首先會對用戶輸入的關鍵詞進行分析,然后從收錄的網頁中找出相關的網頁,并按照排名規則對網頁進行排序,最后將排序后的結果呈現給用戶。在這個過程中百度蜘蛛起到了非常想關鍵的作用。
百度的工程師們為“百度蜘蛛”編寫了相應的爬蟲算法,通過應用這些算法使得“百度蜘蛛”可以實現相應搜索策略,比如篩除重復網頁、篩選優質網頁等等。應用不同的算法,爬蟲的運行效率,以及爬取結果都會有所差異。
1.0 爬蟲定義
簡單來講,爬蟲就是一個探測機器,它的基本操作就是模擬人的行為去各個網站溜達,點點按鈕,查查數據,或者把看到的信息背回來。就像一只蟲子在一幢樓里不知疲倦地爬來爬去。
1.1 爬蟲薪資
1.2 爬蟲前景
每個職業都是有一個橫向和縱向的發展,也就是所謂的廣度和深度的意思。第一、如果專研得夠深,你的爬蟲功能很強大,性能很高,擴展性很好等等,那么還是很有前途的。第二、爬蟲作為數據的來源,后面還有很多方向可以發展,比如可以往大數據分析、數據展示、機器學習等方面發展,前途不可限量,現在作為大數據時代,你占據在數據的的入口,還怕找不到發展方向嗎?
1.3 爬蟲創業
1.1.1 獲取網頁
爬蟲首先要做的工作就是獲取網頁,這里就是獲取網頁的源代碼。源代碼里包含了網頁的部分有用信息,所以只要把源代碼獲取下來,就可以從中提取想要的信息了。
- 使用socket下載一個頁面
#!/usr/bin/python
# -*- coding: UTF-8 -*-
"""
@author:chenshifeng
@file:00.py
@time:2022/10/14
"""import socket# 不需要安裝# 訪問網站
url = 'www.baidu.com'
# 端口
port = 80def blocking():sock = socket.socket() # 建立對象sock.connect((url, port)) # 連接網站 ,發出一個HTTP請求request_url = 'GET / HTTP/1.0\r\nHost: www.baidu.com\r\n\r\n'sock.send(request_url.encode()) # 根據請求頭來發送請求信息response = b'' # 建立一個二進制對象用來存儲我們得到的數據chunk = sock.recv(1024) # 每次獲得的數據不超過1024字節while chunk: # 循環接收數據,因為一次接收不完整response += chunkchunk = sock.recv(1024)header, html = response.split(b'\r\n\r\n', 1)f = open('index.html', 'wb')f.write(html)f.close()if __name__ == '__main__':blocking()
1.1.2 提取信息
獲取網頁源代碼后,接下來就是分析網頁源代碼,從中提取我們想要的數據。首先,最通用的方法便是采用正則表達式提取,這是一個萬能的方法,但是在構造正則表達式時比較復雜且容易出錯。
另外,由于網頁的結構有一定的規則,所以還有一些根據網頁節點屬性、CSS 選擇器或 XPath 來提取網頁信息的庫,如 Beautiful Soup、pyquery、lxml 等。使用這些庫,我們可以高效快速地從中提取網頁信息,如節點的屬性、文本值等。
提取信息是爬蟲非常重要的部分,它可以使雜亂的數據變得條理清晰,以便我們后續處理和分析數據。
?
1.1.3 保存數據
提取信息后,我們一般會將提取到的數據保存到某處以便后續使用。這里保存形式有多種多樣,如可以簡單保存為 TXT 文本或 JSON 文本,也可以保存到數據庫,如 MySQL 和 MongoDB 等,也可保存至遠程服務器,如借助 SFTP 進行操作等。
1.1.4 自動化程序
說到自動化程序,意思是說爬蟲可以代替人來完成這些操作。首先,我們手工當然可以提取這些信息,但是當量特別大或者想快速獲取大量數據的話,肯定還是要借助程序。爬蟲就是代替我們來完成這份爬取工作的自動化程序,它可以在抓取過程中進行各種異常處理、錯誤重試等操作,確保爬取持續高效地運行
1、爬蟲技術概述
網絡爬蟲(Web crawler),是一種按照一定的規則,自動地抓取萬維網信息的程序或者腳本,它們被廣泛用于互聯網搜索引擎或其他類似網站,可以自動采集所有其能夠訪問到的頁面內容,以獲取或更新這些網站的內容和檢索方式。從功能上來講,爬蟲一般分為數據采集,處理,儲存三個部分。
傳統爬蟲從一個或若干初始網頁的URL開始,獲得初始網頁上的URL,在抓取網頁的過程中,不斷從當前頁面上抽取新的URL放入隊列,直到滿足系統的一定停止條件。聚焦爬蟲的工作流程較為復雜,需要根據一定的網頁分析算法過濾與主題無關的鏈接,保留有用的鏈接并將其放入等待抓取的URL隊列。然后,它將根據一定的搜索策略從隊列中選擇下一步要抓取的網頁URL,并重復上述過程,直到達到系統的某一條件時停止。另外,所有被爬蟲抓取的網頁將會被系統存貯,進行一定的分析、過濾,并建立索引,以便之后的查詢和檢索;對于聚焦爬蟲來說,這一過程所得到的分析結果還可能對以后的抓取過程給出反饋和指導。
相對于通用網絡爬蟲,聚焦爬蟲還需要解決三個主要問題:
(1) 對抓取目標的描述或定義;
? (2) 對網頁或數據的分析與過濾;
? (3) 對URL的搜索策略。
網絡爬蟲到底是什么,學這個真的是“從入門到入獄”嗎?_嗶哩嗶哩_bilibili
三、HTTP請求(Request)超文本傳輸協議
HTTP 協議的重要特點: 一發一收,一問一答
1.什么是URL?
?? URL 基本介紹
- 平時我們俗稱的”網址“,其實就是 URL(Uniform Resource Locator),翻譯為統一資源定位符
- 互連網上的每個文件都有一個唯一的 URL,它包含的信息指出文件的位置以及瀏覽器應該怎么處理它
一個URL由如下幾個部分構成:
協議: 通常是https或者http。表示通過何種方式獲取該資源。你可能還見過其他協議類型,比如ftp或者file,協議后面跟著://
主機名: 可以是一個已經在DNS服務器注冊過的域名 —— 或者是一個IP地址 —— 域名就表示背后的IP地址。一組主要由數字組成的用于標識接入網絡的設備的字符串。
主機名后面可以指定端口,端口是可選的,如果不指定則使用默認端口,端口和主機名之間通過冒號隔開。
資源路徑: 用于表示資源在主機上的文件系統路徑。
可以在這之后通過問號連接可選的查詢參數,如果有多個查詢參數,通過&符連接
最后一項,如果需要的話可以添加#作為需要跳轉的頁面上的矛點名稱。
一個URL的組成部分可以參考下面的圖示:
2、爬蟲的開發流程
-
爬蟲的執行流程:
-
確定首頁URL
-
發送請求, 獲取數據
-
解析數據
-
保存數據
- 首先在互聯網中選出一部分網頁,以這些網頁的鏈接地址作為種子URL;
- 將這些種子URL放入待抓取的URL隊列中,爬蟲從待抓取的URL隊列依次讀取;
- 將URL通過DNS解析,把鏈接地址轉換為網站服務器對應的IP地址;
- 網頁下載器通過網站服務器對網頁進行下載,下載的網頁為網頁文檔形式;
- 對網頁文檔中的URL進行抽取,并過濾掉已經抓取的URL;
- 對未進行抓取的URL繼續循環抓取,直至待抓取URL隊列為空。
?
3.爬蟲分類
1.通用網絡爬蟲
??通用網絡爬蟲又叫全網爬蟲,主要由URL集合、URL隊列、頁面爬行模塊、頁面分析模塊、頁面數據庫、鏈接過濾模塊等模塊構成。主要為大型搜索引擎,大型服務商等采集數據。
??通俗來說就是抓取互聯網上的所有數據。由于通用網絡爬蟲的爬行范圍和爬取數據量十分巨大,對于爬取速度和存儲空間要求較高,所以通常采用并行工作方式。
2.聚焦網絡爬蟲
??聚焦網絡爬蟲又叫主題網絡爬蟲,爬取指定網頁信息的一種爬蟲。由于目的性更加明確,范圍更加小,所以爬取速度快,大幅節約硬件和網絡資源。
3.增量式網絡爬蟲
??所謂增量式,就是增量式更新。意思是在需要的時候只爬取網頁更新的部分,沒有發生變化的部分不進行重復爬取。這樣可以有效地減少數據下載量,加快運行速度,減小時間空間上的耗費,但是算法上的難度會相應增加。
4.深層網絡爬蟲
?? 深層網絡爬蟲又稱Deep Web爬蟲。Web頁面按照存在方式分為表層網頁(Surface Web)和深層網頁(Deep Web),表層網頁是直接通過靜態鏈接可直接訪問的靜態頁面。深層網頁則是隱藏在搜索表單后面的頁面。
?? 深層網絡爬蟲主要由六個基本功能模塊(**爬行控制器、解析器、表單分析器、表單處理器、響應分析器、響應分析器、LVS控制器)**和兩個爬蟲內部數據結構(URL列表、LVS表)等部分構成。LVS表示標簽/數值集合,用來表示填充表單的數據源。
4.反爬蟲技術
4.1 通過Headers反爬蟲
從用戶請求的Headers反爬蟲是最常見的反爬蟲策略。很多網站都會對Headers的User-Agent進行檢測,還有一部分網站會對Referer進行檢測(一些資源網站的防盜鏈就是檢測Referer)。如果遇到了這類反爬蟲機制,可以直接在爬蟲中添加Headers,將瀏覽器的User-Agent復制到爬蟲的Headers中;或者將Referer值修改為目標網站域名。對于檢測Headers的反爬蟲,在爬蟲中修改或者添加Headers就能很好的繞過。
[評論:往往容易被忽略,通過對請求的抓包分析,確定referer,在程序中模擬訪問請求頭中添加]
4.2 基于用戶行為反爬蟲
還有一部分網站是通過檢測用戶行為,例如同一IP短時間內多次訪問同一頁面,或者同一賬戶短時間內多次進行相同操作。
[評論:這種防爬,需要有足夠多的ip來應對]
大多數網站都是前一種情況,對于這種情況,使用IP代理就可以解決。可以專門寫一個爬蟲,爬取網上公開的代理ip,檢測后全部保存起來。這樣的代理ip爬蟲經常會用到,最好自己準備一個。有了大量代理ip后可以每請求幾次更換一個ip,這在requests或者urllib2中很容易做到,這樣就能很容易的繞過第一種反爬蟲。
[評論:動態撥號也是一種解決方案]
對于第二種情況,可以在每次請求后隨機間隔幾秒再進行下一次請求。有些有邏輯漏洞的網站,可以通過請求幾次,退出登錄,重新登錄,繼續請求來繞過同一賬號短時間內不能多次進行相同請求的限制。
[評論:對于賬戶做防爬限制,一般難以應對,隨機幾秒請求也往往可能被封,如果能有多個賬戶,切換使用,效果更佳]
4.3動態頁面的反爬蟲
上述的幾種情況大多都是出現在靜態頁面,還有一部分網站,我們需要爬取的數據是通過ajax請求得到,或者通過Java生成的。首先用Firebug或者HttpFox對網絡請求進行分析。如果能夠找到ajax請求,也能分析出具體的參數和響應的具體含義,我們就能采用上面的方法,直接利用requests或者urllib2模擬ajax請求,對響應的json進行分析得到需要的數據。
[評論:感覺google的、IE的網絡請求分析使用也挺好]
四.數據交易平臺
1.政府類
貴陽大數據交易所:貴陽大數據交易所
西咸新區大數據交易所
東湖大數據交易平臺
華東江蘇大數據交易平臺
哈爾濱數據交易中心
上海數據交易中心
2.平臺類
京東萬象
聚合數據
數據寶
百度智能云
五 .數據預處理技術
1、數據預處理的必要性
???????? 數據預處理技術是數據分析以及數據挖掘過程中非常重要的一環。 數據預處理是指在對數據進行數據挖掘的主要處理以前,先對原始數據進行必要的清洗、集成、轉換、離散、歸約、特征選擇和提取等一系列處理工作,達到挖掘算法進行知識獲取要求的最低規范和標準。
?
??? 2.為什么要對數據進行預處理呢?
??????? 對于數據分析而言,數據是顯而易見的核心。但是并不是所有的數據都是有用的。大多數數據參差不齊,層次概念不清晰,數量級不同。這會給后期的數據分析帶來很大的麻煩。
??????? 數據挖掘的對象是從現實現實世界采集到的大量的、各種各樣大數據。現實生產和實際生活以及科學研究的多樣性、不確定性、復雜性等導致采集到的原始數據比較散亂,它們是不符合挖掘算法進行知識獲取的規范和標準的。所以這時我們必須把數據進行處理,從而得到標準規范的數據。進而進行分析。現實生活中的數據經常是“骯臟的”。也就是數據會有由于各種原因,存在各種問題。尤其是如今的大數據,因為“大”所以什么問題都有可能出現。那么我們的數據會出現什么問題呢?
?????? (1)數據不完整性:不完整性指的是數據記錄中可能會出現有一些數據屬性的值丟失或不確定的情況,還有可能缺失必需的數據。這是系統設計時存在的缺陷或者使用過程中一些人為因素造成的,如有些數據缺失只是因為輸入時被認為時不重要的,相關數據沒有記錄可能是由于理解錯誤,或者因為設備故障,與其他記錄不一致的數據可能已經被刪除,歷史記錄或修改的數據可能被忽略等。
??????? (2)不確定的數據有很多可能的原因(含噪聲):含噪聲指的是數據具有不正確的屬性值,包含錯誤或者存在偏離期望的離群值(指與其他數值比較差異較大的值)。它們產生的原因有很多,如手機數據的設備可能出現故障,人或者計算機可能在數據輸入時出現錯誤,數據傳輸中可能出現了錯誤等。不正確的數據也可能是由命名約定或所用的數據代碼不一致導致的。在實際使用系統中,還可能存在大量的模糊信息,有些數據甚至具有一定的隨機性。
??????? (3)數據不一致性:原始數據是從各個實際應用系統中獲取的,由于各應用系統的數據缺乏統一的標準的定義,數據結構也有較大的差異,因此各系統之間的數據存在較大的不一致性,往往不能直接使用。同時,來自不同應用系統中的數據,由于合并還普遍存在數據重復和信息冗余現象。
??????? (4)時效性也可能影響數據質量
?數據的實時更新沒有完全的統計。
??????? 因此,這里說存在不完整的、含噪聲的和不一致的數據是現實世界大型的數據庫或數據倉庫的共同特點。一些比較成熟的算法對其處理的數據集合一般有一定的要求,如數據完整性好、數據的冗余性小、屬性之間的相關性小。然而,實際系統中的數據一般無法直接滿足數據挖掘算法的要求,因此必須對數據進行預處理,以提高數據質量,使之符合數據挖掘算法的規范和要求。
協議,轉載請附上原文出處鏈接及本聲明。
?
3、數據預處理的主要任務
????????數據預處理是指對數據進行數據挖掘之前,先對原始數據進行必要的清洗、集成、轉換、離散和規約等一系列的處理工作,已達到挖掘算法進行知識獲取研究所要求的最低規范和標準。在大數據處理過程中,數據預處理將占用60%~80%的時間。
從對不同的源數據進行預處理的功能來分,數據預處理主要包括數據清洗(Data Cleaning)、數據集成(Data Integration)、數據變換(Data Transformation)、數據規約(Data Reduction)。等四個功能
六.數據清洗
1.缺失值填充
- 刪除含有缺失值樣本
- 人工填寫缺失值
- 使用一個全局常量填充缺失值
- 使用屬性的均值填充缺失值
- 使用與給定元組同一類的所有樣本的屬性均值填充相應的缺失值
- 使用最可能的值填充缺失值
方法3~6填充的值都有可能不正確。方法6是最常用的和最可靠的填充缺失值的方法,使用已有數據的大部分信息來預測缺失值。
2.噪聲平滑
噪聲是指被測變量的一個隨機錯誤和變化。平滑處理旨在幫助去掉數據中的噪聲,常用的方法包括分箱、回歸和聚類等
-
1.分箱
分箱(Bin)方法通過利用被平滑數據點的周圍點(近鄰),對一組排序數據進行平滑,排序后的數據被分配到若干箱子(稱為 Bin)中。 如圖5所示,對箱子的劃分方法一般有兩種,一種是等高方法,即每個箱子中元素的個數相等,另一種是等寬方法,即每個箱子的取值間距(左右邊界之差)相同。
?
這里給出一個實例介紹分箱方法。假設有一個數據集X={4,8,15,21,21,24,25,28,34},這里采用基于平均值的等高分箱方法對其進行平滑處理,則分箱處理的步驟如下:
按平均值分箱
(1)把原始數據集X放入以下三個箱子:? 箱子1:4,8,15? 箱子2:21,21,24? 箱子3:25,28,34
(2)分別計算得到每個箱子的平均值: 箱子1的平均值:9? 箱子2的平均值:22? 箱子3的平均值:29
(3)用每個箱子的平均值替換該箱子內的所有元素:? 箱子1:9,9,9? 箱子2:22,22,22? 箱子3:29,29,29
(4)合并各個箱子中的元素得到新的數據集{9,9,9,22,22,22,29,29,29}。
按最大最小值(邊界值)分箱
此外,還可以采用基于箱子邊界的等寬分箱方法對數據進行平滑處理。利用邊界進行平滑時,對于給定的箱子,其最大值與最小值就構成了該箱子的邊界,利用每個箱子的邊界值(最大值或最小值)可替換該箱子中的所有值。
這時的分箱結果如下:
箱子1:4,4,15
箱子2:21,21,24
箱子3:25,25,34???? 合并各個箱子中的元素得到新的數據集{4,4,15,21,21,24,25,25,34}。
-
2.回歸
可以利用擬合函數對數據進行平滑。例如,借助線性回歸方法(包括多變量回歸方法),就可以獲得多個變量之間的擬合關系,從而達到利用一個(或一組)變量值來預測另一個變量取值的目的。如圖所示,利用回歸分析方法所獲得的擬合函數,能夠幫助平滑數據并除去其中的噪聲。
-
3.聚類
通過聚類分析方法可幫助發現異常數據。如圖所示,相似或相鄰近的數據聚合在一起形成了各個聚類集合,而那些位于這些聚類集合之外的數據對象,則被認為是異常數據
- 全局離群點:個別數據離整體數據數據較遠。
- 集體離群點:一組數據與其他數據分布方式不同。
- 情景離群點:又稱”條件離群點“,即在特定條件下可能又是合理的點。(比如夏天的28℃和冬天的28℃)
3.不一致的數據清洗
在實際數據庫中,由于一些人為因素或者其他原因,記錄的數據可能存在不一致的情況,因此,需要對這些不一致數據在分析前需要進行清理。例如,數據輸入時的錯誤,可通過和原始記錄對比進行更正。知識工程工具也可以用來檢測違反規則的數據。還例如,在已知屬性間依賴關系的情況下,可以查找違反函數依賴的值。
七.數據集成和數據轉換
數據集成:數據集成需要考慮許多問題,如實體識別問題,主要是匹配來自多個不同信息源的現實世界實體。
?????? 冗余是另一個重要問題。如果一個屬性能由另一個或另一組屬性“導出”,則此屬性可能是冗余的。屬性或維命名的不一致也可能導致結果數據集中的冗余。有些冗余可通過相關分析檢測到,如給定兩個屬性,根據可用的數據度量一個屬性能在多大程度上蘊含另一個。常用的冗余相關分析方法有皮爾遜積距系數、卡方檢驗、數值屬性的協方差等。
八.數據規約
數據立方體聚集:聚集操作用于數據立方體結構中的數據。數據立方體存儲多維聚集信息。每個單元存放一個聚集值,對應于多維空間的一個數點,每個屬性可能存在概念分層,允許在多個抽象層進行數據分析。
屬性子集選擇:當待分析數據集含有大量屬性時,其中大部分屬性與挖掘任務不相關或冗余,屬性子集選擇可以檢測并刪除不相關、冗余或弱相關的屬性或維。其目標是找出最小屬性集,使得數據類的概率分布盡可能地接近使用所有屬性得到的原分布。
?維規約:維度規約使用數據編碼或變換得到原數據規約或“壓縮”表示。減少所考慮的隨機變量或屬性個數?。
數值規約:數值規約通過選擇替代的數據表示形式來減少數據量。即用較小的數據表示替換或估計數據。
九.數據脫敏
敏感數據,又稱隱私數據,常見的敏感數據有: 姓名、身份證號碼、地址、電話號碼、銀行賬號、郵箱地址、所屬城市、郵編、密碼類 ( 如賬戶查詢密碼、取款密碼、登錄密碼等 )、組織機構名稱、營業執照號碼、銀行帳號、交易日期、交易金額等。
脫敏規則,一般的脫敏規則分類為可恢復與不可恢復兩類。
使用環境,主要指脫敏之后的數據在哪些環境中使用。普遍按照生產環境和非生產環境(開發、測試、外包、數據分析等)進行劃分。