반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART) 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

<seaborn 관련 글>

 

2021.08.08 - [파이썬 패키지/데이터시각화] - [Python/Seaborn] 데이터 시각화 라이브러리_1편. Seaborn 소개

2021.08.18 - [파이썬 패키지/데이터시각화] - [Python/Seaborn] 데이터 시각화 라이브러리_2편. Seaborn 학습을 위한 데이터 셋 3종 소개 (ft. 붓꽃, 타이타닉, 팁 데이터 셋)

2021.08.19 - [파이썬 패키지/데이터시각화] - [Python/Seaborn] 데이터 시각화 라이브러리_3편. Seaborn 그래프 종류 총 정리(ft. Relational plots)

2021.08.22 - [파이썬 패키지/데이터시각화] - [Python/Seaborn] 데이터 시각화 라이브러리_4편. Seaborn 그래프 종류 총 정리(ft. Distribution plots)

2021.08.23 - [파이썬 패키지/데이터시각화] - [Python/Seaborn] 데이터 시각화 라이브러리_5편. Seaborn 그래프 종류 총 정리(ft. Categorical plots(상))

2021.08.24 - [파이썬 패키지/데이터시각화] - [Python/Seaborn] 데이터 시각화 라이브러리_6편. Seaborn 그래프 종류 총 정리(ft. Categorical plots(하))

2021.08.26 - [파이썬 패키지/데이터시각화] - [Python/Seaborn] 데이터 시각화 라이브러리_7편. Seaborn 그래프 종류 총 정리(ft. Regression Plot)

 


 

오늘은 데이터간의 상관관계를 파악하는데에 많이 사용하는 Matrix plots에 대해서 공부해보겠습니다.

 

Matrix plots에는 heatmap, clustermap 두 가지가 있지만 clustermap은 잘 사용되지 않아서 heatmap만 다루어보도록 하겠습니다.

 

heatmap

  • 열화상 카메라로 찍은 것 처럼 데이터의 상관관계 정도에 따라 색차이를 부여한 그래프
  • 기본적으로 2차원 데이터가 필요(pivot-table, correlation 개념 이용)

 

1) heatmap과 pivot-table

 

오늘도 지난 강의들에서 이용했던 tips 데이터 셋을 이용해보겠습니다.

 

tips = sns.load_dataset('tips')
tips

 

 

pivot_table 함수를 이용해 행은 'day', 열은 'size', 데이터값은 'tip'으로 된 Matrix를 만들어 보겠습니다.

 

pivot = tips.pivot_table(index='day', columns='size', values='tip')
pivot

 

pivot-table에 대해서 더 공부하고 싶으시면 아래의 글을 참고해주세요.

 

2021.07.25 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 10편. 데이터 프레임 배치를 내맘대로! (ft. pivot-table, groupby, multi-index)

 

 

다시 본론으로 돌아와서 위에서 만든 pivot-table을 이용해 heatmap을 그려보겠습니다. 참고로 annot 파라미터를 True로 설정해주면 값을 칸 안에 표시해줍니다.

 

sns.heatmap(pivot, annot=True)

 

아래의 heatmap은 요일과 식사인원에 따른 팁의 평균을 직관적으로 보여줍니다.

 

전반적으로 식사인원이 많을 수록 많은 tip을 주고, 대략 인당 1달러를 팁으로 주는 듯하네요.

 

2) heatmap과 correlation matrix

 

이번에는 붓꽃 데이터를 이용해서 컬럼간의 상관관계를 heatmap으로 그려 보겠습니다.

 

iris = sns.load_dataset("iris")
iris

 

 

corr( ) 함수를 이용해서 iris 데이터 셋의 컬럼들간의 관계를 2차원 행렬로 만들어 보겠습니다.

 

corr = iris.corr()
corr

 

같은 열끼리는 상관관계 정도가 1(동일)이며, -값의 경우는 반비례하는 상관관계를 가지는 것이라고 합니다.

 

마찬가지로 corr을 heatmap에 넣어서 그래프를 그려보겠습니다.

 

sns.heatmap(corr, annot=True)

 

아래의 데이터 셋의 의미를 참고해보았을 때, 다음과 같은 추론을 할 수 있습니다.

 

1) 꽃잎의 길이 길면 너비도 넓다.

2) 꽃잎의 길이와 꽃받침의 길이 또한 높은 상관관계를 가진다.

3) 꽃받침의 너비와 꽃받침의 길이는 거의 관계가 없다.

 

컬럼명 의미
sepal_length 꽃받침의 길이
sepal_width 꽃받침의 너비
petal_length 꽃잎의 길이
petal_width 꽃잎의 너비

 

참고로 상관 계수는 일반적으로,

값이 -1.0 ~ -0.7 이면, 강한 음적 상관관계
값이 -0.7 ~ -0.3 이면, 뚜렷한 음적 상관관계
값이 -0.3 ~ -0.1 이면, 약한 음적 상관관계
값이 -0.1 ~ +0.1 이면, 없다고 할 수 있는 상관관계
값이 +0.1 ~ +0.3 이면, 약한 양적 상관관계
값이 +0.3 ~ +0.7 이면, 뚜렷한 양적 상관관계
값이 +0.7 ~ +1.0 이면, 강한 양적 상관관계로 해석된다고 합니다.

 


<참고 자료>

 

패스트캠퍼스 유료강의_직장인을 위한 파이썬 데이터분석 올인원 패키지 Online.

 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART) 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

<seaborn 관련 글>

 

2021.08.08 - [파이썬 패키지/데이터시각화] - [Python/Seaborn] 데이터 시각화 라이브러리_1편. Seaborn 소개

2021.08.18 - [파이썬 패키지/데이터시각화] - [Python/Seaborn] 데이터 시각화 라이브러리_2편. Seaborn 학습을 위한 데이터 셋 3종 소개 (ft. 붓꽃, 타이타닉, 팁 데이터 셋)

2021.08.19 - [파이썬 패키지/데이터시각화] - [Python/Seaborn] 데이터 시각화 라이브러리_3편. Seaborn 그래프 종류 총 정리(ft. Relational plots)

2021.08.22 - [파이썬 패키지/데이터시각화] - [Python/Seaborn] 데이터 시각화 라이브러리_4편. Seaborn 그래프 종류 총 정리(ft. Distribution plots)

2021.08.23 - [파이썬 패키지/데이터시각화] - [Python/Seaborn] 데이터 시각화 라이브러리_5편. Seaborn 그래프 종류 총 정리(ft. Categorical plots(상))

2021.08.24 - [파이썬 패키지/데이터시각화] - [Python/Seaborn] 데이터 시각화 라이브러리_6편. Seaborn 그래프 종류 총 정리(ft. Categorical plots(하))


 

오늘은 선형 회귀와 관련된 Regression plots에 대해서 공부해보겠습니다.

 

Regression plots

1) regplot

2) lmplot

3) residplot

 

 

1. regplot

  • scatterplot와 lineplot을 합쳐놓은 그래프
  • lineplot은 scatterplot의 경향성을 예측하는 쪽으로 그어짐

 

ax = sns.regplot(x = "total_bill", y = "tip", data = tips)

regplot

 

scatterplot을 그려보았습니다. 위의 regplot 그래프와 lineplot을 제외하고 동일한 것을 확인할 수 있습니다.

 

scatterplot

 

2. lmplot

  • regplot의 상위호환 그래프
  • 여러개의 그래프를 함께 그릴 수 있으며, hue 파라미터 설정 가능
  • regplot은 잊고 lmplot만 사용하면 됨

 

ax = sns.lmplot(x = 'total_bill', y = 'tip', hue = 'smoker', data = tips)

 

총 금액과 팁간의 관계를 흡연여부에 따라 다르게 그려본 그래프입니다.

 

데이터 점들의 경향을 나타낸 선형 회귀선을 보았을 때, 비흡연자들이 비교적 팁을 많이 지불한 것으로 보입니다. (큰 총액에서 차이가 많음)

 

lmplot은 col이나 row 파라미터를 이용해서 여러개의 그래프를 그려줄 수 있다는 장점이 있습니다. col 파라미터를 사용하지 않은 위의 그래프보다 더 깔끔하게 그래프를 표현 할 수 있습니다.

ax = sns.lmplot(x = 'total_bill', y = 'tip', col='smoker', hue = 'smoker', data = tips)

 

 

3. residplot

  • 회귀선을 기준으로 데이터들의 오차를 나타낸 그래프
  • regplot의 회귀선을 x축에 평행하게 기울였다고 생각하면 됨
  • 공식홈페이지에 예제도 없는 것을 보면 잘 안쓰는 그래프라 판단함

 

ax = sns.residplot(x = "total_bill", y = "tip", data = tips)

 

원래는 Matrix plots까지 함께 공부해보려 했으나, 글의 길이가 애매해 질 듯 하여 이번 시간에는 조금 짧지만 regression plots까지만 공부하고 마무리하였습니다.

 

오늘도 코딩 유치원을 찾아주신 여러분들께 감사드립니다.

 


<참고 자료>

 

https://seaborn.pydata.org/api.html#categorical-plots

 

API reference — seaborn 0.11.2 documentation

Independently manipulate the h, l, or s channels of a color.

seaborn.pydata.org

 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART) 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

<seaborn 관련 글>

 

2021.08.08 - [파이썬 패키지/데이터시각화] - [Python/Seaborn] 데이터 시각화 라이브러리_1편. Seaborn 소개

2021.08.18 - [파이썬 패키지/데이터시각화] - [Python/Seaborn] 데이터 시각화 라이브러리_2편. Seaborn 학습을 위한 데이터 셋 3종 소개 (ft. 붓꽃, 타이타닉, 팁 데이터 셋)

2021.08.19 - [파이썬 패키지/데이터시각화] - [Python/Seaborn] 데이터 시각화 라이브러리_3편. Seaborn 그래프 종류 총 정리(ft. Relational plots)

2021.08.22 - [파이썬 패키지/데이터시각화] - [Python/Seaborn] 데이터 시각화 라이브러리_4편. Seaborn 그래프 종류 총 정리(ft. Distribution plots)

2021.08.23 - [파이썬 패키지/데이터시각화] - [Python/Seaborn] 데이터 시각화 라이브러리_5편. Seaborn 그래프 종류 총 정리(ft. Categorical plots(상))

 


 

오늘은 지난 시간에 이어서, 나머지 Categorical plots에 대해서 공부해보겠습니다.

 

Categorical plots

1) barplot

2) countplot

3) boxplot

4) violineplot

5) stripplot

6) swarmplot

7) boxenplot

8) pointplot

9) catplot

 

 

1. stripplot

  • 연속형 변수와 범주형 변수의 관계를 나타내는 scatterplot
  • scatterplot은 연속형과 연속형 사이의 관계를 나타냄
  • 어느 축에 연속형 변수를 넣느냐에 따라 그래프의 방향이 바뀜

 

지난시간의 violineplot에서 입력했던 변수를 그래프 이름만 바꾸어서 그려보겠습니다.

 

