e_yejun
Jun_ : Pwn
e_yejun
전체 방문자
오늘
어제
  • 분류 전체보기 (240)
    • Profile (1)
    • Pwnable (54)
    • Reversing (14)
    • Network (8)
    • Forensic (10)
    • Embedded (4)
    • Android (2)
    • Web (18)
    • 알고리즘 (42)
    • 프로그래밍 (24)
    • 프로젝트 (6)
    • 1-day (7)
    • CTF (15)
    • 기타 (33)
    • 일기장 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • BOF
  • rev-basic
  • dvwa
  • dreamhack.io
  • x64
  • wargame
  • how2heap
  • 1-day
  • X86
  • Heap

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
e_yejun

Jun_ : Pwn

프로그래밍

[Folium] 제주도 공원 지도위에 시각화하기

2024. 3. 2. 13:44

folium 라이브러리를 이용해서 특정 위치의 지도를 띄우고 원하는 곳에 마커를 표시할 수 있다.

공공데이터를 다운받아 전국 공원 정보를 적절히 가공한 뒤, 제주도에 대한 공원을 표시하는 실습을 진행해볼 것이다.

 

 

Folium 라이브러리 사용

import folium

mymap = folium.Map(location=[33.371296, 126.560056], zoom_start=11)
folium.Marker([33.371296, 126.560056], popup='한라산').add_to(mymap)
mymap.save('test.html')

아주 간단한 folium 활용 코드이다. Map은 통해 띄워줄 지도의 위도와 경도 값을 받아 객체를 만들어 준다. zoom_start는 초기 확대 수준을 나타내는데, 일반적으로 0에서 18까지의 값을 가진다.

Marker는 위도와 경도 값을 받고, 앞서 구성한 지도 객체안에 Marker를 찍어준다. 이때 popup 옵션으로 해당 위치에 대한 설명을 적어줄 수 있다.

 

 

 

원하는 위치의 위도/경도 확인 방법

구글 맵에서 원하는 위치를 검색하고, 지도 창에서 오른쪽 버튼을 눌러 ‘이곳이 궁금한가요?’를 클릭한다.

 

회색 작은 Marker 표시가 나타나는 것을 확인할 수 있다.

 

해당 회색을 마우스 왼쪽 클릭을 하면 위와 같이 해당 위치의 위도와 경도를 확인할 수 있다.

이때, 앞서 검색했던 왼쪽 검색 창이 활성화 되어 있으면, 위도와 경도가 뜨지 않으므로, 위도와 경도가 뜨지 않는다면 해당 부분을 확인해보면 된다.

 

 

 

[pandas] 공원 데이터 가공

 

전국도시공원정보표준데이터

국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Datase

www.data.go.kr

위 링크에서 전국에 있는 공원 정보를 엑셀파일 형태로 다운받을 수 있다.

 

오른쪽 상단에 원하는 확장자를 선택해서 다운로드 한다.

 

위와 같은 엑셀 데이터를 얻을 수 있다. 우리가 중점적으로 사용할 부분은 위도와 경도이다.

 

 

import pandas as pd

df = pd.read_excel('./전국도시공원정보표준데이터.xlsx')
print(df.isna().sum())

먼저, 해당 파일의 결측치를 확인해본다. 위도와 경도, 소재지지번주소가 없다면, 마커를 찍는 과정에서 에러가 발생하기 때문에, 해당 데이터는 없애줘야 한다.

 

 

import pandas as pd

df = pd.read_excel('./전국도시공원정보표준데이터.xlsx')
df = df.dropna(subset = ['위도', '경도', '소재지지번주소']) #해당 subset 결측지를 0으로 만듦.
print(df.isna().sum())

위도와 경도, 그리고 소재지지번 주소가 없는 것을 dropna 함수로 없애주고 다시 결측치를 확인해보면 0인 것을 확인할 수 있다. 이처럼 결측치에 의한 오류가 나지 않도록, 사용할 데이터의 결측치를 제거해주는 과정이 필요하다.

 

 

import pandas as pd

df = pd.read_excel('./전국도시공원정보표준데이터.xlsx')
df = df.dropna(subset = ['위도', '경도', '소재지지번주소']) #해당 subset 결측지를 0으로 만듦.
df = df.query("소재지지번주소.str.contains('제주')", engine='python')
print(df)

query를 통해 제주가 소재지지번주소에서 제주가 들어가 있는 공원만 필터링한다.

이로써 제주도의 공원을 시각화하기 위한 데이터 가공이 끝났다.

 

 

 

[seaborn] 위치 좌표 그래프

import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
from tqdm import *

df = pd.read_excel('./전국도시공원정보표준데이터.xlsx')
df = df.dropna(subset = ['위도', '경도', '소재지지번주소']) #해당 subset 결측지를 0으로 만듦.
df = df.query("소재지지번주소.str.contains('제주')", engine='python')

sns.scatterplot(data=df, x='경도', y='위도', hue='공원구분')
plt.rc('font', family='Gulim') #한글 깨짐 방지
plt.show()

scatterplot을 통해 공원 구분 별로 색으로 나누어서 좌표를 나타내어 공원 구분별 밀집도를 파악할 수 있다.

 

 

 

[folium] 공원 위치 지도 표시

import matplotlib.pyplot as plt
import folium
import pandas as pd
import seaborn as sns
from tqdm import *

mymap = folium.Map(location=[33.371296, 126.560056], zoom_start=11)
df = pd.read_excel('./전국도시공원정보표준데이터.xlsx')
df = df.dropna(subset = ['위도', '경도', '소재지지번주소']) #해당 subset 결측지를 0으로 만듦.
df = df.query("소재지지번주소.str.contains('제주')", engine='python')

for i in trange(0,len(df)):
    row = df.iloc[i]
    lat = row['위도']
    lng = row['경도']
    name = row['소재지지번주소']
    popup = folium.Popup(name, max_width=300)
    folium.Marker([lat, lng], popup=popup).add_to(mymap)

mymap.save('test.html')

앞서 가공된 데이터를 for문으로 행단위로 받아와서, 위도와 경도로 Marker를 표시한다. 또한, 특정 마커를 클릭하면 소재지지번주소가 뜰 수 있도록 popup을 추가한다.

이후, save를 하고 만들어진 파일을 열어보면 위와 같이 공원 위치와 주소가 표시된 제주 지도를 확인할 수 있다.

 

 

 

Ref

 

User Guide — pandas 2.2.1 documentation

User Guide The User Guide covers all of pandas by topic area. Each of the subsections introduces a topic (such as “working with missing data”), and discusses how pandas approaches the problem, with many examples throughout. Users brand-new to pandas sh

pandas.pydata.org

 

 

User guide — Folium 0.1.dev1+g0950a52 documentation

 

python-visualization.github.io

 

 

 

    '프로그래밍' 카테고리의 다른 글
    • [Matplotlib] KOSIS 통계 데이터 시각화
    • [PyQt5] 나만의 퀴즈 프로그램 만들기
    • [PyQt5] 나만의 계산기 만들기
    • [Linux] shell script(쉘 스크립트) 기본 문법
    e_yejun
    e_yejun
    정리노트 •_•

    티스토리툴바