JFreeChart লাইব্রেরি ব্যবহার করে Moving Average এবং Trend Lines যোগ করা সাধারণত Time Series Data বা XY Chart তৈরি করার জন্য ব্যবহৃত হয়। এটি ডেটার ধারা এবং ভবিষ্যৎ প্রবণতা চিহ্নিত করতে সহায়ক। Moving Average এবং Trend Line-এর সাহায্যে ডেটার মধ্যে লুকানো প্যাটার্ন বা সম্পর্ক বের করা সম্ভব।
এই দুটি উপাদানকে কাস্টমাইজ করে ডেটা ভিজুয়ালাইজেশন আরো কার্যকরী এবং অর্থপূর্ণ করা যায়।
১. Moving Average যোগ করা
Moving Average সাধারণত একটি নির্দিষ্ট সময়সীমার মধ্যে ডেটার গড় মান নির্ধারণ করতে ব্যবহৃত হয়। এটি ডেটার মধ্যে সঠিক ট্রেন্ড বুঝতে সাহায্য করে এবং অস্থিরতা বা উত্থান-পতন কমাতে সহায়ক।
Moving Average এর উদাহরণ:
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import javax.swing.*;
import java.awt.*;
import java.util.LinkedList;
import java.util.Queue;
public class MovingAverageExample {
public static void main(String[] args) {
// ডেটাসেট তৈরি করা
XYSeries series = new XYSeries("Data Points");
series.add(1, 10);
series.add(2, 15);
series.add(3, 20);
series.add(4, 25);
series.add(5, 30);
series.add(6, 35);
series.add(7, 40);
series.add(8, 45);
series.add(9, 50);
series.add(10, 55);
XYSeriesCollection dataset = new XYSeriesCollection(series);
// Moving Average সিরিজ তৈরি
XYSeries movingAvgSeries = new XYSeries("Moving Average");
Queue<Double> lastThreeValues = new LinkedList<>();
double sum = 0;
for (int i = 1; i <= 10; i++) {
double value = series.getY(i - 1).doubleValue();
lastThreeValues.add(value);
sum += value;
// গত 3 মানের Moving Average বের করা
if (lastThreeValues.size() > 3) {
sum -= lastThreeValues.poll();
}
if (lastThreeValues.size() == 3) {
movingAvgSeries.add(i, sum / lastThreeValues.size());
}
}
// Moving Average ডেটাসেট যোগ করা
dataset.addSeries(movingAvgSeries);
// XYChart তৈরি করা
JFreeChart chart = ChartFactory.createXYLineChart(
"Data with Moving Average", // Chart Title
"X-Axis", // X-Axis Label
"Y-Axis", // Y-Axis Label
dataset // Dataset
);
XYPlot plot = chart.getXYPlot();
// ChartPanel তৈরি এবং JFrame এ প্রদর্শন
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(800, 600));
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(chartPanel);
frame.pack();
frame.setVisible(true);
}
}
কোড ব্যাখ্যা:
- Moving Average - এখানে আমরা শেষ 3টি ডেটার গড় বের করেছি।
lastThreeValuesQueue-তে মানগুলো যোগ করা হয় এবং আগের মান বের করে গড় হিসাব করা হয়। - XYSeries ব্যবহার করা হয়েছে মূল ডেটা এবং Moving Average এর ডেটা সিরিজ তৈরি করতে।
- ChartFactory.createXYLineChart() ব্যবহার করে মূল ডেটা এবং Moving Average একসাথে প্রদর্শিত হবে।
২. Trend Line যোগ করা
Trend Line ডেটার সাধারণ প্রবণতা বা প্যাটার্ন দেখানোর জন্য একটি সোজা লাইন ব্যবহার করা হয়। এটি সাধারণত Linear Regression বা অন্য কোন পদ্ধতির মাধ্যমে তৈরি করা যায়।
Trend Line এর উদাহরণ:
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import javax.swing.*;
import java.awt.*;
public class TrendLineExample {
public static void main(String[] args) {
// ডেটাসেট তৈরি করা
XYSeries series = new XYSeries("Data Points");
series.add(1, 5);
series.add(2, 8);
series.add(3, 12);
series.add(4, 16);
series.add(5, 20);
series.add(6, 24);
series.add(7, 28);
series.add(8, 32);
series.add(9, 36);
series.add(10, 40);
XYSeriesCollection dataset = new XYSeriesCollection(series);
// Trend Line সিরিজ তৈরি (সোজা লাইন)
XYSeries trendLine = new XYSeries("Trend Line");
trendLine.add(1, 5); // প্রথম পয়েন্ট
trendLine.add(10, 40); // শেষ পয়েন্ট
// Trend Line ডেটাসেট যোগ করা
dataset.addSeries(trendLine);
// XYChart তৈরি করা
JFreeChart chart = ChartFactory.createXYLineChart(
"Data with Trend Line", // Chart Title
"X-Axis", // X-Axis Label
"Y-Axis", // Y-Axis Label
dataset // Dataset
);
XYPlot plot = chart.getXYPlot();
// ChartPanel তৈরি এবং JFrame এ প্রদর্শন
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(800, 600));
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(chartPanel);
frame.pack();
frame.setVisible(true);
}
}
কোড ব্যাখ্যা:
- Trend Line - ট্রেন্ড লাইন তৈরি করতে আমরা সরলরেখা ব্যবহার করেছি। এখানে প্রথম পয়েন্ট এবং শেষ পয়েন্ট দিয়ে একটি সোজা লাইন তৈরি হয়েছে।
- Trend Line সিরিজ XYSeries-এ যোগ করা হয়েছে, যাতে সেটি গ্রাফে দেখানো যায়।
Moving Average এবং Trend Line এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Moving Average | Trend Line |
|---|---|---|
| উদ্দেশ্য | ডেটার মধ্যে অস্থিরতা কমাতে এবং সামগ্রিক ট্রেন্ড বোঝাতে | ডেটার সামগ্রিক ট্রেন্ড বা প্রবণতা চিহ্নিত করতে |
| ডেটা | নির্দিষ্ট সময়সীমার মধ্যে গড় (যেমন ৩ দিনের গড়) | ডেটার একটি সাধারণ সোজা লাইন (যেমন লিনিয়ার রিগ্রেশন) |
| ফলাফল | একাধিক পয়েন্টের গড় হিসেবে একটি মসৃণ লাইন তৈরি হয় | একক সোজা লাইন যা ডেটার প্রবণতাকে প্রদর্শন করে |
সারসংক্ষেপ
JFreeChart এর মাধ্যমে আপনি Moving Average এবং Trend Line দুটি অত্যন্ত কার্যকরী উপাদান সহজেই চার্টে যোগ করতে পারেন। Moving Average ডেটার মধ্যে অস্থিরতা কমাতে এবং সঠিক ট্রেন্ড নির্ধারণে সাহায্য করে, যেখানে Trend Line ডেটার সাধারণ প্রবণতা বা প্যাটার্ন দেখানোর জন্য ব্যবহৃত হয়। এই দুটি উপাদান আপনাকে ডেটার মধ্যে গভীর বিশ্লেষণ করতে সাহায্য করে এবং সঠিক সিদ্ধান্ত গ্রহণে সহায়ক।
Read more