#지난 시간의 violinplot
#ax = sns.violinplot(x="day", y="total_bill", data=tips)

#stripplot
ax = sns.stripplot(x="day", y="total_bill", data=tips)

 

 

2. swarmplot

  • 위에서 배운 stripplot과 매우 흡사
  • 단순히 데이터 포인트를 표시하는 것이 아닌 분포 정도를 함께 표현
  • violinplot과 함께 쓰이기도 함

 

swarmplot과 방금 전 그려본 stripplot의 차이를 파악하셨다면 그걸로 충분합니다.

ax = sns.swarmplot(x="day", y="total_bill", data=tips)

 

swarmplot은 세부적인 데이터 분포는 보여주지 못하는 violinplot을 보완하기 위해서 아래와 같이 사용되기도 합니다.

 

sns.violinplot(x="day", y="total_bill", data=tips)
sns.swarmplot(x="day", y="total_bill", data=tips, color="white")

 

 

3. boxenplot

  • boxplot과 거의 같음
  • boxplot에 데이터의 분포에 따른 박스의 크기를 반영한 버전
  • boxplot과 violinplot의 애매한 경계선에 있는 듯한 그래프 (잘 안쓰일 것 같음)

 

ax = sns.boxenplot(x="day", y="total_bill", data=tips)

 

지난 시간 배운 boxplot과 차이를 비교해보세요.

 

4. pointplot

  • 연속형 변수와 범주형 변수의 관계를 error bar와 함께 그려주는 그래프
  • 언제 필요한지 잘 모르겠음

 

해당 그래프는 쓸모를 잘 모르겠어서 이런 것이 있다는 정도만 알려드리고 넘어가겠습니다.

ax = sns.pointplot(y="tip", x="day", hue="sex", data=tips)

 

 

5. catplot

  • 지금까지 배운 Categorical plots를 모두 그릴 수 있음
  • kind 파라미터로 설정 가능 --> strip(기본값), swarm, box, violin, boxen, point, bar, count
  • relplot, displot과 마찬가지로 서브 플롯을 그릴 수 있음 (row, col 파라미터로 설정)

 

ax= sns.catplot(x="day", y="tip", col="sex", data=tips, kind="bar")

 

 

다른 그래프들도 마찬가지였지만  catplot에는 수 많은 파라미터를 설정 가능하므로, 그래프의 색상이나 높이, 폭비율, 범례 등의 설정이 궁금하신 분들은 아래의 seaborn 공식 문서를 참고해주세요.

 

https://seaborn.pydata.org/generated/seaborn.catplot.html#seaborn.catplot

 

seaborn.catplot — seaborn 0.11.2 documentation

The kind of plot to draw, corresponds to the name of a categorical axes-level plotting function. Options are: “strip”, “swarm”, “box”, “violin”, “boxen”, “point”, “bar”, or “count”.

seaborn.pydata.org

 

 

다음 시간에는 Regression plots와 Matrix plots 대해 공부해보겠습니다.

 

오늘도 코딩유치원을 찾아주신 모든분들께 감사드립니다.

 


 

반응형
반응형

 

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART) 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

<seaborn 관련 글>

 

2021.08.08 - [파이썬 패키지/데이터시각화] - [Python/Seaborn] 데이터 시각화 라이브러리_1편. Seaborn 소개

2021.08.18 - [파이썬 패키지/데이터시각화] - [Python/Seaborn] 데이터 시각화 라이브러리_2편. Seaborn 학습을 위한 데이터 셋 3종 소개 (ft. 붓꽃, 타이타닉, 팁 데이터 셋)

2021.08.19 - [파이썬 패키지/데이터시각화] - [Python/Seaborn] 데이터 시각화 라이브러리_3편. Seaborn 그래프 종류 총 정리(ft. Relational plots)

2021.08.22 - [파이썬 패키지/데이터시각화] - [Python/Seaborn] 데이터 시각화 라이브러리_4편. Seaborn 그래프 종류 총 정리(ft. Distribution plots)

2021.08.23 - [파이썬 패키지/데이터시각화] - [Python/Seaborn] 데이터 시각화 라이브러리_5편. Seaborn 그래프 종류 총 정리(ft. Categorical plots)

 


 

오늘은 지난 시간의 Distribution plots에 이어서, Male/Female, Yes/No와 같은 범주형 변수와 연속형 변수(숫자) 간의 관계를 나타내기 위한 그래프인 Categorical plots에 대해서 공부해보겠습니다.

 

Categorical plots

1) barplot

2) countplot

3) boxplot

4) violineplot

5) stripplot

6) swarmplot

7) boxenplot

8) pointplot

9) catplot

 

Categroical plots은 종류가 많은 관계로 이번 시간에는 붉은색으로 표시한 4가지 plot에 대해 공부해 보고, 다음 시간에 나머지 plot들에 대해 이어서 공부해 보겠습니다.

 

1. barplot

  • 이변량(bivariate) 분석을 위한 plot
  • x축에는 범주형 변수, y축에는 연속형 변수를 입력
  • x에 연속형, y에 범주형을 넣으면 수평막대그래프를 출력

 

seaborn 강의 2편에서 소개해드렸던 'tips' 데이터 셋으로 그래프를 그려보겠습니다.

 

x축에 범주형 변수 'day'와 y축에 'tip'이라는 연속형 변수(숫자)를 넣어주었습니다.

 

ax = sns.barplot(data=tips, x = 'day', y = 'tip')

 

아래의 그래프는 요일에 따른 tip의 평균 금액을 나타냅니다. 일요일이 평균적으로 팁을 많이 받았네요.

 

앞서 배웠던 그래프들과 마찬가지로 hue 파라미터를 이용해 범주형 변수에 따라 그래프를 나누어서 표현 가능합니다.

ax = sns.barplot(x="day", y="tip", hue="smoker", data=tips)

 

아래의 그래프는 요일별로 흡연 여부에 따라 팁의 평균금액을 나타내 보았습니다. 흡연여부와 팁의 금액은 별로 상관 없어 보이네요.

 

여기서 위에 검은 막대가 무엇인지 궁금하실 텐데요. 이 막대는 오차를 나타내는 막대입니다.

 

ci 파라미터는 3가지 옵션(숫자 / 'sd' / None)을 가질 수 있으며, 숫자는 신뢰구간(%), 'sd'는 표준편차, None은 표현하지 않음을 의미합니다. 자세한 설명을 위해서는 통계 지식이 필요하므로 추후에 설명하기로 하고, None을 넣어서 검은색 막대를 없애보겠습니다.

 

이번 코드에서 주의 깊게 보실부분은 ci 설정과 x와 y의 데이터를 바꾸어줌으로써 수평막대 그래프로 바뀐 것입니다.

ax = sns.barplot(y="day", x="tip", ci=None, data=tips)

 

 

2. countplot

  • histplot과 마찬가지로 동일한 데이터의 갯수를 count
  • 단, histplot은 연속형 데이터, countplot은 범주형 데이터를 입력받음
  • x에 데이터를 넣으면 막대그래프, y에 데이터를 넣으면 수평막대그래프를 출력

 

마찬가지로 hue 파라미터를 설정 가능합니다. 그냥 seaborn 그래프는 전부 hue를 설정가능한 것 같네요.

ax = sns.countplot(x="smoker", hue="sex", data=tips)

 

레스토랑 손님중 흡연자 수를 성별에 따라 나누어 표현해 보았습니다. 손님중 비흡연자가 더 많고, 남자 손님이 더 많았던 것 같네요.

 

3. boxplot

  • 변수 1개(x or y축)일 때는 연속형 변수 입력 (범주형 변수는 에러)
  • 변수 2개(x and y축)일 때는 연속형 변수와 범주형 변수를 입력
  • 데이터 통계치(최대, 최소, 평균, 1사분위수, 3사분위수)를 한번에 표시
  • 특정 데이터의 전체적인 분포를 확인하기 좋은 그래프
  • 특이치(outliar)를 발견하기 좋음

 

연속형 변수가 x축에 들어가면 가로 그래프, y축에 들어가면 세로 그래프를 출력합니다.

ax = sns.boxplot(x="tip", data=tips)

 

변수를 두 개 쓸 때는 하나는 범주형, 하나는 변수형으로 써줘야합니다.

 

ax = sns.boxplot(x="day", y="total_bill", data=tips)

박스 플롯이 의미하는 바는 아래 그림에 설명되어 있으며, 더 궁금하신분은 글 하단의 링크를 참고해주세요.

 

출처. https://flowingdata.com/2008/02/15/how-to-read-and-use-a-box-and-whisker-plot/

 

4. violinplot

  • 변수 입력 규칙은 boxplot과 동일
  • 데이터의 분포에 따라 통통하고 홀쭉하게 표현한 모습이 바이올린을 닮은 그래프
  • boxplot은 이상치를 한 눈에 파악할 수 있고, violinplot은 데이터 분포를 한 눈에 파악할 수 있음

 

ax = sns.violinplot(x="day", y="total_bill", data=tips)

 

 


<참고하면 좋은 자료>

 

boxplot 설명

https://leebaro.tistory.com/entry/%EB%B0%95%EC%8A%A4-%ED%94%8C%EB%A1%AFbox-plot-%EC%84%A4%EB%AA%85

 

<참고 자료>

 

seaborn 공식 자료

https://seaborn.pydata.org/api.html

 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART) 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

<seaborn 관련 글>

 

2021.08.08 - [파이썬 패키지/데이터시각화] - [Python/Seaborn] 데이터 시각화 라이브러리_1편. Seaborn 소개

2021.08.18 - [파이썬 패키지/데이터시각화] - [Python/Seaborn] 데이터 시각화 라이브러리_2편. Seaborn 학습을 위한 데이터 셋 3종 소개 (ft. 붓꽃, 타이타닉, 팁 데이터 셋)

2021.08.19 - [파이썬 패키지/데이터시각화] - [Python/Seaborn] 데이터 시각화 라이브러리_3편. Seaborn 그래프 종류 총 정리(ft. Relational plots)

2021.08.22 - [파이썬 패키지/데이터시각화] - [Python/Seaborn] 데이터 시각화 라이브러리_4편. Seaborn 그래프 종류 총 정리(ft. Distribution plots)

2021.08.23 - [파이썬 패키지/데이터시각화] - [Python/Seaborn] 데이터 시각화 라이브러리_5편. Seaborn 그래프 종류 총 정리(ft. Categorical plots)

 

 


 

Distribution plots

 

오늘은 지난 시간의 Relational plots에 이어서, 변수 하나(x or y) 혹은 변수 두개 (x,y)의 값 분포를 나타내기 위한 Distribution plots에 대해 공부해보겠습니다.

 

1. hisplot

2. kdeplot

3. rugplot

4. ecdfplot

5. displot (위의 모든 그래프 통합개념)
6. distplot(향후 없어질 예정)

 

 

이번 시간에 사용할 데이터 셋은 붓꽃 데이터 셋이며, 데이터 셋 정보와 로드하는 방법은 이전 글을 참고해주세요.

 

1. hisplot

 

