|
3 weeks ago | |
---|---|---|
.. | ||
README.md | 3 weeks ago | |
assignment.md | 3 weeks ago |
README.md
Hình dung Mối quan hệ: Tất cả về Mật ong 🍯
![]() |
---|
Hình dung Mối quan hệ - Sketchnote của @nitya |
Tiếp tục với trọng tâm nghiên cứu về thiên nhiên, hãy khám phá các cách hình dung thú vị để thể hiện mối quan hệ giữa các loại mật ong khác nhau, dựa trên một tập dữ liệu từ Bộ Nông nghiệp Hoa Kỳ.
Tập dữ liệu này gồm khoảng 600 mục, hiển thị sản lượng mật ong ở nhiều bang của Hoa Kỳ. Ví dụ, bạn có thể xem số lượng đàn ong, sản lượng mỗi đàn, tổng sản lượng, tồn kho, giá mỗi pound, và giá trị mật ong được sản xuất ở một bang từ năm 1998-2012, với mỗi hàng đại diện cho một năm của từng bang.
Sẽ rất thú vị khi hình dung mối quan hệ giữa sản lượng của một bang trong một năm nhất định và, ví dụ, giá mật ong ở bang đó. Ngoài ra, bạn cũng có thể hình dung mối quan hệ giữa sản lượng mật ong mỗi đàn của các bang. Khoảng thời gian này bao gồm sự kiện 'CCD' hay 'Colony Collapse Disorder' lần đầu tiên được ghi nhận vào năm 2006 (http://npic.orst.edu/envir/ccd.html), vì vậy đây là một tập dữ liệu đáng để nghiên cứu. 🐝
Câu hỏi trước bài học
Trong bài học này, bạn có thể sử dụng thư viện Seaborn, mà bạn đã sử dụng trước đó, như một công cụ tốt để hình dung mối quan hệ giữa các biến. Đặc biệt thú vị là việc sử dụng hàm relplot
của Seaborn, cho phép tạo biểu đồ phân tán và biểu đồ đường để nhanh chóng hình dung 'mối quan hệ thống kê', giúp nhà khoa học dữ liệu hiểu rõ hơn cách các biến liên quan đến nhau.
Biểu đồ phân tán
Sử dụng biểu đồ phân tán để hiển thị cách giá mật ong thay đổi theo từng năm, từng bang. Seaborn, với relplot
, tiện lợi nhóm dữ liệu theo bang và hiển thị các điểm dữ liệu cho cả dữ liệu phân loại và dữ liệu số.
Hãy bắt đầu bằng cách nhập dữ liệu và Seaborn:
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
honey = pd.read_csv('../../data/honey.csv')
honey.head()
Bạn sẽ thấy rằng dữ liệu mật ong có một số cột thú vị, bao gồm năm và giá mỗi pound. Hãy khám phá dữ liệu này, được nhóm theo bang của Hoa Kỳ:
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 |
Tạo một biểu đồ phân tán cơ bản để hiển thị mối quan hệ giữa giá mỗi pound mật ong và bang xuất xứ của nó. Làm cho trục y
đủ cao để hiển thị tất cả các bang:
sns.relplot(x="priceperlb", y="state", data=honey, height=15, aspect=.5);
Bây giờ, hiển thị cùng dữ liệu với bảng màu mật ong để thể hiện cách giá thay đổi theo từng năm. Bạn có thể làm điều này bằng cách thêm tham số 'hue' để hiển thị sự thay đổi theo từng năm:
✅ Tìm hiểu thêm về bảng màu bạn có thể sử dụng trong Seaborn - thử một bảng màu cầu vồng đẹp mắt!
sns.relplot(x="priceperlb", y="state", hue="year", palette="YlOrBr", data=honey, height=15, aspect=.5);
Với sự thay đổi bảng màu này, bạn có thể thấy rõ ràng có một sự tiến triển mạnh mẽ theo từng năm về giá mật ong mỗi pound. Thực tế, nếu bạn xem xét một tập dữ liệu mẫu để kiểm tra (chọn một bang cụ thể, ví dụ Arizona), bạn có thể thấy một mô hình tăng giá theo từng năm, với một vài ngoại lệ:
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 |
Một cách khác để hình dung sự tiến triển này là sử dụng kích thước thay vì màu sắc. Đối với người dùng bị mù màu, đây có thể là một lựa chọn tốt hơn. Chỉnh sửa hình dung của bạn để hiển thị sự tăng giá bằng cách tăng chu vi của các điểm:
sns.relplot(x="priceperlb", y="state", size="year", data=honey, height=15, aspect=.5);
Bạn có thể thấy kích thước của các điểm tăng dần.
Đây có phải là một trường hợp đơn giản của cung và cầu? Do các yếu tố như biến đổi khí hậu và sự sụp đổ của đàn ong, liệu có ít mật ong hơn để mua theo từng năm, dẫn đến giá tăng?
Để khám phá mối tương quan giữa một số biến trong tập dữ liệu này, hãy cùng tìm hiểu một số biểu đồ đường.
Biểu đồ đường
Câu hỏi: Có sự tăng giá rõ ràng của mật ong mỗi pound theo từng năm không? Bạn có thể dễ dàng khám phá điều này bằng cách tạo một biểu đồ đường đơn:
sns.relplot(x="year", y="priceperlb", kind="line", data=honey);
Trả lời: Có, với một số ngoại lệ vào khoảng năm 2003:
✅ Vì Seaborn đang tổng hợp dữ liệu xung quanh một đường, nó hiển thị "các phép đo nhiều lần tại mỗi giá trị x bằng cách vẽ trung bình và khoảng tin cậy 95% xung quanh trung bình". Nguồn. Hành vi tốn thời gian này có thể bị vô hiệu hóa bằng cách thêm ci=None
.
Câu hỏi: Vậy, vào năm 2003, liệu chúng ta có thể thấy sự tăng đột biến trong nguồn cung mật ong không? Nếu bạn xem xét tổng sản lượng theo từng năm thì sao?
sns.relplot(x="year", y="totalprod", kind="line", data=honey);
Trả lời: Không hẳn. Nếu bạn xem xét tổng sản lượng, thực tế nó dường như đã tăng trong năm đó, mặc dù nhìn chung lượng mật ong được sản xuất đang giảm trong những năm này.
Câu hỏi: Trong trường hợp đó, điều gì có thể đã gây ra sự tăng đột biến giá mật ong vào khoảng năm 2003?
Để khám phá điều này, bạn có thể sử dụng một lưới facet.
Lưới facet
Lưới facet lấy một khía cạnh của tập dữ liệu của bạn (trong trường hợp này, bạn có thể chọn 'năm' để tránh tạo quá nhiều facet). Seaborn sau đó có thể tạo một biểu đồ cho mỗi facet của các tọa độ x và y bạn chọn để so sánh dễ dàng hơn. Liệu năm 2003 có nổi bật trong loại so sánh này?
Tạo một lưới facet bằng cách tiếp tục sử dụng relplot
như được khuyến nghị bởi tài liệu của Seaborn.
sns.relplot(
data=honey,
x="yieldpercol", y="numcol",
col="year",
col_wrap=3,
kind="line"
Trong hình dung này, bạn có thể so sánh sản lượng mỗi đàn và số lượng đàn ong theo từng năm, cạnh nhau với wrap được đặt là 3 cho các cột:
Đối với tập dữ liệu này, không có gì đặc biệt nổi bật liên quan đến số lượng đàn ong và sản lượng của chúng theo từng năm và từng bang. Có cách nào khác để tìm mối tương quan giữa hai biến này không?
Biểu đồ đường kép
Thử một biểu đồ đường đa dòng bằng cách chồng hai biểu đồ đường lên nhau, sử dụng 'despine' của Seaborn để loại bỏ các cạnh trên và phải, và sử dụng ax.twinx
dẫn xuất từ Matplotlib. Twinx cho phép một biểu đồ chia sẻ trục x và hiển thị hai trục y. Vì vậy, hiển thị sản lượng mỗi đàn và số lượng đàn ong, chồng lên nhau:
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();
Mặc dù không có gì nổi bật vào khoảng năm 2003, điều này cho phép chúng ta kết thúc bài học với một ghi chú tích cực hơn: mặc dù số lượng đàn ong đang giảm, số lượng đàn ong đang ổn định ngay cả khi sản lượng mỗi đàn đang giảm.
Cố lên, ong ơi!
🐝❤️
🚀 Thử thách
Trong bài học này, bạn đã học thêm về các cách sử dụng biểu đồ phân tán và lưới đường, bao gồm lưới facet. Thử thách bản thân bằng cách tạo một lưới facet sử dụng một tập dữ liệu khác, có thể là một tập dữ liệu bạn đã sử dụng trước đó trong các bài học này. Lưu ý thời gian tạo và cách bạn cần cẩn thận về số lượng lưới cần vẽ bằng các kỹ thuật này.
Câu hỏi sau bài học
Ôn tập & Tự học
Biểu đồ đường có thể đơn giản hoặc khá phức tạp. Hãy đọc thêm trong tài liệu của Seaborn về các cách khác nhau bạn có thể xây dựng chúng. Thử nâng cấp các biểu đồ đường bạn đã tạo trong bài học này bằng các phương pháp khác được liệt kê trong tài liệu.
Bài tập
Tuyên bố miễn trừ trách nhiệm:
Tài liệu này đã được dịch bằng dịch vụ dịch thuật AI Co-op Translator. Mặc dù chúng tôi cố gắng đảm bảo độ chính xác, xin lưu ý rằng các bản dịch tự động có thể chứa lỗi hoặc không chính xác. Tài liệu gốc bằng ngôn ngữ bản địa nên được coi là nguồn thông tin chính thức. Đối với các thông tin quan trọng, nên sử dụng dịch vụ dịch thuật chuyên nghiệp từ con người. Chúng tôi không chịu trách nhiệm cho bất kỳ sự hiểu lầm hoặc diễn giải sai nào phát sinh từ việc sử dụng bản dịch này.