數據導入與預處理技術復習筆記
本文由本人學習過程中總結,難免有紕漏,歡迎交流學習
第1章 為什么需要數據處理
本章內容將涵蓋以下幾個方面:
為什么需要數據處理
關於數據科學的六個簡單處理步驟,包括數據清洗;
與數據預處理相關的參考建議
對數據清洗有幫助的工具
一個關於如何將數據清洗融入整個數據科學過程的入門實例在數據分析、挖掘、機器學習或者是可視化之前,做好相關的數據預處理工作意義重大。這個數據預處理的過程不是一成不變的,是一個迭代的過程,在實際的工作中,需要不止一次的執行數據預處理。所采用的數據挖掘或分析方法會影響清洗方式的選取。數據預處理包含了分析所需要的各種處理數據的任務:如交換文件的格式、字符編碼的修改、數據提取的細節等。數據導入、數據存儲和數據清洗是數據預處理中密切相關的技術。搜集原始數據->存儲->數據清洗->存儲->增量搜集數據->合並存儲數據->數據挖掘(大數據、人工智能)->數據可視化;
有三種處理方案可以選擇:
什么都不處理:忽略這些錯誤數據,直接開始構建線形圖。如果直接數據可視化,這樣的結果是,有用的數據被掩蓋了。
修正數據:算出錯誤消息的正確數據,采用修訂后的數據集來可視化。
扔掉錯誤數據:放棄錯誤數據。
為了在選項二和三之間做個選擇,計算錯誤數據實際上這些只占到了數據量的百分之一。因此,選擇選項三,扔掉這些數據。
利用Google的Spreadsheets能在初始數據中缺少日期的情況下,在x軸自動進行零值數據補齊,創建線性圖或者條狀圖。 在以上的數據集中,需要補齊的零值就是所缺失的數據。
1.6 小結
從以上的實例看出,數據預處理占了整個過程的80%的工作量;
數據預處理是數據科學過程的關鍵部分,不僅涉及對技術問題的理解,還需要做出相應的價值判斷;
第二章 數據預處理
為什么對數據進行預處理
描述性數據匯總
數據清理
數據集成和變換
數據歸約
離散化和概念分層生成
臟數據
不完整
缺少數據值;缺乏某些重要屬性;僅包含匯總數據;
e.g., occupation=""
有噪聲
包含錯誤或者孤立點
e.g. Salary = -10
數據不一致
e.g., 在編碼或者命名上存在差異
e.g., 過去的等級: “1,2,3”, 現在的等級: “A, B, C”
e.g., 重復記錄間的不一致性
e.g., Age=“42” Birthday=“03/07/1997”
不完整數據的成因
數據收集的時候就缺乏合適的值
數據收集時和數據分析時的不同考慮因素
人為/硬件/軟件 問題
噪聲數據(不正確的值)的成因
數據收集工具的問題
數據輸入時的 人為/計算機 錯誤
數據傳輸中產生的錯誤
數據不一致性的成因
不同的數據源
違反了函數依賴性
數據預處理為什么是重要的?
沒有高質量的數據,就沒有高質量的挖掘結果
高質量的決策必須依賴高質量的數據
e.g. 重復值或者空缺值將會產生不正確的或者令人誤導的統計
數據倉庫需要對高質量的數據進行一致地集成
數據預處理將是構建數據倉庫或者進行數據挖掘的工作中占工作量最大的一個步驟
數據質量的多維度量
一個廣為認可的多維度量觀點:
精確度
完整度
一致性
合乎時機
可信度
附加價值
可解釋性
跟數據本身的含義相關的
內在的、上下文的、表象的以及可訪問性
數據預處理的主要任務
數據清理
填寫空缺的值,平滑噪聲數據,識別、刪除孤立點,解決不一致性
數據集成
集成多個數據庫、數據立方體或文件
數據變換
規范化和聚集
數據歸約
得到數據集的壓縮表示,它小得多,但可以得到相同或相近的結果
數據離散化
數據歸約的一部分,通過概念分層和數據的離散化來規約數據,對數字型數據特別重要
基本統計類描述的圖形顯示
常用的顯示數據匯總和分布的方法:
直方圖、分位數圖、q-q圖、散布圖和局部回歸曲線
直方圖:一種單變量圖形表示方法
將數據分布划分成不相交的子集或桶,通常每個桶寬度一致並用一個矩形表示,其高度表示桶中數據在給定數據中出現的計數或頻率
數據清理任務
填寫空缺的值
識別離群點和平滑噪聲數據
糾正不一致的數據
解決數據集成造成的冗余
空缺值
數據並不總是完整的
例如:數據庫表中,很多條記錄的對應字段沒有相應值,比如銷售表中的顧客收入
引起空缺值的原因
設備異常
與其他已有數據不一致而被刪除
因為誤解而沒有被輸入的數據
在輸入時,有些數據應為得不到重視而沒有被輸入
對數據的改變沒有進行日志記載
空缺值要經過推斷而補上
如何處理空缺值
忽略元組:當類標號缺少時通常這么做(假定挖掘任務設計分類或描述),當每個屬性缺少值的百分比變化很大時,它的效果非常差。
人工填寫空缺值:工作量大,可行性低
使用一個全局變量填充空缺值:比如使用unknown或-∞
使用屬性的平均值填充空缺值
使用與給定元組屬同一類的所有樣本的平均值
使用最可能的值填充空缺值:使用像Bayesian公式或判定樹這樣的基於推斷的方法
噪聲數據
噪聲:一個測量變量中的隨機錯誤或偏差
引起不正確屬性值的原因
數據收集工具的問題
數據輸入錯誤
數據傳輸錯誤
技術限制
命名規則的不一致
其它需要數據清理的數據問題
重復記錄
不完整的數據
不一致的數據
如何處理噪聲數據
分箱(binning):
首先排序數據,並將他們分到等深的箱中
然后可以按箱的平均值平滑、按箱中值平滑、按箱的邊界平滑等等
回歸
通過讓數據適應回歸函數來平滑數據
聚類:
監測並且去除孤立點
計算機和人工檢查結合
計算機檢測可疑數據,然后對它們進行人工判斷
數據清理作為一個過程
第一步:偏差檢測
使用元數據(e.g. 每個屬性的域、數值類型、依賴性、分布等)
檢查字段過載
檢查唯一性規則、連續性規則、空值規則
使用偏差檢查工具
數據清理工具:使用簡單的領域知識(e.g.郵編、拼寫檢查)檢查並糾正數據中的錯誤
數據審計工具:通過分析數據發現規則和聯系及檢測違反這些條件的數據來發現偏差
第二步:數據變換(糾正偏差)
數據遷移工具:允許說明簡單的變換
ETL(提取/變換/裝入)工具:允許用戶通過GUI說明變換
偏差檢測和數據變換(糾偏)的迭代執行
強調交互性的清理方法
數據變換
數據變換將數據轉換或統一成適合挖掘的形式
平滑:去除數據中的噪聲
聚集:匯總,數據立方體的構建
數據泛化:沿概念分層向上匯總
規范化:將數據按比例縮放,使之落入一個小的特定區間
最小-最大規范化
z-score規范化
小數定標規范化
屬性構造
通過現有屬性構造新的屬性,並添加到屬性集中;以增加對高維數據的結構的理解和精確度
數據歸約
為什么需要進行數據規約?
數據倉庫中往往存有海量數據
在整個數據集上進行復雜的數據分析與挖掘需要很長的時間
數據歸約
數據歸約可以用來得到數據集的歸約表示,它小得多,但可以產生相同的(或幾乎相同的)分析結果
常用的數據歸約策略
數據立方體聚集
維歸約,e.g. 移除不重要的屬性
數據壓縮
數值歸約,e.g. 使用模型來表示數據
離散化和概念分層產生
用於數據歸約的時間不應當超過或“抵消”在歸約后的數據上挖掘節省的時間
離散化
三種類型的屬性值:
名稱型:無序集合中的值;e.g. 顏色、職業
序數:有序集合中的值; e.g. 軍銜、職稱
連續值;e.g. 實數
離散化
將連續屬性的范圍划分為區間
有些分類算法只接受離散屬性值
通過離散化有效的規約數據
離散化的數值用於進一步分析
典型方法(所有方法均可遞歸應用)
分箱(binning)
分箱技術遞歸的用於結果划分,可以產生概念分層
直方圖分析(histogram)
直方圖分析方法遞歸的應用於每一部分,可以自動產生多級概念分層
聚類分析
將數據划分成簇,每個簇形成同一個概念層上的一個節點,每個簇可再分成多個子簇,形成子節點
基於熵的離散化
通過自然划分分段
3 基礎知識 --格式、類型與編碼
文件格式
在實際問題中,處理的實際數據常常是五花八門的格式,因此,每一種文件格式的處理方法都是有局限性的;
文本文件類型
常見的文本文件格式
經常處理的數據文本文件主要有三種:
分隔格式(結構化數據);
JSON格式(半結構化數據);
HTML格式(非結構化數據);
(1)查看不可見的字符
(2)封閉錯誤數據
數據本身含有分隔符
方法一:在存成分隔文件之前,再進行預處理,去掉所有的數據分身含有分隔符的情況;
方法二:使用額外的符號來對數據進行封閉處理;
129,000 --> “129,000”
字符轉義
數據本身含有引號,需要通過另外的一個特殊字符來對數據內部的引號進行轉義,比如反斜線”\”。
JSON格式
半結構化數據集的特點是數據值都有其對應的屬性標識,而且順序無關緊要,有時甚至缺失某些屬性。JSON是以屬性-值為基礎的數據集。
屬性放在冒號左邊,值放在冒號右邊。每個屬性之間采用逗號進行分割。整個實體采用花括號進行封閉處理。
JSON與分隔文件類似,不同的是:
1. JSON的字符串的值必須使用雙引號進行封閉處理;
2. 字符串內部的雙引號必須使用反斜線進行轉義。
(轉義字符是\)
3. 逗號不能出現在數字類型的數據中,除非這個值被當做字符串使用並用引號封閉。
HTML格式
HTML文件,也稱為網頁文件,是一種文本格式文件,經常夾雜着冗余的數據。
歸檔與壓縮
在什么情況下,一個文件既是文本文件,同時也是二進制文件呢?
壓縮和歸檔的時候。
現實中的許多數據(特別是分隔數據)都是以壓縮后的方式存儲和傳輸的。
數據類型、空值與編碼
數據類型間的相互轉換
數據損耗
從一種數據類型轉換到另一種數據類型的過程中,有時會產生數據損耗。目標數據類型無法保存與原始數據類型同樣多的信息時,損耗就會發生。
同種類型的不同范圍的轉換:假如你有個字符串類型的字段,其長度為200個字符,如果將其轉換到只能容納100個字符的字段上,超過100個字符的數據就會被丟棄或截取。這種情況也發生在不同范圍的數字類型字段上,例如從長整數類型向一般長度的整數類型轉換,或者是從整數類型向長度更小的整數類型轉換。
第4章 數據清洗的常用工具 --電子表格和文本編輯器
電子表格中的數據清洗
電子表格在數據清洗方面的功能主要體現在兩個方面:
(1).可以將數據組織成列或行;
(2).完成數據清洗;
文本編輯器里的數據清洗
文本調整
查找與替換
排序與去重
5 Python科學計算與數據處理
pandas含有使數據分析工作變得更快更簡單的高級數據結構和操作工具。它是基於NumPy構建的,讓以NumPy為中心的應用變得更加簡單。
Series
Series是一種類似於一維數組的對象,它由一組數據(各種NumPy數據類型)以及一組 與之相關的數據標簽(即索引)組成。僅由一組數據即可產生最簡單的Series:
Series的字符串表現形式為:索引在左邊,值在右邊。由於沒有為數據指定索引, 於是會自動創建一個0到N-1 (N為數據的長度)的整數型索引。可以通過Series的 values和index屬性獲取其數組表示形式和索引對象:
與普通NumPy數組相比,可以通過索引的方式選取Series中的單個或一組值:
NumPy數組運算(如根據布爾型數組進行過濾、標量乘法、應用數學函數等)都會保留索引和值之間的鏈接:
還可以將Series看成是一個定長的有序字典,因為它是索引值到數據值的一個映射。它 可以用在許多原本需要字典參數的函數中:
DataFrame
DataFrame是一個表格型的數據結構,它含有一組有序的列,每列可以是不同的值類 型(數值、字符串、布爾值等)。DataFrame既有行索引也有列索引,它可以被看做由Series組成的字典(共用同一個索引)。跟其他類似的數據結構相比(如R的data. frame),DataFrame中面向行和面向列的操作基本上是平衡的。其實,DataFrame中的 數據是以一個或多個二維塊存放的(而不是列表、字典或別的一維數據結構)。
處理缺失數據
缺失數據(missing data)在大部分數據分析應用中都很常見。pandas的設計目標之一就是讓缺失數據的處理任務盡量輕松。例如,pandas對象上的所有描述統計都排除了缺失數據。
pandas使用浮點值NaN (Not a Number)表示浮點和非浮點數組中的缺失數據。它只是一 個便於被檢測出來的標記而已:
NA處理方法
方法 說明
dropna 根據各標簽的值中是否存在缺失數據對軸標
簽進行過濾,可通過閾值調節對缺失值的容
忍度
fillna 用指定值或插值方法(如ffill或bfill)填充缺
失數據
isnull 返回一個含有布爾值的對象,這些布爾值表
示哪些值是缺失值/NA,該對象的類型與源
類型一樣
notnull isnull 的否定式
層次化索引
層次化索引(hierarchical indexing)是pandas的一項重要功能,它能在一個軸上擁 有多個(兩個以上)索引級別。抽象點說,它使能以低維度形式處理高維度數據。 先來看一個簡單的例子:創建一個Series,並用一個由列表或數組組成的列表作為索引
層次化索引在數據重塑和基於分組的操作(如透視表生成)中扮演着重要的角色。可通過其unstack方法被重新安排到一個DataFrame中
6 Python透視表技術
Series
DataFrame
透視表
透視表是一種可以對數據動態排布並且分類匯總的表格格式。或許大多數人都在 Excel 使用過數據透視表,也體會到它的強大功能,而在 pandas 中它被稱作 pivot_table。
為什么要使用 pivot_table?
靈活性高,可以隨意定制你的分析計算要求
脈絡清晰易於理解數據
操作性強,報表神器
7 聚類
K-means 算法是很典型的基於距離的聚類算法,采用距離作為相似性的評價指標,即認為兩個對象的距離越近,其相似度就越大。該算法認為簇是由距離靠近的對象組成的,因此把得到緊湊且獨立的簇作為最終目標。動圖來源.
k 個初始類聚類中心點的選取對聚類結果具有較大的影響,因為在該算法第一步中是隨機的選取任意 k 個對象作為初始聚類的中心,初始地代表一個簇。該算法在每次迭代中對數據集中剩余的每個對象,根據其與各個簇中心的距離將每個對象重新賦給最近的簇。當考察完所有數據對象后,一次迭代運算完成,新的聚類中心被計算出來。如果在一次迭代前后,J 的值沒有發生變化,說明算法已經收斂。