ภาพโดยผู้เขียน
การล้างข้อมูลเป็นส่วนสำคัญของกระบวนการวิเคราะห์ข้อมูล เป็นขั้นตอนที่คุณลบข้อผิดพลาด จัดการกับข้อมูลที่ขาดหายไป และตรวจสอบให้แน่ใจว่าข้อมูลของคุณอยู่ในรูปแบบที่คุณสามารถใช้งานได้ หากไม่มีชุดข้อมูลที่ได้รับการทำความสะอาดอย่างดี การวิเคราะห์ใดๆ ในภายหลังอาจบิดเบือนหรือไม่ถูกต้องได้
บทความนี้จะแนะนำเทคนิคสำคัญหลายประการสำหรับการล้างข้อมูลใน Python โดยใช้ไลบรารีอันทรงพลัง เช่น pandas, numpy, seaborn และ matplotlib
ก่อนที่จะเจาะลึกกลไกการล้างข้อมูล เรามาทำความเข้าใจถึงความสำคัญของมันก่อน ข้อมูลในโลกแห่งความเป็นจริงมักจะยุ่งเหยิง อาจมีรายการที่ซ้ำกัน ประเภทข้อมูลที่ไม่ถูกต้องหรือไม่สอดคล้องกัน ค่าที่หายไป คุณลักษณะที่ไม่เกี่ยวข้อง และค่าผิดปกติ ปัจจัยทั้งหมดเหล่านี้สามารถนำไปสู่การสรุปที่ทำให้เข้าใจผิดเมื่อวิเคราะห์ข้อมูล ทำให้การล้างข้อมูลเป็นส่วนที่ขาดไม่ได้ในวงจรวิทยาศาสตร์ข้อมูล
เราจะกล่าวถึงงานล้างข้อมูลต่อไปนี้
ภาพโดยผู้เขียน
ก่อนที่จะเริ่มต้น เรามานำเข้าไลบรารีที่จำเป็นกันก่อน เราจะใช้แพนด้าเพื่อจัดการข้อมูล และใช้สัตว์ทะเลและ matplotlib สำหรับการแสดงภาพ
นอกจากนี้เรายังจะนำเข้าโมดูล datetime Python เพื่อจัดการวันที่
import pandas as pd
import seaborn as sns
import datetime as dt
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
ก่อนอื่น เราจะต้องโหลดข้อมูลของเราก่อน ในตัวอย่างนี้ เราจะโหลดไฟล์ CSV โดยใช้แพนด้า นอกจากนี้เรายังเพิ่มอาร์กิวเมนต์ตัวคั่นด้วย
df = pd.read_csv('F:KDNuggetsKDN Mastering the Art of Data Cleaning in Pythonproperty.csv', delimiter= ';')
ต่อไป สิ่งสำคัญคือต้องตรวจสอบข้อมูลเพื่อทำความเข้าใจโครงสร้างของข้อมูล ตัวแปรประเภทใดที่เรากำลังดำเนินการอยู่ และมีค่าที่ขาดหายไปหรือไม่ เนื่องจากข้อมูลที่เรานำเข้ามีขนาดไม่ใหญ่มาก เรามาดูชุดข้อมูลทั้งหมดกันดีกว่า
# Look at all the rows of the dataframe
display(df)
ชุดข้อมูลมีลักษณะดังนี้
คุณจะเห็นได้ทันทีว่ามีค่าบางอย่างหายไป นอกจากนี้รูปแบบวันที่ไม่สอดคล้องกัน
ตอนนี้เรามาดูสรุป DataFrame โดยใช้เมธอด info()
# Get a concise summary of the dataframe
print(df.info())
นี่คือผลลัพธ์ของรหัส
เราจะเห็นได้ว่าเฉพาะคอลัมน์ square_feet เท่านั้นที่ไม่มีค่า NULL ดังนั้นเราจึงต้องจัดการเรื่องนี้ นอกจากนี้ คอลัมน์ Advertising_date และ sale_date ยังเป็นประเภทข้อมูลออบเจ็กต์ แม้ว่านี่ควรจะเป็นวันที่ก็ตาม
ตำแหน่งของคอลัมน์ว่างเปล่าโดยสิ้นเชิง เราต้องการมันไหม?
เราจะแสดงวิธีจัดการกับปัญหาเหล่านี้ เราจะเริ่มต้นด้วยการเรียนรู้วิธีลบคอลัมน์ที่ไม่จำเป็น
ชุดข้อมูลมีสองคอลัมน์ที่เราไม่ต้องการในการวิเคราะห์ข้อมูล ดังนั้นเราจะลบออก
คอลัมน์แรกคือผู้ซื้อ เราไม่ต้องการมัน เนื่องจากชื่อของผู้ซื้อไม่ส่งผลกระทบต่อการวิเคราะห์
เรากำลังใช้เมธอด drop() กับชื่อคอลัมน์ที่ระบุ เราตั้งค่าแกนเป็น 1 เพื่อระบุว่าเราต้องการลบคอลัมน์ นอกจากนี้ อาร์กิวเมนต์ inplace ถูกตั้งค่าเป็น True เพื่อให้เราแก้ไข DataFrame ที่มีอยู่ และไม่สร้าง DataFrame ใหม่โดยไม่มีคอลัมน์ที่ถูกลบออก
df.drop('buyer', axis = 1, inplace = True)
คอลัมน์ที่สองที่เราต้องการลบคือตำแหน่ง แม้ว่าการมีข้อมูลนี้อาจเป็นประโยชน์ แต่คอลัมน์นี้กลับว่างเปล่า ดังนั้นเรามาลบออกกันดีกว่า
เราใช้แนวทางเดียวกันกับคอลัมน์แรก
df.drop('location', axis = 1, inplace = True)
แน่นอน คุณสามารถลบสองคอลัมน์นี้พร้อมกันได้
df = df.drop(['buyer', 'location'], axis=1)
ทั้งสองวิธีส่งคืน dataframe ต่อไปนี้
ข้อมูลที่ซ้ำกันอาจเกิดขึ้นในชุดข้อมูลของคุณได้จากหลายสาเหตุ และอาจบิดเบือนการวิเคราะห์ของคุณได้
มาตรวจหารายการที่ซ้ำกันในชุดข้อมูลของเรา ต่อไปนี้เป็นวิธีดำเนินการ
รหัสด้านล่างใช้วิธีการ ซ้ำ () เพื่อพิจารณาการซ้ำซ้อนในชุดข้อมูลทั้งหมด การตั้งค่าเริ่มต้นคือการพิจารณาการเกิดขึ้นครั้งแรกของค่าว่าไม่ซ้ำกันและการเกิดขึ้นครั้งต่อๆ ไปเป็นการซ้ำกัน คุณสามารถแก้ไขพฤติกรรมนี้ได้โดยใช้ เก็บ พารามิเตอร์. ตัวอย่างเช่น df.duplicated(keep=False) จะทำเครื่องหมายรายการที่ซ้ำกันทั้งหมดว่าเป็น True รวมถึงรายการแรกที่เกิดขึ้นด้วย
# Detecting duplicates
duplicates = df[df.duplicated()]
duplicates
นี่คือผลลัพธ์
แถวที่มีดัชนี 3 ถูกทำเครื่องหมายว่าซ้ำกัน เนื่องจากแถว 2 ที่มีค่าเดียวกันเกิดขึ้นครั้งแรก
ตอนนี้เราต้องลบรายการที่ซ้ำกันออก ซึ่งเราทำโดยใช้โค้ดต่อไปนี้
# Detecting duplicates
duplicates = df[df.duplicated()]
duplicates
พื้นที่ drop_duplicates() ฟังก์ชั่นพิจารณาคอลัมน์ทั้งหมดในขณะที่ระบุรายการที่ซ้ำกัน หากคุณต้องการพิจารณาเฉพาะบางคอลัมน์ คุณสามารถส่งเป็นรายการไปยังฟังก์ชันนี้ได้ดังนี้: df.drop_duplicates(subset=['column1', 'column2'])
อย่างที่คุณเห็น แถวที่ซ้ำกันถูกทิ้งไป อย่างไรก็ตาม การจัดทำดัชนียังคงเหมือนเดิม โดยที่ดัชนี 3 หายไป เราจะจัดระเบียบเรื่องนี้ด้วยการรีเซ็ตดัชนี
df = df.reset_index(drop=True)
งานนี้ดำเนินการโดยใช้ รีเซ็ต_ดัชนี() การทำงาน. อาร์กิวเมนต์ drop=True ใช้เพื่อละทิ้งดัชนีดั้งเดิม หากคุณไม่รวมอาร์กิวเมนต์นี้ ดัชนีเก่าจะถูกเพิ่มเป็นคอลัมน์ใหม่ใน DataFrame ของคุณ ด้วยการตั้งค่า drop=True คุณกำลังบอกให้แพนด้าลืมดัชนีเก่าและรีเซ็ตเป็นดัชนีจำนวนเต็มเริ่มต้น
สำหรับการฝึกฝนให้พยายาม ลบรายการที่ซ้ำกันออกจากชุดข้อมูล Microsoft นี้.
บางครั้ง ชนิดข้อมูลอาจถูกตั้งค่าไม่ถูกต้อง ตัวอย่างเช่น คอลัมน์วันที่อาจถูกตีความว่าเป็นสตริง คุณต้องแปลงสิ่งเหล่านี้ให้เป็นประเภทที่เหมาะสม
ในชุดข้อมูลของเรา เราจะดำเนินการดังกล่าวกับคอลัมน์ Advertising_date และ sale_date ตามที่แสดงเป็นประเภทข้อมูลออบเจ็กต์ นอกจากนี้ วันที่ของวันที่ยังได้รับการจัดรูปแบบที่แตกต่างกันไปตามแถวอีกด้วย เราต้องทำให้สอดคล้องกัน พร้อมกับแปลงให้เป็นปัจจุบัน
วิธีที่ง่ายที่สุดคือการใช้ ถึง_datetime() วิธี. อีกครั้ง คุณสามารถทำทีละคอลัมน์ได้ ดังที่แสดงด้านล่าง
เมื่อทำเช่นนั้น เราได้ตั้งค่าอาร์กิวเมนต์ dayfirst เป็น True เนื่องจากวันที่บางวันเริ่มต้นด้วยวันแรก
# Converting advertisement_date column to datetime
df['advertisement_date'] = pd.to_datetime(df['advertisement_date'], dayfirst = True) # Converting sale_date column to datetime
df['sale_date'] = pd.to_datetime(df['sale_date'], dayfirst = True)
คุณยังสามารถแปลงทั้งสองคอลัมน์พร้อมกันได้โดยใช้ สมัคร () วิธีการกับ ถึง_datetime().
# Converting advertisement_date and sale_date columns to datetime
df[['advertisement_date', 'sale_date']] = df[['advertisement_date', 'sale_date']].apply(pd.to_datetime, dayfirst = True)
ทั้งสองวิธีให้ผลลัพธ์ที่เหมือนกัน
ขณะนี้วันที่อยู่ในรูปแบบที่สอดคล้องกัน เราเห็นว่าข้อมูลบางส่วนไม่ได้รับการแปลง มีค่า NaT หนึ่งค่าใน Advertising_date และสองค่าใน sale_date ซึ่งหมายความว่าวันที่หายไป
ตรวจสอบว่าคอลัมน์ถูกแปลงเป็นวันที่โดยใช้หรือไม่ ข้อมูล() วิธี
# Get a concise summary of the dataframe
print(df.info())
อย่างที่คุณเห็น ทั้งสองคอลัมน์ไม่อยู่ในรูปแบบ datetime64[ns]
ตอนนี้ลองแปลงข้อมูลจาก TEXT เป็น NUMERIC ในสิ่งนี้ ชุดข้อมูล Airbnb.
ชุดข้อมูลในโลกแห่งความเป็นจริงมักมีค่าที่ขาดหายไป การจัดการข้อมูลที่ขาดหายไปถือเป็นสิ่งสำคัญ เนื่องจากอัลกอริธึมบางตัวไม่สามารถจัดการกับค่าดังกล่าวได้
ตัวอย่างของเรายังมีค่าที่ขาดหายไปด้วย ดังนั้น เรามาดูวิธีจัดการข้อมูลที่ขาดหายไปสองวิธีที่ใช้บ่อยที่สุดกัน
การลบแถวที่มีค่าหายไป
หากจำนวนแถวที่มีข้อมูลที่ขาดหายไปไม่มีนัยสำคัญเมื่อเทียบกับจำนวนการสังเกตทั้งหมด คุณอาจพิจารณาลบแถวเหล่านี้
ในตัวอย่างของเรา แถวสุดท้ายไม่มีค่าใดๆ ยกเว้นตารางฟุตและวันที่โฆษณา เราไม่สามารถใช้ข้อมูลดังกล่าวได้ ดังนั้นให้ลบแถวนี้ออก
นี่คือโค้ดที่เราระบุดัชนีของแถว
df = df.drop(8)
ตอนนี้ DataFrame มีลักษณะเช่นนี้
แถวสุดท้ายถูกลบไปแล้ว และ DataFrame ของเราก็ดูดีขึ้นแล้ว อย่างไรก็ตาม ยังมีข้อมูลที่ขาดหายไปบางส่วนซึ่งเราจะจัดการโดยใช้วิธีอื่น
การใส่ค่าที่หายไป
หากคุณมีข้อมูลที่ขาดหายไปอย่างมาก กลยุทธ์ที่ดีกว่าการลบอาจเป็นการใส่ร้าย กระบวนการนี้เกี่ยวข้องกับการกรอกค่าที่หายไปตามข้อมูลอื่น สำหรับข้อมูลตัวเลข วิธีการใส่ข้อมูลทั่วไปเกี่ยวข้องกับการใช้การวัดแนวโน้มจากศูนย์กลาง (ค่าเฉลี่ย ค่ามัธยฐาน โหมด)
ใน DataFrame ที่เปลี่ยนแปลงไปแล้ว เรามีค่า NaT (ไม่ใช่เวลา) ในคอลัมน์advert_dateและsale_date เราจะใส่ค่าที่หายไปเหล่านี้โดยใช้ หมายถึง() วิธี
รหัสใช้ เติม() วิธีการค้นหาและเติมค่าว่างด้วยค่าเฉลี่ย
# Imputing values for numerical columns
df['advertisement_date'] = df['advertisement_date'].fillna(df['advertisement_date'].mean())
df['sale_date'] = df['sale_date'].fillna(df['sale_date'].mean())
คุณยังสามารถทำสิ่งเดียวกันได้ในโค้ดบรรทัดเดียว เราใช้ สมัคร () เพื่อใช้ฟังก์ชันที่กำหนดโดยใช้ แลมบ์ดา. เช่นเดียวกับข้างต้น ฟังก์ชันนี้ใช้ เติม() และ หมายถึง() วิธีการเติมค่าที่หายไป
# Imputing values for multiple numerical columns
df[['advertisement_date', 'sale_date']] = df[['advertisement_date', 'sale_date']].apply(lambda x: x.fillna(x.mean()))
ผลลัพธ์ในทั้งสองกรณีมีลักษณะเช่นนี้
คอลัมน์ sale_date ของเรามีเวลาที่เราไม่ต้องการแล้ว มาลบพวกมันกันเถอะ
เราจะใช้ไฟล์ สตริฟไทม์() ซึ่งแปลงวันที่เพื่อแสดงสตริงและรูปแบบเฉพาะ
df['sale_date'] = df['sale_date'].dt.strftime('%Y-%m-%d')
วันที่ตอนนี้ดูเป็นระเบียบเรียบร้อยทั้งหมด
หากคุณจำเป็นต้องใช้ สตริฟไทม์() ในหลายคอลัมน์ คุณสามารถใช้ได้อีกครั้ง แลมบ์ดา ตามวิธีต่อไปนี้
df[['date1_formatted', 'date2_formatted']] = df[['date1', 'date2']].apply(lambda x: x.dt.strftime('%Y-%m-%d'))
ตอนนี้ เรามาดูกันว่าเราจะใส่ค่าหมวดหมู่ที่ขาดหายไปได้อย่างไร
ข้อมูลหมวดหมู่คือข้อมูลประเภทหนึ่งที่ใช้ในการจัดกลุ่มข้อมูลที่มีลักษณะคล้ายคลึงกัน แต่ละกลุ่มเหล่านี้เป็นหมวดหมู่ ข้อมูลเชิงหมวดหมู่สามารถใช้ค่าตัวเลขได้ (เช่น "1" หมายถึง "ชาย" และ "2" หมายถึง "หญิง") แต่ตัวเลขเหล่านั้นไม่มีความหมายทางคณิตศาสตร์ คุณไม่สามารถรวมเข้าด้วยกันได้
โดยทั่วไปข้อมูลตามหมวดหมู่จะแบ่งออกเป็นสองประเภท:
- ข้อมูลที่กำหนด: นี่คือเวลาที่หมวดหมู่จะมีป้ายกำกับเท่านั้นและไม่สามารถจัดเรียงตามลำดับใดๆ ได้ ตัวอย่างได้แก่ เพศ (ชาย หญิง) กรุ๊ปเลือด (A, B, AB, O) หรือสี (แดง เขียว น้ำเงิน)
- ข้อมูลลำดับ: นี่คือช่วงเวลาที่สามารถสั่งซื้อหรือจัดอันดับหมวดหมู่ได้ แม้ว่าช่วงเวลาระหว่างหมวดหมู่จะมีระยะห่างไม่เท่ากัน ลำดับของหมวดหมู่ก็มีความหมาย ตัวอย่าง ได้แก่ ระดับการให้คะแนน (เรตติ้งภาพยนตร์ 1 ถึง 5 ระดับ) ระดับการศึกษา (มัธยมปลาย ระดับปริญญาตรี บัณฑิตศึกษา) หรือระยะของโรคมะเร็ง (ระยะที่ XNUMX ระยะที่ XNUMX ระยะที่ XNUMX)
สำหรับการใส่ข้อมูลหมวดหมู่ที่ขาดหายไป โดยทั่วไปจะใช้โหมดนี้ ในตัวอย่างของเรา คอลัมน์ property_category เป็นข้อมูลที่เป็นหมวดหมู่ (ระบุ) และมีข้อมูลที่ขาดหายไปในสองแถว
มาแทนที่ค่าที่หายไปด้วยโหมด
# For categorical columns
df['property_category'] = df['property_category'].fillna(df['property_category'].mode()[0])
รหัสนี้ใช้ เติม() ฟังก์ชันเพื่อแทนที่ค่า NaN ทั้งหมดในคอลัมน์ property_category มันจะแทนที่ด้วยโหมด
นอกจากนี้ ส่วน [0] ยังใช้เพื่อแยกค่าแรกจากซีรี่ส์นี้ หากมีหลายโหมด ระบบจะเลือกโหมดแรก หากมีโหมดเดียวก็ยังใช้งานได้ดี
นี่คือผลลัพธ์
ข้อมูลตอนนี้ดูค่อนข้างดี สิ่งที่เหลืออยู่คือดูว่ามีค่าผิดปกติหรือไม่
คุณสามารถฝึกจัดการกับค่าว่างได้ คำถามสัมภาษณ์เมตาโดยที่คุณจะต้องแทนที่ NULL ด้วยศูนย์
ค่าผิดปกติคือจุดข้อมูลในชุดข้อมูลที่แตกต่างจากการสังเกตอื่นๆ อย่างชัดเจน ค่าเหล่านี้อาจอยู่ไกลจากค่าอื่นๆ ในชุดข้อมูลเป็นพิเศษ โดยอยู่นอกรูปแบบโดยรวม ถือว่าผิดปกติเนื่องจากค่าของข้อมูลอาจสูงหรือต่ำกว่าอย่างมากเมื่อเทียบกับข้อมูลที่เหลือ
ค่าผิดปกติสามารถเกิดขึ้นได้จากหลายสาเหตุ เช่น:
- ข้อผิดพลาดในการวัดหรืออินพุต
- ข้อมูลเสียหาย
- ความผิดปกติทางสถิติที่แท้จริง
ค่าผิดปกติสามารถส่งผลกระทบอย่างมีนัยสำคัญต่อผลลัพธ์ของการวิเคราะห์ข้อมูลและการสร้างแบบจำลองทางสถิติของคุณ สิ่งเหล่านี้สามารถนำไปสู่การแจกแจงที่บิดเบือน อคติ หรือทำให้สมมติฐานทางสถิติที่เป็นโมฆะ บิดเบือนแบบจำลองที่ประมาณการไว้ ลดความแม่นยำในการทำนายของแบบจำลองการคาดการณ์ และนำไปสู่ข้อสรุปที่ไม่ถูกต้อง
วิธีการที่ใช้กันทั่วไปในการตรวจจับค่าผิดปกติได้แก่ คะแนน Z, IQR (ช่วงระหว่างควอไทล์), บ็อกซ์พล็อต, พล็อตกระจาย และเทคนิคการแสดงภาพข้อมูล ในกรณีขั้นสูงบางกรณี จะมีการใช้วิธีการเรียนรู้ของเครื่องด้วยเช่นกัน
การแสดงข้อมูลเป็นภาพสามารถช่วยระบุค่าผิดปกติได้ Boxplot ของ Seaborn มีประโยชน์สำหรับสิ่งนี้
plt.figure(figsize=(10, 6))
sns.boxplot(data=df[['advertised_price', 'sale_price']])
เราใช้ plt.figure() เพื่อกำหนดความกว้างและความสูงของตัวเลขเป็นนิ้ว
จากนั้นเราสร้าง boxplot สำหรับคอลัมน์adverted_priceและsale_priceซึ่งมีลักษณะเช่นนี้
สามารถปรับปรุงโครงเรื่องเพื่อให้ใช้งานได้ง่ายขึ้นโดยเพิ่มส่วนนี้ลงในโค้ดด้านบน
plt.xlabel('Prices')
plt.ylabel('USD')
plt.ticklabel_format(style='plain', axis='y')
formatter = ticker.FuncFormatter(lambda x, p: format(x, ',.2f'))
plt.gca().yaxis.set_major_formatter(formatter)
เราใช้โค้ดด้านบนเพื่อตั้งค่าป้ายกำกับสำหรับทั้งสองแกน นอกจากนี้เรายังสังเกตเห็นว่าค่าบนแกน y อยู่ในสัญกรณ์ทางวิทยาศาสตร์ และเราไม่สามารถใช้ค่าดังกล่าวกับค่าราคาได้ ดังนั้นเราจึงเปลี่ยนสิ่งนี้เป็นรูปแบบธรรมดาโดยใช้ฟังก์ชัน plt.ticklabel_format()
จากนั้น เราสร้างฟอร์แมตเตอร์ที่จะแสดงค่าบนแกน y โดยใช้เครื่องหมายจุลภาคเป็นตัวคั่นหลักพันและจุดทศนิยม บรรทัดรหัสสุดท้ายใช้สิ่งนี้กับแกน
ผลลัพธ์ตอนนี้มีลักษณะเช่นนี้
ทีนี้เราจะระบุและลบค่าผิดปกติได้อย่างไร
วิธีหนึ่งคือการใช้วิธี IQR
IQR หรือช่วงระหว่างควอไทล์เป็นวิธีการทางสถิติที่ใช้ในการวัดความแปรปรวนโดยการแบ่งชุดข้อมูลออกเป็นควอร์ไทล์ ควอไทล์จะแบ่งชุดข้อมูลที่เรียงลำดับตามอันดับออกเป็นสี่ส่วนเท่าๆ กัน และค่าที่อยู่ในช่วงของควอร์ไทล์ที่ 25 (เปอร์เซ็นไทล์ที่ 75) และควอไทล์ที่สาม (เปอร์เซ็นไทล์ที่ XNUMX) จะประกอบกันเป็นช่วงอินเทอร์ควอไทล์
ช่วงระหว่างควอร์ไทล์ใช้เพื่อระบุค่าผิดปกติในข้อมูล นี่คือวิธีการทำงาน:
- ขั้นแรก คำนวณควอไทล์ที่หนึ่ง (Q1) ควอไทล์ที่สาม (Q3) จากนั้นจึงกำหนด IQR IQR คำนวณเป็น Q3 – Q1
- ค่าใดๆ ที่ต่ำกว่า Q1 – 1.5IQR หรือสูงกว่า Q3 + 1.5IQR ถือเป็นค่าผิดปกติ
บน Boxplot ของเรา กล่องนั้นแสดงถึง IQR จริงๆ เส้นภายในกล่องคือค่ามัธยฐาน (หรือควอไทล์ที่สอง) 'หนวด' ของ boxplot แสดงถึงช่วงภายใน 1.5*IQR จาก Q1 และ Q3
จุดข้อมูลใดๆ ที่อยู่นอกหนวดเหล่านี้ถือได้ว่าเป็นค่าผิดปกติ ในกรณีของเรา คือมูลค่า 12,000,000 ดอลลาร์ หากคุณดูที่ Boxplot คุณจะเห็นว่าสิ่งนี้แสดงได้ชัดเจนเพียงใด ซึ่งแสดงให้เห็นว่าเหตุใดการแสดงภาพข้อมูลจึงมีความสำคัญในการตรวจจับค่าผิดปกติ
ตอนนี้ เรามาลบค่าผิดปกติออกโดยใช้วิธี IQR ในโค้ด Python ขั้นแรก เราจะลบค่าผิดปกติของราคาที่โฆษณาออก
Q1 = df['advertised_price'].quantile(0.25)
Q3 = df['advertised_price'].quantile(0.75)
IQR = Q3 - Q1
df = df[~((df['advertised_price'] (Q1 - 1.5 * IQR)) |(df['advertised_price'] > (Q3 + 1.5 * IQR)))]
ขั้นแรกเราจะคำนวณควอไทล์แรก (หรือเปอร์เซ็นไทล์ที่ 25) โดยใช้ ปริมาณ() การทำงาน. เราทำเช่นเดียวกันกับควอร์ไทล์ที่ 75 หรือเปอร์เซ็นไทล์ที่ XNUMX
โดยแสดงค่าด้านล่างซึ่ง 25% และ 75% ของข้อมูลตกตามลำดับ
จากนั้นเราคำนวณความแตกต่างระหว่างควอร์ไทล์ จนถึงตอนนี้ทุกอย่างเป็นเพียงการแปลขั้นตอน IQR เป็นโค้ด Python
ในขั้นตอนสุดท้าย เราจะลบค่าผิดปกติออก กล่าวคือ ข้อมูลทั้งหมดน้อยกว่า Q1 – 1.5 * IQR หรือมากกว่า Q3 + 1.5 * IQR
ตัวดำเนินการ '~' จะลบล้างเงื่อนไข ดังนั้นเราจึงเหลือเพียงข้อมูลที่ไม่ใช่ค่าผิดปกติ
จากนั้นเราก็สามารถทำเช่นเดียวกันกับราคาขายได้
Q1 = df['sale_price'].quantile(0.25)
Q3 = df['sale_price'].quantile(0.75)
IQR = Q3 - Q1
df = df[~((df['sale_price'] (Q1 - 1.5 * IQR)) |(df['sale_price'] > (Q3 + 1.5 * IQR)))]
แน่นอน คุณสามารถทำได้ด้วยวิธีที่กระชับยิ่งขึ้นโดยใช้ สำหรับห่วง.
for column in ['advertised_price', 'sale_price']: Q1 = df[column].quantile(0.25) Q3 = df[column].quantile(0.75) IQR = Q3 - Q1 df = df[~((df[column] (Q1 - 1.5 * IQR)) |(df[column] > (Q3 + 1.5 * IQR)))]
การวนซ้ำของทั้งสองคอลัมน์ สำหรับแต่ละคอลัมน์ ระบบจะคำนวณ IQR แล้วลบแถวใน DataFrame
โปรดทราบว่าการดำเนินการนี้จะดำเนินการตามลำดับ ขั้นแรกสำหรับadverted_price จากนั้นจึงดำเนินการสำหรับ sale_price ด้วยเหตุนี้ DataFrame จึงได้รับการแก้ไขแบบแทนที่สำหรับแต่ละคอลัมน์ และสามารถลบแถวออกได้เนื่องจากมีค่าผิดปกติในคอลัมน์ใดคอลัมน์หนึ่ง ดังนั้น การดำเนินการนี้อาจส่งผลให้มีแถวน้อยกว่าในกรณีที่ค่าผิดปกติสำหรับadverted_price และ sale_price ถูกลบออกอย่างอิสระ และผลลัพธ์จะถูกรวมเข้าด้วยกันในภายหลัง
ในตัวอย่างของเรา ผลลัพธ์จะเหมือนกันในทั้งสองกรณี หากต้องการดูว่า Box plot เปลี่ยนแปลงไปอย่างไร เราจำเป็นต้องพล็อตมันอีกครั้งโดยใช้โค้ดเดียวกันกับก่อนหน้านี้
plt.figure(figsize=(10, 6))
sns.boxplot(data=df[['advertised_price', 'sale_price']])
plt.xlabel('Prices')
plt.ylabel('USD')
plt.ticklabel_format(style='plain', axis='y')
formatter = ticker.FuncFormatter(lambda x, p: format(x, ',.2f'))
plt.gca().yaxis.set_major_formatter(formatter)
นี่คือผลลัพธ์
คุณสามารถฝึกคำนวณเปอร์เซ็นไทล์ใน Python ได้โดยการแก้สมการ คำถามสัมภาษณ์สมัชชาใหญ่.
การล้างข้อมูลเป็นขั้นตอนสำคัญในกระบวนการวิเคราะห์ข้อมูล แม้ว่าอาจใช้เวลานาน แต่สิ่งสำคัญคือต้องรับรองความถูกต้องของการค้นพบของคุณ
โชคดีที่ระบบนิเวศของไลบรารี่ที่หลากหลายของ Python ทำให้กระบวนการนี้จัดการได้ง่ายขึ้น เราได้เรียนรู้วิธีลบแถวและคอลัมน์ที่ไม่จำเป็น จัดรูปแบบข้อมูลใหม่ และจัดการกับค่าและค่าผิดปกติที่หายไป ขั้นตอนเหล่านี้เป็นขั้นตอนปกติที่ต้องดำเนินการกับข้อมูลส่วนใหญ่ อย่างไรก็ตาม บางครั้งคุณก็จำเป็นต้องทำเช่นกัน รวมสองคอลัมน์เป็นหนึ่งเดียว, ตรวจสอบข้อมูลที่มีอยู่, กำหนดป้ายกำกับให้กับมัน,หรือ กำจัดพื้นที่สีขาว.
ทั้งหมดนี้คือการล้างข้อมูล เนื่องจากช่วยให้คุณสามารถเปลี่ยนข้อมูลในชีวิตจริงที่ยุ่งวุ่นวายให้กลายเป็นชุดข้อมูลที่มีโครงสร้างดีซึ่งคุณสามารถวิเคราะห์ได้อย่างมั่นใจ เพียงเปรียบเทียบชุดข้อมูลที่เราเริ่มต้นด้วยกับชุดที่เราลงเอยด้วย
หากคุณไม่เห็นความพึงพอใจในผลลัพธ์นี้ และข้อมูลที่สะอาดไม่ได้ทำให้คุณรู้สึกตื่นเต้นอย่างประหลาด คุณกำลังทำอะไรอยู่ในวิทยาศาสตร์ข้อมูล!?
เนท โรซิดิ เป็นนักวิทยาศาสตร์ข้อมูลและในกลยุทธ์ผลิตภัณฑ์ เขายังเป็นผู้ช่วยศาสตราจารย์สอนการวิเคราะห์และเป็นผู้ก่อตั้ง StrataScratchซึ่งเป็นแพลตฟอร์มที่ช่วยให้นักวิทยาศาสตร์ด้านข้อมูลเตรียมพร้อมสำหรับการสัมภาษณ์ด้วยคำถามสัมภาษณ์จริงจากบริษัทชั้นนำ เชื่อมต่อกับเขาที่ ทวิตเตอร์: StrataScratch or LinkedIn.
- เนื้อหาที่ขับเคลื่อนด้วย SEO และการเผยแพร่ประชาสัมพันธ์ รับการขยายวันนี้
- PlatoData.Network Vertical Generative Ai เพิ่มพลังให้กับตัวเอง เข้าถึงได้ที่นี่.
- เพลโตไอสตรีม. Web3 อัจฉริยะ ขยายความรู้ เข้าถึงได้ที่นี่.
- เพลโตESG. คาร์บอน, คลีนเทค, พลังงาน, สิ่งแวดล้อม แสงอาทิตย์, การจัดการของเสีย. เข้าถึงได้ที่นี่.
- เพลโตสุขภาพ เทคโนโลยีชีวภาพและข่าวกรองการทดลองทางคลินิก เข้าถึงได้ที่นี่.
- ที่มา: https://www.kdnuggets.com/mastering-the-art-of-data-cleaning-in-python?utm_source=rss&utm_medium=rss&utm_campaign=mastering-the-art-of-data-cleaning-in-python
- :มี
- :เป็น
- :ไม่
- :ที่ไหน
- ][หน้า
- $ ขึ้น
- 000
- 1
- 10
- 11
- 12
- 15%
- 25
- 7
- 75
- 8
- 9
- a
- ข้างบน
- ความถูกต้อง
- ข้าม
- จริง
- เพิ่ม
- ที่เพิ่ม
- เพิ่ม
- ผู้ช่วย
- สูง
- โฆษณา
- อีกครั้ง
- อัลกอริทึม
- ทั้งหมด
- ช่วยให้
- ตาม
- แล้ว
- ด้วย
- an
- วิเคราะห์
- การวิเคราะห์
- การวิเคราะห์
- วิเคราะห์
- วิเคราะห์
- และ
- อื่น
- ใด
- มีผลบังคับใช้
- ใช้
- เข้าใกล้
- วิธีการ
- เหมาะสม
- เป็น
- อาร์กิวเมนต์
- เกิดขึ้น
- จัด
- ศิลปะ
- บทความ
- AS
- การชุมนุม
- สมมติฐาน
- At
- แกน
- แกน
- b
- ตาม
- BE
- เพราะ
- รับ
- กำลัง
- ด้านล่าง
- ดีกว่า
- ระหว่าง
- อคติ
- เลือด
- สีน้ำเงิน
- ทั้งสอง
- กล่อง
- แต่
- ผู้ซื้อ..
- by
- คำนวณ
- คำนวณ
- การคํานวณ
- CAN
- โรคมะเร็ง
- ไม่ได้
- กรณี
- กรณี
- หมวดหมู่
- หมวดหมู่
- ส่วนกลาง
- บาง
- เปลี่ยนแปลง
- การเปลี่ยนแปลง
- ลักษณะ
- ตรวจสอบ
- การทำความสะอาด
- อย่างเห็นได้ชัด
- รหัส
- สี
- คอลัมน์
- คอลัมน์
- รวม
- ร่วมกัน
- อย่างธรรมดา
- บริษัท
- เปรียบเทียบ
- เมื่อเทียบกับ
- อย่างสมบูรณ์
- กระชับ
- สภาพ
- ความมั่นใจ
- เชื่อมต่อ
- พิจารณา
- ถือว่า
- พิจารณา
- คงเส้นคงวา
- บรรจุ
- แปลง
- แปลง
- การแปลง
- คอรัปชั่น
- ได้
- หลักสูตร
- หน้าปก
- สร้าง
- วิกฤติ
- สำคัญมาก
- ข้อมูล
- การวิเคราะห์ข้อมูล
- จุดข้อมูล
- วิทยาศาสตร์ข้อมูล
- นักวิทยาศาสตร์ข้อมูล
- ชุดข้อมูล
- การสร้างภาพข้อมูล
- ชุดข้อมูล
- วันที่
- วันที่
- วันเวลา
- วัน
- จัดการ
- การซื้อขาย
- ค่าเริ่มต้น
- กำหนด
- ตรวจจับ
- กำหนด
- ความแตกต่าง
- ต่าง
- ชัดถ้อยชัดคำ
- การกระจาย
- แบ่ง
- แบ่งออก
- การดำน้ำ
- do
- ไม่
- การทำ
- ทำ
- Dont
- ปรับตัวลดลง
- สอง
- ที่ซ้ำกัน
- แต่ละ
- ก่อน
- ง่ายดาย
- ที่ง่ายที่สุด
- ระบบนิเวศ
- การศึกษา
- ทั้ง
- ไม่มีข้อมูล
- สิ้นสุดวันที่
- ทำให้มั่นใจ
- เท่ากัน
- พอ ๆ กัน
- ข้อผิดพลาด
- จำเป็น
- ประมาณ
- อีเธอร์ (ETH)
- แม้
- ทุกอย่าง
- ตัวอย่าง
- ตัวอย่าง
- ยกเว้น
- ล้ำ
- ตื่นเต้น
- ที่มีอยู่
- สารสกัด
- ปัจจัย
- ตก
- ไกล
- คุณสมบัติ
- ฟุต
- หญิง
- น้อยลง
- รูป
- เนื้อไม่มีมัน
- ใส่
- การกรอก
- สุดท้าย
- หา
- ผลการวิจัย
- ปลาย
- ชื่อจริง
- พอดี
- ดังต่อไปนี้
- สำหรับ
- รูป
- ผู้สร้าง
- สี่
- ราคาเริ่มต้นที่
- ฟังก์ชัน
- เพศ
- ได้รับ
- ได้รับ
- ให้
- ไป
- ดี
- สำเร็จการศึกษา
- สีเขียว
- บัญชีกลุ่ม
- กลุ่ม
- จัดการ
- การจัดการ
- มีประโยชน์
- มี
- he
- ความสูง
- ช่วย
- การช่วยเหลือ
- โปรดคลิกที่นี่เพื่ออ่านรายละเอียดเพิ่มเติม
- จุดสูง
- สูงกว่า
- พระองค์
- สรุป ความน่าเชื่อถือของ Olymp Trade?
- ทำอย่างไร
- อย่างไรก็ตาม
- HTTPS
- ใหญ่
- i
- แยกแยะ
- ระบุ
- if
- ii
- iii
- ทันที
- ส่งผลกระทบ
- นำเข้า
- ความสำคัญ
- สำคัญ
- การปรับปรุง
- in
- ในอื่น ๆ
- นิ้ว
- ประกอบด้วย
- รวมทั้ง
- อย่างไม่ถูกต้อง
- อิสระ
- ดัชนี
- แสดง
- การแสดง
- ดัชนี
- ข้อมูล
- อินพุต
- ภายใน
- ตัวอย่าง
- สัมภาษณ์
- คำถามในการสัมภาษณ์
- บทสัมภาษณ์
- เข้าไป
- เปิดตัว
- รวมถึง
- ที่เกี่ยวข้องกับการ
- ปัญหา
- IT
- ITS
- jpg
- เพียงแค่
- KD นักเก็ต
- คีย์
- ชนิด
- ป้ายกำกับ
- ชื่อสกุล
- นำ
- ได้เรียนรู้
- การเรียนรู้
- ซ้าย
- น้อยลง
- ให้
- ชั้น
- ห้องสมุด
- โกหก
- วงจรชีวิต
- กดไลก์
- Line
- รายการ
- ll
- โหลด
- ที่ตั้ง
- ดู
- LOOKS
- ลด
- เครื่อง
- เรียนรู้เครื่อง
- ทำ
- ทำให้
- การจัดการกับ
- การจัดการ
- เครื่องหมาย
- โดดเด่น
- Mastering
- คณิตศาสตร์
- matplotlib
- อาจ..
- หมายความ
- ความหมาย
- วิธี
- วัด
- กลศาสตร์
- วิธี
- วิธีการ
- ไมโครซอฟท์
- อาจ
- หลอกตา
- หายไป
- โหมด
- แบบ
- การสร้างแบบจำลอง
- โมเดล
- โหมด
- การแก้ไข
- แก้ไข
- โมดูล
- ข้อมูลเพิ่มเติม
- มากที่สุด
- หนัง
- หลาย
- ชื่อ
- จำเป็น
- จำเป็นต้อง
- ใหม่
- ไม่
- หมายเหตุ
- สังเกต..
- ตอนนี้
- จำนวน
- ตัวเลข
- มึน
- วัตถุ
- ข้อสังเกต
- เกิดขึ้น
- การเกิดขึ้น
- of
- มักจะ
- เก่า
- on
- ONE
- เพียง
- การดำเนินการ
- ผู้ประกอบการ
- or
- ใบสั่ง
- เป็นต้นฉบับ
- อื่นๆ
- ของเรา
- ค่าผิดปกติ
- เอาท์พุต
- ด้านนอก
- ทั้งหมด
- หมีแพนด้า
- พารามิเตอร์
- ส่วนหนึ่ง
- ในสิ่งที่สนใจ
- ส่วน
- ส่ง
- แบบแผน
- ดำเนินการ
- ที่ราบ
- เวที
- เพลโต
- เพลโตดาต้าอินเทลลิเจนซ์
- เพลโตดาต้า
- จุด
- ที่มีประสิทธิภาพ
- การปฏิบัติ
- ทำนาย
- เตรียมการ
- สวย
- ราคา
- ราคา
- กระบวนการ
- ผลิตภัณฑ์
- ศาสตราจารย์
- หลาม
- Q1
- Q3
- คำถาม
- พิสัย
- จัดอันดับ
- อันดับ
- RE
- จริง
- โลกแห่งความจริง
- เหตุผล
- สีแดง
- ลด
- ที่เหลืออยู่
- เอาออก
- ลบออก
- แทนที่
- แสดง
- การแสดง
- เป็นตัวแทนของ
- แสดงให้เห็นถึง
- ตามลำดับ
- REST
- ผล
- ผลสอบ
- กลับ
- รวย
- กำจัด
- แถว
- s
- การขาย
- เดียวกัน
- ความพอใจ
- ตาชั่ง
- โรงเรียน
- วิทยาศาสตร์
- วิทยาศาสตร์
- นักวิทยาศาสตร์
- นักวิทยาศาสตร์
- ทะเลบอร์น
- ที่สอง
- เห็น
- ชุด
- ชุด
- การตั้งค่า
- หลาย
- น่า
- โชว์
- แสดง
- แสดงให้เห็นว่า
- สำคัญ
- อย่างมีความหมาย
- คล้ายคลึงกัน
- พร้อมกัน
- ตั้งแต่
- เอียง
- So
- จนถึงตอนนี้
- การแก้
- บาง
- อย่างใด
- บางครั้ง
- โดยเฉพาะ
- ที่ระบุไว้
- สี่เหลี่ยม
- ระยะ
- ขั้นตอน
- เริ่มต้น
- ข้อความที่เริ่ม
- ทางสถิติ
- อยู่
- ขั้นตอน
- ขั้นตอน
- ยังคง
- กลยุทธ์
- เชือก
- โครงสร้าง
- สไตล์
- ภายหลัง
- อย่างเช่น
- สรุป
- แน่ใจ
- T
- เอา
- งาน
- งาน
- การเรียนการสอน
- เทคนิค
- บอก
- ข้อความ
- กว่า
- ที่
- พื้นที่
- โลก
- ของพวกเขา
- พวกเขา
- แล้วก็
- ที่นั่น
- ดังนั้น
- ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน
- พวกเขา
- สิ่ง
- ที่สาม
- นี้
- เหล่านั้น
- แต่?
- พัน
- เครื่องพิมพ์ราคาหุ้นอัตโนมัติ
- เวลา
- ต้องใช้เวลามาก
- ครั้ง
- ไปยัง
- ร่วมกัน
- ด้านบน
- รวม
- จริง
- ลอง
- กลับ
- สอง
- ชนิด
- ชนิด
- เป็นปกติ
- พื้นฐาน
- เข้าใจ
- เป็นเอกลักษณ์
- ผิดปกติ
- USD
- ใช้
- มือสอง
- ใช้
- การใช้
- ตามปกติ
- ความคุ้มค่า
- ความคุ้มค่า
- ต่างๆ
- การสร้างภาพ
- จำเป็น
- ต้องการ
- ทาง..
- วิธี
- we
- ดี
- คือ
- อะไร
- เมื่อ
- ว่า
- ที่
- ในขณะที่
- ขาว
- ทั้งหมด
- ทำไม
- จะ
- กับ
- ภายใน
- ไม่มี
- คำ
- งาน
- การทำงาน
- โรงงาน
- โลก
- จะ
- X
- เธอ
- ของคุณ
- ลมทะเล