การเรียนรู้ศิลปะการทำความสะอาดข้อมูลใน Python - KDnuggets

การเรียนรู้ศิลปะการทำความสะอาดข้อมูลใน Python – KDnuggets

โหนดต้นทาง: 2939047

การเรียนรู้ศิลปะการทำความสะอาดข้อมูลใน Python
ภาพโดยผู้เขียน
 

การล้างข้อมูลเป็นส่วนสำคัญของกระบวนการวิเคราะห์ข้อมูล เป็นขั้นตอนที่คุณลบข้อผิดพลาด จัดการกับข้อมูลที่ขาดหายไป และตรวจสอบให้แน่ใจว่าข้อมูลของคุณอยู่ในรูปแบบที่คุณสามารถใช้งานได้ หากไม่มีชุดข้อมูลที่ได้รับการทำความสะอาดอย่างดี การวิเคราะห์ใดๆ ในภายหลังอาจบิดเบือนหรือไม่ถูกต้องได้

บทความนี้จะแนะนำเทคนิคสำคัญหลายประการสำหรับการล้างข้อมูลใน Python โดยใช้ไลบรารีอันทรงพลัง เช่น pandas, numpy, seaborn และ matplotlib

ก่อนที่จะเจาะลึกกลไกการล้างข้อมูล เรามาทำความเข้าใจถึงความสำคัญของมันก่อน ข้อมูลในโลกแห่งความเป็นจริงมักจะยุ่งเหยิง อาจมีรายการที่ซ้ำกัน ประเภทข้อมูลที่ไม่ถูกต้องหรือไม่สอดคล้องกัน ค่าที่หายไป คุณลักษณะที่ไม่เกี่ยวข้อง และค่าผิดปกติ ปัจจัยทั้งหมดเหล่านี้สามารถนำไปสู่การสรุปที่ทำให้เข้าใจผิดเมื่อวิเคราะห์ข้อมูล ทำให้การล้างข้อมูลเป็นส่วนที่ขาดไม่ได้ในวงจรวิทยาศาสตร์ข้อมูล

เราจะกล่าวถึงงานล้างข้อมูลต่อไปนี้
 

การเรียนรู้ศิลปะการทำความสะอาดข้อมูลใน Python
ภาพโดยผู้เขียน

ก่อนที่จะเริ่มต้น เรามานำเข้าไลบรารีที่จำเป็นกันก่อน เราจะใช้แพนด้าเพื่อจัดการข้อมูล และใช้สัตว์ทะเลและ 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)

ชุดข้อมูลมีลักษณะดังนี้

 

การเรียนรู้ศิลปะการทำความสะอาดข้อมูลใน Python
 

คุณจะเห็นได้ทันทีว่ามีค่าบางอย่างหายไป นอกจากนี้รูปแบบวันที่ไม่สอดคล้องกัน

ตอนนี้เรามาดูสรุป DataFrame โดยใช้เมธอด info()

# Get a concise summary of the dataframe
print(df.info())

นี่คือผลลัพธ์ของรหัส

 

การเรียนรู้ศิลปะการทำความสะอาดข้อมูลใน Python
 

เราจะเห็นได้ว่าเฉพาะคอลัมน์ 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 ต่อไปนี้

 

การเรียนรู้ศิลปะการทำความสะอาดข้อมูลใน Python

ข้อมูลที่ซ้ำกันอาจเกิดขึ้นในชุดข้อมูลของคุณได้จากหลายสาเหตุ และอาจบิดเบือนการวิเคราะห์ของคุณได้

มาตรวจหารายการที่ซ้ำกันในชุดข้อมูลของเรา ต่อไปนี้เป็นวิธีดำเนินการ

รหัสด้านล่างใช้วิธีการ ซ้ำ () เพื่อพิจารณาการซ้ำซ้อนในชุดข้อมูลทั้งหมด การตั้งค่าเริ่มต้นคือการพิจารณาการเกิดขึ้นครั้งแรกของค่าว่าไม่ซ้ำกันและการเกิดขึ้นครั้งต่อๆ ไปเป็นการซ้ำกัน คุณสามารถแก้ไขพฤติกรรมนี้ได้โดยใช้ เก็บ พารามิเตอร์. ตัวอย่างเช่น df.duplicated(keep=False) จะทำเครื่องหมายรายการที่ซ้ำกันทั้งหมดว่าเป็น True รวมถึงรายการแรกที่เกิดขึ้นด้วย

