본문 바로가기

코딩

[데이터분석/오늘코드] 코로나19 데이터 pandas 로 크롤링하기 1

728x90

오늘코드 - 서울시 코로나19 사이트 Pandas 단 한 줄로 크롤링 하기

영상을 실습한 코드 입니다.

https://www.youtube.com/watch?v=irHfF1ZcuY0

 

covid19_todaycode

웹에서 크롤링 해 온 데이터 csv 파일로 저장하기

In [1]:
import pandas as pd
	
In [10]:
url = "https://www.seoul.go.kr/coronaV/coronaStatus.do"
	url
	
Out[10]:
'https://www.seoul.go.kr/coronaV/coronaStatus.do'
In [11]:
pd.read_html(url)
	
Out[11]:
[ 종로구 중구 용산구 성동구 광진구 동대문구 중랑구 성북구 강북구 도봉구 노원구 은평구 서대문구
	0 29 22 54 57 22 45 44 44 28 65 50 64 41
	1 마포구 양천구 강서구 구로구 금천구 영등포구 동작구 관악구 서초구 강남구 송파구 강동구 기타
	2 54 72 108 91 39 72 70 145 64 98 99 49 95,
	종로구 중구 용산구 성동구 광진구 동대문구
	0 29 22 54 57 22 45
	1 중랑구 성북구 강북구 도봉구 노원구 은평구
	2 44 44 28 65 50 64
	3 서대문구 마포구 양천구 강서구 구로구 금천구
	4 41 54 72 108 91 39
	5 영등포구 동작구 관악구 서초구 강남구 송파구
	6 72 70 145 64 98 99
	7 강동구 기타 NaN NaN NaN NaN
	8 49 95 NaN NaN NaN NaN,
	소계 해외접촉관련 송파구교회관련 강서구요양시설관련 강남구사무실관련 강남구사무실K빌딩 강남구역삼동모임 리치웨이관련 \
	0 1621 349 18 26 29 7 13 122 
	
	부천시쿠팡관련 관악구사무실관련 이태원클럽관련 구로구콜센터관련 타 시·도확진자접촉자 기타 경로확인중 
	0 24 14 139 98 55 556 171 ,
	0
	0 < 신종 코로나바이러스 감염증 예방 국민 행동수칙 >○ 기침 등 호흡기 증상이 있을...,
	0
	0 < 신종 코로나바이러스 감염증 예방 의료기관 행동수칙 >○ 호흡기 질환자 진료시 마...,
	0
	0 이 보도자료는 관련 발생 상황에 대한 정보를 신속 투명하게 공개하기 위한 것으로, ...,
	연번 환자 확진일 거주지 여행력 접촉력 조치사항
	0 1621 14412 8.3. 관악구 - 확인 중 강남성심병원
	1 1620 14400 8.3. 성북구 미국 해외 접촉 추정 서북병원
	2 1619 14399 8.3. 중구 러시아 해외 접촉 추정 보라매병원
	3 1618 14402 8.3. 중구 러시아 해외 접촉 추정 보라매병원
	4 1617 14401 8.3. 도봉구 - 확인 중 원자력병원
	... ... ... ... ... ... ... ...
	1616 5 9 1.31. 성북구 - #5 접촉 서울의료원(퇴원)
	1617 4 7 1.30. 마포구 중국 우한시 해외 접촉 서울의료원(퇴원)
	1618 3 6 1.30. 종로구 - #3 접촉 서울대학교병원(퇴원)
	1619 2 5 1.30. 중랑구 중국 우한시 해외 접촉 서울의료원(퇴원)
	1620 1 2 1.24. 강서구 중국 우한시 해외 접촉 국립중앙의료원(퇴원)
	
	[1621 rows x 7 columns],
	연번 환자번호 \
	0 1621 <tr> <td class="tdl" colspan="5"> <p>확... #14412 
	1 1620 <tr> <td class="tdl" colspan="5"> <p>확... #14400 
	2 1619 <tr> <td class="tdl" colspan="5"> <p>확... #14399 
	3 1618 <tr> <td class="tdl" colspan="5"> <p>확... #14402 
	4 1617 <tr> <td class="tdl" colspan="5"> <p>확... #14401 
	... ... ... 
	1616 5 <tr> <td class="tdl" colspan="5"> <p>이동경로... #9 
	1617 4 <tr> <td class="tdl" colspan="5"> <p>이동경로... #7 
	1618 3 <tr> <td class="tdl" colspan="5"> <p>이동경로... #6 
	1619 2 <tr> <td class="tdl" colspan="5"> <p>이동경로... #5 
	1620 1 <tr> <td class="tdl" colspan="5"> <p>이동경로... #2 
	
	감염경로 확진일 거주지 격리시설 
	0 확인 중 8/3 관악구 강남성심병원 
	1 해외 접촉 추정(미국) 8/3 성북구 서북병원 
	2 해외 접촉 추정(러시아) 8/3 중구 보라매병원 
	3 해외 접촉 추정(러시아) 8/3 중구 보라매병원 
	4 확인 중 8/3 도봉구 원자력병원 
	... ... ... ... ... 
	1616 #5 접촉 1/31 성북구 서울의료원(퇴원) 
	1617 해외 접촉(중국 우한시) 1/30 마포구 서울의료원(퇴원) 
	1618 #3 접촉 1/30 종로구 서울대학교병원(퇴원) 
	1619 해외 접촉(중국 우한시) 1/30 중랑구 서울의료원(퇴원) 
	1620 해외 접촉(중국 우한시) 1/24 강서구 국립중앙의료원(퇴원) 
	
	[1621 rows x 6 columns]]
