본문 바로가기
  • 紹睿: 자유롭고 더불어 사는 가치있는 삶
Study/파이썬으로 데이터 주무르기

[서울시 범죄율] folium을 이용한 시각화

by 징여 2018. 7. 11.
반응형

Folium으로 시각화 하기 - 지도¶

In [2]:
import folium
In [6]:
map_osm = folium.Map(location=[45.5236, -122.6750])
map_osm
Out[6]:

zoom_star을 사용하면, 확대 비율을 정의할 수 있음¶

In [5]:
stamen = folium.Map(location = [45.5236, -122.6750], zoom_start=13)
stamen
Out[5]:

tiles를 설정하면, 지도 모양을 바꿀 수 있다.¶

  • stamentoner
  • openstreetmap
  • mapquestiopenaerial
  • stamenwatercolor
  • stamenterrain
  • mapboxbright
  • cartodbdark_matter ... 엄청 많다.
In [10]:
map_2 = folium.Map(location=[45.5236, -122.6750], tiles='stamentoner', zoom_start=13)
folium.Marker([45.5244, -122.6699], popup='The Waterfront').add_to(map_2)
folium.CircleMarker([45.5215,-122.6261], radius=50,
                   popup='Laurelhuerst Park', color='#3186cc',
                   fill_color='#3186cc').add_to(map_2)
map_2
Out[10]:

US_ Unemployment 데이터를 시각화 하기¶

In [12]:
import pandas as pd
In [13]:
state_unemployment = './data/folium_US_Unemployment_Oct2012.csv'
state_data = pd.read_csv(state_unemployment)
state_data.head()
Out[13]:
State Unemployment
0 AL 7.1
1 AK 6.8
2 AZ 8.1
3 AR 7.2
4 CA 10.1

미국 실업률 데이터를 시각화 하기 위해서는 json형식의 파일이 필요하다.¶

  • id: 주별고유 ID
  • 주 이름
  • 좌표 등
In [14]:
state_geo ='./data/02. folium_us-states.json'
map = folium.Map(location=[40, -98], zoom_start=4)
map.choropleth(geo_data=state_geo, data=state_data,
              columns=['State', 'Unemployment'],
              key_on='feature.id',
              fill_color='YlGn',
              legend_name='Unemployment Rate (%)')
map
Out[14]:

json을 불러와, 서울시 구별 데이터 뿌려주기¶

In [15]:
import json
In [26]:
geo_path = './data/02. skorea_municipalities_geo_simple.json'
geo_str = json.load(open(geo_path, encoding='utf-8'))

서울시 구역별로 나누어졌다!¶

In [24]:
map = folium.Map(location=[37.5502, 126.982], zoom_start=11,
                tiles='stamentoner')
map.choropleth(geo_data=geo_str)
map
Out[24]:

전에 만들어둔, 서울시의 범죄현황, 검거율, 인구수 등 데이터를 불러와준다¶

In [28]:
crime_seoul = pd.read_csv('data/crime_in_Seoul_final.csv')
crime_seoul.head()
Out[28]:
구별 강간 강도 살인 절도 폭력 강간검거율 강도검거율 살인검거율 절도검거율 폭력검거율 인구수 CCTV 범죄 검거
0 강남구 1.000000 0.941176 0.916667 0.953472 0.661386 77.728285 85.714286 76.923077 42.857143 86.484594 570500.0 2780 0.894540 85.463066
1 강동구 0.155620 0.058824 0.166667 0.445775 0.289667 78.846154 100.000000 75.000000 33.347422 82.890855 453233.0 773 0.223310 85.550226
2 강북구 0.146974 0.529412 0.416667 0.126924 0.274769 82.352941 92.857143 100.000000 43.096234 88.637222 330192.0 748 0.298949 94.070728
3 관악구 0.628242 0.411765 0.583333 0.562094 0.428234 69.062500 100.000000 88.888889 30.561715 80.109157 525515.0 1496 0.522733 85.212224
4 광진구 0.397695 0.529412 0.166667 0.671570 0.269094 91.666667 100.000000 100.000000 42.200925 83.047619 372164.0 707 0.406888 96.375820
In [36]:
import matplotlib.pyplot as plt
import matplotlib
%matplotlib inline
import seaborn as sns
sns.set_style("whitegrid")

폰트 설정¶

In [37]:
from matplotlib import font_manager, rc

rc('font', family='AppleGothic')
plt.rcParams['axes.unicode_minus'] = False
In [38]:
plt.figure(figsize=(10,8))
sns.pairplot(crime_seoul,
            x_vars=['인구수', 'CCTV'],
            y_vars=['살인검거율', '폭력검거율'], kind='reg', size=3)
plt.show()
<Figure size 720x576 with 0 Axes>
In [43]:
plt.figure(figsize=(10, 8))
target_col=['강간', '강도', '살인', '폭력', '범죄']
sns.heatmap(crime_seoul[target_col], annot=True, fmt='f', linewidths=.5)
plt.title('범죄 비율')
plt.show()

살인이 일어난 구역들을 이제 지도로 뿌려보자!¶

In [ ]:
crime_seoul=crime_seoul.set_index('구별')
In [56]:
map = folium.Map(location=[37.5502, 126.982], zoom_start=11,
                tiles='stamentoner')
map.choropleth(geo_data=geo_str,
              data=crime_seoul['살인'],
              columns=[crime_seoul.index, crime_seoul['살인']],
              fill_color='PuRd',
              key_on='feature.id')
map
Out[56]:


반응형

댓글