رسم نمودار با هوش مصنوعی؛ آموزش تبدیل داده و متن به چارت حرفه‌ای

در این راهنما یاد می‌گیرید چگونه داده‌های Excel، CSV یا متن را با هوش مصنوعی به نمودارهای حرفه‌ای تبدیل کنید؛ از انتخاب نوع چارت و پاک‌سازی داده تا ساخت خروجی تعاملی با Python و API درواره.

Share
رسم نمودار با هوش مصنوعی؛ آموزش تبدیل داده و متن به چارت حرفه‌ای

رسم نمودار با هوش مصنوعی می‌تواند داده‌های خام و پراکنده را به تصویری قابل‌فهم تبدیل کند. کافی است یک جدول فروش، فایل Excel، گزارش ماهانه یا مجموعه‌ای از اعداد داشته باشید تا هوش مصنوعی نوع نمودار مناسب را پیشنهاد دهد، داده را مرتب کند، عنوان و برچسب بنویسد و حتی کد لازم برای ساخت خروجی تعاملی را تولید کند.

اما یک نمودار زیبا لزوماً نمودار درستی نیست. اگر نوع چارت با سوال تحلیلی هماهنگ نباشد، محور از صفر شروع نشود، واحد اندازه‌گیری مشخص نباشد یا داده ناقص باشد، تصویر نهایی ممکن است مخاطب را به نتیجه‌ای اشتباه برساند.

در این آموزش یاد می‌گیریم چگونه از هوش مصنوعی برای انتخاب، طراحی و تولید نمودار استفاده کنیم؛ بدون اینکه صحت داده و کنترل انسانی را کنار بگذاریم. علاوه بر ابزارهای آماده، یک روش عملی برای ساخت خودکار نمودار با Python، Plotly و API هوش مصنوعی درواره نیز پیاده‌سازی می‌کنیم.

هوش مصنوعی چگونه نمودار می‌سازد؟

مدل هوش مصنوعی می‌تواند چند بخش از فرایند مصورسازی داده را انجام دهد:

  • تشخیص ستون‌های عددی و دسته‌ای
  • شناسایی تاریخ، درصد، مبلغ و تعداد
  • پیشنهاد نوع نمودار مناسب
  • پاک‌سازی عنوان ستون‌ها
  • مرتب‌سازی داده
  • تشخیص مقدارهای خالی
  • پیشنهاد عنوان و زیرعنوان
  • تولید توضیح کوتاه برای نمودار
  • تولید کد Python یا JavaScript
  • تولید تنظیمات JSON برای کتابخانه نمودار
  • پیشنهاد رنگ‌بندی
  • ساخت متن جایگزین یا Alt Text
  • خلاصه کردن نکات قابل‌مشاهده در نمودار

هوش مصنوعی نباید اعداد ناموجود را حدس بزند یا بدون اعلام، داده خام را تغییر دهد. مسئولیت صحت داده و تفسیر نهایی همچنان بر عهده استفاده‌کننده است.

تفاوت تحلیل داده و رسم نمودار

این دو فرایند به یکدیگر مرتبط‌اند اما یکسان نیستند.

تحلیل داده

در تحلیل، هدف پیدا کردن الگو، رابطه، تغییر یا پاسخ یک سوال است.

مثال:

کدام دسته محصول بیشترین رشد فروش را داشته است؟

رسم نمودار

در رسم نمودار، هدف نمایش روشن یک پیام یا نتیجه است.

مثال:

نمایش نرخ رشد فروش هر دسته با نمودار میله‌ای مرتب‌شده

ممکن است یک فایل ده‌ها ستون داشته باشد، اما برای پاسخ به یک سوال فقط به دو یا سه ستون نیاز داشته باشید. قرار دادن تمام اطلاعات در یک نمودار معمولاً باعث شلوغی می‌شود.

قبل از ساخت نمودار، سوال را مشخص کنید

بهترین نمودار از یک سوال روشن شروع می‌شود، نه از انتخاب رنگ و قالب.

نمونه سوال‌های مناسب:

  • فروش در ۱۲ ماه گذشته چگونه تغییر کرده است؟
  • کدام محصول بیشترین فروش را دارد؟
  • سهم هر دسته از کل درآمد چقدر است؟
  • میان هزینه تبلیغات و فروش چه رابطه‌ای وجود دارد؟
  • توزیع سن مشتریان چگونه است؟
  • عملکرد واقعی با هدف تعیین‌شده چه تفاوتی دارد؟
  • کدام استان بیشترین تعداد سفارش را دارد؟
  • نرخ تبدیل هر مرحله قیف فروش چقدر است؟

اگر سوال مشخص نباشد، هوش مصنوعی ممکن است نموداری بسازد که از نظر ظاهری خوب اما از نظر تصمیم‌گیری بی‌فایده باشد.

انتخاب نمودار مناسب

