إدارة البيانات عن طريق قاعدة بيانات SQLite العلائقية – تطبيق عملي على بيانات الغابات

الأحد 12 ربيع الثاني 1444ھ الأحد 6 نوفمبر 2022م
فيسبوك
تويتر
واتساب
تيليجرام
لينكدإن
المحتوى

المحتوى

مقدمة

إن وفرة البيانات اليوم تمثل تحديًا جديدًا لمهندسي البيانات، حيث أنه أصبح من اللازم صنع أنظمة قواعد بيانات مختصة لحفظ البيانات تسهل عملية إدارتها والوصول إليها. وكما أشرنا سابقا، إن إدارة البيانات هي أساس النجاح في مشاريع علم البيانات والذكاء الاصطناعي، وذلك لأننا نحتاج إلى البيانات من أجل تدريب نماذج تعلم الآلة، فإن لم يكن لدينا بالأساس قاعدة بيانات تحتفظ بالبيانات، لن يكون عندنا حينها بيانات لكي نستخدمها في عمل نماذج تعلم الآلة أو تحليلها للوصول إلى استنتاجات مفيدة. ولذلك يجب حفظ البيانات وتسهيل عملية الوصول إليها قدر الإمكان, وإن من أهم الأدوات في إدارة وحفظ البيانات هي قواعد البيانات، لأن الهدف الأساسي لقواعد البيانات هو حفظ البيانات وتسهيل عملية الوصول إليها أو تعديلها. و في الحقيقة نحن نستخدم قواعد البيانات منذ أكثر من خمسون عامًا، ومع مرور الزمن تطورت قواعد البيانات وأصبح هناك العديد من الأنواع. وفي هذا الدرس، سنتطرق إلى أحد أهم الأنواع والمعروف بـ SQLite.

أهداف الدرس

أنواع البيانات

إن مصطلح البيانات هو مصطلح شامل يحتوي على مئات الأصناف من الملفات، حيث أن تغريدتك في تويتر تعتبر بيانات، وجدول الإكسل المستخدم في متجر الحلوى يعتبر بيانات، بل أن صورتك في انستغرام هي أيضا تعتبر بيانات. ولذلك سوف نلاحظ أن كل ما يتم رفعه على الإنترنت بإمكاننا اعتباره نوع من أنواع البيانات، ومهمتنا نحن كعلماء بيانات هو استخدامها من أجل الوصول إلى قرارات مفيدة ومربحة.

على سبيل المثال، يقوم فريق من علماء البيانات بجمع البيانات الاستهلاكية في المتاجر الغذائية لمعرفة ماهي السلع الأكثر مبيعا؟ وماهي أكثر أيام الأسبوع التي يأتي فيها الزبائن؟ وما هي الأرباح المتوقعة في الشهر القادم؟ وهناك فريق ثاني من علماء البيانات آخرون يقومون بجمع تغريدات المستخدمين في تويتر من أجل تحليل تفاعلهم تجاه أمر معين كالأسهم أو مباريات كرة القدم. وحين النظر في الفريقين، نجد أن كل فريق يستخدم قاعدة بيانات مختلفة عن الأخرى، وذلك لأن نوع البيانات مختلف. إذًا ماهي الأنواع التي نتحدث عنها وكيف نعرف ماهي قاعدة البيانات المناسبة؟ لاحظ في الصورة المرفقة في الأسفل، أن هناك ثلاثة أنواع أساسية من البيانات. أولا البيانات المنظمة، ثم شبه المنظمة، وأخيرا البيانات الغير منظمة وتفصيلها كالتالي:

حسنًا، ربما استنتجت من الصورة أن معظم البيانات الموجودة على الإنترنت هي البيانات الغير منظمة! وهذا الاستنتاج صحيح تماما. حيث أن تفاعلاتنا على الإنترنت و زيارتنا في الأسواق وغيرها من الأنشطة تصنع كميات ضخمة من البيانات الغير منظمة. ولأننا نعلم أن البيانات المنظمة هي ذات الفائدة الأكبر في تدريب نماذج تعلم الآلة أو استنتاج قرارات مفيدة، يقوم مهندسو البيانات بتحويل البيانات الغير منظمة إلى بيانات منظمة (ستركتشرد - Structured) لكي تصبح ذات نفع عالي نستطيع من خلالها تدريب نماذج تعلم الآلة والذكاء الاصطناعي واستنباط استنتاجات منطقية

