کتابخانه altair در پایتون
Altair یک کتابخانهٔ قدرتمند و اعلامی (declarative) برای ساخت نمودارهای آماری در پایتون است که بر پایهٔ موتور Vega-Lite طراحی شده است. هدف Altair سادهسازی فرایند تولید بصریسازی داده با نگارش روشن و کوتاه است، بهطوری که تمرکز کاربر روی «چه چیزی» نمایش داده شود باشد نه «چگونه» رسم شود.
ویژگیهای کلیدی
- رویکرد اعلامی مبتنی بر Grammar of Graphics
- تعاملات (interactivity) ساده با Selection و Binding
- یکپارچگی خوب با pandas و Jupyter
- خروجی قابلصادرات به HTML/JSON (Vega-Lite spec)
- رسمهای لایهای، فیسِت، کانکت و ریپییت
نصب
pip install altair vega_datasets
# در صورت نیاز به غیرفعال کردن محدودیت سایز:
pip install altair_viewer
این دستور Altair و مجموعه نمونههای دادهٔ Vega را نصب میکند. در محیطهایی که محدودیت سطر پیشفرض وجود دارد (مثلاً بیش از 5000 ردیف) میتوان از alt.data_transformers برای تغییر رفتار استفاده کرد که در ادامه توضیح داده میشود.
مفاهیم پایه
- Encoding: نگاشت ستونهای داده به کانالهای بصری مثل x، y، color، size.
- Mark: نوع نشانهٔ بصری مانند point، bar، line.
- Transformation: اجرای فیلتر، گروهبندی، محاسبهٔ جدید روی داده (transform).
- Selection: تعریف تعاملات برای برش (brush)، کلیک و hover.
مثال ساده — نمودار پراکندگی
import altair as alt
from vega_datasets import data
cars = data.cars()
chart = alt.Chart(cars).mark_point().encode(
x='Horsepower:Q',
y='Miles_per_Gallon:Q',
color='Origin:N',
tooltip=['Name:N', 'Horsepower:Q', 'Miles_per_Gallon:Q']
).interactive()
chart.save('scatter.html') # ذخیرهٔ تعاملی به HTML
در این کد یک نمودار پراکندگی از dataset نمونهٔ cars ساخته میشود. encode تعیین میکند ستونها به چه کانالهایی نگاشت شوند (Q برای مقدار کمی، N برای اسمی). با tooltip اطلاعات نشان داده میشود و با .interactive() قابلیت zoom و pan اضافه میگردد. دستور save خروجی تعاملی را به HTML میدهد.
لایهبندی و رگرسیون
import altair as alt
from vega_datasets import data
source = data.cars()
points = alt.Chart(source).mark_point().encode(
x='Horsepower:Q',
y='Miles_per_Gallon:Q',
color='Origin:N'
)
line = alt.Chart(source).transform_regression(
'Horsepower', 'Miles_per_Gallon'
).mark_line(color='black')
(points + line).properties(width=600, height=400)
در این نمونه دو لایه تعریف شدهاند: نقاط رنگی و یک خط رگرسیون محاسبهشده با transform_regression. با استفاده از عملگر + این دو لایه با هم ترکیب شدهاند و در یک نمودار نمایش داده میشوند.
تعاملات (Brushing & Linking)
brush = alt.selection(type='interval')
points = alt.Chart(source).mark_point().encode(
x='Horsepower:Q',
y='Miles_per_Gallon:Q',
color=alt.condition(brush, 'Origin:N', alt.value('lightgray'))
).add_selection(brush)
hist = alt.Chart(source).mark_bar().encode(
y='Origin:N',
x='count()'
).transform_filter(brush)
alt.vconcat(points, hist)
در این مثال یک انتخاب بازهای (brush) تعریف شده و به نمودار نقاط اضافه میشود. شرط رنگدهی (condition) باعث میشود نقاط انتخابشده رنگ اصلی داشته باشند و باقی خاکستری شوند. هیستوگرام پایین تنها دادههای انتخابشده را نشان میدهد؛ این نمونهٔ کلاسیک از «linking» بین نماها است.
محدودیتها و راهکارها
- Altair بهطور پیشفرض برای دادههای خیلی حجیم مناسب نیست (محدودیت اندازهٔ ورودی): میتوانید از
alt.data_transformers.disable_max_rows()یاenable('data_server')استفاده کنید، ولی بهتر است از تجمیع (aggregate)، نمونهبرداری (sample) یا ابزارهایی مثل Datashader بهره ببرید. - Altair نمودارهایی را بر پایهٔ Vega-Lite تولید میکند؛ برای سفارشیسازی سطح پایین گاهی لازم است JSON ویرایش شود.
کلیدهای عملیاتی و نکات تخصصی
- برای نمودارهای نمایشی سریع در Jupyter از
chart.display()یا فقط نام شیء استفاده کنید. - برای اشتراکگذاری تعاملی خروجی و قابلنماش در وب از
chart.save('chart.html')استفاده کنید. - برای کنترل عملکرد دادهها از
alt.data_transformers.enable('data_server')یاdisable_max_rows()بهره ببرید. - در طراحی داشبورد، از facet، repeat و concat برای ترکیب نماها استفاده کنید تا از پیچیدهشدن specs جلوگیری شود.
مقایسهٔ سریع با کتابخانههای دیگر
| ویژگی | Altair | Matplotlib / Seaborn | Plotly |
|---|---|---|---|
| رویکرد | اعلامی، Vega-Lite | دستوری | اعلامی/دستوری |
| تعاملات | قوی، ساده | ضعیف تا میانه | قوی، وبمحور |
| مناسب برای دادههای بزرگ | نیاز به تجمیع/Datashader | خوب با بهینهسازی | خوب، مخصوصاً با WebGL |
نمونهٔ بهینهسازی برای دادههای بزرگ
import altair as alt
alt.data_transformers.disable_max_rows() # غیرفعال کردن محدودیت سطر پیشفرض
# یا استفاده از data_server برای ارسال دادهها به سرور محلی
# alt.data_transformers.enable('data_server')
این تنظیم به شما اجازه میدهد دادههای بزرگتر از حد پیشفرض را مستقیماً استفاده کنید، ولی همیشه بهترین گزینه نیست — توصیه میشود ابتدا با گروهبندی یا نمونهگیری حجم دادهها را کاهش دهید.
جمعبندی
Altair یک انتخاب مناسب برای تحلیلگران و دانشمندان داده است که دنبال تولید سریع، خوانا و تعاملی نمودارهای آماری هستند. طراحی اعلامی و توانایی تعریف تعاملات پیچیده بدون نوشتن کد زیاد از مزایای اصلی آن است. در پروژههای با دادهٔ بسیار حجیم یا نیازهای سفارشی سطح پایین، ممکن است ترکیب Altair با ابزارهای دیگر بهترین نتیجه را بدهد.
اگر نمونهٔ مشخصی از داده یا نموداری دارید، میتوانم کد متناسب و بهینهتری پیشنهاد بدهم.
آیا این مطلب برای شما مفید بود ؟