هدفنمودار مناسبمثال
مقایسه چند دستهمیله‌ای یا ستونیفروش محصولات
نمایش تغییر در زمانخطیفروش ماهانه
نمایش سهم از کلمیله‌ای انباشته یا دایره‌ای محدودسهم کانال‌های فروش
نمایش رابطه دو متغیرScatterتبلیغات و فروش
نمایش توزیعHistogram یا Box Plotتوزیع سن مشتریان
مقایسه هدف و عملکردBullet یا میله‌ایفروش واقعی و هدف
نمایش ترکیب در زمانArea یا Stacked Areaسهم منابع ترافیک
نمایش شدت در جدولHeatmapفروش براساس روز و ساعت
نمایش مراحل ریزشFunnelقیف خرید
نمایش داده جغرافیایینقشهسفارش براساس استان
نمایش سلسله‌مراتبTreemap یا Sunburstفروش دسته و زیردسته
نمایش تغییرات افزایشی و کاهشیWaterfallتغییر سود
نمایش چند شاخص محدودRadarمقایسه ویژگی محصولات

Flourish نیز تأکید می‌کند که هر نوع نمودار برای نمایش الگوی مشخصی مانند تغییر در زمان، رابطه، توزیع یا سهم طراحی شده و انتخاب اشتباه می‌تواند فهم داده را دشوار کند. راهنمای انتخاب نمودار Flourish

چه زمانی از نمودار میله‌ای استفاده کنیم؟

نمودار میله‌ای برای مقایسه مقدار چند دسته مناسب است:

محصول A: 120
محصول B: 85
محصول C: 160
محصول D: 105

اگر نام دسته‌ها طولانی است، نمودار میله‌ای افقی معمولاً خواناتر از نمودار ستونی خواهد بود.

کاربردها:

  • مقایسه فروش محصولات
  • تعداد کاربران هر پلن
  • عملکرد واحدها
  • نتایج نظرسنجی
  • تعداد سفارش هر شهر

بهتر است میله‌ها براساس مقدار یا ترتیب منطقی مرتب شوند.

چه زمانی از نمودار خطی استفاده کنیم؟

نمودار خطی برای نمایش تغییر یک یا چند متغیر در طول زمان مناسب است.

کاربردها:

  • فروش ماهانه
  • تعداد کاربران روزانه
  • نرخ تبدیل هفتگی
  • هزینه زیرساخت
  • زمان پاسخ‌گویی
  • تغییر امتیاز رضایت

اگر ترتیب محور افقی زمانی نیست، نمودار خطی ممکن است رابطه‌ای غیرواقعی میان نقاط القا کند.

چه زمانی از نمودار دایره‌ای استفاده کنیم؟

نمودار دایره‌ای فقط زمانی مناسب است که:

  • اجزا واقعاً بخش‌هایی از یک کل باشند.
  • مجموع آن‌ها ۱۰۰ درصد باشد.
  • تعداد دسته‌ها کم باشد.
  • تفاوت بخش‌ها قابل‌مشاهده باشد.

برای ۱۵ دسته با مقادیر نزدیک، نمودار دایره‌ای انتخاب مناسبی نیست. نمودار میله‌ای مرتب‌شده مقایسه را ساده‌تر می‌کند.

از نمودار سه‌بعدی دایره‌ای نیز خودداری کنید؛ زاویه و عمق می‌توانند اندازه بخش‌ها را متفاوت از مقدار واقعی نشان دهند.

چه زمانی از Scatter Plot استفاده کنیم؟

Scatter Plot یا نمودار پراکندگی برای بررسی رابطه دو متغیر عددی استفاده می‌شود.

مثال:

  • بودجه تبلیغات و فروش
  • زمان پاسخ و رضایت مشتری
  • قیمت محصول و تعداد فروش
  • تعداد کاربران و هزینه زیرساخت

وجود یک الگوی بصری به معنی رابطه علت و معلولی نیست. هوش مصنوعی نیز نباید صرفاً براساس همبستگی، نتیجه‌گیری قطعی تولید کند.

آماده‌سازی داده برای رسم نمودار

کیفیت نمودار مستقیماً به کیفیت داده وابسته است.

عنوان ستون‌ها را واضح کنید

نامناسب:

v1, v2, x, total2

مناسب:

month, product, revenue_irr, order_count

هر ستون فقط یک نوع داده داشته باشد

در ستون مبلغ نباید هم عدد، هم عبارت «نامشخص» و هم واحد تومان وجود داشته باشد.

نامناسب:

120000
85 هزار تومان
نامشخص
130,000 تومان

مناسب‌تر:

120000
85000

130000

واحد را در نام ستون مشخص کنید:

revenue_toman

تاریخ‌ها را یکدست کنید

از ترکیب این شکل‌ها خودداری کنید:

1405/01/01
1 فروردین
2026-03-21
فروردین ۱۴۰۵

یک قالب مشخص برای تمام ردیف‌ها انتخاب کنید.

مقادیر خالی را پنهان نکنید

مقدار خالی با صفر یکسان نیست.

  • صفر یعنی مقدار اندازه‌گیری شده و برابر صفر بوده است.
  • مقدار خالی یعنی اطلاعات وجود ندارد یا ثبت نشده است.

واحدها را هماهنگ کنید

اگر بخشی از مبلغ‌ها تومان و بخشی ریال هستند، پیش از رسم نمودار آن‌ها را به یک واحد تبدیل کنید.

داده تکراری را بررسی کنید

ممکن است یک سفارش یا ماه دوبار ثبت شده باشد.

داده خام را نگه دارید

پاک‌سازی را روی یک نسخه جداگانه انجام دهید تا امکان مقایسه با منبع اصلی وجود داشته باشد.

نمونه داده مناسب

