crime_anal_norms = pd.read_csv(
"../data/02. crime_in_Seoul_final.csv", index_col=0, encoding='utf-8')
geo_path = "../data/02. skorea_municipalities_geo_simple.json"
geo_str = json.load(open(geo_path, encoding='utf-8'))
my_map = folium.Map(
location=[37.5502, 126.982],
zoom_start=11,
tiles="Stamen Toner")
folium.Choropleth(
geo_data=geo_str, #우리나라 경계선 좌표값이 담긴 데이터
data=crime_anal_norms['살인'],
columns=[crime_anal_norms.index, crime_anal_norms['살인']],
key_on='feature.id',
fill_color='PuRd',
fill_opacity=0.7,
line_opacity=0.2,
legend_name='정규화된 살인 발생 건수'
).add_to(my_map)
my_map
my_map = folium.Map(
location=[37.5502, 126.982],
zoom_start=11,
tiles="Stamen Toner")
# 경계 그리기
folium.Choropleth(
geo_data=geo_str, #우리나라 경계선 좌표값이 담긴 데이터
data=crime_anal_norms['강간'],
columns=[crime_anal_norms.index, crime_anal_norms['강간']],
key_on='feature.id',
fill_color='PuRd',
fill_opacity=0.7,
line_opacity=0.2,
legend_name='정규화된 성범죄 발생 건수'
).add_to(my_map)
my_map
my_map = folium.Map(
location=[37.5502, 126.982],
zoom_start=11,
tiles="Stamen Toner")
# 경계 그리기
folium.Choropleth(
geo_data=geo_str, #우리나라 경계선 좌표값이 담긴 데이터
data=crime_anal_norms['범죄'],
columns=[crime_anal_norms.index, crime_anal_norms['범죄']],
key_on='feature.id',
fill_color='PuRd',
fill_opacity=0.7,
line_opacity=0.2,
legend_name='정규화된 5대 범죄 발생 건수'
).add_to(my_map)
my_map
tmp_criminal = crime_anal_norms['범죄']/crime_anal_norms['인구수']
my_map = folium.Map(
location=[37.5502, 126.982],
zoom_start=11,
tiles="Stamen Toner")
# 경계 그리기
folium.Choropleth(
geo_data=geo_str, #우리나라 경계선 좌표값이 담긴 데이터
data=tmp_criminal,
columns=[crime_anal_norms.index, tmp_criminal],
key_on='feature.id',
fill_color='PuRd',
fill_opacity=0.7,
line_opacity=0.2,
legend_name='인구 대비 범죄 발생 건수'
).add_to(my_map)
my_map
crime_anal_station = pd.read_csv('../data/02. crime_in_Seoul_raw.csv', encoding='utf-8')
crime_anal_station.tail()
col = ["살인검거",'강도검거', '강간검거', '절도검거', '폭력검거']
tmp = crime_anal_station[col] / crime_anal_station[col].max() #정규화
crime_anal_station['검거'] = np.mean(tmp, axis=1)
crime_anal_station.tail()
my_map = folium.Map(
location=[37.5502, 126.982],
zoom_start=11)
for idx, rows in crime_anal_station.iterrows():
folium.Marker(
location=[rows.lat, rows.lng] # rows["lat"] = rows.lat
).add_to(my_map)
my_map
folium.Choropleth(
geo_data=geo_str,
data=crime_anal_norms.범죄,
columns=[crime_anal_norms.index, crime_anal_norms.범죄],
key_on='feature.id',
fill_color="PuRd",
fill_opacity=0.7,
line_opacity=0.2
).add_to(my_map)
for idx, rows in crime_anal_station.iterrows():
folium.CircleMarker(
location=[rows.lat, rows.lng], # rows["lat"] = rows.lat
radius=rows.검거*50,
popup=rows.구분 + ' :' + '%.2f' % rows.검거,
color='#3186cc',
fill=True,
fill_color='#3186cc'
).add_to(my_map)
my_map
crime_loc_raw = pd.read_csv(
'../data/02. crime_in_Seoul_location.csv', thousands=',', encoding='euc-kr')
crime_loc_raw.tail()
raw 데이터 확인
장소를 index로 피봇테이블 생성
crime_loc = crime_loc_raw.pivot_table(
crime_loc_raw, index='장소', columns="범죄명", aggfunc=[np.sum])
crime_loc
crime_loc.columns = crime_loc.columns.droplevel([0,1])
crime_loc
col = ['살인', '강도', '강간', '절도', '폭력']
crime_loc_norm=crime_loc/crime_loc.max() # 정규화
crime_loc_norm.head()
crime_loc_norm['종합'] = np.mean(crime_loc_norm, axis=1)
crime_loc_norm.head()
crime_loc_norm_sort = crime_loc_norm.sort_values(by='종합', ascending=False)
def drawGraph() :
plt.figure(figsize=(10,10))
sns.heatmap(
crime_loc_norm_sort,
annot=True,
fmt='f',
linewidths=0.5,
cmap='RdPu')
plt.title('범죄발생장소')
plt.show()
drawGraph()