You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ML-For-Beginners/translations/th/2-Regression/2-Data/README.md

24 KiB

สร้างโมเดลการถดถอยด้วย Scikit-learn: เตรียมและแสดงข้อมูล

อินโฟกราฟิกการแสดงข้อมูล

อินโฟกราฟิกโดย Dasani Madipalli

แบบทดสอบก่อนเรียน

บทเรียนนี้มีในภาษา R ด้วย!

บทนำ

เมื่อคุณมีเครื่องมือที่จำเป็นสำหรับการเริ่มต้นสร้างโมเดลการเรียนรู้ของเครื่องด้วย Scikit-learn แล้ว คุณก็พร้อมที่จะเริ่มตั้งคำถามกับข้อมูลของคุณ การทำงานกับข้อมูลและการใช้โซลูชัน ML นั้น สิ่งสำคัญคือการเข้าใจวิธีตั้งคำถามที่ถูกต้องเพื่อปลดล็อกศักยภาพของชุดข้อมูลของคุณอย่างเหมาะสม

ในบทเรียนนี้ คุณจะได้เรียนรู้:

  • วิธีเตรียมข้อมูลของคุณสำหรับการสร้างโมเดล
  • วิธีใช้ Matplotlib สำหรับการแสดงข้อมูล

การตั้งคำถามที่ถูกต้องกับข้อมูลของคุณ

คำถามที่คุณต้องการคำตอบจะกำหนดประเภทของอัลกอริทึม ML ที่คุณจะใช้ และคุณภาพของคำตอบที่คุณได้รับจะขึ้นอยู่กับลักษณะของข้อมูลของคุณอย่างมาก

ลองดู ข้อมูล ที่ให้มาในบทเรียนนี้ คุณสามารถเปิดไฟล์ .csv นี้ใน VS Code การดูอย่างรวดเร็วจะเห็นได้ทันทีว่ามีช่องว่างและการผสมผสานระหว่างข้อมูลตัวอักษรและตัวเลข นอกจากนี้ยังมีคอลัมน์แปลก ๆ ที่เรียกว่า 'Package' ซึ่งข้อมูลเป็นการผสมระหว่าง 'sacks', 'bins' และค่าอื่น ๆ ข้อมูลนี้ค่อนข้างยุ่งเหยิง

ML สำหรับผู้เริ่มต้น - วิธีวิเคราะห์และทำความสะอาดชุดข้อมูล

🎥 คลิกที่ภาพด้านบนเพื่อดูวิดีโอสั้น ๆ เกี่ยวกับการเตรียมข้อมูลสำหรับบทเรียนนี้

ในความเป็นจริง ไม่บ่อยนักที่คุณจะได้รับชุดข้อมูลที่พร้อมใช้งานสำหรับการสร้างโมเดล ML ทันที ในบทเรียนนี้ คุณจะได้เรียนรู้วิธีเตรียมชุดข้อมูลดิบโดยใช้ไลบรารี Python มาตรฐาน นอกจากนี้คุณยังจะได้เรียนรู้เทคนิคต่าง ๆ ในการแสดงข้อมูล

กรณีศึกษา: 'ตลาดฟักทอง'

ในโฟลเดอร์นี้ คุณจะพบไฟล์ .csv ในโฟลเดอร์ data ชื่อ US-pumpkins.csv ซึ่งมีข้อมูล 1757 บรรทัดเกี่ยวกับตลาดฟักทอง โดยจัดกลุ่มตามเมือง นี่คือข้อมูลดิบที่ดึงมาจาก รายงานมาตรฐานตลาดพืชผลเฉพาะทาง ที่เผยแพร่โดยกระทรวงเกษตรของสหรัฐอเมริกา

การเตรียมข้อมูล

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

ข้อมูลฟักทอง - ข้อสรุปเบื้องต้น

คุณสังเกตเห็นอะไรเกี่ยวกับข้อมูลนี้? คุณอาจเห็นแล้วว่ามีการผสมผสานระหว่างตัวอักษร ตัวเลข ช่องว่าง และค่าที่แปลก ๆ ที่คุณต้องทำความเข้าใจ

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

แบบฝึกหัด - วิเคราะห์ข้อมูลฟักทอง

ลองใช้ Pandas (ชื่อย่อมาจาก Python Data Analysis) ซึ่งเป็นเครื่องมือที่มีประโยชน์มากสำหรับการจัดรูปแบบข้อมูล เพื่อวิเคราะห์และเตรียมข้อมูลฟักทองนี้

ขั้นแรก ตรวจสอบวันที่ที่ขาดหายไป

คุณจะต้องดำเนินการตรวจสอบวันที่ที่ขาดหายไป:

  1. แปลงวันที่เป็นรูปแบบเดือน (วันที่ในสหรัฐฯ มีรูปแบบ MM/DD/YYYY)
  2. ดึงเดือนออกมาใส่ในคอลัมน์ใหม่

