[파이썬 13] pandas로 분석하고 그래프로 보여주기


앞선 편에서 pandas로 데이터를 분석했다면, 그 결과를 숫자 나열이 아니라 한눈에 보이는 그래프로 만드는 게 이번 편의 주제다. 파이썬에서는 matplotlib이 가장 기본적인 시각화 라이브러리이고, 그 위에 seaborn이 통계적 그래프를 더 적은 코드로, 더 보기 좋게 그릴 수 있도록 얹혀진 라이브러리로 자리잡고 있다.


1. 설치와 기본 그래프


pip install matplotlib seaborn


import matplotlib.pyplot as plt


months = ["1월", "2월", "3월", "4월"]

sales = [100, 120, 150, 170]


plt.plot(months, sales)

plt.title("월별 매출 추이")

plt.xlabel("월")

plt.ylabel("매출")

plt.show()


plt.plot()은 선 그래프를 그리는 가장 기본적인 함수다. 시간에 따른 추세나 변화를 보여줄 때 적합하며, 매출 추이나 환율 변동 같은 시계열 데이터를 시각화할 때 흔히 쓰인다.


2. 막대그래프, 카테고리별 비교


카테고리별 수치를 비교할 땐 막대그래프가 적합하다. seaborn을 쓰면 판다스 DataFrame을 그대로 넣어서 훨씬 간결하게 그릴 수 있다.


import seaborn as sns

import matplotlib.pyplot as plt


sns.barplot(x='지역', y='매출', data=df)

plt.title('지역별 매출')

plt.show()


seaborn의 barplot은 기본적으로 각 카테고리의 평균값을 막대 높이로 표시하고, 그 추정치의 신뢰구간까지 오차 막대로 자동으로 그려준다는 특징이 있다. matplotlib으로 직접 이런 통계 처리를 하려면 여러 줄이 필요한데, seaborn은 함수 호출 한 번으로 끝난다는 게 강점으로 꼽힌다.


3. pandas의 groupby 결과를 바로 그래프로


앞서 배운 groupby 결과를 곧바로 시각화에 연결하는 흐름이 실무에서 가장 자주 쓰이는 패턴이다.


region_sales = df.groupby('지역')['매출'].sum()


region_sales.plot(kind='bar', title='지역별 매출 합계')

plt.ylabel('매출')

plt.show()


pandas의 Series나 DataFrame은 자체적으로 .plot() 메서드를 갖고 있어서, matplotlib을 따로 명시적으로 호출하지 않아도 곧바로 그래프를 그릴 수 있다.


4. 여러 그래프를 한 화면에


여러 지표를 동시에 비교하고 싶을 때는 막대그래프와 선그래프를 겹쳐서 그리는 방식도 흔히 쓰인다. 예를 들어 월별 매출(막대)과 누적 성장률(선)을 한 그래프에 같이 표시하면 맥락을 함께 파악하기 쉬워진다.


fig, ax1 = plt.subplots(figsize=(10, 6))

sns.barplot(x='월', y='매출', data=df, color='skyblue', ax=ax1)


ax2 = ax1.twinx() # y축을 하나 더 만들어서 겹쳐 그리기

ax2.plot(df['월'], df['성장률'], color='red', marker='o')


plt.title('월별 매출과 성장률')

plt.show()


twinx()는 하나의 그래프 안에 y축을 두 개 만들어주는 함수로, 단위가 서로 다른 두 데이터(예: 매출은 원 단위, 성장률은 퍼센트 단위)를 한 화면에 겹쳐 보여줄 때 쓰인다.


5. 그래프를 파일로 저장하기


만든 그래프는 화면에 띄우는 것 말고 이미지 파일로 저장해서 보고서나 이메일에 첨부할 수도 있다.


plt.savefig("월별매출그래프.png", dpi=150, bbox_inches='tight')


dpi는 이미지 해상도, bbox_inches='tight'는 그래프 주변 여백을 자동으로 잘라내는 옵션으로, 보고서에 바로 넣기 좋은 형태로 저장해준다.


6. 정리


matplotlib은 기본적인 선/막대 그래프를 그리는 표준 라이브러리이고, seaborn은 그 위에서 통계적 정보(평균, 신뢰구간 등)를 더 적은 코드로 시각화해준다. 앞서 배운 pandas의 groupby 결과를 바로 이어서 그래프로 그리는 흐름이 실무 데이터 분석에서 가장 흔하게 쓰이는 패턴이다.