104學習精靈

資料分析

資料分析
關注
邀請朋友
邀請朋友

Line

Facebook

Twitter

複製連結

取消
關於教室
關注人數 2 人
104人力銀行從職缺中挑選出常見技能所成立的官方教室,提供大家進行共學互動。
學習主持人
持續分享知識,
有機會成為官方教室主持人
教室標籤
關於教室
關注人數 2 人
104人力銀行從職缺中挑選出常見技能所成立的官方教室,提供大家進行共學互動。
學習主持人
持續分享知識,
有機會成為官方教室主持人
教室標籤
Hi~ 歡迎分享學習資源,有學習問題可匿名向Giver發問!
我要分享
我要提問

資料分析 學習推薦

全部
影片
文章

不知如何開始嗎? 先進行技能挑戰吧~

技能挑戰:初級
目前等級:未達初級
0 人已通過「初級」測驗,通過率0%,和學習精靈一起探索知識、增強能力!
我要挑戰
Mike Ku

Learn Code With Mike品牌創辦人

01/21 21:53

3個實用的Pandas套件清理重複資料教學
本文以Kaggle網站的Amazon 2009-2019年Top50暢銷書資料集( https://www.kaggle.com/sootersaalu/amazon-top-50-bestselling-books-2009-2019 )為例,教大家如何查找及清理資料集的重複資料,提升資料的品質。
Q: Pandas duplicated()查找重複資料
想要使用Pandas套件查找資料集的重複資料,利用duplicated()方法(Method)可以得到每筆資料的重複狀態,True代表重複,False為沒重複,如下範例:
import pandas as pd
df = pd.read_csv('bestsellers with categories.csv')
print(df.duplicated())
接著,透過Pandas套件的括號[]語法即可檢視重複資料的各欄位資料,如下範例:
df = pd.read_csv('bestsellers with categories.csv')
print(df[df.duplicated()])
Pandas套件的duplicated()方法(Method)除了能夠查找所有欄位資料完全一樣的重複資料外,也提供了以下兩個關鍵字參數,來客製化查找的方式:
1. subset-查找特定欄位的重複資料
2. keep-保留第一筆(first)、最後一筆(last)或全部(False)的重複資料
如下範例:
df = pd.read_csv('bestsellers with categories.csv')
column_names = ['Name', 'Author', 'Year', 'Genre']
df = df[df.duplicated(subset=column_names, keep=False)]
print(df)
以上範例即是查找Name(書名)、Author(作者)、Year(出版年)及Genre(類型)四個欄位都一樣的重複資料,並且全部保留。
Q: Pandas drop_duplicates()刪除重複資料
從資料集裡找到重複的資料後,接下來,最常見的就是進行刪除或群組處理。
而要刪除完全一樣的重複資料,可以利用Pandas套件的drop_duplicates()方法(Method),如下範例:
df = pd.read_csv('bestsellers with categories.csv')
df.drop_duplicates(inplace=True)
其中,inplace關鍵字參數代表直接從現有資料集中刪除重複資料。
另外,要刪除特定欄位重複的資料,同樣可以透過subset及keep關鍵字參數來達成,如下範例:
df = pd.read_csv('bestsellers with categories.csv')
column_names = ['Name', 'Author', 'Year', 'Genre']
df.drop_duplicates(subset=column_names, keep='first', inplace=True)
Q: Pandas groupby()、agg()群組重複資料
除了可以利用Pandas套件的drop_duplicates()方法(Method)刪除重複資料外,有時基於商業邏輯,可以透過群組的方式解決重複資料。
這時候,就可以利用Pandas套件的groupby()方法(Method)群組相同資料的欄位,以及agg()方法(Method),統計運算剩餘的不同資料欄位,達到合併重複資料成一筆的效果,如下範例:
df = pd.read_csv('bestsellers with categories.csv')
column_names = ['Name', 'Author', 'Year', 'Genre']
summeries = {'User Rating': 'mean', 'Reviews': 'sum', 'Price': 'mean'}
df = df.groupby(by=column_names).agg(summeries).reset_index()
print(df)
如果想要學習更多的Python應用教學,歡迎前往Learn Code With Mike(https://www.learncodewithmike.com/2022/01/pandas-drop-duplicate-data.html
)網站觀看更多精彩內容。
拍手 3 留言 0 觀看 163 收藏 0
Mike Ku

Learn Code With Mike品牌創辦人

01/21 21:25

善用Pandas套件幫你清理資料範圍異常的資料
本文將以Kaggle網站的Kindle Store電子書店評論資料集( https://www.kaggle.com/bharadwaj6/kindle-reviews )為例,來和大家分享如何利用Pandas套件來處理數字範圍錯誤。
Q: Pandas數字範圍處理
首先,利用Pandas套件讀取資料集,如下範例:
import pandas as pd
df = pd.read_csv('kindle_reviews.csv')
print(df)
假設我們只想要分析「overall評價欄位」1~4分的書籍,這時候,評價為5的書籍資料就超出了分析需求範圍,如果沒有進行處理,就會讓分析結果失去準確性。
而想要利用Pandas套件處理數字範圍的資料,有以下兩種常見的方式:
1.刪除資料
通常會建議超過範圍資料的占比較小時,才考慮透過刪除的方式,否則,超過範圍資料的占比過大,刪除可能造成重要資料訊息的遺失。
而Pandas套件刪除資料的方式分為兩種,可以是選擇所需的範圍資料,如下範例:
df = pd.read_csv('kindle_reviews.csv')
df = df[df['overall'] <= 4]
或將超過範圍的資料刪除,如下範例:
df = pd.read_csv('kindle_reviews.csv')
df.drop(df[df['overall'] > 4].index, inplace=True)
可以透過assert陳述式來進行欄位資料範圍的驗證,如下範例:
assert df['overall'].max() <= 4
PS.沒有顯示訊息代表驗證通過
Q: Pandas日期範圍處理
另一個常見的資料範圍錯誤,就是日期資料,像是含有未來日期的資料等。要利用Pandas套件處理日期範圍錯誤的資料,可以先將欄位資料型態轉型為日期,方便之後的日期資料操作,如下範例:
df = pd.read_csv('kindle_reviews.csv')
df['reviewTime'] = pd.to_datetime(df['reviewTime'])
print(df)
接著,同樣可以使用下兩種解決方法:
1.刪除資料
引用datetime模組(Module),來取得目前的日期,如下範例:
import pandas as pd
import datetime
df = pd.read_csv('kindle_reviews.csv')
df['reviewTime'] = pd.to_datetime(df['reviewTime'])
today = datetime.date.today()
這時候,就可以使用Pandas套件,利用目前的日期來選擇有效的「ReviewTime評論日期欄位」資料,如下範例:
df = pd.read_csv('kindle_reviews.csv')
df['reviewTime'] = pd.to_datetime(df['reviewTime'])
today = datetime.date.today()
df = df[df['reviewTime'].dt.date <= today]
或是刪除「ReviewTime評論日期欄位」中含有未來日期的資料,如下範例:
df = pd.read_csv('kindle_reviews.csv')
df['reviewTime'] = pd.to_datetime(df['reviewTime'])
today = datetime.date.today()
df.drop(df[df['reviewTime'].dt.date > today].index, inplace=True)
刪除後,利用assert陳述式來驗證「ReviewTime評論日期欄位」不含未來日期的資料,如下範例:
assert df.reviewTime.max().date() <= today
如果想要學習更多的Python應用教學,歡迎前往Learn Code With Mike(https://www.learncodewithmike.com/2022/01/processing-data-range-with-pandas.html
)網站觀看更多精彩內容。
拍手 3 留言 0 觀看 104 收藏 0
Mike Ku

Learn Code With Mike品牌創辦人

01/20 21:26

教你用Pandas套件清理資料中的常見資料型態問題(下)
想要實作資料分析,讀取資料是第一步所要執行的動作,而如果沒有正確的進行資料前處理(Data Preprocessing),就會影響最後分析結果的準確性及可靠性。
本文就先針對「資料型態」,來和大家分享如何有效找出髒資料(Dirty Data),並且利用Pandas套件來進行資料處理或清理,避免髒資料(Dirty Data)導致分析的副作用。
Q: Pandas類別資料型態(category)處理
在實作機器學習或分類資料的時候,有時會以數字來分別表示不同類別的資料。
同樣以Kaggle網站的ASUS筆電資料集( https://www.kaggle.com/bhageshcodebeast/asus-laptops-2020-jun )為例,為了進行示範,Mike將「Category筆電類別欄位」利用以下三個數字表示:
0-其他
1-Premium
2-Platinum
Pandas讀取資料集後,如下範例:
import pandas as pd
df = pd.read_csv('AsusLaptops.csv')
print(df)
而各欄位的資料型態,如下範例:
import pandas as pd
df = pd.read_csv('AsusLaptops.csv')
print(df.info())
可以看到Pandas套件判定「Category筆電類別欄位」為int64(整數)型態,當利用Pandas套件的describe()方法(Method)進行摘要性統計的時候,就會看到數字型態的統計結果,如下範例:
import pandas as pd
df = pd.read_csv('AsusLaptops.csv')
print(df['Category'].describe())
但事實上,「Category筆電類別欄位」為類別資料型態(category),如果沒有將欄位進行轉型,就有可能誤導後續的操作或統計。
解決方法,可以使用Pandas套件的astype()方法(Method),將「Category筆電類別欄位」轉型為類別型態(category),這時候,再透過describe()方法(Method)來查看摘要性統計的時候,就會是類別型態(category)的統計結果,如下範例:
import pandas as pd
df = pd.read_csv('AsusLaptops.csv')
df['Category'] = df['Category'].astype('category') #轉型
print(df['Category'].describe())
以上就是在進行資料分析的過程中,常見的資料型態問題,本文和大家分享了利用Pandas套件的info()方法(Method),來查看各欄位的資料型態是否與需求相符,如果其中含有髒資料(Dirty Data),可以使用strip()方法(Method)進行資料清理,以及透過astype()方法(Method)轉型為正確的資料型態。
如果想要學習更多的Python應用教學,歡迎前往Learn Code With Mike(https://www.learncodewithmike.com/2021/12/processing-data-type-with-pandas.html
)網站觀看更多精彩內容。
拍手 2 留言 0 觀看 209 收藏 0
Mike Ku

Learn Code With Mike品牌創辦人

01/20 21:12

教你用Pandas套件清理資料中的常見資料型態問題(上)
Q: Pandas數字資料型態處理
在讀取資料集時,Pandas套件都會自動判定欄位的資料型態,這時候,當其中的資料含有髒資料(Dirty Data),就會發生誤判的情況,導致後續分析或計算的錯誤。
這邊以Kaggle網站的ASUS筆電資料集( https://www.kaggle.com/bhageshcodebeast/asus-laptops-2020-jun )為例,讀取後如下範例:
import pandas as pd
df = pd.read_csv('AsusLaptops.csv')
print(df)
接下來,使用Pandas套件的info()方法(Method),來查看各欄位的資料型態,如下範例:
import pandas as pd
df = pd.read_csv('AsusLaptops.csv')
print(df.info())
其中,會發現本來應該為數字型態的「Warranty保固期欄位」,Pandas套件判定為object型態,以字串型態進行處理,所以,如果將「Warranty保固期欄位」進行加總,就會得到如下範例:
import pandas as pd
df = pd.read_csv('AsusLaptops.csv')
print(df['Warrenty'].sum())
會導致Pandas套件誤判,就是因為「Warranty保固期欄位」中,包含了數字以外的髒資料(Dirty Data),造成Pandas套件無法以數字型態進行加總。
而資料清理的方法,就是利用Pandas套件的strip()清除前後字串方法(Method),移除Y字串,再透過astype()方法(Method)將欄位轉型為int(整數),如下範例:
import pandas as pd
df = pd.read_csv('AsusLaptops.csv')
df['Warrenty_Trim'] = df['Warrenty'].str.strip('Y') #移除Y字串
df['Warrenty_Year'] = df['Warrenty_Trim'].astype('int') #轉型為int整數
接下來,可以利用assert陳述式來驗證欄位型態,如果沒有錯誤訊息,代表驗證的條件成立,反之,則會顯示錯誤訊息,如下範例:
import pandas as pd
df = pd.read_csv('AsusLaptops.csv')
df['Warrenty_Trim'] = df['Warrenty'].str.strip('Y') #移除Y字串
df['Warrenty_Year'] = df['Warrenty_Trim'].astype('int') #轉型為int整數
assert df['Warrenty_Year'].dtype == 'int'
這時候,將「Warranty保固期欄位」進行加總,就會得到正確的計算結果,如下範例:
import pandas as pd
df = pd.read_csv('AsusLaptops.csv')
df['Warrenty_Trim'] = df['Warrenty'].str.strip('Y') #新建欄位移除Y字串
df['Warrenty_Year'] = df['Warrenty_Trim'].astype('int') #新建欄位將去除字串的欄位轉型為int整數
assert df['Warrenty_Year'].dtype == 'int' #驗證欄位資料型態
print(df['Warrenty_Year'].sum()) #執行結果99
如果想要學習更多的Python應用教學,歡迎前往Learn Code With Mike(https://www.learncodewithmike.com/2021/12/processing-data-type-with-pandas.html
)網站觀看更多精彩內容。
拍手 2 留言 0 觀看 90 收藏 0
Mike Ku

Learn Code With Mike品牌創辦人

01/20 20:57

3個Pandas套件比較CSV檔案資料之間的差異秘訣(下)
本文以Kaggle網站的「Coursera Course Dataset(https://www.kaggle.com/siddharthm1698/coursera-course-dataset
)」兩個資料集為例,來分享Pandas套件比較CSV檔案資料集的常用方法。
Q: Pandas查找兩個資料集之間的相異資料
相反的,如果想要知道兩個資料集不相同的資料,就分為「左邊(Left)有而右邊(Right)沒有」及「左邊(Left)沒有而右邊(Right)有」的情況。
同樣使用Pandas套件的merge()方法(Method),設定how關鍵字參數(Keyword Argument)為「outer」,即可查找出兩個資料集的相異資料,如下範例:
import pandas as pd
df1 = pd.read_csv('coursea_data.csv').rename(columns={'course_title':'name'})
df2 = pd.read_csv('Coursera_courses.csv')
result = df1.merge(df2, how='outer', indicator=True)
print(result)
其中,indicator=True,就是在執行結果的最後一欄(_merge),標示出兩個資料集的比較結果,包含:
1. left_only:左邊資料集有而右邊資料集沒有的資料
2. right_only:左邊資料集沒有而右邊資料集有的資料
3. both:兩邊資料集皆擁有的資料
所以,想要查找出「左邊(Left)有而右邊(Right)沒有」的資料,利用Pandas套件的loc[]語法,篩選出「_merge」欄位為left_only即可,如下範例:
import pandas as pd
df1 = pd.read_csv('coursea_data.csv').rename(columns={'course_title':'name'})
df2 = pd.read_csv('Coursera_courses.csv')
result = df1.merge(df2, how='outer', indicator=True).loc[lambda x : x['_merge'] == 'left_only']
print(result)
而「左邊(Left)沒有而右邊(Right)有」的資料,則篩選出「_merge」欄位為right_only,如下範例:
import pandas as pd
df1 = pd.read_csv('coursea_data.csv').rename(columns={'course_title':'name'})
df2 = pd.read_csv('Coursera_courses.csv')
result = df1.merge(df2, how='outer', indicator=True).loc[lambda x : x['_merge'] == 'right_only']
print(result)
如果想要學習更多的Python應用教學,歡迎前往Learn Code With Mike(https://www.learncodewithmike.com/2021/10/pandas-compare-values-between-dataframes.html
)網站觀看更多精彩內容。
拍手 1 留言 0 觀看 66 收藏 0
你可能感興趣的教室
一零四資訊科技股份有限公司 版權所有 © 2022 建議瀏覽器 Chrome / IE11.0 以上