In [12]:
table = pd.read_html(url)
	len(table)
	
Out[12]:
8
In [21]:
#행과 열 순서 바꾸기 : .T
	table[2].T
	
Out[21]:
0
소계 1621
해외접촉관련 349
송파구교회관련 18
강서구요양시설관련 26
강남구사무실관련 29
강남구사무실K빌딩 7
강남구역삼동모임 13
리치웨이관련 122
부천시쿠팡관련 24
관악구사무실관련 14
이태원클럽관련 139
구로구콜센터관련 98
타 시·도확진자접촉자 55
기타 556
경로확인중 171
In [24]:
df = table[6]
	df.shape
	
Out[24]:
(1621, 7)
In [25]:
df.head()
	
Out[25]:
연번 환자 확진일 거주지 여행력 접촉력 조치사항
0 1621 14412 8.3. 관악구 - 확인 중 강남성심병원
1 1620 14400 8.3. 성북구 미국 해외 접촉 추정 서북병원
2 1619 14399 8.3. 중구 러시아 해외 접촉 추정 보라매병원
3 1618 14402 8.3. 중구 러시아 해외 접촉 추정 보라매병원
4 1617 14401 8.3. 도봉구 - 확인 중 원자력병원
In [30]:
# 확진일 데이터를 n번 인덱스 정보만 가져오기
	last_day = df.loc[0, "확진일"]
	
	last_day
	
Out[30]:
'8_3_'
In [31]:
# last_day의 .을 _로 대체해줘라
	last_day = last_day.replace(".","_")
	last_day
	
Out[31]:
'8_3_'
In [33]:
#파일명 만들어 주기
	file_name = f"seoul-covid19_{last_day}.csv"
	file_name
	
Out[33]:
'seoul-covid19_8_3_.csv'
In [43]:
#csv 파일로 저장하기
	df.to_csv(file_name, index = False)
	#encoding = 'cp949': 엑셀로 읽어오는 인코딩
	#index = False: df.head()에서 생긴 인덱스 삭제
	
In [44]:
# 제대로 저장되었는지 확인하기
	pd.read_csv(file_name)
	
