2 분 소요

데이터셋 준비

공공데이터포털에서 데이터셋 다운

강원도_코로나19 확진자 현황

import pandas as pd
data = pd.read_csv('/content/drive/MyDrive/강원도_코로나19 확진자 현황_20210731.csv', encoding="CP949")
data
시군명 확진시기 확진자수
0 춘천 2020-02-22 2
1 원주 2020-02-22 0
2 강릉 2020-02-22 0
3 동해 2020-02-22 0
4 태백 2020-02-22 0
... ... ... ...
9463 화천 2021-07-31 0
9464 양구 2021-07-31 0
9465 인제 2021-07-31 0
9466 고성 2021-07-31 1
9467 양양 2021-07-31 3

9468 rows × 3 columns

데이터 분석 및 시각화

# 한글 폰트 적용
import matplotlib
%matplotlib inline

import matplotlib.pyplot as plt 
import matplotlib.font_manager as fm  

!apt-get update -qq
!apt-get install fonts-nanum* -qq

font_path = '/usr/share/fonts/truetype/nanum/NanumBarunGothic.ttf'
font_name = fm.FontProperties(fname=font_path, size=10).get_name()
print(font_name)
plt.rc('font', family=font_name)

fm._rebuild()
matplotlib.rcParams['axes.unicode_minus'] = False
NanumBarunGothic

시군별 코로나 확진자수 시각화

sample = data[data['시군명'] == '춘천']

plt.figure(figsize=(10,8))
plt.title('춘천')
plt.plot(sample['확진자수'])
plt.show()

cols = data['시군명'].unique()
cols
array(['춘천', '원주', '강릉', '동해', '태백', '속초', '삼척', '홍천', '횡성', '영월', '평창',
       '정선', '철원', '화천', '양구', '인제', '고성', '양양'], dtype=object)
count = data['시군명'].nunique()

plt.figure(figsize=(20,16))

for i in range(count):
  mask = data['시군명'] == cols[i]
  sample = data[mask]
  plt.subplot(4, 5, i+1)
  plt.title(cols[i])
  plt.plot(sample['확진자수'])
plt.show()

plt.figure(figsize=(10,8))
plt.title('total')
plt.plot(data['확진자수'])
plt.show()

시군별로 봤을 때는 시간이 지날수록 점점 확진자 수는 많아지고 춘천과 원주가 눈에 띕니다. 그리고 강원도 전체적으로 봐도 시간이 지날수록 더 많아집니다.

data['month'] = data['확진시기'].map(lambda x: x.split('-')[0] + x.split('-')[1])
data
시군명 확진시기 확진자수 month
0 춘천 2020-02-22 2 202002
1 원주 2020-02-22 0 202002
2 강릉 2020-02-22 0 202002
3 동해 2020-02-22 0 202002
4 태백 2020-02-22 0 202002
... ... ... ... ...
9463 화천 2021-07-31 0 202107
9464 양구 2021-07-31 0 202107
9465 인제 2021-07-31 0 202107
9466 고성 2021-07-31 1 202107
9467 양양 2021-07-31 3 202107

9468 rows × 4 columns

월별 확진자수 추이

data.groupby('month').mean()
확진자수
month
202002 0.055556
202003 0.053763
202004 0.027778
202005 0.007168
202006 0.014815
202007 0.016129
202008 0.213262
202009 0.057407
202010 0.103943
202011 0.701852
202012 1.032258
202101 0.835125
202102 0.329365
202103 0.862007
202104 0.625926
202105 0.913978
202106 0.687037
202107 1.734767
plt.figure(figsize=(10,8))
plt.plot(data.groupby('month').mean())
plt.show()

지도 위 시각화

시군별 확진자수 평균에 따라 원 크기로 각 위치에 지도로 표시합니다.

라이브러리: follium 이용

folium을 이용하려면 위도와 경도를 알아야 합니다.

강원도 춘천 (+16 km), 위도 37.757687 경도 128.873749

강원도 강릉 (+16 km), 위도 38.078366 경도 128.228302

강원도 인제 (+16 km), 위도 38.214446 경도 128.571625

강원도 속초 (+16 km), 위도 37.348326 경도 127.928925

강원도 원주 (+16 km), 위도 37.53151 경도 129.098969