month,revenue_million_toman,orders
فروردین,420,850
اردیبهشت,465,910
خرداد,510,980
تیر,488,945
مرداد,560,1080
شهریور,615,1160

نام ستون‌ها مشخص است، واحد مبلغ در عنوان آمده و هر ردیف ساختار یکسانی دارد.

آموزش رسم نمودار با هوش مصنوعی، مرحله‌به‌مرحله

مرحله اول: هدف نمودار را بنویسید

مثال:

می‌خواهم تغییر درآمد ماهانه را نشان دهم و ماه‌هایی را که نسبت به ماه قبل کاهش داشته‌اند مشخص کنم.

مرحله دوم: داده را معرفی کنید

به مدل بگویید:

  • هر ردیف نشان‌دهنده چیست.
  • واحد ستون‌ها چیست.
  • بازه زمانی چیست.
  • مقدار خالی چه معنایی دارد.
  • مخاطب نمودار چه کسی است.
  • خروجی کجا استفاده می‌شود.

مرحله سوم: از مدل بخواهید داده را بررسی کند

پیش از رسم نمودار، این پرامپت را استفاده کنید:

داده زیر را برای رسم نمودار بررسی کن.

وظایف:
- نوع هر ستون را تشخیص بده.
- مقدارهای خالی را گزارش کن.
- ردیف‌های تکراری را مشخص کن.
- واحدهای ناسازگار را پیدا کن.
- تاریخ‌های نامعتبر را گزارش کن.
- هیچ مقدار جدیدی نساز.
- داده را بدون تایید من اصلاح نکن.
- در پایان بگو برای رسم نمودار به چه اصلاحاتی نیاز است.

داده:
[جدول یا CSV]

مرحله چهارم: نوع نمودار را انتخاب کنید

برای پاسخ به سوال زیر، سه نوع نمودار پیشنهاد بده:

سوال:
روند درآمد ماهانه و ماه‌های دارای کاهش را نشان بده.

برای هر پیشنهاد بنویس:
- نوع نمودار
- دلیل انتخاب
- محور افقی
- محور عمودی
- نحوه نمایش ماه‌های کاهشی
- محدودیت نمودار

داده جدید تولید نکن.

مرحله پنجم: پیام اصلی را تعیین کنید

هر نمودار باید یک پیام اصلی داشته باشد:

درآمد در نیمه اول سال روند صعودی داشته، اما در تیر کاهش موقت ثبت شده است.

عنوان نمودار بهتر است پیام را منتقل کند.

عنوان ضعیف:

نمودار درآمد

عنوان بهتر:

درآمد ماهانه تا شهریور ۴۶ درصد افزایش یافت

عنوان دوم فقط زمانی استفاده شود که محاسبه ۴۶ درصد دقیق و تأیید شده باشد.

مرحله ششم: خروجی اولیه را بسازید

می‌توانید از مدل بخواهید:

  • کد Python
  • تنظیمات JSON
  • جدول آماده ورود به Canva
  • راهنمای ساخت در Excel
  • عنوان و زیرعنوان
  • توضیح نمودار
  • Alt Text

مرحله هفتم: اعداد را با داده اصلی تطبیق دهید

موارد زیر را بررسی کنید:

  • تعداد ردیف‌ها
  • حداقل و حداکثر
  • مجموع
  • میانگین
  • ترتیب زمانی
  • واحد
  • درصدها
  • دسته‌های حذف‌شده
  • فیلترهای اعمال‌شده

مرحله هشتم: خروجی را روی دستگاه واقعی بررسی کنید

نموداری که روی مانیتور بزرگ خواناست ممکن است روی موبایل ناخوانا باشد. اندازه برچسب، فاصله، Tooltip و نسبت تصویر را آزمایش کنید.

پرامپت‌های آماده رسم نمودار

پرامپت انتخاب بهترین نمودار

نقش تو متخصص مصورسازی داده است.

براساس سوال و ساختار داده زیر، مناسب‌ترین نمودار را پیشنهاد بده.

سوال:
[سوال موردنظر]

مخاطب:
[مدیر، مشتری، کاربر عمومی یا تیم فنی]

محل انتشار:
[گزارش، وب‌سایت، ارائه یا شبکه اجتماعی]

ستون‌ها:
[نام، نوع و واحد ستون‌ها]

خروجی:
1. نمودار پیشنهادی اصلی
2. دلیل انتخاب
3. محورهای نمودار
4. ترتیب داده
5. عنوان پیشنهادی
6. نکات طراحی
7. دو گزینه جایگزین
8. نمودارهایی که نباید استفاده شوند و دلیل آن

هیچ داده یا نتیجه‌ای را حدس نزن.

پرامپت تبدیل Excel به نمودار

فایل Excel زیر شامل داده فروش است.

ابتدا:
- ساختار ستون‌ها را بررسی کن.
- مقدارهای خالی و تکراری را گزارش کن.
- واحدها را شناسایی کن.
- ترتیب تاریخ را کنترل کن.

سپس برای این سوال نمودار پیشنهاد بده:
فروش هر محصول در شش ماه گذشته چگونه تغییر کرده است؟

خروجی:
- نوع نمودار
- ستون‌های موردنیاز
- فیلترهای لازم
- عنوان
- راهنمای ساخت در Excel
- کد Python با Plotly

داده اصلی را تغییر نده.

پرامپت نمودار مناسب ارائه مدیریتی

