data
aed.shape
# output
(527, 8)
→ 총 527개의 심제세동기가 설치되어 있음을 확인
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 527 entries, 0 to 526
Data columns (total 7 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 설치장소 527 non-null object
1 설치위치 527 non-null object
2 전화번호 498 non-null object
3 도로명주소 527 non-null object
4 지번주소 527 non-null object
5 경도 527 non-null object
6 위도 527 non-null object
dtypes: object(7)
memory usage: 28.9+ KB
위도 경도의 데이터 형태가 object 이므로 float형으로 형변환
aed['위도'] = aed['위도'].astype('float')
aed['경도'] = aed['경도'].astype('float')
foliumn map
생성jeju_map = folium.Map((33.361664, 126.5291762), zoom_start= 10)
jeju_map
aed['법정동'] = aed['지번주소'].str.split(' ').str[2]
aed['법정동'].unique()
# output
array(['도남동', '연동', '이도일동', '화북이동', '조천읍', '건입동', '한경면', '애월읍', '구좌읍',
'한림읍', '이도이동', '오라이동', '노형동', '봉개동', '도두일동', '도련일동', '도평동', '일도이동',
'화북일동', '삼도이동', '월평동', '오등동', '삼양이동', '삼양일동', '영평동', '아라일동',
'외도일동', '오라일동', '외도이동', '용담이동', '용담삼동', '우도면', '해안동', '아라이동',
'이호일동', '일도일동', '삼도일동', '도련이동', '용담일동', '추자면'], dtype=object)
aed_emd = aed.groupby('법정동')[['설치장소']].count().reset_index().sort_values('설치장소',ascending=False).reset_index(drop=True)
aed_emd
# output
법정동 설치장소
0 건입동 56
1 아라일동 51
2 노형동 44
3 애월읍 43
4 조천읍 30
5 연동 30
6 한림읍 29
7 구좌읍 29
8 우도면 19
9 오라이동 18
10 화북일동 18
11 한경면 16
12 이도이동 16
13 영평동 15
14 이도일동 12
15 일도이동 10
16 용담이동 9
17 오라일동 7
18 도남동 7
19 봉개동 7
20 화북이동 6
21 삼도이동 6
22 월평동 5
23 도련일동 5
24 추자면 4
25 삼양이동 4
26 외도일동 4
27 용담삼동 3
28 도두일동 3
29 도평동 3
30 삼도일동 3
31 용담일동 3
32 외도이동 2
33 일도일동 2
34 해안동 2
35 아라이동 2
36 도련이동 1
37 삼양일동 1
38 이호일동 1
39 오등동 1
Choropleth map
생성# Choropleth map
folium.Choropleth(
geo_data = geo_str, # 행정구역 경계 JSON
data = aed_emd, # 법정동별 제세동기 설치 수
columns = ['법정동','설치장소'], # 사용할 컬럼
fill_color = 'PuRd', # color
key_on = 'properties.EMD_NM', # 법정동명 으로 매핑
legend_name = '설치 수', # legend 이름 지정
fill_opacity = 0.7, # 색칠 투명도
line_opacity = 0.2 # 라인 투명도
).add_to(jeju_map)
jeju_map
데이터가 없는 지역은 지도에서 검은 배경으로 출력됨
aed_lst = aed.법정동.tolist()
emd_na = df[~df['EMD_NM'].isin(aed_lst)]
emd_na
emd_lst = emd_na['EMD_NM'].tolist()
na_aed = pd.DataFrame({'법정동': emd_lst, '설치장소': [0]* len(emd_lst)})
na_aed
pd.concat
으로 데이터 병합aed_df = pd.concat([aed_emd, na_aed])
aed_df
jeju_map = folium.Map((33.361664, 126.5291762), zoom_start= 10)
jeju_map
# Choropleth map
folium.Choropleth(
geo_data = geo_str, # 행정구역 경계 JSON
data = aed_df, # 법정동별 제세동기 설치 수
columns = ['법정동','설치장소'], # 사용할 컬럼
fill_color = 'PuRd', # color
key_on = 'properties.EMD_NM', # 법정동명 으로 매핑
legend_name = '설치 수', # legend 이름 지정
fill_opacity = 0.7, # 색칠 투명도
line_opacity = 0.2 # 라인 투명도
).add_to(jeju_map)
jeju_map
# html save
jeju_map.save('aed_jeju.html')
데이터가 없는 지역도 해당 색상 범례에 맞춰 지도 생성