1. 程式人生 > >資料科學家成長指南(下)

資料科學家成長指南(下)

本文是資料科學家學習路徑的的完結篇,算上《資料科學家成長指南(上)》《資料科學家成長指南 (中)》,總篇幅應該五萬字多一點。今天更新資料獲取、資料清洗、工具三條線路的內容,文字較少。

image.png

——————

Data Ingestion 資料獲取

這一塊的概念比較混亂,主要是涉及太多的名詞概念,很混淆,我大致粗略的翻譯一下。不保證一定對。

Summary of Data Formats

資料格式概要

在進行資料工程或者資料工作前,資料科學家應該針對資料格式有一個全面的瞭解。

資料格式各種各樣,既有結構化資料,也有非結構化資料。既有文字資料,數值資料,也有時間日期資料。哪怕同一類,如時間日期,也會因為時區的不同而有差異。

對資料格式的瞭解有助於後續工作的開展。

Data Discovery 

資料發現

這是一個挺大的問題,我也不清楚作者的真實含義,姑妄言之。

從大目標看,是瞭解自己擁有哪些資料,因為對資料科學家來說,問題不是資料少,而是資料太大了,導致無法確定分析主題而無從下手。我應該用哪些資料?哪些資料有幫助哪些無用?哪些資料有最大的利用價值?哪些資料又真實性存疑?現階段最需要解決的資料問題是哪個?我想都是擺在資料科學家面前的問題。Discovery即是發現,也是探索。

從小細節看,是針對資料進行探索性研究,觀察各變數的分佈、範圍。觀察資料集的大小。主要目的是瞭解資料的細節。

這們把這一過程理解為,在挖掘到資料金礦前,得先知道哪一個地方會埋藏有金礦。

Data Sources & Acquisition

資料來源與採集

當你知道這塊地方有金礦時,你得準備好自己的工具了:確定自己需要的資料來源。比如要進行使用者行為分析,那麼就需要採集使用者的行為資料。採集什麼時間段、採集哪類使用者、採集多少資料量。如果這些資料不存在,則還需要埋點進行收集。

Data Integration

資料整合

資料整合指代的是將不同來源的資料整合在一起成為一個統一的檢視。即可以是資料戰略層面,比如兩家公司合併(滴滴和Uber,美團和點評),為了業務層面的統一和規範,就需要將使用者資料業務資料都彙總到一起,這個過程就叫做資料整合。

也可以是將某一次分析所需要的資料來源彙總。比如上文的使用者行為分析,如果來源於不同資料、則需要確定主鍵,採集後放在一起便於我們使用。

除此以外,第三方資料接入,DMP應也從屬於這個概念。

Data Fusion

資料融合

資料融合不同於資料整合,資料整合屬於底層資料集上的合併。而資料融合接近模型層面,我們可以想成SQL的Join(不確定)。

Transformation & Enrichament

轉換和濃縮

這一塊,在地圖上和另外一條分支【資料轉換Data Munging】有了交集。兩條支線合併後就是完整的資料特徵工程。這一步驟是將我們採集的資料集進行統計學意義上的變換,成為資料輸入的特徵。

Data Survey

資料調查

我也不瞭解已經完成資料工程後,為什麼還需要資料調查…

Google OpenRefine

Google釋出的開源的資料處理軟體。

How much Data

多大的資料

一句比較偏概念的話,資料量級決定了後續方方面面,比如抽樣和置信度,比如適用的演算法模型,比如技術選型。

Using ETL

使用ETL,已經介紹過了

——————

Data Munging 資料清理/資料轉換

資料清洗過程,機器學習中最耗費時間的過程。

Dimensionality & Numerosity Reduction

維度與數值歸約

雖然我們有海量資料,但是我們不可能在海量資料上進行復雜的資料分析和挖掘。所以要應用資料規約技術。它的目的是精簡資料,讓它儘可能的小,又能保證資料的完整性,使得我們在海量資料集和小資料集上獲得相近的結果。

主要是刪除不重要或不相關的特徵,或者通過對特徵進行重組來減少特徵的個數。其原則是在保留、甚至提高原有判別能力的前提下進行。

Normalization

資料規範化

在機器學習過程中,我們並不能直接使用原始資料,因為不同數值間的量綱不一樣,無法直接求和和對比。我們會將資料標準化,使之落在一個數值範圍[0,1]內。方便進行計算。

常見的資料標準化有min-max,z-score,decimal scaling等。

最小-最大規範化(min-max)是對原始資料進行線性變換,新資料 = (原資料-最小值)/(最大值-最小值)。

z-score 標準化是基於均值和標準差進行計算,新資料=(原資料-均值)/標準差。

小數定標標準化(decimal scaling)通過移動資料的小數點位置來進行標準化,小數點移動多少取決於最大絕對值。比如最大值是999,那麼資料集中所有值都除以1000。

溫馨提示,標準化會改變資料,所以標準化應該在備份原始資料後進行操作,別直接覆蓋噢。

