هل تريد التعرف على ثلاث طرق لاستخراج البيانات لمشروع ML القادم؟ ثم اقرأ ترجمة مقالة Rebecca Vickery المنشورة على مدونة Towards Data Science على Medium! وقالت انها ستكون مثيرة للاهتمام للمبتدئين.
الحصول على بيانات جيدة هو الخطوة الأولى والأكثر أهمية في أي مشروع تعليمي آلي. غالبًا ما يستخدم متخصصو علوم البيانات طرقًا مختلفة للحصول على مجموعات البيانات. يمكنهم استخدام البيانات المتاحة للجمهور ، وكذلك البيانات المتاحة عبر API أو الحصول عليها من قواعد بيانات مختلفة ، ولكن في معظم الأحيان تجمع هذه الأساليب.
الغرض من هذه المقالة هو تقديم نظرة عامة مختصرة عن ثلاث طرق مختلفة لاسترداد البيانات باستخدام Python. سأخبرك بكيفية القيام بذلك باستخدام Jupyter Notebook. في مقالي السابق
، كتبت عن تطبيق بعض الأوامر التي تعمل في المحطة.
SQL
إذا كنت بحاجة إلى الحصول على بيانات من قاعدة بيانات علائقية ، فمن المرجح أنك ستعمل مع لغة SQL. تتيح لك مكتبة SQLAlchemy ربط رمز الكمبيوتر المحمول الخاص بك بأنواع قواعد البيانات الأكثر شيوعًا.
ستجد هنا معلومات حول قواعد البيانات المدعومة وكيفية الارتباط بكل نوع.
يمكنك استخدام مكتبة SQLAlchemy لاستعراض الجداول وبيانات الاستعلام ، أو كتابة استعلامات أولية. لربط قاعدة البيانات ، ستحتاج إلى عنوان URL مع بيانات الاعتماد الخاصة بك. بعد ذلك ، تحتاج إلى تهيئة طريقة
create_engine
لإنشاء الاتصال.
from sqlalchemy import create_engine engine = create_engine('dialect+driver://username:password@host:port/database')
الآن يمكنك كتابة استعلامات قاعدة البيانات والحصول على النتائج.
connection = engine.connect() result = connection.execute("select * from my_table")
Skraping
يستخدم كشط الويب لتنزيل البيانات من المواقع واستخراج المعلومات اللازمة من صفحاتهم. هناك العديد من مكتبات Python المتاحة لهذا ، ولكن أبسطها هو
حساء جميل .
يمكنك تثبيت الحزمة من خلال نقطة.
pip install BeautifulSoup4
لنلقِ نظرة بسيطة على كيفية استخدامها. سوف نستخدم Beautiful Soup ومكتبة
urllib لكشط أسماء الفنادق والأسعار من
TripAdvisor .
أولاً ، نستورد جميع المكتبات التي سنعمل معها.
from bs4 import BeautifulSoup import urllib.request
الآن تحميل محتوى الصفحة التي سنقوم الخردة. أريد أن أجمع بيانات عن أسعار الفنادق في جزيرة كريت اليونانية وأخذ عنوان URL الذي يحتوي على قائمة بالفنادق في هذا المكان.

تحدد الشفرة أدناه عنوان URL كمتغير وتستخدم مكتبة urllib لفتح الصفحة ، ومكتبة حساء جميلة لقراءته وإرجاع النتائج بتنسيق بسيط. يظهر جزء من بيانات المخرجات أسفل الكود.
URL = 'https://www.tripadvisor.co.uk/Hotels-g189413-Crete-Hotels.html' page = urllib.request.urlopen(URL) soup = BeautifulSoup(page, 'html.parser') print(soup.prettify())

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

بعد النقر فوق "
inspect
سيظهر رمز العنصر ، وسيتم إبراز القسم الذي يحمل اسم الفندق.

نرى أن اسم الفندق هو النص الوحيد في الفصل الذي يحمل اسم
listing_title
. بعد انتهاء الفصل الدراسي ، يأتي الرمز واسم هذه السمة في دالة
find_all
، بالإضافة إلى علامة
div
.
content_name = soup.find_all('div', attrs={'class': 'listing_title'}) print(content_name)
يتم إرجاع كل قسم من التعليمات البرمجية مع اسم الفندق كقائمة.