براساس داده زیر یک نمودار مناسب ارائه مدیریتی طراحی کن.

هدف:
مدیر باید در کمتر از ۱۰ ثانیه پیام اصلی را درک کند.

شرایط:
- فقط یک پیام اصلی نمایش داده شود.
- از نمودار سه‌بعدی استفاده نشود.
- تعداد رنگ‌ها محدود باشد.
- مقدارهای مهم برچسب داشته باشند.
- واحد محور مشخص باشد.
- منبع و بازه زمانی پیشنهاد شود.
- داده حذف یا دست‌کاری نشود.

خروجی:
نوع نمودار، عنوان، زیرعنوان، رنگ‌بندی،
توضیح طراحی و کد Plotly

پرامپت ساخت نمودار برای شبکه اجتماعی

داده زیر را برای یک پست عمودی شبکه اجتماعی آماده کن.

اندازه خروجی:
1080×1350

شرایط:
- عنوان کوتاه و خوانا باشد.
- حداکثر ۷ دسته نمایش داده شود.
- برچسب‌ها برای موبایل مناسب باشند.
- منبع داده در پایین نمودار قرار بگیرد.
- از رنگ‌های بسیار نزدیک استفاده نشود.
- نتیجه‌گیری بیش از داده نوشته نشود.

ابتدا محدودیت‌های داده را گزارش کن و سپس طراحی پیشنهادی بده.

پرامپت بررسی نمودار موجود

مشخصات نمودار زیر را ارزیابی کن.

بررسی کن:
- آیا نوع نمودار با هدف مناسب است؟
- آیا محور می‌تواند گمراه‌کننده باشد؟
- آیا واحدها مشخص‌اند؟
- آیا رنگ‌ها معنای روشنی دارند؟
- آیا برچسب‌ها خوانا هستند؟
- آیا عنوان نتیجه‌ای فراتر از داده می‌گیرد؟
- آیا دسته‌ای حذف شده است؟
- آیا نمودار در موبایل قابل‌فهم است؟

برای هر مشکل، اصلاح مشخص پیشنهاد بده.

پرامپت تولید Alt Text نمودار

برای نمودار زیر Alt Text فارسی بنویس.

شرایط:
- نوع نمودار را مشخص کن.
- موضوع و بازه زمانی را بگو.
- مهم‌ترین روند یا مقایسه قابل‌مشاهده را توضیح بده.
- همه نقاط داده را تکرار نکن.
- از نتیجه‌گیری علت و معلولی خودداری کن.
- متن حداکثر ۳۰۰ کاراکتر باشد.

مشخصات نمودار:
[نوع، محورها و داده]

ابزارهای ساخت نمودار با هوش مصنوعی

درواره

درواره یک زیرساخت API هوش مصنوعی است، نه نرم‌افزار آماده رسم نمودار. با استفاده از API درواره می‌توانید مدل‌های متنی را در فرایند مصورسازی داده به کار بگیرید تا:

  • ساختار داده را بررسی کنند.
  • نوع نمودار پیشنهاد دهند.
  • تنظیمات نمودار را به‌صورت JSON تولید کنند.
  • عنوان و توضیح بنویسند.
  • کد Plotly یا Matplotlib تولید کنند.
  • Alt Text بسازند.
  • خطاهای احتمالی داده را گزارش کنند.
  • ساخت نمودار در نرم‌افزار شما خودکار شود.

برای مشاهده مدل‌ها، قابلیت‌ها و قیمت‌های به‌روز به صفحه مدل‌های درواره مراجعه کنید.

Canva

Canva ابزار ساخت نمودار و قالب‌های گرافیکی مختلف ارائه می‌کند. امکان ورود داده و بارگذاری فایل‌هایی مانند CSV، TSV و XLSX در برخی ابزارهای نمودار آن وجود دارد. Canva Graph Maker

Canva برای خروجی شبکه اجتماعی، گزارش تصویری و ارائه مناسب است؛ به‌خصوص وقتی طراحی نهایی به متن، آیکون و هویت بصری نیاز دارد.

Datawrapper

Datawrapper برای ساخت نمودار، نقشه و جدول قابل‌انتشار در وب، ارائه و محتوای چاپی طراحی شده است. این ابزار خروجی‌های تعاملی و واکنش‌گرا ارائه می‌کند. Datawrapper

Flourish

Flourish ابزاری بدون نیاز به کدنویسی برای ساخت نمودار، نقشه، Story و محتوای تعاملی است. قالب‌های آن برای روایت داده و خروجی‌های متحرک کاربرد دارند. Flourish

Plotly

Plotly کتابخانه‌ای برای ساخت نمودارهای تعاملی با Python است و از نمودارهای خطی، میله‌ای، پراکندگی، Heatmap، Histogram و انواع دیگر پشتیبانی می‌کند. مستندات Plotly Python

ساخت نمودار با Python و Plotly

نصب کتابخانه‌ها:

pip install pandas plotly kaleido

فایل نمونه sales.csv:

month,revenue_million_toman,orders
فروردین,420,850
اردیبهشت,465,910
خرداد,510,980
تیر,488,945
مرداد,560,1080
شهریور,615,1160

کد نمودار خطی:

from pathlib import Path

import pandas as pd
import plotly.express as px

