[데이터 살펴보기/판다스 내장 그래프 도구 활용]

2022. 10. 28. 12:35

그래프를 이용한 시각화 방법은 데이터의 분포와 패턴을 파악하는데 크게 도움된다.

판다스는 matplotlib 라이브러리의 기능을 일부 내장하고 있어서, 별도로 임포트하지 않고도 간단한 그래프를 손쉽게 그릴 수 있다.

 

시리즈 또는 데이터프레임 객체에 plot() 메소드를 적용하여 그래프를 그린다.

kind 옵션으로 그래프의 종류를 선택할 수 있다.

kind 옵션 설명 kind 옵션 설명
'line' 선 그래프 'kde' 커널 밀도 그래프
'bar' 수직 막대 그래프 'area' 면적 그래프
'barh' 수평 막대 그래프 'pie' 파이 그래프
'hist' 히스토그램 'scatter' 산점도 그래프
'box' 박스 플롯 'hexbin' 고밀도 산점도 그래프

 

 

목차

 

1. 선 그래프

2. 막대 그래프

3. 히스토그램

4. 산점도

5. 박스 플롯


선 그래프

 

DataFrame 객체.plot()

데이터프레임(또는 시리즈) 객체에 plot() 메소드를 적용할 때, 다른 옵션을 추가하지 않으면 선 그래프를 그린다.

 

# 예제 3-4(1)

import pandas as pd

df = pd.read_excel('남북한발전전력량.xlsx', engine='openpyxl')

df_ns = df.iloc[[0, 5], 3:]
df_ns.index = ['South', 'North']
df_ns.columns = df_ns.columns.map(int)
print(df_ns.head())
print('\n')

df_ns.plot()

 

예제 3-4(1) 출력 결과

남북한의 발전량 데이터셋을 이용하여 선그래프를 그렸다.

열 이름 배열(df_ns.columns)에 map(int) 메소드를 적용하여 문자열로 저장된 연도 값(1991~2016)을 정수형 데이터로 변환한다.

데이터프레임에 plot() 메소드를 전달하면 행 인덱스를 x축 데이터로 적용하기 때문에 df_ns의 행 인덱스 값('South', 'North')이 x축으로 전달된다.

 

하지만 시간의 흐름에 따른 연도별 발전량 변화 추이를 보기 위해서는 연도 값을 x축에 표시하는 것이 적절하다.

연도 값을 x축으로 바꾸기 위해 행렬을 전치할 것이다.

 

# 예제 3-4(2)

tdf_ns = df_ns.T
print(tdf_ns.head())
print('\n')

tdf_ns.plot()

 

예제 3-4(2) 출력 결과

새로 만들어진 그래프를 보면 남한의 발전량은 계속 증가했지만, 북한의 경우 지난 20년 동안 발전량에 큰 변화가 없는 것을 볼 수 있다.

 

 

막대 그래프

 

DataFrame 객체.plot(kind='bar')

 

# 예제 3-5

import pandas as pd

df = pd.read_excel('남북한발전전력량.xlsx', engine='openpyxl')

df_ns = df.iloc[[0, 5], 3:]
df_ns.index = ['South', 'North']
df_ns.columns = df_ns.columns.map(int)

tds_ns = df_ns.T
print(tds_ns.head())
print('\n')

tds_ns.plot(kind='bar')

 

예제 3-5 출력 결과

선 그래프와 비슷하게 남북한의 발전량 규모와 변화 추이를 한 눈에 알아볼 수 있다.

 

 

히스토그램

 

DataFrame 객체.plot(kind='hist')

 

# 예제 3-6

import pandas as pd

df = pd.read_excel('남북한발전전력량.xlsx', engine='openpyxl')

df_ns = df.iloc[[0, 5], 3:]
df_ns.index = ['South', 'North']
df_ns.columns = df_ns.columns.map(int)

tds_ns = df_ns.T
tds_ns.plot(kind='hist')

 

예제 3-6 출력 결과

히스토그램의 x축은 발전량을 일정한 간격을 갖는 여러 구간으로 나눈 것이고,

y축은 연간 발전량이 x축에서 나는 발전량 구간에 속하는 연도의 수를 빈도로 나타낸 것이다.

북한의 경우 지난 26년 동안 줄곧 800 미만의 발전량을 기록한 것을 데이터로 확인할 수 있다.

 

 

산점도

 

plot() 메소드kind='scatter' 옵션을 넣고, 데이터프레임의 열 중에서 서로 비교할 두 변수를 선택한다.

선택한 두 변수를 각각 x, y 옵션에 지정한다.

 

# 예제 3-7

import pandas as pd

df = pd.read_csv('auto-mpg.csv', header=None)

df.columns = ['mpg', 'cylinders', 'displacement', 'horsepower', 'weight', 'acceleration', 'model year', 'origin', 'name']

df.plot(x='weight', y='mpg', kind='scatter')

 

예제 3-7 출력 결과

UCI 자동차 연비 데이터셋을 이용하여 산점도를 그렸다.

x축에 'weight' 열을 지정하고 y축에 'mpg' 열을 지정했다.

 

산점도를 보면 차량의 무게(weight)가 클수록 연비(mpg)는 전반적으로 낮아지는 경향을 보이는 것을 알 수 있다.

이것으로 차량의 무게와 연비는 역의 상관관계를 갖는다고 해석할 수 있다.

 

 

박스 플롯

 

plot() 메소드kind='box' 옵션을 입력한다.

 

# 예제 3-8

import pandas as pd

df = pd.read_csv('auto-mpg.csv', header=None)

df.columns = ['mpg', 'cylinders', 'displacement', 'horsepower', 'weight', 'acceleration', 'model year', 'origin', 'name']

df[['mpg', 'cylinders']].plot(kind='box')

 

예제 3-8 출력 결과

위 예제에서 연비 데이터(mpg)는 10~45 범위에 넓게 분포되어 있다.

또한 'o' 표시의 이상값도 확인된다.

반면, 실린더 개수(cylinders)는 10 미만의 좁은 범위에 몰려 있다.

 

이처럼 박스 플롯은 각 변수들의 데이터가 퍼져 있는 정도를 확인할 때 쓰인다.


파이썬 머신러닝 판다스 데이터분석
저자 : 오승환
출판 : 정보문화사
발매 : 2019.06.05

 

BELATED ARTICLES

more