프로젝트 2 - 서울시 범죄현황 데이터 (5)

Jungmin·2022년 10월 19일
1

데이터 분석

목록 보기
9/24

10. 서울시 범죄 현황에 대한 지도 시각화

import json
import folium
import pandas as pd
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"))

5대 범죄 발생 건수 지도 시각화

my_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["범죄"]],
    key_on="feature.id",
    fill_color="PuRd",
    fillopacity=0.7,
    line_opacity=0.2,
    legend_name="정규화된 5대 범죄 발생 건수"
).add_to(my_map)

my_map

인구 대비 범죄 발생 건수


tmp_criminal = crime_anal_norm["범죄"]/ crime_anal_norm["인구수"]
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_norm.index, tmp_criminal],
    key_on="feature.id",
    fill_color="PuRd",
    fillopacity=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(2)

col = ["살인검거", "강도검거", "강간검거", "절도검거", "폭력검거"]
tmp= crime_anal_station[col] / crime_anal_station[col].max()  #정규화
crime_anal_station["검거"] = np.mean(tmp, axis=1)
crime_anal_station.tail(2)

경찰서 위치 마커 표시

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"]]
        ).add_to(my_map)
my_map

검거에 값을 곱한 뒤 원의 넚이 적용


my_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["범죄"]],
    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"]],
            radius=rows["검거"]* 50,
            popup=rows["구분"]+ ":" + "%.2f" % rows["검거"],
            color="#3186cc",
            fill=True,
            fill_color="#3186cc"
        ).add_to(my_map)
my_map

11. 서울시 범죄현황 발생 장소 분석

# 추가 검증
crime_loc_raw = pd.read_csv(
    "../data/02. crime_in_Seoul_location.csv", thousands=",", encoding="euc-kr"
)
crime_loc_raw.tail(2)

crime_loc_raw.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 65 entries, 0 to 64
Data columns (total 3 columns):
 #   Column  Non-Null Count  Dtype 
---  ------  --------------  ----- 
 0   범죄명     65 non-null     object
 1   장소      65 non-null     object
 2   발생건수    65 non-null     int64 
dtypes: int64(1), object(2)
memory usage: 1.6+ KB
crime_loc_raw.범죄명.unique()
array(['살인', '강도', '강간.추행', '절도', '폭력'], dtype=object)
crime_loc_raw["장소"].unique()
array(['아파트, 연립 다세대', '단독주택', '노상', '상점', '숙박업소, 목욕탕', '유흥 접객업소', '사무실',
       '역, 대합실', '교통수단', '유원지 ', '학교', '금융기관', '기타'], dtype=object)
crime_loc= crime_loc_raw.pivot_table(
    crime_loc_raw, index="장소", columns="범죄명", aggfunc=[np.sum]
)
crime_loc.columns = crime_loc.columns.droplevel([0,1])  #0,1행 삭제 정리
crime_loc.tail(2)

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.tail(2)

시각화 작업


import matplotlib.pyplot as plt
from matplotlib import rc

rc("font", family="Malgun Gothic")
%matplotlib inline
crime_loc_norm_sort = crime_loc_norm.sort_values("종합", ascending=False)

def drawGraph():
    plt.figure(figsize=(10, 10))
    sns.heatmap(
        crime_loc_norm_sort,
        annot=True,
        fmt="f",
        linewidth=0.5,
        cmap="RdPu")
    plt.title("범죄 발생 장소")
    plt.show()
drawGraph()

profile
데이터분석 스터디노트🧐✍️

0개의 댓글