input_path = Path("sales.csv")
output_html = Path("monthly-revenue.html")
output_png = Path("monthly-revenue.png")

df = pd.read_csv(input_path)

required_columns = {
    "month",
    "revenue_million_toman",
}

missing_columns = required_columns - set(df.columns)

if missing_columns:
    raise ValueError(
        f"Missing columns: {sorted(missing_columns)}"
    )

fig = px.line(
    df,
    x="month",
    y="revenue_million_toman",
    markers=True,
    title="روند درآمد ماهانه",
    labels={
        "month": "ماه",
        "revenue_million_toman": "درآمد، میلیون تومان",
    },
)

fig.update_traces(
    line={
        "color": "#6D5DFB",
        "width": 4,
    },
    marker={
        "size": 10,
    },
)

fig.update_layout(
    template="plotly_white",
    font={
        "family": "Vazirmatn, Tahoma, Arial",
        "size": 15,
    },
    title={
        "x": 0.95,
        "xanchor": "right",
    },
    hovermode="x unified",
    margin={
        "l": 70,
        "r": 40,
        "t": 90,
        "b": 70,
    },
)

fig.write_html(
    output_html,
    include_plotlyjs="cdn",
)

fig.write_image(
    output_png,
    width=1400,
    height=800,
    scale=2,
)

print("Created:", output_html)
print("Created:", output_png)

فایل HTML تعاملی است و نسخه PNG را می‌توان در Ghost یا شبکه‌های اجتماعی استفاده کرد.

ساخت نمودار میله‌ای مرتب‌شده

import pandas as pd
import plotly.express as px

df = pd.DataFrame(
    {
        "product": [
            "محصول الف",
            "محصول ب",
            "محصول ج",
            "محصول د",
        ],
        "sales": [
            125,
            82,
            164,
            108,
        ],
    }
)

df = df.sort_values(
    "sales",
    ascending=True,
)

fig = px.bar(
    df,
    x="sales",
    y="product",
    orientation="h",
    text="sales",
    title="فروش محصولات",
    labels={
        "sales": "فروش، میلیون تومان",
        "product": "محصول",
    },
)

fig.update_traces(
    marker_color="#6D5DFB",
    textposition="outside",
)

fig.update_layout(
    template="plotly_white",
    showlegend=False,
    font={
        "family": "Vazirmatn, Tahoma, Arial",
        "size": 15,
    },
)

fig.show()

مرتب کردن میله‌ها مقایسه را ساده‌تر می‌کند، مگر اینکه دسته‌ها ترتیب طبیعی یا زمانی داشته باشند.

ساخت نمودار از متن با API درواره

روش حرفه‌ای این نیست که مدل را مستقیماً مسئول رسم نمودار کنیم. بهتر است مدل یک «مشخصات نمودار» یا Chart Specification تولید کند و برنامه شما آن را اعتبارسنجی و رندر کند.

فرایند پیشنهادی:

  1. کاربر هدف نمودار را توضیح می‌دهد.
  2. فایل CSV در سرور خوانده می‌شود.
  3. فقط نام ستون‌ها و خلاصه کنترل‌شده به مدل ارسال می‌شود.
  4. مدل نوع نمودار و ستون‌های لازم را پیشنهاد می‌دهد.
  5. برنامه پیشنهاد را اعتبارسنجی می‌کند.
  6. کتابخانه Plotly نمودار را می‌سازد.
  7. خروجی توسط کاربر بررسی می‌شود.

ساخت Chart Specification

نمونه خروجی:

{
  "chart_type": "line",
  "x_column": "month",
  "y_columns": [
    "revenue_million_toman"
  ],
  "title": "روند درآمد ماهانه",
  "x_label": "ماه",
  "y_label": "درآمد، میلیون تومان",
  "sort": {
    "column": "month",
    "direction": "source"
  },
  "show_values": false,
  "warnings": []
}

بهتر است مدل فقط از انواع نمودار تعریف‌شده در برنامه انتخاب کند:

bar
line
scatter
area
histogram
box
heatmap

با این روش، نیازی نیست کد تولیدشده توسط مدل را مستقیماً اجرا کنید.

تولید مشخصات نمودار با API درواره

نصب کتابخانه‌ها:

pip install openai python-dotenv pandas plotly kaleido

فایل .env:

DARVAREH_API_KEY=YOUR_API_KEY
DARVAREH_TEXT_MODEL=YOUR_MODEL_ID

YOUR_MODEL_ID باید با Model ID مدل انتخاب‌شده در درواره جایگزین شود.

کد:

import json
import os
from pathlib import Path

import pandas as pd
from dotenv import load_dotenv
from openai import OpenAI

load_dotenv()

api_key = os.getenv("DARVAREH_API_KEY")
model_id = os.getenv("DARVAREH_TEXT_MODEL")

if not api_key:
    raise RuntimeError("DARVAREH_API_KEY is not configured")

if not model_id:
    raise RuntimeError("DARVAREH_TEXT_MODEL is not configured")

client = OpenAI(
    api_key=api_key,
    base_url="https://api.darvareh.ir/v1",
)

csv_path = Path("sales.csv")
df = pd.read_csv(csv_path)

column_summary = []

for column in df.columns:
    column_summary.append(
        {
            "name": column,
            "dtype": str(df[column].dtype),
            "missing_count": int(df[column].isna().sum()),
            "sample_values": (
                df[column]
                .dropna()
                .astype(str)
                .head(5)
                .tolist()
            ),
        }
    )