لاستخراج أسماء الفنادق من الكود ، نستخدم دالة
getText
Beautiful Soup.
content_name_list = [] for div in content_name: content_name_list.append(div.getText().split('\n')[0]) print(content_name_list)
يتم إرجاع أسماء الفنادق كقائمة.

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

كما ترون ، يمكننا العمل مع رمز مشابه جدًا للرمز المستخدم للفنادق.
content_price = soup.find_all('div', attrs={'class': 'price-wrap'}) print(content_price)
في حالة السعر ، هناك صعوبة تذكر. يمكنك رؤيته عن طريق تشغيل الكود التالي:
content_price_list = [] for div in content_price: content_price_list.append(div.getText().split('\n')[0]) print(content_price_list)
والنتيجة مبينة أدناه. في حالة الإشارة إلى تخفيض السعر في قائمة الفنادق ، بالإضافة إلى بعض النصوص ، يتم إرجاع كل من السعر الأولي والسعر النهائي. لإصلاح هذه المشكلة ، نعيد ببساطة السعر الحالي لهذا اليوم.

يمكننا استخدام المنطق البسيط للحصول على أحدث سعر مبين في النص.
content_price_list = [] for a in content_price: a_split = a.getText().split('\n')[0] if len(a_split) > 5: content_price_list.append(a_split[-4:]) else: content_price_list.append(a_split) print(content_price_list)
هذا سوف يعطينا النتيجة التالية:

API
API - واجهة برمجة التطبيقات (من واجهة برمجة تطبيقات اللغة الإنجليزية). من منظور استخراج البيانات ، هو نظام قائم على الويب يوفر نقطة نهاية للبيانات يمكنك الاتصال بها من خلال البرمجة. عادة ما يتم إرجاع البيانات بتنسيق JSON أو XML.
من المحتمل أن تكون هذه الطريقة مفيدة للتعلم الآلي. سأقدم مثالًا بسيطًا لاسترجاع بيانات الطقس من واجهة تطبيق
Dark Sky API العامة. للاتصال به ، تحتاج إلى التسجيل ، وسيكون لديك 1000 مكالمة مجانية يوميًا. هذا ينبغي أن يكون كافيا للاختبار.
للوصول إلى البيانات من Dark Sky ،
requests
مكتبة
requests
. بادئ ذي بدء ، أحتاج إلى الحصول على عنوان URL الصحيح للطلب. بالإضافة إلى التوقعات ، يوفر Dark Sky بيانات الطقس التاريخية. في هذا المثال ، سوف آخذها والحصول على عنوان URL الصحيح من
الوثائق .
هيكل عنوان URL هذا هو:
https://api.darksky.net/forecast/[key]/[latitude],[longitude],[time]
سوف نستخدم مكتبة
requests
للحصول عليها
ينتج عن خطوط الطول والعرض المحددة ، وكذلك التاريخ والوقت. تخيل أنه بعد استخراج بيانات الأسعار اليومية للفنادق في جزيرة كريت ، قررنا معرفة ما إذا كانت سياسة الأسعار مرتبطة بالطقس.
على سبيل المثال ، دعنا نأخذ إحداثيات أحد الفنادق في القائمة - Mitsis Laguna Resort & Spa.

أولاً ، قم بإنشاء عنوان URL بالإحداثيات الصحيحة ، وكذلك الوقت والتاريخ المطلوبين. باستخدام مكتبة
requests
، يمكننا الوصول إلى البيانات بتنسيق JSON.
import requests request_url = 'https://api.darksky.net/forecast/fd82a22de40c6dca7d1ae392ad83eeb3/35.3378,-25.3741,2019-07-01T12:00:00' result = requests.get(request_url).json() result
لتسهيل قراءة النتائج وتحليلها ، يمكننا تحويل البيانات إلى إطار بيانات.
import pandas as pd df = pd.DataFrame.from_dict(json_normalize(result), orient='columns') df.head()

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