Today i learned & Week i learned/프로젝트 관련

folium(포리움), DivIcon 활용하여 지도에 데이터,텍스트 표시

데분조 2023. 12. 21. 16:45
반응형

결과 데이터


시작!

 


활용 데이터

 

ff

지하철역별 주변 공시지가.csv name,price,llatitude,longitude 건대입구,524.1,37.5398966800000,127.0706677346700 뚝섬유원지,502.5,37.5315151275315,127.0667961917620 어린이대공원,487.8,37.5479266540374,127.0746303253110 구의,476.8,3

docs.google.com

CSV 파일 내용


코랩에 파일 업로드 하기

 

코랩(colab)에 활용할 파일 업로드 하는 법

1. 코랩에 접속해주신 다음에 노트를 열어주시고요. 2. 왼쪽 탭에서 폴더 아이콘 클릭해주시고요. 3. 조금 기다리시면 아래 그림과 같이 탭이 뜹니다. 4. 왼쪽 상단에 있는 아이콘을 클릭해주시고

datanaly.tistory.com


folium 라이브러리 가져오고 맵만들기

import folium
# folium 라이브러리 가져오기

from folium.features import DivIcon
# folium.features 라이브러리에서 DivIcon 가져오기

ff = pd.read_table('/content/ff.csv',sep=',')
# ff.csv 파일을 가져와서 판다스 테이블 형식으로 만들고 ff라고 부를거야.

m = folium.Map(location=[37.54672073122991, 127.08580934446613], zoom_start=13)
# folium.Map() 메서드를 이용하여 지도 제작
# location = [위도값,경도값] -> 위치 값을 지정해준다.  
# zoom_start(시작 확대 값) -> 시작시 확대 정도를 조절해준다.
# m이라는 변수에 저장한다.

m
# m 출력!

 

출력 결과


사용할 데이터 변수에 할당하기!

for n in ff.index:
    radius = ff.loc[n, 'price']
    lat, lon = ff.loc[n, 'llatitude'], ff.loc[n, 'longitude']
    price = ff.loc[n, 'price']
    name = ff.loc[n, 'name']
    
    # for n in ff.index: -> ff라는 데이터프레임의 인덱스에서 반복문을 진행할거야.
    # .loc 메서드는 아래 설명을 참고해주세요!
    
    # radius에 index가 n이고 column이 price인 값을 넣겠다.
    # lat에 index가 n이고 column이 latitude인 값을 넣겠다.
    # lon에 index가 n이고 column이 longitude인 값을 넣겠다.
    # price에 index가 n이고 column이 price인 값을 넣겠다.
    # name에 index가 n이고 column이 name인 값을 넣겠다.

출력 결과


.loc 메서드 설명

.loc 메서드 문법
: 데이터프레임명.loc [ index값, column값 ]

 

다음과 같이 abc라는 판다스 데이터 프레임이 있다고 해보자.

데이터 프레임 'abc'

.loc 연습문제 1

 

입력 코드

# 입력코드
abc.loc['2','b']

 

출력값

 

설명

index : 2, column : b이기 때문에 b2값이 출력된다.


.loc 연습문제 2

 

입력 코드

# 입력코드
abc.loc['1','c']

 

출력 값

 

설명

index : 1, column : c이기 때문에 c1값이 출력된다.


folium.CircleMaker 메서드

folium.CircleMarker(
        [lat, lon],
        radius=radius / 20,
        fill=True,
        fill_color='blue'
    ).add_to(m)
    
# folium.CircleMarker() 메서드를 이용하여 원형마커 생성
#1 [위도값, 경도값]
#2 radius = 값 -> 원형 마커의 크기
#3 fill = True or False -> 원형 마커 내부 채움
#4 fill_color = "색깔" -> 원형 마커 내부 채움색
#5 .add_to(m) -> 앞서 만들어 놓은 지도 m에 위 내용을 추가한다.

 

출력 결과 ( for문으로 묶여있기 때문에 위에 코드와 함께 돌리셔야 합니다. )

 


이름과 가격 텍스트를 지도에 표시하기  
( for문으로 묶여있기 때문에 위에 코드들과 함께 돌리셔야 합니다. )

folium.Marker(
        [lat, lon],
        icon=DivIcon(
            icon_size=(150, 50),
            icon_anchor=(75, 25),
            html=f'''
                <div style="font-size: 12pt; font-weight: bold; color: white; 
                            background: navy; padding: 5px; border-radius: 5px; 
                            text-align: center;">
                    {name}<br>{price}
                </div>
            ''',
        )
    ).add_to(m)
    
# folium.Marker() 메서드를 이용하여 텍스트 게시
# [위도값, 경도값] -> 위치
# DivIcon() 메서드를 이용하여 텍스트 구성
# icon_size = (가로 값, 세로 값) -> 텍스트 아이콘의 크기
# icon_anchor = (가로 위치 값, 세로 위치 값) -> 텍스트 아이콘의 세부 위치
# html = "html 태그" -> html 태그를 쓸 수 있다.
#.add_to(m) -> 위 내용을 지도 m에 표시!

 

출력 결과


최종 코드 파일

import folium
from folium.features import DivIcon

ff = pd.read_table('/content/ff.csv',sep=',')

# 지도 생성
m = folium.Map(location=[37.54672073122991, 127.08580934446613], zoom_start=13)

# 데이터 프레임 ff를 반복 처리
for n in ff.index:
    radius = ff.loc[n, 'price']
    lat, lon = ff.loc[n, 'llatitude'], ff.loc[n, 'longitude']
    price = ff.loc[n, 'price']
    name = ff.loc[n, 'name']  # 이름 데이터

    # CircleMarker 추가
    folium.CircleMarker(
        [lat, lon],
        radius=radius / 20,
        fill=True,
        fill_color='blue'
    ).add_to(m)

    # 이름과 가격을 표시하는 DivIcon 추가, 스타일 변경
    folium.Marker(
        [lat, lon],
        icon=DivIcon(
            icon_size=(150, 50),
            icon_anchor=(75, 25),
            html=f'''
                <div style="font-size: 12pt; font-weight: bold; color: white; 
                            background: navy; padding: 5px; border-radius: 5px; 
                            text-align: center;">
                    {name}<br>{price}
                </div>
            ''',
        )
    ).add_to(m)

m

참고 블로그

 

Python Folium을 사용해서, 대한민국 법정동 경계선 시각화해보기

업무에서 지도 데이터를 다룰 일이 많아서 Python folium을 스터디하고 있습니다. folium을 사용해 대한민국 법정동 경계선을 시각화한 경험을 공유합니다! . 저의 🍯꿀팁들도 함께 작성했으니 재밌

velog.io

 

반응형