[PYTHON] Scraping, Vorverarbeitung und Schreiben in postgreSQL

Ich wollte immer mit Baseballdaten analysieren, also habe ich immer "die erforderlichen Teile der Website kopiert, in Excel eingefügt und als CSV gespeichert". Ich dachte jedoch, es sei ein Ärger, also versuchte ich, "zu kratzen, vorzuverarbeiten und in postgreSQL zu schreiben".

Installation der erforderlichen Bibliotheken

Schaben etc.


import pandas as pd
from bs4 import BeautifulSoup
import datetime

postgreSQL schreiben

import psycopg2
from sqlalchemy import create_engine

Daten bekommen

Dieses Mal erhalten wir die Leistungsdaten des Riesenhitters mit "pandas.read_html". Es scheint, dass die Tabelle (Tabellen-Tag) der Seite der Reihe nach abgerufen wird und die Liste der Datenrahmen zurückgegeben wird.

raw_data = pd.read_html("https://baseball-freak.com/audience/giants.html", flavor="bs4")

Die Liste wird zurückgegeben, sodass sie so aussieht スクレイピング結果.JPG

Der erste Datenrahmen sieht so aus. 1つめのdataframe.JPG

Zweitens sollte es die Daten enthalten, die Sie diesmal möchten, also überprüfen Sie es

data_set = raw_data[1] #Es gibt mehrere Tabellen auf der Seite, und dieses Mal möchte ich die zweite Tabelle[1]Angeben
data_set

dataset.JPG

Überprüfen Sie den Inhalt des Datenrahmens

Überprüfen Sie den Inhalt der erfassten Daten.

pd.concat(
    [data_set.count().rename('Nummer'),
    data_set.dtypes.rename('Datentyp'),
    data_set.nunique().rename('Einzigartige Nummer'),
    data_set.isnull().sum().rename('Anzahl der Nullen'),
    (data_set.isnull().sum() * 100 / data_set.shape[0]).rename('Fehlerrate(%)').round(2)],
    axis=1
)

データ調査.JPG

Sie können sehen, dass alles ein Objekt ist. Auch der Startkrug, die Anzahl der Zuschauer und die Spielzeit scheinen null zu enthalten.

In diesem Fall ermöglichen wir die Analyse von Datum, Punktzahl und Anzahl der Zuschauer nach Typkonvertierung.

Datumsverarbeitung


data_set["Mond"] = data_set["Datum"].replace("Mond.*$", "", regex=True) # regex:Reguläre Ausdrücke
data_set["Tag"] = data_set["Tag付"].replace("Tag.*$", "", regex=True).replace("^.*Mond", "", regex=True)

for i in range(len(data_set['Mond'])):
    data_set['Datum'] = "2019/" +  data_set["Mond"] + "/" + data_set["Tag"]
    
data_set['Datum'] = pd.to_datetime(data_set['Datum'])
data_set['Tag (Nummer)'] = data_set['Datum'].dt.dayofweek
data_set.head()

日付.JPG

Zielgruppenverarbeitung

--Ersetzen Sie "," und "Personen"

data_set["Anzahl der Zuschauer"] = data_set['Anzahl der Zuschauer'].replace(',', '', regex=True).replace('Mann', '', regex=True).fillna('0').astype(int)
data_set

観客数.JPG

Partiturverarbeitung

data_set_score = pd.concat([data_set, data_set['Ergebnis'].str.split(' - ', expand=True)], axis=1)
data_set_score_rename =data_set_score.rename(columns={0:'Ergebnis', 1:'Zugegeben'})
data_set_score_rename['Ergebnis']=data_set_rename['Ergebnis'].replace('Stornieren', 0).astype(int)
data_set_score_rename['Zugegeben']=data_set_rename['Zugegeben'].fillna(0).astype(int)

Stellen Sie eine Verbindung zu postgreSQL her


connection_config = {
    'user': '*****',
    'password': '*****',
    'host': '*****',
    'port': '****', #OK ohne
    'database': '*****'
}

engine = create_engine('postgresql://{user}:{password}@{host}:{port}/{database}'.format(**connection_config))

In postgreSQL speichern

data_set_score_rename.to_sql('giants',schema='baseball_2019', con=engine, if_exists='replace', index=False)

Persönlich bin ich hier gestolpert. Ich bin darauf gestoßen, dass ich nicht wusste, wie ich den Schemanamen angeben soll. Ich habe das offizielle Dokument gelesen und es sofort gelöst, aber es dauerte ungefähr eine Stunde, um es zu lösen. Wenn Sie nicht verstehen, wissen Sie es wirklich nicht.

Das ist es! Wenn Sie Fehler in der Beschreibung finden, lassen Sie es mich bitte wissen!

Recommended Posts

Scraping, Vorverarbeitung und Schreiben in postgreSQL
Scraping mit lxml und Speichern in MySQL
Kratzen Sie das Essen mit Python und geben Sie es an CSV aus
[Kaggle] Vom Lesen der Daten bis zur Vorverarbeitung und Codierung
Schaben 2 Wie man kratzt
Erste Schritte mit Web Scraping
Einführung in das Schreiben von Cython [Notizen]
Scraping Go To Travel Unterkunft
Stellen Sie mit GO eine Verbindung zu Postgresql her
Lesen und Schreiben von CSV-Dateien
Wichtige Ergänzungen zu den Pandas 1.1.0 und 1.0.0
WEB-Scraping-Technologie und Bedenken
Reagieren und Kolben zu GCP
Ich möchte japanische Bestandsdaten erfassen und auflisten, ohne sie zu kratzen
Holz kratzen und essen - ich möchte ein gutes Restaurant finden! ~ (Arbeit)
[EC2] Einführung in das Schaben mit Selen (Textextraktion und Screenshot)