ماذا نريد أن نفعل؟

إن هدفنا اليوم هو التطرق إلى إدارة البيانات ذات الفائدة الأكبر وهي البيانات المنظمة. ويتم بالعادة إدارتها عن طريق أنظمة قواعد البيانات العلائقية Relational Database Management Systems (RDMS). حيث أنها تعتبر أشهر أنواع قواعد البيانات وهي متخصصة في البيانات المنظمة (أي جداول البيانات) والبيانات المخزنة فيها إما أنها منظمة بالأصل أو تم تحويلها من غير منظمة إلى منظمة لكي يتم حفظها في قاعدة البيانات العلائقية. واليوم سوف يكون تركيزنا على كيفية تخزين واستدعاء البيانات المنظمة منها.

ما هو نظام قاعدة البيانات العلائقية المستخدمة في هذا الدرس؟

إن هنالك العديد من أنظمة قواعد البيانات العلائقية ومن أشهرها SQLite ،MySQL ،PostgreSQL، وبغض النظر عن نوع قاعدة البيانات المستخدمة، هناك شيء مشترك بينهم وهو أن معظم قواعد البيانات العلائقية نستطيع إدارة البيانات فيها من خلال لغة الــ SQL.

إذا ماهي SQL؟

لغة (الإس كيو إل) هي لغة برمجية نستطيع من خلالها إدارة قاعدة البيانات العلائقية. فمثلا، تتيح لنا هذه الغة صناعة جداول جديدة أو استيراد جداول وتخزينها في قاعدة البيانات. وأيضا تتيح لنا تعديل البيانات مثل حذف أعمدة معينة أو تحديث بيانات صف معين. وأيضا تستخدم اللغة لعمل استخراج وربط البيانات من قاعدة البيانات. ولذلك تعتبر هذه اللغة من أهم اللغات لعلماء ومهندسي البيانات.

ماهي البيانات المستخدمة؟

تم أخذ جدولَيْ بيانات من موقع البيانات السعودية المفتوحة (قسم الزراعة والأسماك)

الجدول الأول حملة التشجير لنجعلها خضراء حتى تاريخ 10 ديسمبر 2020
الجدول الثاني بيانات الغابات حتى عام 2021

وقد قمنا بإجراء بعض التعديلات الطفيفة عليهم، ولذلك إن أردت تحميل البيانات، ننصح بتحميل الجدولين من هنا

الخطوة الأولى: استدعاء المكتبات اللازمة

Step One: Import Necessary Libraries

لأننا سوف نقوم باستخدام كلا من البايثون والإس كيو إل، سنقوم بتنزيل المكتبتين التاليتين والتي تتيح لنا استخدام الـ SQL

				
					# To download these two libraries, uncomment the codes below 
# لتنزيل المكتبتين في الأسفل كم بإزالة الكومنت من الأكواد التالية

#!pip install sqlite3  # To manage SQLite db - لإدارة قاعدة البيانات
#!pip install ipython-sql # To write sql commands in this notebook - من أجل كتابة أوامر إس كيو إل
				
			
				
					import pandas as pd # To read csv file from GitHub - لقراءة البيانات من جيت هوب
import sqlite3  # To manage SQLite db - لإدارة قاعدة البيانات
				
			
				
					# When writing sql scripts, we will use the magic command '%'.
# سوف نقوم باستخدام علامة خاصة % عند كتابة أكواد السيكول من أجل التفرقة بينها وبين البايثون

# to load the ipython-sql extension, we will use the following code 
# من أجل استخدام الإضافة التي تتيح لنا استخدام الإس كيو إل سوف نقوم باستخدام الكود التالي
%load_ext sql
				
			

الخطوة الثانية: استخدام مكتبة البانداس لقراءة إطاري البيانات

Step Two: Use Pandas to Read Dataframes from GitHub