# dat = data[data['시군명'] == '춘천' | data['시군명'] == '강릉']
data = data[data['시군명'].isin(['춘천', '강릉', '인제', '속초', '원주'])]
data
시군명 확진시기 확진자수 month
0 춘천 2020-02-22 2 202002
1 원주 2020-02-22 0 202002
2 강릉 2020-02-22 0 202002
5 속초 2020-02-22 2 202002
15 인제 2020-02-22 0 202002
... ... ... ... ...
9450 춘천 2021-07-31 8 202107
9451 원주 2021-07-31 8 202107
9452 강릉 2021-07-31 16 202107
9455 속초 2021-07-31 1 202107
9465 인제 2021-07-31 0 202107

2630 rows × 4 columns

fea1 = {'춘천': 37.757687, '강릉': 38.078366, '인제': 38.214446, '속초': 37.348326, '원주': 37.53151}
fea2 = {'춘천': 128.873749, '강릉': 128.228302, '인제': 128.571625, '속초': 127.928925, '원주': 129.098969}
counts = data.groupby('시군명').mean()['확진자수']
counts
시군명
강릉    1.545627
속초    0.671103
원주    1.866920
인제    0.123574
춘천    1.134981
Name: 확진자수, dtype: float64
import folium

map = folium.Map(location = [37.8,128.5], zoom_start=10) #지도 초기 위치

for i in counts.index:
  lat = fea1[i]    #위도
  long = fea2[i]   #경도

  folium.CircleMarker([lat, long], radius=counts[i] * 50, color='red', fill=True).add_to(map)

