본문 바로가기

Programming Language/Data & A.I. (데이터 & 인공지능 관련)

기온과 코로나 확진에 상관관계가 있을까 ? (대한민국 전체 평균 온도와 확진 데이터 시각화) - (캐글 코로나 데이터 셋/ Kaggle coronavirusdataset 1)

반응형

 

'누적 확진자 데이터에서 일일 추가 확진자 수 데이터 편집 방법' 및 캐글 데이터 다운로드는

이전 블로그 글 참고 해주시면 감사하겠습니다.

 

위 페이지에서 '누적 확진자'였던 데이터를 '일별 추가 확진자' 데이터로 바꾸어보았습니다. 이러한 데이터를 활용하여 여러 가지 가설을 세우고 기본적인 인사이트 확인해보고자 했습니다.

 

 

1. 가설 설정

 

 

' 1월부터 4월 30일까지 우리의 제한적인 데이터 안에서 할 수 있는게 뭘까? '

 

 

우선 확인해보고 싶었던 것이 항상 언론이나 학술지에서 말하던 '기온이 코로나 확산에 영향을 준다'  '기온이 올라가면 코로나는 활동을 못한다' 등등. 온도와 코로나 확산(활동)의 상관관계 가 궁금했습니다.

그 과정을 거치기 위해선 데이터 편집 과정과 시각화를 위한 정보들이 필요했고, 가진 데이터 안에서 충분히 가설을 세우고 실행 하는 것에 의의를 나타내고자 했습니다.

즉, '코로나 확산(활동)에 대한민국 기온이 미치는 영향과 상관관계'를 데이터를 통해서 보고자 했습니다.

 

물론!! 온도와 코로나 바이러스의 상관관계를 직접적으로 밝히기 위해서는 당연히 과학적인 근거와 연구가 뒷받침 되어야합니다. 이 글의 경우, 주어진 데이터를 전처리하고 시각화 하는 것을 중심으로 했기 때문에 과학적 증명과는 거리가 먼 글입니다. 참고하여 읽어주시면 좋겠습니다.

 

 

 

2. 데이터 확인 및 필요없는 부분 제거

지난 글에서도 확인해봤지만 가지고 있는 데이터가 이렇게 파일명을 가지고 각각의 데이터를 담고 있었습니다. 이번 '코로나 확산(활동)에 대한민국 기온이 미치는 영향과 상관관계' 주제는 Weather.csv 파일이 주요하게 사용되어졌습니다. 이 데이터를 weather_df에 담고 데이터 전처리 과정을 진행했습니다.

Weather_df.head(5)

 

우선 Weather 데이터를 불러오고 확인해보면, 열(칼럼) 부분 우리가 필요하지 않은 데이터 들도 포함되어있는 것을 확인할 수 있었습니다. 또한, 날짜(date) 칼럼도 2016년 1월부터가 있었고, 풍향이나 최대 풍속 이런 것들이 포함되어 있었다. 우리가 필요한 데이터는 코로나 바이러스 발생 후 부터의 데이터라서 (2020-01-20 & province : Seoul 값을 가진 인덱스)로 위치를 잡고 나머지 날짜의 날씨 데이터 들은 삭제를 진행했습니다.

 

즉, 필요없는 날짜의 데이터 들과 필요없는(최대 풍속 등) 칼럼 부분을 삭제하는 전처리 과정이 필요했습니다.

 

#우리가 가공하는 데이터인 '2020-01-20' 위치 확인
Weather_df.loc[23678, :]

 

23679 index(행)부터 필요한 데이터라는걸 확인하고 나머지 데이터는 없애도 무방하다는 것을 확인해줍니다.

이렇게 우리가 해야할 일은 2020년 1월 20일 이전의 데이터를 싹다 제거하고, 불필요한 칼럼을 제거하는 것이 우리 데이터 전처리의 목표가 되었습니다. 그리고 Whether_avg_df를 활용하여 지역별 날씨 데이터가 있지만, 전체를 합쳐서 대한민국 평균 기온 데이터로 확인하고자 하였습니다.

#데이터 우선 복사.
Weather_avg_df = Weather_df.copy()

#처음부터 필요 없는(ex. 풍향, 최대 풍속 등) 칼럼 데이터 전처리 과정
Weather_avg_df.drop(['precipitation','max_wind_speed','most_wind_direction','avg_relative_humidity'],
                    axis = 'columns', inplace=True)

#23679번부터 2020-01-20 이전 날씨 데이터는 for문으로 전부 다 제거.
for i in range (0,23679):
    Weather_avg_df.drop(i, axis = 'index', inplace=True)

#데이터 확인.
Weather_avg_df.head(5)

 

어차피 데이터 프레임 복사를 먼저 했기( df.copy ) 했기 때문에 과감하게 진행했습니다. 위에서 얘기했던 사용하지 않을 칼럼 제거 작업부터 하고, 필요없는 row 들을 제거했다. 선 정리 후 확인한 데이터가 위의 모양이었습니다.

 

 

3. 그래프를 그려주기 위해 '날짜별 대한민국 평균 기온' 값 출력

 

 

필요없는 칼럼 및 로우를 정리해준 데이터를 토대로 도시별로 나눠져있는 값들을 대한민국 전체 평균기온으로 나타내고자 하였습니다. 그러려면 날짜별 기온 평균 값을 확인해주어야 했기에, 더더욱 데이터를 정확하게 편집해주었어야 했습니다.

