Möchten Sie drei Data Mining-Methoden für Ihr nächstes ML-Projekt kennenlernen? Dann lesen Sie die Übersetzung des Rebecca Vickery-Artikels, der im Towards Data Science-Blog auf Medium veröffentlicht wurde! Sie wird für Anfänger interessant sein.
Das Abrufen von Qualitätsdaten ist der erste und wichtigste Schritt in jedem maschinellen Lernprojekt. Data Science-Spezialisten verwenden häufig verschiedene Methoden, um Datensätze zu erhalten. Sie können öffentlich verfügbare Daten sowie Daten verwenden, die über die API verfügbar sind oder aus verschiedenen Datenbanken stammen, kombinieren diese Methoden jedoch meistens.
Der Zweck dieses Artikels besteht darin, einen kurzen Überblick über drei verschiedene Methoden zum Abrufen von Daten mit Python zu geben. Ich werde Ihnen sagen, wie das mit dem Jupyter Notebook geht. In meinem vorherigen
Artikel habe ich über die Anwendung einiger Befehle geschrieben, die im Terminal ausgeführt werden.
SQL
Wenn Sie Daten aus einer relationalen Datenbank abrufen müssen, arbeiten Sie höchstwahrscheinlich mit der SQL-Sprache. Mit der SQLAlchemy-Bibliothek können Sie Ihren Laptop-Code den gängigsten Datenbanktypen zuordnen.
Hier finden Sie Informationen darüber, welche Datenbanken unterstützt werden und wie Sie an jeden Typ binden können.
Mit der SQLAlchemy-Bibliothek können Sie Tabellen durchsuchen und Daten abfragen oder Rohabfragen schreiben. Zum Binden an die Datenbank benötigen Sie eine URL mit Ihren Anmeldeinformationen. Als Nächstes müssen Sie die Methode
create_engine
initialisieren, um die Verbindung herzustellen.
from sqlalchemy import create_engine engine = create_engine('dialect+driver://username:password@host:port/database')
Jetzt können Sie Datenbankabfragen schreiben und Ergebnisse erhalten.
connection = engine.connect() result = connection.execute("select * from my_table")
Schaben
Web Scraping wird verwendet, um Daten von Websites herunterzuladen und die erforderlichen Informationen von deren Seiten zu extrahieren. Dafür stehen viele Python-Bibliotheken zur Verfügung, aber die einfachste ist
Beautiful Soup .
Sie können das Paket über pip installieren.
pip install BeautifulSoup4
Schauen wir uns ein einfaches Beispiel für die Verwendung an. Wir werden Beautiful Soup und die
Urllib- Bibliothek verwenden, um Hotelnamen und Preise von
TripAdvisor zu kratzen.
Zuerst importieren wir alle Bibliotheken, mit denen wir arbeiten werden.
from bs4 import BeautifulSoup import urllib.request
Laden Sie nun den Inhalt der Seite, die wir verschrotten werden. Ich möchte Daten zu Preisen für Hotels auf der griechischen Insel Kreta sammeln und die URL-Adresse mit einer Liste der Hotels an diesem Ort verwenden.

Der folgende Code definiert die URL als Variable und verwendet die urllib-Bibliothek zum Öffnen der Seite und die Beautiful Soup-Bibliothek zum Lesen und Zurückgeben der Ergebnisse in einem einfachen Format. Ein Teil der Ausgabedaten wird unter dem Code angezeigt.
URL = 'https://www.tripadvisor.co.uk/Hotels-g189413-Crete-Hotels.html' page = urllib.request.urlopen(URL) soup = BeautifulSoup(page, 'html.parser') print(soup.prettify())

Lassen Sie uns nun eine Liste mit den Namen der Hotels auf der Seite erhalten. Wir werden die Funktion
find_all
, mit der Teile des für uns interessanten Dokuments extrahiert werden. Sie können es mit der Funktion
find_all
unterschiedlich
find_all
, um eine einzelne Zeile, einen regulären Ausdruck oder eine Liste zu übergeben. Sie können auch eines der Tag-Attribute herausfiltern - genau diese Methode werden wir anwenden. Wenn Sie mit HTML-Tags und -Attributen noch nicht vertraut sind, finden Sie in diesem
Artikel eine kurze Übersicht.
Um zu verstehen, wie der Zugriff auf die Daten im Tag am besten bereitgestellt werden kann, müssen Sie den Code für dieses Element auf der Seite überprüfen. Wir finden den Code für den Hotelnamen, indem wir mit der rechten Maustaste auf den Namen in der Liste klicken, wie in der folgenden Abbildung gezeigt.

Nach dem Klicken auf
inspect
Elementcode angezeigt und der Abschnitt mit dem Namen des Hotels wird hervorgehoben.

