데이터 과학 기반의 파이썬 빅데이터 분석 Chapter09 지리 정보 분석

2023. 1. 9. 23:27Python/데이터 과학 기반의 파이썬 빅데이터 분석(한빛 아카데미)

01 [주소 데이터 분석 + 지오맵]

지리 정보 분석 후 맵 생성하기

import pandas as pd
CB = pd.read_csv('CoffeeBean.csv', encoding = 'CP949', index_col = 0, header = 0, engine = 'python')
CB.head()   #작업 내용 확인용 출력

addr = []
for address in CB.address:
    addr.append(str(address).split())
addr    #작업 내용 확인용 출력
[['서울시', '강남구', '학동로', '211', '1층'],
 ['서울시', '강남구', '광평로', '280', '수서동', '724호'],
 ['서울시', '강남구', '논현로', '566', '강남차병원1층'],
 ['서울시', '서초구', '강남대로', '369', '1층'],
 ['서울', '강남구', '삼성동', '159', '코엑스몰', '지하2층'],
 ['서울시', '강남구', '압구정로', '46길', '3'],
 ['서울시', '서초구', '서초', '1306-3호'],
 ['서울시', '강남구', '압구정로', '461', '네이처포엠빌딩B108,109호'],
 ['서울시', '강남구', '도산대로', '126'],
 ['서울시', '강남구', '논현로', '842', '압구정빌딩1층'],
 ['서울시', '강남구', '논현로', '512', '지상1,2층'],
 ['서울시', '서초구', '강남대로', '213', '24호', '지하1층'],
 ['서울시', '강남구', '삼성로', '716', 'LEE76빌딩2층'],
 ['서울', '서초구', '반포동', '736-17', 'P빌딩', '2층'],
 ['서울시', '강남구', '언주로', '30길', '10,112', '현대비젼21', '112호'],
 ['서울시', '강남구', '선릉로', '749', '1,2층'],
 ['서울시', '강남구', '테헤란로', '87길', '17', '1층'],
 ['서울시', '서초구', '서초중앙로', '118', '1층'],
 ['서울시', '강남구', '선릉로', '64길', '23', '1층'],
 ['서울시', '강남구', '도산대로49길', '13', '1층', '17,18호'],
 ['서울시', '강남구', '선릉로', '157길', '12', '석전빌딩', '1~4층'],
 ['서울시', '서초구', '강남대로', '51길', '1', '511', 'TOWER', '1층'],
 ['서울시', '강남구', '논현', '231-13호', '팍스타워지하1층'],
 ['서울', '강남구', '영동대로', '513', '컨벤션별관A동', '지하', '2층'],
 ['서울시', '강남구', '영동대로', '511', '트레이드타워', '지하1층'],
 ['서울시', '강남구', '영동대로', '607', '12번지', '1,2층'],
 ['서울시', '강남구', '삼성로', '85길', '11', '롯데캐슬아파트생활편익시설동'],
 ['서울시', '서초구', '신반포로', '23', '1141호', '엘루체백화점내1층1013~1015호'],
 ['서울시', '송파구', '석촌호수로', '118', '1층'],
 ['서울시', '서초구', '서초동', '1685-8호', '101~2호,113~4호,121호'],
 ['서울시', '강남구', '논현로', '717', '1층'],
 ['서울시', '서초구', '서초대로74길', '11', '지하2층'],
 ['서울시', '서초구', '서초대로74길', '4', '삼성생명보험서초타워내지하1층'],
 ['서울특별시', '서초구', '방배중앙로', '187'],
 ['서울시', '강남구', '테헤란로', '20길', '10', '쓰리엠타워1층'],
 ['서울시', '강남구', '테헤란로', '70길', '12', '1층'],
 ['서울시', '서초구', '효령로', '117', '3,4층'],
 ['서울시', '강남구', '봉은사로', '628', '엘슨빌딩1층'],
 ['서울시', '송파구', '오금로', '11길', '7'],
 ['서울시', '강남구', '논현로', '38길', '42', '418호'],
 ['서울시', '서초구', '서초중앙로', '43', '로얄타워1층'],
 ['서울시', '강남구', '테헤란로4길', '28', '826-28호', '1층'],
 ['서울시', '강남구', '테헤란로87길', '36', '공항타워', '1층'],
 ['서울시', '강남구', '도산대로', '67길', '7,파크빌딩', '1층'],
 ['서울시', '용산구', '이촌로', '303', '현대아파트상가11동102호'],
 ['서울', '종로구', '서린동', '136', '센트리얼빌딩', '1층'],
 ['서울시', '종로구', '대학로', '10길', '5', '1-60호'],
 ['서울시', '종로구', '새문안로3길', '23', '경희궁아침상가4단지105외'],
 ['서울시', '마포구', '홍익로', '6길', '26'],
 ['서울시', '중구', '순화202', '1-94', '프레이저플레이스레지던스1층'],
 ['서울시', '종로구', '청계천로', '83', '11-4호', '지하1,지상1~3층'],
 ['서울', '중구', '남대문로7길', '16', '한컴빌딩', '1층'],
 ['서울시', '광진구', '광나루로56길', '85', '테크노마트9층35호'],
 ['서울시', '동대문구', '이문로', '106', '1~3층'],
 ['서울시', '성북구', '개운사길8', '101-3', '1층'],
 ['서울시', '중구', '칠패로', '27', '151호'],
 ['서울시', '성동구', '왕십리', '광장로', '17', '왕십리민자역사ENTER6내1층'],
 ['서울시', '서대문구', '신촌역로', '20', '27-27,16,65,61호'],
 ['서울', '종로구', '새문안로', '9길', '25', '1층'],
 ['서울시', '서대문구', '창천', '18-26호', 'B1'],
 ['서울시', '광진구', '자양동', '227-342호', '롯데백화점', '옆', '더클래식500건물', '1층'],
 ['서울시', '종로구', '사직로', '130,1', '현대적선빌딩1층'],
 ['서울시', '노원구', '한글비석로', '263', '1층'],
 ['서울시', '중구', '한강대로', '416', '지하1층'],
 ['서울시', '양천구', '목동동로', '293', '현대41타워1층'],
 ['서울', '영등포구', '국제금융로', '52', '심팩빌딩', '1층'],
 ['서울시', '영등포구', '의사당대로', '97', '26-4', '교보증권빌딩1층'],
 ['서울시', '금천구', '시흥대로', '201', '1층'],
 ['서울시', '영등포구', '여의서로', '43', '한서리버파크2층'],
 ['부산광역시', '중구', '창선동', '2가', '8-2'],
 ['인천광역시', '남동구', '예술로', '138', '지상1,2층'],
 ['대전시', '서구', '문정로76', '1층'],
 ['경기도', '고양시', '일산동구', '장항동', '764', '라페스타C동'],
 ['경기도', '고양시', '일산동구', '정발산로', '24', 'I동103~203호'],
 ['경기도', '성남시', '분당구', '분당로53번길', '11', '1층2,3호'],
 ['경기도', '성남시', '분당구', '황새울로', '326', '서현빌딩상가내2층'],
 ['경기도', '성남시', '분당구', '야탑동354', '분당차병원신관1층분당차1호'],
 ['경기도', '성남시', '분당구', '황새울로', '214번길8', 'MSPlaza내1층'],
 ['경기도', '화성시', '노작로', '199', '동탄라마다호텔107호~111호'],
 ['경기도', '고양시', '일산서구', '대화동', '2602', '현대백화점킨텍스점', '5F'],
 ['경남', '창원시', '성산구', '중앙대로', '104', '마이우스오피스텔', '123호', '207호'],
 ['충북', '청주시', '상당구', '상당로69번길20', '2~4층'],
 ['세종특별자치시', '세종로', '2511', '고대세종캠퍼스호연학사4관1층'],
 ['충북', '청주시', '흥덕구', '대농로', '17', '지웰시티몰', '1층', '124-1,125,126호'],
 ['서울', '중구', '세종대로', '136', '파이낸스빌딩'],
 ['서울시', '강남구', '테헤란로', '8길', '42', '1층'],
 ['서울시', '중구', '태평로1', '84호', 'SFC빌딩B1,1-4'],
 ['서울시', '중구', '후암로110', '581호', '서울시티타워1층'],
 ['서울시', '송파구', '양재대로', '1222', '올림픽선수A', '1층212~3호'],
 ['서울시', '종로구', '대학로', '12길', '62', '지하1층,지상1,2층'],
 ['서울시', '영등포구', '의사당대로', '108', '아일렉스상가', '1층', '101호'],
 ['서울시', '종로구', '낙원동', '272', '오라카이스위츠', '1층'],
 ['서울시', '강남구', '테헤란로', '312', '707-2번지1층'],
 ['서울시', '관악구', '관악로', '161', '층일부', '2,3층'],
 ['서울시', '강남구', '봉은사로', '524', '코엑스', '인터컨티넨탈아케이드'],
 ['서울시', '강북구', '도봉로', '352', '효성네오인텔리안', '101호'],
 ['서울시', '강남구', '논현로', '167길', '9', '낙산프라자', '1층'],
 ['서울시', '구로구', '경인로', '662', '디큐브시티', '4층'],
 ['서울시', '종로구', '삼청로', '109'],
 ['서울시', '중구', '퇴계로', '173', '남산스퀘어', '1층'],
 ['서울시', '영등포구', '국제금융로', '20', '1층'],
 ['서울시', '강남구', '테헤란로', '439'],
 ['서울시', '강남구', '선릉로93길', '6(역삼동)', '1층'],
 ['서울시', '강남구', '테헤란로1길', '29', '1층일부', '및', '2.3층'],
 ['서울시', '강남구', '삼성로', '551', '1층,2층'],
 ['서울시', '서초구', '사임당로', '171(서초동)', 'EWR빌딩', '2층'],
 ['서울시', '강남구', '선릉로86길', '11'],
 ['서울시', '종로구', '율곡로', '47', '1,2층'],
 ['서울시', '서초구', '강남대로', '449-3', '알고코리아빌딩', '1,2층'],
 ['서울시', '영등포구', '국제금융로10', 'IFC', 'B2층'],
 ['서울시', '마포구', '상암산로', '82', 'SBS프리즘타워', '1층'],
 ['서울시', '금천구', '디지털로9길', '23', '마리오-2관', '패션타워3층'],
 ['서울', '강남구', '테헤란로', '419', '삼성금융플라자1층'],
 ['서울시', '중구', '명동10길', '51', '나인트리호텔', '본관2층'],
 ['서울시', '용산구', '이태원로', '189'],
 ['서울시', '강남구', '압구정로12길', '6'],
 ['서울시', '서초구', '강남대로', '267', '2,3층'],
 ['서울시', '강동구', '천호대로', '1096', '1,2F'],
 ['서울시', '관악구', '신림로', '318', '청암두산위브센티움1층'],
 ['경기도', '수원시', '팔달구', '권광로', '195', '학산빌딩1층'],
 ['경기도', '성남시', '분당구', '동판교로177번길', '25'],
 ['경기도', '고양시', '일산서구', '한류월드로', '300', '원마운트스포츠몰', '1층'],
 ['서울시', '중구', '명동길', '73', '1,2층'],
 ['울산광역시', '남구', '삼산로', '261', '현대백화점5층'],
 ['대구광역시', '중구', '중앙대로', '412-18'],
 ['서울시', '영등포구', '의사당대로', '97', '교보증권빌딩', '2층'],
 ['서울시', '중랑구', '망우로', '353', '프레미어스엠코', '엔터식스', 'B동', '2층'],
 ['서울시', '영등포구', '국회대로74길19', '동우국제빌딩1층'],
 ['서울시', '양천구', '오목로', '299', '트라팰리스', '이스턴에비뉴', '1층'],
 ['서울시', '강남구', '압구정로29길65', '지하1층'],
 ['서울시', '강남구', '테헤란로143', '고운빌딩1층'],
 ['서울시', '중구', '세종대로84', '2층'],
 ['인천광역시', '부평구', '시장로29', '1,2층'],
 ['서울시', '강남구', '강남대로442', '흥국화재빌딩', '2층'],
 ['서울시', '구로구', '디지털로300', '지밸리비즈플라자', '2층'],
 ['서울시', '서초구', '방배로178', '유중아트센터1층'],
 ['경기도', '성남시', '분당구', '탄천상로151번길20', '월드쇼핑', 'B동', '1층'],
 ['서울시', '강남구', '테헤란로87길22', '도심공항터미널', '지하1층'],
 ['서울시', '영등포구', '영중로15', '타임스퀘어', '1층'],
 ['서울시', '강남구', '봉은사로207', 'KJ타워1층'],
 ['서울시', '성동구', '왕십리로241', '서울숲더샵', '판매시설201동', '지하2층'],
 ['서울시', '강남구', '테헤란로521', '파르나스몰', '지하1층'],
 ['서울시', '종로구', '새문안로5가길', '7', '1층', '일부'],
 ['경기', '김포시', '고촌읍', '전호리', '654번지', '현대프리미엄아울렛김포3층', '618호'],
 ['서울시', '영등포구', '국제금융로8길6', '신영증권별관빌딩2층'],
 ['서울시', '용산구', '이태원로220(한남동)', '1층'],
 ['서울시', '서초구', '서초대로73길12', '세계빌딩1층'],
 ['경기도', '수원시', '영통구', '이의동', '1332', '광교아브뉴프랑', '1층', 'A122,123호'],
 ['서울시', '광진구', '아차산로563(광장동)', '대한제지빌딩', '로비층'],
 ['서울시', '송파구', '올림픽로100', '효창타워1층'],
 ['경상북도', '포항시', '북구', '삼호로265번길1', 'NB-City복합시설1층104호'],
 ['서울시', '관악구', '남부순환로1909', '1,2층'],
 ['경상남도', '진주시', '충의로', '19', 'LH진주사옥', '홍보관1층'],
 ['인천광역시', '중구', '공항로272', '인천국제공항탑승동3층', 'FB-C5-57'],
 ['인천광역시', '중구', '공항로272', '인천국제공항탑승동3층', 'FB-C5-68'],
 ['서울시', '용산구', '한강대로23길55', '현대아이파크몰용산', '서관6층'],
 ['경상북도', '경주시', '엑스포로80(천군동)1층'],
 ['서울시', '송파구', '석촌호수로', '222', '제이타워', '1층'],
 ['서울시', '양천구', '오목로', '350', '목동썬텍씨티빌딩', '1층,2층'],
 ['서울시', '중구', '남대문로10길', '6', '1,2층'],
 ['서울시', '중구', '명동8길', '27(명동2가)'],
 ['인천광역시', '연수구', '송도국제대로', '165(송도동)', '홈플러스송도점1층'],
 ['서울시', '강동구', '강동대로193', '1층'],
 ['서울시', '성북구', '인촌로24길', '25', '(안암동5가)', '2층,3층'],
 ['서울특별시', '서초구', '반포대로4(서초동)', '2층,', '3층'],
 ['서울시', '강남구', '영동대로85길', '9', '(대치동)', '서전빌딩1층'],
 ['경기도', '안양시', '동안구', '평촌대로', '223번길', '41(호계동', '1045-9)', '2층'],
 ['서울특별시', '강남구', '삼성로86길', '11', '거봉빌딩', '1층'],
 ['서울시', '마포구', '성암로301', 'KLID한국지역정보개발원', '1층'],
 ['경기도', '성남시', '분당구', '판교역로145(백현동)', '판교알파돔', 'C2-3블럭', '1층'],
 ['서울특별시', '강남구', '영동대로', '225', '나무병원1층', '(대치동994-5)'],
 ['경기도', '성남시', '분당구', '정자일로', '227(정자동)', '백궁지엔느주차전용빌딩', '1층'],
 ['서울특별시', '강남구', '봉은사로108', '글라스톤빌딩1층'],
 ['서울시', '강서구', '화곡6동', '1095번지', '1층'],
 ['서울시', '마포구', '상암동', '1610번지', 'DDMC', '지하', '1층'],
 ['서울시', '서대문구', '대신동', '50-5', '1층,2층(B동)'],
 ['경기도', '안양시', '동안구', '시민대로327번길', '6,', 'W', '에이스타워', '1층'],
 ['경기도', '고양시', '일산동구', '중앙로', '1193', '마두법조빌딩', '1층'],
 ['경기도', '수원시', '팔달구', '매산로', '11,', '2층'],
 ['경기도', '부천시', '부천로4', '2층'],
 ['서울시', '동대문구', '장안동', '372-1,', '1층', '일부', '및', '2층', '전체'],
 ['서울시', '서초구', '서초대로', '250', '스타갤러리', '브릿지', '1층', '101호'],
 ['경기도', '수원시', '영통구', '영통로', '214번길', '8', '1층'],
 ['서울시', '강남구', '삼성로', '352', '창진빌딩', '1층', '및', '2층'],
 ['서울시', '서초구', '동산로', '1', '1층'],
 ['서울시', '영등포구', '문래동6가', '5번지', '1층'],
 ['부산시', '해운대구', '해운대', '해변로277', '다옴빌딩1층'],
 ['서울시', '강남구', '역삼동', '718-20', '태광타워', '1층'],
 ['경기', '용인시', '수지구', '손곡로', '95', '송란빌딩', '1층'],
 ['경기도', '파주시', '청암로', '17번길', '17', '1층'],
 ['서울시', '서초구', '신반포로47길', '5', '건물전체', '1~3층'],
 ['서울시', '강동구', '올림픽로', '659', '쌍용플래티넘리버', '1층'],
 ['경기도', '용인시', '기흥구', '강남로', '3', '강남앤플러스', '1층'],
 ['서울시', '마포구', '양화로18안길', '7', '2층'],
 ['경기도', '군포시', '광정로58', '1층', '104호', '및', '2층'],
 ['경기도', '부천시', '길주로', '111', '센타플라자', '1층'],
 ['경기도', '안양시', '만안구', '안양로304번길', '12', '세진빌딩', '2층'],
 ['강원도', '원주시', '봉화로1', 'AK플라자원주점', '1층'],
 ['서울특별시',
  '송파구',
  '송파대로',
  '111,',
  '송파',
  '파크하비오',
  '하비오길',
  '극장로',
  '203동',
  '지하1층'],
 ['경기도', '고양시', '덕양구', '화신로260번길', '26', '동민프라자', '1층', '103~107호'],
 ['서울특별시', '강남구', '테헤란로', '111', '2층'],
 ['서울특별시', '서초구', '서초대로', '397', '부띠크모나코', '1층'],
 ['서울특별시', '송파구', '송파대로', '111', '송파파크하비오', '205동', '1층', '110-113'],
 ['서울', '송파구', '문정동', '643-1번지', '엠스테이트', 'B동', '지하1층'],
 ['서울특별시', '중랑구', '망우로', '291', '1층'],
 ['서울특별시', '강동구', '동남로', '885', '양지빌딩', '1층'],
 ['서울시', '노원구', '노해로', '490,', '길빌딩', '2층'],
 ['서울시', '마포구', '독막로', '13,', '2층'],
 ['서울시', '종로구', '종로', '70', '2층'],
 ['경기도', '평택시', '평남로', '862,', '로이드빌딩', '1층'],
 ['서울시', '송파구', '방이동', '44-2,', '장은빌딩', '1층'],
 ['서울특별시', '강남구', '도곡동', '543-1,', '지오빌딩', 'B1층'],
 ['서울특별시',
  '강북구',
  '한천로',
  '139길',
  '25,',
  '1층',
  '일부',
  '및',
  '2층',
  '(수유동',
  '191-70)'],
 ['인천', '연수구', '송도과학로', '16번길', '33-4', 'D동', '119호,207호'],
 ['서울특별시', '광진구', '구의강변로', '106', '삼성쉐르빌', '1층'],
 ['서울특별시', '영등포구', '국제금융로8길31', '여의도SK증권빌딩점', '1층'],
 ['서울특별시', '송파구', '충민로', '66', '가든파이브', '라이프동', '테크노관', '1층'],
 ['서울특별시', '마포구', '월드컵로', '3길', '14,', '푸르지오', '2차', '1층'],
 ['서울시', '서초구', '강남대로', '475', '2층'],
 ['서울시', '송파구', '위례광장로', '230', '위례2차', '아이파크', 'B동', '1층'],
 ['서울특별시', '종로구', '대학로', '128', '2층'],
 ['서울특별시', '성북구', '삼선교로', '12', '1층'],
 ['서울특별시', '강남구', '도곡로', '408', '디마크빌딩', '1층'],
 ['서울특별시', '강남구', '강남대로112길', '20', '1층,', '2층'],
 ['부산광역시', '수영구', '수영로', '667', '1층'],
 ['부산광역시', '기장군', '정관로', '563', '1층,2층'],
 ['경기도', '수원시', '장안구', '경수대로', '989'],
 ['서울특별시', '마포구', '양화로', '196(동교동)'],
 ['경기도', '성남시', '수정구', '수정로', '190', '(신흥동)'],
 ['서울시', '은평구', '은평로', '121(응암동),', '메디컬빌딩'],
 ['경기도', '수원시', '권선구', '수인로', '291(구운동),', '이마트', '서수원점', '1층'],
 ['서울특별시', '강서구', '강서로', '457(마곡동)'],
 ['경기', '수원시', '장안구', '서부로', '2066,', '성균관대', '자연과학', '캠퍼스', 'N센터', '1층'],
 ['서울특별시', '강서구', '마곡동로', '55', '마커스빌딩', '1층'],
 ['서울', '송파구', '방이동', '206-11'],
 ['서울시', '영등포구', '국제금융로10', 'IFC', 'Mall', 'L2(2층)'],
 ['경기도', '화성시', '능동', '453-4,453-8,454-1', '소재', '건물(1~3층)'],
 ['경기도', '수원시', '팔달구', '인계로79', '(인계동)'],
 ['인천광역시', '중구', '운서동', '2868', '인천공항', '제2터미널', '1층', '연번(23-124)'],
 ['부산광역시', '부산진구', '서전로', '12,', '1층'],
 ['경기도', '성남시', '분당구', '야탑로64', 'DS타워', '1층'],
 ['서울시', '용산구', '한강대로95'],
 ['서울특별시', '강남구', '선릉로', '433', '세방빌딩', '1층']]
 
 addr2 = []

