การอ้างอิงที่ดีที่สุดสำหรับรหัส Pandas ที่สะอาด
วิธีที่สะอาดในการล้างข้อมูล
หมีแพนด้าสามารถแปลงแม้แต่ข้อมูลที่ยุ่งเหยิงที่สุดให้เป็นชุดข้อมูลแมชชีนเลิร์นนิงที่เก่าแก่ แม้ว่ากระบวนการนี้อาจค่อนข้างยุ่งเหยิง
รหัส Pandas อาจอ่านยากด้วยเหตุผลหลายประการ ประการแรก มีหลายวิธีในการทำงานพื้นฐานเดียวกันให้สำเร็จใน Pandas การย่อยข้อมูล การเพิ่มคอลัมน์ใหม่ การทิ้งคอลัมน์ การลบค่า Null และกระบวนการอื่นๆ สามารถทำได้หลายวิธี ซึ่งนำไปสู่โค้ดที่ไม่สอดคล้องกันและยุ่งเหยิง
การจัดการลำดับขั้นตอนการล้างข้อมูลอาจเป็นเรื่องที่ท้าทายใน Pandas รหัสล้างข้อมูลส่วนใหญ่ของฉันก่อนหน้านี้ในอาชีพการงานของฉันมีลักษณะดังนี้:
# Import data
df_raw = pd.read_csv("path/to/data/file.csv")
# Clean data
df_raw["id"] = df_raw["id"].astype(str)
df_merged = df_raw.merge(df2, on="id")
df_final = df_merged.drop(columns=["col_5", "col_6", "col_7"])
# Investigate data
df_agg = df_final.groupby("id").size()
สุดท้ายนี้ โค้ดของ Pandas อาจยุ่งเหยิงได้ เพราะหลายครั้งมีการเขียนแบบเร่งรีบ ไม่ว่าคุณจะอยากสร้างโมเดลและต้องการล้างชุดข้อมูลของคุณอย่างรวดเร็วก่อนล่วงหน้า หรือคุณมีชุดข้อมูลเอาต์พุตใหม่ที่คุณต้องการวิเคราะห์ เนื่องจากโดยทั่วไปแล้วนักวิทยาศาสตร์ข้อมูล Pandas เป็นหนทางสู่จุดจบ
ดังนั้นความลับในการเขียนโค้ด Pandas ที่สะอาดทุกครั้งคืออะไร สองคำ: วิธี การผูกมัด
ในบทความนี้ ฉันได้แบ่งปันคอลเล็กชันที่คัดสรรแล้วของวิธีการ Clean Pandas ที่ฉันใช้เพื่อประมวลผลล่วงหน้า ตรวจสอบ รวบรวม และวิเคราะห์ข้อมูล Twitter ที่ฉันใช้ในโครงการแยกต่างหากเพื่อฝึกโมเดล Transformer การวาดตัวอย่างเหล่านี้จะขยายความเข้าใจของคุณเกี่ยวกับวิธีการผูกมัดและใช้เป็นคู่มืออ้างอิงสำหรับคุณในการเขียนโค้ด Pandas ที่สะอาดของคุณเอง
พื้นฐานของแพนด้าที่สะอาด
ห้องสมุด Pandas มาพร้อมกับวิธีการในตัวมากมาย โปรดจำไว้ว่าใน Python เมธอดคือฟังก์ชันที่เป็นของออบเจกต์ของคลาสเฉพาะและถูกตรึงไว้กับอ็อบเจ็กต์เองdf.to_csv()
เช่น เมธอดยังสามารถเชื่อมโยงได้ หมายความว่าคุณสามารถใช้เมธอดได้หลายวิธีกับออบเจกต์หนึ่งๆ ในคราวเดียว
new_df = ( # Wrap everything in ()'s
original_df # Name of data frame to modify
.query("text_length > 140") # Subset based on text length
.sort_values(by="text_length") # Sort entire df by text length
.reset_index() # Reset index of subsetted df
)
- มันทำให้โค้ดอ่านง่ายขึ้นมาก
- ทำให้ไม่ต้องใช้เฟรมข้อมูลตัวกลางหลายตัว ซึ่งช่วยประหยัดหน่วยความจำ
- ง่ายต่อการดีบัก เพียงแสดงความคิดเห็นเกี่ยวกับการปรับแต่ง data frame ทีละบรรทัดเพื่อดูว่าวิธีใดที่ทำให้คุณมีปัญหา
ฉันมีกรอบข้อมูลของทวีตดิบที่สร้างโดยวุฒิสมาชิกสหรัฐฯ ซึ่งฉันดึงข้อมูลผ่านTwitter API v2พร้อมข้อมูลรับรองการเข้าถึงที่ยกระดับ นี่คือข้อมูล:
ทีนี้มาทำการผูกมัดเพื่อทำความสะอาด ในการโทรเพียงครั้งเดียวนี้ เราจะเลือกและวางคอลัมน์ จัดรูปแบบคอลัมน์วันที่ ล้างข้อความดิบของทวีต นับความยาวข้อความ รวมสองเฟรมข้อมูล วางแถวที่ซ้ำกัน เปลี่ยนชื่อคอลัมน์ เรียงลำดับชื่อคอลัมน์ใหม่ จัดเรียงตามวันที่ และวางแถวทั้งหมดที่ทวีตยาวเป็นศูนย์
คุณอาจคุ้นเคยกับวิธีการเหล่านี้เป็นส่วนใหญ่ บางทีวิธีที่สำคัญที่สุดในที่นี้คือ.assign()
ซึ่งช่วยให้คุณสร้างคอลัมน์ใหม่หรือเขียนทับคอลัมน์เก่าได้ ฉันใช้assign()
วิธีนี้เพื่อจุดประสงค์สองประการเป็นหลัก
- การเปลี่ยนประเภทข้อมูลของคอลัมน์ที่มีอยู่:
.assign(column_name=original_df["column_name"].astype(str)
.assign(new_column=original_df["column_name"].apply(function_name)
หลังจากนำห่วงโซ่สัตว์ประหลาดนั้นไปใช้กับข้อมูลดิบของ Twitter เราก็มีกรอบข้อมูลที่เป็นระเบียบเรียบร้อยและอ่านได้ที่เราต้องการตรวจสอบ
วิธีการง่ายๆ.info()
ให้ข้อมูลจำนวนที่น่าทึ่งเกี่ยวกับ data frame ของคุณ รวมถึง:
- จำนวนแถว (และช่วงดัชนี)
- จำนวนคอลัมน์
- ชื่อของคอลัมน์
- ชนิดข้อมูลของคอลัมน์
- จำนวนค่าที่ไม่ใช่ค่า Null ต่อคอลัมน์
- การใช้ความจำ
วิธี การ.describe()
นี้จะแสดงภาพรวมของค่าจริงและการกระจายของข้อมูลในแต่ละคอลัมน์ของคุณ นำ.describe()
ไปใช้กับคอลัมน์ตามประเภทข้อมูลเพื่อให้ได้ผลลัพธ์ที่สะอาดขึ้น ดังที่แสดงด้านล่าง:
ผลลัพธ์จากการเรียก.describe()
ใช้dtype="object"
นั้นไม่ได้เจาะลึกเป็นพิเศษ เนื่องจากคอลัมน์id
, username
, และtext
มีค่าสตริงมากกว่าข้อมูลที่จัดหมวดหมู่ อย่างไรก็ตาม ค่าแถวสำหรับparty
คอลัมน์อาจแสดงรูปแบบที่เป็นไปได้
การรวมและวิเคราะห์ข้อมูล
การรวมข้อมูลในตัวแปรตามหมวดหมู่มักจะเป็นส่วนแรกของการวิเคราะห์ใดๆ ที่ฉันดำเนินการสำหรับโครงการ NLP ตัวแปรที่ชัดเจนที่สุดในการรวมในชุดข้อมูลทวีตparty
คือ
ต่อไป มาดูการรวมขั้นสูงเพิ่มเติม การ ผูกมัด.groupby()
และ.agg()
ฟังก์ชันตามลำดับเช่นนี้ทำให้เข้าใจการรวมโดยรวมได้ง่ายขึ้น:
หลังจากใช้การรวมแล้ว ดัชนีผลลัพธ์จะอ่านยาก วิธี.pipe()
นี้เป็นวิธีที่แพนด้าสะอาดใช้ฟังก์ชันกับกรอบข้อมูลทั้งหมด
บทสรุป
กุญแจสำคัญในการเขียนโค้ด Pandas ที่สะอาดคือการบังคับตัวเองให้ใช้ วิธี การผูกมัด การทำเช่นนี้จะทำให้โค้ดของคุณอ่านและตีความได้ง่ายขึ้น แก้ไขจุดบกพร่องได้ง่ายขึ้น และยังประหยัดหน่วยความจำอีกด้วย ดังที่บทความนี้ได้แสดงให้เห็นแล้ว คุณสามารถใช้วิธีการเชื่อมโยงในทุกส่วนของวงจรชีวิตข้อมูล รวมถึงการล้าง การตรวจสอบ การรวม และการวิเคราะห์ข้อมูล สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการผูกมัดของเมธอด โปรดดูแหล่งข้อมูลด้านล่าง
ทรัพยากร
- รหัสสนับสนุนสำหรับบทความนี้
- หมีแพนด้าที่มีประสิทธิภาพโดย Matt Harrison
- แพนด้าสมัยใหม่
- เอกสารแพนด้า
(1) M. Newhauser วุฒิสมาชิก DistilBERT ทวีต (2022)
(2) T. Augspurger, Modern Pandas (ตอนที่ 1) (2016).
(3) M. Harrison & T. Petrou, ตำราอาหาร Pandas 1.x: สูตรที่ใช้ได้จริงสำหรับการคำนวณทางวิทยาศาสตร์ การวิเคราะห์อนุกรมเวลา และการวิเคราะห์ข้อมูลเชิงสำรวจโดยใช้ Python (ฉบับที่สอง) (2020)
(4) Python Software Foundation, 9. คลาส (2022)
(5) Twitter, เอกสาร Twitter API (2022)
ต้องการเชื่อมต่อ?
ติดต่อฉันทางLinkedIn ✍️