[Pandas — Part I] ตรวจสุขภาพ Data เบื้องต้น
Pandas ใน Python คืออะไร ??? แน่นอนว่าไม่ใช่หมีแพนด้าหลายๆตัว 5555+ ถ้าจะให้อธิบายง่ายๆ Pandas คือ Library ใน Python เอาไว้ใช้ Manipulate DataFrame
สำหรับท่านที่สนใจ อยากจะลองทำตามก็สามารถโหลด Dataset ได้จากลิงค์นี้นะครับ
ถ้าพร้อมแล้วเชิญพบกับ Pandas ได้เลยครับ !!
คำสั่งที่ใช้บ่อยๆใน Pandas
0. Import Library : หากไม่ Import เข้ามานี้ใช้ไม่ได้เลยนะครับ
import pandas as pd
1. Read File : เป็นการอ่าน File แล้วนำข้อมูลไปเก็บไว้ใน DataFrame
# Read file Transaction.csv then assign it into df_transac
df_transac = pd.read_csv("Transaction.csv" )
Remark : ตัวแปร df_transac มาจาก df ที่มาจาก DataFrame และ transac ที่มาจากชื่อ file Transaction
จริงๆแล้ว Pandas ยังรองรับการอ่าน file อย่าง .xlsx , .sql และ .json ได้ด้วยนะครับ
สำหรับ arguments ที่จะได้พบเจอบ่อยๆ
- encoding : ส่วนตัวชอบใช้ “utf-8” แต่บางครั้งก็ใช้ “tis620” สำหรับข้อมูลภาษาไทย
- sheet_name : ใน File .xlsx หลายๆครั้งก็จะมีหลายชีท เราก็ควรจะระบุชื่อไฟล์เฉพาะเจาะจงลงไปด้วย
- chunksize : ใช้เวลาต้องอ่าน file ใหญ่ๆ แบ่งเป็น ชิ้นเล็กๆก่อนแล้วค่อยเอามารวมกันทีหลัง
2. Basic Check : เป็นการตรวจสอบสุขภาพของ DataFrame เบื้องต้น
2.1 เหนือสิ่งอื่นใด เอาตัวอย่าง 5 แถวแรก มาดูก่อนเลย
# display first 5 rows
df_transac.head()
ถ้าหากต้องการที่จะดูมากกว่า 5 แถวแรกก็สามารถใส่เลขลงไปในวงเล็บได้เลยเช่น
# display first 10 rows
df_transac.head(10)
Takeaway Note : หลาย transaction มีจำนวน Qty , Rate และ total_amt ติดลบจะต้องลองไปตรวจสอบดูว่าเกิดอะไรขึ้น เช่นลูกค้าที่มีการซื้อไปแล้วขอคืนของใช่หรือไม่ ? ถ้าหากเราไม่ได้เข้าใจ dataset ชุดนี้ อาจจะทำให้เราวิเคราะห์ผิดทางได้
2.2 ดู Data Type และข้อมูลภาพรวม
# display DataFrame information
df_transac.info()
จากรูปที่ 3 เราก็จะเห็นภาพรวมของ DataFrame นี้ได้คร่าวๆว่า
- มีทั้งหมดกี่แถว
- มีทั้งหมดกี่คอลัมน์
- มีคอลัมน์อะไรบ้าง
- ในแต่ละคอลัมน์มีค่า non-null เท่าใหร่
- ในแต่ละคอลัมน์มี Data Type อะไรบ้าง
- แล้ว DataFrame นี้ใช้ Memory เท่าใหร่
Takeaway Note : เราอาจจะต้องจัดการเปลี่ยน data type ให้เหมาะสมในแต่ละคอลัมน์
- transaction_id , cust_id , prod_subcat_code , prod_cat_code ควรจะเปลี่ยน data type เป็น object หรือ categorical data
- tran_date ควรจะเปลี่ยน Data type เป็น datetime
2.3 ตรวจสอบค่า null values ว่าในแต่ละคอลัมน์มีค่า null values อยู่กี่ค่า
# display null values each column
df_transac.isnull().sum()
Takeaway Note : ไม่มีค่า null values ทำให้ไม่ต้องไปทำอะไร แต่ก็ยังควรจะต้องตรวจสอบดูลึกๆอีกว่า มี empty string อยู่หรือไม่
2.4 ดูค่า nunique ของแต่ละคอลัมน์
# display number of unique values each column
df_transac.nunique()
Takeaway Note : เราจะสามารถดูข้อมูลเบื้องต้นได้เลย
- มีลูกค้าทั้งหมด 5,506 คน
- ระยะเวลาของข้อมูลประมาณ 1,129/365 หรือประมาณ 3 ปี
- มี prod_cat_code ทั้งหมด 6 ประเภท และมี prod_subcat_code ทั้งหมด 12 ประเภท ดังนั้น จะมีสินค้าที่ย่อยมากที่สุดไม่เกิน 6*12 = 72 ประเภท
- มี Store_type ทั้งหมด 4 ประเภท
2.5 ดูความถี่ของค่าในคอลัมน์ต่างๆ
จากรูปที่ 5 เราจะเห็นได้ว่า Store_type มีทั้งหมด 4 ประเภทที่ไม่ซ้ำกัน ถ้าหากเราอยากจะรู้ว่าแต่ละค่า มีความถี่มากน้อยเท่าใหร่ สามารถเลือกคอลัมน์นั้นออกมา ตามด้วยคำสั่ง value_counts()
- ค่าในคอลัมน์เป็นประเภท Object หรือ Categorical data
# display frequency each category in column "Store_type"
df_transac["Store_type"].value_counts()
- ค่าในคอลัมน์เป็นประเภท Numerical data
ถ้าเราไปหาค่าความถี่ในคอลัมน์ที่เป็น Numerical data จะได้พังแบบนี้
# display frequency each category in column "total_amt"
df_transac["total_amt"].value_counts()
ดังนั้น สำหรับข้อมูล Numerical data สามารถแบ่งเป็นหลายๆ tier ตามจำนวน bins ได้เลยโดยการเพิ่ม argument bins = “ จำนวน bin ที่ต้องการ ”
# display frequency each bin in column "total_amt"
df_transac["total_amt"].value_counts(bins = 5)
Takeaway Note : เราจะสามารถดูข้อมูลเบื้องต้นจากความถี่ได้
- Store_type ทั้ง 4 ประเภทมี transaction เกิดขึ้นที่ e-shop มากที่สุด อยู่ที่ 9,311 transactions ในขณะที่ Store_type ประเภทอื่นๆมี transaction ไม่ได้แตกต่างกันมากอยู่ที่ประมาณ 4,500–4,600 transactions
2.6 ดูค่าสถิติต่างๆ แต่ละคอลัมน์
# display descriptive statistics each column
df_transac.describe()
คำสั่งนี้เป็นคำสั่งที่ดีมากๆ พิมพ์เพียงนิดเดียว แต่ได้ข้อมูลที่มีประโยชน์เยอะมากทีเดียว
Takeaway Note : เราจะสามารถดู Extreme value หรือข้อมูลที่มีความผิดปกติจากข้อมูล รวมไปถึงดูการกระจายของข้อมูลจาก ค่า Mean กับ ค่า Median (Percentile ที่ 50)ว่าต่างกันมากน้อย และดู Standard deviation (std) ประกอบด้วย
จบไปแล้วครับสำหรับ การตรวจสุขภาพข้อมูลเบื่องต้น หวังว่าน่าจะพอเป็นแนวทางในการใช้ library pandas และการวิเคราะห์ DataFrame เบื้องต้น แก่ผู้ที่กำลังศึกษาได้นะครับ ซึ่งผมก็จะพยายามทำ Content การทำ Data Analytics โดยใช้ Python ออกมาอีกเรื่อยๆ อย่าลืมมาติดตามกันนะครับ :D