數據治理:SQL數據清洗十八般武藝

2021-02-15 數據新商業


在Towards Data Science上看過一篇文章,講的是用Pandas做數據清洗,作者將常用的清洗邏輯封裝成了一個個的清洗函數。

https://towardsdatascience.com/the-simple-yet-practical-data-cleaning-codes-ad27c4ce0a38

而公司的業務數據一般存儲在數據倉庫裡面,數據量很大,這時候用Pandas處理是不大方便的,更多時候用的是HiveSQL和MySql做處理。

基於此,我拓展了部分內容,寫了一個常用數據清洗的SQL對比版,腳本很簡單,重點是這些清洗場景和邏輯,大綱如圖:

01 刪除指定列、重命名列

場景

多數情況並不是底表的所有特徵(列)都對分析有用,這個時候就只需要抽取部分列,對於不用的那些列,可以刪除。

重命名列可以避免有些列的命名過於冗長(比如Case When 語句),且有時候會根據不同的業務指標需求來命名。

刪除列Python版:
df.drop(col_names, axis=1, inplace=True)

刪除列SQL版:
1、select col_names from Table_Name

2、alter table tableName drop column columnName

重命名列Python版:
df.rename(index={'row1':'A'},columns ={'col1':'B'})

重命名列SQL版:
select col_names as col_name_B from Table_Name

因為一般情況下是沒有刪除的權限(可以構建臨時表),反向思考,刪除的另一個邏輯是選定指定列(Select)。

02 重複值、缺失值處理

場景:比如某網站今天來了1000個人訪問,但一個人一天中可以訪問多次,那資料庫中會記錄用戶訪問的多條記錄,而這時候如果想要找到今天訪問這個網站的1000個人的ID並根據此做用戶調研,需要去掉重複值給業務方去回訪。

缺失值:NULL做運算邏輯時,返回的結果還是NULL,這可能就會出現一些腳本運行正確,但結果不對的BUG,此時需要將NULL值填充為指定值。

重複值處理Python版:
df.drop_duplicates()

重複值處理SQL版:
1、select distinct col_name from Table_Name

2、select col_name from Table_Name group bycol_name

缺失值處理Python版:
df.fillna(value = 0)

df1.combine_first(df2)

缺失值處理SQL版:
1、select ifnull(col_name,0) value from Table_Name

2、select coalesce(col_name,col_name_A,0) as value from Table_Name

3、select case when col_name is null then 0 else col_name end from Table_Name

03 替換字符串空格、清洗*%@等垃圾字符、字符串拼接、分隔等字符串處理

場景:理解用戶行為的重要一項是去假設用戶的心理,這會用到用戶的反饋意見或一些用研的文本數據,這些文本數據一般會以字符串的形式存儲在資料庫中,但用戶反饋的這些文本一般都會很亂,所以需要從這些髒亂的字符串中提取有用信息,就會需要用到文字符串處理函數。

字符串處理Python版:
## 1、空格處理
df[col_name] = df[col_name].str.lstrip() 

## 2、*%d等垃圾符處理
df[col_name].replace(' &#.*', '', regex=True, inplace=True)

## 3、字符串分割
df[col_name].str.split('分割符')

## 4、字符串拼接
df[col_name].str.cat()

字符串處理SQL版:
## 1、空格處理
select ltrim(col_name) from Table_name 

## 2、*%d等垃圾符處理
select regexp_replace(col_name,正則表達式) from Table_name 

## 3、字符串分割
select split(col_name,'分割符') from Table_name 

## 4、字符串拼接
select concat_ws(col_name,'拼接符') from Table_name 

04  合併處理

場景:有時候你需要的特徵存儲在不同的表裡,為便於清洗理解和操作,需要按照某些欄位對這些表的數據進行合併組合成一張新的表,這樣就會用到連接等方法。

合併處理Python版:

左右合併
1、pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,
         left_index=False, right_index=False, sort=True,
         suffixes=('_x', '_y'), copy=True, indicator=False,
         validate=None)
2、pd.concat([df1,df2])

上下合併
df1.append(df2, ignore_index=True, sort=False)

合併處理SQL版:

左右合併
select A.*,B.* from Table_a A join Table_b B on A.id = B.id

select A.* from Table_a A left join Table_b B on A.id = B.id