#groupby 하고 '날짜별 평균 기온'(daily_avg_temp) 추가.
Weather_avg_df['daily_avg_temp'] = Weather_avg_df.groupby(['date'])['avg_temp'].transform('mean')

#더 이상 필요없는 칼럼 제거
Weather_avg_df.drop(['max_temp','min_temp', 'province', 'code', 'avg_temp'],
                    axis = 'columns', inplace=True)

#인덱스로 date 지정하고 날짜를 맞추기 위해 2020-01-20 데이터 제거
Weather_avg_df.set_index('date', inplace=True)
Weather_avg_df.drop('2020-01-20', axis = 'index', inplace=True)

#날짜 중복 값이 많으므로, 중복 값 다시 합치기.
Weather_avg_df = Weather_avg_df.groupby(['date']).mean()
Weather_avg_df.reset_index(inplace=True)
Weather_avg_df.head(5)

처음 데이터를 그래프 그리기 편하게 편집해주었다.

 

선 정리된 데이터를 같은 'date'끼리 판다스 groupby를 해주고, 'avg_temp'로 다 더해주고 'mean' 평균을 내주었습니다. 즉, 같은 날짜의 모든 기온을 더해주고 평균을 내주면 그 날의 대한민국 평균 기온을 계산할 수 있습니다. 물론, 지역마다 기온은 다 다르지만 일일 확진자 현황 데이터가 전국 단위로 비교하기에 이렇게 확인해보고자 했습니다. 즉, 다음 단계인 시각화를 위해 데이터를 깔끔하게 정리해주었습니다.

 

 

4. 데이터를 토대로 시각화

우선 대한민국 평균 기온 그래프를 나타내보았습니다.

#평균 기온 확인
fig, ax1 = plt.subplots()

ax1.plot(Weather_avg_df['date'], Weather_avg_df['daily_avg_temp'], 'b-')
ax1.set_xlabel('date')
ax1.set_ylabel('daily_avg_temp')

ax1.set_xticks(['2020-01-21', '2020-01-31', '2020-02-11', '2020-02-21',
                '2020-03-01', '2020-03-11', '2020-03-21', '2020-03-31',
                '2020-04-11', '2020-04-21', '2020-04-30'])
fig.autofmt_xdate(rotation=30)

plt.title('daily average temperature', fontsize = 15)
plt.rcParams["figure.figsize"] = (10, 5)
plt.grid(True)
plt.show()

대한민국 평균 기온 그래프

이렇게 plt.subplots()으로 평균 기온을 확인할 수 있었으며, 특히 'b-' 파란색 실선으로 지정했기에 더욱 진하게 보이는 것으로 확인됩니다. 그리고 이 그래프를 이제 이전 블로그 글에서 확인했던 일별 확진자 구해주는 그래프와 겹쳐서 그려보면 하단과 같이 모양이 나오게 됩니다. 각각의 그래프를 한 그래프에 표현하게되면 훨씬 비교하기 쉬워지고 어떤 흐름에서 어떻게 변화하는지를 파악하기가 비교적 용이합니다.

fig, ax1 = plt.subplots()
ax2 = ax1.twinx()

# 일별 확진자 그래프
line1 = ax1.plot(Time_daily_df['date'] , Time_daily_df['daily_confirmed'] , 
                 'r--', label = "confirmed people")
# 일별 전국 평균 날씨 그래프
line2 = ax2.plot(Weather_avg_df['date'] , Weather_avg_df['daily_avg_temp'] , 
                 'b-', label = "Temperature")

ax1.set_xlabel('date')
ax1.set_ylabel('confirmed people')
ax2.set_ylabel('Temperature')

ax1.set_ylim(0, 1000)
ax2.set_ylim(-5, 20)

ax1.set_xticks(['2020-01-21', '2020-01-31', '2020-02-11', '2020-02-21',
                '2020-03-01', '2020-03-11', '2020-03-21', '2020-03-31',
                '2020-04-11', '2020-04-21', '2020-04-30'])
fig.autofmt_xdate(rotation=30)

# 범례 표시
lines = line1 + line2
labels = [l.get_label() for l in lines]
ax1.legend(lines, labels, loc='upper right')


plt.title('Confirmed people & Temperature', fontsize = 15)
plt.rcParams["figure.figsize"] = (10, 5)
plt.grid(True)
plt.show()

일별 확진자 수와 대한민국 평균 기온 그래프.

 

이렇게 겹쳐서 그려보니깐 어떠신가요?

제가 시각화 해봤을 때는 뚜렷한 인사이트를 도출하지 못 했습니다!

따라서, 코로나 바이러스의 기온에 따른 영향은 물론 과학적인 연구를 통해선 확인할 순 있겠지만, 데이터를 통해 확인해본 바로는 코로나 확산에 대해서는 직접적인 영향력을 주지 못했고 오히려 수많은 사회적 변수들이 더 큰 확산을 가져온다고 확인했습니다.

 

 

부족하지만 오늘도 여러분의 코딩에 도움이 되었으면 좋을 것 같아서, 티끌 코딩 글 작성해봅니다.
제 글이 방문자 님께 힘이 되었으면 좋겠습니다. 항상 건강 챙기시고 오늘도 행복한 하루 되세요.
-티끌 리뷰 드림-


글 하단 '좋아요' 마우스 클릭 한번은 작성자에게 너무 큰 힘이 됩니다. 감사합니다.

반응형