Data Scrubbing

資料清洗

資料探勘中最痛苦的工作,沒有之一。資料一般都是非規整的,我們稱之為髒資料,它是無法直接用於資料模型的,通過一定規則將髒資料規範活著洗掉,這個過程叫做資料清洗。

常見問題為:

缺失資料,表現為NaN,缺失原因各有不同,會影響後續的資料探勘過程。

錯誤資料,如果資料系統不健全,會伴隨很多錯誤資料,例如日期格式不統一,存在1970錯誤,中文亂碼,表情字元等等。思路最好是從錯誤根源上解決。

非規範資料,如果大平臺沒有統一的資料標準和資料字典,資料會有不規範的情況發生。比如有些表,1代表男人,0代表女人,而有些表則反過來,也可能是上海和上海市這類問題。通常通過mapping或者統一的字典解決。

重複資料。將重複資料按主鍵剔除掉就好,可能是Join時的錯誤,可能是抽樣錯誤,等等。

資料清洗是一個長期的過程。很多情況下都是靠人肉解決的。

Handling Missing Values

缺失值處理

資料獲取的過程中可能會造成缺失,缺失影響演算法的結果。

缺失值的處理有兩類思路:

第一種是補全,首先嚐試其他資料補全,例如身份證號碼能夠推斷出性別、籍貫、出生日期等。或者使用演算法分類和預測,比如通過姓名猜測使用者是男是女。

如果是數值型變數,可以通過隨機插值、均值、前後均值、中位數、平滑等方法補全。

第二種是缺失過多,只能剔除這類資料和特徵。或者將缺失與否作為新特徵,像金融風險管控,關鍵資訊的缺失確實能當新特徵。

Unbiased Estimators

無偏估計量

無偏估計指的是樣本均值的期望等於總體均值。因為樣本均值永遠有隨機因素的干擾,不可能完全等於總體均值,所以它只是估計,但它的期望又是一個真實值,所以我們叫做無偏估計量。

機器學習中常常用交叉驗證的方法,針對測試集在模型中的表現,讓估計量漸進無偏。

Binning Sparse Values

分箱稀疏值,兩個合起來我不知道具體意思

分箱是一種常見的資料清洗方法,首先是將資料排序並且分隔到一些相等深度的桶(bucket)中,然後根據桶的均值、中間值、邊界值等平滑。常見的分隔方法有等寬劃分和等深劃分,等寬範圍是根據最大值和最小值均勻分隔出數個範圍相同的區間,等深則是樣本數近似的區間。

稀疏是統計中很常見的一個詞,指的是在矩陣或者特徵中,絕大部分值都是0。叫做稀疏特徵或稀疏矩陣。協同過濾就用到了稀疏矩陣。

Feature Extraction

特徵提取/特徵工程

前面已經有過這個了,這裡概念再擴大些。我們知道:資料和特徵決定了機器學習的上限,而模型和演算法只是逼近這個上限而已。說的再通俗一點,好演算法+爛特徵是遠比不上爛演算法+好特徵的。

特徵提取的過程主要分為:

資料預處理:將已經清洗過的資料進行轉換,包括去量綱化、歸一化、二元化、離散化、啞變數化、對數變換指數變換等。

特徵選擇:利用各類統計學選擇特徵,主要有Filter過濾法、Wrapper包裝法、Embedded嵌入法。核心目的是找出對結果影響最大的特徵。通常是從業務意義出發,好的業務專家能夠直接挑選關鍵特徵。另外有時候會遇到具備重要業務意義,但是非強特徵的情況,這時候需要依據實際情況做抉擇。

特徵選擇過程中需要考慮模型的泛化能力,避免過擬合。

降維:如果特徵維度過大,會直接影響計算效能,需要降維。常用的降維方法有主成分分析法(PCA)和線性判別分析(LDA)。

當然暴力些也能直接選擇全部變數,扔進RF或者XGBoost模型中跑一個晚上,直接根據Gini指數檢視重要性。

Denoising

去噪

在機器學習和資料探勘中,資料往往由很多噪聲,去除噪聲的方法有多種多樣,一般說來,資料量越大,噪聲造成的影響就越少。

噪聲是非真實的資料,如果一個使用者某些資訊沒有填寫,為缺失值,它不應該屬於噪聲,真正的噪聲應該是測試人員、機器人、爬蟲、刷單黃牛、作弊行為等。這類資料沒有業務意義,加入模型會影響結果,在早期就該排除掉。

另外一種噪聲是無法解釋的資料波動,和其他資料不相一致。因為資料會受一些客觀條件影響造成波動,去噪是使異常波動消除。

去噪在資料清洗過程。

Sampling

抽樣

很多時候統計不可能計算整體,比如中國平均工資就是拿14億人口一個個計算過來的麼?資料科學中,如果拿全樣本計算,可能單機的記憶體吃不消,或者沒有伺服器資源。那麼只能抽取部分樣本作為資料分析。

