ملاحظات عالم البيانات: مراجعة شخصية للغات الاستعلام عن البيانات

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

لماذا من المهم معرفة لغات الاستعلام والقدرة على استخدامها؟ في جوهره، يحتوي علم البيانات على عدة مراحل مهمة من العمل، وأولها وأهمها (بدونها، بالتأكيد لن ينجح شيء!) هو الحصول على البيانات أو استخراجها. في أغلب الأحيان، تكون البيانات موجودة في مكان ما بشكل ما ويجب "استرجاعها" من هناك. 

تسمح لك لغات الاستعلام باستخراج هذه البيانات بالذات! واليوم سأخبركم عن لغات الاستعلام تلك التي كانت مفيدة بالنسبة لي وسأخبركم وأبين لكم أين وكيف بالضبط - لماذا هناك حاجة للدراسة.

ستكون هناك ثلاث كتل رئيسية لأنواع استعلام البيانات، والتي سنناقشها في هذه المقالة:

  • لغات الاستعلام "القياسية" هي ما يُفهم عادةً عند الحديث عن لغة استعلام، مثل الجبر العلائقي أو SQL.
  • لغات الاستعلام النصية: على سبيل المثال، Python Things pandas أو numpy أو Shell scripting.
  • لغات الاستعلام للرسوم البيانية المعرفية وقواعد البيانات الرسومية.

كل ما هو مكتوب هنا هو مجرد تجربة شخصية، ما كان مفيدًا، مع وصف للمواقف و"سبب الحاجة إليها" - يمكن للجميع تجربة كيف يمكن أن تأتي المواقف المماثلة في طريقك ومحاولة الاستعداد لها مسبقًا من خلال فهم هذه اللغات قبل أن يتعين عليك التقديم (على وجه السرعة) على مشروع ما أو حتى الوصول إلى مشروع حيث تكون هناك حاجة إليه.

لغات الاستعلام "القياسية".

لغات الاستعلام القياسية هي على وجه التحديد بالمعنى الذي نفكر فيه عادةً عندما نتحدث عن الاستعلامات.

الجبر العلائقي

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

ما هو الجبر العلائقي؟

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

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

لماذا؟

إن البدء في فهم ماهية لغات الاستعلام وما هي العمليات التي تكمن وراء التعبيرات في لغات استعلام محددة غالبًا ما يعطي فهمًا أعمق لما يعمل في لغات الاستعلام وكيف.

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

مواد للدراسة:

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

SQL

ملاحظات عالم البيانات: مراجعة شخصية للغات الاستعلام عن البيانات
مأخوذ من هذا المادة.

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

ملاحظات عالم البيانات: مراجعة شخصية للغات الاستعلام عن البيانات
مأخوذ من هذا المادة.

لماذا؟

أنظمة إدارة قواعد البيانات العلائقية: Oracle، وPostgres، وSQL Server، وما إلى ذلك لا تزال موجودة في كل مكان تقريبًا، وهناك احتمال كبير للغاية أن تضطر إلى التفاعل معها، مما يعني أنه سيتعين عليك إما قراءة SQL (وهو أمر مرجح جدًا) أو كتابته ( ليس مستبعدا أيضا).

ماذا تقرأ وتدرس

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

بالمناسبة، ما هو NoSQL؟

"من الجدير التأكيد مرة أخرى على أن مصطلح "NoSQL" له أصل عفوي تمامًا وليس له تعريف مقبول بشكل عام أو مؤسسة علمية وراءه." مُتَجَانِس مقالة على هبر.

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

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

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

{"en_wikipedia_url":"https://en.wikipedia.org/wiki/Johnny_Cash",
"ru_wikipedia_url":"https://ru.wikipedia.org/wiki/?curid=301643",
"ru_wiki_pagecount":149616,
"entity":[42775,"Джонни Кэш","ru"],
"en_wiki_pagecount":2338861}

يمكنك قراءة المزيد هنا حول NoSQL.

ماذا تدرس؟

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

لغات الاستعلام النصية

