24 KiB
สร้างโมเดลการถดถอยด้วย Scikit-learn: เตรียมและแสดงข้อมูล
อินโฟกราฟิกโดย Dasani Madipalli
แบบทดสอบก่อนเรียน
บทเรียนนี้มีในภาษา R ด้วย!
บทนำ
เมื่อคุณมีเครื่องมือที่จำเป็นสำหรับการเริ่มต้นสร้างโมเดลการเรียนรู้ของเครื่องด้วย Scikit-learn แล้ว คุณก็พร้อมที่จะเริ่มตั้งคำถามกับข้อมูลของคุณ การทำงานกับข้อมูลและการใช้โซลูชัน ML นั้น สิ่งสำคัญคือการเข้าใจวิธีตั้งคำถามที่ถูกต้องเพื่อปลดล็อกศักยภาพของชุดข้อมูลของคุณอย่างเหมาะสม
ในบทเรียนนี้ คุณจะได้เรียนรู้:
- วิธีเตรียมข้อมูลของคุณสำหรับการสร้างโมเดล
- วิธีใช้ Matplotlib สำหรับการแสดงข้อมูล
การตั้งคำถามที่ถูกต้องกับข้อมูลของคุณ
คำถามที่คุณต้องการคำตอบจะกำหนดประเภทของอัลกอริทึม ML ที่คุณจะใช้ และคุณภาพของคำตอบที่คุณได้รับจะขึ้นอยู่กับลักษณะของข้อมูลของคุณอย่างมาก
ลองดู ข้อมูล ที่ให้มาในบทเรียนนี้ คุณสามารถเปิดไฟล์ .csv นี้ใน VS Code การดูอย่างรวดเร็วจะเห็นได้ทันทีว่ามีช่องว่างและการผสมผสานระหว่างข้อมูลตัวอักษรและตัวเลข นอกจากนี้ยังมีคอลัมน์แปลก ๆ ที่เรียกว่า 'Package' ซึ่งข้อมูลเป็นการผสมระหว่าง 'sacks', 'bins' และค่าอื่น ๆ ข้อมูลนี้ค่อนข้างยุ่งเหยิง
🎥 คลิกที่ภาพด้านบนเพื่อดูวิดีโอสั้น ๆ เกี่ยวกับการเตรียมข้อมูลสำหรับบทเรียนนี้
ในความเป็นจริง ไม่บ่อยนักที่คุณจะได้รับชุดข้อมูลที่พร้อมใช้งานสำหรับการสร้างโมเดล ML ทันที ในบทเรียนนี้ คุณจะได้เรียนรู้วิธีเตรียมชุดข้อมูลดิบโดยใช้ไลบรารี Python มาตรฐาน นอกจากนี้คุณยังจะได้เรียนรู้เทคนิคต่าง ๆ ในการแสดงข้อมูล
กรณีศึกษา: 'ตลาดฟักทอง'
ในโฟลเดอร์นี้ คุณจะพบไฟล์ .csv ในโฟลเดอร์ data
ชื่อ US-pumpkins.csv ซึ่งมีข้อมูล 1757 บรรทัดเกี่ยวกับตลาดฟักทอง โดยจัดกลุ่มตามเมือง นี่คือข้อมูลดิบที่ดึงมาจาก รายงานมาตรฐานตลาดพืชผลเฉพาะทาง ที่เผยแพร่โดยกระทรวงเกษตรของสหรัฐอเมริกา
การเตรียมข้อมูล
ข้อมูลนี้เป็นข้อมูลสาธารณะ สามารถดาวน์โหลดได้ในหลายไฟล์แยกกันตามเมืองจากเว็บไซต์ USDA เพื่อหลีกเลี่ยงการมีไฟล์แยกกันมากเกินไป เราได้รวมข้อมูลจากทุกเมืองไว้ในสเปรดชีตเดียว ดังนั้นเราจึงได้ เตรียม ข้อมูลไว้บ้างแล้ว ต่อไป มาดูข้อมูลนี้อย่างใกล้ชิดกัน
ข้อมูลฟักทอง - ข้อสรุปเบื้องต้น
คุณสังเกตเห็นอะไรเกี่ยวกับข้อมูลนี้? คุณอาจเห็นแล้วว่ามีการผสมผสานระหว่างตัวอักษร ตัวเลข ช่องว่าง และค่าที่แปลก ๆ ที่คุณต้องทำความเข้าใจ
คำถามอะไรที่คุณสามารถถามข้อมูลนี้โดยใช้เทคนิคการถดถอย? เช่น "ทำนายราคาฟักทองที่ขายในแต่ละเดือน" เมื่อดูข้อมูลอีกครั้ง มีการเปลี่ยนแปลงบางอย่างที่คุณต้องทำเพื่อสร้างโครงสร้างข้อมูลที่จำเป็นสำหรับงานนี้
แบบฝึกหัด - วิเคราะห์ข้อมูลฟักทอง
ลองใช้ Pandas (ชื่อย่อมาจาก Python Data Analysis
) ซึ่งเป็นเครื่องมือที่มีประโยชน์มากสำหรับการจัดรูปแบบข้อมูล เพื่อวิเคราะห์และเตรียมข้อมูลฟักทองนี้
ขั้นแรก ตรวจสอบวันที่ที่ขาดหายไป
คุณจะต้องดำเนินการตรวจสอบวันที่ที่ขาดหายไป:
- แปลงวันที่เป็นรูปแบบเดือน (วันที่ในสหรัฐฯ มีรูปแบบ
MM/DD/YYYY
) - ดึงเดือนออกมาใส่ในคอลัมน์ใหม่
เปิดไฟล์ notebook.ipynb ใน Visual Studio Code และนำเข้าสเปรดชีตไปยัง Pandas dataframe ใหม่
-
ใช้ฟังก์ชัน
head()
เพื่อดู 5 แถวแรกimport pandas as pd pumpkins = pd.read_csv('../data/US-pumpkins.csv') pumpkins.head()
✅ ฟังก์ชันใดที่คุณจะใช้เพื่อดู 5 แถวสุดท้าย?
-
ตรวจสอบว่ามีข้อมูลที่ขาดหายไปใน dataframe ปัจจุบันหรือไม่:
pumpkins.isnull().sum()
มีข้อมูลที่ขาดหายไป แต่บางทีอาจจะไม่สำคัญสำหรับงานนี้
-
เพื่อให้ง่ายต่อการทำงานกับ dataframe ของคุณ ให้เลือกเฉพาะคอลัมน์ที่คุณต้องการ โดยใช้ฟังก์ชัน
loc
ซึ่งดึงกลุ่มแถว (พารามิเตอร์แรก) และคอลัมน์ (พารามิเตอร์ที่สอง) จาก dataframe ดั้งเดิม การใช้:
ในกรณีนี้หมายถึง "ทุกแถว"columns_to_select = ['Package', 'Low Price', 'High Price', 'Date'] pumpkins = pumpkins.loc[:, columns_to_select]
ขั้นที่สอง คำนวณราคาฟักทองเฉลี่ย
ลองคิดดูว่าจะคำนวณราคาฟักทองเฉลี่ยในแต่ละเดือนได้อย่างไร คอลัมน์ใดที่คุณจะเลือกสำหรับงานนี้? คำใบ้: คุณจะต้องใช้ 3 คอลัมน์
วิธีแก้ปัญหา: คำนวณค่าเฉลี่ยของคอลัมน์ Low Price
และ High Price
เพื่อเติมคอลัมน์ Price ใหม่ และแปลงคอลัมน์ Date ให้แสดงเฉพาะเดือน โชคดีที่จากการตรวจสอบข้างต้น ไม่มีข้อมูลที่ขาดหายไปสำหรับวันที่หรือราคา
-
เพื่อคำนวณค่าเฉลี่ย ให้เพิ่มโค้ดต่อไปนี้:
price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2 month = pd.DatetimeIndex(pumpkins['Date']).month
✅ คุณสามารถพิมพ์ข้อมูลใด ๆ ที่คุณต้องการตรวจสอบโดยใช้
print(month)
-
ตอนนี้ คัดลอกข้อมูลที่แปลงแล้วไปยัง Pandas dataframe ใหม่:
new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price})
การพิมพ์ dataframe ของคุณจะแสดงชุดข้อมูลที่สะอาดและเป็นระเบียบ ซึ่งคุณสามารถใช้สร้างโมเดลการถดถอยใหม่ได้
แต่เดี๋ยวก่อน! มีบางอย่างแปลก ๆ
หากคุณดูที่คอลัมน์ Package
ฟักทองถูกขายในรูปแบบที่หลากหลาย บางรายการขายในหน่วย '1 1/9 bushel' บางรายการใน '1/2 bushel' บางรายการต่อฟักทอง บางรายการต่อปอนด์ และบางรายการในกล่องใหญ่ที่มีความกว้างต่างกัน
ฟักทองดูเหมือนจะยากต่อการชั่งน้ำหนักอย่างสม่ำเสมอ
เมื่อเจาะลึกลงไปในข้อมูลดั้งเดิม จะพบว่าสิ่งที่มี Unit of Sale
เท่ากับ 'EACH' หรือ 'PER BIN' ก็มีประเภท Package
เป็นต่อนิ้ว ต่อถัง หรือ 'each' ฟักทองดูเหมือนจะยากต่อการชั่งน้ำหนักอย่างสม่ำเสมอ ดังนั้นให้กรองโดยเลือกเฉพาะฟักทองที่มีคำว่า 'bushel' ในคอลัมน์ Package
-
เพิ่มตัวกรองที่ด้านบนของไฟล์ ใต้การนำเข้า .csv เริ่มต้น:
pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]
หากคุณพิมพ์ข้อมูลตอนนี้ คุณจะเห็นว่าคุณได้รับเพียงประมาณ 415 แถวของข้อมูลที่มีฟักทองตาม bushel
แต่เดี๋ยวก่อน! ยังมีอีกสิ่งที่ต้องทำ
คุณสังเกตเห็นหรือไม่ว่าปริมาณ bushel แตกต่างกันในแต่ละแถว? คุณต้องปรับราคามาตรฐานเพื่อแสดงราคาต่อ bushel ดังนั้นให้ทำการคำนวณเพื่อทำให้เป็นมาตรฐาน
-
เพิ่มบรรทัดเหล่านี้หลังบล็อกที่สร้าง dataframe
new_pumpkins
:new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/(1 + 1/9) new_pumpkins.loc[new_pumpkins['Package'].str.contains('1/2'), 'Price'] = price/(1/2)
✅ ตามที่ The Spruce Eats ระบุ น้ำหนักของ bushel ขึ้นอยู่กับประเภทของผลผลิต เนื่องจากเป็นการวัดปริมาตร "bushel ของมะเขือเทศ ตัวอย่างเช่น ควรมีน้ำหนัก 56 ปอนด์... ใบและผักใบเขียวใช้พื้นที่มากกว่าแต่น้ำหนักน้อยกว่า ดังนั้น bushel ของผักโขมจึงมีน้ำหนักเพียง 20 ปอนด์" มันค่อนข้างซับซ้อน! เราจะไม่ยุ่งกับการแปลง bushel เป็นปอนด์ และแทนที่จะใช้ราคาต่อ bushel การศึกษาทั้งหมดนี้เกี่ยวกับ bushel ของฟักทองแสดงให้เห็นว่าการเข้าใจลักษณะของข้อมูลของคุณมีความสำคัญเพียงใด!
ตอนนี้ คุณสามารถวิเคราะห์ราคาต่อหน่วยตามการวัด bushel ได้ หากคุณพิมพ์ข้อมูลอีกครั้ง คุณจะเห็นว่ามันถูกปรับมาตรฐานแล้ว
✅ คุณสังเกตเห็นหรือไม่ว่าฟักทองที่ขายเป็นครึ่ง bushel มีราคาแพงมาก? คุณสามารถหาสาเหตุได้หรือไม่? คำใบ้: ฟักทองลูกเล็กมีราคาแพงกว่าลูกใหญ่มาก อาจเป็นเพราะมีจำนวนมากกว่าต่อลูก bushel เนื่องจากพื้นที่ว่างที่ไม่ได้ใช้ที่เกิดจากฟักทองพายลูกใหญ่ที่กลวง
กลยุทธ์การแสดงข้อมูล
ส่วนหนึ่งของบทบาทของนักวิทยาศาสตร์ข้อมูลคือการแสดงคุณภาพและลักษณะของข้อมูลที่พวกเขากำลังทำงานด้วย เพื่อทำสิ่งนี้ พวกเขามักจะสร้างการแสดงผลที่น่าสนใจ เช่น แผนภาพ กราฟ และแผนภูมิที่แสดงแง่มุมต่าง ๆ ของข้อมูล ด้วยวิธีนี้ พวกเขาสามารถแสดงความสัมพันธ์และช่องว่างที่ยากจะค้นพบได้ด้วยสายตา
🎥 คลิกที่ภาพด้านบนเพื่อดูวิดีโอสั้น ๆ เกี่ยวกับการแสดงข้อมูลสำหรับบทเรียนนี้
การแสดงผลยังสามารถช่วยกำหนดเทคนิคการเรียนรู้ของเครื่องที่เหมาะสมที่สุดสำหรับข้อมูลได้อีกด้วย ตัวอย่างเช่น scatterplot ที่ดูเหมือนจะเป็นเส้นตรง อาจบ่งชี้ว่าข้อมูลเหมาะสำหรับการฝึกการถดถอยเชิงเส้น
ไลบรารีการแสดงข้อมูลที่ทำงานได้ดีใน Jupyter notebooks คือ Matplotlib (ซึ่งคุณเคยเห็นในบทเรียนก่อนหน้า)
รับประสบการณ์เพิ่มเติมเกี่ยวกับการแสดงข้อมูลใน บทเรียนเหล่านี้
แบบฝึกหัด - ทดลองใช้ Matplotlib
ลองสร้างแผนภาพพื้นฐานเพื่อแสดง dataframe ใหม่ที่คุณเพิ่งสร้างขึ้น แผนภาพเส้นพื้นฐานจะแสดงอะไร?
-
นำเข้า Matplotlib ที่ด้านบนของไฟล์ ใต้การนำเข้า Pandas:
import matplotlib.pyplot as plt
-
รัน notebook ทั้งหมดอีกครั้งเพื่อรีเฟรช
-
ที่ด้านล่างของ notebook เพิ่มเซลล์เพื่อสร้างแผนภาพแบบกล่อง:
price = new_pumpkins.Price month = new_pumpkins.Month plt.scatter(price, month) plt.show()
นี่เป็นแผนภาพที่มีประโยชน์หรือไม่? มีอะไรที่ทำให้คุณประหลาดใจหรือไม่?
มันไม่ค่อยมีประโยชน์นัก เนื่องจากมันแสดงเพียงการกระจายของจุดข้อมูลในแต่ละเดือน
ทำให้มันมีประโยชน์
เพื่อให้แผนภูมิแสดงข้อมูลที่มีประโยชน์ คุณมักจะต้องจัดกลุ่มข้อมูลในบางลักษณะ ลองสร้างแผนภูมิที่แกน y แสดงเดือน และข้อมูลแสดงการกระจายของข้อมูล
-
เพิ่มเซลล์เพื่อสร้างแผนภูมิแท่งแบบกลุ่ม:
new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar') plt.ylabel("Pumpkin Price")
นี่เป็นการแสดงข้อมูลที่มีประโยชน์มากขึ้น! ดูเหมือนว่าราคาสูงสุดของฟักทองจะเกิดขึ้นในเดือนกันยายนและตุลาคม ตรงกับความคาดหวังของคุณหรือไม่? เพราะอะไร?
🚀ความท้าทาย
สำรวจประเภทต่าง ๆ ของการแสดงผลที่ Matplotlib มีให้ ประเภทใดที่เหมาะสมที่สุดสำหรับปัญหาการถดถอย?
แบบทดสอบหลังเรียน
ทบทวนและศึกษาด้วยตนเอง
ลองดูวิธีการแสดงข้อมูลที่หลากหลาย ทำรายการไลบรารีต่าง ๆ ที่มีอยู่และบันทึกว่าไลบรารีใดเหมาะสมที่สุดสำหรับงานประเภทใด เช่น การแสดงผล 2D เทียบกับ 3D คุณค้นพบอะไรบ้าง?
การบ้าน
ข้อจำกัดความรับผิดชอบ:
เอกสารนี้ได้รับการแปลโดยใช้บริการแปลภาษา AI Co-op Translator แม้ว่าเราจะพยายามให้การแปลมีความถูกต้อง แต่โปรดทราบว่าการแปลอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่แม่นยำ เอกสารต้นฉบับในภาษาดั้งเดิมควรถือเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลที่สำคัญ แนะนำให้ใช้บริการแปลภาษาจากผู้เชี่ยวชาญ เราไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความที่ผิดพลาดซึ่งเกิดจากการใช้การแปลนี้