Akashic Records

CSV 데이터 파일을 이용한 데이터 시각화 본문

Python for Beginners

CSV 데이터 파일을 이용한 데이터 시각화

Andrew's Akashic Records 2024. 6. 17. 15:25
728x90

이번 예제 코드는 알래스카 싯카 날씨 데이터 CSV 파일에서 데이터를 읽어, 그 데이터로부터 최고 기온과 최저 기온을 추출하여 시각화하는 코드입니다. 

from pathlib import Path
import csv
from datetime import datetime

import matplotlib.pyplot as plt

def read_weather_data():
    #path = Path('weather_data/sitka_weather_07-2021_simple.csv')
    path = Path('weather_data/sitka_weather_2021_simple.csv')

    # 모든행을 리스트로 반환
    lines = path.read_text().splitlines()

    reader = csv.reader(lines)
    header_row = next(reader)

    for index, column_header in enumerate(header_row):
        print(index, column_header)

    dates, highs, lows = [], [], []
    for row in reader:
        current_date = datetime.strptime(row[2], '%Y-%m-%d')
        high = int(row[4])
        low = int(row[5])
        dates.append(current_date)
        highs.append(high)
        lows.append(low)

    print(highs)

    # 최고 기온을 그래프로 그립니다.
    plt.style.use('seaborn-v0_8')
    fig, ax = plt.subplots()
    ax.plot(dates, highs, color='red', alpha=0.5)
    ax.plot(dates, lows, color='blue', alpha=0.5)
    ax.fill_between(dates, highs, lows, facecolor='blue', alpha=0.1)

    # 그래프 형식
    ax.set_title("Daily High and Low Temperatures, 2021", fontsize=24)
    ax.set_xlabel('', fontsize=16)
    fig.autofmt_xdate()
    ax.set_ylabel('Temperature (F)', fontsize=16)
    ax.tick_params(labelsize=16)
    plt.show()


if __name__ == '__main__':
    read_weather_data()

 

sitka_weather_2021_simple.csv
0.02MB

모듈 임포트

from pathlib import Path
import csv
from datetime import datetime
import matplotlib.pyplot as plt
  • pathlib.Path: 파일 시스템 경로를 객체 지향적으로 다루기 위해 사용됩니다.
  • csv: CSV 파일을 읽고 쓰기 위한 모듈입니다.
  • datetime.strptime: 문자열로 된 날짜를 datetime 객체로 변환합니다.
  • matplotlib.pyplot: 데이터를 그래프로 시각화하기 위한 모듈입니다.

함수 read_weather_data

def read_weather_data():
    path = Path('weather_data/sitka_weather_2021_simple.csv')
    lines = path.read_text().splitlines()
    reader = csv.reader(lines)
    header_row = next(reader)
  • path = Path(...): 데이터 파일의 경로를 설정합니다. 이 경로는 Path 객체를 사용하여 플랫폼 독립적으로 설정됩니다.
  • lines = path.read_text().splitlines(): 파일의 모든 텍스트를 읽고, 개행 문자를 기준으로 분리하여 리스트로 변환합니다.
  • reader = csv.reader(lines): 읽은 텍스트 라인을 CSV 리더 객체로 변환합니다.
  • header_row = next(reader): CSV 파일의 첫 번째 행(헤더 행)을 읽어옵니다.

헤더 행의 각 열의 인덱스와 이름을 출력하는 부분:

    for index, column_header in enumerate(header_row):
        print(index, column_header)

데이터 추출 및 그래프 데이터 구성

    dates, highs, lows = [], [], []
    for row in reader:
        current_date = datetime.strptime(row[2], '%Y-%m-%d')
        high = int(row[4])
        low = int(row[5])
        dates.append(current_date)
        highs.append(high)
        lows.append(low)
  • 이 코드는 파일의 나머지 부분을 읽으며, 각 행에서 날짜, 최고 기온, 최저 기온 데이터를 추출합니다.
  • datetime.strptime(row[2], '%Y-%m-%d'): 문자열 형태의 날짜를 datetime 객체로 변환합니다.
  • int(row[4]), int(row[5]): 문자열 형태의 기온을 정수로 변환합니다.
  • dates, highs, lows: 각각의 리스트에 날짜, 최고 기온, 최저 기온을 저장합니다.

데이터 시각화

    plt.style.use('seaborn-v0_8')
    fig, ax = plt.subplots()
    ax.plot(dates, highs, color='red', alpha=0.5)
    ax.plot(dates, lows, color='blue', alpha=0.5)
    ax.fill_between(dates, highs, lows, facecolor='blue', alpha=0.1)
  • plt.style.use('seaborn-v0_8'): 그래프 스타일을 설정합니다.
  • fig, ax = plt.subplots(): 그래프를 그릴 축과 함께 그림 객체를 생성합니다.
  • ax.plot(...): 최고 기온과 최저 기온을 선 그래프로 표시합니다.
  • ax.fill_between(...): 최고 기온과 최저 기온 사이를 색으로 채웁니다.

그래프 형식 지정

    ax.set_title("Daily High and Low Temperatures, 2021", fontsize=24)
    ax.set_xlabel('', fontsize=16)
    fig.autofmt_xdate()
    ax.set_ylabel('Temperature (F)', fontsize=16)
    ax.tick_params(labelsize=16)
    plt.show()
  • 축 및 라벨 설정, 그래프
  • 타이틀 설정, 라벨 크기 조정을 합니다.
  • fig.autofmt_xdate(): x축의 날짜 라벨이 서로 겹치지 않도록 자동으로 포맷을 조정합니다.
  • plt.show(): 그래프를 표시합니다.

메인 실행 블록

if __name__ == '__main__':
    read_weather_data()

스크립트가 직접 실행될 때 read_weather_data() 함수를 호출합니다. 이는 모듈로 사용될 때는 실행되지 않도록 합니다.이 코드는 CSV 파일에서 날씨 데이터를 읽고, 시간에 따른 기온 변화를 시각화하는 전체적인 과정을 보여줍니다.

728x90
Comments