Folium

Doya·2025년 3월 25일

ESTSOFT_AI개발7기

목록 보기
28/43

Folium

  • python에서 지도를 생성하고 시각화를 하기 위한 라이브러리
  • 지리적 데이터를 시각화, 지도 위에 다양한 마커, 레이어를 추가 가능
  • 데이터 과학, 지리 정보 시스템, 도시 계획 등 다양한 분야에서 활용

실습

  • 사용 데이터
    • 소상공인시장진흥공단상가(상권)정보서울_202112

데이터 출처
https://www.data.go.kr/data/15083033/fileData.do#layer_data_infomation

1. 상권대분류명으로 나누기 및 시각화

cnt = df['상권업종대분류명'].value_counts()
cnt

cntindex = df['상권업종대분류명'].value_counts().index
cntindex

plt.figure(figsize = (12, 5))
sns.barplot(x = cntindex, y = cnt , hue = cntindex , palette= 'Set2')
plt.xlabel('상권업종대분류명')
plt.ylabel('Count')
plt.title('상권업종대분류명 count')
plt.show()

2. 지도위에 원하는 데이터 마커 찍기

  • 서울시의 롯데리아 상호명을 갖는 지점 지도에 표시하기
m = folium.Map(location=[37.5671, 126.9774], zoom_start = 11)

for k in range(len(df)):
    location = float(df.loc[k, '위도']), float( df.loc[k, '경도'])
    name = str(df.loc[k, '상호명'])
    if '롯데리아' in name:
        if name == '롯데리아':
            if str(df.loc[k, '지점명']) != 'nan':
                name = name + str(df.loc[k, '지점명'])
        # popup = folium.Popup(name, min_width = 50, max_width = 200)
        folium.Marker(location, tooltip = name, icon = folium.Icon(icon = 'mug-hot', color = 'blue', prefix = 'fa')).add_to(m)
m    

  • 문제점: 시각적으로 너무 혼잡해 보임

3. 시각적 문제 해결

  • 밀도 문제 해결
m2 = folium.Map(location=[37.5665, 126.9780], zoom_start=11)
marker_cluster1 = MarkerCluster().add_to(m2)

for k in range(len(df)):
    try:
        location = float(df.loc[k, '위도']), float(df.loc[k, '경도'])
        name = str(df.loc[k , '상호명'])
        if '롯데리아' in name:
            if name == '롯데리아' and str(df.loc[k, '지점명']) != 'nan':    
                name += str(df.loc[k, '지점명'])
            folium.Marker(
                location= location,
                tooltip=name,
                icon=folium.Icon(icon='flag', color='blue', prefix='fa')
            ).add_to(marker_cluster1)
    except Exception as e:
        print(f"Error on row {k}: {e}")
m2    

서울시 구역별로 나누기

request = requests.get('https://raw.githubusercontent.com/southkorea/seoul-maps/master/kostat/2013/json/seoul_municipalities_geo_simple.json')
seoul_geo = json.loads(request.content)
folium.GeoJson(seoul_geo, name = '서울구역표시').add_to(m2)

profile
안녕하세요. 도야입니다

0개의 댓글