map
<iframe src="about:blank" style="position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;" data-html=%3C%21DOCTYPE%20html%3E%0A%3Chead%3E%20%20%20%20%0A%20%20%20%20%3Cmeta%20http-equiv%3D%22content-type%22%20content%3D%22text/html%3B%20charset%3DUTF-8%22%20/%3E%0A%20%20%20%20%3Cscript%3EL_PREFER_CANVAS%3Dfalse%3B%20L_NO_TOUCH%3Dfalse%3B%20L_DISABLE_3D%3Dfalse%3B%3C/script%3E%0A%20%20%20%20%3Cscript%20src%3D%22https%3A//cdn.jsdelivr.net/npm/leaflet%401.4.0/dist/leaflet.js%22%3E%3C/script%3E%0A%20%20%20%20%3Cscript%20src%3D%22https%3A//code.jquery.com/jquery-1.12.4.min.js%22%3E%3C/script%3E%0A%20%20%20%20%3Cscript%20src%3D%22https%3A//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js%22%3E%3C/script%3E%0A%20%20%20%20%3Cscript%20src%3D%22https%3A//cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js%22%3E%3C/script%3E%0A%20%20%20%20%3Clink%20rel%3D%22stylesheet%22%20href%3D%22https%3A//cdn.jsdelivr.net/npm/leaflet%401.4.0/dist/leaflet.css%22/%3E%0A%20%20%20%20%3Clink%20rel%3D%22stylesheet%22%20href%3D%22https%3A//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css%22/%3E%0A%20%20%20%20%3Clink%20rel%3D%22stylesheet%22%20href%3D%22https%3A//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css%22/%3E%0A%20%20%20%20%3Clink%20rel%3D%22stylesheet%22%20href%3D%22https%3A//maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css%22/%3E%0A%20%20%20%20%3Clink%20rel%3D%22stylesheet%22%20href%3D%22https%3A//cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css%22/%3E%0A%20%20%20%20%3Clink%20rel%3D%22stylesheet%22%20href%3D%22https%3A//rawcdn.githack.com/python-visualization/folium/master/folium/templates/leaflet.awesome.rotate.css%22/%3E%0A%20%20%20%20%3Cstyle%3Ehtml%2C%20body%20%7Bwidth%3A%20100%25%3Bheight%3A%20100%25%3Bmargin%3A%200%3Bpadding%3A%200%3B%7D%3C/style%3E%0A%20%20%20%20%3Cstyle%3E%23map%20%7Bposition%3Aabsolute%3Btop%3A0%3Bbottom%3A0%3Bright%3A0%3Bleft%3A0%3B%7D%3C/style%3E%0A%20%20%20%20%0A%20%20%20%20%3Cmeta%20name%3D%22viewport%22%20content%3D%22width%3Ddevice-width%2C%0A%20%20%20%20%20%20%20%20initial-scale%3D1.0%2C%20maximum-scale%3D1.0%2C%20user-scalable%3Dno%22%20/%3E%0A%20%20%20%20%3Cstyle%3E%23map_6c958fba40804be89170cd4abb85df3a%20%7B%0A%20%20%20%20%20%20%20%20position%3A%20relative%3B%0A%20%20%20%20%20%20%20%20width%3A%20100.0%25%3B%0A%20%20%20%20%20%20%20%20height%3A%20100.0%25%3B%0A%20%20%20%20%20%20%20%20left%3A%200.0%25%3B%0A%20%20%20%20%20%20%20%20top%3A%200.0%25%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%3C/style%3E%0A%3C/head%3E%0A%3Cbody%3E%20%20%20%20%0A%20%20%20%20%0A%20%20%20%20%3Cdiv%20class%3D%22folium-map%22%20id%3D%22map_6c958fba40804be89170cd4abb85df3a%22%20%3E%3C/div%3E%0A%3C/body%3E%0A%3Cscript%3E%20%20%20%20%0A%20%20%20%20%0A%20%20%20%20%0A%20%20%20%20%20%20%20%20var%20bounds%20%3D%20null%3B%0A%20%20%20%20%0A%0A%20%20%20%20var%20map_6c958fba40804be89170cd4abb85df3a%20%3D%20L.map%28%0A%20%20%20%20%20%20%20%20%27map_6c958fba40804be89170cd4abb85df3a%27%2C%20%7B%0A%20%20%20%20%20%20%20%20center%3A%20%5B37.8%2C%20128.5%5D%2C%0A%20%20%20%20%20%20%20%20zoom%3A%2010%2C%0A%20%20%20%20%20%20%20%20maxBounds%3A%20bounds%2C%0A%20%20%20%20%20%20%20%20layers%3A%20%5B%5D%2C%0A%20%20%20%20%20%20%20%20worldCopyJump%3A%20false%2C%0A%20%20%20%20%20%20%20%20crs%3A%20L.CRS.EPSG3857%2C%0A%20%20%20%20%20%20%20%20zoomControl%3A%20true%2C%0A%20%20%20%20%20%20%20%20%7D%29%3B%0A%0A%0A%20%20%20%20%0A%20%20%20%20var%20tile_layer_79e2c2550fed4ee48a7bf028e2765cae%20%3D%20L.tileLayer%28%0A%20%20%20%20%20%20%20%20%27https%3A//%7Bs%7D.tile.openstreetmap.org/%7Bz%7D/%7Bx%7D/%7By%7D.png%27%2C%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%22attribution%22%3A%20null%2C%0A%20%20%20%20%20%20%20%20%22detectRetina%22%3A%20false%2C%0A%20%20%20%20%20%20%20%20%22maxNativeZoom%22%3A%2018%2C%0A%20%20%20%20%20%20%20%20%22maxZoom%22%3A%2018%2C%0A%20%20%20%20%20%20%20%20%22minZoom%22%3A%200%2C%0A%20%20%20%20%20%20%20%20%22noWrap%22%3A%20false%2C%0A%20%20%20%20%20%20%20%20%22opacity%22%3A%201%2C%0A%20%20%20%20%20%20%20%20%22subdomains%22%3A%20%22abc%22%2C%0A%20%20%20%20%20%20%20%20%22tms%22%3A%20false%0A%7D%29.addTo%28map_6c958fba40804be89170cd4abb85df3a%29%3B%0A%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20circle_marker_51ccb625fc014a879eaaae54eb6b157e%20%3D%20L.circleMarker%28%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B38.078366%2C%20128.228302%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%22bubblingMouseEvents%22%3A%20true%2C%0A%20%20%22color%22%3A%20%22red%22%2C%0A%20%20%22dashArray%22%3A%20null%2C%0A%20%20%22dashOffset%22%3A%20null%2C%0A%20%20%22fill%22%3A%20true%2C%0A%20%20%22fillColor%22%3A%20%22red%22%2C%0A%20%20%22fillOpacity%22%3A%200.2%2C%0A%20%20%22fillRule%22%3A%20%22evenodd%22%2C%0A%20%20%22lineCap%22%3A%20%22round%22%2C%0A%20%20%22lineJoin%22%3A%20%22round%22%2C%0A%20%20%22opacity%22%3A%201.0%2C%0A%20%20%22radius%22%3A%2077.28136882129277%2C%0A%20%20%22stroke%22%3A%20true%2C%0A%20%20%22weight%22%3A%203%0A%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.addTo%28map_6c958fba40804be89170cd4abb85df3a%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20circle_marker_1eff62cd2b8e4d36bc66ffa80d412a44%20%3D%20L.circleMarker%28%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B37.348326%2C%20127.928925%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%22bubblingMouseEvents%22%3A%20true%2C%0A%20%20%22color%22%3A%20%22red%22%2C%0A%20%20%22dashArray%22%3A%20null%2C%0A%20%20%22dashOffset%22%3A%20null%2C%0A%20%20%22fill%22%3A%20true%2C%0A%20%20%22fillColor%22%3A%20%22red%22%2C%0A%20%20%22fillOpacity%22%3A%200.2%2C%0A%20%20%22fillRule%22%3A%20%22evenodd%22%2C%0A%20%20%22lineCap%22%3A%20%22round%22%2C%0A%20%20%22lineJoin%22%3A%20%22round%22%2C%0A%20%20%22opacity%22%3A%201.0%2C%0A%20%20%22radius%22%3A%2033.55513307984791%2C%0A%20%20%22stroke%22%3A%20true%2C%0A%20%20%22weight%22%3A%203%0A%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.addTo%28map_6c958fba40804be89170cd4abb85df3a%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20circle_marker_81ad60aad04748d69ae6b11a231182a5%20%3D%20L.circleMarker%28%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B37.53151%2C%20129.098969%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%22bubblingMouseEvents%22%3A%20true%2C%0A%20%20%22color%22%3A%20%22red%22%2C%0A%20%20%22dashArray%22%3A%20null%2C%0A%20%20%22dashOffset%22%3A%20null%2C%0A%20%20%22fill%22%3A%20true%2C%0A%20%20%22fillColor%22%3A%20%22red%22%2C%0A%20%20%22fillOpacity%22%3A%200.2%2C%0A%20%20%22fillRule%22%3A%20%22evenodd%22%2C%0A%20%20%22lineCap%22%3A%20%22round%22%2C%0A%20%20%22lineJoin%22%3A%20%22round%22%2C%0A%20%20%22opacity%22%3A%201.0%2C%0A%20%20%22radius%22%3A%2093.34600760456274%2C%0A%20%20%22stroke%22%3A%20true%2C%0A%20%20%22weight%22%3A%203%0A%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.addTo%28map_6c958fba40804be89170cd4abb85df3a%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20circle_marker_3dc9a4590ac64be28d013f8fe8bd80d3%20%3D%20L.circleMarker%28%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B38.214446%2C%20128.571625%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%22bubblingMouseEvents%22%3A%20true%2C%0A%20%20%22color%22%3A%20%22red%22%2C%0A%20%20%22dashArray%22%3A%20null%2C%0A%20%20%22dashOffset%22%3A%20null%2C%0A%20%20%22fill%22%3A%20true%2C%0A%20%20%22fillColor%22%3A%20%22red%22%2C%0A%20%20%22fillOpacity%22%3A%200.2%2C%0A%20%20%22fillRule%22%3A%20%22evenodd%22%2C%0A%20%20%22lineCap%22%3A%20%22round%22%2C%0A%20%20%22lineJoin%22%3A%20%22round%22%2C%0A%20%20%22opacity%22%3A%201.0%2C%0A%20%20%22radius%22%3A%206.178707224334601%2C%0A%20%20%22stroke%22%3A%20true%2C%0A%20%20%22weight%22%3A%203%0A%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.addTo%28map_6c958fba40804be89170cd4abb85df3a%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20circle_marker_eed69f34920d4d4589a7d5c81534d5ed%20%3D%20L.circleMarker%28%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B37.757687%2C%20128.873749%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%22bubblingMouseEvents%22%3A%20true%2C%0A%20%20%22color%22%3A%20%22red%22%2C%0A%20%20%22dashArray%22%3A%20null%2C%0A%20%20%22dashOffset%22%3A%20null%2C%0A%20%20%22fill%22%3A%20true%2C%0A%20%20%22fillColor%22%3A%20%22red%22%2C%0A%20%20%22fillOpacity%22%3A%200.2%2C%0A%20%20%22fillRule%22%3A%20%22evenodd%22%2C%0A%20%20%22lineCap%22%3A%20%22round%22%2C%0A%20%20%22lineJoin%22%3A%20%22round%22%2C%0A%20%20%22opacity%22%3A%201.0%2C%0A%20%20%22radius%22%3A%2056.749049429657795%2C%0A%20%20%22stroke%22%3A%20true%2C%0A%20%20%22weight%22%3A%203%0A%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.addTo%28map_6c958fba40804be89170cd4abb85df3a%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%0A%3C/script%3E onload="this.contentDocument.open();this.contentDocument.write( decodeURIComponent(this.getAttribute('data-html')));this.contentDocument.close();" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe>

지도를 보면 인제와 동해는 확진자수가 많고 속초는 적은 것을 알 수 있습니다.

카테고리:

업데이트:

댓글남기기