Patrick's 데이터 세상

Python 데이터 분석 - 지도 시각화(EDA) 본문

Data Analysis/EDA

Python 데이터 분석 - 지도 시각화(EDA)

patrick610 2020. 6. 24. 22:00
반응형
SMALL

◎ 지도 시각화


   범죄 별로 빈도수를 지역에 나타내는 지도 시각화 방법 구현
   * 실습 data는 '파이썬으로 데이터 주무르기'의 data입니다.

   필자는 folium으로 실습하지만 google-map 라이브러리도 많이 이용.

 

   참고 파일 : seoul-crime-analysis.html

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
crime_anal_norm = pd.read_csv('data_files/crime-in-seoul-final.csv',
                              encoding='utf-8')
crime_anal_norm = crime_anal_norm.set_index(["구별"])   # 일반 컬럼을 인덱스 컬럼으로 변경
crime_anal_norm.head()

결과

#!pip install folium   # !command -> terminal command

import folium
import json
geo_path = 'data_files/skorea-municipalities-geo-simple.json'
geo_str = json.load(open(geo_path, encoding='utf-8'))   # 딕셔너리
map = folium.Map(location=[37.5502, 126.982],   # 지도의 중심 위치(위도, 경도)
				 zoom_start=11,                 # 0~18 단계
                 tiles='Stamen Toner') # Stamen Toner, Stamen Terrain, ...

# 지도에 영역 표시
folium.Choropleth(geo_data = geo_str,
               data = crime_anal_norm['살인'],
               columns = [crime_anal_norm.index, crime_anal_norm['살인']],
               fill_color = 'PuRd', #PuRd, YlGnBu
               key_on = 'feature.id').add_to(map)
map

결과

map = folium.Map(location=[37.5502, 126.982], zoom_start=11, 
                 tiles='Stamen Toner')

folium.Choropleth(geo_data = geo_str,
               data = crime_anal_norm['강간'],
               columns = [crime_anal_norm.index, crime_anal_norm['강간']],
               fill_color = 'PuRd', #PuRd, YlGnBu
               key_on = 'feature.id').add_to(map)
map

결과

 

 

crime_anal_raw = pd.read_csv('data_files/crime-anal-raw.csv', 
							encoding='utf-8')
#crime_anal_raw['lat'] = station_lat
#crime_anal_raw['lng'] = station_lng

col = ['살인 검거', '강도 검거', '강간 검거', '절도 검거', '폭력 검거']
tmp = crime_anal_raw[col] / crime_anal_raw[col].max()
    
crime_anal_raw['검거'] = np.sum(tmp, axis=1)

crime_anal_raw.head()

결과

 

 


⊙ Marker

map = folium.Map(location=[37.5502, 126.982], zoom_start=11)

for n in crime_anal_raw.index:
    folium.Marker([crime_anal_raw['lat'][n], 
                   crime_anal_raw['lng'][n]]).add_to(map)
    
map

결과


⊙ Circle Marker

map = folium.Map(location=[37.5502, 126.982], zoom_start=11)

for n in crime_anal_raw.index:
    folium.CircleMarker([crime_anal_raw['lat'][n], crime_anal_raw['lng'][n]], 
                        radius = crime_anal_raw['검거'][n]*10, 
                        color='#3186cc', fill_color='#3186cc', fill=True).add_to(map)
    
map

결과

 

map = folium.Map(location=[37.5502, 126.982], zoom_start=11)

folium.Choropleth(geo_data = geo_str,
               data = crime_anal_norm['범죄'],
               columns = [crime_anal_norm.index, crime_anal_norm['범죄']],
               fill_color = 'PuRd', #PuRd, YlGnBu
               key_on = 'feature.id').add_to(map)

for n in crime_anal_raw.index:
    folium.CircleMarker([crime_anal_raw['lat'][n], crime_anal_raw['lng'][n]], 
                        radius = crime_anal_raw['검거'][n]*10, 
                        color='#3186cc', fill_color='#3186cc', fill=True).add_to(map)
    
map

결과

반응형
LIST
Comments