파이썬을 활용한 '코로나19' 데이터 분석 및 시각화

항니·2021년 10월 19일
0

Data Analysis

목록 보기
3/5
post-thumbnail

✏️ 오늘의 데이터 분석 및 시각화 목표:
'각 구별(지역) 확진자 발생 추이'를 꺾은선 그래프로 주단위로 출력하기!

1. 엑셀파일 불러오기

!pip install openpyxl 	#파이썬에서 엑셀파일을 잘 불러오기 위해 설치
import pandas as pd
import numpy as np
import xlrd
covid_raw = pd.read_excel(
    '../서울시 코로나19 현황.xlsx',
    sheet_name=0, 
    usecols=['확진일', '지역']
)
covid_raw.head(10)
# 제가 필요한 데이터는 '확진일'과 '지역'이기 때문에 필요한 컬럼만 가지고 왔습니다.

covid_raw.info()
# info()를 찍어 확인해보니 '확진일'컬럼이 이미 날짜형 데이터타입으로 지정되어 있습니다.

covid_raw.set_index('확진일', inplace=True)
# '확진일' 컬럼의 데이터타입이 이미 날짜형으로 지정되어 있어 따로 형변환은 하지 않고 바로 인덱스로 설정하여 저장해주었습니다.


2. 피벗 테이블 만들기

# 일자별, 구별 확진자수를 합하여 나타낸 피벗테이블을 만들어줍니다 
gu_covid = covid_raw.pivot_table(
    index=covid_raw.index, 
    columns='지역',
    aggfunc=np.count_nonzero
)
gu_covid


3. resample()을 활용하여 일자별 데이터를 주별 데이터로 요약하기

weekly_gu = gu_covid.resample('W').sum()
weekly_gu
# 주별 요약이기 때문에 'W' 옵션을 주었고, 합계(sum)로 요약하였습니다.


➡️ 594행이 90행으로 줄어든 것과 인덱스가 7일 단위로 나뉜 것을 보아 보니 잘 요약이 되었습니다.


4. matplotlib을 활용하여 시각화하기

import matplotlib.pyplot as plt
from matplotlib import font_manager, rc

rc('font', family='Arial Unicode MS')		# matplotlib에서 한글깨지는 현상 막기 위해
plt.rcParams['axes.unicode_minus'] = False 	# '-'가 있을 때 한글이 깨지는 현상 방지
gu_name = weekly_gu.columns
gu_name

len(gu_name)
# 서울시 구 개수 25 + '기타' + '타시도' = 27개

27

# 1. '기타' 범주 포함
plt.figure(figsize=(20,8))
for gu in gu_name:
    plt.plot(weekly_gu['확진일'], weekly_gu[gu], label=gu)
    # 범례 표시
    plt.legend()
    # 제목
    plt.title('각 구별 코로나 확진자 발생 추이', fontsize=20)
    # x축 이름
    plt.xlabel('주별(일~월)', fontsize=13)
    # y축 이름
    plt.ylabel('확진자수', fontsize=14)
    # x축 설정(rotation은 각도)
    plt.xticks(weekly_gu['확진일'], rotation=90)


기타를 제외하여야 더 정교한 구별 확진자 추이 데이터 분석이 가능할 것으로 판단되어 제외한 후 다시 시각화를 해보았습니다.

# 2. '기타' 범주 제외
gu_name = gu_name.drop('기타')

plt.figure(figsize=(20,8))
for gu in gu_name:
    plt.plot(weekly_gu['확진일'], weekly_gu[gu], label=gu)
    plt.legend()
    plt.title("각 구별 코로나 확진자 발생 추이('기타' 제외)", fontsize=20)
    plt.xlabel('주별(일~월)', fontsize=13)
    plt.ylabel('확진자수', fontsize=14)
    plt.xticks(weekly_gu['확진일'], rotation=90)

profile
3D 모델 플랫폼에서 데이터 분석을 하고 있습니다

0개의 댓글