헬창 개발자

카카오 API, Folium 다루기 본문

데이터 분석

카카오 API, Folium 다루기

찬배 2022. 2. 15. 17:31

실습전 환경설정

API키 발급 안하면 실습진행 불가!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

https://health-coding.tistory.com/29?category=997153 

 

카카오 지도 API 발급 받는 방법

카카오 개발자 홈페이지 접속 https://developers.kakao.com/ Kakao Developers 카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합

health-coding.tistory.com

이 페이지의 목적

  • Kakao Map API 기본 사용법 이해
  • Folium 기본 사용법 이해

Kakao Map API 실습 코드

  • Rest 키를 이용하여 주소 검색 해보기
import json
import requests

class KakaoLocalAPI:
    """
    Kakao Local API 컨트롤러
    """
    def __init__(self, rest_api_key):
        """
        Rest API키 초기화 및 기능 별 URL 설정
        """

        # REST API 키 설정
        self.rest_api_key = rest_api_key
        self.headers = {"Authorization": "KakaoAK {}".format(rest_api_key)}

        # 서비스 별 URL 설정

        # 01 주소 검색
        self.URL_01 = "https://dapi.kakao.com/v2/local/search/address.json"
        # 02 좌표-행정구역정보 변환
        self.URL_02 = "https://dapi.kakao.com/v2/local/geo/coord2regioncode.json"
        # 03 좌표-주소 변환
        self.URL_03 = "https://dapi.kakao.com/v2/local/geo/coord2address.json"
        # 04 좌표계 변환
        self.URL_04 = "https://dapi.kakao.com/v2/local/geo/transcoord.json"
        # 05 키워드 검색
        self.URL_05 = "https://dapi.kakao.com/v2/local/search/keyword.json"
        # 06 카테고리 검색
        self.URL_06 = "https://dapi.kakao.com/v2/local/search/category.json"
    
    def search_address(self, query, analyze_type=None, page=None, size=None):
        """
        01 주소 검색
        """
        params = {"query": f"{query}"}

        if analyze_type != None:
            params["analyze_type"] = f"{analyze_type}"

        if page != None:
            params['page'] = f"{page}"

        if size != None:
            params['size'] = f"{size}"

        res = requests.get(self.URL_01, headers=self.headers, params=params)
        document = json.loads(res.text)

        return document
    
    def geo_coord2regioncode(self, x, y, input_coord=None, output_coord=None):
        """
        02 좌표-행정구역정보 변환
        """
        params = {"x": f"{x}",
                  "y": f"{y}"}
        
        if input_coord != None:
            params['input_coord'] = f"{input_coord}"
        
        if output_coord != None:
            params['output_coord'] = f"{output_coord}"
            
        res = requests.get(self.URL_02, headers=self.headers, params=params)
        document = json.loads(res.text)
        
        return document
    
    def geo_coord2address(self, x, y, input_coord=None):
        """
        03 좌표-주소 변환
        """
        params = {"x": f"{x}",
                  "y": f"{y}"}
        
        if input_coord != None:
            params['input_coord'] = f"{input_coord}"
            
        res = requests.get(self.URL_03, headers=self.headers, params=params)
        document = json.loads(res.text)
        
        return document
    
    def geo_transcoord(self, x, y, output_coord, input_coord=None):
        """
        04 좌표계 변환
        """
        params = {"x": f"{x}",
                  "y": f"{y}",
                  "output_coord": f"{output_coord}"}
        
        if input_coord != None:
            params['input_coord'] = f"{input_coord}"
        
        res = requests.get(self.URL_04, headers=self.headers, params=params)
        document = json.loads(res.text)
        
        return document
    
    def search_keyword(self,query,category_group_code=None,x=None,y=None,radius=None,rect=None,page=None,size=None,sort=None):
        """
        05 키워드 검색
        """
        params = {"query": f"{query}"}
        
        if category_group_code != None:
            params['category_group_code'] = f"{category_group_code}"
        if x != None:
            params['x'] = f"{x}"
        if y != None:
            params['y'] = f"{y}"
        if radius != None:
            params['radius'] = f"{radius}"
        if rect != None:
            params['rect'] = f"{rect}"
        if page != None:
            params['page'] = f"{page}"
        if size != None:
            params['size'] = f"{params}"
        if sort != None:
            params['sort'] = f"{sort}"
        
        res = requests.get(self.URL_05, headers=self.headers, params=params)
        document = json.loads(res.text)
        
        return document
    
    def search_category(self, category_group_code, x, y, radius=None, rect=None, page=None, size=None, sort=None):
        """
        06 카테고리 검색
        """
        params = {'category_group_code': f"{category_group_code}",
                  'x': f"{x}",
                  'y': f"{y}"}
        
        if radius != None:
            params['radius'] = f"{radius}"
        if rect != None:
            params['rect'] = f"{rect}"
        if page != None:
            params['page'] = f"{page}"
        if size != None:
            params['size'] = f"{size}"
        if sort != None:
            params['sort'] = f"{sort}"
            
        res = requests.get(self.URL_06, headers=self.headers, params=params)
        document = json.loads(res.text)
        
        return document
