如果有在實作資料分析或機器學習的朋友就會知道,為了要群組或分類相似的資料,會使用標籤、代號或數字等類別資料(Categorical Data)進行分群。像是影像辨識,將相近的圖片使用特定的標籤來代表,提升分析或訓練模型的效率。
但是當資料量非常龐大時,就可能因為人為輸入或解析有誤,導致類別資料(Categorical Data)產生不一致的問題。所以,本文以Kaggle網站的銀行直銷資料集(bank-direct-marketing-campaigns.csv)為例,來聊聊如何利用Pandas套件來進行清理。重點包含:
- 什麼是類別資料(Categorical Data)
- Pandas類別資料(Categorical Data)的變數清理
- Pandas類別資料(Categorical Data)的成員清理
一、什麼是類別資料(Categorical Data)
也就是預先定義的數個「標籤」或「數字」等,來代表資料集裡特定群組的資料。
舉例來說,銀行直銷資料集(bank-direct-marketing-campaigns.csv)的「job(職業)」欄位,在Kaggle文件上已預先定義幾個類別資料(Categorical Data),如下圖:
所以,「job(職業)」欄位的資料就只會包含預先定義的類別資料(Categorical Data),可以透過Pandas套件的value_counts()來檢視各類別資料(Categorical Data)的筆數,如下範例:
import pandas as pd df = pd.read_csv('bank-direct-marketing-campaigns.csv') print(df['job'].value_counts())
執行結果
二、Pandas類別資料(Categorical Data)的變數清理
雖然預先定義了類別資料(Categorical Data),但是在蒐集與整合各種資料的過程中,類別資料(Categorical Data)的變數就可能含有以下2種髒資料(Dirty Data):
- 英文大小寫不一致
- 含有空白
如果沒有加以處理,就可能誤導分析的結果。筆者為了示範,將銀行直銷資料集(bank-direct-marketing-campaigns.csv)的「job(職業)」欄位加以調整如下圖:
看起來同為services(服務業),但是大小寫不一致,就會導致資料統計上的錯誤,如下範例:
import pandas as pd df = pd.read_csv('bank-direct-marketing-campaigns.csv') print(df['job'].value_counts())
執行結果
這時候,想要利用Pandas套件來清理類別資料(Categorical Data)的變數,可以都轉為大寫,如下範例:
import pandas as pd df = pd.read_csv('bank-direct-marketing-campaigns.csv') df['job'] = df['job'].str.upper() #轉為大寫 print(df)
截取部分執行結果
或是轉為小寫,如下範例:
import pandas as pd df = pd.read_csv('bank-direct-marketing-campaigns.csv') df['job'] = df['job'].str.lower() #轉為小寫 print(df)
截取部分執行結果
讓資料集裡的類別資料(Categorical Data)變數和預先定義的保持一致。
而含有空白的類別資料(Categorical Data)變數,同樣會影響分析的結果,使用Pandas套件進行資料清理的方式,如下範例:
import pandas as pd df = pd.read_csv('bank-direct-marketing-campaigns.csv') df['job'] = df['job'].str.strip() #去除前後空白
三、Pandas類別資料(Categorical Data)的成員清理
另一個類別資料(Categorical Data)常發生的問題,就是欄位中包含了非類別資料(Categorical Data)的成員。筆者調整銀行直銷資料集(bank-direct-marketing-campaigns.csv)後,示範如下圖:
我們都知道,「job(職業)」欄位預先定義的類別資料(Categorical Data)成員並不包含teacher(老師),這時候,該如何利用Pandas套件來進行刪除呢?
這邊就會建議大家預先定義類別資料(Categorical Data)時,能夠另外建立檔案來存放,以本文為例,新增job-category.csv檔案,存放「job(職業)」欄位的類別資料(Categorical Data)成員,如下範例:
import pandas as pd df = pd.read_csv('bank-direct-marketing-campaigns.csv') job_category = pd.read_csv('job-category.csv') print(job_category)
執行結果
接下來,就可以在原資料集,使用Set集合,取「job(職業)」欄位的唯一值,再透過difference()方法(Method),取出與類別資料(Categorical Data)成員不一樣的值,如下範例:
import pandas as pd df = pd.read_csv('bank-direct-marketing-campaigns.csv') job_category = pd.read_csv('job-category.csv') difference_category = set(df['job']).difference(job_category['job_category']) print(difference_category) #執行結果 {'teacher'}
而要檢視這筆非類別資料(Categorical Data)成員的各欄位資料,則可以利用Pandas套件的isin()方法(Method)來達成,如下範例:
import pandas as pd df = pd.read_csv('bank-direct-marketing-campaigns.csv') job_category = pd.read_csv('job-category.csv') difference_category = set(df['job']).difference(job_category['job_category']) difference_row = df['job'].isin(difference_category) print(df[difference_row])
截取部分執行結果
最後,使用Pandas套件的「~」語法,取得反向數據,也就是剩餘符合類別資料(Categorical Data)成員的資料,如下範例:
import pandas as pd df = pd.read_csv('bank-direct-marketing-campaigns.csv') job_category = pd.read_csv('job-category.csv') difference_category = set(df['job']).difference(job_category['job_category']) difference_row = df['job'].isin(difference_category) result = df[~difference_row] print(result)
截取部分執行結果
四、小結
本文整理了Pandas套件在清理類別資料(Categorical Data)的過程中,需要注意的「變數」及「成員」問題,讓欄位裡的類別資料(Categorical Data)能夠和預先定義的保有一致性,避免含有不一致的髒資料(Dirty Data)影響分析的結果。希望本文有幫助到大家學會使用Pandas套件清理類別資料(Categorical Data)。
本文是筆者Mike在DataCamp平台上所學到的Pandas套件資料清理技巧,加以應用和大家分享。DataCamp平台上有非常多與資料科學、分析有關的教學,包含資料視覺化、清理、機器學習等,並且有專家帶領你完成資料分析專案,大家有興趣的話,可以加入DataCamp平台一起學習唷。
如果喜歡我的文章,別忘了在下面訂閱本網站,以及幫我按五下Like(使用Google或Facebook帳號免費註冊),支持我創作教學文章,回饋由LikeCoin基金會出資,完全不會花到錢,感謝大家。
- [Pandas教學]3個實用的Pandas套件清理重複資料教學
- [Pandas教學]善用Pandas套件幫你清理資料範圍異常的資料
- [Pandas教學]教你用Pandas套件清理資料中的常見資料型態問題
- [Pandas教學]使用Pandas套件將資料集拆分成多個CSV檔案資料應用
- [Pandas教學]3個Pandas套件比較CSV檔案資料之間的差異秘訣
- [Pandas教學]利用Pandas套件的to_html方法在網頁快速顯示資料分析結果
- [Pandas教學]4個必學的Pandas套件處理遺漏值(Missing Value)資料方法
- [Pandas教學]有效利用Pandas套件的pipe方法打造資料處理流程管道
- [Pandas教學]3個優化Pandas套件讀取大型CSV檔案資料的技巧
- [Pandas教學]一定要學會的Pandas套件讀寫Google Sheets試算表資料秘訣
- [Pandas教學]客製化Pandas DataFrame樣式提升資料可讀性的實用方法
- [Pandas教學]3個Pandas套件合併多個CSV檔案資料的實用技巧
- Pandas教學]看完這篇就懂Pandas套件如何即時讀取API的回應資料
- [Pandas教學]快速掌握Pandas套件讀寫SQLite資料庫的重要方法
- [Pandas教學]輕鬆入門3個常見的Pandas套件排序資料方式
- [Pandas教學]有效利用Pandas套件篩選資料的應用技巧
- [Pandas教學]善用Pandas套件的Groupby與Aggregate方法提升資料解讀效率
- [Pandas教學]使用Pandas套件實作資料清理的必備觀念(上)
- [Pandas教學]使用Pandas套件實作資料清理的必備觀念(下)
- Visual Studio Code漂亮印出Pandas DataFrame資料的實用方法
- [Pandas教學]資料視覺化必懂的Pandas套件繪製Matplotlib分析圖表實戰
- [Pandas教學]5個實用的Pandas讀取Excel檔案資料技巧
- 解析Python網頁爬蟲如何有效整合Pandas套件提升資料處理效率
- [Pandas教學]掌握Pandas DataFrame讀取網頁表格的實作技巧
- [Pandas教學]資料分析必懂的Pandas DataFrame處理雙維度資料方法
- [Pandas教學]資料分析必懂的Pandas Series處理單維度資料方法
留言
張貼留言