728x90
반응형
시작에 앞서
해당 내용은 <파이썬으로 데이터 주무르기> -민형기 저, BJPUBLIC 출판사 의 내용을 토대로 작성되었습니다.
보다 자세한 내용은 해당 교재를 확인하여 주시기 바랍니다.
지난 번 분석 보기
시각화 도구 Seaborn을 통해 범죄 데이터 시각화하기
sns.pairplot(crime_anal_norm, vars=["강도", "살인", "폭력"], kind='reg', size=3)
plt.show()
인구수와 CCTV 개수, 살인과 강도에 대한 상관관계 조사하기
sns.pairplot(crime_anal_norm, x_vars=["인구수", "CCTV"],
y_vars=["살인", "강도"], kind='reg', size=3)
plt.show()
인구수와 CCTV 개수, 살인검거율과 폭력검거율에 대한 상관관계 조사하기
sns.pairplot(crime_anal_norm,
x_vars=["인구수", "CCTV"],
y_vars=["살인검거율", "폭력검거율"], kind='reg', size=3)
plt.show()
검거율의 합계인 검거 항목 최고값을 100으로 한정하고 정렬한 다음
tmp_max = crime_anal_norm['검거'].max()
crime_anal_norm['검거'] = crime_anal_norm['검거'] / tmp_max * 100
crime_anal_norm_sort = crime_anal_norm.sort_values(by='검거', ascending=False)
crime_anal_norm_sort.head()
heatmap 으로 각 범죄 검거율 데이터 시각화 하기
target_col = ['강간검거율', '강도검거율', '살인검거율', '절도검거율', '폭력검거율']
crime_anal_norm_sort = crime_anal_norm.sort_values(by='검거', ascending=False)
plt.figure(figsize=(10,10))
sns.heatmap(crime_anal_norm_sort[target_col], annot=True, fmt='f', linewidths=.5)
plt.title('범죄 검거 비율 (정규화된 검거의 합으로 정렬)')
plt.show()
발생 건수의 합 heatmap 으로 시각화하기
target_col = ['강간', '강도', '살인', '절도', '폭력', '범죄']
crime_anal_norm['범죄'] = crime_anal_norm['범죄'] / 5
crime_anal_norm_sort = crime_anal_norm.sort_values(by='범죄', ascending=False)
plt.figure(figsize=(10,10))
sns.heatmap(crime_anal_norm_sort[target_col], annot=True, fmt='f', linewidths=.5)
plt.title('범죄비율 (정규화된 발생 건수로 정렬)')
plt.show()
서울시 범죄율 지도 시각화 하기
먼저 하단 링크로 접속하여 서울시 지도 json 파일 다운로드
지도 import 하기 (json 파일 로딩)
import json
geo_path = '../data/02. skorea_municipalities_geo_simple.json'
geo_str = json.load(open(geo_path, encoding='utf-8'))
또, folium 라이브러리도 설치해야 한다
pip install folium
※ 책에 나온대로 코드를 짜니 ''Map' object has no attribute 'choropleth'' 오류가 계속 떠서 결국 챗gpt에게 도움을 받아 해결했다.
먼저 import folium 를 하고
folium.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',
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',
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',
key_on='feature.id'
).add_to(map)
map
인구 대비 범죄 발생 비율도 파악해보자
tmp_criminal = crime_anal_norm['살인'] / crime_anal_norm['인구수'] * 1000000
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],
fill_color='PuRd',
key_on='feature.id'
).add_to(map)
map
서울시 경찰서별 검거율과 구별 범죄 발생율 시각화하기
검거만 따로 모으고, 각 경찰서의 위도와 경도 정보 이용
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()
경찰서의 위치 확인 하기
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
버블맵으로 경찰서의 검거율 시각화 하기
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').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',
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').add_to(map)
map
실습하면서 오류가 몇 번 떴었는데, 구글링을 해봐도 안 나오면 오류 나온 내용 그대로 챗 gpt에 복붙 하고 해결법을 알려달라고 하면 알아서 코드도 짜준다... (찾으면 방법은 다 있다)
전체 코드
728x90
반응형
'[파이썬 Projects] > <파이썬 데이터 분석>' 카테고리의 다른 글
[파이썬] 시카고 맛집 분석-2 (1) | 2024.04.17 |
---|---|
[파이썬] 시카고 맛집 분석-1 (1) | 2024.04.16 |
[파이썬] 서울시 범죄 현황 분석 - 1 (0) | 2024.04.14 |
[파이썬] 서울시 구별 CCTV 현황 분석-4 (0) | 2024.04.14 |
[파이썬] 서울시 구별 CCTV 현황 분석-3 (0) | 2024.04.13 |