rest_api_key = "카카오api키입력"

kakao = KakaoLocalAPI(rest_api_key)

 

  • 주소 쿼리를 이용해 정보 받기
query = "전북 군산시 대학로 558"
result_01 = kakao.search_address(query)
result_01

  • 좌표-행정구역 정보 변환
x = 126.680356828107
y = 35.9503457085054

result_2 = kakao.geo_coord2regioncode(x, y)
result_2

  • 좌표-주소변환
x = 126.680356828107
y = 35.9503457085054

result_3 = kakao.geo_coord2regioncode(x, y)
result_3

  • 키워드 검색
query = "군산대학교"


result_5 = kakao.search_keyword(query)
result_5

  • 카테고리 검색
'''
category_group_code
MT1 대형마트
CS2 편의점
PS3 어린이집, 유치원
SC4 학교
AC5 학원
PK6 주차장
OL7 주유소, 충전소
SW8 지하철역
BK9 은행
CT1 문화시설
AG2 중개업소
PO3 공공기관
AT4 관광명소
AD5 숙박
FD6 음식점
CE7 카페
HP8 병원
PM9 약국
'''

category_group_code = "SC4"
x = 126.680356828107
y = 35.9503457085054
radius = 20000 # 검색 범위

result_6 = kakao.search_category(category_group_code, x, y, radius)
result_6

 

Folium 실습 코드

Folium

  • folium : 지도 시각화 라이브러리
  • 기본적인 명령
    • Map(location=[위도, 경도], Map(location=(위도, 경도)
      • tiles : 스타일 설정(OpenStreetMap, Stamen Terrain/Toner/Watercolor, CartoDB positron, CartoDB dark_matter 등)
      • zoom_start : 줌 설정(0~18)
    • save : 지도를 html 형식으로 저장
    • Marker : 지도에 마커 추가
      • popup, tooltip : 마커 클릭 또는 커서 이동 시 문구 출력(html 문법 사용 가능)
      • icon : 다양한 모양의 아이콘 지원
      • add_to : Map을 매개변수로 받아 해당 지도에 마커 추가
      import folium
      
      my_map = folium.Map(location=[35.94642607873417, 126.68218834963535], tiles="OpenStreetMap",zoom_start=17)
      folium.Marker([35.94642607873417, 126.68218834963535], 
                    popup="<i>Kunsan University</i>",
                    icon = folium.Icon(icon="info_sign", color="red")).add_to(my_map)
      
      my_map​


 

'데이터 분석' 카테고리의 다른 글

3. 네이버 영화 평점 크롤링  (4) 2022.02.15
2. 서울시 범죄 현황 분석  (0) 2022.02.15
판다스 매트플롯 다루기  (0) 2022.02.15
1. 서울시 cctv 현황 분석  (0) 2022.02.15
환경 설정  (0) 2022.02.15
Comments