Out[44]:
연번 환자 확진일 거주지 여행력 접촉력 조치사항
0 1621 14412 8.3. 관악구 - 확인 중 강남성심병원
1 1620 14400 8.3. 성북구 미국 해외 접촉 추정 서북병원
2 1619 14399 8.3. 중구 러시아 해외 접촉 추정 보라매병원
3 1618 14402 8.3. 중구 러시아 해외 접촉 추정 보라매병원
4 1617 14401 8.3. 도봉구 - 확인 중 원자력병원
... ... ... ... ... ... ... ...
1616 5 9 1.31. 성북구 - #5 접촉 서울의료원(퇴원)
1617 4 7 1.30. 마포구 중국 우한시 해외 접촉 서울의료원(퇴원)
1618 3 6 1.30. 종로구 - #3 접촉 서울대학교병원(퇴원)
1619 2 5 1.30. 중랑구 중국 우한시 해외 접촉 서울의료원(퇴원)
1620 1 2 1.24. 강서구 중국 우한시 해외 접촉 국립중앙의료원(퇴원)

1621 rows × 7 columns

서울시에서 공개한 코로나 19 발생동향 분석

In [49]:
# 데이터 분석하는 라이브러리
	import pandas as pd
	# 수치 계산하는 라이브러리
	import numpy as np
	
In [51]:
file_name = f"seoul-covid19_{last_day}.csv"
	file_name
	
Out[51]:
'seoul-covid19_8_3_.csv'
In [61]:
df = pd.read_csv(file_name)
	df.shape
	
Out[61]:
(1621, 7)
In [62]:
df
	
Out[62]:
연번 환자 확진일 거주지 여행력 접촉력 조치사항
0 1621 14412 8.3. 관악구 - 확인 중 강남성심병원
1 1620 14400 8.3. 성북구 미국 해외 접촉 추정 서북병원
2 1619 14399 8.3. 중구 러시아 해외 접촉 추정 보라매병원
3 1618 14402 8.3. 중구 러시아 해외 접촉 추정 보라매병원
4 1617 14401 8.3. 도봉구 - 확인 중 원자력병원
... ... ... ... ... ... ... ...
1616 5 9 1.31. 성북구 - #5 접촉 서울의료원(퇴원)
1617 4 7 1.30. 마포구 중국 우한시 해외 접촉 서울의료원(퇴원)
1618 3 6 1.30. 종로구 - #3 접촉 서울대학교병원(퇴원)
1619 2 5 1.30. 중랑구 중국 우한시 해외 접촉 서울의료원(퇴원)
1620 1 2 1.24. 강서구 중국 우한시 해외 접촉 국립중앙의료원(퇴원)

1621 rows × 7 columns

In [67]:
#연번을 기준으로 내림차순으로 정렬
	df = df.sort_values(by="연번", ascending = False)
	
In [68]:
df.head()
	
Out[68]:
연번 환자 확진일 거주지 여행력 접촉력 조치사항
0 1621 14412 8.3. 관악구 - 확인 중 강남성심병원
1 1620 14400 8.3. 성북구 미국 해외 접촉 추정 서북병원
2 1619 14399 8.3. 중구 러시아 해외 접촉 추정 보라매병원
3 1618 14402 8.3. 중구 러시아 해외 접촉 추정 보라매병원
4 1617 14401 8.3. 도봉구 - 확인 중 원자력병원
In [69]:
df.head()
	
Out[69]:
연번 환자 확진일 거주지 여행력 접촉력 조치사항
0 1621 14412 8.3. 관악구 - 확인 중 강남성심병원
1 1620 14400 8.3. 성북구 미국 해외 접촉 추정 서북병원
2 1619 14399 8.3. 중구 러시아 해외 접촉 추정 보라매병원
3 1618 14402 8.3. 중구 러시아 해외 접촉 추정 보라매병원
4 1617 14401 8.3. 도봉구 - 확인 중 원자력병원

시각화 도구 불러오기

In [92]:
# matplotlib.pyplot
	import matplotlib.pyplot as plt
	
	plt.rc("font", family = "Malgun Gothic")
	plt.rc("axes", unicode_minus = False) 
	
	pd.Series([1,3,5,7,-7,9]).plot.bar(title = "한글제목")
	
Out[92]:
<matplotlib.axes._subplots.AxesSubplot at 0xae26cf0>