매일 아침 자동으로 실행되는 스케줄러를 심고, 들어오는 데이터를 하나의 마스터 엑셀 파일에 차곡차곡 누적하는 엔진까지 완성했습니다. 이제 우리의 엑셀 파일에는 수백, 수천 행의 데이터가 묵직하게 쌓여 있을 것입니다. 하지만 아무리 값진 데이터라도 검은색 글자와 격자무늬 가득한 엑셀 창으로만 바라보면 한눈에 흐름을 파악하기 어렵습니다. 수집한 데이터가 빛을 발하는 순간은 숫자가 직관적인 '그림(그래프)'으로 변환될 때입니다.

구글 애드센스 승인을 노리는 정보성 블로그 관점에서도 데이터 시각화는 엄청난 무기가 됩니다. 인터넷에 떠도는 뻔한 이미지를 불펌해 글에 넣는 블로거들과 달리, 내가 파이썬으로 직접 추출한 독창적인 통계 그래프를 글에 첨부하면 구글 봇이 좋아하는 독창적인 고품질 콘텐츠(Original Content)로 인정받기 쉽기 때문입니다. 오늘은 파이썬의 대표적인 시각화 라이브러리인 맷플롯립(Matplotlib)을 활용해, 마스터 엑셀 파일에 축적된 데이터를 멋진 꺾은선 그래프로 시각화하는 방법을 알아보겠습니다.

파이썬 시각화의 첫 번째 장벽: 한글 폰트 깨짐 현상 해결하기

파이썬으로 그래프를 처음 그릴 때 100% 확률로 마주치는 황당한 오류가 있습니다. 그래프를 열심히 그려서 화면에 띄웠는데, 제목이나 축 이름에 적은 한글이 모조리 깨져서 네모(□□□) 모양으로 출력되는 현상입니다. 맷플롯립 라이브러리가 기본적으로 영문 폰트(Sans-serif)를 사용하도록 설정되어 있어서 한글 글자체를 인식하지 못해 발생하는 문제입니다.

이를 해결하기 위해 코드 상단에 내 컴퓨터(윈도우 또는 맥)에 설치된 한글 폰트를 지정해 주는 보안 코드를 반드시 심어주어야 합니다. 일반적으로 윈도우 환경에서는 Malgun Gothic(맑은 고딕)을 지정하면 깔끔하게 한글이 출력됩니다. 이 설정을 한 번만 잡아두면 차트 내의 제목, x축, y축, 범례까지 깨짐 없이 완벽한 한국어로 대시보드를 구성할 수 있습니다.

마스터 엑셀 데이터를 읽어와 꺾은선 그래프를 그리는 실전 코드

아래 스크립트는 13편에서 우리가 매일 누적했던 마스터 엑셀 파일을 판다스로 읽어온 뒤, 날짜 흐름에 따른 특정 수치(예: 대기질 지수, 기온 등)의 변화 추이를 꺾은선 그래프로 그리고 이미지 파일로 저장하는 전체 흐름입니다.

Python
import os
import pandas as pd
import matplotlib.pyplot as plt

# 1. 한글 폰트 깨짐 방지 설정 (윈도우 기준 맑은 고딕 적용)
plt.rcParams['font.family'] = 'Malgun Gothic'
plt.rcParams['axes.unicode_minus'] = False  # 마이너스 부호가 깨지는 현상 방지

# 2. 경로 설정 및 마스터 엑셀 데이터 불러오기
base_dir = os.path.dirname(os.path.abspath(__file__))
master_file_path = os.path.join(base_dir, "master_accumulated_data.xlsx")

if not os.path.exists(master_file_path):
    print("❌ 누적된 마스터 엑셀 파일이 없습니다. 데이터 수집을 먼저 진행해 주세요.")
