RUBY
[CRIME] 14. 서울시 범죄 현황에 대한 지도 시각화 본문
서울시 범죄 현황 데이터 분석 프로젝트
14. 서울시 범죄 현황에 대한 지도 시각화
1. 지도 시각화에 필요한 json 파일을 구한다.
* 현재 무료로 구할 수 있는 json 파일은 Lucy Park님의 자료가 유일하다..
오래된 데이터라 한계가 있지만, 서울을 대상으로 하는 것에는 문제가 없을 것 같다..
Lucy Park님의 자료에서 서울 부분만 추려서 데이터를 만든다.
구별 범죄 현황 지도 시각화 시작하자..
2. 살인 사건 범죄율에 대한 지도 시각화
import json
crime_anal_norm = 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")
my_map.choropleth(
geo_data=geo_str,
data=crime_anal_norm["살인"],
columns=[crime_anal_norm.index, crime_anal_norm["살인"]],
fill_color="PuRd",
key_on="feature.id",
fill_opacity=0.7,
line_opacity=0.2,
legend_name="정규화된 살인 발생 건수",
)
my_map
3. 성범죄 범죄율에 대한 지도 시각화
my_map = folium.Map(location=[37.5502, 126.982], zoom_start=11, tiles="Stamen Toner")
my_map.choropleth(
geo_data=geo_str,
data=crime_anal_norm["강간"],
columns=[crime_anal_norm.index, crime_anal_norm["강간"]],
fill_color="PuRd",
key_on="feature.id",
fill_opacity=0.7,
line_opacity=0.2,
legend_name="정규화된 강간 발생 건수",
)
my_map
4. 5대 범죄에 대한 지도 시각화
my_map = folium.Map(location=[37.5502, 126.982], zoom_start=11, tiles="Stamen Toner")
my_map.choropleth(
geo_data=geo_str,
data=crime_anal_norm["범죄"],
columns=[crime_anal_norm.index, crime_anal_norm["범죄"]],
fill_color="PuRd",
key_on="feature.id",
fill_opacity=0.7,
line_opacity=0.2,
legend_name="정규화된 범죄 발생 건수",
)
my_map
5. 인구 대비 범죄 발생 건수
tmp_criminal = crime_anal_norm["범죄"] / crime_anal_norm["인구수"]
my_map = folium.Map(location=[37.5502, 126.982], zoom_start=11, tiles="Stamen Toner")
my_map.choropleth(
geo_data=geo_str,
data=tmp_criminal,
columns=[crime_anal_norm.index, tmp_criminal],
fill_color="PuRd",
key_on="feature.id",
fill_opacity=0.7,
line_opacity=0.2,
legend_name="정규화된 범죄 발생 건수",
)
my_map
6. 경찰서 별 검거현황과 구별 범죄발생 현황을 표현하자
- 경찰서 별 정보를 가지고 범죄 발생과 함께 정리한다.
crime_anal_station = pd.read_csv(
"../data/02. crime_in_Seoul_1st.csv", index_col=0, encoding="utf-8"
)
col = ["살인검거", "강도검거", "강간검거", "절도검거", "폭력검거"]
tmp = crime_anal_station[col] / crime_anal_station[col].max()
crime_anal_station["검거"] = np.mean(tmp, axis=1)
crime_anal_station.head()
7. 경찰서 위치를 지도에 표시
my_map = folium.Map(location=[37.5502, 126.982], zoom_start=11)
for idx, rows in crime_anal_station.iterrows():
folium.Marker([rows["lat"], rows["lng"]]).add_to(my_map)
my_map
8. 검거에 적절한 값을 곱해서 원의 높이로 사용
my_map = folium.Map(location=[37.5502, 126.982], zoom_start=11)
for idx, rows in crime_anal_station.iterrows():
folium.CircleMarker(
[rows["lat"], rows["lng"]],
radius=rows["검거"] * 50,
popup=rows["구분"] + " : " + "%.2f" % rows["검거"],
color="#3186cc",
fill=True,
fill_color="#3186cc",
).add_to(my_map)
my_map
9. 구별 범죄 현황과 경찰서별 검거율을 함께 표시
my_map = folium.Map(location=[37.5502, 126.982], zoom_start=11)
my_map.choropleth(
geo_data=geo_str,
data=crime_anal_norm["범죄"],
columns=[crime_anal_norm.index, crime_anal_norm["범죄"]],
fill_color="PuRd",
key_on="feature.id",
fill_opacity=0.7,
line_opacity=0.2,
)
for idx, rows in crime_anal_station.iterrows():
folium.CircleMarker(
[rows["lat"], rows["lng"]],
radius=rows["검거"] * 50,
popup=rows["구분"] + " : " + "%.2f" % rows["검거"],
color="#3186cc",
fill=True,
fill_color="#3186cc",
).add_to(my_map)
my_map
'데이터 분석 > EDA_웹크롤링_파이썬프로그래밍' 카테고리의 다른 글
[WebData] 1. BeautifulSoup for web data (0) | 2023.02.05 |
---|---|
[CRIME] 15. 서울시 범죄 현황 발생 장소 분석 (0) | 2023.02.04 |
[CRIME] 13. 지도 시각화(Folium) (0) | 2023.02.04 |
[CRIME] 12. 서울시 범죄현황 데이터 시각화(pair plot, heat map) (0) | 2023.02.03 |
[CRIME] 11. seaborn (0) | 2023.02.03 |
Comments