Exemple #1
0
    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())
Exemple #2
0
    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')
Exemple #3
0
    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())
Exemple #4
0
    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')