folium
은 파이썬 지도 시각화 패키지이다. 지도를 불러와 데이터를 기반으로 그 위에 여러가지 시각화 기능을 제공한다.
특정 지역을 표시하고자 할 때는 Map()
함수를 사용해서 지역의 위도와 경도를 입력하면 된다. zoom_start
는 처음에 표시할 때 얼마나 확대를 할 지를 결정하는 값이다.
import folium
changwon = folium.Map(location=[35.25, 128.68], zoom_start=15)
changwon
tiles
값을 지정하면 다양한 지도 표시가 가능하다.
case 데이터에서 group은 지역 집단 감염인지를 구분하는 필드이다.
pivot_table(index=['그룹핑하려는열의이름'], aggfunc='그룹핑후에할연산')
을 이용하여 그룹핑하고 싶은 열에 있는 값을 기준으로 그룹핑하고, 지정한 연산을 그룹화 된 값을 기준으로 수행한다.
group_cases = case.pivot_table(index=['group'], aggfunc='sum').reset_index()
#result
case_id confirmed
group
False 154300465 3544
True 313101077 7851
✋
pivot_table
vsgroupby
case.pivot_table(index=['group'], aggfunc='sum')
case.groupby('group').sum()
현재 필요한 기능인 mean, sum과 같은 연산만을 하는데에는 차이점이 없어보인다. 하지만,pivot_table
은 항상 데이터프레임 형태로 반환해 주며,groupby
는 series 형태로 반환하기도 한다. 또한 어떤 형태의 테이블을 만들고자 하는지에 있어서도 차이가 있다.#pivot_talbe의 결과 b 1 2 a 1 0.528470 0.484766 2 0.187277 0.144326 3 0.866832 0.650100 #groupby의 결과 a b 1 1 0.528470 2 0.484766 2 1 0.187277 2 0.144326 3 1 0.866832 2 0.650100
replace()
함수를 통해 True라는 지역 감염이라는 의미의 Locally infected로, False를 외부 감염이라는 From outside로 값을 변경해 준다.
group_cases = group_cases.replace({True:'Locally infected', False: 'From outside'})
데이터 자체가 비어있는 경우 (null, NaN)이 아닌 의미없는 값이 들어가 있는 경우 이를 제거해주어야 한다.
현재 데이터에서도 위도와 경도가 '-'로 표시되어있는 값이 있다. 따라서 이를 빼고 데이터프레임을 다시 만들어 준다.
#집단감염 자료만 가지고 오기
local_infected = case[case['group']=='True']
#latitude가 '-'인 경우 제외하고 자료 가져오기
local_infected = local_infected[local_infected['latitude'] != '-']
#또는
local_infected = local_infected[~(local_infected['latitude']=='-')]
#longitude도 확인
local_infected = local_infected[local_infected['longitude'] != '-']
#null값도 확인
local_infected.isnull().sum()
#데이터테이블 확인
local_infected
#지도에 그래프를 표시할 모듈
from folium import plugins
한국의 위도와 경도를 통해 한국의 지도를 불러온다.
latitude, longitude = 35.9078, 127.7669 # 대한민국의 좌표
S_korea = folium.Map(location = [latitude, longitude], zoom_start = 8)
S_korea
여기 위에 local_infected 데이터프레임의 위도와 경도를 통해 지도에 시각화한다.
폴리움객체.add_child(plugins.HeatMap(zip(위도열, 경도열, 정도열), radius=18))
폴리움객체란 folium.Map()을 저장해둔 변수이다. 즉, 앞에서 저장한 한국 지도이다.
S_korea.add_child(plugins.HeatMap(zip(local_infected['latitude'],
local_infected['longitude'],
local_infected['confirmed']), radius=18))
#오류
RecursionError: maximum recursion depth exceeded
이는 위도와 경도가 object 타입으로 저장되어 있어서 발생한 오류이므로 실수로 변경해주면 된다.
local_infected['latitude'] = local_infected['latitude'].astype('float')
local_infected['longitude'] = local_infected['longitude'].astype('float')