user_goal = """
تغییر درآمد را در طول ماه‌ها نشان بده و
نمودار برای ارائه مدیریتی ساده باشد.
""".strip()

prompt = f"""
برای داده زیر مشخصات نمودار تولید کن.

هدف کاربر:
{user_goal}

ساختار ستون‌ها:
{json.dumps(column_summary, ensure_ascii=False)}

خروجی فقط JSON معتبر با این ساختار باشد:
{{
  "chart_type": "line یا bar یا scatter یا area یا histogram یا box",
  "x_column": "نام دقیق ستون",
  "y_columns": ["نام دقیق ستون"],
  "title": "عنوان فارسی",
  "x_label": "برچسب فارسی محور افقی",
  "y_label": "برچسب فارسی محور عمودی",
  "show_values": true,
  "warnings": []
}}

قواعد:
- فقط از نام ستون‌های موجود استفاده کن.
- داده جدید تولید نکن.
- اگر هدف با داده قابل انجام نیست، آن را در warnings بنویس.
- حداکثر دو ستون برای y_columns انتخاب کن.
- نمودار سه‌بعدی پیشنهاد نده.
""".strip()

response = client.chat.completions.create(
    model=model_id,
    messages=[
        {
            "role": "system",
            "content": (
                "تو متخصص مصورسازی داده هستی. "
                "فقط مشخصات نمودار تولید کن و "
                "نباید داده‌ای را حدس بزنی."
            ),
        },
        {
            "role": "user",
            "content": prompt,
        },
    ],
    temperature=0.1,
)

chart_spec = json.loads(
    response.choices[0].message.content
)

Path("chart-spec.json").write_text(
    json.dumps(
        chart_spec,
        ensure_ascii=False,
        indent=2,
    ),
    encoding="utf-8",
)

print(json.dumps(
    chart_spec,
    ensure_ascii=False,
    indent=2,
))

اعتبارسنجی مشخصات نمودار

خروجی مدل باید پیش از رندر بررسی شود:

ALLOWED_CHART_TYPES = {
    "line",
    "bar",
    "scatter",
    "area",
    "histogram",
    "box",
}


def validate_chart_spec(
    spec: dict,
    dataframe: pd.DataFrame,
) -> list[str]:
    errors = []

    chart_type = spec.get("chart_type")
    x_column = spec.get("x_column")
    y_columns = spec.get("y_columns", [])

    if chart_type not in ALLOWED_CHART_TYPES:
        errors.append(
            f"Unsupported chart type: {chart_type}"
        )

    if x_column not in dataframe.columns:
        errors.append(
            f"Unknown x column: {x_column}"
        )

    if not isinstance(y_columns, list):
        errors.append(
            "y_columns must be an array"
        )
    else:
        for column in y_columns:
            if column not in dataframe.columns:
                errors.append(
                    f"Unknown y column: {column}"
                )

    if len(y_columns) > 2:
        errors.append(
            "No more than two Y columns are allowed"
        )

    return errors

استفاده:

errors = validate_chart_spec(
    chart_spec,
    df,
)

if errors:
    raise ValueError(
        "Invalid chart specification:\n"
        + "\n".join(errors)
    )

رندر امن نمودار براساس تنظیمات

import plotly.express as px


def render_chart(
    dataframe: pd.DataFrame,
    spec: dict,
):
    chart_type = spec["chart_type"]
    x_column = spec["x_column"]
    y_columns = spec["y_columns"]
    y_value = (
        y_columns[0]
        if len(y_columns) == 1
        else y_columns
    )

    common_args = {
        "data_frame": dataframe,
        "x": x_column,
        "title": spec["title"],
        "labels": {
            x_column: spec["x_label"],
            **{
                column: spec["y_label"]
                for column in y_columns
            },
        },
    }

    if chart_type == "line":
        figure = px.line(
            **common_args,
            y=y_value,
            markers=True,
        )
    elif chart_type == "bar":
        figure = px.bar(
            **common_args,
            y=y_value,
            text_auto=spec.get(
                "show_values",
                False,
            ),
        )
    elif chart_type == "scatter":
        figure = px.scatter(
            **common_args,
            y=y_value,
        )
    elif chart_type == "area":
        figure = px.area(
            **common_args,
            y=y_value,
        )
    elif chart_type == "histogram":
        figure = px.histogram(
            dataframe,
            x=x_column,
            title=spec["title"],
            labels={
                x_column: spec["x_label"],
            },
        )
    elif chart_type == "box":
        figure = px.box(
            **common_args,
            y=y_value,
        )
    else:
        raise ValueError(
            f"Unsupported chart type: {chart_type}"
        )

    figure.update_layout(
        template="plotly_white",
        font={
            "family": "Vazirmatn, Tahoma, Arial",
            "size": 15,
        },
    )

    return figure

ساخت خروجی:

figure = render_chart(
    df,
    chart_spec,
)

figure.write_html(
    "ai-generated-chart.html",
    include_plotlyjs="cdn",
)

figure.write_image(
    "ai-generated-chart.png",
    width=1400,
    height=800,
    scale=2,
)

این معماری از اجرای مستقیم کد تولیدشده توسط مدل جلوگیری می‌کند و کنترل نوع نمودار و ستون‌های مجاز را در برنامه نگه می‌دارد.