上下合併
## Union:對兩個結果集進行併集操作,不包括重複行,同時進行默認規則的排序;
## Union All:對兩個結果集進行併集操作,包括重複行,不進行排序;

select A.* from Table_a A 
union
select B.* from Table_b B 

# Union 因為會將各查詢子集的記錄做比較,故比起Union All ,通常速度都會慢上許多。一般來說,如果使用Union All能滿足要求的話,務必使用Union All。 

場景:假如現在你是某寶的分析師,要分析今年不同店的不同品類銷售量情況,需要找到那些銷量較好的品類,並在第二年中加大曝光,這個時候你就需要將不同店裡不同品類進行分組,並且按銷量進行排序,以便查找到每家店銷售較好的品類。Demo數據如上,一共a,b,c三家店鋪,賣了不同品類商品,銷量對應如上,要找到每家店賣的最多的商品。
窗口分組Python版:

df['Rank'] = df.groupby(by=['Sale_store'])['Sale_Num'].transform(lambda x: x.rank(ascending=False))

窗口分組SQL版:

select 
  * 
from
  (
  Select 
    *,
    row_number() over(partition by Sale_store order by Sale_Num desc) rk
  from 
    table_name
  ) b where b.rk = 1

可以很清晰的看到,a店鋪賣的最火的是蔬菜,c店鋪賣的最火的是雞肉,b店鋪?

嗯,b店鋪很不錯,賣了888份寶器狗。

總結,上面的內容核心是掌握這些數據清洗的應用場景,這些場景幾乎可以涵蓋90%的數據分析前數據清洗的內容。而對於分析模型來說,SQL和Python都是工具,如果熟悉SQL,是能夠更快速、方便的將特徵清洗用SQL實現。

