commit
2d2c509519
@ -0,0 +1,203 @@
|
||||
# 수량 시각화
|
||||
|
||||
|![ Sketchnote by [(@sketchthedocs)](https://sketchthedocs.dev) ](../../../sketchnotes/09-Visualizing-Quantities.png)|
|
||||
|:---:|
|
||||
| 수량 시각화 - _제작자 : [@nitya](https://twitter.com/nitya)_ |
|
||||
|
||||
이 강의에서는 사용할 수 있는 많은 파이썬 라이브러리 중에 하나를 사용하여 수량 개념과 관련된 흥미로운 시각화를 만드는 방법을 알아봅니다. 여러분은 미네소타의 새들에 대한 정리된 데이터 세트를 사용하여, 지역 야생동물에 대한 많은 흥미로운 사실들을 배울 수 있습니다.
|
||||
## [강의 전 퀴즈](https://red-water-0103e7a0f.azurestaticapps.net/quiz/16)
|
||||
|
||||
## Matplotlib으로 날개 길이 관찰하기
|
||||
|
||||
다양한 종류의 간단하고 정교한 플롯과 차트를 모두 생성할 수 있는 훌륭한 라이브러리는 [Matplotlib](https://matplotlib.org/stable/index.html) 입니다. 일반적으로 이러한 라이브러리를 사용하여 데이터를 그리는 프로세스에는 대상으로 지정하려는 데이터 프레임 부분 식별, 필요한 해당 데이터에 대한 변환 수행, x 및 y축 값 할당, 표시할 플롯 종류를 결정한 다음 그림을 표시하는 작업이 포함됩니다. Matplotlib은 다양한 시각화를 제공하지만, 이 강의에서는 수량 시각화에 가장 적합한 선형 차트, 산점도 및 막대그래프에 중점을 두겠습니다.
|
||||
|
||||
> ✅ 데이터 구조와 전달하려는 내용에 가장 적합한 차트를 사용하세요.
|
||||
> - 시간 경과에 따른 추세 분석: 선
|
||||
> - 값을 비교하기: 막대, 세로 막대형, 파이, 산점도
|
||||
> - 부분이 전체와 어떻게 관련되어 있는지 보여주기: 파이
|
||||
> - 데이터 분포 표시: 산점도, 막대
|
||||
> - 추세 표시: 선, 세로 막대형
|
||||
> - 값 사이의 관계 표시: 선, 산점도, 버블
|
||||
|
||||
데이터 세트가 있고 주어진 항목이 얼마나 포함되어 있는지 확인해야 하는 경우에, 가장 먼저 처리해야 하는 작업 중 하나는 해당 값을 검사하는 것입니다.
|
||||
|
||||
✅ Matplotlib에 사용할 수 있는 매우 좋은 '치트 시트'가 있습니다. [here](https://github.com/matplotlib/cheatsheets/blob/master/cheatsheets-1.png) and [here](https://github.com/matplotlib/cheatsheets/blob/master/cheatsheets-2.png).
|
||||
|
||||
## 새 날개 길이 값에 대한 선 그래프 작성하기
|
||||
|
||||
이 강의 폴더의 루트에 있는 `notebook.ipynb` 파일을 열고 셀을 추가합니다.
|
||||
|
||||
> 참고: 데이터는 '/데이터'폴더의 이 repo 루트에 저장됩니다.
|
||||
|
||||
```python
|
||||
import pandas as pd
|
||||
import matplotlib.pyplot as plt
|
||||
birds = pd.read_csv('../../data/birds.csv')
|
||||
birds.head()
|
||||
```
|
||||
이 데이터는 텍스트와 숫자의 혼합으로 이루어져있습니다:
|
||||
|
||||
|
||||
| | Name | ScientificName | Category | Order | Family | Genus | ConservationStatus | MinLength | MaxLength | MinBodyMass | MaxBodyMass | MinWingspan | MaxWingspan |
|
||||
| ---: | :--------------------------- | :--------------------- | :-------------------- | :----------- | :------- | :---------- | :----------------- | --------: | --------: | ----------: | ----------: | ----------: | ----------: |
|
||||
| 0 | Black-bellied whistling-duck | Dendrocygna autumnalis | Ducks/Geese/Waterfowl | Anseriformes | Anatidae | Dendrocygna | LC | 47 | 56 | 652 | 1020 | 76 | 94 |
|
||||
| 1 | Fulvous whistling-duck | Dendrocygna bicolor | Ducks/Geese/Waterfowl | Anseriformes | Anatidae | Dendrocygna | LC | 45 | 53 | 712 | 1050 | 85 | 93 |
|
||||
| 2 | Snow goose | Anser caerulescens | Ducks/Geese/Waterfowl | Anseriformes | Anatidae | Anser | LC | 64 | 79 | 2050 | 4050 | 135 | 165 |
|
||||
| 3 | Ross's goose | Anser rossii | Ducks/Geese/Waterfowl | Anseriformes | Anatidae | Anser | LC | 57.3 | 64 | 1066 | 1567 | 113 | 116 |
|
||||
| 4 | Greater white-fronted goose | Anser albifrons | Ducks/Geese/Waterfowl | Anseriformes | Anatidae | Anser | LC | 64 | 81 | 1930 | 3310 | 130 | 165 |
|
||||
|
||||
먼저 기본 선 그래프을 사용하여 숫자 데이터 중 일부를 표시해 보겠습니다. 여러분이 이 흥미로운 새들의 최대 날개 길이를 보고싶다고 가정해 보겠습니다.
|
||||
|
||||
```python
|
||||
wingspan = birds['MaxWingspan']
|
||||
wingspan.plot()
|
||||
```
|
||||
![Max Wingspan](../images/max-wingspan.png)
|
||||
|
||||
여러분은 바로 무언가를 알아차리셨나요? 적어도 하나의 이상값이 있는 것 같은데, 날개 폭이 꽤 넓군요! 2300센티미터의 날개 폭은 23미터와 같습니다. 미네소타를 배회하는 익룡이 있는 걸까요? 조사해 봅시다.
|
||||
|
||||
Excel에서 빠른 정렬을 수행하여 오타일 가능성이 있는 이상값을 찾을 수 있지만, 플롯 내에서 작업하여 시각화 프로세스를 계속합니다.
|
||||
|
||||
x축에 label을 추가하여 문제의 새 종류를 표시합니다.
|
||||
|
||||
```
|
||||
plt.title('Max Wingspan in Centimeters')
|
||||
plt.ylabel('Wingspan (CM)')
|
||||
plt.xlabel('Birds')
|
||||
plt.xticks(rotation=45)
|
||||
x = birds['Name']
|
||||
y = birds['MaxWingspan']
|
||||
|
||||
plt.plot(x, y)
|
||||
|
||||
plt.show()
|
||||
```
|
||||
![wingspan with labels](../images/max-wingspan-labels.png)
|
||||
|
||||
label의 회전을 45도로 설정해도 읽기에는 너무 많습니다. 다른 전략을 시도해 보겠습니다. 해당 이상값에만 label을 지정하고 차트 내에 label을 설정합니다. 분산형 차트를 사용하여 labeling을 위한 더 많은 공간을 만들 수 있습니다.
|
||||
|
||||
```python
|
||||
plt.title('Max Wingspan in Centimeters')
|
||||
plt.ylabel('Wingspan (CM)')
|
||||
plt.tick_params(axis='both',which='both',labelbottom=False,bottom=False)
|
||||
|
||||
for i in range(len(birds)):
|
||||
x = birds['Name'][i]
|
||||
y = birds['MaxWingspan'][i]
|
||||
plt.plot(x, y, 'bo')
|
||||
if birds['MaxWingspan'][i] > 500:
|
||||
plt.text(x, y * (1 - 0.05), birds['Name'][i], fontsize=12)
|
||||
|
||||
plt.show()
|
||||
```
|
||||
무슨 일이 일어나고 있는 거죠? `tick_params`를 사용하여 하단 레이블을 숨긴 다음 새 데이터(bird data) 에 루프를 만들었습니다. 'bo'를 이용해 작고 동그란 파란 점으로 차트를 표시하면 최대 날개 길이가 500을 초과하는 새가 있는지 확인하고 점 옆에 label을 표시했습니다. label을 y축에서 약간 오프셋(`y * (1 - 0.05)`)하고 새 이름을 레이블로 사용했습니다.
|
||||
What did you discover?
|
||||
|
||||
![outliers](../images/labeled-wingspan.png)
|
||||
## 데이터 필터링
|
||||
|
||||
대머리 독수리(Bald eagle)와 대머리 매(Prairie falcon)은 아마도 매우 큰 새일 것이지만, 이들의 최대 날개 길이에 '0'이 추가되어 잘못 표기된 것으로 보입니다. 여러분이 25미터의 날개폭을 가진 흰머리 독수리를 만날 것 같지는 않지만, 만약 만난다면 우리에게 알려주세요! 이제 이 두 가지 이상치를 제외하고 새 데이터 프레임을 생성해 보겠습니다.
|
||||
|
||||
```python
|
||||
plt.title('Max Wingspan in Centimeters')
|
||||
plt.ylabel('Wingspan (CM)')
|
||||
plt.xlabel('Birds')
|
||||
plt.tick_params(axis='both',which='both',labelbottom=False,bottom=False)
|
||||
for i in range(len(birds)):
|
||||
x = birds['Name'][i]
|
||||
y = birds['MaxWingspan'][i]
|
||||
if birds['Name'][i] not in ['Bald eagle', 'Prairie falcon']:
|
||||
plt.plot(x, y, 'bo')
|
||||
plt.show()
|
||||
```
|
||||
|
||||
이상치를 필터링함으로써 이제 데이터의 응집력이 높아지고 이해하기 쉬워졌습니다.
|
||||
|
||||
![scatterplot of wingspans](../images/scatterplot-wingspan.png)
|
||||
|
||||
이제 우리는 적어도 날개 길이 측면에서 더 깨끗한 데이터 셋를 얻었으므로 이 새들에 대해 더 자세히 알아보겠습니다.
|
||||
|
||||
선 그래프 및 산점도 그래프는 데이터 값과 그 분포에 대한 정보를 표시할 수 있지만, 이 데이터 셋에 내재된 값에 대해 고려하려고 합니다. 수량에 대한 다음 질문에 답하기 위해 시각화를 만들 수 있습니다.
|
||||
|
||||
> 새의 종류는 몇 가지이며 그 수는 얼마인가요?
|
||||
> 얼마나 많은 새들이 멸종했고, 멸종위기에 처해있고, 희귀하거나 흔할까요?
|
||||
> Linnaeus의 용어에는 얼마나 많은 다양한 속과 목들이 있나요?
|
||||
## 막대 차트 탐색
|
||||
|
||||
막대형 차트는 데이터 그룹화를 보여줘야 할 때 유용합니다. 이 데이터셋에 있는 새들의 를 탐색하여 숫자로 가장 흔한 새가 무엇인지 알아보겠습니다.
|
||||
|
||||
노트북 파일에서 기본 막대 차트를 만듭니다.
|
||||
|
||||
✅ 참고, 앞 섹션에서 식별한 두 개의 이상값 새를 필터링하거나, 날개 폭의 오타를 편집하거나, 날개 폭 값에 의존하지 않는 연습에 사용할 수 있습니다.
|
||||
|
||||
막대 차트를 만들고 싶다면 초점을 맞출 데이터를 선택하면 됩니다. 원시 데이터로 막대 차트를 만들 수 있습니다.
|
||||
|
||||
```python
|
||||
birds.plot(x='Category',
|
||||
kind='bar',
|
||||
stacked=True,
|
||||
title='Birds of Minnesota')
|
||||
|
||||
```
|
||||
![full data as a bar chart](../images/full-data-bar.png)
|
||||
|
||||
그러나 그룹화되지 않은 데이터가 너무 많기 때문에 이 막대 차트를 읽을 수 없습니다. 표시할 데이터만 선택해야 하므로 카테고리를 기준으로 새의 길이를 살펴보겠습니다.
|
||||
|
||||
새 카테고리만 포함하도록 데이터를 필터링합니다.
|
||||
|
||||
✅ Pandas를 사용하여 데이터를 관리한 다음 Matplotlib으로 차트 작성을 합니다.
|
||||
|
||||
카테고리가 많으므로 이 차트를 세로로 표시하고 모든 데이터를 설명하도록 높이를 조정할 수 있습니다.
|
||||
|
||||
```python
|
||||
category_count = birds.value_counts(birds['Category'].values, sort=True)
|
||||
plt.rcParams['figure.figsize'] = [6, 12]
|
||||
category_count.plot.barh()
|
||||
```
|
||||
![category and length](../images/category-counts.png)
|
||||
|
||||
이 막대 차트는 각 카테고리의 새의 수를 잘 보여줍니다. 눈 깜짝할 사이에 이 지역에서 가장 많은 수의 새가 오리(Ducks)/거위(Geese)/물새(Waterfowl) 카테고리에 있음을 알 수 있습니다. 미네소타는 '10,000개의 호수의 땅'이므로 이것은 놀라운 일이 아닙니다!
|
||||
|
||||
✅ 이 데이터 세트에서 다른 수를 시도하세요. 여러분을 놀라게 하는 것이 있나요?
|
||||
|
||||
## 데이터 비교
|
||||
|
||||
새로운 축을 만들어 그룹화된 데이터의 다양한 비교를 시도할 수 있습니다. 카테고리에 따라 새의 MaxLength를 비교하세요.
|
||||
|
||||
```python
|
||||
maxlength = birds['MaxLength']
|
||||
plt.barh(y=birds['Category'], width=maxlength)
|
||||
plt.rcParams['figure.figsize'] = [6, 12]
|
||||
plt.show()
|
||||
```
|
||||
![comparing data](../images/category-length.png)
|
||||
|
||||
여기서 놀라운 것은 없습니다. 벌새(hummingbirds)는 펠리컨(Pelicans)이나 기러기(Geese)에 비해 MaxLength가 가장 짧습니다. 데이터가 논리적으로 타당할 때 좋습니다!
|
||||
|
||||
데이터를 중첩하여 막대 차트에 대한 더 흥미로운 시각화를 만들 수 있습니다. 주어진 새 카테고리에 최소 및 최대 길이를 중첩해 보겠습니다.
|
||||
|
||||
```python
|
||||
minLength = birds['MinLength']
|
||||
maxLength = birds['MaxLength']
|
||||
category = birds['Category']
|
||||
|
||||
plt.barh(category, maxLength)
|
||||
plt.barh(category, minLength)
|
||||
|
||||
plt.show()
|
||||
```
|
||||
이 플롯에서는 최소 길이 및 최대 길이의 새 카테고리당 범위를 볼 수 있습니다. 이 데이터를 고려할 때, 새의 몸길이가 클수록 새의 몸길이는 더 넓어진다고 해도 무방할 것입니다. 신기하지 않나요!
|
||||
|
||||
![superimposed values](../images/superimposed.png)
|
||||
|
||||
## 🚀 도전
|
||||
|
||||
이 새 데이터 셋은 특정 생태계 내의 다양한 종류의 새에 대한 풍부한 정보를 제공합니다. 인터넷을 검색하여 다른 조류 지향 데이터 셋을 찾을 수 있는지 확인해 보세요. 여러분이 깨닫지 못한 사실을 발견하기 위해 이 새들에 대한 차트와 그래프를 만드는 연습을 하세요.
|
||||
## [이전 강의 퀴즈](https://red-water-0103e7a0f.azurestaticapps.net/quiz/17)
|
||||
|
||||
## 복습 & 자기주도학습
|
||||
|
||||
이번 첫번째 강의에서는 Matplotlib을 사용하여 수량을 시각화하는 방법에 대한 몇 가지 정보를 배웠습니다. 시각화를 위해 데이터셋으로 작업할 수 있는 다른 방법에 대해 알아보세요. [Plotly](https://github.com/plotly/plotly.py) 는 이 강의에서 다루지 않을 내용입니다. 어떤 기능을 제공하는지 살펴보세요.
|
||||
## 과제
|
||||
|
||||
[선, 산점도, 막대 그래프](assignment.md)
|
@ -0,0 +1,11 @@
|
||||
# 선, 산점도, 막대 그래프
|
||||
|
||||
## 지침
|
||||
|
||||
이 강의에서는 선형 차트, 산점도 및 막대형 차트를 사용하여 이 데이터 셋에 대한 흥미로운 사실을 보여 주었습니다. 이 과제에서는 데이터셋을 자세히 조사하여 특정 유형의 새에 대한 사실을 발견하는 과정을 진행합니다. 예를 들어, 흰기러기(Snoew Geese)에 대한 모든 흥미로운 데이터를 시각화하는 노트북을 만드는 것이 있습니다. 위에서 언급한 세 가지의 플롯을 사용하여 여러분의 노트북을 만들어보세요.
|
||||
|
||||
## 기준표
|
||||
|
||||
모범적인 | 적당한 | 개선 필요
|
||||
--- | --- | -- |
|
||||
좋은 주석처리, 탄탄한 내용, 매력적인 그래프로 노트북 작성 | 노트북에 다음 요소 중 하나가 없습니다. | 노트북에 요소 중에 두 가지가 없습니다.
|
@ -0,0 +1,174 @@
|
||||
# 관계 시각화: 꿀의 모든 것 🍯
|
||||
|
||||
|![ Sketchnote by [(@sketchthedocs)](https://sketchthedocs.dev) ](../../../sketchnotes/12-Visualizing-Relationships.png)|
|
||||
|:---:|
|
||||
|관계 시각화 - _제작자 : [@nitya](https://twitter.com/nitya)_ |
|
||||
|
||||
계속해서 우리 연구의 본질에 초점을 맞춰 [미국 농무부](https://www.nass.usda.gov/About_NASS/index.php)에서 도출된 데이터 셋에 따라 다양한 꿀 유형 간의 관계를 보여주는 흥미로운 시각화를 발견해 보겠습니다.
|
||||
|
||||
약 600개 항목으로 구성된 이 데이터셋은 미국의 여러 주에서의 꿀 생산량을 보여줍니다. 예를 들어, 1998년부터 2012년까지 각 주에 대해 연간 한 행씩 군집의 수, 군집 당 수확량, 총 생산량, 재고, 파운드당 가격 및 특정 주에서 생산된 꿀의 가치를 볼 수 있습니다.
|
||||
|
||||
예를 들어 해당 주의 연간 생산량과 해당 주의 꿀 가격 간의 관계를 시각화하는 것은 흥미로울 것입니다. 또는 각 주의 군집 당 꿀 생산량 간의 관계를 시각화할 수 있습니다. 올해에는 2006년(http://npic.orst.edu/envir/ccd.html)에 처음 발견된 파괴적인 'CCD' 또는 '봉군붕괴증후군'을 다루는데, 이것은 연구하기에 가슴 아픈 데이터 셋입니다. 🐝
|
||||
|
||||
## [이전 강의 퀴즈](https://red-water-0103e7a0f.azurestaticapps.net/quiz/22)
|
||||
|
||||
이 강의에서는 변수 간의 관계를 시각화하는 좋은 라이브러리로, 전에 사용했던 Seaborn을 사용할 수 있습니다. 특히 흥미로운 점은 산점도와 선 플롯이 '[통계적 관계](https://seaborn.pydata.org/tutorial/relational.html?highlight=relationships)'를 빠르게 시각화할 수 있도록 해주는 Seaborn의 'relplot' 기능입니다. 'replot'은 데이터 과학자가 변수들이 서로 어떻게 관련되어 있는지 더 잘 이해할 수 있도록 합니다.
|
||||
|
||||
## 산점도
|
||||
|
||||
산점도를 사용하여 해마다 주별로 꿀 가격이 어떻게 변해왔는지 확인할 수 있습니다. Seaborn은 'replot'을 사용하여 상태 데이터를 편리하게 그룹화하고 범주형 데이터와 수치형 데이터 모두에 대한 데이터를 점으로 표시합니다.
|
||||
|
||||
먼저 데이터와 Seaborn을 가져오는 것으로 시작하겠습니다:
|
||||
|
||||
```python
|
||||
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 |
|
||||
|
||||
|
||||
꿀 1파운드 당 가격과 미국 원산지 간의 관계를 보여주는 기본 산점도를 생성합니다. 'y'축을 모든 상태를 표시할 수 있을 만큼 높게 만듭니다:
|
||||
|
||||
```python
|
||||
sns.relplot(x="priceperlb", y="state", data=honey, height=15, aspect=.5);
|
||||
```
|
||||
![scatterplot 1](../images/scatter1.png)
|
||||
|
||||
이제 동일한 데이터를 꿀 색상 구성표로 표시하여 몇 년 동안 가격이 어떻게 변하는지 보여줍니다. 매년 변경 사항을 표시하기 위해 'hue' 매개 변수를 추가하여 이를 수행할 수 있습니다:
|
||||
|
||||
> ✅ [Seaborn에서 사용할 수 있는 색상 팔레트](https://seaborn.pydata.org/tutorial/color_palettes.html) 에 대해 자세히 알아보기 - 아름다운 무지개 색 구성표를 시도하세요!
|
||||
|
||||
```python
|
||||
sns.relplot(x="priceperlb", y="state", hue="year", palette="YlOrBr", data=honey, height=15, aspect=.5);
|
||||
```
|
||||
![scatterplot 2](../images/scatter2.png)
|
||||
|
||||
이 색상 구성표 변경을 통해, 여러분은 파운드당 꿀의 가격 측면에서 몇 년 동안 분명히 강력한 발전이 있음을 알 수 있습니다. 실제로 검증할 데이터의 표본 셋(예: 아리조나 주를 선택)을 보면 몇 가지 예외를 제외하고 매년 가격이 상승하는 패턴을 볼 수 있습니다:
|
||||
|
||||
| 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 |
|
||||
|
||||
|
||||
이 진행 상황을 시각화하는 또 다른 방법은 색상이 아닌 크기를 사용하는 것입니다. 색맹 사용자의 경우 이것이 더 나은 옵션일 수 있습니다. 점 둘레의 증가에 따른 가격 인상을 표시하도록 시각화를 편집합니다:
|
||||
|
||||
```python
|
||||
sns.relplot(x="priceperlb", y="state", size="year", data=honey, height=15, aspect=.5);
|
||||
```
|
||||
점들의 크기가 점점 커지는 것을 볼 수 있습니다.
|
||||
|
||||
![scatterplot 3](../images/scatter3.png)
|
||||
|
||||
이것은 단순한 수요와 공급의 경우인가요? 기후 변화 및 봉군 붕괴와 같은 요인으로 인해, 매년 구매할 수 있는 꿀이 줄어들어 가격이 상승하나요?
|
||||
|
||||
이 데이터 셋의 일부 변수 간의 상관 관계를 발견하기 위해 몇 가지 꺾은선 그래프를 살펴보겠습니다.
|
||||
|
||||
## 꺾은선 그래프
|
||||
|
||||
질문: 매년 파운드 당 꿀값이 상승하고 있습니까? 여러분은 단일 꺾은선 그래프를 만들어 가장 쉽게 확인할 수 있습니다:
|
||||
|
||||
```python
|
||||
sns.relplot(x="year", y="priceperlb", kind="line", data=honey);
|
||||
```
|
||||
답변: 네, 2003년 경의 일부 예외를 제외하고 그렇습니다:
|
||||
|
||||
![line chart 1](../images/line1.png)
|
||||
|
||||
✅ Seaborn은 한 선으로 데이터를 집계하기 때문에 "평균을 중심으로 95% 신뢰 구간과 평균을 표시하여 각 x 값에 대한 다중 측정"을 표시합니다. [출처](https://seaborn.pydata.org/tutorial/relational.html). 이 시간 소모적인 동작은 `ci=None`을 추가하여 비활성화할 수 있습니다.
|
||||
|
||||
질문: 2003년에도 꿀 공급이 급증하는 것을 볼 수 있습니까? 연간 총 생산량을 보면 어떨까요?
|
||||
|
||||
```python
|
||||
sns.relplot(x="year", y="totalprod", kind="line", data=honey);
|
||||
```
|
||||
|
||||
![line chart 2](../images/line2.png)
|
||||
|
||||
답변: 그렇지 않습니다. 총 생산량을 보면 그 해에 실제로 증가한 것으로 보이지만 일반적으로 이 기간 동안 생산되는 꿀의 양은 감소하고 있습니다.
|
||||
|
||||
질문: 그렇다면 2003년경 꿀 가격이 급등하게 된 원인은 무엇이었습니까?
|
||||
|
||||
이를 발견하기 위해 facet grid를 탐색할 수 있습니다.
|
||||
|
||||
## Facet grids
|
||||
|
||||
Facet grid는 데이터셋의 한 면을 차지합니다(우리의 경우 너무 많은 면을 생산하지 않도록 '연도'를 선택할 수 있습니다). 그런 다음 Seaborn은 보다 쉬운 시각적 비교를 위해 선택한 x 좌표와 y 좌표의 각 면에 대한 플롯을 만들 수 있습니다. 2003년은 이런 유형의 비교에서 두드러집니까?
|
||||
|
||||
[Seaborn의 문서](https://seaborn.pydata.org/generated/seaborn.FacetGrid.html?highlight=facetgrid#seaborn.FacetGrid)에서 권장하는 대로 'relplot'을 계속 사용하여 facet grid를 만듭니다.
|
||||
|
||||
```python
|
||||
sns.relplot(
|
||||
data=honey,
|
||||
x="yieldpercol", y="numcol",
|
||||
col="year",
|
||||
col_wrap=3,
|
||||
kind="line"
|
||||
```
|
||||
이 시각화에서는 군집 당 수확량과 연간 군집 수를 3개로 감싸진 열로 나란히 비교할 수 있습니다:
|
||||
|
||||
![facet grid](../images/facet.png)
|
||||
|
||||
이 데이터셋의 경우, 매년 주별로 군집 수와 수확량과 관련하여 특별히 눈에 띄는 것은 없습니다. 이 두 변수 사이의 상관 관계를 찾는 다른 방법이 있습니까?
|
||||
|
||||
## 이중 꺾은선 그래프
|
||||
|
||||
Seaborn의 'despine'을 사용하여 상단 및 오른쪽 가시를 제거하고, `ax.twinx` [Matplotlib에서 파생된](https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.twinx.html)을 사용하여 두 개의 꺾은 선 그래프를 서로 겹쳐서 여러 개의 꺾은 선 그래프를 시도합니다. Twinx를 사용하면 차트가 x축을 공유하고 두 개의 y축을 표시할 수 있습니다. 따라서 군집 당 수확량과 군집 수를 겹쳐서 표시합니다:
|
||||
|
||||
```python
|
||||
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](../images/dual-line.png)
|
||||
|
||||
2003년경에 눈에 띄는 것은 아무것도 없지만, 이것은 우리에게 이 강의을 조금 더 행복하게 마무리 할 수 있게 합니다. 전반적으로 군집의 수는 감소하는 반면, 군집당 수확량은 감소하고 있다고 해도 군집의 수는 안정되고 있습니다.
|
||||
|
||||
벌들아, 고고!
|
||||
|
||||
🐝❤️
|
||||
## 🚀 도전
|
||||
|
||||
이번 강의에서는 facet grid를 비롯한 산점도 및 꺾은선 그래프의 다른 용도에 대해 조금 더 알아봤습니다. 다른 데이터 셋(이 교육 전에 사용했을 수도 있습니다.)을 사용하여 facet grid를 만드는 데 도전해보세요. 이러한 기술을 사용하여 그리드를 만드는 데 걸리는 시간과 그리드를 몇 개 그려야 하는지 주의할 필요가 있습니다.
|
||||
## [이전 강의 퀴즈](https://red-water-0103e7a0f.azurestaticapps.net/quiz/23)
|
||||
|
||||
## 복습 & 자기 주도 학습
|
||||
|
||||
꺾은선 그래프는 단순하거나 매우 복잡할 수 있습니다. [Seaborn 문서](https://seaborn.pydata.org/generated/seaborn.lineplot.html)에서 빌드할 수 있는 다양한 방법을 읽어 보세요. 문서에 나열된 다른 방법을 사용하여 이 강의에서 만든 꺾은선그래프를 향상시키세요.
|
||||
## 과제
|
||||
|
||||
[벌집 속으로 뛰어들어라](assignment.md)
|
Loading…
Reference in new issue