ساخت نمودار برای Ghost

برای مقاله Ghost سه روش اصلی دارید:

تصویر PNG یا WebP

ساده‌ترین و سازگارترین روش است. برای تصاویر نمودار بهتر است کیفیت نوشته‌ها و اعداد را پس از تبدیل به WebP بررسی کنید.

فایل SVG

SVG برای نمودارهای خطی و برداری وضوح بالایی دارد، اما باید سازگاری قالب و سیاست بارگذاری سایت بررسی شود.

Embed نمودار تعاملی

ابزارهایی مانند Datawrapper و Flourish امکان Embed نمودار را ارائه می‌کنند. در Ghost می‌توانید کد Embed را داخل HTML Card قرار دهید.

پیش از انتشار، نمایش نمودار را روی موبایل بررسی کنید و از اسکرول افقی غیرضروری جلوگیری کنید.

قواعد طراحی نمودار فارسی

جهت متن

عنوان، توضیح و یادداشت فارسی بهتر است راست‌چین باشند. محورهای عددی همچنان باید براساس منطق نمودار نمایش داده شوند.

فونت

از فونتی استفاده کنید که اعداد و حروف فارسی را واضح نمایش دهد. در خروجی وب، فونت باید روی سایت بارگذاری شده یا جایگزین مناسب داشته باشد.

ترکیب فارسی و انگلیسی

عبارت‌هایی مانند API، CTR یا Conversion Rate ممکن است ترتیب متن را به‌هم بزنند. خروجی را در مرورگر و تصویر نهایی کنترل کنید.

واحد

واحد را در عنوان محور یا زیرعنوان بنویسید:

درآمد، میلیون تومان
زمان پاسخ، میلی‌ثانیه
نرخ تبدیل، درصد

اعداد فارسی یا انگلیسی

برای گزارش فارسی می‌توانید از اعداد فارسی استفاده کنید، اما یکدستی مهم‌تر است. در نمودارهای فنی، اعداد انگلیسی ممکن است خواناتر و با ابزارها سازگارتر باشند.

رنگ

از یک رنگ اصلی و یک رنگ تأکیدی استفاده کنید. تعداد زیاد رنگ‌ها فقط زمانی مناسب است که رنگ معنای واقعی و مشخصی داشته باشد.

نمودار ثابت یا تعاملی؟

ویژگینمودار ثابتنمودار تعاملی
فرمتPNG، WebP، SVGHTML و JavaScript
استفادهشبکه اجتماعی، PDF، مقالهداشبورد و وب‌سایت
Tooltipندارددارد
فیلترنداردممکن است داشته باشد
اشتراک‌گذاریسادهنیازمند میزبانی یا Embed
چاپمناسبنیازمند خروجی ثابت
موبایلقابل‌کنترلباید واکنش‌گرا باشد

برای مقاله‌ای که فقط یک پیام مشخص دارد، تصویر ثابت اغلب کافی است. برای داده‌های چندبعدی یا امکان جست‌وجو و فیلتر، نمودار تعاملی مفیدتر است.

چگونه از نمودار گمراه‌کننده جلوگیری کنیم؟

محور ناقص

در نمودار میله‌ای، شروع محور از مقداری غیر از صفر می‌تواند تفاوت‌ها را بزرگ‌تر از واقعیت نشان دهد.

حذف دسته‌های نامطلوب

نمایش فقط بخشی از داده بدون توضیح، برداشت نادرست ایجاد می‌کند.

مقایسه واحدهای متفاوت

تومان، ریال، درصد و تعداد نباید بدون توضیح روی یک محور مشترک قرار بگیرند.

استفاده از دو محور عمودی

Dual Axis می‌تواند رابطه‌ای قوی‌تر از واقعیت القا کند. فقط در صورت ضرورت و با برچسب واضح استفاده شود.

نمودار سه‌بعدی

زاویه دید، اندازه بخش‌ها را تحریف می‌کند.

عنوان نتیجه‌گیرانه

عنوان نباید نتیجه‌ای فراتر از داده بیان کند.

مقیاس زمانی نامنظم

اگر فاصله زمانی نقاط یکسان نیست، محور باید این تفاوت را نمایش دهد.

رنگ‌بندی جهت‌دار

قرمز و سبز معنای ارزشی دارند. فقط وقتی مثبت و منفی بودن داده مشخص است از آن‌ها استفاده کنید.

کنترل کیفیت نمودار تولیدشده

پیش از انتشار، این اعداد را جداگانه محاسبه و با نمودار مقایسه کنید:

print("Rows:", len(df))
print("Missing values:")
print(df.isna().sum())

print("Numeric summary:")
print(df.describe(numeric_only=True))

print("Duplicates:", df.duplicated().sum())

اگر نمودار براساس گروه‌بندی ساخته شده است، جدول گروه‌بندی را نیز چاپ کنید:

summary = (
    df.groupby("product", as_index=False)
    ["sales"]
    .sum()
    .sort_values("sales", ascending=False)
)

print(summary)

همیشه باید بتوانید هر میله، نقطه یا خط نمودار را به مقدار مشخصی در جدول برگردانید.

چک‌لیست نهایی رسم نمودار