# Detecting duplicates
duplicates = df[df.duplicated()]
duplicates

นี่คือผลลัพธ์

 

การเรียนรู้ศิลปะการทำความสะอาดข้อมูลใน Python
 

แถวที่มีดัชนี 3 ถูกทำเครื่องหมายว่าซ้ำกัน เนื่องจากแถว 2 ที่มีค่าเดียวกันเกิดขึ้นครั้งแรก

ตอนนี้เราต้องลบรายการที่ซ้ำกันออก ซึ่งเราทำโดยใช้โค้ดต่อไปนี้

# Detecting duplicates
duplicates = df[df.duplicated()]
duplicates

พื้นที่ drop_duplicates() ฟังก์ชั่นพิจารณาคอลัมน์ทั้งหมดในขณะที่ระบุรายการที่ซ้ำกัน หากคุณต้องการพิจารณาเฉพาะบางคอลัมน์ คุณสามารถส่งเป็นรายการไปยังฟังก์ชันนี้ได้ดังนี้: df.drop_duplicates(subset=['column1', 'column2'])

 

การเรียนรู้ศิลปะการทำความสะอาดข้อมูลใน Python
 

อย่างที่คุณเห็น แถวที่ซ้ำกันถูกทิ้งไป อย่างไรก็ตาม การจัดทำดัชนียังคงเหมือนเดิม โดยที่ดัชนี 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)

ทั้งสองวิธีให้ผลลัพธ์ที่เหมือนกัน

 

การเรียนรู้ศิลปะการทำความสะอาดข้อมูลใน Python
 

ขณะนี้วันที่อยู่ในรูปแบบที่สอดคล้องกัน เราเห็นว่าข้อมูลบางส่วนไม่ได้รับการแปลง มีค่า NaT หนึ่งค่าใน Advertising_date และสองค่าใน sale_date ซึ่งหมายความว่าวันที่หายไป

ตรวจสอบว่าคอลัมน์ถูกแปลงเป็นวันที่โดยใช้หรือไม่ ข้อมูล() วิธี

# Get a concise summary of the dataframe
print(df.info())

 

การเรียนรู้ศิลปะการทำความสะอาดข้อมูลใน Python
 

อย่างที่คุณเห็น ทั้งสองคอลัมน์ไม่อยู่ในรูปแบบ datetime64[ns]

ตอนนี้ลองแปลงข้อมูลจาก TEXT เป็น NUMERIC ในสิ่งนี้ ชุดข้อมูล Airbnb.

ชุดข้อมูลในโลกแห่งความเป็นจริงมักมีค่าที่ขาดหายไป การจัดการข้อมูลที่ขาดหายไปถือเป็นสิ่งสำคัญ เนื่องจากอัลกอริธึมบางตัวไม่สามารถจัดการกับค่าดังกล่าวได้

ตัวอย่างของเรายังมีค่าที่ขาดหายไปด้วย ดังนั้น เรามาดูวิธีจัดการข้อมูลที่ขาดหายไปสองวิธีที่ใช้บ่อยที่สุดกัน

การลบแถวที่มีค่าหายไป

หากจำนวนแถวที่มีข้อมูลที่ขาดหายไปไม่มีนัยสำคัญเมื่อเทียบกับจำนวนการสังเกตทั้งหมด คุณอาจพิจารณาลบแถวเหล่านี้

ในตัวอย่างของเรา แถวสุดท้ายไม่มีค่าใดๆ ยกเว้นตารางฟุตและวันที่โฆษณา เราไม่สามารถใช้ข้อมูลดังกล่าวได้ ดังนั้นให้ลบแถวนี้ออก

นี่คือโค้ดที่เราระบุดัชนีของแถว

df = df.drop(8)

ตอนนี้ DataFrame มีลักษณะเช่นนี้

 

การเรียนรู้ศิลปะการทำความสะอาดข้อมูลใน Python
 

แถวสุดท้ายถูกลบไปแล้ว และ 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()))