for i in range(len(addr)):
    if addr[i][0] == "서울": addr[i][0] = "서울특별시"
    elif addr[i][0] == "서울시": addr[i][0] = "서울특별시"
    elif addr[i][0] == "부산시": addr[i][0] = "부산광역시"
    elif addr[i][0] == "인천": addr[i][0] = "인천광역시"
    elif addr[i][0] == "광주": addr[i][0] = "광주광역시"
    elif addr[i][0] == "대전시": addr[i][0] = "대전광역시"
    elif addr[i][0] == "울산시": addr[i][0] = "울산광역시"
    elif addr[i][0] == "세종시": addr[i][0] = "세종특별자치시"
    elif addr[i][0] == "경기": addr[i][0] = "경기도"
    elif addr[i][0] == "충북": addr[i][0] = "충청북도"
    elif addr[i][0] == "충남": addr[i][0] = "충청남도"
    elif addr[i][0] == "전북": addr[i][0] = "전라북도"
    elif addr[i][0] == "전남": addr[i][0] = "전라남도"
    elif addr[i][0] == "경북": addr[i][0] = "경상북도"
    elif addr[i][0] == "경남": addr[i][0] = "경상남도"
    elif addr[i][0] == "제주": addr[i][0] = "제주특별자치도"
    elif addr[i][0] == "제주도": addr[i][0] = "제주특별자치도"
    elif addr[i][0] == "제주시": addr[i][0] = "제주특별자치도"

    addr2.append(' '.join(addr[i]))