เปิดไฟล์ notebook.ipynb ใน Visual Studio Code และนำเข้าสเปรดชีตไปยัง Pandas dataframe ใหม่

  1. ใช้ฟังก์ชัน head() เพื่อดู 5 แถวแรก

    import pandas as pd
    pumpkins = pd.read_csv('../data/US-pumpkins.csv')
    pumpkins.head()
    

    ฟังก์ชันใดที่คุณจะใช้เพื่อดู 5 แถวสุดท้าย?

  2. ตรวจสอบว่ามีข้อมูลที่ขาดหายไปใน dataframe ปัจจุบันหรือไม่:

    pumpkins.isnull().sum()
    

    มีข้อมูลที่ขาดหายไป แต่บางทีอาจจะไม่สำคัญสำหรับงานนี้

  3. เพื่อให้ง่ายต่อการทำงานกับ 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 ให้แสดงเฉพาะเดือน โชคดีที่จากการตรวจสอบข้างต้น ไม่มีข้อมูลที่ขาดหายไปสำหรับวันที่หรือราคา

  1. เพื่อคำนวณค่าเฉลี่ย ให้เพิ่มโค้ดต่อไปนี้:

    price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2
    
    month = pd.DatetimeIndex(pumpkins['Date']).month
    
    

    คุณสามารถพิมพ์ข้อมูลใด ๆ ที่คุณต้องการตรวจสอบโดยใช้ print(month)

  2. ตอนนี้ คัดลอกข้อมูลที่แปลงแล้วไปยัง 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

  1. เพิ่มตัวกรองที่ด้านบนของไฟล์ ใต้การนำเข้า .csv เริ่มต้น:

    pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]
    

    หากคุณพิมพ์ข้อมูลตอนนี้ คุณจะเห็นว่าคุณได้รับเพียงประมาณ 415 แถวของข้อมูลที่มีฟักทองตาม bushel

แต่เดี๋ยวก่อน! ยังมีอีกสิ่งที่ต้องทำ

คุณสังเกตเห็นหรือไม่ว่าปริมาณ bushel แตกต่างกันในแต่ละแถว? คุณต้องปรับราคามาตรฐานเพื่อแสดงราคาต่อ bushel ดังนั้นให้ทำการคำนวณเพื่อทำให้เป็นมาตรฐาน

  1. เพิ่มบรรทัดเหล่านี้หลังบล็อกที่สร้าง 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 เนื่องจากพื้นที่ว่างที่ไม่ได้ใช้ที่เกิดจากฟักทองพายลูกใหญ่ที่กลวง

กลยุทธ์การแสดงข้อมูล

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

ML สำหรับผู้เริ่มต้น - วิธีแสดงข้อมูลด้วย Matplotlib

🎥 คลิกที่ภาพด้านบนเพื่อดูวิดีโอสั้น ๆ เกี่ยวกับการแสดงข้อมูลสำหรับบทเรียนนี้

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

ไลบรารีการแสดงข้อมูลที่ทำงานได้ดีใน Jupyter notebooks คือ Matplotlib (ซึ่งคุณเคยเห็นในบทเรียนก่อนหน้า)

รับประสบการณ์เพิ่มเติมเกี่ยวกับการแสดงข้อมูลใน บทเรียนเหล่านี้

แบบฝึกหัด - ทดลองใช้ Matplotlib

ลองสร้างแผนภาพพื้นฐานเพื่อแสดง dataframe ใหม่ที่คุณเพิ่งสร้างขึ้น แผนภาพเส้นพื้นฐานจะแสดงอะไร?

  1. นำเข้า Matplotlib ที่ด้านบนของไฟล์ ใต้การนำเข้า Pandas:

    import matplotlib.pyplot as plt
    
  2. รัน notebook ทั้งหมดอีกครั้งเพื่อรีเฟรช

  3. ที่ด้านล่างของ notebook เพิ่มเซลล์เพื่อสร้างแผนภาพแบบกล่อง:

    price = new_pumpkins.Price
    month = new_pumpkins.Month
    plt.scatter(price, month)
    plt.show()
    

    scatterplot แสดงความสัมพันธ์ระหว่างราคาและเดือน

    นี่เป็นแผนภาพที่มีประโยชน์หรือไม่? มีอะไรที่ทำให้คุณประหลาดใจหรือไม่?

    มันไม่ค่อยมีประโยชน์นัก เนื่องจากมันแสดงเพียงการกระจายของจุดข้อมูลในแต่ละเดือน

ทำให้มันมีประโยชน์

เพื่อให้แผนภูมิแสดงข้อมูลที่มีประโยชน์ คุณมักจะต้องจัดกลุ่มข้อมูลในบางลักษณะ ลองสร้างแผนภูมิที่แกน y แสดงเดือน และข้อมูลแสดงการกระจายของข้อมูล

  1. เพิ่มเซลล์เพื่อสร้างแผนภูมิแท่งแบบกลุ่ม:

    new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar')
    plt.ylabel("Pumpkin Price")
    

    แผนภูมิแท่งแสดงความสัมพันธ์ระหว่างราคาและเดือน

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


🚀ความท้าทาย

สำรวจประเภทต่าง ๆ ของการแสดงผลที่ Matplotlib มีให้ ประเภทใดที่เหมาะสมที่สุดสำหรับปัญหาการถดถอย?

แบบทดสอบหลังเรียน

ทบทวนและศึกษาด้วยตนเอง

ลองดูวิธีการแสดงข้อมูลที่หลากหลาย ทำรายการไลบรารีต่าง ๆ ที่มีอยู่และบันทึกว่าไลบรารีใดเหมาะสมที่สุดสำหรับงานประเภทใด เช่น การแสดงผล 2D เทียบกับ 3D คุณค้นพบอะไรบ้าง?

การบ้าน

สำรวจการแสดงผล


ข้อจำกัดความรับผิดชอบ:
เอกสารนี้ได้รับการแปลโดยใช้บริการแปลภาษา AI Co-op Translator แม้ว่าเราจะพยายามให้การแปลมีความถูกต้อง แต่โปรดทราบว่าการแปลอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่แม่นยำ เอกสารต้นฉบับในภาษาดั้งเดิมควรถือเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลที่สำคัญ แนะนำให้ใช้บริการแปลภาษาจากผู้เชี่ยวชาญ เราไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความที่ผิดพลาดซึ่งเกิดจากการใช้การแปลนี้