[데이터 전처리] 시각화 - 막대 그래프

Bpius·2023년 10월 3일
0

데이터 EDA & 전처리

목록 보기
7/46
post-thumbnail

데이터를 시각화하기 위한 모듈로 matplotlib를 사용하여 다양한 그래프를 나타낼 수 있다.
대표적으로 라인, 산점도, 막대, 히스토그램, 박스 그래프 등이 있다.

jupyter notebook에서 %matplotlib inline을 설정하여 셀에 그래프를 바로 출력하여 확인할 수 있다.
아래와 같이 모듈을 불러와 셀에 직접 그릴 수 있도록 설정하고 plt란 키워드로 모듈을 사용하도록 한다.

import matplotlib.pyplot as plt
%matplotlib inline

matplotlib은 기본적으로 한글을 지원하지 않는다.
그래서 아래와 같이 직접 폰트 및 여러 옵션들을 설정할 수 있다.

rcParams['font.family']:폰트이름
rcParams['font.size']:폰트 크기
rcParams['figure.figsize']:(x, y)

기본 설정으로 폰트 이름과 글씨 크기, 그래프 크기 등을 조절 하거나 그래프를 그릴 때 마다 상황에 맞춰 그래프의 크기를 조절할 수 있다.

특정 폰트를 사용하는 것이 아니라 기본 한글만 출력이 되는 것으로 충분하다면 아래와 같이 koreanize_matplotlib 다운하여 import만 하여 사용하면 다른 입력 없이 matplotlib.pyplot 안에서 한글 출력도 간단히 쓸 수 있다.

!pip install koreanize_matplotlib

import koreanize_matplotlib

이제 막대 그래프를 그려보자.
제품의 일자별 판매 수량의 데이터를 가져와서 막대 그래프를 살펴보자.그리고 제품별 총 판매 수량을 groupby를 사용하여 데이터를 생성하고 이것을 바탕으로 막대 그래프를 그려보자. 제품별 판매 수량을 한 눈에 파악할 수 있다.
위의 상황에서 년도별로 혹은 제품별로 다중 막대 그래프를 그려보자.

이번에는 seaborn을 활용해 보자. seaborn은 막대 그래프를 그릴 때 간편하게 입력 data와 축만 설정하면 색상 등 조금 더 보기 좋은 그래프를 생성해 준다. plt로 부가 설정만 하고 그리기는 seaborn을 활용하는 것이다. 인자로는 data에는 사용될 데이터를 x, y 축에 들어갈 입력 컬럼을 hue는 다중 입력 시 구분자를 의미한다.
groupby를 통해서 분기별/제품별 판매 수량의 합계 데이터를 만든다.
그래프에는 y축에는 수량을 넣고, x축에 제품별/분기별 그리고 hue에는 구분으로 분기별/제품별로 서로 바꿔가며 입력해서 막대 그래프를 쉽게 그릴 수 있다.

데이터 프레임을 활용하여 그릴 수도 있다.as_index를 True로 하면 value '수량' 하나이기에 Series 형식으로 반환이 된다. 이것을 unstack()을 사용하여 index '년도' 부분을 컬럼으로 만들어서 데이터 프레임 형식으로 바꿀 수 있다.

stack는 아래로 긴 데이터 형식을, pivot는 옆으로 긴 데이터 형식을 만들 때 주로 사용하며, unstack()은 pivot과 같은 역할을 하는데 Series 형식에는 pivot_table를 사용하지 못하기에 unstack()를 사용한다.
그래프를 그리는 것보다 더 까다로운 것이 그래프를 그리기 위한 데이터로 변환하는 것이다.

이제 데이터 프레임으로 그래프를 그려보자.

통계 의도 파악

통계를 통해 그래프를 그릴 때 혹 다른 그래프를 볼 때에는 전체 범위를 파악하여야 한다.
다음과 같이 특정 년도의 일별 기사 수의 데이터를 가져와서 확인해 보자.
월별 기사 수를 확인하기 위해 작성 일자를 나누어 '월'컬럼을 생성하여 기존의 데이터에 합쳐서월별 기사의 수를 확인해보자.
2월과 11월, 12월에 기사 수가 적다는 것이 확인이 된다. 제일 많은 기사와 확인하면 마치 2배 이상 차이가 나는 것이라 착각할 수 있다. 위의 그래프는 축lim(시작 범위, 끝 범위)를 사용하여 제일 작은 부분의 90% 부분에서 가장 큰 부분의 110% 사이의 그래프다.

사실 전체의 그래프를 그리면 아래와 같아서 사실상 기사 수의 차이는 그리 크지 않다는 것을 알 수가 있다. 그래서 통계를 통한 그래프를 다룰 때 주의해야 한다.

profile
데이터 굽는 타자기

0개의 댓글