else:
    df = pd.read_excel(master_file_path)
    
    # 그래프를 그리기 전 데이터가 날짜순으로 이쁘게 정렬되어 있는지 확인합니다.
    df = df.sort_values(by='수집날짜')
    
    # 예시 분석: '서울' 지역의 데이터만 필터링하여 추이를 봅니다.
    df_seoul = df[df['지역'] == '서울']
    
    if df_seoul.empty:
        print("❌ 서울 지역의 데이터가 존재하지 않습니다.")
    else:
        # 3. 그래프 생성 및 스타일링
        # figsize=(가로, 세로) 인치 단위로 그래프 크기를 조절합니다.
        plt.figure(figsize=(10, 5))
        
        # 꺾은선 그래프 그리기 (x축: 수집날짜, y축: 대기질지수)
        # marker='o'를 주면 데이터 포인트마다 점이 찍혀 가독성이 좋아집니다.
        plt.plot(df_seoul['수집날짜'], df_seoul['대기질지수'], 
                 marker='o', linestyle='-', color='b', label='서울 대기질 지수')
        
        # 그래프 디테일 설정 (제목, 축 레이블, 그리드)
        plt.title("날짜별 서울 지역 대기질 지수 추이", fontsize=16, fontweight='bold', pad=15)
        plt.xlabel("수집 날짜", fontsize=12, labelpad=10)
        plt.ylabel("대기질 지수 (AQI)", fontsize=12, labelpad=10)
        
        # 그리드(격자선)를 추가하면 격자 눈금을 통해 수치를 확인하기 편해집니다.
        plt.grid(True, linestyle='--', alpha=0.6)
        
        # 범례 표시
        plt.legend(loc='upper right', fontsize=11)
        
        # 날짜 글자가 길어서 서로 겹칠 경우, 45도 기울여서 겹침을 방지합니다.
        plt.xticks(rotation=45)
        
        # 요소들이 잘리지 않도록 레이아웃을 조밀하게 조정합니다.
        plt.tight_layout()
        
        # 4. 시각화 결과를 이미지 파일로 저장 (블로그 업로드용 소스)
        graph_save_path = os.path.join(base_dir, "seoul_aqi_trend.png")
        plt.savefig(graph_save_path, dpi=300) # dpi=300으로 설정하면 고해상도로 깔끔하게 저장됩니다.
        print(f"🎯 [성공] 트렌드 그래프가 고해상도 이미지로 저장되었습니다: {graph_save_path}")
        
        # 화면에 그래프 띄우기
        plt.show()

시각화 레이아웃을 다룰 때 주의할 점: 데이터가 너무 많을 때의 대처법

파이썬 그래프 그리기에 재미가 들리면 1년 치, 2년 치 누적 데이터를 몽땅 한 그래프에 넣으려고 시도하게 됩니다. 이때 x축에 들어가는 날짜 텍스트가 수백 개로 늘어나면서 글자들이 새까맣게 뭉개져 도저히 읽을 수 없는 지저분한 차트가 만들어지곤 합니다.

우리가 만든 자동화 시각화 엔진을 블로그에 활용하려면 '적절한 필터링' 소스코드가 결합되어야 합니다. 예를 들어 전체 데이터 중 df.tail(15) 문법을 써서 '최근 15일 치 데이터'만 슬라이싱하여 그래프로 표현하거나, 월별로 그룹화(groupby)하여 평균값을 낸 뒤 점을 12개만 찍도록 데이터를 가공해야 합니다. 독자가 스마트폰이나 PC 화면으로 블로그 글을 읽을 때 0.5초 만에 변동 트렌드를 파악할 수 있도록 캔버스를 여유롭고 깔끔하게 비워두는 것이 시각화의 가장 중요한 기술적 매너입니다.

핵심 요약

  • 판다스로 누적한 엑셀 데이터를 Matplotlib 라이브러리와 연계하면 텍스트 기반의 통계를 시각적인 꺾은선 그래프로 즉시 전환할 수 있습니다.

  • 영문 기반 환경으로 설정된 맷플롯립의 특성상 한글 깨짐 오류가 발생하므로, 코드 초반에 시스템 폰트(Malgun Gothic)를 선언해주어야 정상 출력됩니다.

  • 시각화 이미지를 저장할 때는 plt.savefig() 함수에 dpi=300 옵션을 지정해 주어야 블로그 본문에 삽입했을 때 글자가 흐려지지 않는 고해상도 품질을 유지합니다.