반응형

안녕하세요, 츄르 사려고 코딩하는 집사! 코집사입니다.


파이썬 folium 라이브러리 사용하기(지속 수정중)


1) 모듈 설치하기

> pip install folium 명령어 입력하여 설치하기

 

2) import 하기

> import pandas as pd

> import folium

>

3) 지도 출력하기

> 아래의 코드에서 parking_lot_lat.loc[i]는 위도, parking_lot_lon.loc[i]는 경도를 넣으면 됩니다.

> tiles는 기본적으로 지도의 디자인을 선택합니다.

*tiles의 매개변수

#OpenStreetMap
#Mapbox Bright
#Mapbox Control Room
#Stamen
#Cloudmade <- API 키 필요
#Mapbox <- API 키 필요
#CartoDB

> zoom_start는 배율을 말함

 m = folium.Map([parking_lot_lat.loc[i], parking_lot_lon.loc[i]],
                  tiles = "OpenStreetMap",
                  zoom_start = 10)

 

4) 지도 위에 써클 출력하기

> parking_lot_lat.loc[i]는 위도, parking_lot_loc[i]는 경도

> radius는 원의 크기

folium.CircleMarker(location=[parking_lot_lat.loc[i], parking_lot_lon.loc[i]],
                   radius = 5,
                   color = "#FF0000",
                   fil_color = "#ffffff",
                   popup = print(parking_lot.no[i])).add_to(m)
import folium

#35.8242238, 127.1479532 전주시 위도, 경도
#folium.Map(location = [위도, 경도], tiles = 지도의 디자인, zoom_start(배율지정)=15)

# tiles의 매개변수는 아래와 같다.
#OpenStreetMap
#Mapbox Bright (Limited levels of zoom for free tiles)
#Mapbox Control Room (Limited levels of zoom for free tiles)
#Stamen (Terrain, Toner, and Watercolor)
#Cloudmade (Must pass API key)
#Mapbox (Must pass API key)
#CartoDB (positron and dark_matter)

m = folium.Map([35.8467324,127.1271785],
              tiles = "OpenStreetMap",
              zoom_start = 15)

#abc.html로 맵 저장
m.save('abc.html')

#맵을 return
#m.get_root().render()

#folium.Marker(location=[37.564214, 127.001699],
#              icon=folium.Icon(color='red', icon='star', popup="Center of seoul").add_to(m))


#지도에 원 표시
#radius 원의 크기
#color 테두리색
#fill_color 채우기색
folium.CircleMarker(location=[35.8467324,127.1271785],
	radius=100, # 원의 크기
    color="#ffffff", # 테두리색
    fill_color="#000", # 채우기색
    popup="JBNU").add_to(m)
    
m


folium 필사


import pandas as pd
import numpy as np
import folium
import folium.plugins as plugins

df=pd.read_csv('abc.csv',encoding = 'CP949')
df.head()


df.sort_values(by='기준날짜',inplace=True)
df = df.reset_index(drop=True)


new = df[['기준날짜','카메라명칭']].copy()
new['계수 평균'] = (df['진입계수'] + df['진출계수'])/2
new.head()

location = pd.DataFrame(new['카메라명칭'].unique(), columns=['카메라명칭'])
location['위도'] = pd.Series([37.57777, 37.581425, 37.581286, 37.580543])
location['경도'] = pd.Series([126.982634, 126.984794, 126.981567, 126.986594])
location

new = pd.merge(new, location, on='카메라명칭')
new = new.sort_values(by='기준날짜')
new.head()

new = new.set_index('기준날짜')
new.to_csv('북촌 유동인구.csv', encoding='EUC-KR')

value = new['계수 평균'].values
minimum = min(value)
maximum = max(value)
new['계수 평균'] = new['계수 평균'].transform(func = lambda x : 300*(x - minimum)/(maximum-minimum))
new['계수 평균'] = np.ceil(new['계수 평균']).astype(int)
new.head()

date = list(new.index.unique())

matrix = []

for j in date:
    a = []
    temp = new[new.index==j]
    
    for lat, lon, value in zip(temp['위도'], temp['경도'], temp['계수 평균']):
        [a.append([lat+np.random.normal(0,0.0003), lon+np.random.normal(0,0.0003)]) for i in range(value)]
    
    matrix.append(a)

def change_date(x):
    x = str(x)
    return x[:4] + '-' + x[4:6] + '-' + x[6:]

time_ind = list(map(lambda i: change_date(i), date))
print(time_ind)

m = folium.Map([37.579362, 126.984746], zoom_start=16)
plugins.HeatMapWithTime(matrix, index=time_ind).add_to(m)
m
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기