histplot은 히스토그램(histogram) 그래프를 그리는 함수로 데이터의 빈도를 나타낼 때 주로 사용합니다.

 

sns.histplot(data=iris, x="sepal_length")

hue 파라미터를 이용해 species(붓꽃의 종류)에 따라 색으로 구분해주었고, multiple 파라미터를 이용해 hue로 분류된 count가 중첩되어 그려지도록 하였습니다.

 

만약 multiple 설정을 안해주면 그래프가 겹쳐져서 표현되어 가시성이 매우 떨어지므로 설정해주시는걸 추천드립니다.

 

sns.histplot(data=iris, x="sepal_length", hue="species", multiple='stack')

 

histplot은 1차원 뿐만 아니라 2차원으로도 그릴 수 있습니다. 다만 이 값들의 count 정보는 나타나지 않아서 그래프만 보고 정확한 정보를 파악하기는 힘들어 보입니다.

 

sns.histplot(data=iris, x="sepal_length", y="sepal_width", hue="species")

 

 

2. kdeplot

 

kdeplot은 커널 밀도 추정(kernal density estimation) 그래프로 histplot이 count(절대량)을 표현한다면 kdeplot은 비율(상대량)을 시각화 합니다. histplot과 마찬가지로 하나 혹은 두 개의 변수에 대한 분포를 그릴 수 있습니다.

 

sns.kdeplot(data=iris, x='sepal_length')

 

역시 마찬가지로 hue 파라미터로 'species'에 따른 색 구분이 가능합니다.

 

sns.kdeplot(data=iris, x='sepal_length', hue="species")

 

변수를 2개를 입력하면, 마치 등고선과 같은 그래프를 그려줍니다. 붓꽃의 종류에 따라 꽃받침(sepal)의 길이와 너비 분포가 어떻게 되는지, 어디에 비율이 가장 많은지 알 수 있겠습니다.

sns.kdeplot(data=iris, x='sepal_length', y="sepal_width", hue="species")

 

<추가 내용>

 

만약 앞에서 배운 histplot과 kdeplot을 함께 그리고 싶으시면 아래와 같이 코딩해주시면 됩니다.

 

sns.histplot(data=iris, x="sepal_length", hue="species", multiple='stack', kde=True)

 

3. rugplot

 

rugplot은 단독으로 쓰이기보다는 주로 kdeplot과 함께 쓰입니다. 그 이유는 rugplot이 데이터 값을 x축과 y축 위에 그려주는 그래프이기 때문입니다. 빠른 이해를 위해 코드로 그래프를 그리고 살펴보겠습니다.

 

sns.kdeplot(data=iris, x='sepal_length', y="sepal_width", hue="species") 
sns.rugplot(data=iris, x='sepal_length', y="sepal_width", hue='species')

대략적으로 어떤 느낌인지 감이 오시나요? rugplot은 다른 그래프를 보완해주는 그래프라고 생각하시면 되겠습니다.

 

 

4. ecdfplot

 

ecdfplot은 분포를 누적화해서 보여줍니다. 아직 잘 모르지만 그리 많이 쓰일 것 같아 보이진 않네요.

 

sns.ecdfplot(data=iris, x='sepal_length')

 

5. distplot

 

지난 시간에 배웠던 relplot과 같이 앞서 배운 4가지 plot들을 모두 그려줄 수 있는 함수입니다.

 

kind 파라미터를 histplot, kdeplot, ecdfplot으로 설정해줌으로써 3가지 plot을 그릴 수 있고, rug 옵션을 True/False로 설정하여 나타낼 수도 있고 나타내지 않을 수도 있습니다. 참고로 kind의 기본값은 hist로 아무 설정이 없을 때는 histplot을 그려줍니다.

 

또한 중요한 특징으로, row와 col 파라미터를 이용해서 subplot을 여러개 함께 나타낼 수 있습니다.

 

sns.displot(data=iris, x="sepal_length", hue="species", col="species")

 

sns.displot(data=iris, kind= "kde", x="sepal_length", hue="species", col="species", rug=True)

 

 

 

 


<참고 자료>

 

https://seaborn.pydata.org/api.html

 

API reference — seaborn 0.11.2 documentation

Independently manipulate the h, l, or s channels of a color.

seaborn.pydata.org

 

 

 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART) 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

<seaborn 관련 글>

 

2021.08.08 - [파이썬 패키지/데이터시각화] - [Python/Seaborn] 데이터 시각화 라이브러리_1편. Seaborn 소개

2021.08.18 - [파이썬 패키지/데이터시각화] - [Python/Seaborn] 데이터 시각화 라이브러리_2편. Seaborn 학습을 위한 데이터 셋 3종 소개 (ft. 붓꽃, 타이타닉, 팁 데이터 셋)

2021.08.19 - [파이썬 패키지/데이터시각화] - [Python/Seaborn] 데이터 시각화 라이브러리_3편. Seaborn 그래프 종류 총 정리(ft. Relational plots)

2021.08.22 - [파이썬 패키지/데이터시각화] - [Python/Seaborn] 데이터 시각화 라이브러리_4편. Seaborn 그래프 종류 총 정리(ft. Distribution plots)

2021.08.23 - [파이썬 패키지/데이터시각화] - [Python/Seaborn] 데이터 시각화 라이브러리_5편. Seaborn 그래프 종류 총 정리(ft. Categorical plots)

 


 

이번 시간에는 예전에 배워봤던 matplotlib 기반으로 만들어진, 하지만 더 강력한 데이터 시각화 기능을 가지고 있는 seaborn에 대해서 배워보겠습니다.

 

오늘부터 seaborn의 그래프들을 공식문서에 소개된 차례대로 공부해보겠습니다.

 

공식문서에 나오는 그래프를 아래와 같이 정리해보았으니, seaborn의 큰그림을 그릴 때 도움이 되시리라 생각합니다.

 

  그래프 종류 (대분류) 그래프 종류 (소분류) 설명
1 Relational plots relplot, scatterplot, lineplot 두가지 변수(x, y)의 관계를 나타내기 위한 그래프
2 Distribution plots displot, hisplot, kdeplot, ecdfplot, rugplot, distplot 변수 하나(x or y) 혹은 변수 두개 (x,y)의 값 분포를 나타내기 위한 그래프
3 Categorical plots catplot, stripplot, swarmplot, boxplot, violinplot, boxenplot, pointplot, barplot, countplot 범주형 변수 (ex. Male/Female, Yes/No)와 연속형 변수(숫자) 간의 관계를 나타내기 위한 그래프
4 Regression plots Implot, regplot, residplot 회귀(regression) 분석 결과를 relational p lots과 함께 나타내주는 그래프
5 Matrix plots heatmap, clustermap 연속형 변수(숫자) 간의 관계 비율을 2차원 메트릭스로 만들고 그 비율에 따라 색을 입혀서 시각화
6 Multi-plot grids FacetGrid, pairplot, PairGrid, jointplot, JointGrid 여러 그래프를 함께 그려 한눈에 비교하기 위한 그래프

 

모든 그래프를 한 번에 공부하기엔 너무 양이 많으므로, 이번 시간에는 Relational plots과 Distribution plots에 대해서만 다루어보겠습니다. 데이터 셋은 지난 시간에 배웠던 데이터 셋 중, tips에 대한 데이터 셋을 이용할 예정입니다.

 

그래프를 그려보기 위해서 관련 라이브러리와 데이터 셋을 불러오겠습니다. 이번 시간에도 개발환경은 역시 Jupyter Notebook입니다.

 

# 관련 라이브러리 불러오기
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import seaborn as sns

# 데이터 셋 불러오기
tips = sns.load_dataset("tips")
tips

 

 

Relational plots

 

가장 먼저 배워볼 그래프는 관계형 그래프(Relational plots) 입니다. 우리가 흔히 아는 Line 그래프도 x와 y의 관계를 그려주는 관계형 그래프의 한 종류입니다.

 

Relational plots에는 크게 라인 그래프(lineplot)와 산점도 그래프(scatterplot)으로 나뉘며, 이 둘을 합친 개념인 relplot이 있습니다.

 

나중에 자세히 설명드리겠지만 relplot의 파라미터로 kind="scatter" 혹은 "line"을 입력해주시면 두 그래프를 relplot을 이용하여 동일하게 사용가능합니다. 즉, replot = lineplot + scatterplot인 것이죠!

 

1. scatterplot

 

먼저 sctterplot을 알아보겠습니다. scatterplot을 그려주기 위해서는 3가지 파라미터가 꼭 필요합니다.

 

- x축 데이터 컬럼명

- y축 데이터 컬럼명

- 데이터 셋

 

ax = sns.scatterplot(x='total_bill', y='tip', data=tips)

 

우리는 해당 그래프로 레스토랑에서 전체 식사비용(total_bill)에 따른 팁(tip)을 얼마나 지불했는지를 파악할 수 있습니다.

 

 

 

색 구분 옵션 (hue)

 

scatterplot은 정말 다양한 파라미터를 설정해줄 수 있지만 핵심적이라고 생각하는 hue style, 두 가지만 설명드리겠습니다.

 

hue는 의미에 따라서 점의 색깔을 다르게 표시하는 기능을 갖고 있습니다. 코드로 확인해보시죠.

 

ax = sns.scatterplot(x='total_bill', y='tip', hue='time' data=tips)

 

hue 파라미터에 범주형 데이터(Lunch/Dinner)의 컬럼명('time')을 입력함으로써 점심/저녁 식사에 따라 데이터를 구분해줄 수 있습니다.

 

왼쪽 위를 보면 자동으로 범례(Legend)가 들어가 있네요. matplotlib에서는 따로 설정을 해주어야 했는데 말이죠.

 

 

모양 구분 옵션 (style)

 

데이터를 하나 더 추가하여 더욱 세분화 해서 표현하고 싶으시다면 style 파라미터를 이용해보세요.

 

hue가 색이었다면 style은 마커의 모양을 의미합니다.

 

ax = sns.scatterplot(x='total_bill', y='tip', hue='day', style='time', data=tips)

 

 

2.  lineplot

 

line 그래프는 데이터가 연속적일 경우 주로 사용합니다. tip 데이터 셋은 연속데이터가 아니므로 새로운 데이터 셋을 가져와보겠습니다.

 

해당 데이터셋은 fmri라는 데이터 셋으로, fmri(기능적 자기 공명영상)은 혈류와 관련된 변화를 감지하여 뇌 활동을 측정한 데이터입니다.

 

데이터 셋의 의미를 깊게 파악하기보다는 lineplot의 기능을 간단히 설명드리고 넘어가도록 하겠습니다.

 

먼저 데이터 셋을 불러와줍니다.

 

fmri = sns.load_dataset('fmri')
fmri

 

 

lineplot으로 'timepoint'와 'signal'의 관계를 그려볼텐데 데이터 셋을 얼핏 보면 timepoint 값 중에 18이 여러개 있는 것을 보았을 때, 우리가 흔히 아는 라인 그래프랑은 다르게 나올 것 같네요.

 