addr2   #작업 내용 확인용 출력
['서울특별시 강남구 학동로 211 1층',
 '서울특별시 강남구 광평로 280 수서동 724호',
 '서울특별시 강남구 논현로 566 강남차병원1층',
 '서울특별시 서초구 강남대로 369 1층',
 '서울특별시 강남구 삼성동 159 코엑스몰 지하2층',
 '서울특별시 강남구 압구정로 46길 3',
 '서울특별시 서초구 서초 1306-3호',
 '서울특별시 강남구 압구정로 461 네이처포엠빌딩B108,109호',
 '서울특별시 강남구 도산대로 126',
 '서울특별시 강남구 논현로 842 압구정빌딩1층',
 '서울특별시 강남구 논현로 512 지상1,2층',
 '서울특별시 서초구 강남대로 213 24호 지하1층',
 '서울특별시 강남구 삼성로 716 LEE76빌딩2층',
 '서울특별시 서초구 반포동 736-17 P빌딩 2층',
 '서울특별시 강남구 언주로 30길 10,112 현대비젼21 112호',
 '서울특별시 강남구 선릉로 749 1,2층',
 '서울특별시 강남구 테헤란로 87길 17 1층',
 '서울특별시 서초구 서초중앙로 118 1층',
 '서울특별시 강남구 선릉로 64길 23 1층',
 '서울특별시 강남구 도산대로49길 13 1층 17,18호',
 '서울특별시 강남구 선릉로 157길 12 석전빌딩 1~4층',
 '서울특별시 서초구 강남대로 51길 1 511 TOWER 1층',
 '서울특별시 강남구 논현 231-13호 팍스타워지하1층',
 '서울특별시 강남구 영동대로 513 컨벤션별관A동 지하 2층',
 '서울특별시 강남구 영동대로 511 트레이드타워 지하1층',
 '서울특별시 강남구 영동대로 607 12번지 1,2층',
 '서울특별시 강남구 삼성로 85길 11 롯데캐슬아파트생활편익시설동',
 '서울특별시 서초구 신반포로 23 1141호 엘루체백화점내1층1013~1015호',
 '서울특별시 송파구 석촌호수로 118 1층',
 '서울특별시 서초구 서초동 1685-8호 101~2호,113~4호,121호',
 '서울특별시 강남구 논현로 717 1층',
 '서울특별시 서초구 서초대로74길 11 지하2층',
 '서울특별시 서초구 서초대로74길 4 삼성생명보험서초타워내지하1층',
 '서울특별시 서초구 방배중앙로 187',
 '서울특별시 강남구 테헤란로 20길 10 쓰리엠타워1층',
 '서울특별시 강남구 테헤란로 70길 12 1층',
 '서울특별시 서초구 효령로 117 3,4층',
 '서울특별시 강남구 봉은사로 628 엘슨빌딩1층',
 '서울특별시 송파구 오금로 11길 7',
 '서울특별시 강남구 논현로 38길 42 418호',
 '서울특별시 서초구 서초중앙로 43 로얄타워1층',
 '서울특별시 강남구 테헤란로4길 28 826-28호 1층',
 '서울특별시 강남구 테헤란로87길 36 공항타워 1층',
 '서울특별시 강남구 도산대로 67길 7,파크빌딩 1층',
 '서울특별시 용산구 이촌로 303 현대아파트상가11동102호',
 '서울특별시 종로구 서린동 136 센트리얼빌딩 1층',
 '서울특별시 종로구 대학로 10길 5 1-60호',
 '서울특별시 종로구 새문안로3길 23 경희궁아침상가4단지105외',
 '서울특별시 마포구 홍익로 6길 26',
 '서울특별시 중구 순화202 1-94 프레이저플레이스레지던스1층',
 '서울특별시 종로구 청계천로 83 11-4호 지하1,지상1~3층',
 '서울특별시 중구 남대문로7길 16 한컴빌딩 1층',
 '서울특별시 광진구 광나루로56길 85 테크노마트9층35호',
 '서울특별시 동대문구 이문로 106 1~3층',
 '서울특별시 성북구 개운사길8 101-3 1층',
 '서울특별시 중구 칠패로 27 151호',
 '서울특별시 성동구 왕십리 광장로 17 왕십리민자역사ENTER6내1층',
 '서울특별시 서대문구 신촌역로 20 27-27,16,65,61호',
 '서울특별시 종로구 새문안로 9길 25 1층',
 '서울특별시 서대문구 창천 18-26호 B1',
 '서울특별시 광진구 자양동 227-342호 롯데백화점 옆 더클래식500건물 1층',
 '서울특별시 종로구 사직로 130,1 현대적선빌딩1층',
 '서울특별시 노원구 한글비석로 263 1층',
 '서울특별시 중구 한강대로 416 지하1층',
 '서울특별시 양천구 목동동로 293 현대41타워1층',
 '서울특별시 영등포구 국제금융로 52 심팩빌딩 1층',
 '서울특별시 영등포구 의사당대로 97 26-4 교보증권빌딩1층',
 '서울특별시 금천구 시흥대로 201 1층',
 '서울특별시 영등포구 여의서로 43 한서리버파크2층',
 '부산광역시 중구 창선동 2가 8-2',
 '인천광역시 남동구 예술로 138 지상1,2층',
 '대전광역시 서구 문정로76 1층',
 '경기도 고양시 일산동구 장항동 764 라페스타C동',
 '경기도 고양시 일산동구 정발산로 24 I동103~203호',
 '경기도 성남시 분당구 분당로53번길 11 1층2,3호',
 '경기도 성남시 분당구 황새울로 326 서현빌딩상가내2층',
 '경기도 성남시 분당구 야탑동354 분당차병원신관1층분당차1호',
 '경기도 성남시 분당구 황새울로 214번길8 MSPlaza내1층',
 '경기도 화성시 노작로 199 동탄라마다호텔107호~111호',
 '경기도 고양시 일산서구 대화동 2602 현대백화점킨텍스점 5F',
 '경상남도 창원시 성산구 중앙대로 104 마이우스오피스텔 123호 207호',
 '충청북도 청주시 상당구 상당로69번길20 2~4층',
 '세종특별자치시 세종로 2511 고대세종캠퍼스호연학사4관1층',
 '충청북도 청주시 흥덕구 대농로 17 지웰시티몰 1층 124-1,125,126호',
 '서울특별시 중구 세종대로 136 파이낸스빌딩',
 '서울특별시 강남구 테헤란로 8길 42 1층',
 '서울특별시 중구 태평로1 84호 SFC빌딩B1,1-4',
 '서울특별시 중구 후암로110 581호 서울시티타워1층',
 '서울특별시 송파구 양재대로 1222 올림픽선수A 1층212~3호',
 '서울특별시 종로구 대학로 12길 62 지하1층,지상1,2층',
 '서울특별시 영등포구 의사당대로 108 아일렉스상가 1층 101호',
 '서울특별시 종로구 낙원동 272 오라카이스위츠 1층',
 '서울특별시 강남구 테헤란로 312 707-2번지1층',
 '서울특별시 관악구 관악로 161 층일부 2,3층',
 '서울특별시 강남구 봉은사로 524 코엑스 인터컨티넨탈아케이드',
 '서울특별시 강북구 도봉로 352 효성네오인텔리안 101호',
 '서울특별시 강남구 논현로 167길 9 낙산프라자 1층',
 '서울특별시 구로구 경인로 662 디큐브시티 4층',
 '서울특별시 종로구 삼청로 109',
 '서울특별시 중구 퇴계로 173 남산스퀘어 1층',
 '서울특별시 영등포구 국제금융로 20 1층',
 '서울특별시 강남구 테헤란로 439',
 '서울특별시 강남구 선릉로93길 6(역삼동) 1층',
 '서울특별시 강남구 테헤란로1길 29 1층일부 및 2.3층',
 '서울특별시 강남구 삼성로 551 1층,2층',
 '서울특별시 서초구 사임당로 171(서초동) EWR빌딩 2층',
 '서울특별시 강남구 선릉로86길 11',
 '서울특별시 종로구 율곡로 47 1,2층',
 '서울특별시 서초구 강남대로 449-3 알고코리아빌딩 1,2층',
 '서울특별시 영등포구 국제금융로10 IFC B2층',
 '서울특별시 마포구 상암산로 82 SBS프리즘타워 1층',
 '서울특별시 금천구 디지털로9길 23 마리오-2관 패션타워3층',
 '서울특별시 강남구 테헤란로 419 삼성금융플라자1층',
 '서울특별시 중구 명동10길 51 나인트리호텔 본관2층',
 '서울특별시 용산구 이태원로 189',
 '서울특별시 강남구 압구정로12길 6',
 '서울특별시 서초구 강남대로 267 2,3층',
 '서울특별시 강동구 천호대로 1096 1,2F',
 '서울특별시 관악구 신림로 318 청암두산위브센티움1층',
 '경기도 수원시 팔달구 권광로 195 학산빌딩1층',
 '경기도 성남시 분당구 동판교로177번길 25',
 '경기도 고양시 일산서구 한류월드로 300 원마운트스포츠몰 1층',
 '서울특별시 중구 명동길 73 1,2층',
 '울산광역시 남구 삼산로 261 현대백화점5층',
 '대구광역시 중구 중앙대로 412-18',
 '서울특별시 영등포구 의사당대로 97 교보증권빌딩 2층',
 '서울특별시 중랑구 망우로 353 프레미어스엠코 엔터식스 B동 2층',
 '서울특별시 영등포구 국회대로74길19 동우국제빌딩1층',
 '서울특별시 양천구 오목로 299 트라팰리스 이스턴에비뉴 1층',
 '서울특별시 강남구 압구정로29길65 지하1층',
 '서울특별시 강남구 테헤란로143 고운빌딩1층',
 '서울특별시 중구 세종대로84 2층',
 '인천광역시 부평구 시장로29 1,2층',
 '서울특별시 강남구 강남대로442 흥국화재빌딩 2층',
 '서울특별시 구로구 디지털로300 지밸리비즈플라자 2층',
 '서울특별시 서초구 방배로178 유중아트센터1층',
 '경기도 성남시 분당구 탄천상로151번길20 월드쇼핑 B동 1층',
 '서울특별시 강남구 테헤란로87길22 도심공항터미널 지하1층',
 '서울특별시 영등포구 영중로15 타임스퀘어 1층',
 '서울특별시 강남구 봉은사로207 KJ타워1층',
 '서울특별시 성동구 왕십리로241 서울숲더샵 판매시설201동 지하2층',
 '서울특별시 강남구 테헤란로521 파르나스몰 지하1층',
 '서울특별시 종로구 새문안로5가길 7 1층 일부',
 '경기도 김포시 고촌읍 전호리 654번지 현대프리미엄아울렛김포3층 618호',
 '서울특별시 영등포구 국제금융로8길6 신영증권별관빌딩2층',
 '서울특별시 용산구 이태원로220(한남동) 1층',
 '서울특별시 서초구 서초대로73길12 세계빌딩1층',
 '경기도 수원시 영통구 이의동 1332 광교아브뉴프랑 1층 A122,123호',
 '서울특별시 광진구 아차산로563(광장동) 대한제지빌딩 로비층',
 '서울특별시 송파구 올림픽로100 효창타워1층',
 '경상북도 포항시 북구 삼호로265번길1 NB-City복합시설1층104호',
 '서울특별시 관악구 남부순환로1909 1,2층',
 '경상남도 진주시 충의로 19 LH진주사옥 홍보관1층',
 '인천광역시 중구 공항로272 인천국제공항탑승동3층 FB-C5-57',
 '인천광역시 중구 공항로272 인천국제공항탑승동3층 FB-C5-68',
 '서울특별시 용산구 한강대로23길55 현대아이파크몰용산 서관6층',
 '경상북도 경주시 엑스포로80(천군동)1층',
 '서울특별시 송파구 석촌호수로 222 제이타워 1층',
 '서울특별시 양천구 오목로 350 목동썬텍씨티빌딩 1층,2층',
 '서울특별시 중구 남대문로10길 6 1,2층',
 '서울특별시 중구 명동8길 27(명동2가)',
 '인천광역시 연수구 송도국제대로 165(송도동) 홈플러스송도점1층',
 '서울특별시 강동구 강동대로193 1층',
 '서울특별시 성북구 인촌로24길 25 (안암동5가) 2층,3층',
 '서울특별시 서초구 반포대로4(서초동) 2층, 3층',
 '서울특별시 강남구 영동대로85길 9 (대치동) 서전빌딩1층',
 '경기도 안양시 동안구 평촌대로 223번길 41(호계동 1045-9) 2층',
 '서울특별시 강남구 삼성로86길 11 거봉빌딩 1층',
 '서울특별시 마포구 성암로301 KLID한국지역정보개발원 1층',
 '경기도 성남시 분당구 판교역로145(백현동) 판교알파돔 C2-3블럭 1층',
 '서울특별시 강남구 영동대로 225 나무병원1층 (대치동994-5)',
 '경기도 성남시 분당구 정자일로 227(정자동) 백궁지엔느주차전용빌딩 1층',
 '서울특별시 강남구 봉은사로108 글라스톤빌딩1층',
 '서울특별시 강서구 화곡6동 1095번지 1층',
 '서울특별시 마포구 상암동 1610번지 DDMC 지하 1층',
 '서울특별시 서대문구 대신동 50-5 1층,2층(B동)',
 '경기도 안양시 동안구 시민대로327번길 6, W 에이스타워 1층',
 '경기도 고양시 일산동구 중앙로 1193 마두법조빌딩 1층',
 '경기도 수원시 팔달구 매산로 11, 2층',
 '경기도 부천시 부천로4 2층',
 '서울특별시 동대문구 장안동 372-1, 1층 일부 및 2층 전체',
 '서울특별시 서초구 서초대로 250 스타갤러리 브릿지 1층 101호',
 '경기도 수원시 영통구 영통로 214번길 8 1층',
 '서울특별시 강남구 삼성로 352 창진빌딩 1층 및 2층',
 '서울특별시 서초구 동산로 1 1층',
 '서울특별시 영등포구 문래동6가 5번지 1층',
 '부산광역시 해운대구 해운대 해변로277 다옴빌딩1층',
 '서울특별시 강남구 역삼동 718-20 태광타워 1층',
 '경기도 용인시 수지구 손곡로 95 송란빌딩 1층',
 '경기도 파주시 청암로 17번길 17 1층',
 '서울특별시 서초구 신반포로47길 5 건물전체 1~3층',
 '서울특별시 강동구 올림픽로 659 쌍용플래티넘리버 1층',
 '경기도 용인시 기흥구 강남로 3 강남앤플러스 1층',
 '서울특별시 마포구 양화로18안길 7 2층',
 '경기도 군포시 광정로58 1층 104호 및 2층',
 '경기도 부천시 길주로 111 센타플라자 1층',
 '경기도 안양시 만안구 안양로304번길 12 세진빌딩 2층',
 '강원도 원주시 봉화로1 AK플라자원주점 1층',
 '서울특별시 송파구 송파대로 111, 송파 파크하비오 하비오길 극장로 203동 지하1층',
 '경기도 고양시 덕양구 화신로260번길 26 동민프라자 1층 103~107호',
 '서울특별시 강남구 테헤란로 111 2층',
 '서울특별시 서초구 서초대로 397 부띠크모나코 1층',
 '서울특별시 송파구 송파대로 111 송파파크하비오 205동 1층 110-113',
 '서울특별시 송파구 문정동 643-1번지 엠스테이트 B동 지하1층',
 '서울특별시 중랑구 망우로 291 1층',
 '서울특별시 강동구 동남로 885 양지빌딩 1층',
 '서울특별시 노원구 노해로 490, 길빌딩 2층',
 '서울특별시 마포구 독막로 13, 2층',
 '서울특별시 종로구 종로 70 2층',
 '경기도 평택시 평남로 862, 로이드빌딩 1층',
 '서울특별시 송파구 방이동 44-2, 장은빌딩 1층',
 '서울특별시 강남구 도곡동 543-1, 지오빌딩 B1층',
 '서울특별시 강북구 한천로 139길 25, 1층 일부 및 2층 (수유동 191-70)',
 '인천광역시 연수구 송도과학로 16번길 33-4 D동 119호,207호',
 '서울특별시 광진구 구의강변로 106 삼성쉐르빌 1층',
 '서울특별시 영등포구 국제금융로8길31 여의도SK증권빌딩점 1층',
 '서울특별시 송파구 충민로 66 가든파이브 라이프동 테크노관 1층',
 '서울특별시 마포구 월드컵로 3길 14, 푸르지오 2차 1층',
 '서울특별시 서초구 강남대로 475 2층',
 '서울특별시 송파구 위례광장로 230 위례2차 아이파크 B동 1층',
 '서울특별시 종로구 대학로 128 2층',
 '서울특별시 성북구 삼선교로 12 1층',
 '서울특별시 강남구 도곡로 408 디마크빌딩 1층',
 '서울특별시 강남구 강남대로112길 20 1층, 2층',
 '부산광역시 수영구 수영로 667 1층',
 '부산광역시 기장군 정관로 563 1층,2층',
 '경기도 수원시 장안구 경수대로 989',
 '서울특별시 마포구 양화로 196(동교동)',
 '경기도 성남시 수정구 수정로 190 (신흥동)',
 '서울특별시 은평구 은평로 121(응암동), 메디컬빌딩',
 '경기도 수원시 권선구 수인로 291(구운동), 이마트 서수원점 1층',
 '서울특별시 강서구 강서로 457(마곡동)',
 '경기도 수원시 장안구 서부로 2066, 성균관대 자연과학 캠퍼스 N센터 1층',
 '서울특별시 강서구 마곡동로 55 마커스빌딩 1층',
 '서울특별시 송파구 방이동 206-11',
 '서울특별시 영등포구 국제금융로10 IFC Mall L2(2층)',
 '경기도 화성시 능동 453-4,453-8,454-1 소재 건물(1~3층)',
 '경기도 수원시 팔달구 인계로79 (인계동)',
 '인천광역시 중구 운서동 2868 인천공항 제2터미널 1층 연번(23-124)',
 '부산광역시 부산진구 서전로 12, 1층',
 '경기도 성남시 분당구 야탑로64 DS타워 1층',
 '서울특별시 용산구 한강대로95',
 '서울특별시 강남구 선릉로 433 세방빌딩 1층']
 
 addr2 = pd.DataFrame(addr2, columns = ['address2'])
 