سوف نقوم الآن بقراءة الجدولين عن طريق استخدام مكتبة Pandas

				
					Afforestation_KSA = pd.read_csv('https://github.com/KAFSALAH/Fihm_Lessons/raw/master/Data_Management_SQLite/Afforestation_KSA.csv')
Forests_KSA = pd.read_csv('https://github.com/KAFSALAH/Fihm_Lessons/raw/master/Data_Management_SQLite/Forests_KSA.csv')
				
			

الخطوة الثالثة: إنشاء قاعدة البيانات

Step Three: Create SQLite Database
				
					con = sqlite3.connect("My_Forest_DB.db") # Creating the db - إنشاء قاعدة البيانات
				
			

عند تشغيل الكود الذي بالأعلى، سوف تلاحظ ظهور ملف جديد، هذا الملف هو قاعدة البيانات ونلاحظ أن حجم الملف هو صفر بايت لأننا لم نقم بتخزين جداول فيه للآن

الآن سوف نقوم بالاتصال بقاعدة البيانات عن طريق الكود التالي

				
					%sql sqlite:///My_Forest_DB.db
				
			

يلي ذلك حفظ الإطارين في قاعدة البيانات المنشأة

				
					## Loading dataframes into the db
## حفظ الجدولين في قاعدة البيانات التي تم إنشاؤها
Afforestation_KSA.to_sql("Afforestation_KSA", con, if_exists='replace', index=False,method="multi")
Forests_KSA.to_sql("Forests_KSA", con, if_exists='replace', index=False,method="multi")
				
			

يتم التحقق إذا ما تم تخزين الجدولين في قاعدة البيانات عن طريق الكود التالي

				
					# Checking the current tables in the db - التحقق من الجداول الموجودة حاليا في قاعدة البيانات

%sql SELECT name FROM sqlite_master WHERE type='table';
				
			

لاحظ تغير حجم قاعدة البيانات بعد تخزين الجدولين فيها

الخطوة الرابعة: استكشاف الجدول الأول في قاعدة البيانات

Step Four: Explore the First Table in the Database

الآن سنقوم بالتعرف على أهم أكواد الـ SQL التي سوف نستخدمها لاستكشاف الجدولين. وأولا، سنقوم باستكشاف الجدول الأول وهو بيانات التشجير في المملكة العربية السعودية والمسمى بـ Afforestation_KSA.

				
					%%sql
-- We use '*' to select the complete table
-- نحن نستخدم النجمة في حالة إردنا استعداء الجدول بالكامل

SELECT * FROM Afforestation_KSA;
				
			

لاحظ كيف أن النجمة تقوم باستعداء جميع الصفوف والأعمدة، ولكن ماذا لو أردنا استدعاء أعمدة محددة فقط؟ في الحقيقية نستطيع فعل هذا الأمر بسهولة. سوف نقوم باستبدال النجمة بأسماء الأعمدة التي نريد إظهارها.

				
					%%sql
-- We will call 'State', 'Total_afforestation' columns only
-- سنقوم باستعداء عمودي المنطقة ومجموع أعداد التشجير فقط 

SELECT State, Total_afforestation FROM Afforestation_KSA;
				
			

حسنًا! ماذا لو أننا نريد أعداد التشجير في منطقة عسير فقط؟

				
					%%sql
-- We use 'WHERE' to add a condition
-- نقوم باستخدام وير من إجل إضافة شرط معين

SELECT * FROM Afforestation_KSA
WHERE State = 'عسير';
				
			
				
					%%sql
-- We can also use 'LIKE' command as follows
-- نستطيع أيضا استخدام لايك كالتالي

SELECT * FROM Afforestation_KSA
WHERE State LIKE '%منطقة المدينة المنورة%';
				
			

سوف نقوم بتصفية الجدول عن طريق استدعاء بيانات المناطق التي كان موجوع أعداد التشجير فيها ما بين 300,000 و 500,000

				
					%%sql

SELECT * FROM Afforestation_KSA
WHERE Total_afforestation BETWEEN 300000 AND 500000
				
			

نستطيع كذلك ترتيب الجدول من الأكبر للأصغر أو العكس. والآن سنقوم بترتيب المناطق حسب مجموع التشجير من الأكبر للأصغر

				
					%%sql
