[3주차_데이터분석] 개발일지 (코로나 데이터 분석-지도시각화, 히트맵그리기)

Coastby·2022년 7월 11일
0

✍️ 지도 시각화

folium은 파이썬 지도 시각화 패키지이다. 지도를 불러와 데이터를 기반으로 그 위에 여러가지 시각화 기능을 제공한다.
특정 지역을 표시하고자 할 때는 Map()함수를 사용해서 지역의 위도와 경도를 입력하면 된다. zoom_start는 처음에 표시할 때 얼마나 확대를 할 지를 결정하는 값이다.

import folium

changwon = folium.Map(location=[35.25, 128.68], zoom_start=15)
changwon

tiles값을 지정하면 다양한 지도 표시가 가능하다.


✍️지도와 히트맵

case 데이터에서 group은 지역 집단 감염인지를 구분하는 필드이다.

👉true, false 각각 그룹에 대한 확진자 수가 궁금하다면?

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 vs groupby
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')

profile
훈이야 화이팅

0개의 댓글