Module 9 of 10

Visualization

"ಚಿತ್ರයක් ಸಾವಿರ ಪದಗಳಿಗೆ ಸಮ" - අපගේ ප්‍රතිඵල, ප්‍රස්ತාර බවට පත් කර, දත්ත වල කතාව දෘශ්‍යමානව කියමු.

පසුගිය මොඩියුලයේදී, අපි අපගේ ව්‍යාපෘතියේ ප්‍රධාන ඉලක්කය සපුරා ගත්තෙමු - අපගේ ML model එකේ අනාවැකි භාවිතා කර, පළමු ස්ථානය ලබා ගන්නා ශිෂ්‍යයාව සාර්ථකව හඳුනා ගත්තෙමු. අපි අපගේ DataFrame එක දෙස බලා, සංඛ්‍යා සංසන්දනය කර, නිගමන වලට එළඹුනෙමු. මෙය ඉතා හොඳයි, නමුත් Data Science යනු හුදෙක් සංඛ්‍යා විශ්ලේෂණය කිරීම පමණක් නොවේ. එය එම විශ්ලේෂණයෙන් ලබාගත් තොරතුරු, අන් අයට පහසුවෙන් තේරුම් ගත හැකි ආකාරයට ඉදිරිපත් කිරීම (communicating insights) ගැනද වේ.

මෙම කාර්යය සඳහා ඇති බලවත්ම මෙවලම තමයි Data Visualization හෙවත් දත්ත දෘශ්‍යමානකරණය. සංඛ්‍යා පිරුණු වගුවක් දෙස බලා රටා හඳුනා ගැනීමට අපගේ මොළයට අපහසු විය හැක. නමුත්, එම සංඛ්‍යා ප්‍රස්තාරයක් (chart) හෝ ග්‍රැෆික් එකක් බවට පත් කළ විට, සැඟවුණු රටා, සම්බන්ධතා, සහ විෂමතා පවා ක්ෂණිකව හඳුනා ගැනීමට අපට හැකියාව ලැබේ. මෙම මොඩියුලයේදී, අපි Python ලෝකයේ visualization සඳහා බහුලවම භාවිතා වන libraries දෙකක් වන Matplotlib සහ Seaborn හඳුන්වා දී, අපගේ ප්‍රතිඵල "කතා කරන" ප්‍රස්තාර දෙකක් නිර්මාණය කරමු.

සරල උපමාවක්: ඔබ වෛද්‍යවරයෙකු වෙත ගියා යැයි සිතන්න. වෛද්‍යවරයා, ඔබගේ රුධිර පරීක්ෂණ වාර්තාවේ ඇති කොලෙස්ටරෝල්, සීනි, ආදී සංඛ්‍යා සියල්ල ඔබට කියවනවාට වඩා, එම අගයන් "Normal", "Borderline", "High" ලෙස වර්ණ කේත යෙදූ ප්‍රස්තාරයක පෙන්වුවහොත්, ඔබට ඔබගේ සෞඛ්‍ය තත්ත්වය ගැන ක්ෂණික සහ පැහැදිලි අවබෝධයක් ලැබෙනවා නේද? Data Visualization කරන්නේද එම කාර්යයමයි - සංකීර්ණ දත්ත, පහසුවෙන් තේරුම් ගත හැකි දෘශ්‍ය කතාවක් බවට පත් කිරීම.

Introducing Matplotlib & Seaborn

Matplotlib යනු Python හි ඇති මූලිකම සහ පැරණිතම plotting library එකයි. එය ඔබට ඕනෑම ආකාරයක ප්‍රස්තාරයක් පාහේ නිර්මාණය කිරීමට ඉඩ සලසන, ඉතා නම්‍යශීලී (flexible) මෙවලමකි. Seaborn යනු Matplotlib මත ගොඩනගන ලද, ඊට වඩා නවීන library එකකි. එය, ඉතා අඩු code ප්‍රමාණයකින්, සංඛ්‍යානමය වශයෙන් තොරතුරු බහුල, සහ සෞන්දර්යාත්මකව ඉතා අලංකාර ප්‍රස්තාර නිර්මාණය කිරීම සඳහා විශේෂයෙන්ම නිර්මාණය කර ඇත.

මෙම libraries භාවිතා කිරීමට පෙර, ඒවා `pip` භාවිතයෙන් install කරගත යුතුය.

pip install matplotlib seaborn

Scatter Plot: Actual vs Predicted

අපගේ model එකේ සමස්ත ක්‍රියාකාරීත්වය (overall performance) ඇගයීමට ඇති හොඳම ක්‍රමයක් නම්, සැබෑ අගයන් (Actual Scores) සහ පුරෝකථනය කළ අගයන් (Predicted Scores) අතර ඇති සම්බන්ධතාවය දෘශ්‍යමාන කිරීමයි. මේ සඳහා Scatter Plot (විකිරණ සටහන) එකක් ඉතා යෝග්‍ය වේ.

