بينما توفر قواعد البيانات طرقًا فعالة جدًا لتخزين البيانات واستعلامها باستخدام لغات الاستعلام، فإن الطريقة الأكثر مرونة لمعالجة البيانات هي كتابة برنامج خاص بك لمعالجتها. في كثير من الحالات، يكون إجراء استعلام قاعدة بيانات أكثر فعالية. ومع ذلك، في بعض الحالات التي تتطلب معالجة بيانات أكثر تعقيدًا، لا يمكن القيام بذلك بسهولة باستخدام SQL.
يمكن برمجة معالجة البيانات بأي لغة برمجة، ولكن هناك لغات معينة تعتبر عالية المستوى فيما يتعلق بالعمل مع البيانات. يفضل علماء البيانات عادةً إحدى اللغات التالية:
بينما توفر قواعد البيانات طرقًا فعالة جدًا لتخزين البيانات واستعلامها باستخدام لغات الاستعلام، فإن الطريقة الأكثر مرونة لمعالجة البيانات هي كتابة برنامجك الخاص لمعالجة البيانات. في العديد من الحالات، سيكون تنفيذ استعلام قاعدة البيانات هو الخيار الأكثر فعالية. ومع ذلك، في بعض الحالات التي تتطلب معالجة بيانات أكثر تعقيدًا، لا يمكن القيام بذلك بسهولة باستخدام SQL.
يمكن برمجة معالجة البيانات بأي لغة برمجة، ولكن هناك بعض اللغات التي تعتبر أكثر مستوى فيما يتعلق بالعمل مع البيانات. عادةً ما يفضل علماء البيانات إحدى اللغات التالية:
* **[Python](https://www.python.org/)**، وهي لغة برمجة متعددة الأغراض، وغالبًا ما تعتبر واحدة من أفضل الخيارات للمبتدئين بسبب بساطتها. تحتوي بايثون على العديد من المكتبات الإضافية التي يمكن أن تساعدك في حل العديد من المشكلات العملية، مثل استخراج البيانات من أرشيف ZIP، أو تحويل الصور إلى درجات الرمادي. بالإضافة إلى علم البيانات، تُستخدم بايثون أيضًا بشكل شائع في تطوير الويب.
* **[R](https://www.r-project.org/)** هي أداة تقليدية تم تطويرها مع معالجة البيانات الإحصائية في الاعتبار. تحتوي أيضًا على مستودع كبير من المكتبات (CRAN)، مما يجعلها خيارًا جيدًا لمعالجة البيانات. ومع ذلك، فإن R ليست لغة برمجة متعددة الأغراض، ونادرًا ما تُستخدم خارج نطاق علم البيانات.
* **[Julia](https://julialang.org/)** هي لغة أخرى تم تطويرها خصيصًا لعلم البيانات. تهدف إلى تقديم أداء أفضل من بايثون، مما يجعلها أداة رائعة للتجارب العلمية.
* **[بايثون](https://www.python.org/)**، لغة برمجة عامة الغرض، يُعتبر غالبًا خيارًا من أفضل الخيارات للمبتدئين بسبب بساطتها. لدى بايثون العديد من المكتبات الإضافية التي تساعدك على حل العديد من المشاكل العملية، مثل استخراج بياناتك من أرشيف ZIP، أو تحويل الصورة إلى تدرج الرمادي. بالإضافة إلى علم البيانات، تُستخدم بايثون كثيرًا أيضًا لتطوير الويب.
* **[R](https://www.r-project.org/)** هو صندوق أدوات تقليدي طور لمعالجة البيانات الإحصائية. يحتوي أيضًا على مستودع كبير من المكتبات (CRAN)، مما يجعله خيارًا جيدًا لمعالجة البيانات. ومع ذلك، فإن R ليست لغة برمجة عامة الغرض، ونادرًا ما تُستخدم خارج مجال علم البيانات.
* **[جوليا](https://julialang.org/)** هي لغة أخرى طورت خصيصًا لعلم البيانات. تهدف إلى تقديم أداء أفضل من بايثون، مما يجعلها أداة رائعة للتجارب العلمية.
في هذه الدرس، سنركز على استخدام بايثون لمعالجة البيانات البسيطة. سنفترض معرفة أساسية باللغة. إذا كنت ترغب في جولة أعمق في بايثون، يمكنك الرجوع إلى أحد الموارد التالية:
في هذا الدرس، سنركز على استخدام بايثون لمعالجة البيانات البسيطة. سنفترض معرفة أساسية باللغة. إذا كنت تريد جولة أعمق في بايثون، يمكنك الرجوع إلى أحد الموارد التالية:
* [تعلم بايثون بطريقة ممتعة باستخدام الرسومات الفركتالية](https://github.com/shwars/pycourse) - دورة مقدمة سريعة على GitHub لبرمجة بايثون
* [ابدأ خطواتك الأولى مع بايثون](https://docs.microsoft.com/en-us/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) مسار تعليمي على [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
* [تعلم بايثون بطريقة ممتعة مع الرسوميات والكسور](https://github.com/shwars/pycourse) - دورة تمهيدية سريعة لبرمجة بايثون على GitHub
* [اتخذ خطواتك الأولى مع بايثون](https://docs.microsoft.com/en-us/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) مسار تعليمي على [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
يمكن أن تأتي البيانات بأشكال عديدة. في هذا الدرس، سننظر في ثلاثة أشكال من البيانات - **البيانات الجدولية**، **النصوص** و **الصور**.
البيانات يمكن أن تأتي بأشكال عديدة. في هذا الدرس، سنأخذ في الاعتبار ثلاثة أشكال من البيانات - **البيانات الجدولية**، **النصوص** و **الصور**.
سنركز على بعض أمثلة معالجة البيانات، بدلاً من إعطائك نظرة عامة كاملة على جميع المكتبات ذات الصلة. سيسمح لك ذلك بفهم الفكرة الرئيسية لما هو ممكن، ويترك لك فهمًا حول كيفية العثور على حلول لمشاكلك عندما تحتاج إليها.
سنركز على بعض الأمثلة لمعالجة البيانات، بدلاً من إعطائك نظرة شاملة على جميع المكتبات ذات الصلة. هذا سيسمح لك بفهم الفكرة الرئيسية لما هو ممكن، ويترك لديك فهماً حول أين تجد حلول لمشاكلك عندما تحتاجها.
> **النصيحة الأكثر فائدة**. عندما تحتاج إلى تنفيذ عملية معينة على البيانات ولا تعرف كيفية القيام بها، حاول البحث عنها على الإنترنت. [Stackoverflow](https://stackoverflow.com/) يحتوي عادةً على الكثير من عينات الكود المفيدة في بايثون للعديد من المهام النموذجية.
> **نصيحة مفيدة للغاية**. عندما تحتاج إلى تنفيذ عملية معينة على البيانات ولا تعرف كيف تفعل ذلك، جرب البحث عنها في الإنترنت. عادةً ما يحتوي [Stackoverflow](https://stackoverflow.com/) على العديد من عينات الكود المفيدة في بايثون للعديد من المهام النموذجية.
## [اختبار ما قبل المحاضرة](https://ff-quizzes.netlify.app/en/ds/quiz/12)
## [اختبار قبل المحاضرة](https://ff-quizzes.netlify.app/en/ds/quiz/12)
## البيانات الجدولية وإطارات البيانات
لقد تعرفت بالفعل على البيانات الجدولية عندما تحدثنا عن قواعد البيانات العلائقية. عندما يكون لديك الكثير من البيانات، وهي موجودة في العديد من الجداول المرتبطة المختلفة، فمن المنطقي بالتأكيد استخدام SQL للعمل معها. ومع ذلك، هناك العديد من الحالات التي لدينا فيها جدول بيانات، ونحتاج إلى الحصول على بعض **الفهم** أو **الرؤى** حول هذه البيانات، مثل التوزيع، العلاقة بين القيم، إلخ. في علم البيانات، هناك العديد من الحالات التي نحتاج فيها إلى إجراء بعض التحويلات على البيانات الأصلية، متبوعة بالتصور. يمكن تنفيذ كلا الخطوتين بسهولة باستخدام بايثون.
لقد قابلت بالفعل البيانات الجدولية عندما تحدثنا عن قواعد البيانات العلائقية. عندما يكون لديك الكثير من البيانات، وكانت موجودة في العديد من الجداول المرتبطة المختلفة، من المنطقي بالتأكيد استخدام SQL للعمل معها. ومع ذلك، هناك العديد من الحالات التي يكون لدينا فيها جدول بيانات، ونحتاج إلى الحصول على بعض **الفهم** أو **الأفكار** حول هذه البيانات، مثل التوزيع، الارتباط بين القيم، إلخ. في علم البيانات، هناك العديد من الحالات التي نحتاج فيها إلى إجراء بعض التحولات على البيانات الأصلية، يتبعها التصور البصري. كلا الخطوتين يمكن تنفيذهما بسهولة باستخدام بايثون.
هناك مكتبتان الأكثر فائدة في بايثون يمكن أن تساعدك في التعامل مع البيانات الجدولية:
* **[Pandas](https://pandas.pydata.org/)** تتيح لك التعامل مع ما يسمى بـ **إطارات البيانات**، وهي مشابهة للجداول العلائقية. يمكنك الحصول على أعمدة مسماة، وتنفيذ عمليات مختلفة على الصفوف، الأعمدة، وإطارات البيانات بشكل عام.
* **[Numpy](https://numpy.org/)** هي مكتبة للعمل مع **المصفوفات** متعددة الأبعاد. المصفوفة تحتوي على قيم من نفس النوع الأساسي، وهي أبسط من إطار البيانات، لكنها تقدم المزيد من العمليات الرياضية، وتخلق أقل عبء.
هناك مكتبتان مفيدتان جدًا في بايثون يمكن أن تساعدك في التعامل مع البيانات الجدولية:
* **[بانداز](https://pandas.pydata.org/)** تسمح لك بالتعامل مع ما يسمى **إطارات البيانات**، والتي تشبه الجداول العلائقية. يمكنك أن يكون لديك أعمدة مسماة، وتنفيذ عمليات مختلفة على الصفوف والأعمدة وإطارات البيانات بشكل عام.
* **[نومباي](https://numpy.org/)** هي مكتبة للعمل مع**الموترات**، أي**المصفوفات** متعددة الأبعاد. المصفوفة تحتوي على قيم من نفس النوع الأساسي، وهي أبسط من إطار البيانات، لكنها تقدم مزيدًا من العمليات الحسابية، وتخلق عبئًا أقل.
هناك أيضًا بعض المكتبات الأخرى التي يجب أن تعرف عنها:
* **[Matplotlib](https://matplotlib.org/)** هي مكتبة تُستخدم لتصور البيانات ورسم الرسوم البيانية
* **[SciPy](https://www.scipy.org/)** هي مكتبة تحتوي على بعض الوظائف العلمية الإضافية. لقد واجهنا بالفعل هذه المكتبة عند الحديث عن الاحتمالات والإحصائيات
هناك أيضًا عدد من المكتبات الأخرى التي يجب أن تعرفها:
* **[ماتبلوتليب](https://matplotlib.org/)** مكتبة تستخدم لتصور البيانات ورسم الرسوم البيانية
* **[سايباي](https://www.scipy.org/)** مكتبة تحتوي على بعض الوظائف العلمية الإضافية. لقد التقينا بهذه المكتبة بالفعل عند التحدث عن الاحتمالات والإحصاء
إليك قطعة من الكود التي ستستخدمها عادةً لاستيراد هذه المكتبات في بداية برنامج بايثون:
إليك جزءًا من الكود الذي عادةً ما تستخدمه لاستيراد هذه المكتبات في بداية برنامج بايثون الخاص بك:
```python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy import ... # you need to specify exact sub-packages that you need
from scipy import ... # تحتاج إلى تحديد الحزم الفرعية الدقيقة التي تحتاجها
```
Pandas تركز على بعض المفاهيم الأساسية.
بانداز تتركز حول بعض المفاهيم الأساسية.
### السلاسل
### السلسلة
**السلاسل** هي تسلسل من القيم، مشابهة للقائمة أو مصفوفة numpy. الفرق الرئيسي هو أن السلاسل تحتوي أيضًا على **فهرس**، وعندما نعمل على السلاسل (مثل الجمع)، يتم أخذ الفهرس في الاعتبار. يمكن أن يكون الفهرس بسيطًا مثل رقم الصف الصحيح (وهو الفهرس المستخدم افتراضيًا عند إنشاء سلسلة من قائمة أو مصفوفة)، أو يمكن أن يكون له هيكل معقد، مثل فترة تاريخية.
**السلسلة** هي تسلسل من القيم، مماثل لقائمة أو مصفوفة نومباي. الفرق الرئيسي هو أن السلسلة لديها أيضًا **مؤشر**، وعندما نعمل على السلاسل (مثلاً، نجمعها)، يتم أخذ المؤشر في الاعتبار. يمكن أن يكون المؤشر بسيطًا مثل رقم الصف الصحيح (وهو المؤشر المستخدم افتراضيًا عند إنشاء سلسلة من قائمة أو مصفوفة)، أو يمكن أن يكون له هيكل معقد، مثل فترة زمنية.
> **ملاحظة**: هناك بعض الكود التمهيدي لـ Pandas في الدفتر المرفق [`notebook.ipynb`](notebook.ipynb). نحن فقط نوضح بعض الأمثلة هنا، وأنت مرحب بك بالتأكيد للتحقق من الدفتر الكامل.
> **ملاحظة**: هناك بعض كود بانداز التمهيدي في الدفتر المرافق [`notebook.ipynb`](notebook.ipynb). نحن نوضح فقط بعض الأمثلة هنا، وأنت بالتأكيد مدعو لمراجعة الدفتر الكامل.
فكر في مثال: نريد تحليل مبيعات متجر الآيس كريم الخاص بنا. لنقم بإنشاء سلسلة من أرقام المبيعات (عدد العناصر المباعة كل يوم) لفترة زمنية معينة:
اعتبر مثالًا: نريد تحليل مبيعات متجر الآيس كريم الخاص بنا. لنولد سلسلة من أرقام المبيعات (عدد العناصر المباعة كل يوم) لفترة زمنية معينة:
```python
start_date = "Jan 1, 2020"
@ -64,22 +66,22 @@ print(f"Length of index is {len(idx)}")
> **ملاحظة** أننا لا نستخدم الصيغة البسيطة `total_items+additional_items`. إذا فعلنا ذلك، فسنحصل على الكثير من القيم `NaN` (*ليس رقمًا*) في السلسلة الناتجة. هذا لأن هناك قيم مفقودة لبعض نقاط الفهرس في سلسلة `additional_items`، وإضافة `NaN` إلى أي شيء يؤدي إلى `NaN`. لذلك نحتاج إلى تحديد معلمة`fill_value` أثناء الجمع.
> **لاحظ** أننا لا نستخدم الصيغة البسيطة `total_items+additional_items`. لو فعلنا ذلك، لكنا حصلنا على الكثير من قيم `NaN` (*ليس رقمًا*) في السلسلة الناتجة. ويحدث هذا لأن هناك قيم مفقودة لبعض نقاط المؤشر في سلسلة `additional_items`، وإضافة `NaN` إلى أي شيء يؤدي إلى `NaN`. لذلك يجب تحديد معامل`fill_value` أثناء الجمع.
مع السلاسل الزمنية، يمكننا أيضًا **إعادة أخذ العينات** للسلسلة بفواصل زمنية مختلفة. على سبيل المثال، افترض أننا نريد حساب متوسط حجم المبيعات شهريًا. يمكننا استخدام الكود التالي:
مع السلاسل الزمنية، يمكننا أيضًا **إعادة أخذ عينات** للسلسلة بفاصل زمني مختلف. على سبيل المثال، نفرض أننا نريد حساب متوسط حجم المبيعات شهريًا. يمكننا استخدام الكود التالي:
```python
monthly = total_items.resample("1M").mean()
ax = monthly.plot(kind='bar')
@ -88,13 +90,13 @@ ax = monthly.plot(kind='bar')
### إطار البيانات
إطار البيانات هو في الأساس مجموعة من السلاسل بنفس الفهرس. يمكننا دمج عدة سلاسل معًا في إطار بيانات:
إطار البيانات هو في الأساس مجموعة من السلاسل التي لها نفس المؤشر. يمكننا دمج عدة سلاسل معًا في إطار بيانات:
```python
a = pd.Series(range(1,10))
b = pd.Series(["I","like","to","play","games","and","will","not","change"],index=range(0,9))
هنا `.T` تعني عملية تبديل إطار البيانات، أي تغيير الصفوف والأعمدة، وعملية `rename` تسمح لنا بإعادة تسمية الأعمدة لتتناسب مع المثال السابق.
هنا `.T` تعني عملية تحويل إطار البيانات، أي تبديل الصفوف والأعمدة، وعملية `rename` تسمح لنا بإعادة تسمية الأعمدة لتطابق المثال السابق.
إليك بعض العمليات الأكثر أهمية التي يمكننا تنفيذها على إطارات البيانات:
هذه هي بعض العمليات الأكثر أهمية التي يمكننا تنفيذها على إطارات البيانات:
**اختيار الأعمدة**. يمكننا اختيار أعمدة فردية بكتابة `df['A']` - هذه العملية تُرجع سلسلة. يمكننا أيضًا اختيار مجموعة فرعية من الأعمدة في إطار بيانات آخر بكتابة `df[['B','A']]` - هذا يُرجع إطار بيانات آخر.
**اختيار الأعمدة**. يمكننا اختيار الأعمدة الفردية بكتابة `df['A']` - هذه العملية تعيد سلسلة. يمكننا أيضًا اختيار مجموعة من الأعمدة إلى إطار بيانات آخر بكتابة `df[['B','A']]` - هذا يعيد إطار بيانات آخر.
**تصفية** الصفوف بناءً على معايير معينة. على سبيل المثال، لترك الصفوف فقط التي تحتوي على العمود `A` أكبر من 5، يمكننا كتابة`df[df['A']>5]`.
**تصفية** صفوف معينة بناءً على معايير. على سبيل المثال، لترك فقط الصفوف التي يحتوي عمود `A` فيها على قيمة أكبر من 5، نكتب`df[df['A']>5]`.
> **ملاحظة**: الطريقة التي تعمل بها التصفية هي كالتالي. التعبير `df['A']<5` يُرجع سلسلة من القيم المنطقية، والتي تشير إلى ما إذا كان التعبير `True` أو `False` لكل عنصر من عناصر السلسلة الأصلية `df['A']`. عندما تُستخدم السلسلة المنطقية كفهرس، فإنها تُرجع مجموعة فرعية من الصفوف في إطار البيانات. لذلك، لا يمكن استخدام تعبير منطقي عشوائي في بايثون، على سبيل المثال، كتابة `df[df['A']>5 and df['A']<7]` سيكون خطأ. بدلاً من ذلك، يجب استخدام عملية خاصة `&` على السلاسل المنطقية، بكتابة `df[(df['A']>5) & (df['A']<7)]` (*الأقواس مهمة هنا*).
> **ملاحظة**: طريقة التصفية تعمل كما يلي. التعبير `df['A']<5` يعيد سلسلة منطقية (Boolean)، تُشير إلى ما إذا كان التعبير `True` أو `False` لكل عنصر من عناصر السلسلة الأصلية `df['A']`. عندما تُستخدم السلسلة المنطقية كمؤشر، فإنها تعيد مجموعة فرعية من الصفوف في إطار البيانات. لذا لا يمكن استخدام تعبير منطقي بايثون عادي، على سبيل المثال، كتابة `df[df['A']>5 and df['A']<7]` سيكون خطأ. بدلاً من ذلك، يجب استخدام العملية الخاصة `&` على السلاسل المنطقية، بكتابة `df[(df['A']>5) & (df['A']<7)]` (*الأقواس مهمة هنا*).
**إنشاء أعمدة جديدة قابلة للحساب**. يمكننا بسهولة إنشاء أعمدة جديدة قابلة للحساب لإطار البيانات الخاص بنا باستخدام تعبير بديهي مثل هذا:
**إنشاء أعمدة جديدة قابلة للحساب**. يمكننا بسهولة إنشاء أعمدة جديدة قابلة للحساب لإطار البيانات باستخدام تعبير بديهي مثل هذا:
```python
df['DivA'] = df['A']-df['A'].mean()
```
هذا المثال يحسب انحراف A عن قيمته المتوسطة. ما يحدث فعليًا هنا هو أننا نحسب سلسلة، ثم نُعين هذه السلسلة إلى الجانب الأيسر، مما يُنشئ عمودًا جديدًا. لذلك، لا يمكننا استخدام أي عمليات غير متوافقة مع السلاسل، على سبيل المثال، الكود أدناه خطأ:
هذا المثال يحسب تباين A عن متوسط قيمته. ما يحدث فعليًا هنا هو أننا نحسب سلسلة، ثم نعين هذه السلسلة إلى الجانب الأيسر، مما ينشئ عمودًا آخر. لذا، لا يمكننا استخدام أي عمليات غير متوافقة مع السلاسل، على سبيل المثال، الكود أدناه غير صحيح:
```python
# Wrong code -> df['ADescr'] = "Low" if df['A'] <5else"Hi"
df['LenB'] = len(df['B']) # <-Wrongresult
# الكود خاطئ -> df['ADescr'] = "منخفض" إذا كانت df['A'] <5وإلا"مرتفع"
df['LenB'] = len(df['B']) # <-النتيجةخاطئة
```
المثال الأخير، رغم أنه صحيح نحويًا، يُعطينا نتيجة خاطئة، لأنه يُعين طول السلسلة `B` لجميع القيم في العمود، وليس طول العناصر الفردية كما قصدنا.
المثال الأخير، رغم كونه صحيحًا نحويًا، يعطينا نتيجة خاطئة، لأنه يعين طول السلسلة `B` لجميع القيم في العمود، وليس طول العناصر الفردية كما أردنا.
إذا كنا بحاجة إلى حساب تعبيرات معقدة مثل هذه، يمكننا استخدام وظيفة `apply`. يمكن كتابة المثال الأخير كما يلي:
إذا كنا بحاجة لحساب تعبيرات معقدة مثل هذه، يمكننا استخدام دالة `apply`. يمكن كتابة المثال الأخير كما يلي:
```python
df['LenB'] = df['B'].apply(lambda x : len(x))
# or
# أو
df['LenB'] = df['B'].apply(len)
```
بعد العمليات أعلاه، سننتهي بإطار البيانات التالي:
بعد العمليات السابقة، سينتهي بنا الأمر بإطار البيانات التالي:
**اختيار الصفوف بناءً على الأرقام** يمكن القيام به باستخدام بناء `iloc`. على سبيل المثال، لاختيار أول 5 صفوف من إطار البيانات:
**اختيار الصفوف بناءً على الأرقام** يمكن تنفيذه باستخدام البناء `iloc`. على سبيل المثال، لاختيار أول 5 صفوف من إطار البيانات:
```python
df.iloc[:5]
```
**التجميع** يُستخدم غالبًا للحصول على نتيجة مشابهة لـ *جداول المحورية* في Excel. افترض أننا نريد حساب القيمة المتوسطة للعمود `A` لكل رقم معين من `LenB`. يمكننا تجميع إطار البيانات الخاص بنا بواسطة`LenB`، واستدعاء `mean`:
**التجميع** غالبًا ما يُستخدم للحصول على نتيجة مشابهة لـ *جداول المحورية* في إكسل. افترض أننا نريد حساب القيمة المتوسطة للعمود `A` لكل عدد معين من `LenB`. ثم يمكننا تجميع إطار البيانات حسب`LenB`، واستدعاء `mean`:
```python
df.groupby(by='LenB')[['A','DivA']].mean()
```
إذا كنا بحاجة إلى حساب المتوسط وعدد العناصر في المجموعة، يمكننا استخدام وظيفة `aggregate` الأكثر تعقيدًا:
إذا كنا بحاجة لحساب المتوسط وعدد العناصر في المجموعة، يمكننا استخدام دالة `aggregate` الأكثر تعقيدًا:
لقد رأينا مدى سهولة إنشاء Series و DataFrames من كائنات Python. ومع ذلك، غالبًا ما تأتي البيانات في شكل ملف نصي أو جدول Excel. لحسن الحظ، يوفر لنا Pandas طريقة بسيطة لتحميل البيانات من القرص. على سبيل المثال، قراءة ملف CSV بسيطة جدًا كما يلي:
لقد رأينا مدى سهولة بناء السلاسل و DataFrames من الكائنات في Python. ومع ذلك، غالبًا ما تأتي البيانات على شكل ملف نصي، أو جدول Excel. لحسن الحظ، تقدم لنا Pandas طريقة بسيطة لتحميل البيانات من القرص. على سبيل المثال، قراءة ملف CSV بسيطة كهذه:
```python
df = pd.read_csv('file.csv')
```
سنرى المزيد من الأمثلة لتحميل البيانات، بما في ذلك جلبها من مواقع ويب خارجية، في قسم "التحدي".
```
سنرى المزيد من الأمثلة على تحميل البيانات، بما في ذلك جلبها من مواقع الويب الخارجية، في قسم "التحدي"
### الطباعة والرسم البياني
### الطباعة والرسم
غالبًا ما يحتاج عالم البيانات إلى استكشاف البيانات، لذا من المهم أن يكون قادرًا على تصورها. عندما يكون DataFrame كبيرًا، نرغب في كثير من الأحيان فقط في التأكد من أننا نقوم بكل شيء بشكل صحيح عن طريق طباعة الصفوف القليلة الأولى. يمكن القيام بذلك عن طريق استدعاء `df.head()`. إذا كنت تقوم بتشغيله من Jupyter Notebook، فسيتم طباعة DataFrame في شكل جدولي جميل.
غالبًا ما يحتاج عالم البيانات إلى استكشاف البيانات، لذا من المهم أن يكون قادرًا على تصوّرها. عندما يكون DataFrame كبيرًا، غالبًا ما نريد فقط التأكد من أننا نفعل كل شيء بشكل صحيح عن طريق طباعة الصفوف القليلة الأولى. يمكن القيام بذلك عن طريق استدعاء `df.head()`. إذا كنت تُشغّل هذا من Jupyter Notebook، فسيتم طباعة DataFrame في شكل جدولي جميل.
لقد رأينا أيضًا استخدام وظيفة `plot` لتصور بعض الأعمدة. بينما تعتبر `plot` مفيدة جدًا للعديد من المهام وتدعم أنواعًا مختلفة من الرسوم البيانية عبر معلمة`kind=`, يمكنك دائمًا استخدام مكتبة `matplotlib` الخام لرسم شيء أكثر تعقيدًا. سنغطي تصور البيانات بالتفصيل في دروس منفصلة ضمن الدورة.
لقد رأينا أيضًا استخدام دالة `plot` لتصوير بعض الأعمدة. بينما `plot` مفيد جدًا للعديد من المهام، ويدعم العديد من أنواع الرسوم البيانية المختلفة عبر معامل`kind=`, يمكنك دائمًا استخدام مكتبة `matplotlib` الخام لرسم شيء أكثر تعقيدًا. سنغطي تصور البيانات بالتفصيل في دروس منفصلة.
يغطي هذا العرض المفاهيم الأكثر أهمية في Pandas، ومع ذلك، فإن المكتبة غنية جدًا، ولا يوجد حد لما يمكنك القيام به بها! دعونا الآن نطبق هذه المعرفة لحل مشكلة محددة.
هذا العرض يغطي أهم مفاهيم Pandas، مع ذلك، المكتبة غنية جدًا، ولا حدود لما يمكنك القيام به بها! دعونا نطبق الآن هذه المعرفة لحل مشكلة محددة.
## 🚀 التحدي 1: تحليل انتشار COVID
## 🚀 التحدي 1: تحليل انتشار كوفيد
المشكلة الأولى التي سنركز عليها هي نمذجة انتشار وباء COVID-19. للقيام بذلك، سنستخدم البيانات المتعلقة بعدد الأفراد المصابين في مختلف البلدان، والتي يوفرها [مركز علوم وهندسة الأنظمة](https://systems.jhu.edu/) (CSSE) في [جامعة جونز هوبكنز](https://jhu.edu/). تتوفر مجموعة البيانات في [هذا المستودع على GitHub](https://github.com/CSSEGISandData/COVID-19).
المشكلة الأولى التي سنركز عليها هي نمذجة انتشار وباء كوفيد-19. للقيام بذلك، سنستخدم بيانات عدد الأفراد المصابين في دول مختلفة، التي يوفرها [مركز علم وهندسة النظم](https://systems.jhu.edu/) (CSSE) في [جامعة جون هوبكنز](https://jhu.edu/). قاعدة البيانات متوفرة في [مستودع GitHub هذا](https://github.com/CSSEGISandData/COVID-19).
نظرًا لأننا نريد توضيح كيفية التعامل مع البيانات، ندعوك لفتح [`notebook-covidspread.ipynb`](notebook-covidspread.ipynb) وقراءته من البداية إلى النهاية. يمكنك أيضًا تنفيذ الخلايا، والقيام ببعض التحديات التي تركناها لك في النهاية.
بما أننا نريد أن نُظهر كيفية التعامل مع البيانات، ندعوك لفتح [`notebook-covidspread.ipynb`](notebook-covidspread.ipynb) وقراءته من الأعلى إلى الأسفل. يمكنك أيضًا تنفيذ الخلايا، والقيام ببعض التحديات التي تركناها لك في النهاية.
> إذا كنت لا تعرف كيفية تشغيل الكود في Jupyter Notebook، ألقِ نظرة على [هذه المقالة](https://soshnikov.com/education/how-to-execute-notebooks-from-github/).
> إذا كنت لا تعرف كيفية تشغيل الكود في Jupyter Notebook، ألق نظرة على [هذه المقالة](https://soshnikov.com/education/how-to-execute-notebooks-from-github/).
## العمل مع البيانات غير المنظمة
بينما تأتي البيانات غالبًا في شكل جدولي، في بعض الحالات نحتاج إلى التعامل مع بيانات أقل تنظيمًا، مثل النصوص أو الصور. في هذه الحالة، لتطبيق تقنيات معالجة البيانات التي رأيناها أعلاه، نحتاج بطريقة ما إلى **استخراج** البيانات المنظمة. إليك بعض الأمثلة:
بينما تأتي البيانات في كثير من الأحيان في شكل جدولي، في بعض الحالات نحتاج إلى التعامل مع بيانات أقل تنظيمًا، مثل النص أو الصور. في هذه الحالة، لتطبيق تقنيات معالجة البيانات التي رأيناها أعلاه، نحتاج بطريقة ما لاستخراج البيانات المنظمة. إليك بعض الأمثلة:
* استخراج الكلمات الرئيسية من النص، ومعرفة مدى تكرار ظهور هذه الكلمات.
* استخدام الشبكات العصبية لاستخراج معلومات حول الكائنات الموجودة في الصورة.
* الحصول على معلومات حول مشاعر الأشخاص من تغذية كاميرا الفيديو.
* استخراج الكلمات المفتاحية من النص، ورؤية مدى تكرار ظهور هذه الكلمات المفتاحية
* استخدام الشبكات العصبية لاستخراج المعلومات حول الأشياء في الصورة
* الحصول على معلومات عن مشاعر الأشخاص في تغذية كاميرا الفيديو
## 🚀 التحدي 2: تحليل أوراق COVID
## 🚀 التحدي 2: تحليل أوراق كوفيد
في هذا التحدي، سنواصل موضوع جائحة COVID، ونركز على معالجة الأوراق العلمية حول الموضوع. هناك [مجموعة بيانات CORD-19](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge) تحتوي على أكثر من 7000 (في وقت الكتابة) ورقة حول COVID، متوفرة مع البيانات الوصفية والملخصات (ولحوالي نصفها يتوفر النص الكامل أيضًا).
في هذا التحدي، سنستمر بموضوع جائحة كوفيد، ونركز على معالجة الأوراق العلمية حول الموضوع. هناك قاعدة بيانات [CORD-19](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge) تحتوي على أكثر من 7000 (وقت الكتابة) ورقة عن كوفيد، متوفرة مع بيانات وصفية وملخصات (ولنصفها تقريبًا أيضًا النص الكامل متوفر).
تم وصف مثال كامل لتحليل هذه المجموعة باستخدام خدمة [Text Analytics for Health](https://docs.microsoft.com/azure/cognitive-services/text-analytics/how-tos/text-analytics-for-health/?WT.mc_id=academic-77958-bethanycheum) في [هذه المقالة](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/). سنناقش نسخة مبسطة من هذا التحليل.
مثال كامل لتحليل هذه القاعدة باستخدام خدمة [تحليل النصوص للصحة](https://docs.microsoft.com/azure/cognitive-services/text-analytics/how-tos/text-analytics-for-health/?WT.mc_id=academic-77958-bethanycheum) مُوصوف [في هذه التدوينة](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/). سنناقش نسخة مبسطة من هذا التحليل.
> **NOTE**: لا نقدم نسخة من مجموعة البيانات كجزء من هذا المستودع. قد تحتاج أولاً إلى تنزيل ملف [`metadata.csv`](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge?select=metadata.csv) من [هذه المجموعة على Kaggle](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge). قد يكون التسجيل في Kaggle مطلوبًا. يمكنك أيضًا تنزيل المجموعة بدون تسجيل [من هنا](https://ai2-semanticscholar-cord-19.s3-us-west-2.amazonaws.com/historical_releases.html)، لكنها ستتضمن جميع النصوص الكاملة بالإضافة إلى ملف البيانات الوصفية.
> **ملاحظة**: لا نوفر نسخة من قاعدة البيانات ضمن هذا المستودع. قد تحتاج أولًا لتنزيل ملف [`metadata.csv`](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge?select=metadata.csv) من [هذه القاعدة على Kaggle](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge). قد يتطلب التسجيل في Kaggle. يمكنك أيضًا تنزيل القاعدة بدون تسجيل [من هنا](https://ai2-semanticscholar-cord-19.s3-us-west-2.amazonaws.com/historical_releases.html), ولكنها ستشمل جميع النصوص الكاملة بالإضافة إلى ملف البيانات الوصفية.
افتح [`notebook-papers.ipynb`](notebook-papers.ipynb) وقراءته من البداية إلى النهاية. يمكنك أيضًا تنفيذ الخلايا، والقيام ببعض التحديات التي تركناها لك في النهاية.
افتح [`notebook-papers.ipynb`](notebook-papers.ipynb) واقرأه من الأعلى إلى الأسفل. يمكنك أيضًا تنفيذ الخلايا، والقيام ببعض التحديات التي تركناها لك في النهاية.
مؤخرًا، تم تطوير نماذج ذكاء اصطناعي قوية جدًا تسمح لنا بفهم الصور. هناك العديد من المهام التي يمكن حلها باستخدام الشبكات العصبية المدربة مسبقًا أو خدمات السحابة. بعض الأمثلة تشمل:
مؤخرًا، تم تطوير نماذج ذكاء اصطناعي قوية جداً تسمح لنا بفهم الصور. هناك العديد من المهام التي يمكن حلها باستخدام الشبكات العصبية المدربة مسبقًا، أو خدمات السحاب. بعض الأمثلة تشمل:
* **تصنيف الصور**، والذي يمكن أن يساعدك في تصنيف الصورة إلى واحدة من الفئات المحددة مسبقًا. يمكنك بسهولة تدريب مصنفات الصور الخاصة بك باستخدام خدمات مثل [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum).
* **اكتشاف الكائنات** لتحديد الكائنات المختلفة في الصورة. يمكن لخدمات مثل [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum) اكتشاف عدد من الكائنات الشائعة، ويمكنك تدريب نموذج [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum) لتحديد بعض الكائنات المحددة ذات الاهتمام.
* **اكتشاف الوجه**، بما في ذلك العمر والجنس واكتشاف المشاعر. يمكن القيام بذلك عبر [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum).
* **تصنيف الصور**، الذي يمكن أن يساعدك في تصنيف الصورة ضمن فئة مُحددة مسبقًا. يمكنك تدريب مُصنِّفات الصور الخاصة بك بسهولة باستخدام خدمات مثل [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum)
* **كشف الأشياء** للكشف عن أشياء مختلفة في الصورة. خدمات مثل [الرؤية الحاسوبية](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum) يمكنها اكتشاف عدد من الأجسام الشائعة، ويمكنك تدريب نموذج [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum) للكشف عن بعض الأجسام الخاصة التي تهمك.
* **كشف الوجه**، بما في ذلك الكشف عن العمر والجنس والمشاعر. يمكن القيام بذلك عبر [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum).
يمكن استدعاء جميع هذه الخدمات السحابية باستخدام [Python SDKs](https://docs.microsoft.com/samples/azure-samples/cognitive-services-python-sdk-samples/cognitive-services-python-sdk-samples/?WT.mc_id=academic-77958-bethanycheum)، وبالتالي يمكن دمجها بسهولة في سير عمل استكشاف البيانات الخاص بك.
جميع هذه الخدمات السحابية يمكن استدعاؤها باستخدام [حزم SDK لبايثون](https://docs.microsoft.com/samples/azure-samples/cognitive-services-python-sdk-samples/cognitive-services-python-sdk-samples/?WT.mc_id=academic-77958-bethanycheum)، وبالتالي يمكن دمجها بسهولة ضمن سير عمل استكشاف البيانات الخاص بك.
إليك بعض الأمثلة لاستكشاف البيانات من مصادر بيانات الصور:
* في المقالة [كيف تتعلم علم البيانات بدون برمجة](https://soshnikov.com/azure/how-to-learn-data-science-without-coding/) نستكشف صور Instagram، محاولين فهم ما يجعل الناس يعطون المزيد من الإعجابات للصورة. أولاً نستخرج أكبر قدر ممكن من المعلومات من الصور باستخدام [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum)، ثم نستخدم [Azure Machine Learning AutoML](https://docs.microsoft.com/azure/machine-learning/concept-automated-ml/?WT.mc_id=academic-77958-bethanycheum) لبناء نموذج قابل للتفسير.
* في [ورشة عمل دراسات الوجه](https://github.com/CloudAdvocacy/FaceStudies) نستخدم [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum) لاستخراج المشاعر من الأشخاص في الصور من الأحداث، لمحاولة فهم ما يجعل الناس سعداء.
إليك بعض الأمثلة على استكشاف البيانات من مصادر بيانات الصور:
* في تدوينة [كيفية تعلم علم البيانات بدون ترميز](https://soshnikov.com/azure/how-to-learn-data-science-without-coding/) نستكشف صور إنستغرام، محاولين فهم ما الذي يجعل الناس يعطون إعجابات أكثر لصورة. نستخرج أولاً أكبر قدر ممكن من المعلومات من الصور باستخدام [الرؤية الحاسوبية](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum)، ثم نستخدم [Azure Machine Learning AutoML](https://docs.microsoft.com/azure/machine-learning/concept-automated-ml/?WT.mc_id=academic-77958-bethanycheum) لبناء نموذج قابل للفهم.
* في [ورشة دراسات الوجه](https://github.com/CloudAdvocacy/FaceStudies) نستخدم [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum) لاستخراج المشاعر على الأشخاص في الصور من الفعاليات، لمحاولة فهم ما يجعل الناس سعداء.
## الخاتمة
## الخلاصة
سواء كانت لديك بيانات منظمة أو غير منظمة، باستخدام Python يمكنك تنفيذ جميع الخطوات المتعلقة بمعالجة البيانات وفهمها. إنها على الأرجح الطريقة الأكثر مرونة لمعالجة البيانات، ولهذا السبب يستخدم غالبية علماء البيانات Python كأداة رئيسية لهم. تعلم Python بعمق فكرة جيدة إذا كنت جادًا بشأن رحلتك في علم البيانات!
سواء كانت لديك بيانات منظمة أو غير منظمة، باستخدام Python يمكنك تنفيذ جميع الخطوات المتعلقة بمعالجة البيانات وفهمها. ربما تكون الطريقة الأكثر مرونة لمعالجة البيانات، ولهذا السبب تستخدم الغالبية العظمى من علماء البيانات بايثون كأداتهم الأساسية. تعلم بايثون بعمق فكرة جيدة إذا كنت جادًا في رحلتك في علم البيانات!
## [اختبار ما بعد المحاضرة](https://ff-quizzes.netlify.app/en/ds/quiz/13)
## [اختبار بعد المحاضرة](https://ff-quizzes.netlify.app/en/ds/quiz/13)
## المراجعة والدراسة الذاتية
## مراجعة ودراسة ذاتية
**كتب**
* [Wes McKinney. Python for Data Analysis: Data Wrangling with Pandas, NumPy, and IPython](https://www.amazon.com/gp/product/1491957662)
* [Wes McKinney. بايثون لتحليل البيانات: معالجة البيانات باستخدام Pandas, NumPy, و IPython](https://www.amazon.com/gp/product/1491957662)
**موارد عبر الإنترنت**
* الدليل الرسمي [10 دقائق مع Pandas](https://pandas.pydata.org/pandas-docs/stable/user_guide/10min.html)
* [التوثيق حول تصور Pandas](https://pandas.pydata.org/pandas-docs/stable/user_guide/visualization.html)
**الموارد على الإنترنت**
* الدليل الرسمي [10 دقائق إلى Pandas](https://pandas.pydata.org/pandas-docs/stable/user_guide/10min.html)
* [توثيق حول تصور Pandas](https://pandas.pydata.org/pandas-docs/stable/user_guide/visualization.html)
**تعلم Python**
* [تعلم Python بطريقة ممتعة باستخدام Turtle Graphics و Fractals](https://github.com/shwars/pycourse)
* [ابدأ خطواتك الأولى مع Python](https://docs.microsoft.com/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) مسار التعلم على [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
**تعلم بايثون**
* [تعلم بايثون بطريقة ممتعة باستخدام رسومات السلحفاة والمتتابعات](https://github.com/shwars/pycourse)
* [خطواتك الأولى مع بايثون](https://docs.microsoft.com/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) مسار التعليم على [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
## الواجب
[قم بإجراء دراسة بيانات أكثر تفصيلًا للتحديات أعلاه](assignment.md)
[قم بدراسة بيانات أكثر تفصيلًا للتحديات أعلاه](assignment.md)
## الشكر
## الشكر والاعتمادات
تم تأليف هذا الدرس بحب ♥️ بواسطة [Dmitry Soshnikov](http://soshnikov.com)
تم تأليف هذا الدرس ب♥️ بواسطة [دميتري سوشنيكوف](http://soshnikov.com)
---
**إخلاء المسؤولية**:
تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**تنويه**:
تمت ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى للدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي والمعتمد. للمعلومات الهامة، يُنصح بالاستعانة بترجمة بشرية محترفة. نحن غير مسؤولين عن أي سوء فهم أو تفسير ناتج عن استخدام هذه الترجمة.
Während Datenbanken sehr effiziente Möglichkeiten bieten, Daten zu speichern und sie mit Abfragesprachen zu durchsuchen, ist die flexibelste Art der Datenverarbeitung das Schreiben eines eigenen Programms, um die Daten zu manipulieren. In vielen Fällen wäre eine Datenbankabfrage effektiver. Es gibt jedoch Situationen, in denen komplexere Datenverarbeitungen erforderlich sind, die sich nicht einfach mit SQL umsetzen lassen.
Datenverarbeitung kann in jeder Programmiersprache programmiert werden, aber es gibt bestimmte Sprachen, die sich besonders gut für die Arbeit mit Daten eignen. Datenwissenschaftler bevorzugen typischerweise eine der folgenden Sprachen:
Während Datenbanken sehr effiziente Möglichkeiten bieten, Daten zu speichern und mit Abfragesprachen abzufragen, ist die flexibelste Art der Datenverarbeitung das Schreiben eines eigenen Programms zur Manipulation von Daten. In vielen Fällen wäre eine Datenbankabfrage jedoch der effektivere Weg. Doch in einigen Fällen, wenn komplexere Datenverarbeitung notwendig ist, lässt sich dies nicht einfach mit SQL erledigen.
Datenverarbeitung kann in jeder Programmiersprache programmiert werden, aber es gibt bestimmte Sprachen, die im Hinblick auf die Arbeit mit Daten höherwertig sind. Datenwissenschaftler bevorzugen typischerweise eine der folgenden Sprachen:
* **[Python](https://www.python.org/)**, eine universelle Programmiersprache, die oft als eine der besten Optionen für Anfänger gilt, da sie einfach zu erlernen ist. Python verfügt über viele zusätzliche Bibliotheken, die bei der Lösung praktischer Probleme helfen können, wie z. B. das Extrahieren von Daten aus ZIP-Archiven oder das Konvertieren von Bildern in Graustufen. Neben der Datenwissenschaft wird Python auch häufig für die Webentwicklung verwendet.
* **[R](https://www.r-project.org/)** ist ein traditionelles Werkzeug, das speziell für die statistische Datenverarbeitung entwickelt wurde. Es verfügt über ein großes Repository von Bibliotheken (CRAN), was es zu einer guten Wahl für die Datenverarbeitung macht. Allerdings ist R keine universelle Programmiersprache und wird selten außerhalb des Bereichs der Datenwissenschaft eingesetzt.
* **[Julia](https://julialang.org/)** ist eine weitere Sprache, die speziell für die Datenwissenschaft entwickelt wurde. Sie soll eine bessere Leistung als Python bieten und ist daher ein großartiges Werkzeug für wissenschaftliche Experimente.
* **[Python](https://www.python.org/)**, eine allgemeine Programmiersprache, die aufgrund ihrer Einfachheit oft als eine der besten Optionen für Anfänger gilt. Python verfügt über viele zusätzliche Bibliotheken, die Ihnen bei der Lösung zahlreicher praktischer Probleme helfen können, z. B. das Extrahieren Ihrer Daten aus ZIP-Archiven oder das Konvertieren von Bildern in Graustufen. Neben der Datenwissenschaft wird Python auch häufig für die Webentwicklung verwendet.
* **[R](https://www.r-project.org/)** ist ein traditionelles Toolbox, das mit Blick auf statistische Datenverarbeitung entwickelt wurde. Es enthält auch ein großes Repository von Bibliotheken (CRAN), was es zu einer guten Wahl für die Datenverarbeitung macht. R ist jedoch keine allgemeine Programmiersprache und wird außerhalb der Domäne der Datenwissenschaft selten verwendet.
* **[Julia](https://julialang.org/)** ist eine weitere Sprache, die speziell für die Datenwissenschaft entwickelt wurde. Sie soll eine bessere Leistung als Python bieten, was sie zu einem großartigen Werkzeug für wissenschaftliche Experimente macht.
In dieser Lektion konzentrieren wir uns auf die Verwendung von Python für einfache Datenverarbeitung. Wir setzen grundlegende Kenntnisse der Sprache voraus. Wenn Sie eine tiefere Einführung in Python wünschen, können Sie auf eine der folgenden Ressourcen zurückgreifen:
In dieser Lektion konzentrieren wir uns auf die Verwendung von Python für einfache Datenverarbeitung. Wir setzen grundlegende Vertrautheit mit der Sprache voraus. Wenn Sie einen tieferen Einblick in Python wünschen, können Sie auf eine der folgenden Ressourcen zurückgreifen:
* [Lernen Sie Python auf unterhaltsame Weise mit Turtle Graphics und Fraktalen](https://github.com/shwars/pycourse) –Ein schneller Einführungskurs in Python-Programmierung auf GitHub
* [Machen Sie Ihre ersten Schritte mit Python](https://docs.microsoft.com/en-us/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum)– Ein Lernpfad auf [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
* [Lerne Python auf unterhaltsame Weise mit Turtle Graphics und Fraktalen](https://github.com/shwars/pycourse) –GitHub-basierter Schnellkurs in Python-Programmierung
* [Mach deine ersten Schritte mit Python](https://docs.microsoft.com/en-us/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) Lernpfad auf [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
Daten können in vielen Formen vorliegen. In dieser Lektion betrachten wir drei Formen von Daten –**tabellarische Daten**, **Text** und **Bilder**.
Wir werden uns auf einige Beispiele der Datenverarbeitung konzentrieren, anstatt Ihnen einen vollständigen Überblick über alle zugehörigen Bibliotheken zu geben. Dies ermöglicht es Ihnen, die Hauptidee dessen zu verstehen, was möglich ist, und gibt Ihnen das Wissen, wo Sie Lösungen für Ihre Probleme finden können, wenn Sie sie benötigen.
Wir konzentrieren uns auf einige wenige Beispiele der Datenverarbeitung, statt Ihnen eine vollständige Übersicht aller verwandten Bibliotheken zu geben. Das ermöglicht es Ihnen, die Hauptidee zu erfassen und gibt Ihnen ein Verständnis darüber, wo Sie Lösungen für Ihre Probleme finden können, wenn Sie sie benötigen.
> **Der nützlichste Rat:** Wenn Sie eine bestimmte Operation auf Daten durchführen müssen und nicht wissen, wie, versuchen Sie, online danach zu suchen. [Stackoverflow](https://stackoverflow.com/) enthält meist viele nützliche Python-Codebeispiele für viele typische Aufgaben.
> **Der nützlichste Ratschlag**: Wenn Sie eine bestimmte Operation mit Daten durchführen müssen, aber nicht wissen, wie, suchen Sie im Internet danach. [Stackoverflow](https://stackoverflow.com/) enthält oft viele nützliche Codebeispiele in Python für viele typische Aufgaben.
## [Quiz vor der Vorlesung](https://ff-quizzes.netlify.app/en/ds/quiz/12)
## Tabellarische Daten und Dataframes
## Tabellarische Daten und DataFrames
Sie haben tabellarische Daten bereits kennengelernt, als wir über relationale Datenbanken gesprochen haben. Wenn Sie viele Daten haben, die in verschiedenen verknüpften Tabellen gespeichert sind, macht es definitiv Sinn, SQL zu verwenden, um damit zu arbeiten. Es gibt jedoch viele Fälle, in denen wir eine Tabelle mit Daten haben und einige **Erkenntnisse** oder **Einsichten** über diese Daten gewinnen möchten, wie z. B. die Verteilung, Korrelation zwischen Werten usw. In der Datenwissenschaft gibt es viele Fälle, in denen wir einige Transformationen der ursprünglichen Daten durchführen müssen, gefolgt von einer Visualisierung. Beide Schritte können leicht mit Python durchgeführt werden.
Sie sind tabellarische Daten bereits begegnet, als wir über relationale Datenbanken gesprochen haben. Wenn Sie viele Daten haben, die in vielen verschiedenen verknüpften Tabellen enthalten sind, macht es definitiv Sinn, SQL zur Arbeit damit zu nutzen. Es gibt aber viele Fälle, in denen wir eine Tabelle mit Daten haben und Einblick oder Verständnis über diese Daten gewinnen müssen, z. B. die Verteilung, Korrelationen zwischen Werten etc. In der Datenwissenschaft gibt es viele Fälle, in denen wir Daten transformieren und dann visualisieren möchten. Beide Schritte lassen sich leicht mit Python ausführen.
Es gibt zwei äußerst nützliche Bibliotheken in Python, die Ihnen bei der Arbeit mit tabellarischen Daten helfen können:
* **[Pandas](https://pandas.pydata.org/)** ermöglicht es Ihnen, sogenannte **Dataframes** zu manipulieren, die relationalen Tabellen ähneln. Sie können benannte Spalten haben und verschiedene Operationen auf Zeilen, Spalten und Dataframes im Allgemeinen durchführen.
* **[Numpy](https://numpy.org/)** ist eine Bibliothek für die Arbeit mit **Tensors**, d. h. mehrdimensionalen **Arrays**. Ein Array hat Werte desselben zugrunde liegenden Typs, ist einfacher als ein Dataframe, bietet jedoch mehr mathematische Operationen und erzeugt weniger Overhead.
Es gibt zwei am häufigsten genutzte Bibliotheken in Python, die Ihnen bei der Arbeit mit tabellarischen Daten helfen:
* **[Pandas](https://pandas.pydata.org/)** ermöglicht die Manipulation sogenannter **DataFrames**, die analog zu relationalen Tabellen sind. Sie können benannte Spalten haben und verschiedene Operationen auf Zeilen, Spalten und DataFrames im Allgemeinen ausführen.
* **[Numpy](https://numpy.org/)** ist eine Bibliothek zum Arbeiten mit **Tensoren**, das heißt mehrdimensionalen **Arrays**. Ein Array hat Werte gleichen Typs und ist einfacher als ein DataFrame, bietet aber mehr mathematische Operationen und erzeugt weniger Overhead.
Es gibt auch ein paar andere Bibliotheken, die Sie kennen sollten:
* **[Matplotlib](https://matplotlib.org/)** ist eine Bibliothek für Datenvisualisierung und das Erstellen von Diagrammen
* **[SciPy](https://www.scipy.org/)** ist eine Bibliothek mit zusätzlichen wissenschaftlichen Funktionen. Wir sind bereits auf diese Bibliothek gestoßen, als wir über Wahrscheinlichkeit und Statistik gesprochen haben.
* **[Matplotlib](https://matplotlib.org/)** ist eine Bibliothek für Datenvisualisierung und das Erstellen von Diagrammen
* **[SciPy](https://www.scipy.org/)** ist eine Bibliothek mit einigen zusätzlichen wissenschaftlichen Funktionen. Wir sind dieser Bibliothek bereits begegnet, als wir über Wahrscheinlichkeit und Statistik gesprochen haben
Hier ist ein Codebeispiel, das Sie typischerweise verwenden würden, um diese Bibliotheken am Anfang Ihres Python-Programms zu importieren:
Hier ist ein Codeabschnitt, den Sie typischerweise verwenden würden, um diese Bibliotheken am Anfang Ihres Python-Programms zu importieren:
```python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy import ... # you need to specify exact sub-packages that you need
from scipy import ... # Sie müssen die genauen Unterpakete angeben, die Sie benötigen
```
Pandas basiert auf einigen grundlegenden Konzepten.
Pandas dreht sich um einige Grundkonzepte.
### Series
### Series
**Series** ist eine Sequenz von Werten, ähnlich einer Liste oder einem Numpy-Array. Der Hauptunterschied besteht darin, dass eine Series auch einen **Index** hat, und wenn wir mit Series arbeiten (z. B. sie addieren), wird der Index berücksichtigt. Der Index kann so einfach wie eine ganze Zeilennummer sein (dies ist der Standardindex, wenn eine Series aus einer Liste oder einem Array erstellt wird), oder er kann eine komplexe Struktur wie ein Datumsintervall haben.
**Series** ist eine Folge von Werten, ähnlich einer Liste oder einem Numpy-Array. Der Hauptunterschied ist, dass eine Series auch einen **Index** hat und wenn wir Operationen auf Series ausführen (z. B. Addieren), wird der Index berücksichtigt. Der Index kann so einfach sein wie eine ganzzahlige Zeilennummer (das ist der Standardindex beim Erstellen einer Series aus einer Liste oder einem Array) oder er kann eine komplexere Struktur haben, z.B. ein Datumsintervall.
> **Hinweis**: Es gibt einige einführende Pandas-Codes im begleitenden Notebook [`notebook.ipynb`](notebook.ipynb). Wir skizzieren hier nur einige Beispiele, und Sie sind herzlich eingeladen, das vollständige Notebook anzusehen.
> **Hinweis**: Im begleitenden Notebook [`notebook.ipynb`](notebook.ipynb) finden Sie einige einführende Pandas-Beispiele. Wir erläutern hier nur einige Beispiele und Sie sind herzlich eingeladen, sich das vollständige Notebook anzusehen.
Betrachten wir ein Beispiel: Wir möchten die Verkäufe unseres Eisdielen-Standorts analysieren. Lassen Sie uns eine Serie von Verkaufszahlen (Anzahl der täglich verkauften Artikel) für einen bestimmten Zeitraum generieren:
Betrachten wir ein Beispiel: Wir wollen die Verkäufe unseres Eisspezialitätenverkaufs analysieren. Generieren wir eine Series mit Verkaufszahlen (Anzahl verkaufter Artikel pro Tag) für einen bestimmten Zeitraum:
```python
start_date = "Jan 1, 2020"
@ -64,193 +66,196 @@ print(f"Length of index is {len(idx)}")
Angenommen, wir organisieren jede Woche eine Party für Freunde und nehmen zusätzlich 10 Packungen Eis für die Party. Wir können eine weitere Serie erstellen, die nach Wochen indiziert ist, um dies zu demonstrieren:
Angenommen, wir organisieren jede Woche eine Party für Freunde und nehmen zusätzlich 10 Packungen Eis für die Party mit. Wir können eine weitere Series erstellen, die nach Woche indiziert ist, um das zu demonstrieren:
> **Hinweis**: Wir verwenden nicht die einfache Syntax `total_items+additional_items`. Wenn wir dies täten, würden wir viele `NaN` (*Not a Number*)-Werte in der resultierenden Serie erhalten. Dies liegt daran, dass für einige Indexpunkte in der Serie `additional_items` Werte fehlen, und das Addieren von `NaN` zu irgendetwas ergibt `NaN`. Daher müssen wir den Parameter `fill_value` während der Addition angeben.
> **Beachten** Sie, dass wir nicht die einfache Schreibweise `total_items+additional_items` verwenden. Wenn wir das täten, würden wir viele `NaN` (*Not a Number*) Werte in der resultierenden Series erhalten. Dies liegt daran, dass für einige Indexpunkte in der Series `additional_items` Werte fehlen und das Addieren von `NaN` mit irgendetwas zu `NaN` führt. Deshalb müssen wir beim Addieren den Parameter `fill_value` angeben.
Mit Zeitreihen können wir die Serie auch mit unterschiedlichen Zeitintervallen **neu abtasten**. Zum Beispiel, wenn wir das durchschnittliche Verkaufsvolumen monatlich berechnen möchten, können wir den folgenden Code verwenden:
Bei Zeitreihen können wir außerdem die Series mit unterschiedlichen Zeitintervallen **neu abtasten** (resample). Wenn wir zum Beispiel den durchschnittlichen Verkaufsvolumen monatlich berechnen wollen, können wir folgenden Code verwenden:
Hier bedeutet `.T` die Operation des Transponierens des DataFrames, d. h. das Tauschen von Zeilen und Spalten, und die `rename`-Operation ermöglicht es uns, die Spalten umzubenennen, um das vorherige Beispiel zu entsprechen.
Hier bedeutet `.T` die Operation des Transponierens des DataFrames, d.h. Reihen und Spalten werden vertauscht, und die Funktion `rename` erlaubt uns, Spalten umzubenennen, um das vorherige Beispiel zu entsprechen.
Hier sind einige der wichtigsten Operationen, die wir auf DataFrames ausführen können:
Hier sind einige der wichtigsten Operationen, die wir an DataFrames durchführen können:
**Spaltenauswahl**. Wir können einzelne Spalten auswählen, indem wir `df['A']` schreiben – diese Operation gibt eine Series zurück. Wir können auch eine Teilmenge von Spalten in einen anderen DataFrame auswählen, indem wir `df[['B','A']]` schreiben – dies gibt einen anderen DataFrame zurück.
**Auswahl von Spalten**. Wir können einzelne Spalten auswählen, indem wir `df['A']` schreiben – diese Operation gibt eine Series zurück. Wir können auch eine Teilmenge von Spalten in einen anderen DataFrame auswählen, indem wir `df[['B','A']]` schreiben – dies gibt einen weiteren DataFrame zurück.
**Filtern** bestimmter Zeilen nach Kriterien. Zum Beispiel, um nur Zeilen mit Spalte `A` größer als 5 zu behalten, können wir `df[df['A']>5]` schreiben.
**Filtern** bestimmter Zeilen nach Kriterien. Um zum Beispiel nur Zeilen mit der Spalte `A` größer als 5 zu behalten, schreiben wir `df[df['A']>5]`.
> **Hinweis**: Die Funktionsweise des Filterns ist wie folgt. Der Ausdruck `df['A']<5` gibt eine boolesche Serie zurück, die angibt, ob der Ausdruck für jedes Element der ursprünglichen Serie `df['A']``True` oder `False` ist. Wenn eine boolesche Serie als Index verwendet wird, gibt sie eine Teilmenge der Zeilen im DataFrame zurück. Daher ist es nicht möglich, beliebige Python-Boolesche Ausdrücke zu verwenden, z. B. wäre das Schreiben von`df[df['A']>5 and df['A']<7]` falsch. Stattdessen sollten Sie die spezielle `&`-Operation auf booleschen Serien verwenden, indem Sie`df[(df['A']>5) & (df['A']<7)]` schreiben (*Klammern sind hier wichtig*).
> **Hinweis**: Die Funktionsweise des Filterings ist folgende. Der Ausdruck `df['A']<5` liefert eine boolesche Series, die angibt, ob der Ausdruck für jedes Element der ursprünglichen Series`df['A']``True` oder `False` ist. Wenn eine boolesche Series als Index verwendete wird, liefert sie eine Teilmenge der Zeilen im DataFrame. Deshalb ist es nicht möglich, beliebige Python-Boolsche Ausdrücke zu verwenden, z.B. wäre`df[df['A']>5 and df['A']<7]` falsch. Stattdessen sollten Sie die spezielle Operation `&` auf booleschen Series verwenden, also`df[(df['A']>5) & (df['A']<7)]` schreiben (*Klammern sind hier wichtig*).
**Erstellen neuer berechneter Spalten**. Wir können neue berechnete Spalten für unseren DataFrame einfach erstellen, indem wir intuitive Ausdrücke wie diesen verwenden:
**Erstellen neuer berechenbarer Spalten**. Wir können einfach neue berechenbare Spalten für unseren DataFrame mit intuitiven Ausdrücken erstellen wie diesem:
```python
df['DivA'] = df['A']-df['A'].mean()
```
Dieses Beispiel berechnet die Abweichung von A von seinem Mittelwert. Was hier tatsächlich passiert, ist, dass wir eine Serie berechnen und diese Serie dann der linken Seite zuweisen, wodurch eine weitere Spalte erstellt wird. Daher können wir keine Operationen verwenden, die nicht mit Serien kompatibel sind, z. B. ist der folgende Code falsch:
Dieses Beispiel berechnet die Divergenz von A zu ihrem Mittelwert. Tatsächlich wird hier eine Series berechnet und dann dieser Series auf der linken Seite zugewiesen, wodurch eine weitere Spalte entsteht. Deshalb dürfen wir keine Operationen verwenden, die mit Series nicht kompatibel sind. Das folgende Beispiel ist falsch:
```python
# Wrong code -> df['ADescr'] = "Low" if df['A'] <5else"Hi"
df['LenB'] = len(df['B']) # <-Wrong result
# Falscher Code -> df['ADescr'] = "Niedrig" wenn df['A'] <5sonst"Hoch"
df['LenB'] = len(df['B']) # <-Falsches Ergebnis
```
Das letzte Beispiel, obwohl syntaktisch korrekt, gibt uns ein falsches Ergebnis, da es die Länge der Serie `B` allen Werten in der Spalte zuweist und nicht die Länge der einzelnen Elemente, wie wir beabsichtigt hatten.
Das letztgenannte Beispiel, obwohl syntaktisch korrekt, ergibt ein falsches Resultat, weil es die Länge der Series `B` allen Werten der Spalte zuweist, nicht jedoch die Länge der einzelnen Elemente, wie von uns beabsichtigt.
Wenn wir komplexe Ausdrücke wie diesen berechnen müssen, können wir die Funktion `apply` verwenden. Das letzte Beispiel kann wie folgt geschrieben werden:
Wenn wir komplexe Ausdrücke berechnen müssen, können wir die Funktion `apply` verwenden. Das letzte Beispiel kann wie folgt geschrieben werden:
```python
df['LenB'] = df['B'].apply(lambda x : len(x))
# or
# oder
df['LenB'] = df['B'].apply(len)
```
Nach den obigen Operationen erhalten wir den folgenden DataFrame:
Nach den obigen Operationen erhalten wir folgenden DataFrame:
| | A | B | DivA | LenB |
| --- | --- | ------ | ---- | ---- |
| 0 | 1 | I | -4.0 | 1 |
| 1 | 2 | like | -3.0 | 4 |
| 2 | 3 | to | -2.0 | 2 |
| 3 | 4 | use | -1.0 | 3 |
| 1 | 2 | mag | -3.0 | 4 |
| 2 | 3 | es | -2.0 | 2 |
| 3 | 4 | benutzen | -1.0 | 3 |
| 4 | 5 | Python | 0.0 | 6 |
| 5 | 6 | and | 1.0 | 3 |
| 5 | 6 | und | 1.0 | 3 |
| 6 | 7 | Pandas | 2.0 | 6 |
| 7 | 8 | very | 3.0 | 4 |
| 8 | 9 | much | 4.0 | 4 |
| 7 | 8 | sehr | 3.0 | 4 |
| 8 | 9 | gern | 4.0 | 4 |
**Auswahl von Zeilen basierend auf Nummern** kann mit der `iloc`-Konstruktion durchgeführt werden. Zum Beispiel, um die ersten 5 Zeilen aus dem DataFrame auszuwählen:
**Auswahl von Zeilen basierend auf Zahlen** kann mit dem Konstrukt `iloc` erfolgen. Zum Beispiel, um die ersten 5 Zeilen eines DataFrames auszuwählen:
```python
df.iloc[:5]
```
**Gruppierung** wird oft verwendet, um ein Ergebnis ähnlich wie *Pivot-Tabellen* in Excel zu erhalten. Angenommen, wir möchten den Mittelwert der Spalte `A` für jede gegebene Anzahl von `LenB` berechnen. Dann können wir unseren DataFrame nach `LenB` gruppieren und `mean` aufrufen:
**Gruppieren** wird oft verwendet, um ein Ergebnis ähnlich wie *Pivot-Tabellen* in Excel zu erhalten. Angenommen, wir wollen den Mittelwert der Spalte `A` für jede gegebene Anzahl von `LenB` berechnen. Dann können wir unseren DataFrame nach `LenB` gruppieren und `mean` aufrufen:
```python
df.groupby(by='LenB')[['A','DivA']].mean()
```
Wenn wir den Mittelwert und die Anzahl der Elemente in der Gruppe berechnen müssen, können wir die komplexere Funktion `aggregate` verwenden:
Falls wir den Mittelwert und die Anzahl der Elemente in jeder Gruppe benötigen, können wir eine komplexere Funktion `aggregate` verwenden:
Wir haben gesehen, wie einfach es ist, Series und DataFrames aus Python-Objekten zu erstellen. Allerdings liegen Daten normalerweise in Form einer Textdatei oder einer Excel-Tabelle vor. Glücklicherweise bietet Pandas uns eine einfache Möglichkeit, Daten von der Festplatte zu laden. Zum Beispiel ist das Lesen einer CSV-Datei so einfach wie folgt:
Dies ergibt folgende Tabelle:
| LenB | Anzahl | Mittelwert |
| ---- | ------ | ---------- |
| 1 | 1 | 1.000000 |
| 2 | 1 | 3.000000 |
| 3 | 2 | 5.000000 |
| 4 | 3 | 6.333333 |
| 6 | 2 | 6.000000 |
### Daten erhalten
Wir haben gesehen, wie einfach es ist, Series und DataFrames aus Python-Objekten zu erstellen. Daten liegen jedoch meistens in Form einer Textdatei oder einer Excel-Tabelle vor. Glücklicherweise bietet Pandas uns eine einfache Möglichkeit, Daten von der Festplatte zu laden. Zum Beispiel ist das Einlesen einer CSV-Datei so einfach:
```python
df = pd.read_csv('file.csv')
```
Wir werden weitere Beispiele zum Laden von Daten sehen, einschließlich des Abrufens von externen Websites, im Abschnitt "Challenge".
Wir werden im Abschnitt „Challenge“ weitere Beispiele zum Laden von Daten sehen, einschließlich des Abrufs von externen Websites
### Drucken und Plotten
Ein Data Scientist muss oft die Daten erkunden, daher ist es wichtig, sie visualisieren zu können. Wenn ein DataFrame groß ist, möchten wir oft nur sicherstellen, dass wir alles richtig machen, indem wir die ersten paar Zeilen ausgeben. Dies kann durch Aufrufen von `df.head()` erfolgen. Wenn Sie es in Jupyter Notebook ausführen, wird der DataFrame in einer schönen tabellarischen Form angezeigt.
Ein Data Scientist muss Daten oft erkunden, daher ist es wichtig, in der Lage zu sein, sie zu visualisieren. Wenn das DataFrame groß ist, wollen wir oft nur sicherstellen, dass alles korrekt läuft, indem wir die ersten paar Zeilen ausdrucken. Das kann man durch Aufruf von `df.head()` machen. Wenn Sie es aus dem Jupyter Notebook ausführen, wird das DataFrame in einer schönen tabellarischen Form ausgegeben.
Wir haben auch die Verwendung der Funktion `plot` gesehen, um einige Spalten zu visualisieren. Während `plot` für viele Aufgaben sehr nützlich ist und viele verschiedene Diagrammtypen über den Parameter `kind=` unterstützt, können Sie immer die rohe `matplotlib`-Bibliothek verwenden, um etwas Komplexeres zu zeichnen. Wir werden die Datenvisualisierung ausführlich in separaten Kurslektionen behandeln.
Wir haben auch die Nutzung der Funktion `plot` gesehen, um einige Spalten zu visualisieren. Während `plot` für viele Aufgaben sehr nützlich ist und viele verschiedene Diagrammtypen über den Parameter `kind=` unterstützt, können Sie immer die reine `matplotlib`-Bibliothek verwenden, um etwas Komplexeres zu plotten. Die Datenvisualisierung werden wir in separaten Kurslektionen detailliert behandeln.
Dieser Überblick deckt die wichtigsten Konzepte von Pandas ab, jedoch ist die Bibliothek sehr umfangreich, und es gibt keine Grenzen für das, was Sie damit tun können! Lassen Sie uns nun dieses Wissen anwenden, um ein spezifisches Problem zu lösen.
Dieser Überblick deckt die wichtigsten Konzepte von Pandas ab, jedoch ist die Bibliothek sehr umfangreich und es gibt keine Grenze für das, was Sie damit machen können! Wenden wir dieses Wissen nun an, um ein konkretes Problem zu lösen.
## 🚀 Challenge 1: Analyse der COVID-Ausbreitung
## 🚀 Herausforderung 1: Analyse der COVID-Ausbreitung
Das erste Problem, auf das wir uns konzentrieren werden, ist die Modellierung der epidemischen Ausbreitung von COVID-19. Um dies zu tun, verwenden wir die Daten über die Anzahl der infizierten Personen in verschiedenen Ländern, bereitgestellt vom [Center for Systems Science and Engineering](https://systems.jhu.edu/) (CSSE) der [Johns Hopkins University](https://jhu.edu/). Der Datensatz ist in [diesem GitHub-Repository](https://github.com/CSSEGISandData/COVID-19) verfügbar.
Das erste Thema, auf das wir uns konzentrieren, ist die Modellierung der Ausbreitung der COVID-19-Pandemie. Dazu verwenden wir die Daten zur Anzahl der infizierten Personen in verschiedenen Ländern, bereitgestellt vom [Center for Systems Science and Engineering](https://systems.jhu.edu/) (CSSE) an der [Johns Hopkins University](https://jhu.edu/). Der Datensatz ist im [diesem GitHub-Repository](https://github.com/CSSEGISandData/COVID-19) verfügbar.
Da wir demonstrieren möchten, wie man mit Daten umgeht, laden wir Sie ein, [`notebook-covidspread.ipynb`](notebook-covidspread.ipynb) zu öffnen und es von oben bis unten zulesen. Sie können auch Zellen ausführen und einige Herausforderungen lösen, die wir am Ende für Sie hinterlassen haben.
Da wir zeigen wollen, wie man mit Daten umgeht, laden wir Sie ein, [`notebook-covidspread.ipynb`](notebook-covidspread.ipynb) zu öffnen und es von oben bis unten durchzulesen. Sie können auch Zellen ausführen und einige Herausforderungen bearbeiten, die wir für Sie am Ende hinterlassen haben.
> Wenn Sie nicht wissen, wie man Code in Jupyter Notebook ausführt, werfen Sie einen Blick auf [diesen Artikel](https://soshnikov.com/education/how-to-execute-notebooks-from-github/).
> Wenn Sie nicht wissen, wie man Code in Jupyter Notebook ausführt, schauen Sie sich [diesen Artikel](https://soshnikov.com/education/how-to-execute-notebooks-from-github/) an.
## Arbeiten mit unstrukturierten Daten
Während Daten sehr oft in tabellarischer Form vorliegen, müssen wir in einigen Fällen mit weniger strukturierten Daten umgehen, zum Beispiel Text oder Bilder. In diesem Fall müssen wir, um die oben gesehenen Datenverarbeitungstechniken anzuwenden, irgendwie **strukturierte** Daten extrahieren. Hier sind einige Beispiele:
Obwohl Daten sehr oft tabellarisch vorliegen, müssen wir in manchen Fällen mit weniger strukturierten Daten umgehen, zum Beispiel Text oder Bildern. Um in diesem Fall die oben gesehenen Datenverarbeitungstechniken anwenden zu können, müssen wir irgendwie strukturierte Daten **extrahieren**. Hier sind ein paar Beispiele:
* Extrahieren von Schlüsselwörtern aus Text und Analysieren, wie oft diese Schlüsselwörter vorkommen
* Verwenden von neuronalen Netzwerken, um Informationen über Objekte auf Bildern zu extrahieren
* Ermitteln von Emotionen von Personen in einem Videokamera-Feed
* Schlüsselwörter aus Text extrahieren und sehen, wie oft diese Schlüsselwörter vorkommen
* Neuronale Netze verwenden, um Informationen über Objekte auf Bildern zu extrahieren
* Informationen über Emotionen von Personen aus Videoaufnahmen erhalten
## 🚀 Challenge 2: Analyse von COVID-Papieren
## 🚀 Herausforderung 2: Analyse von COVID-Forschungsarbeiten
In dieser Challenge setzen wir das Thema der COVID-Pandemie fort und konzentrieren uns auf die Verarbeitung wissenschaftlicher Arbeiten zu diesem Thema. Es gibt den [CORD-19-Datensatz](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge) mit mehr als 7000 (zum Zeitpunkt des Schreibens) Arbeiten zu COVID, verfügbar mit Metadaten und Abstracts (und für etwa die Hälfte von ihnen ist auch der vollständige Text verfügbar).
In dieser Herausforderung setzen wir das Thema COVID-Pandemie fort und konzentrieren uns auf die Verarbeitung wissenschaftlicher Arbeiten zu diesem Thema. Es gibt einen [CORD-19-Datensatz](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge) mit mehr als 7000 (zum Zeitpunkt des Schreibens) COVID-Publikationen, verfügbar mit Metadaten und Abstracts (und für ungefähr die Hälfte davon gibt es auch den Volltext).
Ein vollständiges Beispiel für die Analyse dieses Datensatzes mit dem kognitiven Dienst [Text Analytics for Health](https://docs.microsoft.com/azure/cognitive-services/text-analytics/how-tos/text-analytics-for-health/?WT.mc_id=academic-77958-bethanycheum) wird [in diesem Blogbeitrag](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/) beschrieben. Wir werden eine vereinfachte Version dieser Analyse besprechen.
Ein vollständiges Beispiel zur Analyse dieses Datensatzes mit dem kognitiven Dienst [Text Analytics for Health](https://docs.microsoft.com/azure/cognitive-services/text-analytics/how-tos/text-analytics-for-health/?WT.mc_id=academic-77958-bethanycheum) ist [in diesem Blogpost](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/) beschrieben. Wir werden eine vereinfachte Version dieser Analyse besprechen.
> **NOTE**: Wir stellen keine Kopie des Datensatzes als Teil dieses Repositorys bereit. Sie müssen möglicherweise zuerst die Datei [`metadata.csv`](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge?select=metadata.csv) aus [diesem Datensatz auf Kaggle](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge) herunterladen. Eine Registrierung bei Kaggle kann erforderlich sein. Sie können den Datensatz auch ohne Registrierung [hier herunterladen](https://ai2-semanticscholar-cord-19.s3-us-west-2.amazonaws.com/historical_releases.html), aber er wird alle Volltexte zusätzlich zur Metadaten-Datei enthalten.
> **HINWEIS**: Wir stellen keine Kopie des Datensatzes als Teil dieses Repositories zur Verfügung. Sie müssen zuerst die Datei [`metadata.csv`](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge?select=metadata.csv) aus [diesem Datensatz auf Kaggle](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge) herunterladen. Eine Registrierung bei Kaggle kann erforderlich sein. Sie können den Datensatz auch ohne Registrierung [hier](https://ai2-semanticscholar-cord-19.s3-us-west-2.amazonaws.com/historical_releases.html) herunterladen, jedoch enthält dieser neben den Metadaten auch alle Volltexte.
Öffnen Sie [`notebook-papers.ipynb`](notebook-papers.ipynb) und lesen Sie es von oben bis unten. Sie können auch Zellen ausführen und einige Herausforderungen lösen, die wir am Ende für Sie hinterlassen haben.
Öffnen Sie [`notebook-papers.ipynb`](notebook-papers.ipynb) und lesen Sie es von oben bis unten durch. Sie können auch Zellen ausführen und einige Herausforderungen bearbeiten, die wir für Sie am Ende hinterlassen haben.

## Verarbeitung von Bilddaten
In letzter Zeit wurden sehr leistungsstarke KI-Modelle entwickelt, die es ermöglichen, Bilder zu verstehen. Es gibt viele Aufgaben, die mit vortrainierten neuronalen Netzwerken oder Cloud-Diensten gelöst werden können. Einige Beispiele sind:
Kürzlich wurden sehr leistungsfähige KI-Modelle entwickelt, die uns erlauben, Bilder zu verstehen. Es gibt viele Aufgaben, die mit vortrainierten neuronalen Netzwerken oder Cloud-Diensten gelöst werden können. Einige Beispiele sind:
* **Bildklassifikation**, die Ihnen helfen kann, das Bild in eine der vordefinierten Klassen einzuordnen. Sie können Ihre eigenen Bildklassifikatoren leicht mit Diensten wie [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum) trainieren.
* **Objekterkennung**, um verschiedene Objekte im Bild zu erkennen. Dienste wie [Computer Vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum) können eine Reihe von häufigen Objekten erkennen, und Sie können ein [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum)-Modell trainieren, um spezifische Objekte von Interesse zu erkennen.
* **Gesichtserkennung**, einschließlich Alter, Geschlecht und Emotionserkennung. Dies kann über die [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum) erfolgen.
* **Bildklassifikation**, die Ihnen hilft, das Bild einer vordefinierten Klasse zuzuordnen. Sie können Ihre eigenen Bildklassifizierer einfach mit Diensten wie [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum) trainieren
* **Objekterkennung**, um verschiedene Objekte im Bild zu erkennen. Dienste wie [Computer Vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum) können eine Anzahl von gängigen Objekten erkennen, und Sie können ein [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum)-Modell trainieren, um bestimmte Objekte von Interesse zu erkennen.
* **Gesichtserkennung**, einschließlich Alter-, Geschlechts- und Emotionserkennung. Dies kann über die [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum) durchgeführt werden.
Alle diese Cloud-Dienste können mit [Python SDKs](https://docs.microsoft.com/samples/azure-samples/cognitive-services-python-sdk-samples/cognitive-services-python-sdk-samples/?WT.mc_id=academic-77958-bethanycheum) aufgerufen werden und können somit leicht in Ihren Workflow zur Datenexploration integriert werden.
All diese Cloud-Dienste können mit [Python SDKs](https://docs.microsoft.com/samples/azure-samples/cognitive-services-python-sdk-samples/cognitive-services-python-sdk-samples/?WT.mc_id=academic-77958-bethanycheum) aufgerufen werden und lassen sich daher leicht in Ihren Datenexplorations-Workflow integrieren.
Hier sind einige Beispiele für die Erkundung von Daten aus Bilddatenquellen:
* Im Blogbeitrag [How to Learn Data Science without Coding](https://soshnikov.com/azure/how-to-learn-data-science-without-coding/) untersuchen wir Instagram-Fotos, um zu verstehen, was Menschen dazu bringt, einem Foto mehr Likes zu geben. Wir extrahieren zunächst so viele Informationen wie möglich aus Bildern mit [Computer Vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum) und verwenden dann [Azure Machine Learning AutoML](https://docs.microsoft.com/azure/machine-learning/concept-automated-ml/?WT.mc_id=academic-77958-bethanycheum), um ein interpretierbares Modell zu erstellen.
* In [Facial Studies Workshop](https://github.com/CloudAdvocacy/FaceStudies) verwenden wir die [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum), um Emotionen von Personen auf Fotos von Veranstaltungen zu extrahieren, um zu verstehen, was Menschen glücklich macht.
Hier sind einige Beispiele für die Datenexploration mit Bilddatenquellen:
* Im Blogpost [How to Learn Data Science without Coding](https://soshnikov.com/azure/how-to-learn-data-science-without-coding/) erkunden wir Instagram-Fotos, um zu verstehen, was Menschen dazu bringt, einem Foto mehr Likes zu geben. Wir extrahieren zuerst so viele Informationen wie möglich aus Bildern mit [Computer Vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum) und verwenden dann [Azure Machine Learning AutoML](https://docs.microsoft.com/azure/machine-learning/concept-automated-ml/?WT.mc_id=academic-77958-bethanycheum), um ein interpretierbares Modell zu erstellen.
* Im [Facial Studies Workshop](https://github.com/CloudAdvocacy/FaceStudies) verwenden wir die [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum), um Emotionen von Menschen auf Fotos von Veranstaltungen zu extrahieren, um zu verstehen, was Menschen glücklich macht.
## Fazit
Egal, ob Sie bereits strukturierte oder unstrukturierte Daten haben, mit Python können Sie alle Schritte der Datenverarbeitung und des Datenverständnisses durchführen. Es ist wahrscheinlich die flexibelste Methode der Datenverarbeitung, und das ist der Grund, warum die Mehrheit der Data Scientists Python als ihr Hauptwerkzeug verwendet. Python gründlich zu lernen, ist wahrscheinlich eine gute Idee, wenn Sie Ihre Reise in der Datenwissenschaft ernst nehmen!
Egal, ob Sie bereits strukturierte oder unstrukturierte Daten haben, mit Python können Sie alle Schritte zur Datenverarbeitung und -analyse durchführen. Es ist wahrscheinlich die flexibelste Art der Datenverarbeitung, und deshalb verwenden die meisten Data Scientists Python als ihr Hauptwerkzeug. Es ist wahrscheinlich eine gute Idee, Python gründlich zu lernen, wenn Sie es mit Ihrer Data-Science-Reise ernst meinen!
## [Quiz nach der Vorlesung](https://ff-quizzes.netlify.app/en/ds/quiz/13)
@ -260,22 +265,24 @@ Egal, ob Sie bereits strukturierte oder unstrukturierte Daten haben, mit Python
* [Wes McKinney. Python for Data Analysis: Data Wrangling with Pandas, NumPy, and IPython](https://www.amazon.com/gp/product/1491957662)
**Online-Ressourcen**
* Offizielles [10 Minuten zu Pandas](https://pandas.pydata.org/pandas-docs/stable/user_guide/10min.html)-Tutorial
* [Dokumentation zur Pandas-Visualisierung](https://pandas.pydata.org/pandas-docs/stable/user_guide/visualization.html)
* Offizielles [10 minutes to Pandas](https://pandas.pydata.org/pandas-docs/stable/user_guide/10min.html) Tutorial
* [Dokumentation zu Pandas Visualisierung](https://pandas.pydata.org/pandas-docs/stable/user_guide/visualization.html)
**Python lernen**
* [Learn Python in a Fun Way with Turtle Graphics and Fractals](https://github.com/shwars/pycourse)
* [Lernen Sie Python auf spielerische Weise mit Turtle-Grafiken und Fraktalen](https://github.com/shwars/pycourse)
* [Machen Sie Ihre ersten Schritte mit Python](https://docs.microsoft.com/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) Lernpfad auf [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
## Aufgabe
## Aufgabenstellung
[Führen Sie eine detailliertere Datenstudie für die oben genannten Herausforderungen durch](assignment.md)
[Führen Sie eine detailliertere Datenstudie für die obigen Herausforderungen durch](assignment.md)
## Credits
## Danksagungen
Diese Lektion wurde mit ♥️ von [Dmitry Soshnikov](http://soshnikov.com) erstellt.
Diese Lektion wurde mit ♥️ erstellt von [Dmitry Soshnikov](http://soshnikov.com)
---
**Haftungsausschluss**:
Dieses Dokument wurde mithilfe des KI-Übersetzungsdienstes [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, weisen wir darauf hin, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner ursprünglichen Sprache sollte als maßgebliche Quelle betrachtet werden. Für kritische Informationen wird eine professionelle menschliche Übersetzung empfohlen. Wir übernehmen keine Haftung für Missverständnisse oder Fehlinterpretationen, die sich aus der Nutzung dieser Übersetzung ergeben.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Haftungsausschluss**:
Dieses Dokument wurde mit dem KI-Übersetzungsdienst [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, beachten Sie bitte, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner Ursprungssprache gilt als maßgebliche Quelle. Bei kritischen Informationen wird eine professionelle menschliche Übersetzung empfohlen. Wir übernehmen keine Haftung für Missverständnisse oder Fehlinterpretationen, die aus der Verwendung dieser Übersetzung entstehen.
Хотя базы данных предоставляют очень эффективные способы хранения данных и их запросов сиспользованием языков запросов, наиболее гибким способом обработки данных является написание собственной программы для их манипуляции. Во многих случаях запрос к базе данных будет более эффективным. Однако в некоторых случаях, когда требуется более сложная обработка данных, это не так просто сделать с помощью SQL.
Обработка данных может быть запрограммирована на любом языке программирования, но существуют языки, которые считаются более высокоуровневыми для работы с данными. Специалисты по данным обычно предпочитают один из следующих языков:
Хотя базы данных предлагают очень эффективные способы хранения данных и их запросов спомощью языков запросов, самым гибким способом обработки данных является написание собственной программы для манипуляции данными. Во многих случаях выполнение запроса к базе данных было бы более эффективным способом. Однако в некоторых случаях, когда требуется более сложная обработка данных, это нельзя легко сделать с помощью SQL.
Обработка данных может программироваться на любом языке программирования, но существуют определённые языки более высокого уровня для работы с данными. Учёные данных обычно предпочитают один из следующих языков:
* **[Python](https://www.python.org/)** — универсальный язык программирования, который часто считается одним из лучших вариантов для начинающих благодаря своей простоте. Python имеет множество дополнительных библиотек, которые могут помочь решить множество практических задач, таких как извлечение данных из ZIP-архива или преобразование изображения в оттенки серого. Помимо науки о данных, Python также часто используется для веб-разработки.
* **[R](https://www.r-project.org/)** — традиционный инструмент, разработанный с учетом статистической обработки данных. Он также содержит большой репозиторий библиотек (CRAN), что делает его хорошим выбором для обработки данных. Однако R не является универсальным языком программирования и редко используется за пределами области науки о данных.
* **[Julia](https://julialang.org/)** — еще один язык, разработанный специально для науки о данных. Он предназначен для обеспечения более высокой производительности, чем Python, что делает его отличным инструментом для научных экспериментов.
* **[Python](https://www.python.org/)**, универсальный язык программирования, который часто считается одним из лучших вариантов для новичков из-за своей простоты. У Python есть множество дополнительных библиотек, которые помогут решить многие практические задачи, например извлечение данных из ZIP-архива или преобразование изображения в оттенки серого. Кроме науки о данных, Python часто используется и для веб-разработки.
* **[R](https://www.r-project.org/)** — это традиционный набор инструментов, разработанный с учётом статистической обработки данных. Он также содержит большой репозиторий библиотек (CRAN), что делает его хорошим выбором для обработки данных. Однако R не является универсальным языком программирования и редко используется за пределами области науки о данных.
* **[Julia](https://julialang.org/)** — ещё один язык, разработанный специально для науки о данных. Он предназначен для обеспечения лучшей производительности, чем Python, что делает его отличным инструментом для научных экспериментов.
В этом уроке мы сосредоточимся на использовании Python для простой обработки данных. Мы предполагаем базовое знакомство с языком. Если вы хотите более глубокое погружение в Python, вы можете обратиться к одному из следующих ресурсов:
В этом уроке мы сосредоточимся на использовании Python для простой обработки данных. Мы предположим базовое знакомство с языком. Если вы хотите более глубокое изучение Python, вы можете обратиться к одному из следующих ресурсов:
* [Изучите Python весело с помощью Turtle Graphics и фракталов](https://github.com/shwars/pycourse) — краткий вводный курс по программированию на Python на GitHub
* [Изучайте Python весело с помощью Turtle Graphics и фракталов](https://github.com/shwars/pycourse) — быстрый вводный курс по программированию на Python, размещённый на GitHub
* [Сделайте первые шаги с Python](https://docs.microsoft.com/en-us/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) — учебный путь на [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
Данные могут быть представлены в различных формах. В этом уроке мы рассмотрим три формы данных —**табличные данные**, **текст** и **изображения**.
Данные могут принимать разные формы. В этом уроке мы рассмотрим три формы данных -**табличные данные**, **текст** и **изображения**.
Мы сосредоточимся на нескольких примерах обработки данных, вместо того чтобы давать полный обзор всех связанных библиотек. Это позволит вам понять основные возможности и оставит понимание того, где искать решения ваших задач, когда это потребуется.
Мы сосредоточимся на нескольких примерах обработки данных, вместо полного обзора всех связанных библиотек. Это позволит вам получить основное представление о возможностях и даст понимание, где искать решения ваших задач при необходимости.
> **Самый полезный совет**. Если вам нужно выполнить определенную операцию с данными, но вы не знаете, как это сделать, попробуйте поискать это в интернете. [Stackoverflow](https://stackoverflow.com/) обычно содержит множество полезных примеров кода на Python для многих типичных задач.
> **Самый полезный совет**. Когда вам нужно выполнить определённую операцию с данными, которую вы не знаете, как сделать, попробуйте поискать её в интернете. [Stackoverflow](https://stackoverflow.com/) обычно содержит много полезных примеров кода на Python для многих типичных задач.
## [Тест перед лекцией](https://ff-quizzes.netlify.app/en/ds/quiz/12)
## [Викторина перед лекцией](https://ff-quizzes.netlify.app/en/ds/quiz/12)
## Табличные данные и DataFrame
Вы уже сталкивались с табличными данными, когда мы говорили о реляционных базах данных. Когда у вас много данных, и они содержатся в нескольких связанных таблицах, определенно имеет смысл использовать SQL для работы с ними. Однако есть много случаев, когдау нас есть таблица данных, и нам нужно получить некоторое **понимание** или **инсайты** об этих данных, такие как распределение, корреляция между значениями и т. д. В науке о данных часто требуется выполнить некоторые преобразования исходных данных, а затем визуализировать их. Оба этих шага легко выполнить с помощью Python.
Вы уже встречались с табличными данными, когда мы говорили о реляционных базах данных. Когда у вас много данных, содержащихся во многих различных связанных таблицах, определённо имеет смысл использовать SQL для работы с ними. Однако во многих случаяху нас есть таблица данных, и нам нужно получить некоторое **понимание** или **инсайты** о этих данных, такие как распределение, корреляция между значениями и др. В науке о данных часто требуется выполнить преобразования исходных данныхс последующей визуализацией. Оба этих шага можно легко сделать с помощью Python.
Существует две наиболее полезные библиотеки в Python, которые помогут вам работать с табличными данными:
* **[Pandas](https://pandas.pydata.org/)** позволяет манипулировать так называемыми **DataFrame**, которые аналогичны реляционным таблицам. Вы можете использовать именованные столбцы и выполнять различные операции над строками, столбцами и DataFrame в целом.
* **[Numpy](https://numpy.org/)** — библиотека для работы с**тензорами**, то есть многомерными **массивами**. Массив содержит значения одного типа и проще, чем DataFrame, но предлагает больше математических операций и создает меньшую нагрузку.
В Python есть две наиболее полезные библиотеки, которые помогут вам работать с табличными данными:
* **[Pandas](https://pandas.pydata.org/)** позволяет манипулировать так называемыми **DataFrame**, которые аналогичны реляционным таблицам. Вы можете иметь именованные колонки и выполнять различные операции с рядами, колонками и DataFrame в целом.
* **[Numpy](https://numpy.org/)** — библиотека для работы с**тензорами**, то есть многомерными **массивами**. Массив содержит значения одного типа, и он проще, чем DataFrame, но предлагает больше математических операций и создаёт меньше накладных расходов.
Также есть несколько других библиотек, о которых стоит знать:
* **[Matplotlib](https://matplotlib.org/)** — библиотека для визуализации данных и построения графиков
* **[SciPy](https://www.scipy.org/)** — библиотека с дополнительными научными функциями. Мы уже сталкивались с этой библиотекой, когда говорили о вероятности и статистике.
Есть также несколько других библиотек, о которых стоит знать:
* **[Matplotlib](https://matplotlib.org/)** — библиотека для визуализации данных и построения графиков
* **[SciPy](https://www.scipy.org/)** — библиотека с дополнительными научными функциями. Мы уже встречались с этой библиотекой, обсуждая вероятность и статистику
Вот пример кода, который обычно используется для импорта этих библиотек в начале программы на Python:
Вот кусочек кода, который обычно используется для импорта этих библиотек в начале Python-программы:
```python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy import ... # you need to specify exact sub-packages that you need
from scipy import ... # вам нужно указать конкретные подпакеты, которые вам нужны
```
Pandas основан на нескольких базовых концепциях.
Pandas основан на нескольких базовых понятиях.
### Series
### Series
**Series** — это последовательность значений, аналогичная списку или массиву numpy. Главное отличие состоит в том, что Series также имеет **индекс**, и при выполнении операций (например, сложении) индекс учитывается. Индекс может быть простым числовым номером строки (он используется по умолчанию при создании Series из списка или массива) или иметь сложную структуру, например, временной интервал.
**Series** — это последовательность значений, похожая на список или numpy-массив. Главное отличие в том, что у series есть **индекс**, и при операциях над series (например, сложении) индекс учитывается. Индекс может быть простым — целочисленным номером строки (используется по умолчанию при создании series из списка или массива) или иметь сложную структуру, например, интервал дат.
> **Примечание**: В сопровождающем ноутбуке [`notebook.ipynb`](notebook.ipynb) есть вводный код для работы с Pandas. Здесь мы приводим только некоторые примеры, и вы, конечно, можете ознакомиться с полным ноутбуком.
> **Примечание**: В сопроводительном блокноте [`notebook.ipynb`](notebook.ipynb) есть вводный код для Pandas. Здесь мы лишь кратко представляем некоторые примеры, и вы, безусловно, можете ознакомиться с полным блокнотом.
Рассмотрим пример: мы хотим проанализировать продажи нашего магазина мороженого. Давайте создадим Series с числами продаж (количество проданных единиц в день) за определенный период времени:
Рассмотрим пример: мы хотим проанализировать продажи нашего киоска с мороженым. Сгенерируем ряд из чисел продаж (количество проданных единиц в каждый день) за некоторый период:
Теперь предположим, что каждую неделю мы устраиваем вечеринку для друзей и берем дополнительно 10 упаковок мороженого для вечеринки. Мы можем создать еще один Series, индексированный по неделям, чтобы это показать:
Теперь предположим, что каждую неделю мы устраиваем вечеринку для друзей и берём дополнительно 10 упаковок мороженого на вечеринку. Мы можем создать другой series с индексом по неделям, чтобы это показать:
> **Примечание**: Мы не используем простую запись `total_items+additional_items`. Если бы мы это сделали, то получили бы много значений `NaN` (*Not a Number*) в результирующем Series. Это происходит из-за отсутствующих значений для некоторых точек индекса в Series `additional_items`, а сложение `NaN`с чем-либо дает `NaN`. Поэтому необходимо указать параметр `fill_value` при сложении.
> **Обратите внимание**, что мы не используем простой синтаксис `total_items+additional_items`. Были бы они использованы, мы получили бы множество значений `NaN` (*Not a Number*) в результирующем series. Это происходит потому, что в некоторых индексных точках серии `additional_items` отсутствуют значения, и сложение с`NaN` даёт `NaN`. Поэтому при сложении необходимо указать параметр `fill_value`.
С временными рядами мы также можем **пересчитывать** данные с разными временными интервалами. Например, если мы хотим вычислить средний объем продаж за месяц, мы можем использовать следующий код:
С временными рядами мы также можем **пересамплировать** series с другими временными интервалами. Например, предположим, что мы хотим вычислить средний объём продаж помесячно. Для этого используем следующий код:
```python
monthly = total_items.resample("1M").mean()
ax = monthly.plot(kind='bar')
```


### DataFrame
DataFrame — это, по сути, коллекция Series с одинаковым индексом. Мы можем объединить несколько Series в один DataFrame:
DataFrame — по сути коллекция series с одинаковым индексом. Мы можем объединить несколько series в один DataFrame:
```python
a = pd.Series(range(1,10))
b = pd.Series(["I","like","to","play","games","and","will","not","change"],index=range(0,9))
df = pd.DataFrame([a,b])
```
Это создаст горизонтальную таблицу, подобную этой:
Это создаст горизонтальную таблицу следующего вида:
Здесь `.T` означает операцию транспонирования DataFrame, то есть изменение строк и столбцов, а операция `rename` позволяет переименовать столбцы, чтобы они соответствовали предыдущему примеру.
Здесь `.T` означает операцию транспонирования DataFrame, то есть замену строк на столбцы и наоборот, а операция `rename` позволяет переименовать колонки, чтобы привести их в соответствие с предыдущим примером.
Вот несколько наиболее важных операций, которые мы можем выполнять с DataFrame:
Вот несколько самых важных операций, которые можно выполнять с DataFrame:
**Выбор столбцов**. Мы можем выбрать отдельные столбцы, написав `df['A']` — эта операция возвращает Series. Мы также можем выбрать подмножество столбцов в другой DataFrame, написав `df[['B','A']]` — это возвращает другой DataFrame.
**Выбор колонок**. Мы можем выбрать отдельные колонки, написав `df['A']` — эта операция возвращает Series. Также можно выбрать подмножество колонок в другой DataFrame написав `df[['B','A']]` — это возвращает другой DataFrame.
**Фильтрация** строк по критериям. Например, чтобы оставить только строки, где столбец `A` больше 5, мы можем написать `df[df['A']>5]`.
**Фильтрация** только определённых строк по критериям. Например, чтобы оставить только строки, у которых значение в колонке `A` больше 5, можно написать `df[df['A']>5]`.
> **Примечание**: Фильтрация работает следующим образом. Выражение `df['A']<5` возвращает булевый Series, который указывает, является ли выражение `True` или `False` для каждого элемента исходного Series `df['A']`. Когда булевый Series используется в качестве индекса, он возвращает подмножество строк в DataFrame. Таким образом, нельзя использовать произвольное булевое выражение Python, например, запись `df[df['A']>5 and df['A']<7]` будет неверной. Вместо этого следует использовать специальную операцию `&` для булевых Series, написав `df[(df['A']>5) & (df['A']<7)]` (*скобки здесь важны*).
> **Примечание**: Фильтрация работает следующим образом. Выражение `df['A']<5` возвращает булевский series, указывающий, для каждого элемента исходного series `df['A']`, истинно ли условие (`True`) или ложно (`False`). Когда булевский series используется в качестве индекса, он возвращает подмножество строк DataFrame. Поэтому нельзя использовать произвольное булевское выражение Python, например, написание `df[df['A']>5 and df['A']<7]` будет ошибкой. Вместо этого следует использовать специальную операцию `&` для булевских series, написав `df[(df['A']>5) & (df['A']<7)]` (*скобки здесь важны*).
**Создание новых вычисляемых столбцов**. Мы можем легко создавать новые вычисляемые столбцы для нашего DataFrame, используя интуитивно понятные выражения, например:
**Создание новых вычисляемых колонок**. Мы можем легко создать новые вычисляемые колонки в нашем DataFrame, используя интуитивное выражение, например:
```python
df['DivA'] = df['A']-df['A'].mean()
```
Этот пример вычисляет отклонение `A` от его среднего значения. На самом деле мы вычисляем Series, а затем присваиваем этот Series левой части, создавая новый столбец. Таким образом, нельзя использовать операции, несовместимые с Series, например, следующий код неверен:
Этот пример вычисляет отклонение A от её среднего значения. Фактически здесь мы вычисляем series, а затем присваиваем этот series в левую часть, создавая новую колонку. Поэтому мы не можем использовать операции, несовместимые с series, например, следующий код неправильный:
```python
# Wrong code -> df['ADescr'] = "Low" if df['A'] <5else"Hi"
df['LenB'] = len(df['B']) # <-Wrongresult
# Неправильный код -> df['ADescr'] = "Low" если df['A'] <5иначе"Hi"
Последний пример, хотя и синтаксически корректен, дает неверный результат, так как он присваивает длину Series `B` всем значениям в столбце, а не длину отдельных элементов, как мы намеревались.
Последний пример, хотя синтаксически корректен, даёт неправильный результат, так как присваивает длину series `B` всем значениям колонки, а не длину отдельных элементов, как предполагалось.
Если нам нужно вычислить сложные выражения, мы можем использовать функцию `apply`. Последний пример можно записать следующим образом:
Если нам нужно вычислить сложные выражения, можно использовать функцию `apply`. Последний пример можно записать так:
```python
df['LenB'] = df['B'].apply(lambda x : len(x))
# or
# или
df['LenB'] = df['B'].apply(len)
```
После выполнения вышеуказанных операций мы получим следующий DataFrame:
После вышеописанных операций мы получим следующий DataFrame:
**Выбор строк по номерам** можно выполнить с помощью конструкции `iloc`. Например, чтобы выбрать первые 5 строк из DataFrame:
**Выбор строк по номеру** можно сделать с помощью конструкции `iloc`. Например, чтобы выбрать первые 5 строк из DataFrame:
```python
df.iloc[:5]
```
**Группировка** часто используется для получения результата, аналогичного *сводным таблицам* в Excel. Предположим, что мы хотим вычислить среднее значение столбца `A` для каждого значения `LenB`. Тогда мы можем сгруппировать наш DataFrame по `LenB` и вызвать `mean`:
**Группировка** часто используется для получения результата, похожего на *сводные таблицы* в Excel. Допустим, мы хотим вычислить среднее значение колонки `A` для каждого значения `LenB`. Для этого можно сгруппировать DataFrame по `LenB` и вызвать `mean`:
```python
df.groupby(by='LenB')[['A','DivA']].mean()
```
Если нам нужно вычислить среднее значение и количество элементов в группе, то мы можем использовать более сложную функцию `aggregate`:
Если нужно вычислить среднее и количество элементов в группе, можно использовать более сложную функцию `aggregate`:
Мы видели, как легко создавать Series и DataFrame из объектов Python. Однако данные обычно поступают в виде текстового файла или таблицы Excel. К счастью, Pandas предлагает простой способ загрузки данных с диска. Например, чтение CSV-файла настолько просто, как это:
Мы уже видели, как просто создавать Series и DataFrames из объектов Python. Однако данные обычно поступают в виде текстового файла или таблицы Excel. К счастью, Pandas предлагает нам простой способ загрузки данных с диска. Например, считывание CSV-файла так же просто:
```python
df = pd.read_csv('file.csv')
```
Мы рассмотрим больше примеров загрузки данных, включая их получение с внешних веб-сайтов, в разделе "Задание".
Мы увидим больше примеров загрузки данных, включая получение их с внешних веб-сайтов, в разделе "Задание"
### Печать и визуализация
### Печать и построение графиков
Датасаентисту часто приходится исследовать данные, поэтому важно уметь их визуализировать. Когда DataFrame большой, зачастую мы хотим просто убедиться, что всё делаем правильно, напечатав первые несколько строк. Это можно сделать, вызвав `df.head()`. Если вы запускаете это из Jupyter Notebook, он выведет DataFrame в удобной табличной форме.
Специалист по данным часто должен исследовать данные, поэтому важно уметь их визуализировать. Когда DataFrame большой, часто хочется просто убедиться, что все сделано правильно, распечатав первые несколько строк. Это можно сделать, вызвав `df.head()`. Если вы используете Jupyter Notebook, он выведет DataFrame в красивом табличном виде.
Мы также видели использование функции `plot` для визуализации некоторых столбцов. Хотя `plot` очень полезен для многих задач и поддерживает множество различных типов графиков через параметр `kind=`, вы всегда можете использовать библиотеку `matplotlib` для построения чего-то более сложного. Мы подробно рассмотрим визуализацию данных в отдельных уроках курса.
Мы также видели использование функции `plot` для визуализации некоторых столбцов. Хотя `plot` очень полезен для многих задач и поддерживает множество типов графиков через параметр `kind=`, вы всегда можете использовать библиотеку `matplotlib` для построения чего-то более сложного. Подробно мы рассмотрим визуализацию данных в отдельных уроках курса.
Этот обзор охватывает самые важные концепции Pandas, однако библиотека очень богата, и нет предела тому, что вы можете с ней сделать! Давайте теперь применим эти знания для решения конкретной задачи.
Этот обзор охватывает наиболее важные концепции Pandas, однако библиотека очень богата, и нет предела тому, что вы можете с ней делать! Теперь давайте применим эти знания для решения конкретной задачи.
## 🚀 Задание 1: Анализ распространения COVID
Первая задача, на которой мы сосредоточимся, — это моделирование распространения эпидемии COVID-19. Для этого мы будем использовать данныео количестве инфицированных людей в разных странах, предоставленные [Центром системной науки и инженерии](https://systems.jhu.edu/) (CSSE) при [Университете Джонса Хопкинса](https://jhu.edu/). Набор данных доступен в [этом репозитории GitHub](https://github.com/CSSEGISandData/COVID-19).
Первая задача, на которой мы сосредоточимся, — моделирование эпидемического распространения COVID-19. Для этого мы воспользуемся даннымио количестве инфицированных в разных странах, предоставленными [Центром системной науки и инженерии](https://systems.jhu.edu/) (CSSE) в [Университете Джонса Хопкинса](https://jhu.edu/). Набор данных доступен в [этом репозитории на GitHub](https://github.com/CSSEGISandData/COVID-19).
Поскольку мы хотим продемонстрировать, как работать с данными, мы приглашаем вас открыть [`notebook-covidspread.ipynb`](notebook-covidspread.ipynb) и прочитать его от начала до конца. Вы также можете выполнить ячейки и выполнить задания, которые мы оставили для вас в конце.
Поскольку мы хотим показать, как работать с данными, предлагаем открыть [`notebook-covidspread.ipynb`](notebook-covidspread.ipynb) и прочитать его от начала до конца. Вы также можете выполнить ячейки и выполнить некоторые испытания, которые мы оставили для вас в конце.
> Если вы не знаете, как запускать код в Jupyter Notebook, ознакомьтесь с [этой статьей](https://soshnikov.com/education/how-to-execute-notebooks-from-github/).
> Если вы не знаете, как запускать код в Jupyter Notebook, взгляните на [эту статью](https://soshnikov.com/education/how-to-execute-notebooks-from-github/).
## Работа с неструктурированными данными
Хотя данные очень часто имеют табличную форму, в некоторых случаях нам приходится работать с менее структурированными данными, например, текстами или изображениями. В этом случае, чтобы применить методы обработки данных, которые мы рассмотрели выше, нам нужно каким-то образом**извлечь** структурированные данные. Вот несколько примеров:
Хотя данные очень часто бывают в табличной форме, в некоторых случаях нам нужно работать с менее структурированными данными, например, текстом или изображениями. В таких случаях, чтобы применить рассмотренные выше методы обработки данных, нам нужно как-то**извлечь** структурированные данные. Вот несколько примеров:
* Извлечение ключевых слов из текста и анализ частоты их появления
* Использование нейронных сетей для извлечения информации об объектах на изображении
* Получение информации об эмоциях людей на видеопотоке с камеры
* Использование нейронных сетей для получения информации об объектах на изображении
* Получение информации об эмоциях людей с видеопотока
## 🚀 Задание 2: Анализ научных статей о COVID
## 🚀 Задание 2: Анализ COVID-статей
В этом задании мы продолжим тему пандемии COVID и сосредоточимся на обработке научных статей по этой теме. Существует [набор данных CORD-19](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge) с более чем 7000 (на момент написания) статей о COVID, доступных с метаданными и аннотациями (адля примерно половины из них также предоставлен полный текст).
В этом задании мы продолжим тему пандемии COVID и сосредоточимся на обработке научных статей по теме. Существует набор данных [CORD-19 Dataset](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge) с более чем 7000 (на момент написания) статей о COVID, доступных с метаданными и аннотациями (а примерно для половины из них также предоставлены полные тексты).
Полный пример анализа этого набора данных с использованием когнитивного сервиса [Text Analytics for Health](https://docs.microsoft.com/azure/cognitive-services/text-analytics/how-tos/text-analytics-for-health/?WT.mc_id=academic-77958-bethanycheum) описан [в этом блоге](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/). Мы обсудим упрощённую версию этого анализа.
Полный пример анализа этого набора данных с использованием когнитивной службы [Text Analytics for Health](https://docs.microsoft.com/azure/cognitive-services/text-analytics/how-tos/text-analytics-for-health/?WT.mc_id=academic-77958-bethanycheum) описан [в этом блоге](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/). Мы обсудим упрощённую версию этого анализа.
> **NOTE**: Мы не предоставляем копию набора данных в этом репозитории. Вам может понадобиться сначала скачать файл [`metadata.csv`](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge?select=metadata.csv) из [этого набора данных на Kaggle](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge). Для этого может потребоваться регистрация на Kaggle. Вы также можете скачать набор данных без регистрации [отсюда](https://ai2-semanticscholar-cord-19.s3-us-west-2.amazonaws.com/historical_releases.html), но он будет включать все полные тексты в дополнение к файлу метаданных.
> **ПРИМЕЧАНИЕ**: Мы не предоставляем копию набора данных в составе этого репозитория. Сначала вам может понадобиться скачать файл [`metadata.csv`](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge?select=metadata.csv) из [этого набора на Kaggle](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge). Может потребоваться регистрация на Kaggle. Набор данных можно скачать и без регистрации [здесь](https://ai2-semanticscholar-cord-19.s3-us-west-2.amazonaws.com/historical_releases.html), но он будет включать все полные тексты в дополнение к файлу метаданных.
Откройте [`notebook-papers.ipynb`](notebook-papers.ipynb) и прочитайте его от начала до конца. Вы также можете выполнить ячейки и выполнить задания, которые мы оставили для вас в конце.
Откройте [`notebook-papers.ipynb`](notebook-papers.ipynb) и прочитайте его от начала до конца. Вы также можете выполнить ячейки и выполнить некоторые испытания, которые мы оставили для вас в конце.

## Обработка данных изображений
## Обработка изображений
В последнее время были разработаны очень мощные модели ИИ, которые позволяют понимать изображения. Существует множество задач, которые можно решить с помощью предобученных нейронных сетей или облачных сервисов. Вот несколько примеров:
В последнее время были разработаны очень мощные модели ИИ, которые позволяют нам понимать изображения. Существует множество задач, которые можно решать с помощью предварительно обученных нейронных сетей или облачных сервисов. Вот несколько примеров:
* **Классификация изображений**, которая помогает категоризировать изображение в одну из предопределённых категорий. Вы можете легко обучить свои собственные классификаторы изображений, используя такие сервисы, как [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum)
* **Обнаружение объектов** для нахождения различных объектов на изображении. Такие сервисы, как [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum), могут обнаруживать множество распространённых объектов, а вы можете обучить модель [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum) для обнаружения специфических объектов.
* **Обнаружение лиц**, включая определение возраста, пола и эмоций. Это можно сделать с помощью [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum).
* **Классификация изображений**, которая помогает отнести изображение к одному из заранее определённых классов. Вы можете легко обучить свои собственные классификаторы изображенийс помощью таких сервисов, как [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum)
* **Обнаружение объектов** для выявления разных объектов на изображении. Сервисы, такие как [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum), могут распознавать множество распространённых объектов, а вы можете обучить модель [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum) для обнаружения специфических интересующих вас объектов.
* **Обнаружение лиц**, включая определение возраста, пола и эмоций. Это можно сделать через [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum).
Все эти облачные сервисы можно вызывать с помощью [Python SDKs](https://docs.microsoft.com/samples/azure-samples/cognitive-services-python-sdk-samples/cognitive-services-python-sdk-samples/?WT.mc_id=academic-77958-bethanycheum), и их легко интегрировать в ваш процесс исследования данных.
Все эти облачные сервисы можно вызывать с помощью [Python SDK](https://docs.microsoft.com/samples/azure-samples/cognitive-services-python-sdk-samples/cognitive-services-python-sdk-samples/?WT.mc_id=academic-77958-bethanycheum), что позволяет легко интегрировать их в ваш рабочий процесс исследования данных.
Вот несколько примеров исследования данных из источников изображений:
* В блоге [Как изучать Data Science без программирования](https://soshnikov.com/azure/how-to-learn-data-science-without-coding/) мы исследуем фотографии из Instagram, пытаясь понять, что заставляет людей ставить больше лайков фотографии. Сначала мы извлекаем как можно больше информации из изображений, используя [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum), а затем используем [Azure Machine Learning AutoML](https://docs.microsoft.com/azure/machine-learning/concept-automated-ml/?WT.mc_id=academic-77958-bethanycheum) для построения интерпретируемой модели.
* В [Мастерской по изучению лиц](https://github.com/CloudAdvocacy/FaceStudies) мы используем [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum) для извлечения эмоций людей на фотографиях с мероприятий, чтобы попытаться понять, что делает людей счастливыми.
* В блоге [Как учиться Data Science без программирования](https://soshnikov.com/azure/how-to-learn-data-science-without-coding/) мы исследуем фотографии из Instagram, пытаясь понять, что заставляет людей ставить больше лайков. Сначала мы извлекаем как можно больше информации из изображенийс помощью [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum), а затем используем [Azure Machine Learning AutoML](https://docs.microsoft.com/azure/machine-learning/concept-automated-ml/?WT.mc_id=academic-77958-bethanycheum) для построения интерпретируемой модели.
* В [Facial Studies Workshop](https://github.com/CloudAdvocacy/FaceStudies) мы используем [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum) для выявления эмоций у людей на фотографиях с мероприятий, чтобы попытаться понять, что делает людей счастливыми.
## Заключение
Независимо от того, имеете ли вы уже структурированные или неструктурированные данные, с помощью Python вы можете выполнить все шаги, связанные с обработкой и пониманием данных. Это, вероятно, самый гибкий способ обработки данных, и именно поэтому большинство датасаентистов используют Python как основной инструмент. Изучение Python в глубину — это, вероятно, хорошая идея, если вы серьёзно относитесь к своему пути в Data Science!
Независимо от того, есть ли у вас уже структурированные или неструктурированные данные, используя Python, вы можете выполнить все этапы обработки и анализа данных. Это, пожалуй, самый гибкий способ обработки данных, и именно поэтому большинство специалистов по данным используют Python в качестве основного инструмента. Изучение Python в глубину — отличная идея, если вы серьезно настроены на развитие в области Data Science!
## [Тест после лекции](https://ff-quizzes.netlify.app/en/ds/quiz/13)
## [Викторина после лекции](https://ff-quizzes.netlify.app/en/ds/quiz/13)
## Обзор и самостоятельное изучение
**Книги**
* [Wes McKinney. Python for Data Analysis: Data Wrangling with Pandas, NumPy, and IPython](https://www.amazon.com/gp/product/1491957662)
* [Wes McKinney. Python для анализа данных: манипулирование данными с Pandas, NumPy и IPython](https://www.amazon.com/gp/product/1491957662)
**Онлайн-ресурсы**
* Официальный [10 минут с Pandas](https://pandas.pydata.org/pandas-docs/stable/user_guide/10min.html) учебник
* Официальное руководство [10 минут с Pandas](https://pandas.pydata.org/pandas-docs/stable/user_guide/10min.html)
* [Документация по визуализации в Pandas](https://pandas.pydata.org/pandas-docs/stable/user_guide/visualization.html)
**Изучение Python**
* [Изучайте Python весело с Turtle Graphics и фракталами](https://github.com/shwars/pycourse)
* [Сделайте первые шаги с Python](https://docs.microsoft.com/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) на платформе [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
* [Учимся Python весело с помощью черепашьей графики и фракталов](https://github.com/shwars/pycourse)
* [Сделайте первые шаги с Python](https://docs.microsoft.com/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) Обучающий путь на [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
## Задание
[Проведите более детальное исследование данных для заданий выше](assignment.md)
[Выполните более детальное исследование данных для указанных выше заданий](assignment.md)
## Благодарности
Этот урок был создан с ♥️ [Дмитрием Сошниковым](http://soshnikov.com)
Этот урок был подготовлен с ♥️ Дмитрием Сошниковым (http://soshnikov.com)
---
**Отказ от ответственности**:
Этот документ был переведен с помощью сервиса автоматического перевода [Co-op Translator](https://github.com/Azure/co-op-translator). Несмотря на наши усилия обеспечить точность, автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его родном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется профессиональный перевод человеком. Мы не несем ответственности за любые недоразумения или неправильные интерпретации, возникшие в результате использования данного перевода.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Отказ от ответственности**:
Этот документ был переведен с использованием сервиса машинного перевода [Co-op Translator](https://github.com/Azure/co-op-translator). Несмотря на наши усилия по обеспечению точности, имейте в виду, что автоматический перевод может содержать ошибки или неточности. Оригинальный документ на его исходном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется обратиться к профессиональному человеческому переводу. Мы не несем ответственности за любые недоразумения или неправильные толкования, возникшие в результате использования этого перевода.