새싹 인공지능 응용sw 개발자 양성 교육 프로그램 심선조 강사님 수업 정리 글입니다.
import warnings
warnings.filterwarnings('ignore')
import pandas as pd
data = pd.read_csv('202208_202208_주민등록인구및세대현황_월간.csv',encoding='cp949')
data.head(2)
행정구역 | 2022년08월_총인구수 | 2022년08월_세대수 | 2022년08월_세대당 인구 | 2022년08월_남자 인구수 | 2022년08월_여자 인구수 | 2022년08월_남여 비율 | |
---|---|---|---|---|---|---|---|
0 | 서울특별시 (1100000000) | 9,488,454 | 4,472,975 | 2.12 | 4,601,295 | 4,887,159 | 0.94 |
1 | 서울특별시 종로구 (1111000000) | 143,499 | 73,866 | 1.94 | 69,408 | 74,091 | 0.94 |
data.info() #object라고 들어오면 int, float으로 들어오는 데 문제가 있다.라는 뜻으로 해석할 수 있다.
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3865 entries, 0 to 3864
Data columns (total 7 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 행정구역 3865 non-null object
1 2022년08월_총인구수 3865 non-null object
2 2022년08월_세대수 3865 non-null object
3 2022년08월_세대당 인구 3865 non-null float64
4 2022년08월_남자 인구수 3865 non-null object
5 2022년08월_여자 인구수 3865 non-null object
6 2022년08월_남여 비율 3865 non-null float64
dtypes: float64(2), object(5)
memory usage: 211.5+ KB
#2. 컬럼 이름 수정
data.columns #컬럼 내용 확인
Index(['행정구역', '2022년08월_총인구수', '2022년08월_세대수', '2022년08월_세대당 인구',
'2022년08월_남자 인구수', '2022년08월_여자 인구수', '2022년08월_남여 비율'],
dtype='object')
data.columns = ['행정구역', '총인구수', '세대수', '세대당인구', '남자', '여자', '남여비율']
data.columns
Index(['행정구역', '총인구수', '세대수', '세대당인구', '남자', '여자', '남여비율'], dtype='object')
# 필요없는 컬럼 제거 - 남여제거
data.drop(columns=['남여비율'],inplace=True)
data.columns
Index(['행정구역', '총인구수', '세대수', '세대당인구', '남자', '여자'], dtype='object')
# 4. geojson과 연결할 키를 확인
data.head(3)
행정구역 | 총인구수 | 세대수 | 세대당인구 | 남자 | 여자 | |
---|---|---|---|---|---|---|
0 | 서울특별시 (1100000000) | 9,488,454 | 4,472,975 | 2.12 | 4,601,295 | 4,887,159 |
1 | 서울특별시 종로구 (1111000000) | 143,499 | 73,866 | 1.94 | 69,408 | 74,091 |
2 | 서울특별시 종로구 청운효자동(1111051500) | 11,766 | 5,198 | 2.26 | 5,392 | 6,374 |
데이터 정보 확인 - 대분류, 중분류 같이 있으면 안 된다. 개별 데이터만 있어야 한다.
첫 번째 줄은 서울 전체 (서울특별시)
두 번째 줄은 해당 구별 (서울특별시 종로구)
세 번쨰 줄은 해당 동별 (서울특별시 종로구 청운효자동)
-> 데이터 분리하는 작업 필요
4. geojson과 연결할 키를 확인
행정구역을 이용해서 시, 구, 동 컬럼을 만들어 준다.
개별 데이터는 남기고 대분류, 중분류에 해당하는 값을 제거해 준다.
부산 지역의 데이터만 가지고 와서 인덱스는 새로 부여한다.
data['행정구역'].str.split() #내용확인
0 [서울특별시, (1100000000)]
1 [서울특별시, 종로구, (1111000000)]
2 [서울특별시, 종로구, 청운효자동(1111051500)]
3 [서울특별시, 종로구, 사직동(1111053000)]
4 [서울특별시, 종로구, 삼청동(1111054000)]
...
3860 [제주특별자치도, 서귀포시, 서홍동(5013058000)]
3861 [제주특별자치도, 서귀포시, 대륜동(5013059000)]
3862 [제주특별자치도, 서귀포시, 대천동(5013060000)]
3863 [제주특별자치도, 서귀포시, 중문동(5013061000)]
3864 [제주특별자치도, 서귀포시, 예래동(5013062000)]
Name: 행정구역, Length: 3865, dtype: object
data['행정구역'] = data['행정구역'].str.split('(').str.get(0)
data['시'] = data['행정구역'].str.split().str.get(0)
data['구'] = data['행정구역'].str.split().str.get(1)
data['동'] = data['행정구역'].str.split().str.get(2).str.split('(').str.get(0)
#null 값이면 NaN으로 나와야 하는데 아무 것도 안 나오면 빈 문자열이 들어갔다라는 의미이다.
data.head(3)
행정구역 | 총인구수 | 세대수 | 세대당인구 | 남자 | 여자 | 시 | 구 | 동 | |
---|---|---|---|---|---|---|---|---|---|
0 | 서울특별시 | 9,488,454 | 4,472,975 | 2.12 | 4,601,295 | 4,887,159 | 서울특별시 | NaN | NaN |
1 | 서울특별시 종로구 | 143,499 | 73,866 | 1.94 | 69,408 | 74,091 | 서울특별시 | 종로구 | NaN |
2 | 서울특별시 종로구 청운효자동 | 11,766 | 5,198 | 2.26 | 5,392 | 6,374 | 서울특별시 | 종로구 | 청운효자동 |
#4-2. 대분류, 중분류 제거
data.dropna(inplace=True) #nan가 있는 해당 행을 제거(axis = 0), axis = 1이면 column을 제거
data.head(3)
행정구역 | 총인구수 | 세대수 | 세대당인구 | 남자 | 여자 | 시 | 구 | 동 | |
---|---|---|---|---|---|---|---|---|---|
2 | 서울특별시 종로구 청운효자동 | 11,766 | 5,198 | 2.26 | 5,392 | 6,374 | 서울특별시 | 종로구 | 청운효자동 |
3 | 서울특별시 종로구 사직동 | 9,278 | 4,668 | 1.99 | 4,124 | 5,154 | 서울특별시 | 종로구 | 사직동 |
4 | 서울특별시 종로구 삼청동 | 2,384 | 1,188 | 2.01 | 1,130 | 1,254 | 서울특별시 | 종로구 | 삼청동 |
busan = data[data['시'] == '부산광역시']
busan
행정구역 | 총인구수 | 세대수 | 세대당인구 | 남자 | 여자 | 시 | 구 | 동 | |
---|---|---|---|---|---|---|---|---|---|
454 | 부산광역시 중구 중앙동 | 3,139 | 2,435 | 1.29 | 1,475 | 1,664 | 부산광역시 | 중구 | 중앙동 |
455 | 부산광역시 중구 동광동 | 2,590 | 1,703 | 1.52 | 1,323 | 1,267 | 부산광역시 | 중구 | 동광동 |
456 | 부산광역시 중구 대청동 | 6,185 | 3,562 | 1.74 | 2,877 | 3,308 | 부산광역시 | 중구 | 대청동 |
457 | 부산광역시 중구 보수동 | 10,464 | 6,029 | 1.74 | 5,052 | 5,412 | 부산광역시 | 중구 | 보수동 |
458 | 부산광역시 중구 부평동 | 4,430 | 2,748 | 1.61 | 2,103 | 2,327 | 부산광역시 | 중구 | 부평동 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
669 | 부산광역시 기장군 기장읍 | 52,213 | 25,757 | 2.03 | 25,411 | 26,802 | 부산광역시 | 기장군 | 기장읍 |
670 | 부산광역시 기장군 장안읍 | 8,453 | 4,709 | 1.80 | 4,568 | 3,885 | 부산광역시 | 기장군 | 장안읍 |
671 | 부산광역시 기장군 정관읍 | 81,242 | 32,042 | 2.54 | 40,196 | 41,046 | 부산광역시 | 기장군 | 정관읍 |
672 | 부산광역시 기장군 일광읍 | 28,012 | 11,772 | 2.38 | 13,840 | 14,172 | 부산광역시 | 기장군 | 일광읍 |
673 | 부산광역시 기장군 철마면 | 7,808 | 3,889 | 2.01 | 3,987 | 3,821 | 부산광역시 | 기장군 | 철마면 |
205 rows × 9 columns
busan.reset_index()
index | 행정구역 | 총인구수 | 세대수 | 세대당인구 | 남자 | 여자 | 시 | 구 | 동 | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 454 | 부산광역시 중구 중앙동 | 3,139 | 2,435 | 1.29 | 1,475 | 1,664 | 부산광역시 | 중구 | 중앙동 |
1 | 455 | 부산광역시 중구 동광동 | 2,590 | 1,703 | 1.52 | 1,323 | 1,267 | 부산광역시 | 중구 | 동광동 |
2 | 456 | 부산광역시 중구 대청동 | 6,185 | 3,562 | 1.74 | 2,877 | 3,308 | 부산광역시 | 중구 | 대청동 |
3 | 457 | 부산광역시 중구 보수동 | 10,464 | 6,029 | 1.74 | 5,052 | 5,412 | 부산광역시 | 중구 | 보수동 |
4 | 458 | 부산광역시 중구 부평동 | 4,430 | 2,748 | 1.61 | 2,103 | 2,327 | 부산광역시 | 중구 | 부평동 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
200 | 669 | 부산광역시 기장군 기장읍 | 52,213 | 25,757 | 2.03 | 25,411 | 26,802 | 부산광역시 | 기장군 | 기장읍 |
201 | 670 | 부산광역시 기장군 장안읍 | 8,453 | 4,709 | 1.80 | 4,568 | 3,885 | 부산광역시 | 기장군 | 장안읍 |
202 | 671 | 부산광역시 기장군 정관읍 | 81,242 | 32,042 | 2.54 | 40,196 | 41,046 | 부산광역시 | 기장군 | 정관읍 |
203 | 672 | 부산광역시 기장군 일광읍 | 28,012 | 11,772 | 2.38 | 13,840 | 14,172 | 부산광역시 | 기장군 | 일광읍 |
204 | 673 | 부산광역시 기장군 철마면 | 7,808 | 3,889 | 2.01 | 3,987 | 3,821 | 부산광역시 | 기장군 | 철마면 |
205 rows × 10 columns
busan.reset_index(drop=True, inplace=True) #index 컬럼 제거
busan.head(2)
행정구역 | 총인구수 | 세대수 | 세대당인구 | 남자 | 여자 | 시 | 구 | 동 | |
---|---|---|---|---|---|---|---|---|---|
0 | 부산광역시 중구 중앙동 | 3,139 | 2,435 | 1.29 | 1,475 | 1,664 | 부산광역시 | 중구 | 중앙동 |
1 | 부산광역시 중구 동광동 | 2,590 | 1,703 | 1.52 | 1,323 | 1,267 | 부산광역시 | 중구 | 동광동 |
숫자형으로 바꾸기
5. 총인구수, 남자, 여자 컬럼의 데이터 타입을 정수형으로 변경
data.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 3584 entries, 2 to 3864
Data columns (total 9 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 행정구역 3584 non-null object
1 총인구수 3584 non-null object
2 세대수 3584 non-null object
3 세대당인구 3584 non-null float64
4 남자 3584 non-null object
5 여자 3584 non-null object
6 시 3584 non-null object
7 구 3584 non-null object
8 동 3584 non-null object
dtypes: float64(1), object(8)
memory usage: 280.0+ KB
#busan['총인구수'].astype('int') #.는 숫자로 인식하지만 ,는 숫자로 인식 하지 않아서 오류남 -> ,제거해야 함
busan['총인구수'] = busan['총인구수'].str.replace(',','').astype('int')
busan['남자'] = busan['남자'].str.replace(',','').astype('int')
busan['여자'] = busan['여자'].str.replace(',','').astype('int')
#nan값으로 대체하는 것은 원본 값을 지워버려서 원본을 지워도 괜찮을 때 사용
busan.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 205 entries, 0 to 204
Data columns (total 9 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 행정구역 205 non-null object
1 총인구수 205 non-null int32
2 세대수 205 non-null object
3 세대당인구 205 non-null float64
4 남자 205 non-null int32
5 여자 205 non-null int32
6 시 205 non-null object
7 구 205 non-null object
8 동 205 non-null object
dtypes: float64(1), int32(3), object(5)
memory usage: 12.1+ KB
#동별, 구별 부산 인구를 차트로 표시(인구순으로 5개 항목만 출력) #seaborn사용할 때 index가 있으면 불편해서 reset시킴
gu = busan.groupby(['구'])['총인구수'].sum().sort_values(ascending=False).head().reset_index()
import seaborn as sns
sns.barplot(data=gu,x='구',y='총인구수')
<AxesSubplot:xlabel='구', ylabel='총인구수'>
dong = busan.sort_values(by='총인구수',ascending=False).head(5)
sns.barplot(data=dong,x='동',y='총인구수')
<AxesSubplot:xlabel='동', ylabel='총인구수'>
파이썬에서는 리스트가 딕셔너리이다.
json의 역할은 파이썬에서 사용할 수 있는 형태로 바꿔줌 (리스트, 딕셔너리) -> index, key값으로 사용 가능
import json
jsonfile = open('HangJeongDong_ver20220701.geojson','r',encoding='utf8').read()
jsonfile #시작이 { 면 문자열이라는 뜻
type(jsonfile)
str
jsondata = json.loads(jsonfile)
type(jsondata)
dict
json_busan = {"type" : "FeatureCollection"} #기본틀
json_pick = [] #확인하는 용도
json_dong = []
#리스트안에 딕셔너리값
for item in jsondata['features']:
#print(item['properties']['sidonm'])
if item['properties']['sidonm'] == '부산광역시':
#print(item['properties']['sidonm'])
dong = item['properties']['adm_nm'].split()[-1].strip() #딕셔너리라서 .str 안 붙힘, strip() = 공백제거
item['id'] = dong
json_pick.append(item) #id값이 없어서 연결이 안 된다.
json_dong.append(dong)
json_busan['features']=json_pick
id값이 있어야 한다.
#dong정보를 id값으로 넣어놔서 데이터프레임에 id값을 확인해야 한다?
import folium
loc = [35.1795543,129.0756416]
m = folium.Map(loc,zoom_start=11)
folium.Choropleth(geo_data=json_busan,data=busan,columns=['동','총인구수'],key_on='feature.id').add_to(m)
m
#'제' 제거하기
json_dong = sorted(json_dong)
json_dong
['가덕도동',
'가락동',
'가야2동',
'가야제1동',
'감만1동',
'감만2동',
'감전동',
'감천1동',
'감천2동',
'강동동',
'개금1동',
'개금2동',
'개금3동',
'거제1동',
'거제2동',
'거제3동',
'거제4동',
'광복동',
'광안1동',
'광안2동',
'광안3동',
'광안4동',
'괘법동',
'괴정1동',
'괴정2동',
'괴정3동',
'괴정4동',
'구서1동',
'구서2동',
'구평동',
'구포1동',
'구포2동',
'구포3동',
'금곡동',
'금사회동동',
'금성동',
'기장읍',
'남부민1동',
'남부민2동',
'남산동',
'남천1동',
'남천2동',
'남포동',
'남항동',
'녹산동',
'다대1동',
'다대2동',
'당감1동',
'당감2동',
'당감4동',
'당리동',
'대연1동',
'대연3동',
'대연4동',
'대연5동',
'대연6동',
'대저1동',
'대저2동',
'대청동',
'덕천1동',
'덕천2동',
'덕천3동',
'덕포1동',
'덕포2동',
'동광동',
'동대신1동',
'동대신2동',
'동대신3동',
'동삼1동',
'동삼2동',
'동삼3동',
'만덕1동',
'만덕2동',
'만덕3동',
'망미1동',
'망미2동',
'명륜동',
'명장1동',
'명장2동',
'명지1동',
'명지2동',
'모라1동',
'모라3동',
'문현1동',
'문현2동',
'문현3동',
'문현4동',
'민락동',
'반송1동',
'반송2동',
'반여1동',
'반여2동',
'반여3동',
'반여4동',
'범일1동',
'범일2동',
'범일5동',
'범천1동',
'범천2동',
'보수동',
'복산동',
'봉래1동',
'봉래2동',
'부곡1동',
'부곡2동',
'부곡3동',
'부곡4동',
'부민동',
'부암1동',
'부암3동',
'부전1동',
'부전2동',
'부평동',
'사직1동',
'사직2동',
'사직3동',
'삼락동',
'서1동',
'서2동',
'서3동',
'서대신1동',
'서대신3동',
'서대신4동',
'선두구동',
'송정동',
'수민동',
'수영동',
'수정1동',
'수정2동',
'수정4동',
'수정5동',
'신선동',
'신평1동',
'신평2동',
'아미동',
'안락1동',
'안락2동',
'암남동',
'양정1동',
'양정2동',
'엄궁동',
'연산1동',
'연산2동',
'연산3동',
'연산4동',
'연산5동',
'연산6동',
'연산8동',
'연산9동',
'연지동',
'영선1동',
'영선2동',
'영주1동',
'영주2동',
'온천1동',
'온천2동',
'온천3동',
'용당동',
'용호1동',
'용호2동',
'용호3동',
'용호4동',
'우1동',
'우2동',
'우3동',
'우암동',
'일광읍',
'장림1동',
'장림2동',
'장안읍',
'장전1동',
'장전2동',
'재송1동',
'재송2동',
'전포1동',
'전포2동',
'정관읍',
'좌1동',
'좌2동',
'좌3동',
'좌4동',
'좌천동',
'주례1동',
'주례2동',
'주례3동',
'중1동',
'중2동',
'중앙동',
'철마면',
'청룡노포동',
'청학1동',
'청학2동',
'초량1동',
'초량2동',
'초량3동',
'초량6동',
'초읍동',
'초장동',
'충무동',
'하단1동',
'하단2동',
'학장동',
'화명1동',
'화명2동',
'화명3동']
df_dong=sorted(busan['동'])
df_dong
['가덕도동',
'가락동',
'가야제1동',
'가야제2동',
'감만제1동',
'감만제2동',
'감전동',
'감천제1동',
'감천제2동',
'강동동',
'개금제1동',
'개금제2동',
'개금제3동',
'거제제1동',
'거제제2동',
'거제제3동',
'거제제4동',
'광복동',
'광안제1동',
'광안제2동',
'광안제3동',
'광안제4동',
'괘법동',
'괴정제1동',
'괴정제2동',
'괴정제3동',
'괴정제4동',
'구서제1동',
'구서제2동',
'구평동',
'구포제1동',
'구포제2동',
'구포제3동',
'금곡동',
'금사회동동',
'금성동',
'기장읍',
'남부민제1동',
'남부민제2동',
'남산동',
'남천제1동',
'남천제2동',
'남포동',
'남항동',
'녹산동',
'다대제1동',
'다대제2동',
'당감제1동',
'당감제2동',
'당감제4동',
'당리동',
'대연제1동',
'대연제3동',
'대연제4동',
'대연제5동',
'대연제6동',
'대저1동',
'대저2동',
'대청동',
'덕천제1동',
'덕천제2동',
'덕천제3동',
'덕포제1동',
'덕포제2동',
'동광동',
'동대신제1동',
'동대신제2동',
'동대신제3동',
'동삼제1동',
'동삼제2동',
'동삼제3동',
'만덕제1동',
'만덕제2동',
'만덕제3동',
'망미제1동',
'망미제2동',
'명륜동',
'명장제1동',
'명장제2동',
'명지1동',
'명지2동',
'모라제1동',
'모라제3동',
'문현제1동',
'문현제2동',
'문현제3동',
'문현제4동',
'민락동',
'반송제1동',
'반송제2동',
'반여제1동',
'반여제2동',
'반여제3동',
'반여제4동',
'범일제1동',
'범일제2동',
'범일제5동',
'범천제1동',
'범천제2동',
'보수동',
'복산동',
'봉래제1동',
'봉래제2동',
'부곡제1동',
'부곡제2동',
'부곡제3동',
'부곡제4동',
'부민동',
'부암제1동',
'부암제3동',
'부전제1동',
'부전제2동',
'부평동',
'사직제1동',
'사직제2동',
'사직제3동',
'삼락동',
'서대신제1동',
'서대신제3동',
'서대신제4동',
'서제1동',
'서제2동',
'서제3동',
'선두구동',
'송정동',
'수민동',
'수영동',
'수정제1동',
'수정제2동',
'수정제4동',
'수정제5동',
'신선동',
'신평제1동',
'신평제2동',
'아미동',
'안락제1동',
'안락제2동',
'암남동',
'양정제1동',
'양정제2동',
'엄궁동',
'연산제1동',
'연산제2동',
'연산제3동',
'연산제4동',
'연산제5동',
'연산제6동',
'연산제8동',
'연산제9동',
'연지동',
'영선제1동',
'영선제2동',
'영주제1동',
'영주제2동',
'온천제1동',
'온천제2동',
'온천제3동',
'용당동',
'용호제1동',
'용호제2동',
'용호제3동',
'용호제4동',
'우암동',
'우제1동',
'우제2동',
'우제3동',
'일광읍',
'장림제1동',
'장림제2동',
'장안읍',
'장전제1동',
'장전제2동',
'재송제1동',
'재송제2동',
'전포제1동',
'전포제2동',
'정관읍',
'좌제1동',
'좌제2동',
'좌제3동',
'좌제4동',
'좌천동',
'주례제1동',
'주례제2동',
'주례제3동',
'중앙동',
'중제1동',
'중제2동',
'철마면',
'청룡노포동',
'청학제1동',
'청학제2동',
'초량제1동',
'초량제2동',
'초량제3동',
'초량제6동',
'초읍동',
'초장동',
'충무동',
'하단제1동',
'하단제2동',
'학장동',
'화명제1동',
'화명제2동',
'화명제3동']
len(json_dong),len(df_dong)
(205, 205)
for i, item in enumerate(zip(df_dong,json_dong)): #enumerate() = index를 같이 return해준다.
print(i, item)
0 ('가덕도동', '가덕도동')
1 ('가락동', '가락동')
2 ('가야제1동', '가야2동')
3 ('가야제2동', '가야제1동')
4 ('감만제1동', '감만1동')
5 ('감만제2동', '감만2동')
6 ('감전동', '감전동')
7 ('감천제1동', '감천1동')
8 ('감천제2동', '감천2동')
9 ('강동동', '강동동')
10 ('개금제1동', '개금1동')
11 ('개금제2동', '개금2동')
12 ('개금제3동', '개금3동')
13 ('거제제1동', '거제1동')
14 ('거제제2동', '거제2동')
15 ('거제제3동', '거제3동')
16 ('거제제4동', '거제4동')
17 ('광복동', '광복동')
18 ('광안제1동', '광안1동')
19 ('광안제2동', '광안2동')
20 ('광안제3동', '광안3동')
21 ('광안제4동', '광안4동')
22 ('괘법동', '괘법동')
23 ('괴정제1동', '괴정1동')
24 ('괴정제2동', '괴정2동')
25 ('괴정제3동', '괴정3동')
26 ('괴정제4동', '괴정4동')
27 ('구서제1동', '구서1동')
28 ('구서제2동', '구서2동')
29 ('구평동', '구평동')
30 ('구포제1동', '구포1동')
31 ('구포제2동', '구포2동')
32 ('구포제3동', '구포3동')
33 ('금곡동', '금곡동')
34 ('금사회동동', '금사회동동')
35 ('금성동', '금성동')
36 ('기장읍', '기장읍')
37 ('남부민제1동', '남부민1동')
38 ('남부민제2동', '남부민2동')
39 ('남산동', '남산동')
40 ('남천제1동', '남천1동')
41 ('남천제2동', '남천2동')
42 ('남포동', '남포동')
43 ('남항동', '남항동')
44 ('녹산동', '녹산동')
45 ('다대제1동', '다대1동')
46 ('다대제2동', '다대2동')
47 ('당감제1동', '당감1동')
48 ('당감제2동', '당감2동')
49 ('당감제4동', '당감4동')
50 ('당리동', '당리동')
51 ('대연제1동', '대연1동')
52 ('대연제3동', '대연3동')
53 ('대연제4동', '대연4동')
54 ('대연제5동', '대연5동')
55 ('대연제6동', '대연6동')
56 ('대저1동', '대저1동')
57 ('대저2동', '대저2동')
58 ('대청동', '대청동')
59 ('덕천제1동', '덕천1동')
60 ('덕천제2동', '덕천2동')
61 ('덕천제3동', '덕천3동')
62 ('덕포제1동', '덕포1동')
63 ('덕포제2동', '덕포2동')
64 ('동광동', '동광동')
65 ('동대신제1동', '동대신1동')
66 ('동대신제2동', '동대신2동')
67 ('동대신제3동', '동대신3동')
68 ('동삼제1동', '동삼1동')
69 ('동삼제2동', '동삼2동')
70 ('동삼제3동', '동삼3동')
71 ('만덕제1동', '만덕1동')
72 ('만덕제2동', '만덕2동')
73 ('만덕제3동', '만덕3동')
74 ('망미제1동', '망미1동')
75 ('망미제2동', '망미2동')
76 ('명륜동', '명륜동')
77 ('명장제1동', '명장1동')
78 ('명장제2동', '명장2동')
79 ('명지1동', '명지1동')
80 ('명지2동', '명지2동')
81 ('모라제1동', '모라1동')
82 ('모라제3동', '모라3동')
83 ('문현제1동', '문현1동')
84 ('문현제2동', '문현2동')
85 ('문현제3동', '문현3동')
86 ('문현제4동', '문현4동')
87 ('민락동', '민락동')
88 ('반송제1동', '반송1동')
89 ('반송제2동', '반송2동')
90 ('반여제1동', '반여1동')
91 ('반여제2동', '반여2동')
92 ('반여제3동', '반여3동')
93 ('반여제4동', '반여4동')
94 ('범일제1동', '범일1동')
95 ('범일제2동', '범일2동')
96 ('범일제5동', '범일5동')
97 ('범천제1동', '범천1동')
98 ('범천제2동', '범천2동')
99 ('보수동', '보수동')
100 ('복산동', '복산동')
101 ('봉래제1동', '봉래1동')
102 ('봉래제2동', '봉래2동')
103 ('부곡제1동', '부곡1동')
104 ('부곡제2동', '부곡2동')
105 ('부곡제3동', '부곡3동')
106 ('부곡제4동', '부곡4동')
107 ('부민동', '부민동')
108 ('부암제1동', '부암1동')
109 ('부암제3동', '부암3동')
110 ('부전제1동', '부전1동')
111 ('부전제2동', '부전2동')
112 ('부평동', '부평동')
113 ('사직제1동', '사직1동')
114 ('사직제2동', '사직2동')
115 ('사직제3동', '사직3동')
116 ('삼락동', '삼락동')
117 ('서대신제1동', '서1동')
118 ('서대신제3동', '서2동')
119 ('서대신제4동', '서3동')
120 ('서제1동', '서대신1동')
121 ('서제2동', '서대신3동')
122 ('서제3동', '서대신4동')
123 ('선두구동', '선두구동')
124 ('송정동', '송정동')
125 ('수민동', '수민동')
126 ('수영동', '수영동')
127 ('수정제1동', '수정1동')
128 ('수정제2동', '수정2동')
129 ('수정제4동', '수정4동')
130 ('수정제5동', '수정5동')
131 ('신선동', '신선동')
132 ('신평제1동', '신평1동')
133 ('신평제2동', '신평2동')
134 ('아미동', '아미동')
135 ('안락제1동', '안락1동')
136 ('안락제2동', '안락2동')
137 ('암남동', '암남동')
138 ('양정제1동', '양정1동')
139 ('양정제2동', '양정2동')
140 ('엄궁동', '엄궁동')
141 ('연산제1동', '연산1동')
142 ('연산제2동', '연산2동')
143 ('연산제3동', '연산3동')
144 ('연산제4동', '연산4동')
145 ('연산제5동', '연산5동')
146 ('연산제6동', '연산6동')
147 ('연산제8동', '연산8동')
148 ('연산제9동', '연산9동')
149 ('연지동', '연지동')
150 ('영선제1동', '영선1동')
151 ('영선제2동', '영선2동')
152 ('영주제1동', '영주1동')
153 ('영주제2동', '영주2동')
154 ('온천제1동', '온천1동')
155 ('온천제2동', '온천2동')
156 ('온천제3동', '온천3동')
157 ('용당동', '용당동')
158 ('용호제1동', '용호1동')
159 ('용호제2동', '용호2동')
160 ('용호제3동', '용호3동')
161 ('용호제4동', '용호4동')
162 ('우암동', '우1동')
163 ('우제1동', '우2동')
164 ('우제2동', '우3동')
165 ('우제3동', '우암동')
166 ('일광읍', '일광읍')
167 ('장림제1동', '장림1동')
168 ('장림제2동', '장림2동')
169 ('장안읍', '장안읍')
170 ('장전제1동', '장전1동')
171 ('장전제2동', '장전2동')
172 ('재송제1동', '재송1동')
173 ('재송제2동', '재송2동')
174 ('전포제1동', '전포1동')
175 ('전포제2동', '전포2동')
176 ('정관읍', '정관읍')
177 ('좌제1동', '좌1동')
178 ('좌제2동', '좌2동')
179 ('좌제3동', '좌3동')
180 ('좌제4동', '좌4동')
181 ('좌천동', '좌천동')
182 ('주례제1동', '주례1동')
183 ('주례제2동', '주례2동')
184 ('주례제3동', '주례3동')
185 ('중앙동', '중1동')
186 ('중제1동', '중2동')
187 ('중제2동', '중앙동')
188 ('철마면', '철마면')
189 ('청룡노포동', '청룡노포동')
190 ('청학제1동', '청학1동')
191 ('청학제2동', '청학2동')
192 ('초량제1동', '초량1동')
193 ('초량제2동', '초량2동')
194 ('초량제3동', '초량3동')
195 ('초량제6동', '초량6동')
196 ('초읍동', '초읍동')
197 ('초장동', '초장동')
198 ('충무동', '충무동')
199 ('하단제1동', '하단1동')
200 ('하단제2동', '하단2동')
201 ('학장동', '학장동')
202 ('화명제1동', '화명1동')
203 ('화명제2동', '화명2동')
204 ('화명제3동', '화명3동')
json_busan = {"type" : "FeaureCollection"} #기본틀
json_pick = [] #확인하는 용도
json_dong = []
#리스트안에 딕셔너리값
for item in jsondata['features']:
#print(item['properties']['sidonm'])
if item['properties']['sidonm'] == '부산광역시':
#print(item['properties']['sidonm'])
dong = item['properties']['adm_nm'].split()[-1].strip()
if dong == '가야제1동':
dong = '가야1동'
item['id'] = dong
json_pick.append(item)
json_dong.append(dong)
json_busan['features']=json_pick
json_dong = sorted(json_dong)
df_dong = sorted(busan['동'])
for i, item in enumerate(zip(df_dong,json_dong)):
print(i, item)
0 ('가덕도동', '가덕도동')
1 ('가락동', '가락동')
2 ('가야제1동', '가야1동')
3 ('가야제2동', '가야2동')
4 ('감만제1동', '감만1동')
5 ('감만제2동', '감만2동')
6 ('감전동', '감전동')
7 ('감천제1동', '감천1동')
8 ('감천제2동', '감천2동')
9 ('강동동', '강동동')
10 ('개금제1동', '개금1동')
11 ('개금제2동', '개금2동')
12 ('개금제3동', '개금3동')
13 ('거제제1동', '거제1동')
14 ('거제제2동', '거제2동')
15 ('거제제3동', '거제3동')
16 ('거제제4동', '거제4동')
17 ('광복동', '광복동')
18 ('광안제1동', '광안1동')
19 ('광안제2동', '광안2동')
20 ('광안제3동', '광안3동')
21 ('광안제4동', '광안4동')
22 ('괘법동', '괘법동')
23 ('괴정제1동', '괴정1동')
24 ('괴정제2동', '괴정2동')
25 ('괴정제3동', '괴정3동')
26 ('괴정제4동', '괴정4동')
27 ('구서제1동', '구서1동')
28 ('구서제2동', '구서2동')
29 ('구평동', '구평동')
30 ('구포제1동', '구포1동')
31 ('구포제2동', '구포2동')
32 ('구포제3동', '구포3동')
33 ('금곡동', '금곡동')
34 ('금사회동동', '금사회동동')
35 ('금성동', '금성동')
36 ('기장읍', '기장읍')
37 ('남부민제1동', '남부민1동')
38 ('남부민제2동', '남부민2동')
39 ('남산동', '남산동')
40 ('남천제1동', '남천1동')
41 ('남천제2동', '남천2동')
42 ('남포동', '남포동')
43 ('남항동', '남항동')
44 ('녹산동', '녹산동')
45 ('다대제1동', '다대1동')
46 ('다대제2동', '다대2동')
47 ('당감제1동', '당감1동')
48 ('당감제2동', '당감2동')
49 ('당감제4동', '당감4동')
50 ('당리동', '당리동')
51 ('대연제1동', '대연1동')
52 ('대연제3동', '대연3동')
53 ('대연제4동', '대연4동')
54 ('대연제5동', '대연5동')
55 ('대연제6동', '대연6동')
56 ('대저1동', '대저1동')
57 ('대저2동', '대저2동')
58 ('대청동', '대청동')
59 ('덕천제1동', '덕천1동')
60 ('덕천제2동', '덕천2동')
61 ('덕천제3동', '덕천3동')
62 ('덕포제1동', '덕포1동')
63 ('덕포제2동', '덕포2동')
64 ('동광동', '동광동')
65 ('동대신제1동', '동대신1동')
66 ('동대신제2동', '동대신2동')
67 ('동대신제3동', '동대신3동')
68 ('동삼제1동', '동삼1동')
69 ('동삼제2동', '동삼2동')
70 ('동삼제3동', '동삼3동')
71 ('만덕제1동', '만덕1동')
72 ('만덕제2동', '만덕2동')
73 ('만덕제3동', '만덕3동')
74 ('망미제1동', '망미1동')
75 ('망미제2동', '망미2동')
76 ('명륜동', '명륜동')
77 ('명장제1동', '명장1동')
78 ('명장제2동', '명장2동')
79 ('명지1동', '명지1동')
80 ('명지2동', '명지2동')
81 ('모라제1동', '모라1동')
82 ('모라제3동', '모라3동')
83 ('문현제1동', '문현1동')
84 ('문현제2동', '문현2동')
85 ('문현제3동', '문현3동')
86 ('문현제4동', '문현4동')
87 ('민락동', '민락동')
88 ('반송제1동', '반송1동')
89 ('반송제2동', '반송2동')
90 ('반여제1동', '반여1동')
91 ('반여제2동', '반여2동')
92 ('반여제3동', '반여3동')
93 ('반여제4동', '반여4동')
94 ('범일제1동', '범일1동')
95 ('범일제2동', '범일2동')
96 ('범일제5동', '범일5동')
97 ('범천제1동', '범천1동')
98 ('범천제2동', '범천2동')
99 ('보수동', '보수동')
100 ('복산동', '복산동')
101 ('봉래제1동', '봉래1동')
102 ('봉래제2동', '봉래2동')
103 ('부곡제1동', '부곡1동')
104 ('부곡제2동', '부곡2동')
105 ('부곡제3동', '부곡3동')
106 ('부곡제4동', '부곡4동')
107 ('부민동', '부민동')
108 ('부암제1동', '부암1동')
109 ('부암제3동', '부암3동')
110 ('부전제1동', '부전1동')
111 ('부전제2동', '부전2동')
112 ('부평동', '부평동')
113 ('사직제1동', '사직1동')
114 ('사직제2동', '사직2동')
115 ('사직제3동', '사직3동')
116 ('삼락동', '삼락동')
117 ('서대신제1동', '서1동')
118 ('서대신제3동', '서2동')
119 ('서대신제4동', '서3동')
120 ('서제1동', '서대신1동')
121 ('서제2동', '서대신3동')
122 ('서제3동', '서대신4동')
123 ('선두구동', '선두구동')
124 ('송정동', '송정동')
125 ('수민동', '수민동')
126 ('수영동', '수영동')
127 ('수정제1동', '수정1동')
128 ('수정제2동', '수정2동')
129 ('수정제4동', '수정4동')
130 ('수정제5동', '수정5동')
131 ('신선동', '신선동')
132 ('신평제1동', '신평1동')
133 ('신평제2동', '신평2동')
134 ('아미동', '아미동')
135 ('안락제1동', '안락1동')
136 ('안락제2동', '안락2동')
137 ('암남동', '암남동')
138 ('양정제1동', '양정1동')
139 ('양정제2동', '양정2동')
140 ('엄궁동', '엄궁동')
141 ('연산제1동', '연산1동')
142 ('연산제2동', '연산2동')
143 ('연산제3동', '연산3동')
144 ('연산제4동', '연산4동')
145 ('연산제5동', '연산5동')
146 ('연산제6동', '연산6동')
147 ('연산제8동', '연산8동')
148 ('연산제9동', '연산9동')
149 ('연지동', '연지동')
150 ('영선제1동', '영선1동')
151 ('영선제2동', '영선2동')
152 ('영주제1동', '영주1동')
153 ('영주제2동', '영주2동')
154 ('온천제1동', '온천1동')
155 ('온천제2동', '온천2동')
156 ('온천제3동', '온천3동')
157 ('용당동', '용당동')
158 ('용호제1동', '용호1동')
159 ('용호제2동', '용호2동')
160 ('용호제3동', '용호3동')
161 ('용호제4동', '용호4동')
162 ('우암동', '우1동')
163 ('우제1동', '우2동')
164 ('우제2동', '우3동')
165 ('우제3동', '우암동')
166 ('일광읍', '일광읍')
167 ('장림제1동', '장림1동')
168 ('장림제2동', '장림2동')
169 ('장안읍', '장안읍')
170 ('장전제1동', '장전1동')
171 ('장전제2동', '장전2동')
172 ('재송제1동', '재송1동')
173 ('재송제2동', '재송2동')
174 ('전포제1동', '전포1동')
175 ('전포제2동', '전포2동')
176 ('정관읍', '정관읍')
177 ('좌제1동', '좌1동')
178 ('좌제2동', '좌2동')
179 ('좌제3동', '좌3동')
180 ('좌제4동', '좌4동')
181 ('좌천동', '좌천동')
182 ('주례제1동', '주례1동')
183 ('주례제2동', '주례2동')
184 ('주례제3동', '주례3동')
185 ('중앙동', '중1동')
186 ('중제1동', '중2동')
187 ('중제2동', '중앙동')
188 ('철마면', '철마면')
189 ('청룡노포동', '청룡노포동')
190 ('청학제1동', '청학1동')
191 ('청학제2동', '청학2동')
192 ('초량제1동', '초량1동')
193 ('초량제2동', '초량2동')
194 ('초량제3동', '초량3동')
195 ('초량제6동', '초량6동')
196 ('초읍동', '초읍동')
197 ('초장동', '초장동')
198 ('충무동', '충무동')
199 ('하단제1동', '하단1동')
200 ('하단제2동', '하단2동')
201 ('학장동', '학장동')
202 ('화명제1동', '화명1동')
203 ('화명제2동', '화명2동')
204 ('화명제3동', '화명3동')
busan['동'] = busan['동'].str.replace('제','').to_list() #to_list() = 리스트로 보여줘라
busan['동'].replace(['거1동','거2동','거3동','거4동'],['거제1동','거제2동','거제3동','거제4동']) #str.replace() - 부분일치, .replace() - 전체일치
0 중앙동
1 동광동
2 대청동
3 보수동
4 부평동
...
200 기장읍
201 장안읍
202 정관읍
203 일광읍
204 철마면
Name: 동, Length: 205, dtype: object
json_dong = sorted(json_dong)
df_dong = sorted(busan['동'])
for i, item in enumerate(zip(df_dong,json_dong)):
print(i, item)
0 ('가덕도동', '가덕도동')
1 ('가락동', '가락동')
2 ('가야1동', '가야1동')
3 ('가야2동', '가야2동')
4 ('감만1동', '감만1동')
5 ('감만2동', '감만2동')
6 ('감전동', '감전동')
7 ('감천1동', '감천1동')
8 ('감천2동', '감천2동')
9 ('강동동', '강동동')
10 ('개금1동', '개금1동')
11 ('개금2동', '개금2동')
12 ('개금3동', '개금3동')
13 ('거1동', '거제1동')
14 ('거2동', '거제2동')
15 ('거3동', '거제3동')
16 ('거4동', '거제4동')
17 ('광복동', '광복동')
18 ('광안1동', '광안1동')
19 ('광안2동', '광안2동')
20 ('광안3동', '광안3동')
21 ('광안4동', '광안4동')
22 ('괘법동', '괘법동')
23 ('괴정1동', '괴정1동')
24 ('괴정2동', '괴정2동')
25 ('괴정3동', '괴정3동')
26 ('괴정4동', '괴정4동')
27 ('구서1동', '구서1동')
28 ('구서2동', '구서2동')
29 ('구평동', '구평동')
30 ('구포1동', '구포1동')
31 ('구포2동', '구포2동')
32 ('구포3동', '구포3동')
33 ('금곡동', '금곡동')
34 ('금사회동동', '금사회동동')
35 ('금성동', '금성동')
36 ('기장읍', '기장읍')
37 ('남부민1동', '남부민1동')
38 ('남부민2동', '남부민2동')
39 ('남산동', '남산동')
40 ('남천1동', '남천1동')
41 ('남천2동', '남천2동')
42 ('남포동', '남포동')
43 ('남항동', '남항동')
44 ('녹산동', '녹산동')
45 ('다대1동', '다대1동')
46 ('다대2동', '다대2동')
47 ('당감1동', '당감1동')
48 ('당감2동', '당감2동')
49 ('당감4동', '당감4동')
50 ('당리동', '당리동')
51 ('대연1동', '대연1동')
52 ('대연3동', '대연3동')
53 ('대연4동', '대연4동')
54 ('대연5동', '대연5동')
55 ('대연6동', '대연6동')
56 ('대저1동', '대저1동')
57 ('대저2동', '대저2동')
58 ('대청동', '대청동')
59 ('덕천1동', '덕천1동')
60 ('덕천2동', '덕천2동')
61 ('덕천3동', '덕천3동')
62 ('덕포1동', '덕포1동')
63 ('덕포2동', '덕포2동')
64 ('동광동', '동광동')
65 ('동대신1동', '동대신1동')
66 ('동대신2동', '동대신2동')
67 ('동대신3동', '동대신3동')
68 ('동삼1동', '동삼1동')
69 ('동삼2동', '동삼2동')
70 ('동삼3동', '동삼3동')
71 ('만덕1동', '만덕1동')
72 ('만덕2동', '만덕2동')
73 ('만덕3동', '만덕3동')
74 ('망미1동', '망미1동')
75 ('망미2동', '망미2동')
76 ('명륜동', '명륜동')
77 ('명장1동', '명장1동')
78 ('명장2동', '명장2동')
79 ('명지1동', '명지1동')
80 ('명지2동', '명지2동')
81 ('모라1동', '모라1동')
82 ('모라3동', '모라3동')
83 ('문현1동', '문현1동')
84 ('문현2동', '문현2동')
85 ('문현3동', '문현3동')
86 ('문현4동', '문현4동')
87 ('민락동', '민락동')
88 ('반송1동', '반송1동')
89 ('반송2동', '반송2동')
90 ('반여1동', '반여1동')
91 ('반여2동', '반여2동')
92 ('반여3동', '반여3동')
93 ('반여4동', '반여4동')
94 ('범일1동', '범일1동')
95 ('범일2동', '범일2동')
96 ('범일5동', '범일5동')
97 ('범천1동', '범천1동')
98 ('범천2동', '범천2동')
99 ('보수동', '보수동')
100 ('복산동', '복산동')
101 ('봉래1동', '봉래1동')
102 ('봉래2동', '봉래2동')
103 ('부곡1동', '부곡1동')
104 ('부곡2동', '부곡2동')
105 ('부곡3동', '부곡3동')
106 ('부곡4동', '부곡4동')
107 ('부민동', '부민동')
108 ('부암1동', '부암1동')
109 ('부암3동', '부암3동')
110 ('부전1동', '부전1동')
111 ('부전2동', '부전2동')
112 ('부평동', '부평동')
113 ('사직1동', '사직1동')
114 ('사직2동', '사직2동')
115 ('사직3동', '사직3동')
116 ('삼락동', '삼락동')
117 ('서1동', '서1동')
118 ('서2동', '서2동')
119 ('서3동', '서3동')
120 ('서대신1동', '서대신1동')
121 ('서대신3동', '서대신3동')
122 ('서대신4동', '서대신4동')
123 ('선두구동', '선두구동')
124 ('송정동', '송정동')
125 ('수민동', '수민동')
126 ('수영동', '수영동')
127 ('수정1동', '수정1동')
128 ('수정2동', '수정2동')
129 ('수정4동', '수정4동')
130 ('수정5동', '수정5동')
131 ('신선동', '신선동')
132 ('신평1동', '신평1동')
133 ('신평2동', '신평2동')
134 ('아미동', '아미동')
135 ('안락1동', '안락1동')
136 ('안락2동', '안락2동')
137 ('암남동', '암남동')
138 ('양정1동', '양정1동')
139 ('양정2동', '양정2동')
140 ('엄궁동', '엄궁동')
141 ('연산1동', '연산1동')
142 ('연산2동', '연산2동')
143 ('연산3동', '연산3동')
144 ('연산4동', '연산4동')
145 ('연산5동', '연산5동')
146 ('연산6동', '연산6동')
147 ('연산8동', '연산8동')
148 ('연산9동', '연산9동')
149 ('연지동', '연지동')
150 ('영선1동', '영선1동')
151 ('영선2동', '영선2동')
152 ('영주1동', '영주1동')
153 ('영주2동', '영주2동')
154 ('온천1동', '온천1동')
155 ('온천2동', '온천2동')
156 ('온천3동', '온천3동')
157 ('용당동', '용당동')
158 ('용호1동', '용호1동')
159 ('용호2동', '용호2동')
160 ('용호3동', '용호3동')
161 ('용호4동', '용호4동')
162 ('우1동', '우1동')
163 ('우2동', '우2동')
164 ('우3동', '우3동')
165 ('우암동', '우암동')
166 ('일광읍', '일광읍')
167 ('장림1동', '장림1동')
168 ('장림2동', '장림2동')
169 ('장안읍', '장안읍')
170 ('장전1동', '장전1동')
171 ('장전2동', '장전2동')
172 ('재송1동', '재송1동')
173 ('재송2동', '재송2동')
174 ('전포1동', '전포1동')
175 ('전포2동', '전포2동')
176 ('정관읍', '정관읍')
177 ('좌1동', '좌1동')
178 ('좌2동', '좌2동')
179 ('좌3동', '좌3동')
180 ('좌4동', '좌4동')
181 ('좌천동', '좌천동')
182 ('주례1동', '주례1동')
183 ('주례2동', '주례2동')
184 ('주례3동', '주례3동')
185 ('중1동', '중1동')
186 ('중2동', '중2동')
187 ('중앙동', '중앙동')
188 ('철마면', '철마면')
189 ('청룡노포동', '청룡노포동')
190 ('청학1동', '청학1동')
191 ('청학2동', '청학2동')
192 ('초량1동', '초량1동')
193 ('초량2동', '초량2동')
194 ('초량3동', '초량3동')
195 ('초량6동', '초량6동')
196 ('초읍동', '초읍동')
197 ('초장동', '초장동')
198 ('충무동', '충무동')
199 ('하단1동', '하단1동')
200 ('하단2동', '하단2동')
201 ('학장동', '학장동')
202 ('화명1동', '화명1동')
203 ('화명2동', '화명2동')
204 ('화명3동', '화명3동')
json_busan = {"type" : "FeatureCollection"} #기본틀
json_pick = [] #확인하는 용도
json_dong = []
#리스트안에 딕셔너리값
for item in jsondata['features']:
#print(item['properties']['sidonm'])
if item['properties']['sidonm'] == '부산광역시':
#print(item['properties']['sidonm'])
dong = item['properties']['adm_nm'].split()[-1].strip() #딕셔너리라서 .str 안 붙힘, strip() = 공백제거
if dong == '가야제1동':
dong = '가야1동'
item['id'] = dong
json_pick.append(item) #id값이 없어서 연결이 안 된다.
json_dong.append(dong)
json_busan['features']=json_pick
loc = [35.1795543,129.0756416]
m = folium.Map(loc,zoom_start=11)
folium.Choropleth(geo_data=json_busan,
data=busan,
columns=['동','총인구수'],
fill_color='OrRd',
fill_opacity=0.8,
key_on='feature.id').add_to(m)
m