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".
import pandas as pd
from bs4 import BeautifulSoup
import datetime
import psycopg2
from sqlalchemy import create_engine
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
Der erste Datenrahmen sieht so aus.
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
Ü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
)
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.
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()
--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
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)
connection_config = {
'user': '*****',
'password': '*****',
'host': '*****',
'port': '****', #OK ohne
'database': '*****'
}
engine = create_engine('postgresql://{user}:{password}@{host}:{port}/{database}'.format(**connection_config))
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