CB2 = pd.concat([CB, addr2], axis = 1)
CB2.head()  #작업 내용 확인용 출력

CB2.to_csv('CoffeeBean_2.csv', encoding = 'CP949', index = False)

분석 모델 구축 및 시각화

!pip install folium
import folium
Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/
Requirement already satisfied: folium in /usr/local/lib/python3.8/dist-packages (0.12.1.post1)
Requirement already satisfied: branca>=0.3.0 in /usr/local/lib/python3.8/dist-packages (from folium) (0.6.0)
Requirement already satisfied: jinja2>=2.9 in /usr/local/lib/python3.8/dist-packages (from folium) (2.11.3)
Requirement already satisfied: numpy in /usr/local/lib/python3.8/dist-packages (from folium) (1.21.6)
Requirement already satisfied: requests in /usr/local/lib/python3.8/dist-packages (from folium) (2.25.1)
Requirement already satisfied: MarkupSafe>=0.23 in /usr/local/lib/python3.8/dist-packages (from jinja2>=2.9->folium) (2.0.1)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in /usr/local/lib/python3.8/dist-packages (from requests->folium) (1.24.3)
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.8/dist-packages (from requests->folium) (2022.12.7)
Requirement already satisfied: chardet<5,>=3.0.2 in /usr/local/lib/python3.8/dist-packages (from requests->folium) (4.0.0)
Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.8/dist-packages (from requests->folium) (2.10)

