Project/분석 & 시각화
[공공데이터] 서울시 코로나19 발생 현황 살펴보기
하나719
2020. 10. 15. 03:06
반응형
서울시 일자별 코로나 확진자 수 공공데이터 가져오기¶
In [131]:
필요한 라이브러리 준비해주기
import requests
import json
import pandas as pd
import seaborn as sns #시각화 라이브러리
import matplotlib.pyplot as plt #그래프 스타일 설정
%matplotlib inline
%config InlineBackend.figure_format = 'retina'
plt.rc("axes", unicode_minus=False) #마이너스 폰트 깨지는 문제 대처
sns.set( font="AppleGothic")
import os
if os.name == 'posix':
plt.rc("font", family="AppleGothic")
else:
plt.rc("font", family="Malgun Gothic")
Open API 사용하여 데이터 획득하기¶
공공데이터 데이터 셋: 서울시 코로나19 확진자 현황
발급 받은 key값 입력¶
오픈 API 사용 신청하면, 사용자마다 고유한 Key 값을 제공해준다.
In [2]:
my_key='발급받은 key값을 넣어주세요.'
endpoint 확인¶
- 오픈API 서비스되는 서버의 ip 혹은 domain 주소
- api활용 문서 확인해보면 endpoint 확인할 수 있는 코드 들어있으므로 복사해서 사용한다.
- datatype: xml 혹은 json 설정하여 받아오는데 최근에는 json 형식 많이 사용
-
serviceKey에 위에 발급받은 key값 할당해준다.
-
url 가져올때 샘플 url에 설명있음 -> 가져오고 싶은 범위 설정 가능
In [28]:
endpoint=f"http://openapi.seoul.go.kr:8088/{my_key}/json/Corona19Status/1/1000/"
KEY: OpenAPI 발급된 키
TYPE: xml , xls , json 선택가능
In [29]:
In [59]:
#api 호출
endpoint=f"http://openapi.seoul.go.kr:8088/{my_key}/json/Corona19Status/1/1000/"
resp=requests.get(endpoint)
#print(resp.status_code)
#print(resp.text)
data=resp.json()
df1=pd.DataFrame(data['Corona19Status']['row'])
df1
Out[59]:
In [60]:
#api 호출
for i in range(1,6):
endpoint=f"http://openapi.seoul.go.kr:8088/{my_key}/json/Corona19Status/{i}001/{i+1}000/"
resp=requests.get(endpoint)
#print(resp.status_code)
#print(resp.text)
data=resp.json()
df2=pd.DataFrame(data['Corona19Status']['row'])
df1=pd.concat([df1,df2])
In [61]:
df1
Out[61]:
날짜컬럼 전처리¶
일자별 확진자 수를 보기 위해서 날짜컬럼을 날짜형태로 만들어준다.
기존 날짜 컬럼: 'CORONA19_DATE' , 형태: MM.DD.
변경 날짜 컬럼: 'Date' , 형태: YYYY-MM-DD
In [75]:
df1['Date']=df1['CORONA19_DATE'].apply(lambda x: '2020-'+x.split('.')[0]+'-'+x.split('.')[1])
In [79]:
# 아직 string type
df1[['Date','CORONA19_DATE']]
Out[79]:
In [80]:
# datetype으로 변경
df1['Date']=pd.to_datetime(df1['Date'])
In [94]:
df1.dtypes
Out[94]:
날짜 별 확진자 수 집계¶
In [95]:
df1.groupby('Date')['CORONA19_ID'].count()
Out[95]:
In [96]:
df1.groupby('Date')['CORONA19_ID'].count().to_csv("result/covid19.csv")
일자별 확진자¶
[일자별 이슈]
- 2020.01.20 국내 첫 코로나 확진자 발생
- 2020.03.10 구로구 콜센터 집단 감염
- 2020.03.22 사회적 거리두기 시행
- 2020.05.05 이태원 클럽 집단 감염
- 2020.08.15 815 광화문 집회
- 2020.08.16 사회적 거리두기 2단계 격상
- 2020.08.30 사회적 거리두기 2.5단계 격상
처음 집단 감염이 시작되어 공포감을 주었던 것은 구로구 콜센터 집단 감염이고, 이후 사회적 거리두기 시행해서 확진자 감소했으나, 4월 말 ~ 5월 초 이태원 클럽 집단감염으로 다시 확산 시작됨 (초록색 바 올라가는 부분..화난다..) 확 감소하진 않으나 점차 줄어들고 있었는데, 815 집회이후 사랑제일교회 관련 확진자가 폭발적으로 증가하면서 사회적 거리두기 2단계 격상 최근에는 일자별로 약 20명씩 확진자 발생하고 있음
In [103]:
plt.figure(figsize=(14,6))
sns.countplot(data=df1,x='Date')
Out[103]:
월별 확진자¶
이태원 클럽 집단감염 발생했던 5월보다도 6월이 누적 확진자 수가 많다.
이 때 계속된 거리두기로 느슨해지면서 카페도 가고, 놀러다니고 해서 꾸준히 적지않은 수의 확진자가 발생한 것으로 보인다.
In [104]:
plt.figure(figsize=(14,6))
sns.countplot(data=df1,x='month')
Out[104]:
구 별 누적 확진자 수¶
top3 관악구, 송파구, 성북구에서 사랑제일교회 관련 확진자가 많았을것으로 추측됨
In [108]:
plt.figure(figsize=(18,6))
sns.countplot(data=df1,x='CORONA19_AREA', order = df1['CORONA19_AREA'].value_counts().index)
Out[108]:
감염 경로 top 20¶
In [126]:
top20= df1['CORONA19_CONTACT_HISTORY'].value_counts(ascending=False).head(20)
top20.plot.bar(figsize=(15,5))
Out[126]:
In [ ]:
In [ ]:
반응형