Course 01 – Data Analytics / Data Science Basics

Module 08 – Database Basics + SQL

අප bisher වැඩ කළේ CSV বা Excel වැනි තනි ගොනු (flat files) වල ඇති දත්ත සමඟයි. නමුත් සැබෑ ලෝකයේ, විශේෂයෙන්ම විශාල ආයතන වල දත්ත ගබඩා කර ඇත්තේ **Databases (දත්ත සමුදායන්)** වලයි. දත්ත විශ්ලේෂකයෙකු ලෙස, මෙම දත්ත සමුදායන් සමඟ සෘජුවම කතා කර, අවශ්‍ය දත්ත ලබා ගැනීමේ හැකියාව අත්‍යවශ්‍ය කුසලතාවකි. ඒ සඳහා අප භාවිතා කරන භාෂාව තමයි **SQL (Structured Query Language)**.


Relational Databases (සම්බන්ධතා දත්ත සමුදායන්)

වඩාත්ම ප්‍රචලිත දත්ත සමුදා වර්ගය වන්නේ Relational Databases (RDBMS) ය. මෙහිදී දත්ත, එකිනෙකට සම්බන්ධ වූ වගු (tables) වල ගබඩා කර ඇත. සෑම වගුවක්ම Pandas DataFrame එකක් මෙන් පේළි (rows) සහ තීරු (columns) වලින් සමන්විත වේ.

උපමාව: මෙය හරියට ඔබගේ දුරකථනයේ ඇති 'Contacts' සහ 'Call Log' යන app දෙක වැනිය. 'Contacts' වගුවේ ඔබගේ මිතුරන්ගේ නම්, දුරකථන අංක, ලිපින ඇත. 'Call Log' වගුවේ ඇමතුම් ගත් වේලාවන් සහ දුරකථන අංක ඇත. මෙම වගු දෙකම 'දුරකථන අංකය' නමැති පොදු තීරුවකින් එකිනෙකට සම්බන්ධ වී ඇත. එම සම්බන්ධතාවය නිසා, ඔබට යම් දුරකථන අංකයකින් ඇමතුමක් ආ විට, එය කාගෙන්දැයි හඳුනාගත හැකිය.

Relational Databases වලදීද, මෙලෙස වගු එකිනෙකට සම්බන්ධ කිරීමෙන් දත්ත නැවත නැවත ඇතුළත් කිරීම (data redundancy) අවම කර, දත්ත වල නිරවද්‍යතාවය (data integrity) ආරක්ෂා කරයි. MySQL, PostgreSQL, SQLite, Microsoft SQL Server යනු ජනප්‍රිය RDBMS කිහිපයකි.


SQL - දත්ත සමුදායේ භාෂාව

SQL (Structured Query Language), බොහෝ විට "sequel" ලෙස උච්චාරණය කෙරේ, යනු relational databases වලින් දත්ත ලබා ගැනීමට (retrieve), ඇතුළත් කිරීමට (insert), යාවත්කාලීන කිරීමට (update), සහ මකා දැමීමට (delete) භාවිතා කරන සම්මත භාෂාවයි. දත්ත විශ්ලේෂකයෙකු ලෙස අපට වඩාත්ම වැදගත් වන්නේ දත්ත ලබාගැනීමයි. අපි දැන් ඒ සඳහා අවශ්‍ය මූලික SQL commands ඉගෙන ගනිමු.

SELECT සහ FROM: දත්ත තෝරාගැනීම

`SELECT` මගින් අපට අවශ්‍ය තීරු (columns) මොනවාදැයි ද, `FROM` මගින් එම දත්ත ලබාගත යුත්තේ කුමන වගුවෙන්ද (table) යන්න ද කියයි.

-- 'Employees' වගුවේ ඇති සියලුම තීරු සහ පේළි ලබාගැනීම (* යනු 'සියල්ල') SELECT * FROM Employees; -- 'Employees' වගුවෙන් 'FirstName' සහ 'LastName' යන තීරු පමණක් ලබාගැනීම SELECT FirstName, LastName FROM Employees;
WHERE: දත්ත පෙරීම (Filtering)

`WHERE` clause එක මගින් යම් කොන්දේසියකට ගැලපෙන පේළි පමණක් තෝරාගත හැක. මෙය Pandas හි filtering වලට සමාන වේ.

-- 'Sales' department එකේ සේවය කරන සියලුම සේවකයින්ගේ තොරතුරු ලබාගැනීම SELECT * FROM Employees WHERE Department = 'Sales'; -- පඩිය (Salary) 50000 ට වඩා වැඩි සේවකයින්ගේ නම් ලබාගැනීම SELECT FirstName, LastName FROM Employees WHERE Salary > 50000;
JOIN: වගු සම්බන්ධ කිරීම

`JOIN` යනු SQL හි ඇති ඉතාමත් ප්‍රබල command එකකි. පොදු තීරුවක් (common column) පදනම් කරගෙන, වගු දෙකක් හෝ වැඩි ගණනක් එකට සම්බන්ධ කිරීමට මෙය භාවිතා කරයි.

-- 'Employees' සහ 'Departments' යන වගු දෙක 'DepartmentID' මත පදනම්ව සම්බන්ධ කිරීම SELECT Employees.FirstName, Departments.DepartmentName FROM Employees JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;
GROUP BY: දත්ත සාරාංශගත කිරීම

`GROUP BY` මගින් දත්ත යම් තීරුවක අගයන්ට අනුව කාණ්ඩ කර, එක් එක් කාණ්ඩය සඳහා සාරාංශ ගණනයන් (aggregate functions) සිදු කළ හැක. `COUNT()`, `SUM()`, `AVG()` (Average) යනු බහුලව භාවිතා වන aggregate functions වේ.

-- එක් එක් department එකේ සේවය කරන සේවකයන් ගණන සෙවීම SELECT Department, COUNT(EmployeeID) FROM Employees GROUP BY Department;

SQL + Pandas Integration

Python වල ඇති `sqlite3` (SQLite සඳහා) বা `psycopg2` (PostgreSQL සඳහා) වැනි libraries භාවිතයෙන්, අපට Pandas සමඟ සෘජුවම database එකකට සම්බන්ධ වී, SQL query එකක් ක්‍රියාත්මක කර, එහි ප්‍රතිඵලය DataFrame එකකට ලබාගත හැකිය. `pd.read_sql_query()` ශ්‍රිතය මේ සඳහා ඉතා පහසු ක්‍රමයක් සපයයි.

# Python code in Jupyter Notebook import pandas as pd import sqlite3 # database එකට connection එකක් සාදාගැනීම (මෙവിടെදී 'company.db' නමැති file එකක් සාදයි) conn = sqlite3.connect('company.db') # අපගේ SQL query එක string එකක් ලෙස සකස් කිරීම query = """ SELECT Department, AVG(Salary) as AverageSalary FROM Employees WHERE Age > 30 GROUP BY Department; """ # SQL query එක ක්‍රියාත්මක කර, ප්‍රතිඵලය DataFrame එකකට ලබාගැනීම df_from_db = pd.read_sql_query(query, conn) # Connection එක close කිරීම conn.close() print(df_from_db)
මෙම Module එකේදී...
  • Relational Databases (RDBMS) යනු කුමක්ද?
  • `SELECT` සහ `FROM` භාවිතය.
  • `WHERE` මගින් දත්ත filter කිරීම.
  • `JOIN` මගින් වගු සම්බන්ධ කිරීම.
  • `GROUP BY` මගින් දත්ත සාරාංශගත කිරීම.
  • Python/Pandas සමඟ SQL ඒකාබද්ධ කිරීම.