ผลลัพธ์ในทั้งสองกรณีมีลักษณะเช่นนี้

 

การเรียนรู้ศิลปะการทำความสะอาดข้อมูลใน Python
 

คอลัมน์ sale_date ของเรามีเวลาที่เราไม่ต้องการแล้ว มาลบพวกมันกันเถอะ

เราจะใช้ไฟล์ สตริฟไทม์() ซึ่งแปลงวันที่เพื่อแสดงสตริงและรูปแบบเฉพาะ

df['sale_date'] = df['sale_date'].dt.strftime('%Y-%m-%d')

 

การเรียนรู้ศิลปะการทำความสะอาดข้อมูลใน Python
 

วันที่ตอนนี้ดูเป็นระเบียบเรียบร้อยทั้งหมด

หากคุณจำเป็นต้องใช้ สตริฟไทม์() ในหลายคอลัมน์ คุณสามารถใช้ได้อีกครั้ง แลมบ์ดา ตามวิธีต่อไปนี้

df[['date1_formatted', 'date2_formatted']] = df[['date1', 'date2']].apply(lambda x: x.dt.strftime('%Y-%m-%d'))

ตอนนี้ เรามาดูกันว่าเราจะใส่ค่าหมวดหมู่ที่ขาดหายไปได้อย่างไร

ข้อมูลหมวดหมู่คือข้อมูลประเภทหนึ่งที่ใช้ในการจัดกลุ่มข้อมูลที่มีลักษณะคล้ายคลึงกัน แต่ละกลุ่มเหล่านี้เป็นหมวดหมู่ ข้อมูลเชิงหมวดหมู่สามารถใช้ค่าตัวเลขได้ (เช่น "1" หมายถึง "ชาย" และ "2" หมายถึง "หญิง") แต่ตัวเลขเหล่านั้นไม่มีความหมายทางคณิตศาสตร์ คุณไม่สามารถรวมเข้าด้วยกันได้

โดยทั่วไปข้อมูลตามหมวดหมู่จะแบ่งออกเป็นสองประเภท:

  1. ข้อมูลที่กำหนด: นี่คือเวลาที่หมวดหมู่จะมีป้ายกำกับเท่านั้นและไม่สามารถจัดเรียงตามลำดับใดๆ ได้ ตัวอย่างได้แก่ เพศ (ชาย หญิง) กรุ๊ปเลือด (A, B, AB, O) หรือสี (แดง เขียว น้ำเงิน)
  1. ข้อมูลลำดับ: นี่คือช่วงเวลาที่สามารถสั่งซื้อหรือจัดอันดับหมวดหมู่ได้ แม้ว่าช่วงเวลาระหว่างหมวดหมู่จะมีระยะห่างไม่เท่ากัน ลำดับของหมวดหมู่ก็มีความหมาย ตัวอย่าง ได้แก่ ระดับการให้คะแนน (เรตติ้งภาพยนตร์ 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] ยังใช้เพื่อแยกค่าแรกจากซีรี่ส์นี้ หากมีหลายโหมด ระบบจะเลือกโหมดแรก หากมีโหมดเดียวก็ยังใช้งานได้ดี

นี่คือผลลัพธ์

 

การเรียนรู้ศิลปะการทำความสะอาดข้อมูลใน Python
 

ข้อมูลตอนนี้ดูค่อนข้างดี สิ่งที่เหลืออยู่คือดูว่ามีค่าผิดปกติหรือไม่

คุณสามารถฝึกจัดการกับค่าว่างได้ คำถามสัมภาษณ์เมตาโดยที่คุณจะต้องแทนที่ 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ซึ่งมีลักษณะเช่นนี้

 

การเรียนรู้ศิลปะการทำความสะอาดข้อมูลใน Python
 

สามารถปรับปรุงโครงเรื่องเพื่อให้ใช้งานได้ง่ายขึ้นโดยเพิ่มส่วนนี้ลงในโค้ดด้านบน

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 โดยใช้เครื่องหมายจุลภาคเป็นตัวคั่นหลักพันและจุดทศนิยม บรรทัดรหัสสุดท้ายใช้สิ่งนี้กับแกน

ผลลัพธ์ตอนนี้มีลักษณะเช่นนี้

 

