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.

20 KiB

การแสดงความสัมพันธ์: เรื่องราวของน้ำผึ้ง 🍯

 Sketchnote โดย (@sketchthedocs)
การแสดงความสัมพันธ์ - Sketchnote โดย @nitya

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

ชุดข้อมูลนี้มีประมาณ 600 รายการ แสดงการผลิตน้ำผึ้งในหลายรัฐของสหรัฐฯ ตัวอย่างเช่น คุณสามารถดูจำนวนรังผึ้ง ผลผลิตต่อรัง การผลิตรวม สต็อก ราคาเฉลี่ยต่อปอนด์ และมูลค่าของน้ำผึ้งที่ผลิตในแต่ละรัฐในช่วงปี 1998-2012 โดยมีหนึ่งแถวต่อปีสำหรับแต่ละรัฐ

จะน่าสนใจมากหากเราแสดงภาพความสัมพันธ์ระหว่างการผลิตน้ำผึ้งในแต่ละปีของรัฐหนึ่ง ๆ กับราคาน้ำผึ้งในรัฐนั้น หรืออาจแสดงความสัมพันธ์ระหว่างผลผลิตน้ำผึ้งต่อรังในแต่ละรัฐ ช่วงเวลานี้ยังครอบคลุมถึงเหตุการณ์ 'CCD' หรือ 'Colony Collapse Disorder' ที่เริ่มปรากฏในปี 2006 (http://npic.orst.edu/envir/ccd.html) ซึ่งทำให้ชุดข้อมูลนี้น่าสนใจในการศึกษา 🐝

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

ในบทเรียนนี้ คุณสามารถใช้ Seaborn ซึ่งคุณเคยใช้มาก่อน เป็นไลบรารีที่ดีสำหรับการแสดงความสัมพันธ์ระหว่างตัวแปร โดยเฉพาะการใช้ฟังก์ชัน relplot ของ Seaborn ที่ช่วยให้สร้าง scatter plot และ line plot ได้อย่างรวดเร็วเพื่อแสดง 'ความสัมพันธ์ทางสถิติ' ซึ่งช่วยให้นักวิทยาศาสตร์ข้อมูลเข้าใจความสัมพันธ์ระหว่างตัวแปรได้ดียิ่งขึ้น

Scatterplots

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

เริ่มต้นด้วยการนำเข้าข้อมูลและ Seaborn:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
honey = pd.read_csv('../../data/honey.csv')
honey.head()

คุณจะสังเกตเห็นว่าข้อมูลน้ำผึ้งมีหลายคอลัมน์ที่น่าสนใจ รวมถึงปีและราคาต่อปอนด์ มาสำรวจข้อมูลนี้โดยจัดกลุ่มตามรัฐในสหรัฐฯ:

state numcol yieldpercol totalprod stocks priceperlb prodvalue year
AL 16000 71 1136000 159000 0.72 818000 1998
AZ 55000 60 3300000 1485000 0.64 2112000 1998
AR 53000 65 3445000 1688000 0.59 2033000 1998
CA 450000 83 37350000 12326000 0.62 23157000 1998
CO 27000 72 1944000 1594000 0.7 1361000 1998

สร้าง scatterplot พื้นฐานเพื่อแสดงความสัมพันธ์ระหว่างราคาต่อปอนด์ของน้ำผึ้งกับรัฐที่ผลิต ตั้งค่าแกน y ให้สูงพอที่จะแสดงทุกรัฐ:

sns.relplot(x="priceperlb", y="state", data=honey, height=15, aspect=.5);

scatterplot 1

ตอนนี้ แสดงข้อมูลเดียวกันด้วยโทนสีของน้ำผึ้งเพื่อแสดงให้เห็นว่าราคาเปลี่ยนแปลงไปอย่างไรในแต่ละปี คุณสามารถทำได้โดยเพิ่มพารามิเตอร์ 'hue' เพื่อแสดงการเปลี่ยนแปลงในแต่ละปี:

เรียนรู้เพิ่มเติมเกี่ยวกับ ชุดสีที่คุณสามารถใช้ใน Seaborn - ลองใช้ชุดสีรุ้งที่สวยงาม!

sns.relplot(x="priceperlb", y="state", hue="year", palette="YlOrBr", data=honey, height=15, aspect=.5);

scatterplot 2

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

state numcol yieldpercol totalprod stocks priceperlb prodvalue year
AZ 55000 60 3300000 1485000 0.64 2112000 1998
AZ 52000 62 3224000 1548000 0.62 1999000 1999
AZ 40000 59 2360000 1322000 0.73 1723000 2000
AZ 43000 59 2537000 1142000 0.72 1827000 2001
AZ 38000 63 2394000 1197000 1.08 2586000 2002
AZ 35000 72 2520000 983000 1.34 3377000 2003
AZ 32000 55 1760000 774000 1.11 1954000 2004
AZ 36000 50 1800000 720000 1.04 1872000 2005
AZ 30000 65 1950000 839000 0.91 1775000 2006
AZ 30000 64 1920000 902000 1.26 2419000 2007
AZ 25000 64 1600000 336000 1.26 2016000 2008
AZ 20000 52 1040000 562000 1.45 1508000 2009
AZ 24000 77 1848000 665000 1.52 2809000 2010
AZ 23000 53 1219000 427000 1.55 1889000 2011
AZ 22000 46 1012000 253000 1.79 1811000 2012

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

sns.relplot(x="priceperlb", y="state", size="year", data=honey, height=15, aspect=.5);

คุณจะเห็นว่าขนาดของจุดค่อย ๆ เพิ่มขึ้น

scatterplot 3

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

เพื่อค้นหาความสัมพันธ์ระหว่างตัวแปรบางตัวในชุดข้อมูลนี้ มาสำรวจกราฟเส้นกัน

กราฟเส้น

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

sns.relplot(x="year", y="priceperlb", kind="line", data=honey);

คำตอบ: ใช่ ยกเว้นบางปี เช่น ปี 2003:

line chart 1

เนื่องจาก Seaborn กำลังรวมข้อมูลรอบเส้นเดียว มันจะแสดง "การวัดหลายครั้งที่ค่า x แต่ละค่าโดยการพล็อตค่าเฉลี่ยและช่วงความเชื่อมั่น 95% รอบค่าเฉลี่ย" ที่มา คุณสามารถปิดพฤติกรรมนี้ได้โดยเพิ่ม ci=None

คำถาม: แล้วในปี 2003 เราเห็นการเพิ่มขึ้นของปริมาณน้ำผึ้งหรือไม่? ถ้าคุณดูการผลิตรวมในแต่ละปีล่ะ?

sns.relplot(x="year", y="totalprod", kind="line", data=honey);

line chart 2

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

คำถาม: ถ้าเช่นนั้น อะไรที่อาจทำให้เกิดการเพิ่มขึ้นของราคาน้ำผึ้งในปี 2003?

เพื่อค้นหาสิ่งนี้ คุณสามารถสำรวจ facet grid

Facet grids

Facet grids ใช้แง่มุมหนึ่งของชุดข้อมูลของคุณ (ในกรณีนี้ คุณสามารถเลือก 'ปี' เพื่อหลีกเลี่ยงการสร้าง facet มากเกินไป) Seaborn สามารถสร้างกราฟสำหรับแต่ละแง่มุมของพิกัด x และ y ที่คุณเลือกเพื่อการเปรียบเทียบที่ง่ายขึ้น ปี 2003 โดดเด่นในลักษณะนี้หรือไม่?

สร้าง facet grid โดยใช้ relplot ตามที่แนะนำใน เอกสารของ Seaborn

sns.relplot(
    data=honey, 
    x="yieldpercol", y="numcol",
    col="year", 
    col_wrap=3,
    kind="line"

ในภาพนี้ คุณสามารถเปรียบเทียบผลผลิตต่อรังและจำนวนรังในแต่ละปี โดยจัดเรียง wrap ที่ 3 สำหรับคอลัมน์:

facet grid

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

กราฟเส้นคู่

ลองสร้างกราฟเส้นหลายเส้นโดยซ้อนทับกราฟเส้นสองเส้นเข้าด้วยกัน โดยใช้ despine ของ Seaborn เพื่อลบ spine ด้านบนและด้านขวา และใช้ ax.twinx ที่มาจาก Matplotlib Twinx ช่วยให้กราฟแชร์แกน x และแสดงแกน y สองแกน ดังนั้น แสดงผลผลิตต่อรังและจำนวนรังที่ซ้อนทับกัน:

fig, ax = plt.subplots(figsize=(12,6))
lineplot = sns.lineplot(x=honey['year'], y=honey['numcol'], data=honey, 
                        label = 'Number of bee colonies', legend=False)
sns.despine()
plt.ylabel('# colonies')
plt.title('Honey Production Year over Year');

ax2 = ax.twinx()
lineplot2 = sns.lineplot(x=honey['year'], y=honey['yieldpercol'], ax=ax2, color="r", 
                         label ='Yield per colony', legend=False) 
sns.despine(right=False)
plt.ylabel('colony yield')
ax.figure.legend();

superimposed plots

แม้ว่าจะไม่มีอะไรโดดเด่นในปี 2003 แต่ก็ช่วยให้เราจบบทเรียนนี้ด้วยโน้ตที่ดูมีความหวัง: แม้ว่าจำนวนรังจะลดลงโดยรวม แต่จำนวนรังก็เริ่มคงที่ แม้ว่าผลผลิตต่อรังจะลดลง

สู้เขานะ ผึ้งน้อย!

🐝❤️

🚀 ความท้าทาย

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

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

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

กราฟเส้นสามารถเรียบง่ายหรือซับซ้อนได้ ลองอ่านเพิ่มเติมใน เอกสารของ Seaborn เกี่ยวกับวิธีต่าง ๆ ที่คุณสามารถสร้างกราฟเส้นได้ ลองปรับปรุงกราฟเส้นที่คุณสร้างในบทเรียนนี้ด้วยวิธีอื่น ๆ ที่ระบุไว้ในเอกสาร

การบ้าน

สำรวจโลกของผึ้ง


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