6. folium

코딩하는감자·2022년 5월 7일
0
  1. 주소에서 위, 경도로 변환: 카카오 API 이용
    https://jihyeong-ji99hy99.tistory.com/36
    https://haries.tistory.com/9
locations = []
for addr in addrs:
    url = 'https://dapi.kakao.com/v2/local/search/address.json?query={}'.format(addr)
    headers = {
    ## 여러분의 카카오 API의 REST API키를 아래 예시와 같이 입력해주세요
    ## "Authorization": "KakaoAK REST API키 입력 gogo"}
    "Authorization": "KakaoAK f64acb1ae8c66asdfasefasfasdfadsf"}
    place = requests.get(url, headers = headers).json()['documents']
    locations.append(place)
  1. 지도에 marker 표시
map1 = folium.Map([latmean,lonmean], zoom_start = 12)
	
folium.TileLayer('CartoDB positron').add_to(map1)



for i in subway.index:
    sub_lat =  subway.loc[i,'위도']
    sub_long = subway.loc[i,'경도']
    title = subway.loc[i,'역명']

    folium.Marker([sub_lat, sub_long], popup = title, icon=folium.Icon(icon='train', prefix='fa', 
                                                                       color = line_col[subway.loc[i,'호선']])).add_to(map1)
	
  1. 지저분하니 circle로 표시(색상을 코드로 입력해야 함)
    색상추출: https://htmlcolorcodes.com/color-picker/
# 데이터들을 담을 f 라는 그릇을 생성합니다.

f = folium.map.FeatureGroup()

# f에 데이터 포인트들을 담습니다.
for lat, lon, name, line in zip(subway['위도'], subway['경도'], subway['역명'], subway['호선']):
    circle = folium.CircleMarker([lat, lon], 
                                            radius=3, # 원의 크기를 설정
                                            popup = name,
                                            color=line_col_code[line], # stroke 색상
                                            fill_color=line_col_code[line], # 원 내부 색상
                                            fill_opacity=0.8 # 투명도
                                          )
    f.add_child(circle)
    
map2 = folium.Map([latmean,lonmean], zoom_start = 12)
map2.add_child(f)
  1. 단계구분도 그리기

-파일 불러오기

import json
seoul_map = folium.Map(location=[37.565784, 126.938572], zoom_start=11)
json_data = open('/content/drive/MyDrive/YBIGTA/2022_1_교육세션/과제/seoul_municipalities.json', encoding = 'euc-kr').read() #한글로 된 파일이므로 인코딩을 꼭 해주어야합니다.
file = json.loads(json_data)

-구별 지하철역 수 테이블 만들기

name = []
for i,gu in enumerate(file["features"]) :
  name.append(gu["properties"]["SIG_KOR_NM"])
  
together = [locations[x][0]['address']['region_2depth_name'] for x in range(len(locations))]

table = pd.DataFrame(pd.Series(together, name='구'))
table['id'] = list(range(len(together)))


aggg= pd.pivot_table(table,values='id',aggfunc='count',index='구')
aggg['구 이름'] = aggg.index
aggg.columns = ['지하철역 수', '구 이름']

-그림 그리기

subway_map = folium.Map(location=[latmean, lonmean], zoom_start=12)


json_data = open('/content/drive/MyDrive/YBIGTA/2022_1_교육세션/과제/seoul_municipalities.json', encoding = 'euc-kr').read()
file = json.loads(json_data)

subway_map.choropleth(geo_data=file, 
                     data=aggg, 
                     columns=['구 이름','지하철역 수'], 
                     key_on='properties.SIG_KOR_NM',  #key_on 파라미터가 자동으로 json 파일과 데이터 파일을 연결시켜 줍니다.
                     fill_color='BuPu') 

subway_map

https://unfinishedgod.netlify.app/2021/04/28/python-%EC%B9%B4%EC%B9%B4%EC%98%A4-api%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-%EC%A3%BC%EC%86%8C-%EC%9C%84%EA%B2%BD%EB%8F%84-%EC%B6%94%EC%B6%9C/
반대로, 좌표만 주어져 있을 때 주소 정보를 얻을 수도 있다.

profile
데분 데분 데분

0개의 댓글