본문 바로가기
빅데이터 실습 공부/파이썬 데이터 분석

코로나 확진자 수 통계 분석하기

by 데이터 분석가가 되자 2024. 6. 30.
반응형

코로나 확진자 수 통계 분석하기

인공지능 시계열 예측은 시간에 따라 순차적으로 관측된 것을 학습하여 미래를 예측하는 기법입니다.

 

예를 들어 특정 주식의 일별 주가를 수집하여 미래를 예측해볼 수 있습니다.

 

A라는 기업의 기존 주가가 100달러, 101달러, 102달러, 103달러, 102달러, 101달러,

102달러, 103달러, 104달러라고 가정해봅니다.

 

최근에 101달러, 102달러였던 해당 기업의 내일 주가는 얼마로 예상됩니까?

 

기존 학습했던 결과처럼 103달러가 될 가능성이 높을 것입니다.

 

이처럼 인공지능 시계열 예측은 기존 시계열 데이터를 학습하여 미래를 예측하는 기법입니다.

 

인공지능 시계열 예측 기법은 대표적으로 3가지가 있습니다.

 

더보기

순환 신경망(recurrent neural network, RNN)

장단기 메모리(long short-term memory, LSTM)

게이트 순환 유닛(gated recurrent unit, GRU)

인공지능 시계열 예측 기법 중 LSTM을 사용해보겠습니다.

 

코로나 확진자 수 예측하기

코로나 확진자 수 데이터를 '공공데이터포털'에서 다운받습니다.

https://data.seoul.go.kr/dataList/OA-20461/S/1/datasetView.do

코로나19 확진자 수 데이터 확보

import할 것들이 좀 많아졌습니다.

 

pandas, numpy, matplotlib.pyplot을 import합니다.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from keras.models import Sequential
from keras.layers import LSTM, Dropout, Dense, Activation, RNN, GRU
from keras import layers
from google.colab import files
from typing import Dict, List, Set
import datetime

 

file = files.upload()

파일을 업로드합니다.

 

그리고 코로나 확진자 수를 로드하기 위해 '서울시 추가 확진'이라는 컬럼의 데이터만 로드합니다.

import io

datas = pd.read_csv('서울시 코로나19 확진자 발생동향.csv'
			, encoindg='cp949'
            , usecols=['서울시 추가 확진'])
numOfInfected = datas['서울시 추가 확진'].values

파일 로드를 합니다.

 

인공지능 시계열 데이터나 빅데이터는 데이터 전처리 과정이 필요합니다.

 

전처리 과정에는 정규화 작업도 필요합니다.

 

원인이 되는 x 데이터가 너무 한쪽에 몰려 있어 그 차이가 적을 때는

결과가 되는 y 값에 변화를 주기 어려울 때가 있습니다.

 

그럴 때 데이터를 고루 분산시켜주는 작업이 정규화입니다.

 

이렇게 정규화 작업 유무에 따라 결과의 정확도가 달라질 수 있습니다.

 

seq_len = 50
sequence_length = seq_len + 1

len(numOfInfected)

result = []
for index in range(len(numOfInfected) - sequence_length):
	result.append(numOfInfected[index:index + sequence_length])
    
mormalized_data = []

for window in result:
	normalized_window = [((float(p) / float(window[0])) - 1) for p in window]
    mormalized_data.append(normalized_window)
    
result = np.array(mormalized_data)

row = int(result.shape[0]*0.9)
train = result[:row, :]
np.random.shuffle(train)

x_train = train[:,:-1]
x_train = np.reshape(x_train, (x_train.shape[0], x_train.shape[1], 1))
y_train = train[:,-1]

x_test = result[row:, :-1]
x_test = np.reshape(x_test, (x_test.shape[0], x_test.shape[1], 1))
y_test = result[row:,-1]

x_train.shape, x_test.shape

데이터 정규화를 했습니다.

 

해당 데이터를 활용하기 위한 LSTM 인공지능 모듈을 모델링하는 코드를 쓰겠습니다.

 

batch_size는 학습 단위이며, epochs는 학습 횟수입니다.

 

이 코드는 20개의 학습 단위로 20회 학습을 하는 코드입니다.

 

model = Sequential()

# LSTM
model.add(layers.LSTM(50, return_sequence=True, input_shape=(50,1)))

model.add(layers.LSTM(64, return_sequence=False))

model.add(Dense(1, activation='linear'))

model.compile(loss='mse', optimizer='rmsprop')

데이터 모델링 코드입니다.

 

model.fit(x_train, y_train, validation_data=(x_test, y_test), batch_size=20, epochs=20)

데이터 학습 코드입니다.

 

다음 차시에는 지도에 표기하여 시각화하기를 수행하겠습니다.

 

감사합니다.

반응형