การเรียนรู้ศิลปะการทำความสะอาดข้อมูลใน Python
 

ทีนี้เราจะระบุและลบค่าผิดปกติได้อย่างไร

วิธีหนึ่งคือการใช้วิธี IQR

IQR หรือช่วงระหว่างควอไทล์เป็นวิธีการทางสถิติที่ใช้ในการวัดความแปรปรวนโดยการแบ่งชุดข้อมูลออกเป็นควอร์ไทล์ ควอไทล์จะแบ่งชุดข้อมูลที่เรียงลำดับตามอันดับออกเป็นสี่ส่วนเท่าๆ กัน และค่าที่อยู่ในช่วงของควอร์ไทล์ที่ 25 (เปอร์เซ็นไทล์ที่ 75) และควอไทล์ที่สาม (เปอร์เซ็นไทล์ที่ XNUMX) จะประกอบกันเป็นช่วงอินเทอร์ควอไทล์

ช่วงระหว่างควอร์ไทล์ใช้เพื่อระบุค่าผิดปกติในข้อมูล นี่คือวิธีการทำงาน:

  1. ขั้นแรก คำนวณควอไทล์ที่หนึ่ง (Q1) ควอไทล์ที่สาม (Q3) จากนั้นจึงกำหนด IQR IQR คำนวณเป็น Q3 – Q1
  2. ค่าใดๆ ที่ต่ำกว่า 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 ได้โดยการแก้สมการ คำถามสัมภาษณ์สมัชชาใหญ่.

การล้างข้อมูลเป็นขั้นตอนสำคัญในกระบวนการวิเคราะห์ข้อมูล แม้ว่าอาจใช้เวลานาน แต่สิ่งสำคัญคือต้องรับรองความถูกต้องของการค้นพบของคุณ

โชคดีที่ระบบนิเวศของไลบรารี่ที่หลากหลายของ Python ทำให้กระบวนการนี้จัดการได้ง่ายขึ้น เราได้เรียนรู้วิธีลบแถวและคอลัมน์ที่ไม่จำเป็น จัดรูปแบบข้อมูลใหม่ และจัดการกับค่าและค่าผิดปกติที่หายไป ขั้นตอนเหล่านี้เป็นขั้นตอนปกติที่ต้องดำเนินการกับข้อมูลส่วนใหญ่ อย่างไรก็ตาม บางครั้งคุณก็จำเป็นต้องทำเช่นกัน รวมสองคอลัมน์เป็นหนึ่งเดียว, ตรวจสอบข้อมูลที่มีอยู่, กำหนดป้ายกำกับให้กับมัน,หรือ กำจัดพื้นที่สีขาว.

ทั้งหมดนี้คือการล้างข้อมูล เนื่องจากช่วยให้คุณสามารถเปลี่ยนข้อมูลในชีวิตจริงที่ยุ่งวุ่นวายให้กลายเป็นชุดข้อมูลที่มีโครงสร้างดีซึ่งคุณสามารถวิเคราะห์ได้อย่างมั่นใจ เพียงเปรียบเทียบชุดข้อมูลที่เราเริ่มต้นด้วยกับชุดที่เราลงเอยด้วย

หากคุณไม่เห็นความพึงพอใจในผลลัพธ์นี้ และข้อมูลที่สะอาดไม่ได้ทำให้คุณรู้สึกตื่นเต้นอย่างประหลาด คุณกำลังทำอะไรอยู่ในวิทยาศาสตร์ข้อมูล!?
 

เนท โรซิดิ เป็นนักวิทยาศาสตร์ข้อมูลและในกลยุทธ์ผลิตภัณฑ์ เขายังเป็นผู้ช่วยศาสตราจารย์สอนการวิเคราะห์และเป็นผู้ก่อตั้ง StrataScratchซึ่งเป็นแพลตฟอร์มที่ช่วยให้นักวิทยาศาสตร์ด้านข้อมูลเตรียมพร้อมสำหรับการสัมภาษณ์ด้วยคำถามสัมภาษณ์จริงจากบริษัทชั้นนำ เชื่อมต่อกับเขาที่ ทวิตเตอร์: StrataScratch or LinkedIn.

ประทับเวลา:

เพิ่มเติมจาก KD นักเก็ต