抽樣有簡單隨機抽樣、系統抽樣、分層抽樣、整群抽樣等。無論怎麼樣抽樣,都要求樣本有足夠的代表性,即滿足一定數量,又滿足隨機性。

Stratified Sampling

分層抽樣

是抽樣的一種。將抽樣單位以某種特徵或者規律劃分成不同的層,然後從不同的層中抽樣,最後結合起來作為總樣本。

為什麼需要分層抽樣?如果整群符合隨機性倒還好,如果不是會造成統計上的誤差。我要做社會調研,各類人都需要,那麼就必須有男有女、有老有少、有城市有農村,而不是呆在一個商場門口做調研。前者就屬於分層抽樣。

分層抽樣可以降低樣本量,效率高。

Principal Component Analysis

主成分分析

簡稱PCA,是一種統計方法。在實際工作中,我們會遇到很多變數資料(比如影象和訊號),而我們又不可能一一列舉所有的變數,這時候我們只能拿出幾個典型,將這些變數高度概括,以少數代表多數的方式進行描述。這種方式就叫做主成分分析。

如果變數完全獨立,那麼主成分分析沒有意義。PCA前提條件是存在一定相關性。

通過去均值化的m維原始矩陣乘以其協方差矩陣的特徵向量獲得k維投影,這裡的k維就叫做主成分,用來代表m維。因為PCA的核心是少數代表多數,我們從k個主成分中選擇n個作為代表,標準是能代表80%的原資料集。

在機器學習中,主要用來降維,簡化模型。常見於影象演算法。

——————

ToolBox工具箱

最後內容了,這一塊作者有拼湊的嫌疑,都是之前已經出現的內容。資料科學的工具更新換代非常快,好工具層出不窮,所以該篇章的工具就仁者見仁,寫的簡略一些。

MS Excel / Analysis ToolPak

微軟的Excel,不多說了。

後者是Excel自帶的分析工具庫,可以完成不少統計操作。

Java, Python

兩種常見程式語言,請在這裡和我念:人生苦短,快用Python。

R, R-Studio, Rattle

R語言不再多介紹了。

RStudio是R的IDE,集成了豐富的功能。

Rattle是基於R的資料探勘工具,提供了GUI。

Weka, Knime, RapidMiner

Weka是一款免費的,基於JAVA環境下開源的機器學習以及資料探勘軟體。

KNIME是基於Eclipse環境的開源商業智慧工具。

RapidMiner是一個開源的資料探勘軟體,提供一些可擴充套件的資料分析挖掘演算法的實現。

Hadoop Dist of Choice

選擇Hadoop的哪個發行版

Hadoop的發行版除了社群的Apache hadoop外,很多商業公司都提供了自己的商業版本。商業版主要是提供了專業的技術支援,每個發行版都有自己的一些特點。

Spark, Storm

Hadoop相關的實時處理框架

作者寫的時候比較早,現在後兩者已經非常火了。是對Hadoop的補充和完善。它們自身也發展出不少的套件,SparkML,SparkSQL等

Flume, Scribe, Chukwa

Flume是海量日誌採集、聚合和傳輸的系統。

Scribe是Facebook開源的日誌收集系統,在Facebook內部已經得到的應用。

chukwa是一個開源的用於監控大型分散式系統的資料收集系統。

Nutch, Talend, Scraperwiki

Nutch是一個開源Java實現的搜尋引擎。它提供了我們執行自己的搜尋引擎所需的全部工具。包括全文搜尋和Web爬蟲。

Talend是一家專業的開源整合軟體公司,提供各類資料工具。

ScraperWiKi是一個致力於資料科學領域維基百科網站,幫助個人和企業獲得最專業的視覺化資料,並支援對資料進行分析和管理。

Webscraper, Flume, Sqoop

Webscraper是網頁爬蟲。

Flume是海量日誌採集、聚合和傳輸的系統。

Sqoop是Haddop套件。

tm, RWeka, NLTK

tm是R語言的文字挖掘包。

RWeka是R的軟體包,載入後就能使用weka的一些演算法。

NLTK是自然語言工具包。

RHIPE

R與Hadoop相關的開發環境。

D3.js, ggplot2, Shiny

前兩個不多說了。

Shiny是RStudio團隊開發的一款線上網頁互動視覺化工具。可以將R語言作為半個BI用。

image.png

IBM Languageware

IBM的自然語言處理。

Cassandra, MongoDB

2種NoSql資料庫。

讀完這裡,三篇文章總共七十年的功力我都已經傳給你們了。

——————

這是最費時費力的三篇文章,當初翻譯它,有鞏固和學習的目的,只是內容遠超我的預計。零散加起來前後耗時有兩週,導致運營方向的內容長期處於停滯,現在可以恢復了。春節計劃再寫一篇資料化運營,如果時間充裕,還能再有兩篇使用者分層和資料庫入門,現在看來,還是有希望的。

誰讓我春節假期長呢,哈哈。

image.png