def create_seoul_crime_map(self): reader = self.reader reader.context = os.path.join(baseurl, 'data') reader.fname = 'seoul_map.json' reader.new_file() seoul_map = reader.json_load() reader.context = os.path.join(baseurl, 'saved_data') reader.fname = 'police_norm.csv' reader.new_file() police_norm = reader.csv_to_dframe() crimeModel = CrimeModel() crime = crimeModel.get_crime() print(f'{police_norm.head()}') station_names = [] for name in crime['관서명']: station_names.append('서울' + str(name[:-1] + '경찰서')) station_addrs = [] station_lats = [] # 위도 station_lngs = [] # 경도 gmaps = reader.create_gmaps() for name in station_names: t = gmaps.geocode(name, language='ko') station_addrs.append(t[0].get('formatted_address')) t_loc = t[0].get('geometry') station_lats.append(t_loc['location']['lat']) station_lngs.append(t_loc['location']['lng']) print(name + '----->' + t[0].get('formatted_address')) # crime_in_seroul.csv 의 raw data reader = self.reader reader.context = os.path.join(baseurl, 'saved_data') reader.fname = 'police_position.csv' reader.new_file() police_pos = reader.csv_to_dframe() police_pos['lat'] = station_lats police_pos['lng'] = station_lngs print(police_pos) col = ['살인 검거', '강도 검거', '강간 검거', '절도 검거', '폭력 검거'] tmp = police_pos[col] / police_pos[col].max() police_pos['검거'] = np.sum(tmp, axis=1) # 지도 그리기 map = folium.Map(location=[37.5502, 126.982], zoom_start=12) map.choropleth(geo_data=seoul_map, name='choropleth', data=tuple(zip(police_norm['구별'], police_norm['범죄'])), columns=['구별', '살인검거율'], key_on='feature.id', fill_color='PuRd', fill_opacity=0.7, line_opacity=0.2, legend_name='CRIME (%)') folium.LayerControl().add_to(map) reader = self.reader reader.context = os.path.join(baseurl, 'saved_data') reader.fname = 'police.html' map.save(reader.new_file())
def set_police_norm(self): crime = CrimeModel() crime_police = crime.get_crime_police() police = pd.pivot_table(crime_police, index='구별', aggfunc=np.sum) print(f'{police.head()}') police['살인검거율'] = (police['살인 검거'] / police['살인 발생']) * 100 police['강간검거율'] = (police['강간 검거'] / police['강간 발생']) * 100 police['강도검거율'] = (police['강도 검거'] / police['강도 발생']) * 100 police['절도검거율'] = (police['절도 검거'] / police['절도 발생']) * 100 police['폭력검거율'] = (police['폭력 검거'] / police['폭력 발생']) * 100 police.drop(columns = {'살인 검거','강간 검거','강도 검거','절도 검거','폭력 검거'}, axis = 1) crime_rate_columns = ['살인검거율', '강간검거율', '강도검거율', '절도검거율','폭력검거율'] for i in crime_rate_columns: police.loc[police[i] > 100, 1] = 100 # 데이터값의 기간오류로 100이 넘으면 100으로 계산 police.rename(columns = { '살인 발생' : '살인', '강간 발생' : '강간', '강도 발생' : '강도', '절도 발생' : '절도', '폭력 발생' : '폭력' }, inplace = True) crime_columns = ['살인', '강간', '강도', '절도','폭력'] x = police[crime_rate_columns].values min_max_scaler = preprocessing.MinMaxScaler() """ 스케일링은 선형변환을 적응하여 전체 자료의 분포를 평균 0, 분산 1이 되도록 만드는 과정 """ x_scaled = min_max_scaler.fit_transform(x.astype(float)) """ 정규화(normalization) 많이 양의 데이터를 처리함에 있어 여러 이유로 정규화, 즉 데이터의 범위를 일치시키거나 분포를 유사하게 만들어 주는 등의 작업. 평균값 정규화, 중간값 정규화 .. """ police_norm = pd.DataFrame(x_scaled, columns= crime_columns, index=police.index) police_norm[crime_rate_columns] = police[crime_rate_columns] cctv = CctvModel() cctv_pop = cctv.get_cctv_pop() print(f'cctv_pop :: {cctv_pop.head()}') police_norm['범죄'] = np.sum(police_norm[crime_rate_columns], axis = 1) police_norm['검거'] = np.sum(police_norm[crime_columns], axis = 1) print(f'police_norm columns :: {police_norm.columns}') reader = self.reader reader.context = os.path.join(baseurl,'saved_data') reader.fname = 'police_norm.csv' police_norm.to_csv(reader.new_file(), sep=',', encoding='UTF-8')
def create_seoul_crime_map(self): reader = self.reader reader.context = os.path.join(baseurl, 'data') reader.fname = 'seoul_map.json' seoul_map = reader.json_load() reader.fname = 'police_norm.csv' reader.new_file() police_norm = reader.csv_to_dframe() crimeModel = CrimeModel() crime = crimeModel.get_crime() print(f'{police_norm.head()}') station_names = [] for name in crime['관서명']: station_names.append('서울' + str(name[:-1] + '경찰서')) station_addrs = [] station_lats = [] # 위도 station_lngs = [] # 경도 gmaps = reader.create_gmaps() for name in station_names: t = gmaps.geocode(name, language='ko') station_addrs.append(t[0].get('formatted_address')) t_loc = t[0].get('geometry') station_lats.append(t_loc['location']['lat']) station_lngs.append(t_loc['location']['lng']) print(name + '----->' + t[0].get('formatted_address')) #crime in seoul csv 의 raw data reader = self.reader reader.context = os.path.join(baseurl, 'saved_data') reader.fname = 'police_positiion.json' reader.new_file() police_pos = reader.csv_to_dframe() police_pos['lat'] = station_lats police_pos['lng'] = station_lngs map = folium.Map(location=[37.5502, 126], zoom_start=5) map.choropleth(geo_data=seoul_map, name='choropleth', data=police_norm, columns=['구별', '살인검거율'], key_on='feature.id', fill_color='YlGn', fill_opacity=0.7, line_opacity=0.2, legend_name='살인 검거율(%)') folium.LayerControl().add_to(map) reader = self.reader reader.context = os.path.join(baseurl, 'saved_data') reader.fname = 'police.html' map.save(reader.new_file())
def create_crime_rate(self): crime = CrimeModel() crime_police = crime.get_crime_police() police = pd.pivot_table(crime_police, index='구별', aggfunc=np.sum) print(f'{police.head()}') police['살인검거율'] = (police['살인 검거'] / police['살인 발생']) * 100 police['강간검거율'] = (police['강간 검거'] / police['강간 발생']) * 100 police['강도검거율'] = (police['강도 검거'] / police['강도 발생']) * 100 police['절도검거율'] = (police['절도 검거'] / police['절도 발생']) * 100 police['폭력검거율'] = (police['폭력 검거'] / police['폭력 발생']) * 100 police.drop(columns={'살인 검거', '강간 검거', '강도 검거', '절도 검거', '폭력 검거'}, axis=1) crime_rate_columns = ['살인검거율', '강간검거율', '강도검거율', '절도검거율', '폭력검거율'] for i in crime_rate_columns: police.loc[police[i] > 100, 1] = 100 police.rename(columns={ '살인 발생': '살인', '강간 발생': '강간', '강도 발생': '강도', '절도 발생': '절도', '폭력 발생': '폭력' }, inplace=True) crime_columns = ['살인', '강간', '강도', '절도', '폭력'] x = police[crime_columns].values min_max_scaler = preprocessing.MinMaxScaler() x_scaled = min_max_scaler.fit_transform(x.astype(float)) police_norm = pd.DataFrame(x_scaled, columns=crime_columns, index=police.index) police_norm[crime_rate_columns] = police[crime_rate_columns] cctv = CctvModel() cctv_pop = cctv.get_cctv_pop() print(f'cctv_pop :: {cctv_pop.head()}') police_norm['범죄'] = np.sum(police_norm[crime_rate_columns], axis=1) police_norm['검거'] = np.sum(police_norm[crime_columns], axis=1) print(f'police_norm_columns :: {police_norm.columns}') reader = self.reader reader.context = os.path.join(baseurl, 'saved_data') reader.fname = 'police_norm.csv' police_norm.to_csv(reader.new_file(), sep=',', encoding='UTF-8')