کتابخانه folium در پایتون
کتابخانه folium یک ابزار قدرتمند برای ساخت نقشههای تعاملی در پایتون است که بر پایه JavaScript library Leaflet طراحی شده است. این کتابخانه بهخصوص برای کسانی که میخواهند دادههای مکانی را سریع و زیبا بصریسازی کنند، بسیار مناسب است. خروجی folium معمولاً فایل HTML است که میتوان آن را در مرورگر یا داخل نوتبوکهای Jupyter نمایش داد.
ویژگیهای کلیدی
- ساخت سریع نقشههای پایه (Tile layers)
- اضافه کردن مارکرها، پاپآپها و لایههای گروهی
- ادغام با GeoJSON و GeoPandas برای نمایش دادههای مکانی
- پلاگینهایی مثل MarkerCluster، HeatMap و TimeSlider
- خروجی HTML مستقل و قابل منتشرسازی
نصب و شروع سریع
برای نصب folium کافی است از pip یا conda استفاده کنید:
pip install folium
# or
conda install -c conda-forge foliumپس از نصب میتوان اولین نقشه را ساخت:
import folium
m = folium.Map(location=[35.6892, 51.3890], zoom_start=12) # Tehran example
m.save('tehran_map.html')در این کد، یک نقشه ساده با مرکزیت مختصات تهران ساخته و در فایل HTML ذخیره میشود. پارامتر zoom_start سطح بزرگنمایی اولیه را تعیین میکند.
مثال: افزودن مارکر و پاپآپ
import folium
m = folium.Map(location=[35.6892, 51.3890], zoom_start=12)
folium.Marker(
location=[35.6892, 51.3890],
popup='تهران - پایتخت',
tooltip='کلیک کنید'
).add_to(m)
m.save('marker_example.html')این اسکریپت یک مارکر در موقعیت مشخص اضافه میکند. popup محتوای پنجره کوچک و tooltip متنی است که هنگام هاور ظاهر میشود.
کار با حجم زیاد نقاط — بهینهسازی با MarkerCluster
وقتی تعداد نقاط زیاد میشود، توصیه میشود از MarkerCluster استفاده کنید تا کارایی و خوانایی نقشه حفظ شود.
from folium.plugins import MarkerCluster
import folium
m = folium.Map(location=[35.7, 51.4], zoom_start=11)
marker_cluster = MarkerCluster().add_to(m)
coords = [[35.7 + i*0.01, 51.4 + i*0.01] for i in range(100)]
for pt in coords:
folium.Marker(location=pt).add_to(marker_cluster)
m.save('cluster_example.html')در این مثال، 100 نقطه تولید شده و به یک MarkerCluster اضافه میشوند. هنگام زوم کردن، خوشهها به نقاط منفرد تقسیم میشوند که هم کارایی را افزایش و هم نمای نقشه را مرتب نگه میدارد.
نقشههای گرمایی (HeatMap)
from folium.plugins import HeatMap
import folium
m = folium.Map(location=[35.7, 51.4], zoom_start=11)
heat_points = [[35.7 + i*0.005, 51.4 + i*0.005] for i in range(200)]
HeatMap(heat_points, radius=10).add_to(m)
m.save('heatmap.html')HeatMap برای نمایش تمرکز و چگالی نقاط مناسب است. پارامتر radius شعاع تأثیر هر نقطه را مشخص میکند.
نمایش دادههای GeoJSON و Choropleth
یکی از قوتهای folium امکان ادغام با GeoJSON/GeoPandas و ساخت Choropleth (نقشه درجات) برای نمایش شاخصها مثل جمعیت یا آمار منطقهای است.
import folium
import geopandas as gpd
gdf = gpd.read_file('states.geojson') # فرض بر وجود فایل GeoJSON
m = folium.Map(location=[37, -95], zoom_start=4)
folium.Choropleth(
geo_data=gdf,
name='choropleth',
data=gdf,
columns=['state_code', 'population'],
key_on='feature.properties.state_code',
fill_color='YlGn',
fill_opacity=0.7,
line_opacity=0.2,
legend_name='Population'
).add_to(m)
m.save('choropleth.html')در کد بالا، با استفاده از یک GeoDataFrame و مشخصکردن ستونهای موردنظر، یک نقشه choropleth ساخته میشود. دقت کنید که کلید key_on باید به ویژگیهای GeoJSON متناظر اشاره کند.
نکات پیشرفته و بهینهسازی
- برای GeoJSONهای بزرگ از ابزارهایی مانند mapshaper یا متد
simplify()در GeoPandas برای کاهش پیچیدگی هندسی استفاده کنید. - در صورت نمایش مجموعههای داده بزرگ، از TileLayer یا سرویسهای Vector Tiles بهره ببرید تا بار کلی مرورگر کاهش یابد.
- برای تعامل با داشبوردها (مثل Dash یا Streamlit) میتوانید خروجی HTML را در iframe یا component مربوطه بارگذاری کنید.
- برای شخصیسازی بیشتر از HTML/CSS در popups و از پلاگینهای Leaflet که folium از آنها پشتیبانی میکند، استفاده کنید.
مقایسه سریع (مزایا و محدودیتها)
| مزایا | محدودیتها |
|---|---|
| سادگی در پیادهسازی، خروجی HTML مستقل، ادغام آسان با Pandas/GeoPandas | محدودیت در سفارشیسازی بسیار پیچیده نسبت به مستقیم نوشتن Leaflet، کارایی محدود برای نقشههای بسیار حجیم |
نتیجهگیری و توصیههای عملی
folium برای بسیاری از پروژههای تحلیل مکانی و مصورسازی دادهها یک انتخاب مناسب و سریع است. اگر هدف تولید نقشههای تعاملی برای گزارش یا وبسایت با مجموعههای داده متوسط است، folium گزینهای کاملاً کاربردی است. برای مجموعههای بسیار بزرگ یا نیاز به سفارشیسازی کامل JavaScript، بهتر است ترکیب Leaflet مستقیم یا سرویسهای تخصصی نقشه را در نظر بگیرید.
در نهایت، ترکیب folium با Pandas/GeoPandas و استفاده از پلاگینها (مثل MarkerCluster، HeatMap، TimeSlider) به شما این امکان را میدهد تا نقشههای تعاملی قدرتمند و حرفهای تولید کنید بدون نیاز به نوشتن کد JavaScript پیچیده.
آیا این مطلب برای شما مفید بود ؟