-- We use 'ORDER BY' to order table, and 'DESC' to make a descending order
-- نقوم باستخدام كود أوردر باي من أجل ترتيب الجدول، وكود ديس من أجل جعل الجدول يترتب من الأكبر للأصغر

SELECT * FROM Afforestation_KSA
ORDER BY Total_afforestation DESC;
				
			

الخطوة الخامسة: استكشاف الجدول الثاني في قاعدة البيانات

Step Five: Explore the Second Table in the Database

والآن فلستكشف الجدول الثاني، وهو جدول يحتوي على بيانات الغابات في المملكة العربية السعودية. ولأننا نتوقع أن الجدول سوف يكون كبيرا نظرا لعدد الغابات الكثيرة. دعونا نحدد أننا نريد رؤية السبعة الصفوف الأولى فقط

				
					%%sql
-- we use LIMIT to specify number of rows
-- نستعمل كود ليميت لتحديد عدد الصفوف التي سوف تظهر


SELECT * FROM Forests_KSA 
LIMIT 7;
				
			
 * sqlite:///My_Forest_DB.db
Done.

حسنا، ماذا لو كنا مهتمين في معرفة عدد الصفوف؟ أي بمعنى آخر: ماذا لو أردنا معرفة عدد الغابات في المملكة العربية السعودية؟

				
					%%sql
-- We count number of rows using 'COUNT' 
-- نقوم بعد عدد الصفوف عن طريق كود كاونت

SELECT COUNT(*) from Forests_KSA;
				
			
 * sqlite:///My_Forest_DB.db
Done.

في الكود الذي في الأعلى، قمنا بعد عدد الغابات في المملكة العربية السعودية وكانت النتيجة ٢٨٠ غابة. نستطيع أيضا تسمية النتيجة بالطريقة التالية

				
					%%sql
-- We use 'AS' to give the result a name
-- نقوم باستخدام آس لإعطاء اسم للنتيجة

SELECT COUNT(*) AS number_of_forests_KSA from Forests_KSA;
				
			
 * sqlite:///My_Forest_DB.db
Done.

فلنقم الآن باستكشاف عدد الغابات الموجودة في منطقة نجران كالتالي

				
					%%sql
-- We use WHERE to add a condition
-- نقوم باستخدام وير من أجل إضافة شرط

SELECT COUNT(*) as forests_in_Najran FROM Forests_KSA
WHERE State = 'نجران'
				
			
 * sqlite:///My_Forest_DB.db
Done.

لقد اكتشفنا أنه يوجد ١٠ غابات في منطقة نجران. والآن، فلنبحث عن ماهي أسماء الغابات العشرة في نجران عن طريق استخدام الكود التالي

				
					%%sql

SELECT Forest_Name, plants_type from Forests_KSA 
WHERE State = 'نجران'
				
			
 * sqlite:///My_Forest_DB.db
Done.

أيضا: إذا أردنا معرفة أسماء الأعمدة، ونوعها في جدول الغابات، نستطيع استخدام الكود التالي

				
					%%sql 
SELECT name,type,length(type) FROM PRAGMA_TABLE_INFO('Forests_KSA');
				
			
 * sqlite:///My_Forest_DB.db
Done.

الخطوة السادسة: إضافة جدول ثالث إلى قاعدة البيانات

Step Six: Add a Third Table to the Database

قمنا في السابق بإضافة جداول بانداز إلى قاعدة البيانات. ولكن هذه الجداول أخذت جاهزة وتمت إضافتها بشكل مباشر. والآن سوف نقوم بصناعة جدول البيانات بأنفسنا عن طريق أكواد الـ SQL. الجدول الافتراضي سوف يكون الغابات التي زرتها

				
					%%sql
-- We will use 'CREATE TABLE', then we will assign names of the columns and their types
-- سنقوم بصناعة الجدول وتحديد أسماء الأعمدة وأنواعهم

CREATE TABLE Forests_I_Visited (
    Forest_index VARCHAR(4) , 
    My_rating INT,  
    Visit_date DATE);
				
			
				
					# Checking the current tables in the db - التحقق من الجداول الموجودة حاليا في قاعدة البيانات