map_osm = folium.Map(location = [37.559978, 126.975291], zoom_start = 16)
map_osm.save('map.html')
  • Geocoder-Xr 웹버전으로 업데이트, 교재 내용대로 실습하는데 실패했습니다.

02 [행정구역별 데이터 분석 + 블록맵]

행정구역별 의료기관 현황 분석하기

import pandas as pd
pd.set_option('mode.chained_assignment', None)
import numpy as np

data = pd.read_csv('공공보건의료기관현황.csv', index_col = 0, encoding = 'CP949', engine = 'python')
data.head() #작업 확인용 출력

# 주소에서 시도, 군구 정보 분리
addr = pd.DataFrame(data['주소'].apply(lambda v: v.split()[:2]).tolist(), columns = ('시도', '군구'))
addr.head() #작업 확인용 출력

addr['시도'].unique()
array(['강원도', '경기도', '경기', '경남', '창원시', '경상남도', '경상북도', '경산시', '경북',
       '인천광역시', '대구광역시', '전라남도', '대전광역시', '광주광역시', '제주특별자치도', '부산광역시',
       '전라북도', '충북', '서울특별시', '서울시', '부산특별시', '대전시', '충남', '전남', '충청남도',
       '울산광역시', '전북', '천안시', '충청북도'], dtype=object)
       
addr[addr['시도'] == '창원시']

addr.iloc[27]
시도    경상남도
군구     창원시
Name: 27, dtype: object

addr.iloc[31]
시도    경상남도
군구     창원시
Name: 31, dtype: object

addr[addr['시도'] == '경산시']

addr.iloc[47] = ['경상북도', '경산시']

addr[addr['시도'] == '천안시']

addr.iloc[209] = ['충청남도', '천안시']
addr.iloc[210] = ['충청남도', '천안시']

addr['시도'].unique
<bound method Series.unique of 0       강원도
1       강원도
2       강원도
3       강원도
4       강원도
       ... 
222    충청북도
223    충청북도
224    충청북도
225    충청북도
226    충청북도
Name: 시도, Length: 227, dtype: object>

addr_aliases = {'경기':'경기도', '경남':'경상남도', '경북':'경상북도', '충북':'충청북도', '서울시':'서울특별시', '부산특별시':'부산광역시',
                '대전시':'대전광역시', '충남':'충청남도', '전남':'전라남도', '전북':'전라북도'}

addr['시도'] = addr['시도'].apply(lambda v: addr_aliases.get(v, v))

addr['시도'].unique()
array(['강원도', '경기도', '경상남도', '경상북도', '인천광역시', '대구광역시', '전라남도', '대전광역시',
       '광주광역시', '제주특별자치도', '부산광역시', '전라북도', '충청북도', '서울특별시', '충청남도',
       '울산광역시'], dtype=object)
       
addr['군구'].unique()
array(['춘천시', '삼척시', '영월군', '원주시', '강릉시', '속초시', '정선군', '수원시', '이천시',
       '안성시', '의정부시', '포천시', '파주시', '용인시', '평택시', '시흥시', '여주시', '남양주시',
       '동두천시', '안산시', '부천시', '통영시', '사천시', '창원시', '김해시', '양산시', '거창군',
       '남해군', '의령군', '포항시', '김천시', '안동시', '울진군', '경주시', '구미시', '영주시',
       '상주시', '문경시', '경산시', '의성군', '청도군', '고령군', '칠곡군', '봉화군', '울릉군',
       '부평구', '북구', '순천시', '대덕구', '태백시', '동해시', '화성시', '광산구', '남구', '중구',
       '아란13길', '서구', '전주시', '진주시', '청주시', '종로구', '성남시', '동구', '화순군',
       '강동구', '사상구', '달서구', '해운대구', '유성구', '가평군', '양주시', '고양시', '홍천군',
       '양구군', '청원군', '계룡시', '논산시', '함평군', '양평군', '수성구', '달성군', '연수구',
       '노원구', '기장군', '공주시', '강북구', '광진구', '나주시', '창녕군', '목포시', '고흥군',
       '연제구', '동매로', '서초구', '은평구', '중랑구', '강남구', '동작구', '동대문구', '양천구',
       '성동구', '송파구', '울주군', '계양구', '옹진군', '보성군', '광양시', '영광군', '무안군',
       '진도군', '강진군', '곡성군', '여수시', '신안군', '장성군', '완주군', '부안군', '정읍시',
       '남원시', '군산시', '고창군', '진안군', '제주시', '서귀포시', '천안시', '보령시', '서산시',
       '서천군', '홍성군', '제천시', '충주시', '영동군', '단양군'], dtype=object)
       
addr[addr['군구'] == '아란13길']

addr.iloc[75] = ['제주특별자치도', '제주시']

addr['시도군구'] = addr.apply(lambda r: r['시도']+ ' ' + r['군구'], axis = 1)
addr.head()     #작업 확인용 출력

addr['count'] = 0
addr.head()     #작업 확인용 출력

addr_group = pd.DataFrame(addr.groupby(['시도', '군구', '시도군구'],
                                       as_index = False).count())
addr_group.head()   #작업 확인용 출력

addr_group = addr_group.set_index("시도군구")
addr_group.head()   #작업 확인용 출력

행정구역별 인구수 데이터 준비하기

population = pd.read_excel('행정구역_시군구_별__성별_인구수_2.xlsx')
population.head()   #작업 확인용 출력

population = population.rename(columns = {'행정구역(시군구)별(1)': '시도', '행정구역(시군구)별(2)': '군구'})

population.head()   #작업 확인용 출력

for element in range(0, len(population)):
    population['군구'][element] = population['군구'][element].strip()
    
population['시도군구'] = population.apply(lambda r: r['시도'] + ' ' + r['군구'], axis = 1)
population.head()   #작업 확인용 출력

population = population[population.군구 != '소계']

population = population.set_index("시도군구")

population.head()

addr_population_merge = pd.merge(addr_group, population, how = 'inner', left_index = True, right_index = True)
addr_population_merge.head()    #작업 확인용 출력

local_MC_Population = addr_population_merge[['시도_x', '군구_x', 'count', '총인구수 (명)']]
local_MC_Population.head()  #작업 확인용 출력

#컬럼 이름 변경
local_MC_Population = local_MC_Population.rename(columns = {'시도_x': '시도', '군구_x': '군구', '총인구수 (명)': '인구수'})

MC_count = local_MC_Population['count']
local_MC_Population['MC_ratio'] = MC_count.div(local_MC_Population['인구수'], axis = 0)*100000
local_MC_Population.head()  #작업 확인용 출력

분석 모델 구축 및 시각화

sudo apt-get install -y fonts-nanum
!sudo fc-cache -fv
!rm ~/.cache/matplotlib -rf
Reading package lists... Done
Building dependency tree       
Reading state information... Done
fonts-nanum is already the newest version (20170925-1).
The following package was automatically installed and is no longer required:
  libnvidia-common-460
