Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 웹 크롤링
- 자바네트워크
- 파이썬
- 리눅스
- GIT
- 소프트웨어공학
- 코틀린
- Java
- GPT-4's answer
- 자바암호
- 자바
- python
- 시스템
- chatGPT's answer
- oracle
- Spring boot
- lombok
- android
- JVM
- 유닉스
- 고전역학
- NIO
- write by GPT-4
- 뉴턴역학
- 인프라
- 역학
- Database
- kotlin
- write by chatGPT
- flet
Archives
- Today
- Total
Akashic Records
CSV 데이터 파일을 이용한 데이터 시각화 본문
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()
모듈 임포트
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
'Python for Beginners' 카테고리의 다른 글
REST API 데이터 시각화 (0) | 2024.06.18 |
---|---|
GeoJSON 데이터 파일을 이용한 세계 지진의 크기와 위치 시각화 (0) | 2024.06.17 |
[추가자료] 9.3 데이터 시각화 plotly- dice (주사위) (1) | 2024.06.13 |
[추가자료] 9.3 데이터 시각화 Matplotlib - RandomWalk(무작위 이동) (1) | 2024.06.11 |
[추가자료] 9.3 데이터 시각화 Matplotlib - 직선, 점 그래프 (1) | 2024.06.11 |
Comments