ax = sns.lineplot(x='timepoint', y='signal', data=fmri)

 

x에 대한 y값이 여러개여서 아래와 같이 하나의 선이 아닌 범위(?) 그래프가 그려졌습니다.

 

이러한 그래프는 seaborn 라인 그래프의 장점으로, 짙은 선은 추정 회귀선(Estimated regression line), 옅은 하늘색 영역은 신뢰구간(Confidence interval)을 나타냅니다.

 

 

 

lineplot 역시 hue와 style 파라미터를 설정해줄 수 있습니다. Marker도 나타낼 수 있습니다.

 

ax = sns.lineplot(x='timepoint', y='signal', hue='event', style='event', markers=True, data=fmri)

 

 

3. relplot

 

relplot은 앞서 설명했듯이 파라미터로 kind="scatter" 혹은 "line"을 입력해주시면 두 그래프를 relplot을 이용하여 동일하게 사용가능합니다. 기본값은 "scatter" 이므로 라인 그래프를 그리고 싶을 때만 설정값을 넣어주시면 됩니다.

 

ax = sns.relplot(x='total_bill', y='tip', kind='scatter', hue='time', data=tips)

 

 

단순히 lineplot과 scatterplot을 합쳐놓은거라면 굳이 relplot라는 함수를 만들어 놓은 이유는 없겠죠?

 

나중에 배우겠지만 relplot은 return 값이 FaceGrid고, lineplot와 scatterplot는 return 값이 AxesSubplot이라고 합니다.

 

쉽게 말해 relplot은 여러 그래프를 한 번에 그려줄 수 있고, 나머지 두 함수는 그래프 하나씩만 표현 할 수 있답니다.

 


<참고 자료>

 

https://seaborn.pydata.org/generated/seaborn.relplot.html#seaborn.relplot

 

seaborn.relplot — seaborn 0.11.2 documentation

How to draw the legend. If “brief”, numeric hue and size variables will be represented with a sample of evenly spaced values. If “full”, every group will get an entry in the legend. If “auto”, choose between brief or full representation based o

seaborn.pydata.org

 

https://medium.com/geekculture/how-to-use-seaborn-in-python-to-visualize-the-fmri-dataset-ae89381157ea

 

How to Use Seaborn in Python to Visualize the fMRI Dataset

Visualization Technique

medium.com

 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART) 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

<seaborn 관련 글>

 

2021.08.08 - [파이썬 패키지/데이터시각화] - [Python/Seaborn] 데이터 시각화 라이브러리_1편. Seaborn 소개

2021.08.18 - [파이썬 패키지/데이터시각화] - [Python/Seaborn] 데이터 시각화 라이브러리_2편. Seaborn 학습을 위한 데이터 셋 3종 소개 (ft. 붓꽃, 타이타닉, 팁 데이터 셋)

2021.08.19 - [파이썬 패키지/데이터시각화] - [Python/Seaborn] 데이터 시각화 라이브러리_3편. Seaborn 그래프 종류 총 정리(ft. Relational plots)

2021.08.22 - [파이썬 패키지/데이터시각화] - [Python/Seaborn] 데이터 시각화 라이브러리_4편. Seaborn 그래프 종류 총 정리(ft. Distribution plots)

2021.08.23 - [파이썬 패키지/데이터시각화] - [Python/Seaborn] 데이터 시각화 라이브러리_5편. Seaborn 그래프 종류 총 정리(ft. Categorical plots)


 

이번 시간에는 예전에 배워봤던 matplotlib 기반으로 만들어진, 하지만 더 강력한 데이터 시각화 기능을 가지고 있는 seaborn에 대해서 배워보겠습니다.

 

seaborn은 데이터 셋이 존재할 때에 그 기능이 빛을 발하는 라이브러리라고 합니다.

 

따라서 seaborn의 사용법을 익히기 위해서는 데이터 셋이 필요한데, seaborn은 아주 친절하게도 18종의 데이터 셋을 제공해줍니다.

 

여기서 제공해준다는 의미는 따로 데이터 셋을 다운로드 받지 않아도 sns.load_dataset('데이터 셋 이름')을 통해서 pandas 데이터  프레임을 가져올 수 있다는 것입니다.

 

너무 친절한거 아닌가요?!

 

참고로 seaborn의 함수들에 대한 설명이나 데이터 셋의 종류가 궁금하신 분들은 위의 링크(seaborn 공식문서)을 참고해주세요.

 

https://seaborn.pydata.org/api.html#

 

API reference — seaborn 0.11.2 documentation

Independently manipulate the h, l, or s channels of a color.

seaborn.pydata.org

 

seaborn 예제 데이터 셋 종류

 

오늘은 아래의 18가지 데이터들 중 3가지만 소개드려 보겠습니다.

 

1. 붓꽃 데이터 셋 (iris)

 

Iris(붓꽃) 데이터 셋은 통계학자인 Fisher가 소개한 데이터로 붓꽃의 3가지 종(setosa, versicolor, virginica)에 대한 꽃받침(sepal)과 꽃잎(petal)의 길이를 정리한 데이터입니다.

 

해당 데이터 셋은 머신러닝의 분류(Classification)에 적합한 데이터 셋으로, 꼭 seaborn이 아니더라도 알아두시면 도움이 되실 것 같아요.

 

컬럼명 의미 자료형(data type)
sepal_length 꽃받침의 길이 실수(float)
sepal_width 꽃받침의 너비 실수(float)
petal_length 꽃잎의 길이 실수(float)
petal_width 꽃잎의 너비 실수(float)
species 붓꽃의 종류
(setosa, versicolor, virginica)
문자열(str)

 

seaborn 라이브러리를 이용해 실제 데이터 셋을 불러와 보겠습니다.

 

자연스럽게 Jupyter Notebook을 켜시고, 이제는 너무 익숙해져버린 데이터 분석 4대장 라이브러리를 import 해주세요.

 

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

 

그리고 아래의 코드를 실행해줍니다.

 

# 붓꽃 데이터 셋 불러오기
iris = sns.load_dataset("iris")
iris

 

총 150개의 행과 5개의 열을 갖고 있는 간단한 데이터 셋이네요.

 

 

 

2. 타이타닉 데이터 셋 (titanic)

 

다음으로 소개드릴 데이터 셋은 'Kaggle'에서 생존자를 예측하는 머신러닝 대회로 유명한 '타이타닉 데이터 셋'입니다. 

 

<타이타닉 데이터 셋을 이용한 캐글 대회>

https://www.kaggle.com/c/titanic

 

데이터 셋의 의미에 대해 아래와 같이 보기좋게 표로 정리해보았습니다.

 

컬럼명 의미 인자 자료형(data type)
survived 생존여부 0 (사망) / 1 (생존) 정수(int)
pclass 좌석등급 (숫자) 1 / 2 / 3 정수(int)
sex 성별 male/female 문자열(str)
age 나이 0~80.0 실수(float)
sibsp 형제자매 + 배우자 인원수 0~8 정수(int)
parch:  부모 + 자식 인원수 0~6 정수(int)
fare:  요금 0~512.3292 실수(float)
embarked 탑승 항구 S (Southampton)
C (Cherbourg)
Q (Queenstown)
문자열(str)
class 좌석등급 (영문) First, Second, Third 문자열(str)
who 성별 man / woman 문자열(str)
deck
선실 고유 번호 가장 앞자리 알파벳 A,B,C,D,E,F,G 문자열(str)
embark_town
탑승 항구 (영문) Southampton / Cherbourg / Queenstown 문자열(str)
alive
생존여부 (영문) no(사망) / yes(생존) 문자열(str)
alone 혼자인지 여부 True (가족 X) / False (가족 O) 참거짓(bool)

 

데이터 셋을 불러와 보겠습니다.

 

titanic = sns.load_dataset('titanic')
titanic

 

이번 데이터 셋은 총 891개의 행과 15개의 열로 이루어져 있네요. 붓꽃 데이터보다는 큰 데이터 셋입니다.

 

 

3. 팁 데이터 셋 (tips)

 

마지막으로 소개드릴 데이터 셋은 레스토랑에 방문한 손님이 팁을 얼마나 주는지, 성별, 흡연여부, 요일, 식사 시간, 식사 인원 등에 대한 정보를 가지고 있는 데이터 셋입니다.

 

어떤 인자가 팁 액수에 영향을 많이 주는지 분석할 때에 유용한 데이터 셋으로 보이네요. 나중에 시각화를 해보면서 알아보겠습니다.

 

컬럼명 의미 인자 자료형(data type)
total_bill 총 계산 요금 (달러) 3.07~50.81 실수(float)
tip 팁 (달러) 1.0~10.0 실수(float)
sex 성별 Male / Female 문자열(str)
smoker 흡연 여부 Yes / No 문자열(str)
day 요일 Thur, Fri, Sat, Sun 문자열(str)
time 식사 시간 Lunch, Dinner 문자열(str)
size 식사 인원 1~6 정수(int)

 

총 244개의 행과 7개의 열로 이루어져 있습니다.

 

오늘 준비한 내용은 여기까지입니다.

 

다음 시간부터는 오늘 소개드린 seaborn의 3가지 데이터 셋을 이용해서 여러가지 그래프를 그려가며 데이터를 분석해보겠습니다.

 

오늘도 코딩유치원을 찾아주신 여러분들께 감사드립니다.

 


 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART) 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

<seaborn 관련 글>

 

2021.08.08 - [파이썬 패키지/데이터시각화] - [Python/Seaborn] 데이터 시각화 라이브러리_1편. Seaborn 소개

2021.08.18 - [파이썬 패키지/데이터시각화] - [Python/Seaborn] 데이터 시각화 라이브러리_2편. Seaborn 학습을 위한 데이터 셋 3종 소개 (ft. 붓꽃, 타이타닉, 팁 데이터 셋)

2021.08.19 - [파이썬 패키지/데이터시각화] - [Python/Seaborn] 데이터 시각화 라이브러리_3편. Seaborn 그래프 종류 총 정리(ft. Relational plots)

2021.08.22 - [파이썬 패키지/데이터시각화] - [Python/Seaborn] 데이터 시각화 라이브러리_4편. Seaborn 그래프 종류 총 정리(ft. Distribution plots)

2021.08.23 - [파이썬 패키지/데이터시각화] - [Python/Seaborn] 데이터 시각화 라이브러리_5편. Seaborn 그래프 종류 총 정리(ft. Categorical plots)

 


 

이번 시간에는 예전에 배워봤던 matplotlib 기반으로 만들어진, 하지만 더 강력한 데이터 시각화 기능을 가지고 있는 seaborn에 대해서 배워보겠습니다.

 

기본적인 시각화 기능은 Matplotlib 패키지에 의존하며 통계 기능은 Statsmodels 패키지에 의존한다고 합니다.

 

그렇다면 무엇이 더 강력하다는 것일까요?

 

seaborn의 장점

 

1) 다양한 색상과 예쁜 디자인

2) 다양한 통계 관련 그래프 (통계와 그래프 그리기를 동시에 가능)

3) 쉬움

 

seaborn으로 그릴 수 있는 그래프들

 

seaborn 공식 문서에 들어가서 Gallery 탭을 클릭해보면 다양한 종류의 그래프들의 예시를 볼 수 있습니다.

 

<seaborn 공식 문서>

http://seaborn.pydata.org/examples/index.html

 

아래의 데이터들을 보시면 한 눈에 보기에도 정말 다양하고 예쁘다는 것을 느끼실 수 있습니다.

 

 

위의 그래프들을 분류해보면 관계형 그래프, 분포형 그래프, 카테고리형 그래프로 3가지로 크게 나누어 볼 수 있습니다.

 

각 그래프가 무엇인지, 어떻게 쓰이는지는 다음 시간부터 하나씩 알아보도록 하겠습니다. (이 분류에 없는 그래프들도 있네요!)

 

seaborn plot 분류

 

seaborn 설치

 

seaborn 패키지의 설치는 아래의 코드를 터미널 창에서 입력하고 실행해주시면 됩니다.

 

참고로 conda는 Anaconda 패키지 설치시 함께 깔리는 패키지로 다양한 패키지와 모듈들을 최신 버전으로 관리해줍니다.

즉, conda로 설치하면 새로운 버전으로 업그레이드 해줄 필요가 없습니다. (가끔 패키지의 버전이 낮아서 에러가 날 때도 있음)

 

# Anaconda 사용자, 미사용자 모두 가능
pip install seaborn

# Anaconda 사용자만 가능
conda install seaborn

 

 

seaborn 실행

 

seaborn을 실행할 때는 보통 아래의 4개 패키지를 함께 사용해줍니다. seaborn 혼자만 사용하는 경우는 거의 없다고 봐도 됩니다.

 

import pandas as pd
import numpy as numpy
import matplotlib.pyplot as plt
import seaborn as sns

 

추가적으로 그래프를 그리실 때 한글이 깨져서 출력되는 현상을 해결하기 위해서 아래의 코드도 추가해주세요.

 

import os


# Mac OS의 경우와 그 외 OS의 경우로 나누어 설정

if os.name == 'posix':

    plt.rc("font, family="AppleGothic")

else

    plt.rc("font", family="Malgun Gothic")

 

만약 데이터 분석 IDE로 Jupyter Notebook이 아닌 Colab을 사용하신다면 아래의 글을 참고해주세요.

 

2021.07.04 - [파이썬 패키지/데이터분석] - [Python/matplotlib] 데이터 시각화 라이브러리_1편.matplotlib 소개 및 한글 폰트 깨짐 해결 방법(ft.Jupyter notebook, Colab 환경)

 

[Python/matplotlib] 데이터 시각화 라이브러리_1편.matplotlib 소개 및 한글 폰트 깨짐 해결 방법(ft.Jupyter

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다. 오늘은 데이터 분석의 꽃이라 불리우는 데이터 시각화를 도와주는 라이브러리에 대해 배워보겠습니다. matplotlib : 파이

coding-kindergarten.tistory.com

 

오늘 준비한 내용은 여기까지입니다.

 

다음시간 부터는 seaborn을 활용해서 그릴 수 있는 다양한 그래프를 하나씩 공부해보겠습니다.

 


 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART) 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

<데이터 분석 관련 글>

 

2021.07.21 - [파이썬 패키지/데이터분석] - [코딩유치원] 비전공자도 쉽게 이해하는 데이터 분석 프로세스 (ft. 수집, EDA, 전처리, 모델링)

2021.04.12 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 1편. 데이터는 금이다 (feat.데이터 관련 직업 소개)

2021.04.13 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 2편. 데이터 분석을 위한 준비 (Jupyter Notebook 설치 및 사용법)

2021.04.14 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 3편. 데이터 분석 필수 패키지, 판다스! (feat. 10 minutes to pandas)

2021.04.15 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 4편. 데이터 분석을 위한 데이터 다운로드 받기 (feat.공공데이터포털)

2021.04.16 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 5편. Jupyter Notebook으로 데이터 파일 불러오기 (꿀팁. Tap과 Tap+Shift 사용법은 꼭 알아두세요!!)

2021.04.17 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 6편. 데이터 분석에서 결측치란? (feat. 주피터 노트북 Pandas 관련 함수)

2021.04.18 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 7편. 원하는 이름의 열 & 특정 문자열을 포함한 데이터 인덱싱하기

2021.07.24 - [분류 전체보기] - [파이썬 데이터 분석] 9편. 데이터 시각화 맛보기(ft. 15~20년 전국 민간아파트 분양가 데이터)

2021.07.25 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 10편. 데이터 프레임 배치를 내맘대로! (ft. pivot-table, groupby, multi-index)

 

 


 

이번 시간에는 지난 시간에 다루어 보았던 bar-chart-race의 파라미터 설정 방법에 대해서 정리해보겠습니다.

 

간단한 사용법은 지난 글을 참고해주세요.

 

2021.07.26 - [파이썬 패키지/데이터분석] - [Python/bar-chart-race] 움직이는 막대 차트 시각화(ft. 12-20년 프리미어리그 클럽별 점수)

 

[Python/bar-chart-race] 움직이는 막대 차트 시각화(ft. 12-20년 프리미어리그 클럽별 점수)

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다. 코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도

coding-kindergarten.tistory.com

 

 

설정 가능한 파라미터들과 설정 값은 아래에 표로 정리해보았습니다.

 

너무 많은 옵션이 있어서 별로 사용하지 않을 것 같은 옵션은 생략하였습니다.

 

파라미터 설정 값 기본 값
df Pandas Data Frame -
filename 1) None: HTML5 기반의 에니메이션 출력 (주피터 노트북 사용 시)

2) 원하는 파일명 + 확장자명(.mp4, .gif, .html, .mpeg, .mov 등등)
    - 단, 이 기능을 사용하려면 ffmpeg를 설치해야함. (gif는 ImageMagick 설치)
None
orientation 1) 수평 막대 차트: 'h'
2) (수직) 막대 차트: 'v'
'h'
sort 1) 내림차순: 'desc'
2) 오름차순: 'asc'
desc
n_bars 출력할 막대의 갯수: int None
fixed_order 1) False : sort에서 설정한 내림차순 혹은 오름차순
2) True: 최종값 기준 sort된 순서
3) list: 원하는 순서 (리스트 요소는 '컬럼명')
False
fixed_max 1) False: 실시간으로 가장 큰 막대에 맞춰 그래프의 축에 표시된 숫자가 늘어남 (정신없음)
2) True: 최종값 기준으로 그래프 스케일이 고정 (추천)
False
steps_per_period 애니메이션의 부드러움과 관련된 설정: int
- 하나의 기간(행)이 넘어가는데에 사용되는 프레임 숫자로서 그 숫자가 클수록 부드러움 
10
period_length 차트 증가 속도(하나의 기간이 넘어가는데에 걸리는 시간) 설정: int
- 단위는 밀리세컨드, 즉 기본값 500은 0.5초
- 만약 데이터의 행이 많을 때는 끝까지 보는데에 시간이 걸리므로 시간을 줄여주면 됨
500
label_bars 1) True: 차트 오른쪽에 값(Values)을 표시 (추천)
2) False: 미표시
True
bar_size 바의 크기를 비율로 셋팅: float
- bar_size = 1 이면 바 사이에 공간이 없이 모두 붙어있음 (그냥 기본값이 좋을 듯)
0.95
period_label 우측 하단의 기간(period) 정보 출력 여부: True/False True
period_fmt period 표시 형식 설정

ex) 행 index가 2020-04-03와 같은 포맷인 경우,
       period_fmt='%b %-d, %Y' 로 설정해주면 Apr 3, 2020으로 출력됨
None
figsize 그래프 사이즈 설정 / matplotlib과 동일 : (x, y) (6, 3.5)
cmap 차트 색상 설정 : matplotlib의 colormap 설정과 동일

- cmap 종류는 아래의 링크 참조
https://codetorial.net/matplotlib/set_colormap.html
None
title 1) '원하는 타이틀 명'

2) None (설정 안하면 타이틀 없음)
None
title_size title을 설정했을 때 사이즈 설정: int None
bar_label_size 막대 차트 왼쪽의 글자 크기 설정: int 7
tick_label_size 막대 차트 오른쪽의 글자 크기 설정: int 7
shared_fontdict 글꼴 설정: dict

ex) shared_fontdict
       ={'family':'Helvetica','weight':'bold','color':'rebeccapurple'})
None
scale 리니어 스케일 / 로그 스케일 설정

1) 'Linear'
2) 'log'
'Linear'
dpi 그래프 표현 선명도 (평방 인치당 도트 수): int 144
bar_kwargs 막대 꾸미기 설정 (투명도, 테두리 스타일 등등)

ex) bar_kwargs={'alpha': .2, 'ec': 'black', 'lw': 3}
None
filter_column_colors 색상 반복 줄이기 옵션

1) True: 그래프 색 중복 시 설정해주면 조금 덜함
- 기본적으로  cmap의 색 종류가 많은 것을 사용하는 것이 좋음
False

 

하나하나 적용 결과를 모두 이 글에 포함하기에는 너무 글이 길어질 듯 해서 공식문서의 Tutorial 링크로 대신할테니 참고해주시면 좋을 것 같아요.

 

https://www.dexplo.org/bar_chart_race/tutorial/

 

Tutorial - Bar Chart Race

Animated bar chart races in Python with the bar_chart_race package

www.dexplo.org

 

 

참고로 공식문서의 리비전 이력에는 2020년 7월에 Version 0.2가 출시 예정이며, 거기에는 line_chart_race가 새로 나올 것이라고 되어있지만 아직 2020년 1월의 Version 0.1이 최신 버전이네요.

 

아래는 Flourish라는 데이터 시각화 서비스에서 가능한 line-chart-race인데, 0.2버전이 얼른 나와서 이것도 파이썬으로 가능해지면 좋겠습니다.

 

언젠가 코딩 실력이 늘어나면 이런 동적 시각화 패키지를 만들어 보고 싶네요. 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART) 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

<데이터 분석 관련 글>

 

2021.07.21 - [파이썬 패키지/데이터분석] - [코딩유치원] 비전공자도 쉽게 이해하는 데이터 분석 프로세스 (ft. 수집, EDA, 전처리, 모델링)

2021.04.12 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 1편. 데이터는 금이다 (feat.데이터 관련 직업 소개)

2021.04.13 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 2편. 데이터 분석을 위한 준비 (Jupyter Notebook 설치 및 사용법)

2021.04.14 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 3편. 데이터 분석 필수 패키지, 판다스! (feat. 10 minutes to pandas)

2021.04.15 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 4편. 데이터 분석을 위한 데이터 다운로드 받기 (feat.공공데이터포털)

2021.04.16 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 5편. Jupyter Notebook으로 데이터 파일 불러오기 (꿀팁. Tap과 Tap+Shift 사용법은 꼭 알아두세요!!)

2021.04.17 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 6편. 데이터 분석에서 결측치란? (feat. 주피터 노트북 Pandas 관련 함수)

2021.04.18 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 7편. 원하는 이름의 열 & 특정 문자열을 포함한 데이터 인덱싱하기

2021.07.24 - [분류 전체보기] - [파이썬 데이터 분석] 9편. 데이터 시각화 맛보기(ft. 15~20년 전국 민간아파트 분양가 데이터)

2021.07.25 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 10편. 데이터 프레임 배치를 내맘대로! (ft. pivot-table, groupby, multi-index)

 

 


 

이번 시간에는 아주 흥미로운 데이터 시각화를 해보겠습니다.

 

오늘 소개 드릴 패키지는 bar-chart-race라는 이름의 패키지로 말그대로 막대 차트가 경주를 하듯 움직이는 것입니다. 아래의 그림을 보시면 바로 이해가 되실거예요!

 

출처. https://www.dexplo.org/bar_chart_race/

 

우선 공식 문서는 아래에 링크를 달아두었습니다.

 

https://www.dexplo.org/bar_chart_race/

 

오늘은 간단히 어떤 식으로 사용하는지 예제를 통해서 설명드리고, 다음 시간에 bar-chart-race의 자세한 사용법에 대해서 알려드리겠습니다.

 

원래는 항상 VScode 위에서 Jupyter Notebook을 실행해왔으나, 해당 패키지가 순수한 Jupyter Notebook에서만 그래프를 출력해서 오늘은 순정 주피터 노트북에서 코딩을 하였습니다.

 

2021.04.13 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 2편. 데이터 분석을 위한 준비 (Jupyter Notebook 설치 및 사용법)

 

 

bar-chart-race 설치

 

가장 먼저 할 일은 패키지를 설치하는 것이겠죠? 설치 방법은 두 가지이며, 무난하게 pip install을 이용해서 설치하시는 것을 추천드립니다. 참고로 conda를 이용하여 설치하시면 패키지가 최신버전이 나왔을 때마다 자동 업그레이드 된답니다.

 

# 공식 파이썬 설치, 아나콘다 패키지 설치 모두 관계없이 가능
pip install bar_chart_race

# 아나콘다 패키지 설치한 경우만 가능
conda install -c conda-forge bar_chart_race

 

관련 패키지 불러오기

 

그럼 오늘 사용할 패키지들을 import 해주도록 하겠습니다.

 

import pandas as pd

import numpy as np

import bar_chart_race as bcr

 

데이터 셋 가져오기

 

오늘 사용할 데이터 셋은 2012-2020년 프리미어리그 클럽별 점수 데이터입니다. 데이터 셋은 아래의 사이트에서 다운로드 받았으며, 여러분들의 번거로움을 줄이기 위해서 csv 파일을 별도로 업로드 해두었습니다.

 

<데이터 다운로드 링크>

https://www.kaggle.com/lynuhs/premier-league-19922017?select=premierLeague_tables_1992-2017.csv 

 

<오늘 사용할 데이터 셋 csv>

 

premierLeague_tables_1992-2017.csv
0.05MB

 

만약 데이터(csv 파일)를 받으셨다면 아래의 코드로 데이터를 불러와주세요.

 

# csv 파일을 pandas 패키지를 이용해서 불러옴
df = pd.read_csv('premierLeague_tables_1992-2017.csv')

# 데이터 구성 파악
df.head()

 

코드를 실행하시면 아래와 같이 데이터들이 쭉 나옵니다. 

 

 

데이터 전처리

 

우리는 오늘 복잡한 데이터 모두 무시하고, season, team, points 3가지만 다루어 보겠습니다.

 

# 3가지 컬럼만 남기고 모두 제거
df = df[['season', 'team', 'points']]

# 확인
df.head()

 

데이터 프레임이 간결해졌네요! 

 

다음으로는 bar-chart-race에서 요구하는 데이터 프레임의 형태로 해당 데이터 프레임을 변형시켜보겠습니다. 이 때 사용할 함수는 지난시간에 배웠던 pivot-table입니다.

 

2021.07.25 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 10편. 데이터 프레임 배치를 내맘대로! (ft. pivot-table, groupby, multi-index)

 

참고로, bar-chart-race는 행(row)이 시간으로 되어있는 시계열 데이터만을 입력받아서 처리할 수 있습니다.

 

# 행은 'season', 열은 'team', 데이터는 points로 데이터 프레임 변경
df = df.pivot_table(values = 'points', index = 'season', columns = 'team')

# 확인
df.head()

 

데이터가 생김새가 확 달라졌습니다. 그런데 값이 NaN으로 표시된 것들이 많이 보이네요. 아마도 해당 시즌에 본선에 진출하지 못한 경우에는 값이 없으므로 이렇게 나오는 듯합니다.

 

 

NaN 값을 0으로 모두 변경해주도록 하겠습니다.

# NaN 값을 0으로 채워주기
df = df.fillna(0)

# 확인
df.head()

 

 

지금 데이터는 시즌별 점수가 중첩이 되지 않는 상태입니다. 시즌이 진행됨에 따라서 그 값이 더해지는 것을 원하므로 아래의 코드로 값을 계속 더해주도록 하겠습니다.

 

df.iloc[:] = df.iloc[:].cumsum()

 

 

데이터 시각화

 

이제 오늘의 주제인 bar-chart-race로 그래프를 그려보겠습니다. 설정 가능한 옵션은 정말 다양하며, 다음 시간에 자세히 다루겠습니다.

 

bcr.bar_chart_race(df = df, 
                   n_bars = 10,
                   figsize=(6, 4),
                   sort='desc',
                   title='Premier League Clubs Points Since 1992')

 

 

오늘 준비한 내용은 여기까지입니다.

 

감사합니다.


<참고자료>

 

Python으로 막대 차트 레이스 애니메이션 만들기

 

https://ichi.pro/ko/python-eulo-magdae-chateu-leiseu-aenimeisyeon-mandeulgi-226156087609166

 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

 

<데이터 시각화 관련 글>

 

2021.07.04 - [파이썬 패키지/데이터분석] - [Python/matplotlib] 데이터 시각화 라이브러리_1편.matplotlib 소개 및 한글 폰트 깨짐 해결 방법(ft.Jupyter notebook, Colab 환경)

2021.07.05 - [파이썬 패키지/데이터분석] - [Python/matplotlib] 데이터 시각화 라이브러리_2편.matplotlib 그래프 그리기(ft. 데이터 입력, 축 이름(label), 범례(legend), 제목(title) 설정)

2021.07.06 - [파이썬 패키지/데이터분석] - [Python/matplotlib] 데이터 시각화 라이브러리_3편.matplotlib 그래프 그리기(선 색상, 종류, 마커 설정)

2021.07.09 - [파이썬 패키지/데이터분석] - [Python/matplotlib] 데이터 시각화 라이브러리_4편.눈금(Tick), 그리드(Grid) 표시하는 법

2021.07.11 - [파이썬 패키지/데이터분석] - [Python/matplotlib] 데이터 시각화 라이브러리_5편.다중 그래프 그리는 방법(ft. figure, subplot)


먼저 기본 설정을 하고 시작하겠습니다.

 

import matplotlib.pyplot as plt
import numpy as np

plt.rc('font', family='NanumBarunGothic') 
plt.rcParams["figure.figsize"] = (8, 6)

 

 

막대 그래프

: plt.bar(x, y)

 

막대 그래프를 그리는 방법은 지금까지 배운 꺾은선 그래프와 같지만 딱 하나 다릅니다. plt.plot를 plt.bar로만 바꿔주시면 됩니다.

단, plt.bar( ) 함수는 반드시 x, y축 데이터를 모두 넣어 주어야합니다. plt.plot( ) 함수 처럼 자동으로 x축 index를 만들어 주지 않고 에러를 출력하거든요.

 

당연한 이야기지만 x축 데이터와 y축 데이터의 갯수가 같아야합니다.

 

# data 생성
data_y = np.arange(1, 11)
data_x = np.arange(1, 11)

# 꺾은선 그래프 그리기
plt.subplot(2, 1, 1)
plt.plot(data_y)

# 막대 그래프 그래프
plt.subplot(2, 1, 2)
plt.bar(data_x, data_y)

# 그래프 출력
plt.show()

그래프 형태 비교(Line vs Bar)

 

막대별로 다른 색상을 넣거나, 막대의 폭, 테두리 등의 스타일 설정도 가능합니다. 여기서는 다양한 그래프를 다룰 예정이므로 자세한 내용은 글 마지막의 참고 자료를 참고해주세요.

 

참고로 label, legend, title 등은 지난 시간에 배운 내용이 똑같이 적용 가능하답니다.

 

 

 

수평 막대 그래프

: plt.barh(y, x)

 

수평 막대 그래프는 위에서 배운 막대 그래프를 90도 회전시켜서 눞혀 놓았다고 생각하시면 됩니다.

인자로 y축 데이터를 먼저 받는다는 점만 주의하시면 되겠습니다. 그 외의 기타 설정들은 위에서 설명드린 내용과 동일합니다.

 

# data 생성
data_y = np.arange(11, 21)
data_x = np.arange(1, 11)

# 수평 막대 그래프 그래프
plt.barh(data_y, data_x)

# 그래프 출력
plt.show()

 

 

파이 차트 

: plt.pie( )

 

파이 차트는 여러가지 항목의 비율(%)를 효과적으로 나타낼 수 있는 그래프입니다. 참고로 autopct라는 파라미터를 설정해주지 않으면 데이터가 그래프에 표시되지 않는답니다.

 

# ratio (모두 합쳐서 100이 되지 않으면 자동으로 전체의 합에서 각각의 비율을 나타냄)
data = [15, 30, 20, 35]

plt.pie(data, autopct='%.1f%%')

plt.show()

아주 순수 그자체의 pie 차트 -> 못써먹음

 

여기까지만 알려드리면 파이차트는 정말 쓸모가 없을 듯 하여, 옵션들을 설정해서 쓸만하게 만들어보겠습니다.

 

많은 옵션들이 있지만 labels, explodes, colors, shadow 정도면 충분할 듯 하여, 이것들만 다루었습니다.

 

ratio = [15, 30, 20, 35]

# 각 영역의 범례
labels = ['A', 'B', 'C', 'D']

# 각 영역이 중심으로부터 떨어진 거리
explode = [0.05, 0.05, 0.05, 0.05]

# 각 영역의 색상
colors = ['lightpink', 'lightyellow', 'lightgreen', 'lightskyblue']

plt.pie(ratio, autopct='%.1f%%', labels=labels, explode=explode, colors=colors, shadow=True)

plt.show()

 

산점도 그래프

: plt.scatter( )

 

산점도 그래프는 데이터들이 얼마나 분포해 있는지, 그 값의 크기는 어느정도인지를 한 눈에 볼 수 있도록 표현한 그래프입니다.

 

# 0~1 사이의 실수를 무작위으로 50개 생성 (x, y 좌표로 활용)
x = np.random.rand(50)
y = np.random.rand(50)

# 각 점들의 색상 부여를 위한 Array 생성 (데이터와 동일한 50개 필요)
colors = np.arange(50)

# 각 점들의 면적을 부여해서 다양한 점의 면적 표현
area = x * y * 2000

# 0~1 사이의 투명도를 설정하여 점이 겹쳤을 때를 더 예쁘게 표현 가능
alpha= 0.5

# 산점도 그래프 그리기 (여기서 cmap은 matplotlib에 정의된 컬러 조합임)
plt.scatter(x, y, s=area, c=colors, alpha=alpha, cmap='hsv')

# 산점도 그래프 우측에 컬러가 무엇을 뜻하는지 컬러바 표현
plt.colorbar()

# 그래프 출력
plt.show()

 

 

c(color)나 s(area), alpha, colorbar( )와 같은 설정을 해주지 않으면 아래와 같이 허접한(?) 산점도 그래프를 얻을 수 있습니다.

 

위에서 같이 예쁜 컬러를 얻기 위해서는 cmap 설정을 할 수 있으며, 그 양이 방대해서 참고 자료로 대체하도록 하겠습니다. 원하는 컬러맵을 골라서 사용하시면 되겠습니다.

 

https://codetorial.net/matplotlib/set_colormap.html

 

Matplotlib 컬러맵 설정하기 - Codetorial

예제 import matplotlib.pyplot as plt import numpy as np np.random.seed(0) arr = np.random.standard_normal((8, 100)) plt.subplot(2, 2, 1) # plt.scatter(arr[0], arr[1], c=arr[1], cmap='spring') plt.scatter(arr[0], arr[1], c=arr[1]) plt.spring() plt.title('

codetorial.net

 


<참고 자료>

 

1. 직장인을 위한 파이썬 데이터분석 올인원 패키지 Online_패스트 캠퍼스 유료강의

 

2. Codetorial_Matplotlib 산점도 그리기

https://codetorial.net/matplotlib/scatter_plot.html

반응형
반응형

 

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

 

<데이터 시각화 관련 글>

 

2021.07.04 - [파이썬 패키지/데이터분석] - [Python/matplotlib] 데이터 시각화 라이브러리_1편.matplotlib 소개 및 한글 폰트 깨짐 해결 방법(ft.Jupyter notebook, Colab 환경)

2021.07.05 - [파이썬 패키지/데이터분석] - [Python/matplotlib] 데이터 시각화 라이브러리_2편.matplotlib 그래프 그리기(ft. 데이터 입력, 축 이름(label), 범례(legend), 제목(title) 설정)

2021.07.06 - [파이썬 패키지/데이터분석] - [Python/matplotlib] 데이터 시각화 라이브러리_3편.matplotlib 그래프 그리기(선 색상, 종류, 마커 설정)

2021.07.09 - [파이썬 패키지/데이터분석] - [Python/matplotlib] 데이터 시각화 라이브러리_4편.눈금(Tick), 그리드(Grid) 표시하는 법

 


 

오늘은 여러가지 그래프를 그리는 다양한 방법에 대해서 공부해 보겠습니다.

 

단일 그래프 그리기

 

지금까지 배워왔던 단일 그래프를 그리는 방법입니다. plt.show( )는 주피터 노트북을 사용하신다면 따로 안쓰셔도 그래프가 출력된답니다.

 

# data 생성
data = np.arange(1, 11)

# 그래프 그리기
plt.plot(data)

# 그래프를 보여주는 코드 (주피터 노트북에서는 안해줘도 그래프 출력됨)
plt.show()

 

 

다중 그래프 그리기

 

위에 출력된 그래프의 프래임을 캔버스(Canvas)라고 합니다. 하나의 캔퍼스 위에 여러 그래프를 그리는 방법은 아래와 같습니다.

 

data1 = np.arange(1, 11)
plt.plot(data1)

data2 = np.arange(11, 21)
plt.plot(data2)

plt.show()

 

 

그래프 나누어서 그리기 (다중 캔버스)

 

만약 캔버스를 하나 더 만들어서 그래프를 따로 나타내고 싶을 땐 어떻게 해야할까요? 그럴땐 plt.figure( ) 함수를 추가해주면 된답니다.

 

data1 = np.arange(1, 11)
plt.plot(data1)

# 캔버스  추가
plt.figure()

data2 = np.arange(11, 21)
plt.plot(data2)

plt.show()

 

 

한 캔버스 안에 여러 그래프를 분리해서 그리기

 

방금 배운 plt.figure( )를 사용하면 미리 설정해줬거나 기본적으로 설정된 그래프 사이즈가 그래프 마다 적용되어 스크롤이 너무 길어집니다. 그렇게 되면 그래프들을 한눈에 볼 수가 없겠죠?

 

좀 더 효율적인 방법은 plt.subplot( )을 그려주는 것입니다. subplot(행, 열, 인덱스)의 순으로 적어주시면 됩니다.

 

# 2행 2열로 canvas를 나누어 1번(1행 1열) 칸에 subplot 그리기
data1 = np.arange(1, 11)
plt.subplot(2, 2, 1)
plt.plot(data1)

# 2행 2열로 canvas를 나누어 3번(2행 1열) 칸에 subplot 그리기
data2 = np.arange(11, 21)
plt.subplot(2, 2, 3)
plt.plot(data2 * 3)

# 2행 2열로 canvas를 나누어 4번(2행 2열) 칸에 subplot 그리기
data3 = np.arange(21, 31)
plt.subplot(2, 2, 4)
plt.plot(data3 ** 2)

plt.show()

 

이번 시간에는 심플하게 여러 그래프를 그리는 다양한 방법을 다루어보았습니다.

 

오늘 배우신 내용은 복합적으로 적용가능하니, 스스로 여러가지를 조합해보면서 연습해보시기를 추천드립니다.

 


<참고자료>

 

직장인을 위한 파이썬 데이터분석 올인원 패키지 Online_패스트 캠퍼스 유료강의

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

 

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART) 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

<데이터 시각화 관련 글>

 

2021.07.04 - [파이썬 패키지/데이터분석] - [Python/matplotlib] 데이터 시각화 라이브러리_1편.matplotlib 소개 및 한글 폰트 깨짐 해결 방법(ft.Jupyter notebook, Colab 환경)

2021.07.05 - [파이썬 패키지/데이터분석] - [Python/matplotlib] 데이터 시각화 라이브러리_2편.matplotlib 그래프 그리기(ft. 데이터 입력, 축 이름(label), 범례(legend), 제목(title) 설정)

2021.07.06 - [파이썬 패키지/데이터분석] - [Python/matplotlib] 데이터 시각화 라이브러리_3편.matplotlib 그래프 그리기(선 색상, 종류, 마커 설정)

 


 

오늘은 지난 시간에 이어서 matplotlib.pyplot 모듈을 이용해서 그래프의 배경에 눈금(Tick)과 격자(Grid)를 표시하는 법에 대해서 공부해보겠습니다.

 

 

눈금 표시

 

우선 기본적인 아주 순수한 상태의 그래프를 하나 그려보겠습니다.

 

plt.plot([1,2,3,4])

 

자, 여기에 눈금들이 이미 있습니다. 자동으로 0.5 간격으로 눈금을 그려준 것을 보실 수 있을거예요.

 

여기서 배울 내용은 이 눈금들을 우리가 원하는대로 설정해주는 것입니다.

 

x축의 눈금은 xticks( ), y축의 눈금은 yticks( )로 설정해줄 수 있습니다. Numpy의 어레이로도 설정 가능한데 간격도 설정해줄 수 있으니, 일정한 간격의 눈금을 매우 세분화해서 표현하고 싶을 때 사용해주면 효과적일 것 같아요!

 

plt.plot([1,2,3,4])

# x축 눈금 설정
plt.xticks([0, 1, 2, 3])

# Numpy의 어레이로도 설정 가능

import numpy as np

# y축 눈금 설정
plt.yticks(np.arange(1, 5, 1))

 

 

눈금에 레이블 달기

 

눈금에 숫자가 아닌 문자를 표시해줄 수도 있답니다.

 

import numpy as np

x = np.arange(0, 100, 0.2)

plt.plot(x, x**2)

plt.title('코딩유치원 월간 방문자 수')
plt.xticks([0, 20, 40, 60, 80, 100], labels=['FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL'])
plt.yticks([0,400,1600,3600,6400,10000], ('0회','400회','1600회', '3600회', '6400회','10000회'))

 

눈금 스타일 설정

 

눈금 스타일은 tick_params( ) 함수를 이용해서 설정해줄 수 있습니다.

 

<설정 예시>

plt.tick_params(axis='x', direction='in', length=5, pad=6, labelsize=10, labelcolor='blue', top=True)

 

어떤 파라미터들이 있고 어떻게 설정 가능한지 표로 정리해놓았으니, 외우실 필요 없이 필요할 때 보시고 코딩하시면 되겠습니다.

 

기능 파라미터 인자 기본값
적용축 선택 axis 'x', 'y', 'both' 'both'
눈금 방향 direction 'in', 'out', 'inout' 'out'
눈금 길이 length int (정수) 3
눈금 위치 top/bottom/left/right True, False bottom / left = True
top / right = False
눈금 굵기 width int (정수) 1
눈금 색상 color 지난 글 (matplotlib 3편) 참조 'black'
여백 (눈금과 레이블 간격) pad int (정수) 3
레이블 크기 labelsize int (정수) 10
레이블 색상 labelcolor 지난 글 (matplotlib 3편) 참조 'black'

 

 

격자 표시

 

격자 표시는 이 한 줄의 코드로 아주 쉽게 설정해줄 수 있습니다.

 

plt.grid(True)

 

방금 전 만들어본 '코딩유치원 월간 방문자 수' 그래프에 적용해 보겠습니다. 조금 더 가시성이 좋네요.

 

 

축 지정

 

만약 축 하나에만 선을 설정해주시고 싶다면, 아래와 같이 파라미터를 설정해주시면 됩니다. 따로 결과 이미지는 넣지 않겠습니다.

 

# 가로선이 그려짐

plt.grid(True, axis='y')

# 세로선이 그려짐

plt.grid(True, axis='x')

 

 

그리드  스타일 설정

 

눈금과 마찬가지로 여러가지 설정이 가능합니다.

 

 

<설정 예시>

plt.grid(True, color='red', alpha=0.5, linestyle='--')

 

수 많은 파라미터들 중 사용할 만한 것만 골라서 표로 정리하였습니다.

기능 파라미터 인자 기본값
라인 색상 color 지난 글 (matplotlib 3편) 참조 'gray'
라인 스타일 linestyle 지난 글 (matplotlib 3편) 참조 '-' (실선)
라인 투명도 alpha 0~1.0 사이의 float 1
라인 굵기
linewidth int (정수) 1

 

오늘 준비한 내용은 여기까지입니다.

 

오늘도 코딩유치원을 찾아주신 모든분들께 감사드립니다.

 


<참고 자료>

 

https://codetorial.net/matplotlib/set_grid.html

 

Matplotlib 그리드 설정하기 - Codetorial

예제 import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 2, 0.2) plt.plot(x, x, 'bo') plt.plot(x, x**2, color='#e35f62', marker='*', linewidth=2) plt.plot(x, x**3, color='springgreen', marker='^', markersize=9) plt.grid(True, axis='y', co

codetorial.net

 

 

https://matplotlib.org/stable/api/pyplot_summary.html

 

matplotlib.pyplot — Matplotlib 3.4.2 documentation

cubehelix Unlike most other color schemes cubehelix was designed by D.A. Green to be monotonically increasing in terms of perceived brightness. Also, when printed on a black and white postscript printer, the scheme results in a greyscale with monotonically

matplotlib.org

 

 

 

 

 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

 

<데이터 시각화 관련 글>

 

2021.07.04 - [파이썬 패키지/데이터분석] - [Python/matplotlib] 데이터 시각화 라이브러리_1편.matplotlib 소개 및 한글 폰트 깨짐 해결 방법(ft.Jupyter notebook, Colab 환경)

2021.07.05 - [파이썬 패키지/데이터분석] - [Python/matplotlib] 데이터 시각화 라이브러리_2편.matplotlib 그래프 그리기(ft. 데이터 입력, 축 이름(label), 범례(legend), 제목(title) 설정)

 

 

오늘은 지난 시간에 이어서 matplotlib.pyplot 모듈을 이용해서 그래프의 선 색상, 선 종류, 마커의 종류를 설정하는 법에 대해서 공부해 보겠습니다.

 

선 색상, 종류, 마커 변경하기

 

선 색, 종류, 마커를 변경하기 가장 쉬운 방법은 아래의 표와 코드를 참고하셔서 조금씩 바꿔서 사용하는 것입니다.

 

 

 

<사용 예시>

plt.plot([1, 2, 3, 4], [2, 3, 5, 10], color='r', marker='o', linestyle='--')

 

보통은 이것만으로 충분하니깐 더 많은 컬러와 라인 스타일, 마커가 필요하실 때, 아래의 내용을 참고하시는 걸 추천드립니다.

 

 

선 색깔

 

방금 전 위에서 배운 내용에서 color 파라미터를 더 다양하게 설정하는 방법은 CSS 컬러를 사용하는 방법입니다. 참고로 CSS 컬러는 Hex code를 CSS에서 별도로 정의한 색상들입니다.

 

<사용 예시>

plt.plot([1, 2, 3, 4], [2, 3, 5, 10], color='tomato')

 

 

 

추가적으로 Cycler라는 Matplotlib 별도 정의 컬러들도 있습니다. 'C0'~'C9' 까지 정의되어 있으며 사용 방법은 동일합니다.

 

그럴 일을 거의 없을 것이라 생각되지만 나만의 마음에 드는 컬러를 고르고 싶으시다면, 아래 사이트에 들어가서 원하는 컬러를 만들어서 Hex code로 가져 오실 수 있습니다.

 

https://www.w3schools.com/colors/colors_hexadecimal.asp

 

Colors HEX

 

www.w3schools.com

 

 

선 종류

 

아마도 선을 구분하는데에는 색상으로 충분하겠지만 비슷한 그래프끼리 조금 더 세분화 해서 보여주어야 할 때에는 선 종류까지 설정해주는 것이 좋겠죠?

 

선 종류를 변경하는 방식은 위에서 배웠던 것을 포함하여 3가지입니다. 1, 2번 방법은 표현 방식만 다를뿐 선의 종류가 4가지로 제한되지만 심플하게 사용할 수 있으며, 3번 tuple 방식은 조금 복잡하지만 커스터마이징이 가능합니다.

 

1번 방법 2번 방법 3번 방법 (tuple)
‘ - ‘  'Solid' '(0, (1, 1))'
‘ - - ‘ 'Dashed' '(0, (1, 5))'
‘ : ‘  'Dotted' '(0, (5, 1))'
‘ -. ‘  'Dash-dot' '(0, (3, 5, 1, 5))'

 

 

주석을 달아두었으니 잘 보시고 원하는 옵션을 선택해서 사용하시면 되겠습니다.

 

<사용 예시>

# 포맷 문자열 방식 (‘ - ‘ (Solid), ‘ - - ‘ (Dashed), ‘ : ‘ (Dotted), ‘ -. ‘ (Dash-dot))
plt.plot([3, 3, 3], '-', color='C0', label='Solid')

# linestyle 지정 방식
plt.plot([2, 2, 2], linestyle='dashed', color='C0', label="'dashed'")

# linestyle에 튜플 방식 (커스터마이즈 가능)  --> 4개 이상의 선이 동시에 필요할 때 사용
plt.plot([1, 1, 1], linestyle=(0, (3, 5, 1, 5)), color='C0', label='(0, (3, 5, 1, 5))')

plt.legend(loc=(0.6,0.7), ncol=1, fontsize=7)

 

 

 

<linestyle 옵션 종류>

출처. Codetorial_Matplotlib 강의

 

마커 종류

 

마커는 값을 표시하는 점의 모양을 의미합니다. 특색 있는 마커를 사용하면 가시성이 좋아지는 장점이 있습니다.

 

<사용 예시>

plt.plot([4, 5, 6], marker="H")
plt.plot([3, 4, 5], marker="d")
plt.plot([2, 3, 4], marker="x")
plt.plot([1, 2, 3], marker=11)
plt.plot([0, 1, 2], marker='$Z$')

 

 

<마커 종류>

 

오늘 준비한 내용은 여기까지 입니다.

 

다음 시간에는 그래프 배경에 눈금과 그리드를 표시하는 법, 축 스케일 및 2차 3차 곡선을 그리는 법에 대해서 공부해보겠습니다.

 


<참고 자료>

 

https://codetorial.net/matplotlib/set_linestyle.html

 

Matplotlib 선 종류 지정하기 - Codetorial

예제 import matplotlib.pyplot as plt plt.plot([1, 2, 3], [4, 4, 4], '-', color='C0', label='Solid') plt.plot([1, 2, 3], [3, 3, 3], '--', color='C0', label='Dashed') plt.plot([1, 2, 3], [2, 2, 2], ':', color='C0', label='Dotted') plt.plot([1, 2, 3], [1, 1

codetorial.net

 

반응형
반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

 

<데이터 시각화 관련 글>

 

2021.07.04 - [파이썬 패키지/데이터분석] - [Python/matplotlib] 데이터 시각화 라이브러리_1편.matplotlib 소개 및 한글 폰트 깨짐 해결 방법(ft.Jupyter notebook, Colab 환경)

 

오늘은 matplotlib.pyplot 모듈을 이용해서 그래프를 그리는 법에 대해서 공부해 보겠습니다.

 


 

꺾은선 그래프

 

matplotlib.pyplot 모듈의 plot() 선(Line) 또는 마커(Marker) 그래프 그리기에 사용되는 함수입니다.

 

 

 

데이터 입력하기

 

우선 가장 기본적인 그래프인 선(Line) 그래프를 그려보겠습니다. 보통 그래프를 그리면 (x, y) 값이 필요하죠?

 

pyplot에서는 x값과 y값을 리스트로 묶어서 plt.plot([X값 리스트], [Y값 리스트])으로 값을 입력해줍니다. 참고로 리스트 대신에 튜플이나 Numpy Array 형태로도 데이터를 입력할 수 있답니다.

 

import matplotlib.pyplot as plt

# plt.plot([X값 리스트], [Y값 리스트])

plt.plot([1, 2, 3, 4], [10, 50, 30, 100])

 

만약 plt.plot( ) 안에 리스트를 하나만 넣어주면 어떻게 될까요? 오류가 발생할까요?

 

plt.plot([1,2,3,4])

 

 

정답은 "자동으로 y값 리스트로 판단하여, 0, 1, 2, 3 순의 x값을 자동으로 넣어서 그래프를 그려준다" 입니다.

 

 

Label(축 이름) 넣기

 

그래프를 그리면 X축과 Y축이 무엇을 뜻하는지 반드시 명시해 주어야 합니다. 그럴 때 사용하는 것이 label 함수입니다.

 

기능 파라미터 xlabel( )의 인자 ylabel( )의 인자
레이블 여백 labelpad int (정수) int (정수)
레이블 위치 loc 'left', 'center', 'right' 'bottom', 'center', 'top'

 

plt.xlabel('x축 레이블', labelpad=30, loc='right')
plt.ylabel('y축 레이블', loc='top')

 

 

Legend(범례) 표시

 

Legend는 그래프에 데이터의 종류를 표시하기 위한 텍스트입니다. 한국어로는 범례를 의미합니다.

여러 데이터들이 동시에 그래프 위에 존재할 때 구분하기 위해서 사용합니다.

 

사용 방법은 plot( ) 함수 안에서 label 파라미터에 문자열을 입력해준 후, plt.legend( ) 함수를 이용해 출력해주는 방식입니다.

 

plt.plot([1,2,3,4],[10,50,30,100], label='코딩유치원')

plt.legend()

 

 

범례의 위치를 바꾸고 싶으시다면 아래와 같이 설정 가능합니다. 0.0~1.0 사이의 값이 가능하니 바꾸어 가면서 위치를 조정해보세요.

# 그래프 좌측 하단
plt.legend(loc=(0.0, 0.0))

# 그래프 중앙
plt.legend(loc=(0.5, 0.5))

# 그래프 우측 상단
plt.legend(loc=(1.0, 1.0))

 

그 외 옵션들(범례끼리 배치, 폰트 크기, 테두리)도 많지만 필수라고 생각하는 것만 다루고 넘어가도록 하겠습니다.

 

 

Title (그래프 제목) 표시

 

그래프 이름은 아래와 같이 간단하게 추가해 줄 수 있습니다.

또한 잘 사용할 것 같지는 않지만 제목의 위치를 설정 가능합니다. 옵션은 위에서의 xlabel( ) 함수와 동일합니다.

 

plt.title('그래프 제목')

# plt.title('그래프 제목', loc='right', pad=20)

 

축 범위 지정하기

 

그래프 축의 범위는 설정을 안해주면 자동으로 약간의 여유를 두고 출력되는 것으로 보입니다.

잘은 모르지만 추측컨대, 해당 함수는 그래프 전체를 보기 보다는 원하는 범위만 그래프로 나타내고 싶을 때 사용할 것으로 예상됩니다.

 

plt.plot([1,2,3,4],[10,50,30,100])

# [X최소값, X최대값, Y최소값, Y최대값]
plt.axis([1, 3, 10, 60])

 

오늘 준비한 내용은 여기까지입니다.

 

다음 시간에는 선, 마커의 종류와 색상을 바꾸는 방법에 대해서 공부해보겠습니다.


<참고 자료>

 

https://codetorial.net/matplotlib/set_title.html

 

Matplotlib 타이틀 설정하기 - Codetorial

예제 import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 2, 0.2) plt.plot(x, x, 'bo') plt.plot(x, x**2, color='#e35f62', marker='*', linewidth=2) plt.plot(x, x**3, color='forestgreen', marker='^', markersize=9) plt.tick_params(axis='both'

codetorial.net

 

반응형

+ Recent posts