codestates / codestates/ds-blog

[김태헌]_200911 seaborn & matplotlib

Open
#93 2 comments 1 reaction 0 assignees View on GitHub
Dominant language
No language data
Stars
2
Forks
4
PR merge metrics
No merged PRs in 30d

Description

오늘 스프린트 챌린지를 하였는데..참담하다.
원래 부족하다는것은 알고있었고 처음이니 그러려니 하는 마음도 한켠에 있었지만, 내 자신에게 울컥한건 초등학교때 태권도 승급심사 떨어진 이후로 처음인듯 하다..

일단 내가 제일 부족하다 느낀 부분은 사실 다른것보다 **'응용력'** 인것같다. 이번 일주일 내내 매번 느꼈던것같다.
수업을 들을때는 고개를 끄덕인다. 물론 필기도 하고 검색도 해가며 수업을 들었다.
하지만 막상 과제를 풀때면, 분명 배운 코드인데 그저 새롭다. 새롭다 못해 배웠다고 생각이 안들정도이다.
열심히 강의해주시는 코치님과 내 과제를 채점하고 피드백을 주시는 코치님께 죄송할 따름이다. 그나마 다행이라면 아직 초반이라는 점과, 어느정도 내 문제점을 인지하고있는 점인듯하다. 해결방법은..아직 모르겠다. 너무 추상적인데다가 나 자신에게 어울리는 해결방법을 찾기까지 시간이 걸릴듯하다.

본론으로 돌아가 오늘 스프린트 챌리지를 해보니 눈에 띄게 부족한 부분들중 하나인 시각화를 해보려 한다.
사실 어제까지만 해도 데이터를 시각화 하기전 정제하는 부분에 있어서 어려움은 느꼈으나, 시각화 하는 과정 자체에서의 어려움은 느끼지 못했는데, 역시 여기서 또 응용력이 문제인 것인지 스프린트 챌린지의 문제에서 벽을 느껴버렸다..
시각화 코드 자체는 인터넷에 검색하면 어렵지 않게 찾아낼수 있으나, 나를위해 한번더 정리하고 시간적 여유가 있다면 조금더 깊게 들어가서 여러가지 옵션들을 설정하는 방법을 알아보려한다.

# 시각화 종류
- 더 많이 있으나 대중적인것, 이번주 수업에서 배웠거나 충분히 활용할수 있었다 생각한 2가지.
- 시각화를 검색하면 pandas가 많이 나오는데 막상 들어가면 seaborn 과 matplotlib 이다.
matplotlib 과 pandas 가 거의 하나같이 쓰인다고 이해했다.
아마 pandas가 matplotlib를 끌어다 쓰는거고 seaborn은 matplotlib를 기반으로 쓸수있는..그런 느낌인듯하다.(아니라면 알려주세요. 수정하겠습니다!)

### seaborn
- seaborn역시 matplotlib 를 기반으로 시각화를 제공한다. pandas와 약간 다른점이라 하면 pandas는 matplotlib의 시각화 함수를 슬쩍 가져와서 맛보기로 사용할수 있다면 seaborn은 matplotlib 의 위에서 일을 하기때문에 좀더 다양한 시각화를 사용할수 있고 matplotlib의 시각화보다 조금더 세련되고 깔끔하게 꾸밀수도 있다. 하지만 matplotlib의 모든 기능을 그대로 끌어다 쓰진 못한다.

### matplotlib
- 근본 시각화 라이브러리 이다.
위의 두 시각화 명령어 역시 matplotlib를 기반으로 하고있을정도로 시각화의 조상이다. 단지 근본이란 말에서 느낄수 있듯이 화려하거나 이쁘거나 사용자친화적인 라이브러리는 아니다. 하지만 활용만 잘 한다면 자신이 말하고자 하는 내용을 전부 시각화로 표현할수 있다 할만큼 좋은 기능을 가진 시각화 라이브러리.

## 적용 예시
- 인터넷으로 찾아보면 보통 본인들이 데이터셋을 만들어서 간단하게 설명한다. 하지만 난 응용력이 제로인지라 조금더 진짜 데이터를 분석할때를 가정하여 데이터셋을 불러와서 적용해보려 한다.