%sql SELECT name FROM sqlite_master WHERE type='table'
				
			
				
					%%sql

SELECT * FROM Forests_I_Visited
				
			

Forest_index     My_rating      Visit_date

نلاحظ أن تم إضافة الجدول إلى قاعدة البيانات، ولكن ما زال الجدول فارغ ولا يوجد فيه أية معلومات. فلنقم الآن بإضافة بعض الصفوف

				
					%%sql

INSERT INTO Forests_I_Visited (Forest_index, My_rating, Visit_date)
VALUES
('F_3' ,10, '2020-10-23'),
('F_7' ,8, '2021-01-11'),
('F_11' ,9, '2022-06-26')
				
			

للتحقق من شكل الجدول الآن

				
					%%sql

SELECT * FROM Forests_I_Visited
				
			
 * sqlite:///My_Forest_DB.db
Done.

خطوة إضافية: ربط بين الجدول الثاني والثالث

Bonus Step: Relate Between the 2nd and 3rd Table

نلاحظ من الجدول الثالث الذي تمت صناعته أن هناك ثلاثة أعمدة. رقم الغابة، والتقييم لتجربة زيارة الغابة، وما هو تاريخ زيارة الغابة. ولكن ماذا لو أردنا معرفة ماهي أسماء تلك الغابات؟ هنا تكمن أهمية لغة الإس كيو إل وأنظمة قواعد البيانات في تمكينها لمهندسي وعلماء البيانات من ربط الجداول عن طريق علاقات منطقية. فنستطيع أخذ أرقام الغابات من الجدول الثالث (الغابات التي زرتها) Forests_I_Visited، واستخدامها في الجدول الثاني (غابات المملكة العربية السعودية) أو Forests_KSA لمعرفة ماهي أسماء تلك الغابات

				
					%%sql

Select A.Forest_Name, B.My_rating FROM Forests_KSA AS A, Forests_I_Visited AS B
WHERE A.Forest_index = B.Forest_index
				
			

إن أردنا التخلص من جدول معين. نستطيع استخدام الكود التالي

				
					%%sql
DROP TABLE Forests_I_Visited;
				
			
				
					# Checking the current tables in the db - التحقق من الجداول الموجودة حاليا في قاعدة البيانات

%sql SELECT name FROM sqlite_master WHERE type='table'
				
			

ماذا تعلمنا؟

كيف أتعلم لغة SQL؟

لقد استنتجنا الآن أن لغة الــ SQL من أهم اللغات لعلماء البيانات. ولعلك الآن تتساءل عن كيفية اتقان هذه اللغة؟ والجواب هو أن هناك العديد من المصادر المجانية لتعلم هذه اللغة بالكامل. وربما قد تتساءل أيضا: ما هو نظام إدارة البيانات العلائقية المناسب للتعلم؟ ونصيحتنا هي ألا تشغل بالك فيما يتعلق بإيجاد أي قاعدة بيانات علائقية هي الأفضل. لأنهم متشابهون جدًا، وإن اتقنت استخدام واحدة باستخدام الــ SQL سيصبح اتقان الأخير سهلا لأنهم أيضا يستخدمون اللغة.

نشرة فهم البريدية
لتبقى على اطلاع دائم على كل ما هو جديد مما تقدمه منصة فهم، انضم لنشرتنا البريدية.
طالب ماجستير في علم البيانات، جامعة مالايا - كوالا لامبور ماليزيا. بكالوريوس في الهندسة الكهربائية من الجامعة الإسلامية - المدينة المنورة السعودية. باحث في مجال تطوير أنظمة الطاقة المتجددة باستخدام علم البيانات وإنترنت الأشياء.
  1. محمد عبد الواحد محمد عبد الواحد

    شكرا جزيلا على كل ما تقدمون في هذه المنصة الرائعة أتمنى أن تذكروا الأدوات التي تستخدمونها في كل مشروع -كمحرر الأكواد- وشكرا مرة أخرى مع تمنياتي لكم بالتوفيق>

    • صلاح الكفراوي صلاح الكفراوي

      أهلا محمد.
      نحن نستخدم Jupyter Notebook كمحرر الأكواد في الدروس.
      شكرًا على اقتراحكم.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *