학생부 본선진출팀이 공고되었습니다.

자세히보기

위치 자료를 실제 지도위에 시각화하기
house9895@naver.com
2023-10-31 02:32

안녕하세요 팀 은지짱짱걸입니다.

저희 팀은 과제로 뜰개의 움직임을 예측하는 것을 주제로 정하였습니다.

발표 자료를 만드는 과정에서 이 움직임을 실제 지도위에 시각화 해서 사진을 넣었습니다.

결과물인 시각화한 사진과 이를 만드는 코드 입니다.

sealab image

문제에서 주어진 2005년 뜰개의 움직임을 실제 지도위에 시각화 한것 입니다.

데이터 셋은 drifer 끼리 그룹화 되어있고 시간이 흐름에 따라 위도와 경도를 나타내는 것으로 전처리를 마쳤습니다.

sealab image

이런 형태로 생겼습니다.

그리고 코드 입니다.

pip install folium

import pandas as pd
import folium

df = pd.read_csv("data/total.csv")

# Create a base map with specific tiles (cartodb positron for a clean map)
base_map = folium.Map(location=[df['latitude'].mean(), df['longitude'].mean()], zoom_start=5, tiles="cartodb positron")

# Define a color palette for each drifter
color_palette = ['blue', 'green', 'red', 'purple', 'orange', 'pink', 'brown', 'gray', 'olive', 'cyan',
                 'lime', 'teal', 'navy', 'maroon', 'gold', 'indigo', 'violet', 'magenta', 'salmon',
                 'coral', 'sienna', 'turquoise', 'lavender', 'darkgreen', 'dodgerblue', 'slategray',
                 'hotpink', 'chocolate', 'mediumseagreen', 'crimson']

# Create an empty dictionary to store drifter names for the legend
drifter_names = {}

# Loop through each drifter and add their path to the base map
for drifter_id in df['drifter'].unique():
    drifter_data = df[df['drifter'] == drifter_id]
    drifter_color = color_palette[drifter_id % len(color_palette)]  # Choose a color from the palette
    
    # Create a feature group for this drifter
    drifter_group = folium.FeatureGroup(name=f'Drifter {drifter_id}')
    
    # Add a polyline to represent the drifter's path
    folium.PolyLine(
        locations=list(zip(drifter_data['latitude'], drifter_data['longitude'])),
        color=drifter_color,
        weight=2.5,
        opacity=1,
        tooltip=f'Drifter {drifter_id}'
    ).add_to(drifter_group)
    
    # Add the drifter group to the base map
    drifter_group.add_to(base_map)

    # Store drifter names for the legend
    drifter_names[f'Drifter {drifter_id}'] = drifter_color

# Add layer control with custom legend
folium.LayerControl(collapsed=False, overlay=True, control=True, name="Legend").add_to(base_map)

# Add custom legend to the map
legend_html = '<div style="position:fixed; top:10px; left:10px; z-index:1000; background-color:white; padding:10px; border-radius:5px;">'
for drifter_name, color in drifter_names.items():
    legend_html += f'<p><i class="fa fa-circle" style="color:{color};"></i> {drifter_name}</p>'
legend_html += '</div>'

base_map.get_root().html.add_child(folium.Element(legend_html))

# Display the map
base_map.save('all_drifters_map_with_legend.html')