Use 'sudo apt autoremove' to remove it.
0 upgraded, 0 newly installed, 0 to remove and 21 not upgraded.
/usr/share/fonts: caching, new cache contents: 0 fonts, 1 dirs
/usr/share/fonts/truetype: caching, new cache contents: 0 fonts, 3 dirs
/usr/share/fonts/truetype/humor-sans: caching, new cache contents: 1 fonts, 0 dirs
/usr/share/fonts/truetype/liberation: caching, new cache contents: 16 fonts, 0 dirs
/usr/share/fonts/truetype/nanum: caching, new cache contents: 10 fonts, 0 dirs
/usr/local/share/fonts: caching, new cache contents: 0 fonts, 0 dirs
/root/.local/share/fonts: skipping, no such directory
/root/.fonts: skipping, no such directory
/var/cache/fontconfig: cleaning cache directory
/root/.cache/fontconfig: not cleaning non-existent cache directory
/root/.fontconfig: not cleaning non-existent cache directory
fc-cache: succeeded

from matplotlib import pyplot as plt
from matplotlib import rcParams, style
style.use('ggplot')
rc('font', family = 'NanumBarunGothic')

MC_ratio = local_MC_Population[['count']]
MC_ratio = MC_ratio.sort_values('count', ascending = False)
plt.rcParams["figure.figsize"] = (25, 5)
MC_ratio.plot(kind = 'bar', rot = 90)
plt.show()
/usr/local/lib/python3.8/dist-packages/matplotlib/backends/backend_agg.py:183: RuntimeWarning: Glyph 52832 missing from current font.
  font.set_text(s, 0, flags=flags)
  .
  .
  .
  /usr/local/lib/python3.8/dist-packages/matplotlib/backends/backend_agg.py:183: RuntimeWarning: Glyph 52832 missing from current font.
  font.set_text(s, 0, flags=flags)

MC_ratio = local_MC_Population[['MC_ratio']]
MC_ratio = MC_ratio.sort_values('MC_ratio', ascending = False)
plt.rcParams["figure.figsize"] = (25, 5)
MC_ratio.plot(kind = 'bar', rot = 90)
plt.show
<function matplotlib.pyplot.show(*args, **kw)>

블록맵으로 시각화하기

import os
path = os.getcwd()

data_draw_korea = pd.read_csv(path+'/data_draw_korea.csv',
                              index_col = 0, encoding = 'UTF-8', engine = 'python')

data_draw_korea.head()  #작업 확인용 출력

data_draw_korea['시도군구'] = data_draw_korea.apply(lambda r: r['광역시도']+' '+ r['행정구역'], axis = 1)

data_draw_korea = data_draw_korea.set_index("시도군구")

data_draw_korea.head()  #작업 확인용 출력

data_draw_korea_MC_Population_all = pd.merge(data_draw_korea,local_MC_Population,
                                             how = 'outer', left_index = True, right_index = True)

data_draw_korea_MC_Population_all.head()

BORDER_LINES = [
    [(3, 2), (5, 2), (5, 3), (9, 3), (9, 1)], # 인천
    [(2, 5), (3, 5), (3, 4), (8, 4), (8, 7), (7, 7), (7, 9), (4, 9), (4, 7), (1, 7)], # 서울
    [(1, 6), (1, 9), (3, 9), (3, 10), (8, 10), (8, 9),
     (9, 9), (9, 8), (10, 8), (10, 5), (9, 5), (9, 3)], # 경기도
     [(9, 12), (9, 10), (8, 10)], # 강원도
     [(10, 5), (11, 5), (11, 4), (12, 4), (12, 5), (13, 5),
     (13, 4), (14, 4), (14, 2)], # 충청남도
     [(11, 5), (12, 5), (12, 6), (15, 6), (15, 7), (13, 7),
      (13, 8), (11, 8), (11, 9), (10, 9), (10, 8)], #충청북도
      [(14, 4), (15, 4), (15, 6)], #대전시
      [(14, 7), (14, 9), (13, 9), (13, 11), (13, 13)], #경상북도
      [(14, 8), (16, 8), (16, 10), (15, 10),
       (15, 11), (14, 11), (14, 12), (13, 12)], #대구시
      [(15, 11), (16, 11), (16, 13)], # 울산시
      [(17, 1), (17, 3), (18, 3), (18, 6), (15, 6)], #전라북도
      [(19, 2), (19, 4), (21, 4), (21, 3), (22, 3), (22, 2), (19, 2)], #광주시
      [(18, 5), (20, 5), (20, 6)], #전라남도
      [(16, 9), (18, 9), (18, 8), (19, 8), (19, 9), (20, 9), (20, 10)], # 부산시
]

def draw_blockMap(blockedMap, targetData, title, color):
    whitelabelmin = (max(blockedMap[targetData]) -
                     min(blockedMap[targetData])) * 0.25 + min(blockedMap[targetData])
    
    datalabel = targetData

    vmin = min(blockedMap[targetData])
    vmax = max(blockedMap[targetData])

    mapdata = blockedMap.pivot(index='y', columns='x', values = targetData)
    masked_mapdata = np.ma.masked_where(np.isnan(mapdata), mapdata)

    plt.figure(figsize = (8, 13))
    plt.title(title)
    plt.pcolor(masked_mapdata, vmin = vmin, vmax = vmax, cmap = color,
               edgecolor = '#aaaaaa', linewidth = 0.5)
    
    # 지역 이름 표시
    for idx, row in blockedMap.iterrows():
        annocolor = 'white' if row[targetData] > whitelabelmin else 'black'
    #광역시는 구 이름이 겹치는 경우가 많아서 시단위 이름도 같이 표시
    if row['광역시도'].endswith('시') and not row['광역시도']. startswith('세종'):
        dispname = '{}\n{}'.format(row['광역시도'][:2], row['행정구역'][:-1])
        if len(row['행정구역']) <= 2:
           dispname += row['행정구역'][-1]
    else:
        dispname = row['행정구역'][:1]

    #서대문구, 서귀포시 같이 이름이 3자 이상이면 작은 글자로 표시
    if len(dispname.splitlines()[-1]) >= 3:
        fontsize, linespacing = 9.5, 1.5
    else:
        fontsize, linespacing = 11, 1.2

    plt.annotate(dispname, (row['x']+0.5, row['y']+0.5), weight = 'bold', 
                 fontsize = fontsize, ha = 'center', va = 'center', 
                 color = annocolor, linespacing = linespacing)

    #시도 경계를 그린다.
    for path in BORDER_LINES:
        ys, xs = zip(*path)
        plt.plot(xs, ys, c = 'black', lw = 4)

    plt.gca().invert_yaxis()
    #plt.gca().set_aspect(1)
    plt.axis('off')

    cb = plt.colorbar(shrink = 1, aspect = 10)
    cb.set_label(datalabel)

    plt.tight_layout()
    plt.savefig('blockMap_' + targetData + '.png')
    plt.show()
    
    draw_blockMap(data_draw_korea_MC_Population_all, 'count', '행정구역별 공공보건의료기관 수', 'Blues')

draw_blockMap(data_draw_korea_MC_Population_all, 'MC_ratio', '행정구역별 인구수 대비 공공보건의료기관 비율', 'Reds')
/usr/local/lib/python3.8/dist-packages/matplotlib/backends/backend_agg.py:214: RuntimeWarning: Glyph 51064 missing from current font.
  font.set_text(s, 0.0, flags=flags)
  .
  .
  .
/usr/local/lib/python3.8/dist-packages/matplotlib/backends/backend_agg.py:214: RuntimeWarning: Glyph 51064 missing from current font.
  font.set_text(s, 0.0, flags=flags)