멋쟁이사자처럼 X K-DIGITAL Training - 06.10
[이전] 파이썬 통계자료 분석 및 시각화 복습(1) 데이터 전처리
2021.06.15 - [python/K-Digital] - [K-DIGITAL] 파이썬 통계자료 분석 및 시각화 복습(1) 데이터 전처리
[K-DIGITAL] 파이썬 통계자료 분석 및 시각화 복습(1) 데이터 전처리
멋쟁이사자처럼 X K-DIGITAL Training - 06.09 필요한 라이브러리 준비 import numpy as np import pandas as pd numpy 벡터, 행렬 등 수치 연산을 수행하는 선형대수 라이브러리 pandas 데이터 처리 및 분석 라이..
juran-devblog.tistory.com
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import folium
# font
from matplotlib import font_manager, rc # rc == run configure(configuration file)
%matplotlib inline
font_name = font_manager.FontProperties(fname="c:/Windows/Fonts/malgun.ttf").get_name()
rc('font', family=font_name) # run configure
matplotib 데이터를 차트로 시각화
seaborn matplotlib에 기반하여 제작된 파이썬 데이터 시각화 모듈
folium 지도 라이브러리
2021.06.15 - [python/K-Digital] - [K-DIGITAL] 파이썬 통계자료 분석 및 시각화 복습(1) 데이터 전처리
경찰서 위치 데이터 및 경찰서별 검거율 계산
필요없는 행('계') 삭제
- drop([행 리스트])
- del df['열 이름']
df = df.drop([0])
간략화된 경찰서명 변경
station_name = []
for name in df['관서명']:
# 중부서 -> 서울 + 중부 + 경찰서
station_name.append('서울' + name[:-1] + '경찰서')
df['경찰서'] = station_name # '경찰서' 열 추가
경찰서별 검거율 계산
- 검거율 추가
df['검거율'] = df['소계(검거)'] / df['소계(발생)'] * 100
- 정규화 (1~100 사이 점수로 환산)
def reRange(x, oldMin, oldMax, newMin, newMax):
return (x - oldMin) * (newMax - newMin) / (oldMax - oldMin) + newMin
df['점수'] = reRange(df['검거율'], min(df['검거율']), max(df['검거율']), 1, 100)
- 점수 기준 내림차순 정렬
sort_values(by='열 이름', 오름차순 여부(ascending), 덮어쓰기 여부(inplace))
df.sort_values(by = '점수', ascending = False, inplace = True)
Google Maps Geocoding Api
구글맵스 api 이용하여 경찰서 좌표 데이터(위도, 경도) 받아오기
import googlemaps
gmaps = googlemaps.Client(key={api_key})
예) '서울강남경찰서'
map_ex = gmaps.geocode('서울강남경찰서', language="ko")
map_ex[0].get('geometry')['location']
경찰서 위도, 경도 데이터 추가
lat = [] # 위도
lng = [] # 경도
for name in df['경찰서']:
tmpMap = gmaps.geocode(name)
lat.append(tmpMap[0].get('geometry')['location']['lat'])
lng.append(tmpMap[0].get('geometry')['location']['lng'])
df['위도'] = lat
df['경도'] = lng
heatmap 차트
- '전체발생비율' 열 기준 정렬
plt.figure(figsize = (10,10)) # chart size
sns.heatmap(crime_ratio.sort_values(by='전체발생비율', ascending=False),annot=True, fmt='f', linewidths=.5, cmap='Reds')
plt.title('인구수 대비 전체 범죄 발생비율')
plt.show()
- '살인' 열 기준 정렬
구 별 데이터 지도 시각화
json 라이브러리와 서울시 지리정보(json) 준비
- json 라이브러리
- json.load(open('파일명', mode, encoding))
import json # json 라이브러리
geo_str = json.load(open('geo_information.json', 'r', encoding = 'utf-8'))
지도 생성
map_seoul = folium.Map(location=[37.5502, 126.982], zoom_start=11)
구 별 살인 범죄 발생수 데이터 지도 위 시각화
map = folium.Map(location=[37.5502, 126.982], zoom_start=11, tiles='Stamen Toner')
map.choropleth(geo_data = geo_str, # 지도 데이터
data = gu_df['살인'], # 시각화할 데이터
columns = [gu_df.index, gu_df['살인']], # 인덱스, 데이터
fill_color = 'PuRd', # 색상
key_on = 'feature.id')
구 별 5대 범죄 전체 발생비율 지도 위 시각화
map = folium.Map(location=[37.5502, 126.982], zoom_start=11, tiles='Stamen Toner')
map.choropleth(geo_data = geo_str, # 지도 데이터
data = crime_ratio['전체발생비율'], # 시각화 데이터
columns = [crime_ratio.index, crime_ratio['전체발생비율']], # 인덱스, 데이터
fill_color = 'BuGn', # 색상
key_on = 'feature.id')
경찰서별 범죄현황 데이터 지도 시각화
경찰서별 검거율 데이터
map = folium.Map(location=[37.5502, 126.982], zoom_start=11)
for n in df.index:
folium.CircleMarker([df['lat'][n], df['lng'][n]], # 위도 경도 좌표
radius = df['검거율'][n], # 시각화 데이터
color = '#3186cc', fill = True, fill_color = '#3186cc').add_to(map)
경찰서별 검거율 점수 데이터 (위의 그래프보다 비교하기 더 쉬움)
map = folium.Map(location=[37.5502, 126.982], zoom_start=11)
for n in df.index:
folium.CircleMarker([df['lat'][n], df['lng'][n]],
radius = df['점수'][n],
color = '#3186cc', fill = True, fill_color = '#3186cc').add_to(map)
인구 수 대비 5대 범죄 발생 비율 기준 구별 데이터 & 경찰서별 검거율 데이터 시각화
map = folium.Map(location=[37.5502, 126.982], zoom_start=11)
# 인구 수 대비 구별 5대 범죄 발생비율
map.choropleth(geo_data = geo_str,
data = crime_ratio['전체발생비율'],
columns = [crime_ratio.index, crime_ratio['전체발생비율']],
fill_color = 'PuRd',
key_on = 'feature.id')
# 경찰서별 검거율 데이터
for n in df.index:
folium.CircleMarker([df['lat'][n], df['lng'][n]],
radius = df['점수'][n] * 0.7, # 0.5 -> 0.7
color = '#3186cc', fill = True, fill_color = '#3186cc').add_to(map)
엑셀파일로 저장 - to_excel('파일명.xlsx', encoding='utf-8')
csv파일로 저장 - to_csv('파일명.csv', encoding='euc-kr')
* 한글 인코딩 utf-8 / euc-kr / cp949
지도 html 문서로 저장 - map.save('파일명.html')
[K-DIGITAL] 파이썬을 활용한 기초 통계분석(2) 상관관계 (0) | 2021.06.22 |
---|---|
[K-DIGITAL] 파이썬을 활용한 기초 통계분석(1) 빈도 분석과 이상치 (0) | 2021.06.21 |
[K-DIGITAL] 세미프로젝트1. 서울시 자전거사고 분석(2) 원인예측 (0) | 2021.06.19 |
[K-DIGITAL] 세미프로젝트1. 서울시 자전거사고 분석(1) 문제분석 (0) | 2021.06.18 |
[K-DIGITAL] 파이썬 통계자료 분석 및 시각화(1) 데이터 전처리 (0) | 2021.06.15 |
댓글 영역