في البداية، يبدو أن ما علاقة بايثون بها بشكل عام - إنها لغة برمجة، ولا تتعلق بالاستعلامات على الإطلاق.

ملاحظات عالم البيانات: مراجعة شخصية للغات الاستعلام عن البيانات

  • الباندا هي حرفيًا سكين الجيش السويسري لعلوم البيانات، حيث يحدث فيها قدر كبير من تحويل البيانات وتجميعها وما إلى ذلك.
  • Numpy - هناك حسابات متجهة ومصفوفات وجبر خطي.
  • Scipy - هناك الكثير من الرياضيات في هذه الحزمة، وخاصة الإحصائيات.
  • مختبر Jupyter - يتناسب الكثير من تحليل البيانات الاستكشافية جيدًا مع أجهزة الكمبيوتر المحمولة - ومن المفيد معرفتها.
  • الطلبات - العمل مع الشبكة.
  • تحظى Pyspark بشعبية كبيرة بين مهندسي البيانات، وعلى الأرجح سيتعين عليك التفاعل مع هذا أو Spark، وذلك ببساطة بسبب شعبيتها.
  • *السيلينيوم - مفيد جدًا لجمع البيانات من المواقع والموارد، وفي بعض الأحيان لا توجد طريقة أخرى للحصول على البيانات.

نصيحتي الرئيسية: تعلم بايثون!

الباندا

لنأخذ الكود التالي كمثال:

import pandas as pd
df = pd.read_csv(“data/dataset.csv”)
# Calculate and rename aggregations
all_together = (df[df[‘trip_type’] == “return”]
    .groupby(['start_station_name','end_station_name'])
                  	    .agg({'trip_duration_seconds': [np.size, np.mean, np.min, np.max]})
                           .rename(columns={'size': 'num_trips', 
           'mean': 'avg_duration_seconds',    
           'amin': min_duration_seconds', 
           ‘amax': 'max_duration_seconds'}))

في الأساس، نرى أن الكود يتناسب مع نمط SQL الكلاسيكي.

SELECT start_station_name, end_station_name, count(trip_duration_seconds) as size, …..
FROM dataset
WHERE trip_type = ‘return’
GROUPBY start_station_name, end_station_name

لكن الجزء المهم هو أن هذا الرمز هو جزء من البرنامج النصي ومسار البيانات؛ في الواقع، نحن نقوم بتضمين الاستعلامات في مسار بايثون. في هذه الحالة، تأتي لغة الاستعلام إلينا من مكتبات مثل Pandas أو pySpark.

بشكل عام، في pySpark نرى نوعًا مشابهًا من تحويل البيانات من خلال لغة استعلام بروح:

df.filter(df.trip_type = “return”)
  .groupby(“day”)
  .agg({duration: 'mean'})
  .sort()

أين وماذا تقرأ

على بايثون نفسها بشكل عام لا مشكلة العثور على مواد للدراسة. هناك عدد كبير من البرامج التعليمية عبر الإنترنت الباندا, pySpark والدورات على شرارة (وأيضا في حد ذاته DS). بشكل عام، المحتوى هنا رائع للبحث على Google، وإذا اضطررت إلى اختيار حزمة واحدة للتركيز عليها، فستكون الباندا بالطبع. فيما يتعلق بدمج مواد DS + Python أيضًا كثيرا جدا.

شل كلغة استعلام

عدد لا بأس به من مشاريع معالجة البيانات وتحليلها التي عملت معها هي في الواقع نصوص برمجية لصدفة تستدعي التعليمات البرمجية في Python وJava وأوامر الصدفة نفسها. لذلك، بشكل عام، يمكنك اعتبار خطوط الأنابيب في bash/zsh/etc بمثابة نوع من الاستعلام عالي المستوى (يمكنك، بالطبع، حلقات الحشو هناك، ولكن هذا ليس نموذجيًا لرمز DS في لغات الصدفة)، دعنا نعطي مثال بسيط - كنت بحاجة إلى إجراء تعيين معرف QID لويكي بيانات وروابط كاملة لمواقع الويكي الروسية والإنجليزية، ولهذا كتبت طلبًا بسيطًا من الأوامر الموجودة في bash وللإخراج كتبت نصًا بسيطًا في Python، والذي قمت بكتابته تجميعها على هذا النحو:

pv “data/latest-all.json.gz” | 
unpigz -c  | 
jq --stream $JQ_QUERY | 
python3 scripts/post_process.py "output.csv"

حيث

JQ_QUERY = 'select((.[0][1] == "sitelinks" and (.[0][2]=="enwiki" or .[0][2] =="ruwiki") and .[0][3] =="title") or .[0][1] == "id")' 

كان هذا، في الواقع، خط الأنابيب بأكمله الذي أنشأ التعيين المطلوب؛ وكما نرى، كل شيء يعمل في وضع التدفق:

  • pv filepath - يعطي شريط تقدم بناءً على حجم الملف ويمرر محتوياته فصاعدًا
  • unpigz -c يقرأ جزءًا من الأرشيف ويعطيه إلى jq
  • jq باستخدام المفتاح - أنتج الدفق النتيجة على الفور وقام بتمريرها إلى المعالج اللاحق (كما هو الحال مع المثال الأول) في Python
  • داخليًا، كان المعالج اللاحق عبارة عن آلة حالة بسيطة تقوم بتنسيق الإخراج 

في المجمل، خط أنابيب معقد يعمل في وضع التدفق على البيانات الكبيرة (0.5 تيرابايت)، بدون موارد كبيرة ومصنوع من خط أنابيب بسيط واثنين من الأدوات.

نصيحة أخرى مهمة: أن تكون قادرًا على العمل بشكل جيد وفعال في الوحدة الطرفية وكتابة bash/zsh/etc.

أين سيكون مفيدا؟ نعم، في كل مكان تقريبًا - مرة أخرى، هناك الكثير من المواد التي يمكنك دراستها على الإنترنت. على وجه الخصوص، هنا هذا مقالتي السابقة.

البرمجة النصية R

مرة أخرى، يمكن للقارئ أن يصرخ - حسنا، هذه لغة برمجة كاملة! وبالطبع سيكون على حق. ومع ذلك، عادةً ما أواجه لغة R في مثل هذا السياق، والتي كانت في الواقع مشابهة جدًا للغة الاستعلام.

R هي بيئة حوسبة إحصائية ولغة للحوسبة الثابتة والتصور (وفقًا لـ هذا).

ملاحظات عالم البيانات: مراجعة شخصية للغات الاستعلام عن البيانات
مأخوذ من هنا. بالمناسبة، أوصي به، مادة جيدة.

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

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

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

أمثلة على الاستعلامات للتصور

ggplot(data = beav, 
       aes(x = id, y = temp, 
           group = activ, color = activ)) +
  geom_line() + 
  geom_point() +
  scale_color_manual(values = c("red", "blue"))

بشكل عام، تم ترحيل العديد من الأفكار من R إلى حزم python مثل pandas أو numpy أو scipy، مثل إطارات البيانات وتوجيه البيانات - لذا بشكل عام، ستبدو الكثير من الأشياء في R مألوفة ومريحة بالنسبة لك.

هناك مصادر كثيرة للدراسة منها على سبيل المثال هذا.

الرسوم البيانية المعرفية

لدي هنا تجربة غير عادية بعض الشيء، لأنني غالبًا ما أضطر إلى العمل مع الرسوم البيانية المعرفية ولغات الاستعلام للرسوم البيانية. لذلك، دعونا نتناول الأساسيات بإيجاز، لأن هذا الجزء أكثر غرابة بعض الشيء.

في قواعد البيانات العلائقية الكلاسيكية لدينا مخطط ثابت، ولكن هنا المخطط مرن، كل مسند هو في الواقع "عمود" وأكثر من ذلك.

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

ملاحظات عالم البيانات: مراجعة شخصية للغات الاستعلام عن البيانات
www.wikidata.org/wiki/Q42

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

ملاحظات عالم البيانات: مراجعة شخصية للغات الاستعلام عن البيانات
تخيل أن جميع البيانات مخزنة كرسم بياني أو كتعبيرات منطقية ثنائية وأحادية.

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

فيما يلي لغات الاستعلام الرئيسية التي استخدمتها وعملت معها.

سباركل

ويكي:
سباركل (اختصار العودية من المهندس بروتوكول SPARQL ولغة الاستعلام RDF) - لغة الاستعلام عن البيانات، ممثلة بالنموذج RDFو بروتوكول لنقل هذه الطلبات والرد عليها. SPARQL هي توصية اتحاد W3C وأحد التقنيات الويب الدلالي.

لكنها في الواقع لغة استعلام للمسندات المنطقية الأحادية والثنائية. أنت ببساطة تحدد بشكل مشروط ما هو ثابت في التعبير المنطقي وما هو غير ثابت (مبسط للغاية).

قاعدة RDF (إطار وصف الموارد) نفسها، والتي يتم من خلالها تنفيذ استعلامات SPARQL، هي قاعدة ثلاثية object, predicate, subject - ويحدد الاستعلام الثلاثيات المطلوبة وفقًا للقيود المحددة في الروح: ابحث عن X بحيث يكون p_55(X, q_33) صحيحًا - حيث، بالطبع، p_55 هو نوع من العلاقة مع المعرف 55، و q_33 هو كائن ذو المعرف 33 (هنا والقصة بأكملها، مرة أخرى مع حذف كل أنواع التفاصيل).

مثال لعرض البيانات:

ملاحظات عالم البيانات: مراجعة شخصية للغات الاستعلام عن البيانات
الصور والأمثلة مع البلدان هنا من هنا.

مثال الاستعلام الأساسي

ملاحظات عالم البيانات: مراجعة شخصية للغات الاستعلام عن البيانات

في الواقع، نريد العثور على قيمة متغير البلد مثل المسند
member_of، صحيح أن member_of(?country,q458) وq458 هو معرف الاتحاد الأوروبي.

مثال لاستعلام SPARQL حقيقي داخل محرك بايثون:

ملاحظات عالم البيانات: مراجعة شخصية للغات الاستعلام عن البيانات

عادة، كان علي أن أقرأ SPARQL بدلاً من كتابته - في هذه الحالة، من المحتمل أن يكون فهم اللغة على الأقل على المستوى الأساسي مهارة مفيدة لفهم كيفية استرجاع البيانات بالضبط. 

هناك الكثير من المواد التي يمكن دراستها عبر الإنترنت: على سبيل المثال، هنا هذا и هذا. عادةً ما أبحث في Google عن تصميمات وأمثلة محددة، وهذا يكفي في الوقت الحالي.

لغات الاستعلام المنطقية

يمكنك قراءة المزيد عن هذا الموضوع في مقالتي هنا. وهنا، سندرس باختصار فقط سبب ملاءمة اللغات المنطقية لكتابة الاستعلامات. في الأساس، RDF هو مجرد مجموعة من البيانات المنطقية للنموذج p(X) وh(X,Y)، والاستعلام المنطقي له النموذج التالي:

output(X) :- country(X), member_of(X,“EU”).

نحن هنا نتحدث عن إنشاء ناتج أصلي جديد/1 (/1 يعني أحادي)، بشرط أنه بالنسبة لـ X يكون صحيحًا أن البلد (X) - أي أن X بلد وأيضًا member_of(X،"EU ").

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

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

مثال على جزء من التعليمات البرمجية في ويكي بيانات معالجة لغة منطقية:

ملاحظات عالم البيانات: مراجعة شخصية للغات الاستعلام عن البيانات

المواد: سأقدم هنا رابطين للغة البرمجة المنطقية الحديثة برمجة مجموعة الإجابات - أوصي بدراستها:

ملاحظات عالم البيانات: مراجعة شخصية للغات الاستعلام عن البيانات

المصدر: www.habr.com

إضافة تعليق