相關焦點

  • 跳刀圈耍火把:泰國猴子劇團十八般武藝樣樣行
    泰國猴子「賣藝」,十八般武藝樣樣行。  中新網3月11日電 泰國猴子「賣藝」,十八般武藝樣樣行。
  • 油罐車司機偷油的「十八般武藝」圖解
    油罐車司機偷油的「十八般武藝」圖解2016-09-06 轉載 油站圈圈手段一:卸油過程中,利用卸油員離開卸油區的空隙,從監控系統監控不到的一側卸油口接出車內油品
  • 看銀盛泰人玩轉十八般武藝!
    平日裡兢兢業業的銀盛泰小夥伴們十八般武藝盡數使出,一場半年會全程高能,毫無尿點!具體情況待大銀給你說道說道~所謂臺上十分鐘,臺下十年功……咱們晚會的節目質量高,小夥伴們付出的精力當然也不小!
  • 原 創|:《暴走大事件第五季》熱點+才藝,十八般武藝,你確定你不瞧瞧?
    基於過硬的節目質量,它的播放量也達到了四季加起來超過25億的超高數據。從2013年第一季開播,直到現在,它已經陪伴我們走過了整整四個年頭,而《暴走大事件第五季》也開始播出了。而這些元素在之前的《暴走大事件》裡面就已經現身過,應該說是提前拿出來試試水了。
  • 數據治理 | 處理數據:兩位經驗研究者的經驗
    ²我們主要運用Stata(不是唯一)來處理原始數據並準備分析。Stata允許用戶使用幾個簡單的命令和一個非常簡單的方法從多種格式(如CSV,TXT,XLSX)中導入數據。SAS也是一個有用的數據處理工具,它能比Stata更有效地管理大型數據集,但它的價格要高得多,而且令人生畏。Stata還能夠將數據導出為包括Excel在內的多種格式,這對進行基本的數據探索非常有用。
  • SQL Server 2017 正式發布:同時支持 Windows 和 Linux
    > 來自:開源中國社區連結:https://www.oschina.net/news/89263/sql-server
  • Python數據可視化:2018年電影分析
    本次利用貓眼電影,實現對2018年的電影大數據進行分析。本次只對有電影評分的數據進行獲取。sql)db.close()其中票房收入數據類型為BIGINT(19位數),最大為18446744073709551615。
  • 環境大數據應用的最新進展與趨勢
    隨著我國不斷加大對環境治理的投入力度,環境領域的社會科學研究成果逐漸成為支撐科學決策的重要基礎組成部分。過去十餘年間,研究我國環境經濟、環境政策與環境治理的社會科學研究數量呈現出爆炸式增長的態勢,其中不少研究發表在國內外頂尖學術期刊上,並且產生了巨大的決策與社會影響力,這些成果中大部分研究的一個重要特徵就是採用了各類環境數據對相關科學問題進行深入研究。
  • 綠林功夫俠「十八般」兵器來啦~
    在油田百日攻堅創效會戰中,物業服務中心的「女漢子」,也耍起了「十八般」兵器。「女漢子」「十八般兵器」呈上來!月牙鏟在手,雜草你快點走!
  • 鍾開斌:利用大數據助推城市安全管理
    在1月27日舉行的2018網際網路大數據與社會治理南京智庫峰會上,國家行政學院應急管理教研部教授鍾開斌以公共場所人群聚集安全管理為例,探討了如何利用大數據更好地為城市安全管理提供服務
  • 白酒:開山十八般42度500ml淨香型
    開山 十八般
  • 大數據偵查人才訓練班學什麼
    大數據偵查人才訓練班是偵查系卓越人才培養計劃的重要組成部分,領導高度重視,組織教學團隊,創新教學形式,力圖打造一支政治堅定、專業過硬的數據偵查新銳人才隊伍。在課堂講授外,偵查系積極邀請省內大數據實戰專家,為人才訓練班學員開展系列講座。
  • 心中有「數」:真實世界數據的適用性評價和治理
    [1] 國家藥品監督管理局藥品審評中心.用於產生真實世界證據的真實世界數據指導原則(徵求意見稿)[EB/OL]. http://www.cde.org.cn/zdyz.do?method=largePage&id=1ea9f09686e122da.[2]https://mp.weixin.qq.com/s/rQdWCifio0usbVuoWOJB9w.
  • 2018排名數據填報邀請·中國健康管理(體檢)機構競爭力評價
    2: 從區域總監處獲取數據採集表《醫院全稱+艾力彼2018中國健康管理(體檢)機構競爭力評價數據採集表(paiming@ailibi.com)》。3: 根據表格說明填寫數據並統一反饋至郵箱paiming@ailibi.com。4: 如您對填寫有任何疑問,請與田老師(13466555575,tly75@aliyun.com)聯繫。
  • RO日常運行應記錄哪些數據?
    02   RO運行數據運行數據可以說明.RO系統的性能,在整個RO使用期所有的數據都要收集和記錄,這些數據與定期的水分析一起為評價RO裝置的性能提供資料。
  • 當SQL Server愛上Linux:配置 SQL Server 2017 上的可用性組初體驗
    -- 10(1 rows affected)如果在備庫中嘗試更新數據,將會遇到以下錯誤。sys.dm_hadr_database_replica_cluster_states;select name,database_id,replica_id,group_database_id from sys.databases;參考文檔本文配置步驟的參考文檔為:https://docs.microsoft.com/en-us/sql
  • Python數據分析:股票數據分析案例
    步驟:準備數據可視化數據、審查數據處理數據根據ACF、PACF定階擬合ARIMA模型預測準備數據    # 指定股票分析開始日期    start_date = datetime.datetime(2009, 1, 1)    # 指定股票分析截止日期    end_date = datetime.datetime(2019, 4, 1)    # 股票代碼    stock_code = '600519.SS'    # 滬市貴州茅臺
  • 大數據2015:Hadoop和大數據-60款頂級大數據開源工具
    PandasPandas項目包括基於Python程式語言的數據結構和數據分析工具。它讓企業組織可以將Python用作R之外的一種選擇,用於大數據分析項目。支持的作業系統:Windows、Linux和OS X。
  • 【第916期】市民生監督大數據平臺上線運行啟動儀式舉行
    11月19日,市民生監督大數據平臺上線運行啟動儀式在市紀委辦公樓舉行,市委常委、市紀委書記、市監委主任李建民,市委常委、常務副市長擺向陽出席。 李建民表示,民生監督大數據平臺能夠讓群眾全面了解、實時監督涉及民生領域的資金和項目,「三資三務」情況,有助於打通基層監督的「最後一公裡」,進一步強化對權力運行的制約和監督。
  • 匯總:大數據開源框架技術掃盲
    (Azkaban、Oozie、Airflow)數據治理 (Ranger 、Sentry、Atlas)可視化    (Kibana 、D3.js、ECharts)數據挖掘 (Mahout 、MADlib 、Spark ML、TensorFlow、Keras)雲平臺    (Amazon S3、GCP、Microsoft Azure)