Scatter plot එකක, අපි x-අක්ෂය මත එක් විචල්‍යයක්ද (උදා: Actual Score), y-අක්ෂය මත අනෙක් විචල්‍යයද (උදා: Predicted Score) සලකුණු කර, එක් එක් දත්ත ලක්ෂ්‍යය (අපගේ නඩුවේදී, එක් එක් ශිෂ්‍යයා) තිතක් ලෙස නිරූපණය කරමු.

අප බලාපොරොත්තු වන්නේ කුමක්ද? අපගේ model එක 100% ක් නිවැරදි නම්, සෑම ශිෂ්‍යයෙකු සඳහාම Actual Score එක සහ Predicted Score එක සමාන විය යුතුය. එවිට, සියලුම තිත්, 45° ක ආනතියක් ඇති සරල රේඛාවක් (a perfect diagonal line) මත පිහිටනු ඇත. සැබෑ ලෝකයේදී මෙය සිදු නොවුනත්, අපගේ තිත් එම විකර්ණ රේඛාවට හැකි තරම් ආසන්නව, තදින් ගොනු වී තිබේ නම්, එයින් අදහස් වන්නේ අපගේ model එක ඉතා හොඳින් ක්‍රියා කරන බවයි.

Seaborn භාවිතයෙන් මෙම ප්‍රස්තාරය නිර්මාණය කිරීම ඉතා පහසුය.

# Import necessary libraries
import matplotlib.pyplot as plt
import seaborn as sns

# Set a nice style for the plots
sns.set_style('whitegrid')

# Create the scatter plot
plt.figure(figsize=(8, 6)) # Set the figure size
sns.scatterplot(x='FinalScore', y='PredictedScore', data=df)

# Add a reference line (the perfect prediction line)
plt.plot([df['FinalScore'].min(), df['FinalScore'].max()], [df['FinalScore'].min(), df['FinalScore'].max()], 'r--')

# Add titles and labels for clarity
plt.title('Actual Scores vs. Predicted Scores')
plt.xlabel('Actual Final Score')
plt.ylabel('Predicted Final Score')

# Show the plot
plt.show()

Bar Chart: Students vs Scores

Scatter plot එක මගින් model එකේ සමස්ත ක්‍රියාකාරීත්වය ගැන හොඳ අදහසක් ලැබුනත්, එක් එක් ශිෂ්‍යයා සඳහා අනාවැකිය කෙතරම් නිවැරදිදැයි බැලීමට එය එතරම් සුදුසු නොවේ. එම කාර්යය සඳහා, Bar Chart (තීරු ප්‍රස්තාරය) එකක් වඩාත් ඵලදායී වේ.

අපට එක් එක් ශිෂ්‍යයා සඳහා, ඔහුගේ සැබෑ `FinalScore` එක සහ `PredictedScore` එක නියෝජනය කරන තීරු දෙකක්, එකිනෙකට යාබදව ඇඳිය හැක. මෙය කිරීමෙන්, model එකේ අනාවැකිය, සැබෑ අගයට වඩා වැඩිද, අඩුද, සහ කොපමණකින් වෙනස්ද යන්න එක බැල්මකින් දැකගත හැකිය.

# To create a bar chart, we need to "melt" our DataFrame first
# This reshapes the data to make it easier to plot with seaborn
df_melted = df.melt(id_vars='StudentID', value_vars=['FinalScore', 'PredictedScore'], var_name='Score_Type', value_name='Score')

# Create the bar chart
plt.figure(figsize=(12, 7)) # Set a wider figure size
sns.barplot(x='StudentID', y='Score', hue='Score_Type', data=df_melted)

# Add titles and labels
plt.title('Comparison of Actual and Predicted Scores for Each Student')
plt.xlabel('Student ID')
plt.ylabel('Score')

# Show the plot
plt.show()

මෙම ප්‍රස්තාරය දෙස බැලූ විට, ඔබට එක් එක් ශිෂ්‍යයා සඳහා නිල් පැහැති තීරුව (Actual Score) සහ තැඹිලි පැහැති තීරුව (Predicted Score) අතර ඇති උසෙහි වෙනස පහසුවෙන් දැකගත හැක. බොහෝ ශිෂ්‍යයින් සඳහා, මෙම තීරු දෙකේ උස ඉතා ආසන්න බව ඔබට පෙනෙනු ඇත, එය නැවතත් අපගේ model එකේ සාර්ථකත්වය තහවුරු කරයි.