Wir sehen, dass der Name des Hotels der einzige Text in der Klasse mit dem Namen
listing_title
. Nach der Klasse kommen der Code und der Name dieses Attributs zur Funktion
find_all
sowie zum Tag
div
.
content_name = soup.find_all('div', attrs={'class': 'listing_title'}) print(content_name)
Jeder Abschnitt des Codes mit dem Namen des Hotels wird als Liste zurückgegeben.

Um Hotelnamen aus dem Code zu extrahieren, verwenden wir die Funktion
getText
der Beautiful Soup-Bibliothek.
content_name_list = [] for div in content_name: content_name_list.append(div.getText().split('\n')[0]) print(content_name_list)
Hotelnamen werden als Liste zurückgegeben.

Ebenso erhalten wir Preisdaten. Die Codestruktur für den Preis ist unten gezeigt.

Wie Sie sehen, können wir mit einem Code arbeiten, der dem für Hotels verwendeten sehr ähnlich ist.
content_price = soup.find_all('div', attrs={'class': 'price-wrap'}) print(content_price)
Im Falle des Preises gibt es wenig Schwierigkeiten. Sie können es sehen, indem Sie den folgenden Code ausführen:
content_price_list = [] for div in content_price: content_price_list.append(div.getText().split('\n')[0]) print(content_price_list)
Das Ergebnis ist unten dargestellt. Wenn in der Liste der Hotels zusätzlich zu einem Text eine Preissenkung angegeben ist, werden sowohl der Anfangspreis als auch der Endpreis zurückgegeben. Um dieses Problem zu beheben, geben wir einfach den aktuellen Preis für heute zurück.

Wir können eine einfache Logik verwenden, um den neuesten im Text angegebenen Preis zu erhalten.
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)
Dies ergibt folgendes Ergebnis:

API
API - Anwendungsprogrammierschnittstelle (von der englischen Anwendungsprogrammierschnittstelle). Aus Sicht des Data Mining handelt es sich um ein webbasiertes System, das einen Datenendpunkt bereitstellt, mit dem Sie über die Programmierung Kontakt aufnehmen können. Normalerweise werden Daten im JSON- oder XML-Format zurückgegeben.
Diese Methode wird sich wahrscheinlich beim maschinellen Lernen als nützlich erweisen. Ich werde ein einfaches Beispiel für das Abrufen von Wetterdaten von der öffentlichen
Dark Sky- API geben. Um eine Verbindung herzustellen, müssen Sie sich registrieren und haben 1000 kostenlose Anrufe pro Tag. Dies sollte zum Testen ausreichen.
Um auf Daten von Dark Sky zuzugreifen, verwende ich die
requests
. Zunächst muss ich die richtige URL für die Anfrage erhalten. Zusätzlich zur Vorhersage liefert Dark Sky historische Wetterdaten. In diesem Beispiel nehme ich sie und erhalte die richtige URL aus der
Dokumentation .
Die Struktur dieser URL lautet:
https://api.darksky.net/forecast/[key]/[latitude],[longitude],[time]
Wir werden die
requests
verwenden, um zu erhalten
Ergebnisse für einen bestimmten Breiten- und Längengrad sowie Datum und Uhrzeit. Stellen Sie sich vor, wir haben nach dem Extrahieren der täglichen Preisdaten für Hotels auf Kreta beschlossen, herauszufinden, ob die Preispolitik mit dem Wetter zusammenhängt.
Nehmen wir zum Beispiel die Koordinaten eines der Hotels auf der Liste - Mitsis Laguna Resort & Spa.

Erstellen Sie zunächst eine URL mit den richtigen Koordinaten sowie der gewünschten Uhrzeit und dem gewünschten Datum. Über die
requests
wir Zugriff auf Daten im JSON-Format.
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
Um das Lesen und Analysieren der Ergebnisse zu vereinfachen, können wir die Daten in einen Datenrahmen konvertieren.
import pandas as pd df = pd.DataFrame.from_dict(json_normalize(result), orient='columns') df.head()

Es gibt viele weitere Optionen zur Automatisierung der Datenextraktion mit diesen Methoden. Beim Web-Scraping können Sie verschiedene Funktionen schreiben, um den Prozess zu automatisieren und das Extrahieren von Daten für mehr Tage und / oder Orte zu vereinfachen. In diesem Artikel wollte ich genügend Codebeispiele überprüfen und bereitstellen. Die folgenden Materialien werden detaillierter beschrieben: Ich werde Ihnen erklären, wie Sie große Datensätze erstellen und mit den oben beschriebenen Methoden analysieren.
Danke für die Aufmerksamkeit!