پیش از انتشار بررسی کنید:

  • سوال تحلیلی مشخص است.
  • نوع نمودار با سوال هماهنگ است.
  • داده از منبع معتبر گرفته شده است.
  • واحدها یکسان هستند.
  • مقدار خالی با صفر اشتباه نشده است.
  • ردیف تکراری وجود ندارد.
  • ترتیب تاریخ درست است.
  • محورهای نمودار برچسب دارند.
  • واحد محور مشخص است.
  • عنوان پیام واقعی داده را بیان می‌کند.
  • عنوان نتیجه‌ای فراتر از داده نمی‌گیرد.
  • محور میله‌ای بدون دلیل برش نخورده است.
  • رنگ‌ها معنای مشخص دارند.
  • نمودار سه‌بعدی نیست.
  • تعداد دسته‌ها بیش از حد نیست.
  • نوشته‌ها روی موبایل خوانا هستند.
  • اعداد نمودار با جدول اصلی تطبیق داده شده‌اند.
  • منبع و بازه زمانی ذکر شده است.
  • Alt Text نوشته شده است.
  • داده یا کد تولیدشده توسط مدل بازبینی شده است.
  • خروجی تعاملی در اندازه‌های مختلف آزمایش شده است.

سوالات متداول

آیا هوش مصنوعی می‌تواند از Excel نمودار بسازد؟

بله. هوش مصنوعی می‌تواند ساختار فایل را بررسی، نوع نمودار پیشنهاد و کد یا تنظیمات آن را تولید کند. داده و نتیجه نهایی باید با فایل اصلی تطبیق داده شوند.

بهترین نمودار برای نمایش فروش چیست؟

برای مقایسه فروش محصولات از نمودار میله‌ای و برای نمایش روند فروش در زمان از نمودار خطی استفاده کنید. انتخاب نهایی به سوال موردنظر بستگی دارد.

چگونه از متن نمودار بسازیم؟

ابتدا اطلاعات متن را به جدول ساختاریافته تبدیل کنید، سپس ستون‌ها و واحدها را کنترل کرده و نوع نمودار مناسب را انتخاب کنید. اگر متن فاقد عدد باشد، ساخت نمودار عددی ممکن نیست.

آیا می‌توان نمودار فارسی ساخت؟

بله. باید فونت فارسی، راست‌چین بودن عنوان، نمایش واحد و ترکیب متن فارسی و انگلیسی را در خروجی نهایی کنترل کنید.

چگونه نمودار تعاملی بسازیم؟

Plotly، Datawrapper و Flourish امکان تولید نمودار تعاملی را فراهم می‌کنند. برای نمایش آن در سایت می‌توانید فایل HTML یا کد Embed استفاده کنید.

آیا نمودار دایره‌ای همیشه برای درصد مناسب است؟

خیر. اگر تعداد دسته‌ها زیاد یا مقادیر نزدیک باشند، نمودار میله‌ای مقایسه دقیق‌تری ارائه می‌کند. نمودار دایره‌ای برای تعداد کمی از بخش‌های یک کل مناسب است.

آیا هوش مصنوعی ممکن است نمودار اشتباه بسازد؟

بله. مدل ممکن است ستون نامناسب انتخاب کند، واحد را اشتباه بفهمد یا داده ناقص را نادرست تفسیر کند. مشخصات نمودار و اعداد نهایی باید اعتبارسنجی شوند.

آیا درواره یک نرم‌افزار نمودارساز است؟

درواره زیرساخت API هوش مصنوعی است. می‌توانید از مدل‌های آن برای تحلیل ساختار داده، انتخاب نمودار، تولید مشخصات JSON و ساخت کد موردنیاز نرم‌افزار نمودارساز استفاده کنید.

هزینه استفاده از API برای تولید نمودار چقدر است؟

هزینه به مدل انتخابی، حجم داده، تعداد توکن‌ها و تعداد درخواست‌ها بستگی دارد. برای مشاهده قیمت‌های به‌روز، صفحه مدل‌های درواره را بررسی کنید.

جمع‌بندی

رسم نمودار با هوش مصنوعی می‌تواند فاصله میان یک فایل خام و یک تصویر قابل‌فهم را کوتاه کند. هوش مصنوعی در انتخاب نوع نمودار، آماده‌سازی عنوان، تولید تنظیمات JSON، نوشتن کد و توضیح خروجی مفید است؛ اما نباید جای کنترل صحت داده را بگیرد.

برای نمودارهای ساده و طراحی‌شده می‌توانید از Canva استفاده کنید. Datawrapper و Flourish برای محتوای وب و نمودار تعاملی مناسب‌اند و Plotly امکان ساخت خروجی‌های برنامه‌پذیر با Python را فراهم می‌کند.

اگر می‌خواهید قابلیت تبدیل داده به نمودار را به نرم‌افزار، داشبورد یا سامانه گزارش‌گیری خود اضافه کنید، API هوش مصنوعی درواره می‌تواند بخش تحلیل دستور کاربر و تولید Chart Specification را انجام دهد.

برای شروع، در درواره ثبت‌نام کنید، مدل مناسب را از صفحه مدل‌ها انتخاب کنید و اولین فرایند تولید کنترل‌شده نمودار را بسازید.

مقالات مرتبط

برای مطالعه شرایط استفاده و محدودیت‌های مسئولیت، صفحه «سلب مسئولیت» را مشاهده کنید.

Read more