天天看點

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

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

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

——————

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用。

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

IBM Languageware

IBM的自然語言處理。

Cassandra, MongoDB

2種NoSql資料庫。

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

——————