## seaborn
```py
import pandas as pd
import seaborn as sns
import matplotlib as plt
%matplotlib inline
```
이번에는 연습삼아 jupyter notebook을 사용해보았다.`%matplotlib inline`은 colab는 없던건데, jupyter notebook은 시각화한 표를 바로 띄우기위해서는 `%matplotlib inline` 명령어가 필요하다고 한다. 궁금해서 `%matplotlib inline`없이 시각화를 했더니 새로운 이미지 창이 뜨면서 그곳에 그래프가...ㅋㅋㅋ
### countplot
```py
sns.countplot(data = tip, x = "day", hue = "sex")
```
![image](https://user-images.githubusercontent.com/70333648/92882190-a585fb80-f44a-11ea-8846-ee6eface14b6.png)
유명한 친구이다.
바로 다음에서 볼 barplot 와 가장 큰 이점이라 하면 y축이다. countplot 은 y축이 count로 고정되어있어서 x에 대한 수를 세는것이 전부인 심플한 녀석이다. barplot 은 x 와 y 의 값을 설정할수 있어서 좀더 다양한 결과값을 얻을수 있고, 후에 의사결정나무 를 사용할때 용이하다.

### barplot & pointplot
- bar
```py
sns.barplot(data = tip, x = "day", y = "tip", hue = "sex")
```
![image](https://user-images.githubusercontent.com/70333648/92881995-78d1e400-f44a-11ea-9d9a-13aa9ece273a.png)
countplot 과 헷갈릴수도 있지만 생각보다 명확한 차이가 있어서 구분하기 어렵지 않다.

- point
```py
sns.pointplot(data = tip, x = "day", y = "tip", hue = "sex")
```
![image](https://user-images.githubusercontent.com/70333648/92882538-fa297680-f44a-11ea-947d-9258c3f82c94.png)
barplot & pointplot 를 같이 묶은 이유는, 둘은 매우매우 유사한데 사용하는 상황이 약간 다르다.
barplot은 x축이 서로 연관이 없을때 사용하면 보기 좋다.(예 . 남자 여자 , 지역 이름 등)
pointplot은 반대로 x축이 서로 연관이 있을때 사용하면 보기 좋다.(예 . 시간, 날자, 레벨 등)

### distplot
```py
sns.distplot(tip["tip"])
```
![image](https://user-images.githubusercontent.com/70333648/92883895-49bc7200-f44c-11ea-8922-2e8054b804b9.png)
distplot 는 선 그래프로 변화를 알아보는 직관적인 시각화 툴이다.
하지만 아웃라이어가 발생했을경우 오히려 분석에 차질이 생길수 있으니 처리한 후에 사용하는것이 좋다.
이 그래프를 사용하는 요령으로는 봉우리가 가장 높고 큰 부분을 분석하면 원하는 결과값을 얻을 가능성이 매우 높다는 것이다.
참고로 뒤 배경에 막대 그래프가 필요없다 하면 `hist = False` 를 입력하면 막대 그래프가 사라진다.

### lmplot
```py
sns.lmplot(data = tip, x = "total_bill", y = "tip", hue = "sex", fit_reg = False)
```
![image](https://user-images.githubusercontent.com/70333648/92885305-99e80400-f44d-11ea-90fa-23fc65fd4f48.png)
직관적인 시각화 툴중 하나이다. 이친구 또한 아웃 라이어에 매우 민감하며, 범주형 데이터를 x, y에 넣으면 대참사다. 하지만 한편으로는 아웃라이어를 찾아내는데 매우 편리한 시각화 툴이다!
지금처럼 퍼진것이 아니라 같은 선상에 겹겹이 찍히거나 일자로 주루룩 찍혀서 전혀 분석에 도움이 되지 않는다.
참고로 원래는 회귀선이라는 선이 중간에 그어지는데 `fit_reg = False` 로 삭제해주었다.

### subplot
**이 부분은 조금더 이해한 뒤에 추가로 작성하도록 하겠습니다.
쥬피터에서 계속 에러가 나서 제대로 써보지 못했습니다.**

## 느낀점
**확실히 수업때 들은 내용이 다시 떠올라서 금방 한 부분도 있지만, 배웠음에도 불구하고 다른 데이터를 넣으려 하거나 조금만 바꿔보려 하면 에러나 떠서 고생했다. 알고있는 내용을 정리하는편이 시간 활용에 더 좋을거같다는 생각을 하면서도, 한편으로는 좀더 확실히 알수있는 기회가 되어 좋았다.(과제에서 응용하는것은 또 별개의 이야기..) 결과물은 진짜 별거 없어 보이지만 이번주에 틈틈히 수정해 나가서 완성시켜볼 생각이다.

# 이번 주말 안으로 matplot 에 대해 정리하여 다시한번 이 글을 수정하도록 하겠습니다.

다음 내용 준비

## matplot
### barplot

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.