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



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



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



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



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



  • لغات الاستعلام "القياسية" هي ما يفهمونه عادةً عند الحديث عن لغة استعلام مثل الجبر العلائقي أو SQL.
  • برمجة لغات الاستعلام مثل حيل pandas python أو numpy أو shell scripting.
  • لغات الاستعلام عن الرسوم البيانية المعرفية وقواعد بيانات الرسوم البيانية.


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



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



لغات الاستعلام القياسية هي بالضبط بمعنى أننا عادة ما نفكر فيها عندما نتحدث عن الاستعلامات.



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



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



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



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



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



لاجل ماذا؟



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





مأخوذة من هذه المقالة. عملية المثال: صلة ، والتي تربط الجداول.



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



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



SQL





مأخوذة من هذه المقالة.



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





مأخوذة من هذه المقالة.



لاجل ماذا؟



نظم إدارة قواعد البيانات العلائقية: لا تزال 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 المتاحة التي تناسب هذا الوصف - ودراسة هذا النظام بالفعل.



برمجة لغات الاستعلام



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







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


أهم نصيحتي: تعلم بايثون!

الباندا



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



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


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



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



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


أين وماذا تقرأ ليس مشكلة في العثور على مواد للدراسة



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



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



الكثير من مشاريع معالجة البيانات وتحليلها التي كان عليّ العمل معها هي ، في الواقع ، نصوص شيل تستدعي الكود في بايثون ، في جافا وأوامر shell نفسها. لذلك ، بشكل عام ، يمكنك النظر في خطوط الأنابيب في bash / zsh / وما إلى ذلك ، باعتبارها بعض الطلبات عالية المستوى (يمكنك بالطبع دفع الحلقات هناك ، ولكن هذا ليس نموذجيًا لكود DS في لغات shell) ، دعنا نعطي مثالًا بسيطًا - كنت بحاجة إلى تعيين QID لـ wikidata رابط كامل إلى ويكي الروسية والإنجليزية ، ولهذا كتبت استعلامًا بسيطًا من الأوامر الموجودة في 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 / إلخ.
أين هو مفيد؟ نعم ، في كل مكان تقريبًا - يوجد ، مرة أخرى ، الكثير من المواد للدراسة على الشبكة. على وجه الخصوص ، هذه هي مقالتي السابقة.



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



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





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



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



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



سباركل



Wiki:

SPARQL ( . SPARQL Protocol and RDF Query Language) — , RDF, . SPARQL W3C .




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



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



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





الصور ومثال مع البلدان من هنا .



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







في الواقع ، نريد العثور على قيمة المتغير؟ Country ، بحيث بالنسبة

للعضو المسند ، صحيح أن member_of (؟ Country ، q458) و q458 هو معرف الاتحاد الأوروبي.



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







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



هناك الكثير من المواد الدراسية عبر الإنترنت، مثل هذا واحد و هذا واحد . أنا نفسي عادة ما تكون منشآت وأمثلة محددة من google وحتى الآن لدي ما يكفي.



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



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



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



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



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



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



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





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





All Articles