본문 바로가기
Python 데이터 분석 입문

(Python 데이터 분석 입문 07편) 그래프 그리기: Scatter Plot, Bar Chart, Line Chart, Box Plot

by mangoseed3434 2025. 12. 22.

안녕하세요? mangoseed3434입니다.

 

이번에는 seaborn패키지를 이용해 그래프를 그리는 실습을 했어요.

 

오늘도 'Do it! 쉽게 배우는 파이썬 데이터 분석'에 수록된 문제를 실습하면서 포스팅을 작성합니다.

 

 


 

우선, 그래프(Graph)는 뭘까요?

 

그래프(Graph)는 데이터를 보기 쉽게 그림으로 표현한 것입니다.

일반적으로 Raw Data는 숫자, 문자로 구성되어 있어 내용을 한번에 파악하기에 무리가 있습니다.

데이터를 그래프로 표현하는 이유는 크게 2가지 있습니다.

 

데이터를 그래프로 표현하는 이유

이유 1 : 데이터의 추세와 경향성이 드러나 특징을 쉽게 파악할 수 있다.

이유 2 : 데이터를 그래프로 그리는 과정에서 새로운 패턴을 발견할 수 있다.

 

파이썬에서 그래프를 만들 때 가장 많이 사용하는 패키지는 seaborn패키지에요.

seaborn패캐지를 이용해 산점도(Scatter Plot), 막대 그래프 (Bar Chart), 선 그래프 (Line Chart), 박스 그림 (Box Plot)를 그리는 방법에 대해 정리하겠습니다.

 


 

1. 산점도 (Scatter Plot)

 

산점도(Scatter Plot)는 데이터를 x축과 y축에 점으로 표현한 그래프입니다.

산점도(Scatter Plot)는 x축 데이터와 y축 데이터의 관계를 표현할 때 주로 사용합니다.

 

sns.scatterplot( ) 함수

 

sns.scatterplot( )를 이용해 산점도를 그릴 수 잇어요.

sns.scatterplot(data = 데이터프레임 이름, x = 'x축에 지정할 변수', y = 'y축에 지정할 변수')의 원리에요.

 

산점도 (Scatter Plot)

 

위의 경우, x축의 displ에 따른 y축의 hwy 값의 관계를 알 수 있어요.

 

sns.scatterplot( ).set( )
sns.scatterplot( ).set( )

 

sns.scatterplot( ).set(xlim = [범위, 범위], ylim = [범위, 범위])

 

sns.scatterplot( )를 이용하면 x축은 데이터프레임 내 최솟값부터 최댓값까지 모두 표현해요.

 

x축 혹은 y축의 특정 구간만 그래프로 시각화하고 싶으면,

sns.scatterplot( ).set( )을 사용해요.

.set(xlim = [범위, 범위], ylim = [범위, 범위])의 형태로 x축과 y축의 범위를 지정할 수 있어요.

 

hue

 

또한, 산점도 결과의 색깔을 종류별로 다르게 표현할 수도 있었어요.

 

sns.scatterplot(hue = '변수')

 

sns.scatterplot( )에 hue = '변수'를 적용하면, '변수'에 따른 x축과 y축의 산점도를 파악할 수 있었어요.

 


 

2. 막대 그래프 (Line Chart)

 

막대 그래프(Line Chart)는 데이터를 막대로 표현한 그래프에요.

주로 집단 별 차이를 표현할 때 막대 그래프를 사용해요.

 

sns.barplot( ) 함수

 

sns.barplot( )를 이용해 막대 그래프를 그릴 수 잇어요.

sns.barplot(data = 데이터프레임 이름, x = 'x축에 지정할 변수', y = 'y축에 지정할 변수')의 원리에요.

 

막대 그래프 (Line Chart)

 

근데 실습책은 막대별로 색상이 다르던데, 왜 저는 막대 색상이 전부 동일할까요?

이 부분에 대해 알게되면 제가 추후에 포스팅으로 다뤄보겠습니다.

 

일반적으로, 막대 그래프의 막대 정렬 순서는 그래프를 만드는데 적용된 데이터프레임의 행 순서에 의해 결정됩니다.

위 그래프의 경우에는 데이터프레임에서 4, f, r 순서로 정렬되어있다는 의미겠네요.

 

df.sort_values('기준', ascending = False)

 

df.sort_values( )를 이용해 데이터프레임에서 특정 기준으로 내림차순 정렬을 지정하면,

막대 그래프에서도 특정 기준으로 막대를 내림차순 정렬할 수 있었어요.

 

그럼, 시각화를 할 때, 일반적으로 데이터를 확보하고 정렬을 한 후 그래프를 그려야 하는 순서네요.

 

sns.countplot( ) 함수

 

sns.countplot( )함수를 사용하면 편리하게 빈도 막대 그래프를 그릴 수 있어요.

 

sns.barplot( )함수를 이용해 빈도 막대 그래프를 그리는 과정은 번거로워요.

df.groupby( )함수와 df.agg( )함수를 이용해 데이터를 가공하는 과정이 필요하기 때문이에요.

하지만, sns.countplot( )함수를 이용하면 Raw Data를 바로 막대 그래프로 시각화할 수 있어요.

 

 

특히, sns.countplot( )의 괄호 안에 order = ['변수1', '변수2', '변수3',]를 입력해 막대 정렬을 바로 할 수 있어요.

단, 이 방법의 경우 변수의 구성을 알아야 막대 정렬을 지정할 수 있겠네요.

 


 

3.  선 그래프 (Line Chart)

 

선 그래프(Line Chart)는 데이터를 선으로 표현한 그래프에요.

일상에서 가장 자주 접하는 그래프 형태네요.

주로 시간에 따라 달라지는 데이터를 표현할 떄 주로 사용하는 그래프네요.

 

시간에 따른 데이터를 시계열 데이터(Time Series Data)라고 하고,

시계열 데이터를 선으로 표현한 그래프가 시계열 그래프(Time Series Chart)입니다.

 

sns.lineplot( )함수

 

sns.lineplot( )를 이용해 선 그래프를 그릴 수 잇어요.

sns.lineplot(data = 데이터프레임 이름, x = 'x축에 지정할 변수', y = 'y축에 지정할 변수')의 원리에요.

 

pd.to_datetime( ) 함수

 

pd.to_datetime( ) 함수는 변수 유형을 날짜 시간 유형으로 변경할 수 있어요.

pd.to_datetime(데이터프레임명['변수1'])의 구조로 작동하는데요.

데이터프레임의 변수1의 데이터를 날짜 시간 유형(datetime64)로 변경하는 기능입니다.

 

위의 예시로 설명해보면,

기존 economics 데이터프레임 내 date 변수는 문자(object)입니다.

to_datetime( )함수를 이용해 date 변수를 날짜 시간 유형(datetime64)로 변경하고, 이를 date2 변수에 할당했어요.

 

 

결과가 동일해도,

date의 데이터 유형과 date2의 데이터 유형은 달라요.

 

df.dt

 

df.dt를 이용해 날짜 시간 유형(datetime64)에서 년도(year), 월(month), 일(day)를 파악할 수 있어요.

 

df[변수].dt.year : 날짜 시간 유형의 변수에서 년도를 출력

df[변수].dt.month : 날짜 시간 유형의 변수에서 월을 출력

df[변수].dt.day : 날짜 시간 유형의 변수에서 일을 출력

 

df.dt.year 그리고 sns.lineplot( )
df.dt.year 그리고 sns.lineplot( ) 결과

 

위 그래프에서 선 주위에 색칠된 범위는 신뢰구간(Confidence Interval)입니다.

신뢰구간에 대해서는 다른 포스팅에서 다뤄보겠습니다!

 

 

sns.lineplot( )의 괄호안에 errorbar = None을 입력하면 sns.lineplot( )결과에서 신뢰구간을 표시하지 않을 수 있어요.

 


 

4. 상자 그림 (Box Plot)

 

상자 그림(Box Plot)은 데이터의 분포나 퍼져 있는 형태를 직사각형 상자 모양으로 표현한 그래프입니다.

상자 그림으로 데이터 분포를 알 수 있기 때문에 평균값만 볼 때보다 데이터의 특징을 더 자세히 이해할 수 있습니다.

 

sns.boxplot( ) 함수

 

sns.boxplot( )를 이용해 상자 그림을 그릴 수 잇어요.

sns.boxplot(data = 데이터프레임 이름, x = 'x축에 지정할 변수', y = 'y축에 지정할 변수')의 원리에요.

 

상자 그림(Box Plot)에 대한 포스팅은 이전에 업로드 한 적이 있습니다.

 

 

(데이터 분석 공부1) Box Plot 읽기

안녕하세요? mangoseed3434입니다. 이번에는 지난 포스팅에서 다룬 Box Plot을 해석하는 방법에 대해 공부했습니다. 일상에서 Box Plot을 쉽게 볼 수 있는 분야는 주식차트에요.흔히 캔들차트라고 부르

mangoseed3434.tistory.com

 

이 때 Box Plot에 대해 공부한 내용을 위 Box Plot에 적용해보겠습니다.

 

 

f의 경우

1. 26 ~ 29에 hwy의 50%가 분포되어 있다.

2. Q2가 Q3에 치우쳐 있다. = 높은 hwy에 치우친 형태이다.

3. 수염 위아래에 이상치가 있다.

4. hwy가 특이하게 높거나 낮은 f가 있다.

 

4의 경우

1. 16 ~ 22에 hwy의 50%가 분포되어 있다.

2. Q2가 Q1에 치우쳐 있다. = 낮은 hwy에 치우친 형태이다.

3. 수염 위아래에 이상치가 없다. = 대부분의 4는 사분위 범위에 포함된다.

 

r의 경우

1. 17 ~ 23에 hwy의 50%rk 분포되어 있다.

2. Q2가 IQR의 가운데에 있다. = 치우친 형태가 아니다.

3. 수염 위아래에 이상치가 없다. = 대부분의 r은 사분위 범위에 포함된다.

 


 

Box Plot을 해석하는 방법에 대해서는 아직 훈련이 더 필요하네요.

그래도 재미있어요.

 

정리해볼게요.

 

함수

seaborn.scatterplot(data = 데이터프레임, x = '변수1', y = '변수2') : 산점도를 그릴 때

seaborn.scatterplot(data = 데이터프레임, x = '변수1', y = '변수2').set(xlim = [범위, 범위], ylim = [범위, 범위]): x축과 y축에 범위를 지정한 산점도를 그릴 때

seaborn.barplot(data = 데이터프레임, x = '변수1', y = '변수2') : 막대 그래프를 그릴 때

seaborn.barplot(data = 데이터프레임, x = '변수1', y = '변수2', order = ['변수1', '변수2']) : 변수를 기준으로 정렬된 막대 그래프를 그릴 때

seaborn.linerplot(data = 데이터프레임, x = '변수1', y = '변수2') : 선 그래프를 그릴 때

seaborn.linerplot(data = 데이터프레임, x = '변수1', y = '변수2', errorbar = None) : 신뢰구간을 표한히자 않고 선 그래프를 그릴 때

seaborn.boxplot(data = 데이터프레임, x = '변수1', y = '변수2') : 상자 그림을 그릴 때

 

다음에는 책에 수록된 데이터를 이용해 '한국인의 삶'에 대한 데이터 분석 프로젝트를 시작해보겠습니다!