Exploratory Data Analysis (EDA) হলো ডেটা সেটের বৈশিষ্ট্য এবং কাঠামো সম্পর্কে প্রাথমিক ধারণা পাওয়ার একটি প্রক্রিয়া। এর মাধ্যমে ডেটা বিশ্লেষণ করতে আমরা ডেটার মধ্যে লুকানো প্যাটার্ন, সম্পর্ক, অস্বাভাবিকতা বা ত্রুটি খুঁজে বের করি, যাতে পরবর্তী বিশ্লেষণ এবং মডেলিংয়ের জন্য প্রস্তুতি নেওয়া যায়। EDA প্রক্রিয়া ডেটার ভ্যালিডিটি যাচাই, স্ট্যাটিস্টিক্যাল টেস্টিং, এবং ভিজ্যুয়ালাইজেশন মাধ্যমে প্রাথমিক তথ্য সংগ্রহ করতে সাহায্য করে।
EDA সাধারণত ডেটা প্রক্রিয়াকরণ এবং ডেটা ক্লিনিং এর প্রথম ধাপে ব্যবহৃত হয়, যেখানে ডেটার গুণমান পর্যালোচনা করা হয় এবং ডেটার সম্পর্ক বিশ্লেষণ করা হয়।
EDA প্রক্রিয়া সাধারণত নিচের ধাপগুলো অনুসরণ করে:
প্রথমে ডেটা লোড করা হয় এবং তার মধ্যে উপস্থিত বিভিন্ন উপাদানগুলি চিহ্নিত করা হয়।
import pandas as pd
# ডেটা লোড করা
data = pd.read_csv('data.csv')
# প্রথম কয়েকটি রেকর্ড দেখানো
print(data.head())
ডেটার সারাংশ দেখতে এবং তার সাথে সম্পর্কিত বিভিন্ন গুরুত্বপূর্ণ পরিসংখ্যান পর্যালোচনা করা:
# ডেটার সারাংশ দেখানো
print(data.describe())
# ডেটার তথ্যের প্রকার দেখতে
print(data.info())
ডেটাতে অনুপস্থিত মান (Missing Values) এবং আউটলায়ার চিহ্নিত করা হয়।
# অনুপস্থিত মান খুঁজে বের করা
print(data.isnull().sum())
# অনুপস্থিত মান পূর্ণ করা
data.fillna(0, inplace=True)
ডেটার ভিজ্যুয়ালাইজেশন (যেমন হিস্টোগ্রাম, বক্সপ্লট, স্ক্যাটার প্লট) ব্যবহার করা হয় প্যাটার্ন এবং সম্পর্ক চিহ্নিত করতে।
import seaborn as sns
import matplotlib.pyplot as plt
# হিস্টোগ্রাম
sns.histplot(data['column_name'])
plt.show()
# বক্সপ্লট
sns.boxplot(x=data['column_name'])
plt.show()
# স্ক্যাটার প্লট
sns.scatterplot(x=data['column1'], y=data['column2'])
plt.show()
ডেটার মধ্যে সম্পর্ক এবং কোরেলেশন পরীক্ষা করা:
# কোরেলেশন ম্যাট্রিক্স
correlation = data.corr()
sns.heatmap(correlation, annot=True, cmap='coolwarm')
plt.show()
আউটলায়ার চিহ্নিত করতে বক্সপ্লট এবং অন্যান্য ভিজ্যুয়ালাইজেশন টেকনিক ব্যবহার করা হয়।
# বক্সপ্লটের মাধ্যমে আউটলায়ার চিহ্নিত করা
sns.boxplot(x=data['column_name'])
plt.show()
Exploratory Data Analysis (EDA) একটি গুরুত্বপূর্ণ প্রক্রিয়া যা ডেটার উপর গভীরভাবে কাজ করার আগে তা ভালোভাবে বোঝার সুযোগ প্রদান করে। এটি ডেটার মধ্যে থাকা প্যাটার্ন, সম্পর্ক, এবং অস্বাভাবিকতা চিহ্নিত করতে সহায়ক। EDA করার মাধ্যমে পরবর্তী পরিসংখ্যানিক মডেল বা মেশিন লার্নিং মডেল নির্মাণের জন্য গুরুত্বপূর্ণ তথ্য সংগ্রহ করা যায়।
ডেটা ভিজুয়ালাইজেশন একটি গুরুত্বপূর্ণ অংশ, যা ডেটা বিশ্লেষণ এবং মডেলিং প্রক্রিয়াকে সহজ এবং কার্যকর করে তোলে। H2O.ai প্ল্যাটফর্ম ডেটা ভিজুয়ালাইজেশনের জন্য দুটি প্রধান পদ্ধতি প্রদান করে: H2O.ai Flow এবং Python/R এর মাধ্যমে।
H2O Flow একটি ওয়েব-ভিত্তিক ইউজার ইন্টারফেস যা H2O.ai এর সাথে সংযুক্ত সমস্ত ডেটা এবং মডেলগুলির ভিজুয়ালাইজেশন সরবরাহ করে। এটি ব্যবহারকারীদের ডেটা বিশ্লেষণ এবং মডেল ট্রেনিং-এর জন্য একটি সহজ ইন্টারফেস প্রদান করে।
H2O Flow চালু করুন:
প্রথমে, H2O সার্ভার চালু করতে হবে, এবং তারপর H2O Flow ইন্টারফেসটি আপনার ব্রাউজারে খোলার জন্য একটি লিংক তৈরি করবে:
import h2o
h2o.init()
এই কোডটি H2O সার্ভার চালু করবে এবং Flow ইন্টারফেসটি শুরু করবে, যা সাধারণত localhost:54321 এ খোলে।
ডেটা আপলোড করুন:
Flow ইন্টারফেসে ডেটা আপলোড করার জন্য:
ডেটা ভিজুয়ালাইজেশন:
Flow ইন্টারফেসে ডেটা ভিজুয়ালাইজ করার জন্য বেশ কিছু অপশন থাকবে:
Pair Plot
ব্যবহার করুন।H2O Flow ইন্টারফেসে আপনি সহজেই ডেটা বিশ্লেষণ এবং মডেল ফলাফল ভিজুয়ালাইজ করতে পারবেন।
Python এ ডেটা ভিজুয়ালাইজেশন করার জন্য সাধারণত Matplotlib, Seaborn, অথবা Plotly এর মতো লাইব্রেরি ব্যবহৃত হয়।
Python এর মাধ্যমে ডেটা লোড করা:
import h2o
h2o.init()
# ডেটা লোড করা
data = h2o.import_file("path/to/your/data.csv")
Pandas DataFrame এ কনভার্ট করা:
H2O ডেটা ফ্রেমকে pandas ডেটা ফ্রেমে কনভার্ট করে ভিজুয়ালাইজেশন করা সহজ:
import pandas as pd
# H2O ডেটা ফ্রেমকে pandas ডেটা ফ্রেমে কনভার্ট করা
data_pandas = data.as_data_frame()
Matplotlib এবং Seaborn এর মাধ্যমে ভিজুয়ালাইজেশন:
import matplotlib.pyplot as plt
import seaborn as sns
# Histogram তৈরি করা
plt.figure(figsize=(10,6))
sns.histplot(data_pandas['column_name'], kde=True)
plt.title('Histogram of Column Name')
plt.show()
Pair Plot এবং Scatter Plot:
# Pair plot
sns.pairplot(data_pandas)
plt.show()
# Scatter plot
plt.scatter(data_pandas['column1'], data_pandas['column2'])
plt.xlabel('Column 1')
plt.ylabel('Column 2')
plt.title('Scatter plot between Column 1 and Column 2')
plt.show()
import plotly.express as px
# Scatter plot তৈরি করা
fig = px.scatter(data_pandas, x="column1", y="column2", title="Scatter Plot")
fig.show()
Plotly ব্যবহারে আপনি ইন্টারেক্টিভ গ্রাফ তৈরি করতে পারবেন, যা ব্যবহারকারীদের জন্য আরও আকর্ষণীয় এবং কার্যকর।
R এর জন্য সাধারণত ggplot2 এবং plotly ব্যবহার করা হয়।
R এ ডেটা লোড করা:
library(h2o)
h2o.init()
# ডেটা লোড করা
data <- h2o.importFile("path/to/your/data.csv")
H2O ডেটা ফ্রেমকে R DataFrame এ কনভার্ট করা:
data_r <- as.data.frame(data)
ggplot2 ব্যবহার করে ভিজুয়ালাইজেশন:
library(ggplot2)
# Histogram তৈরি করা
ggplot(data_r, aes(x = column_name)) +
geom_histogram(binwidth = 1, fill = "blue", color = "black") +
ggtitle("Histogram of Column Name")
ggplot2 এর মাধ্যমে Scatter Plot:
ggplot(data_r, aes(x = column1, y = column2)) +
geom_point() +
ggtitle("Scatter Plot between Column 1 and Column 2")
library(plotly)
# Scatter plot তৈরি করা
plot_ly(data_r, x = ~column1, y = ~column2, type = "scatter", mode = "markers")
Plotly এর মাধ্যমে আপনি ইন্টারেক্টিভ গ্রাফ তৈরি করতে পারবেন, যা আরও বেশি ভিজুয়াল এনগেজমেন্ট তৈরি করে।
Matplotlib
, Seaborn
, এবং Plotly
ব্যবহার করে ডেটা ভিজুয়ালাইজেশন করা যায়।ggplot2
এবং plotly
ব্যবহার করে ডেটা ভিজুয়ালাইজেশন করা যায়।H2O.ai এর প্ল্যাটফর্ম এবং Python/R এর মাধ্যমে ডেটা ভিজুয়ালাইজেশন ব্যবহারের মাধ্যমে আপনি ডেটার গুরুত্বপূর্ণ ইনসাইট দ্রুত এবং কার্যকরভাবে পেতে পারবেন।
Summary statistics বা সারাংশ পরিসংখ্যান হলো একটি ডেটা সেটের মূল বৈশিষ্ট্যগুলি দ্রুত এবং সহজভাবে বিশ্লেষণ করার জন্য ব্যবহৃত পরিসংখ্যান। এটি ডেটার সারাংশ তুলে ধরার জন্য ব্যবহৃত কিছু মৌলিক পরিসংখ্যানগত মেট্রিক্স সরবরাহ করে, যেমন:
গড় হলো ডেটা সেটের সমস্ত মানের যোগফলকে ডেটা পয়েন্টের সংখ্যা দিয়ে ভাগ করার ফল। এটি ডেটার সাধারণ মাত্রা বা কেন্দ্রীয় প্রবণতাকে দেখায়।
মধ্যম হলো ডেটা সেটের মাঝের মান। যখন ডেটা গুলি সাজানো থাকে, তখন মধ্যম হলো সেই মান যা মাঝখানে অবস্থান করে। যদি ডেটার সংখ্যা বিজোড় হয়, তাহলে একক মান হবে; যদি সোজা হয়, তাহলে দুটি মানের গড়।
Mode হলো ডেটা সেটের সবচেয়ে বারবার পাওয়া মান। এটি ডেটার প্রবণতাকে চিহ্নিত করতে সহায়ক।
প্রমিত বিচ্যুতি হল একটি পরিসংখ্যান যা ডেটা পয়েন্টের গড় থেকে কতটুকু বিচ্যুত হতে পারে তা পরিমাপ করে।
Variance হলো standard deviation এর বর্গ। এটি ডেটার বিস্তার বা ছড়িয়ে পড়ার পরিমাণকে মাপতে ব্যবহৃত হয়।
Range হলো ডেটা সেটের সর্বোচ্চ মান এবং সর্বনিম্ন মানের মধ্যে পার্থক্য।
Quartiles হলো ডেটা সেটকে চারটি সমান অংশে ভাগ করার পদ্ধতি। IQR হলো তৃতীয় Quartile (Q3) এবং প্রথম Quartile (Q1) এর মধ্যে পার্থক্য।
Correlation analysis হলো দুটি বা তার বেশি ভেরিয়েবলের মধ্যে সম্পর্ক পরিমাপ করার প্রক্রিয়া। এটি সাহায্য করে বুঝতে যে এক ভেরিয়েবল অন্য ভেরিয়েবলের উপর কতটুকু প্রভাব ফেলছে।
Correlation coefficient একটি পরিসংখ্যানগত মান যা দুটি ভেরিয়েবলের মধ্যে সম্পর্কের শক্তি এবং দিক নির্দেশ করে। এটি -1 থেকে 1 এর মধ্যে থাকে, যেখানে:
Pearson’s correlation coefficient সবচেয়ে সাধারণভাবে ব্যবহৃত পরিসংখ্যান যা দুটি ভেরিয়েবলের মধ্যে রৈখিক সম্পর্কের শক্তি পরিমাপ করে।
Spearman’s rank correlation coefficient রৈখিক সম্পর্কের পরিবর্তে, দুটি ভেরিয়েবলের মধ্যে মন্থন সম্পর্ক (monotonic relationship) পরিমাপ করে।
Kendall’s tau coefficient দুটি ভেরিয়েবলের মধ্যে সম্পর্কের পরিমাপ করে, বিশেষত যখন ডেটা শ্রেণীবদ্ধ করা হয়।
Correlation matrix হলো একাধিক ভেরিয়েবলের মধ্যে সম্পর্কের একটি টেবিল। এটি একসাথে সমস্ত ভেরিয়েবলের মধ্যে সম্পর্কের শক্তি এবং দিক প্রদর্শন করে। এটি ডেটা বিশ্লেষণে সাহায্য করে যখন একাধিক ভেরিয়েবলের মধ্যে সম্পর্কের মূল্যায়ন করা দরকার।
Correlation visualization গ্রাফিক্যাল উপস্থাপনা দেয়, যেমন:
এই বিশ্লেষণগুলি ডেটা সায়েন্স এবং মেশিন লার্নিং মডেল তৈরির ক্ষেত্রে ডেটার কাঠামো এবং সম্পর্ক বুঝতে সহায়ক।
মেশিন লার্নিং এবং ডেটা সায়েন্সে Feature Engineering এবং Feature Selection দুটি অত্যন্ত গুরুত্বপূর্ণ পদক্ষেপ। এগুলি মডেল প্রশিক্ষণের জন্য প্রয়োজনীয় বৈশিষ্ট্য (features) নির্বাচন এবং তৈরি করার প্রক্রিয়া। নিম্নে প্রতিটি ধারণা বিস্তারিতভাবে ব্যাখ্যা করা হয়েছে।
Feature Engineering হল এমন একটি প্রক্রিয়া যেখানে raw ডেটা থেকে নতুন বা গুরুত্বপূর্ণ বৈশিষ্ট্য তৈরি করা হয়, যা মেশিন লার্নিং মডেলকে আরও ভালোভাবে কাজ করতে সহায়ক হয়। এর মাধ্যমে ডেটা থেকে বিভিন্ন বৈশিষ্ট্য তৈরি করা হয় যা মডেলের পারফরম্যান্স উন্নত করতে সাহায্য করে।
age * income
হিসেবে একটি নতুন বৈশিষ্ট্য তৈরি করা।Weekday
বা Weekend
নামে একটি নতুন ফিচার তৈরি করা।log(Income)
ব্যবহার করা।Feature Selection হল সেই প্রক্রিয়া যেখানে এমন বৈশিষ্ট্যগুলি নির্বাচন করা হয় যা মডেলকে সর্বোত্তম পারফরম্যান্স দেয় এবং অপ্রয়োজনীয় বা অব্যবহৃত বৈশিষ্ট্যগুলি বাদ দেওয়া হয়। এটি মডেলকে দ্রুততর এবং বেশি কার্যকর করতে সহায়ক।
উচ্চ মানের ফিচার ইঞ্জিনিয়ারিং এবং সঠিক ফিচার সিলেকশন মডেলের পারফরম্যান্সের জন্য অত্যন্ত গুরুত্বপূর্ণ, এবং মেশিন লার্নিং প্রকল্পে এই দুটি পদক্ষেপ সফলতার চাবিকাঠি।
ডেটা প্রক্রিয়াকরণের প্রাথমিক পদক্ষেপগুলির মধ্যে Outlier Detection (আউটলাইয়ার সনাক্তকরণ) এবং Missing Value Handling (মিসিং ভ্যালু হ্যান্ডলিং) অত্যন্ত গুরুত্বপূর্ণ। ডেটার গুণগত মান উন্নত করতে এবং মডেল ট্রেনিংয়ের ক্ষেত্রে সঠিক ফলাফল পাওয়ার জন্য এই দুটি ধাপ অবশ্যই প্রয়োজনীয়।
আউটলাইয়ার হলো সেই ডেটা পয়েন্ট বা ভ্যালু যা বাকী ডেটার থেকে উল্লেখযোগ্যভাবে পৃথক বা দূরে অবস্থান করে। আউটলাইয়ার সনাক্তকরণ গুরুত্বপূর্ণ, কারণ আউটলাইয়ার ডেটা মডেলের ফলাফল বা বিশ্লেষণে ভুল প্রভাব ফেলতে পারে।
Z-Score Method: Z-স্কোর ডেটার বর্তমান ভ্যালু এবং তার গড় থেকে কতটুকু দূরে তা নির্ধারণ করে। সাধারণত Z-স্কোর ±3 এর বাইরে থাকলে তা আউটলাইয়ার হিসেবে চিহ্নিত করা হয়।
from scipy import stats
import numpy as np
data = np.array([10, 12, 15, 22, 98, 10, 14, 15, 12, 11])
z_scores = np.abs(stats.zscore(data))
outliers = np.where(z_scores > 3)
print(outliers)
IQR (Interquartile Range) Method: IQR পদ্ধতিতে ডেটার ২৫% এবং ৭৫% কোয়ান্টাইল এর মধ্যে পার্থক্যকে ব্যবহার করে আউটলাইয়ার সনাক্ত করা হয়। যদি একটি ডেটা পয়েন্ট Q1 - 1.5 * IQR এর চেয়ে কম বা Q3 + 1.5 * IQR এর চেয়ে বেশি হয়, তবে সেটি আউটলাইয়ার হিসেবে চিহ্নিত করা হয়।
import numpy as np
data = np.array([10, 12, 15, 22, 98, 10, 14, 15, 12, 11])
Q1 = np.percentile(data, 25)
Q3 = np.percentile(data, 75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
outliers = [x for x in data if x < lower_bound or x > upper_bound]
print(outliers)
মিসিং ভ্যালু বা অনুপস্থিত ডেটা যেকোনো ডেটাসেটে সাধারণ সমস্যা। সঠিকভাবে মিসিং ভ্যালু হ্যান্ডলিং না করলে মডেলিংয়ের প্রক্রিয়া বিপর্যস্ত হতে পারে এবং ফলস্বরূপ সঠিক পূর্বাভাস পাওয়া কঠিন হয়ে পড়তে পারে।
Remove Missing Values (মিসিং ভ্যালু অপসারণ): মিসিং ভ্যালু বিশাল পরিমাণে যদি না থাকে, তবে সম্পূর্ণ সারি বা কলাম অপসারণ করা যেতে পারে।
import pandas as pd
df = pd.DataFrame({'A': [1, 2, np.nan, 4], 'B': [5, 6, 7, 8]})
df = df.dropna()
print(df)
Mean/Median Imputation: কন্টিনিউয়াস ডেটার জন্য মিসিং ভ্যালুগুলো গড় (mean) বা মধ্যম (median) মান দিয়ে পূর্ণ করা যায়।
df['A'] = df['A'].fillna(df['A'].mean())
Mode Imputation: ক্যাটেগরিক্যাল ডেটার জন্য মিসিং ভ্যালুগুলো সর্বাধিক পুনরাবৃত্ত মান দিয়ে পূর্ণ করা হয়।
df['B'] = df['B'].fillna(df['B'].mode()[0])
এই প্রক্রিয়াগুলি সঠিকভাবে অনুসরণ করলে ডেটার গুণগত মান বৃদ্ধি পায় এবং মডেলিংয়ে আরও সঠিক ফলাফল পাওয়া যায়।
Read more