[Python] 폴더 내 CSV 형식 로그 파일 시각화하기

2025. 7. 28. 00:16·개발 (Development)/Python

시간에 따라 주기적으로 수집된 로그 데이터를 시각화해야 하는 경우가 종종 있습니다. 본 글에서는 여러 날짜 폴더에 저장된 CSV 형식의 로그 파일을 Python으로 읽어 들여, 특정 시간 기준 컬럼을 활용해 관심 있는 데이터를 시간 순으로 시각화하는 방법을 소개드립니다.

문제 상황

  • 파일은 .csv 또는 유사한 포맷이며, 쉼표로 구분된 텍스트 형식으로 저장됨
  • 상위 폴더 아래 YYYYMMDD 형태의 날짜별 폴더가 존재하고, 각 폴더 내에는 5분 간격으로 생성된 로그 파일이 저장됨
  • 각 파일의 첫 줄은 컬럼명이 포함되어 있고, 그 아래에는 여러 줄의 데이터가 있음
  • 시간 기준은 예를 들어 Timestamp_UTC 같은 컬럼에 저장되어 있으며, 이 값은 UTC(협정 세계시) 기준
  • 시각화 대상이 되는 데이터는 예를 들어 Sensor_Value_1 같은 센서 측정값 컬럼이라고 가정

해결 목표

  1. 날짜별 폴더를 순회하며 로그 파일을 자동으로 읽어 들이고
  2. 시간 컬럼(Timestamp_UTC)을 한국 시간(KST)으로 변환한 뒤
  3. 관심 있는 컬럼 값을 시간 순으로 정렬
  4. 두 개 이상의 데이터를 각각 시각화

구현 순서

1. 폴더 및 컬럼 설정

base_folder = './log_data'  # 최상위 경로
time_col = 'Timestamp_UTC'
col_1 = 'Sensor_Value_1'
col_2 = 'Sensor_Setpoint'
file_extension = '.csv'

2. 폴더 및 파일 순회

import os
import pandas as pd
from datetime import timezone, timedelta

utc_format = '%Y-%m-%d %H:%M:%S'
data_all = []

for folder_name in sorted(os.listdir(base_folder)):
    folder_path = os.path.join(base_folder, folder_name)
    if os.path.isdir(folder_path):
        for filename in sorted(os.listdir(folder_path)):
            if filename.endswith(file_extension):
                file_path = os.path.join(folder_path, filename)
                try:
                    df = pd.read_csv(file_path)
                    if time_col in df.columns and col_1 in df.columns and col_2 in df.columns:
                        df = df[[time_col, col_1, col_2]].copy()
                        df[time_col] = pd.to_datetime(df[time_col], format=utc_format, errors='coerce')
                        df[time_col] = df[time_col].dt.tz_localize('UTC').dt.tz_convert('Asia/Seoul')
                        data_all.append(df)
                except Exception as e:
                    print(f"파일 오류: {file_path} - {e}")

3. 데이터 정리 및 시각화

import matplotlib.pyplot as plt

if data_all:
    df_total = pd.concat(data_all).dropna().sort_values(by=time_col)

    # 첫 번째 그래프
    plt.figure(figsize=(14, 5))
    plt.plot(df_total[time_col], df_total[col_1], marker='o')
    plt.title(f'{col_1} 시간 변화 (KST)')
    plt.xlabel('시간')
    plt.ylabel(col_1)
    plt.xticks(rotation=45)
    plt.grid(True)
    plt.tight_layout()
    plt.show()

    # 두 번째 그래프
    plt.figure(figsize=(14, 5))
    plt.plot(df_total[time_col], df_total[col_2], marker='s', color='orange')
    plt.title(f'{col_2} 시간 변화 (KST)')
    plt.xlabel('시간')
    plt.ylabel(col_2)
    plt.xticks(rotation=45)
    plt.grid(True)
    plt.tight_layout()
    plt.show()
else:
    print("유효한 데이터가 없습니다.")

마무리하며

이번 작업을 통해 Python으로도 특정 형식의 로그 파일들을 시간 기준으로 정리하고 시각화하는 작업을 자동화할 수 있음을 확인할 수 있었습니다.

특히 UTC → KST 변환, 다중 폴더 순회, 예외 처리, 다중 그래프 분리 출력과 같은 현실적인 요구 사항을 고려한 점이 특징입니다.

이러한 방식은 센서 로그, 시스템 상태 기록, 장비 동작 이력 등 다양한 분야에서 폭넓게 응용될 수 있습니다.

반응형

'개발 (Development) > Python' 카테고리의 다른 글

[Python/Docker] Python Docker 이미지에서 취약점 제거하기 (python:3.9.12-slim 기반)  (0) 2025.08.03
[Python] 문자열 각 단어의 첫 글자를 대문자로 만드는 방법  (0) 2025.08.03
[Python] requests 요청 후 기다리는 로직과 타임아웃 설정  (0) 2025.07.28
[Python] 문자열 2줄 이상인지 확인하는 방법  (0) 2025.07.28
[Python] 딕셔너리에서 정규표현식으로 특정 형식의 키 추출하기  (4) 2025.07.28
'개발 (Development)/Python' 카테고리의 다른 글
  • [Python/Docker] Python Docker 이미지에서 취약점 제거하기 (python:3.9.12-slim 기반)
  • [Python] 문자열 각 단어의 첫 글자를 대문자로 만드는 방법
  • [Python] requests 요청 후 기다리는 로직과 타임아웃 설정
  • [Python] 문자열 2줄 이상인지 확인하는 방법
LoopThinker
LoopThinker
모르는 것을 알아가고, 아는 것을 더 깊게 파고드는 공간
  • LoopThinker
    CodeMemoir
    LoopThinker
  • 전체
    오늘
    어제
    • 분류 전체보기 (231)
      • 개발 (Development) (165)
        • Algorithm (1)
        • Angular (1)
        • AWS (6)
        • DeepSeek (2)
        • Docker (7)
        • Git (3)
        • Java (34)
        • JavaScript (4)
        • Kafka (5)
        • Kubernetes (4)
        • Linux (7)
        • PostgreSQL (38)
        • Python (31)
        • React (3)
        • TypeScript (3)
        • Vue.js (5)
        • General (11)
      • 데이터 분석 (Data Analysis) (1)
      • 알고리즘 문제 풀이 (Problem Solving.. (27)
      • 자격증 (Certifications) (24)
        • ADsP (14)
        • 정보처리기사 (4)
        • Linux Master (5)
        • SQLD (1)
      • 기술 동향 (Tech Trends) (11)
      • 기타 (Others) (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    python
    리눅스 마스터 2급 2차
    javascript
    Kubernetes
    백준
    데이터분석
    deepseek
    pandas
    백준자바
    Vue.js
    AWS
    Linux master
    백준온라인저지
    리눅스 마스터 2급
    Spring boot
    springboot
    자바
    DevOps
    JPA
    PostgreSQL
    Linux
    ADsP
    MyBatis
    docker
    JSON
    java
    백준알고리즘
    timescaledb
    Kafka
    오답노트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
LoopThinker
[Python] 폴더 내 CSV 형식 로그 파일 시각화하기
상단으로

티스토리툴바