[Python] Schließen Sie das Vorverarbeitungs-Memo so ab, wie es ist

Dies ist ein Memo, das ich zuvor geschrieben und ausprobiert habe.

Ich beziehe mich auf die folgenden Bücher. Vollständige Vorverarbeitung [SQL / R / Python-Übungstechnik für die Datenanalyse]

Zu verwendende Daten

https://github.com/ghmagazine/awesomebook

Extraktion

#Verwenden Sie die Abfragefunktion
pd.query('"2018-01-01" <= checkout_data <= "2018-01-20"')

Probenahme

#df bis 50%Zum Probieren
df.sample(frac=0.5)

einstellen

Probenahme basierend auf der eingestellten ID


pd.Series(df['customer_id'].unique()).sample(frac=0.5)

Berechnung der Anzahl der Daten und der Anzahl der Typen


df.groupby('hotel_id').agg({'reserve_id': 'count', 'customer_id': 'nunique'})

Berechnung des Gesamtwertes


df.groupby(['hotel_id', 'people_num'])['total_price'].sum().reset_index()

Berechnung des häufigsten Wertes


#Der Modus ist die häufigste Methode
df['total_price'].round(-3).mode()

Über rund

Wenn eine positive Ganzzahl angegeben wird, werden die Ziffern nach dem Dezimalpunkt angegeben, und wenn eine negative Ganzzahl angegeben wird, wird die Ziffer (Position) der Ganzzahl angegeben. -1 Runden auf die Zehnerstelle, -2 Runden auf die 100er Stelle. 0 wird auf eine Ganzzahl (1-Stelle) gerundet, aber anders als in dem Fall, in dem es weggelassen wird, wird ein Float-Typ zurückgegeben.

Berechnung des Rankings


df['reserve_datetime'] = pd.to_datetime(df['reserve_datetime'], format='%Y-%m-%d %H:%M:%S')
df['log_no'] = df.groupby('customer_id')['reserve_datetime'].rank(ascending=True, method='first')
df

Beitreten

Master Table Join


pd.merge(df.query('people_num == 1'), df_hotel.query('is_business'), on='hotel_id', how='inner')

Gesamtwert der letzten n Fälle


df['price_sum'] = pd.Series(
 df
    .groupby('customer_id')
    .apply(lambda x: x.sort_values(by='reserve_datetime', ascending=True))
    .loc[:, 'total_price']
    .rolling(center=False, window=3, min_periods=3).sum()
    .reset_index(drop=True)
)

Teilt

Was ist Gegenüberstellung?

  1. Datenaufteilung
  2. Lernen mit einigen Daten
  3. Überprüfung anhand anderer Daten
  4. Wiederholen Sie die Muster 2 und 3 https://mathwords.net/kousakakunin

k Überprüfung der geteilten Kreuzung

  1. Teilen Sie die Daten in k Teile
  2. Lernen Sie mit k-1 und überprüfen Sie dies mit dem verbleibenden
  3. Wiederholen Sie 1 und 2 https://mathwords.net/kousakakunin

Holdout-Überprüfung

Wenn Sie nur eine Kreuzungsüberprüfung durchführen, nähern Sie sich einem Zustand des Überlernens des Problems der Kreuzungsüberprüfung. Die Lösung hierfür ist die Holdout-Überprüfung. Bereiten Sie die Daten getrennt von der Kreuzungsüberprüfung vor und verwenden Sie die Daten, die bei der endgültigen Überprüfung der Genauigkeit erstellt wurden.

Generieren

Die Datengenerierung wird verwendet, um unausgeglichene Daten anzupassen Es gibt drei Muster, und das am häufigsten verwendete ist eine Kombination aus Über- und Unterabtastung.

Erhöhen Sie die Anzahl der Daten, damit sich das Oversampling nicht nachteilig auswirkt Reduzieren Sie die Anzahl der Daten, damit die Unterabtastung keine nachteiligen Auswirkungen hat.

Überabtastung

Erhöhen Sie die Anzahl der Daten

Unterabtastung

Reduzieren Sie die Anzahl der Daten


#Überabtastung
from imblearn.over_sampling import SMOTE

sm = SMOTE(ratio='auto', k_neighbors=5, random_state=71)
balance_data, balance_target = sm.fit_sample(df[['length', 'thickness']], df['fault_flg'])

Numerischer Typ

In Integer-Typ und Gleitkomma-Typ konvertieren


#In Integer-Typ konvertieren
df['value'].astype('int8')

#In Gleitkommatyp konvertieren
df['values'].astype('float64')

Logistik

Konvertieren Sie den Eingabewert in logarithmisch.


df['total_price_log'] = df['total_price'].apply(lambda x: np.log(x / 1000 + 1))

Kategorisierung numerischer Typen


df = (np.floor(df['age'] / 10) * 10).astype('category')

Normalisierung

Mechanismus zur Verhinderung von Überlernen.


from sklearn.preprocessing import StandardScaler

df['people_num'] = df['people_num'].astype(float)
ss = StandardScaler()
result = ss.fit_transform(df[['people_num', 'total_price']])

df['people_num_normalized'] = [x[0] for x in result]
df['total_price_normalized'] = [x[1] for x in result]

Entfernung von Ausreißern

#Entfernt Werte, die mehr als ein bestimmtes Vielfaches des Standardabweichungswerts sind, vom Durchschnittswert
#Einstellen eines Wertes größer als 3
#Der Wert gemäß der Normalverteilung liegt bei etwa 99 im Bereich des 3-fachen des Standardabweichungswerts vom Mittelwert..73%Da der Wert von abgerechnet ist, beträgt die Eintrittswahrscheinlichkeit 0.27%Betrachten Sie die folgenden Werte als Ausreißer
df[(abs(df['total_price'] - np.mean(df['total_price'])) / np.std(df['total_price']) <= 3)].reset_index()

Dimensionskomprimierung durch Hauptkomponentenanalyse


from sklearn.decomposition import PCA

pca = PCA(n_components=2)
pca_values = pca.fit_transform(df[['length', 'thickness']])

print('Kumulativer Beitragssatz: {0}'.format(sum(pca.explained_variance_ratio_)))
print('Beitragssatz jeder Dimension: {0}'.format(pca.explained_variance_ratio_))
print('Beitragssatz jeder Dimension: {}'.format(pca.explained_variance_ratio_))

pca_newvalues = pca.transform(df[['length', 'thickness']])

PCA-Informationsverlust

Hauptkomponentenanalyse Analysieren Sie handschriftliche Zahlen mit PCA. Teil 1 - Qiita Maschinelles Lernen "Dimensionalitätsreduzierung", verstanden in 30 Minuten-Qiita

Numerische Vervollständigung

Ständige Fertigstellung


#Konvertieren Sie None in nan mit der Funktion replace
df.replace('None', np.nan, inplace=True)

#Füllen Sie fehlende Werte für die Dicke mit der Fillna-Funktion
df['thickness'].fillna(1, inplace=True)

Kategorietyp

Konvertierung in Kategorietyp


#In Bool-Typ konvertieren
df[['sex_is_man']] = (df[['sex']] == 'man').astype('bool')

#Konvertieren Sie Sex in Kategorietyp
df['sex_c'] = pd.Categorical(df['sex'], categories=['man', 'woman'])

#Kann mit Astype konvertiert werden
df['sex_c'] = df['sex_c'].astype('category')

df['sex_c'].cat.codes
df['sex_c'].cat.categories

Dummy-Variable


#In Kategorietyp konvertieren
df['sex'] = pd.Categorical(df['sex'])
# get_Dummy variabler Sex mit Dummies Funktion
dummy_vars = pd.get_dummies(df['sex'], drop_first=False)

Aggregation von Kategoriewerten

#In Kategorietyp konvertieren
df['age_rank'] = pd.Categorical(np.floor(df['age']/10)*10)

#Stammdaten`60 oder mehr`Hinzufügen
df['age_rank'].cat.add_categories(['60 oder mehr'], inplace=True)

#isin Funktion
#Überprüfen Sie, ob eine Spalte im Datenrahmen einen Wert enthält
df.loc[df['age_rank'].isin([60.0, 70.0, 80.0]), 'age_rank'] = '60 oder mehr'
df['age_rank'].cat.remove_unused_categories(inplace=True)

Ergänzung durch KNN


from sklearn.neighbors import KNeighborsClassifier

df.replace('None', np.nan, inplace=True)

#Extraktion nicht fehlender Daten
train = df.dropna(subset=['type'], inplace=False)

#Extraktion fehlender Daten
test = df.loc[df.index.difference(train.index), :]

#Knn Modellgeneration
kn = KNeighborsClassifier(n_neighbors=3)

#Modellmodell lernen
kn.fit(train[['length', 'thickness']], train['type'])

#Berechnen Sie den vorhergesagten Wert mit knnn und ergänzen Sie den Typ
test['type'] = kn.predict(test[['length', 'thickness']])

Recommended Posts

[Python] Schließen Sie das Vorverarbeitungs-Memo so ab, wie es ist
Python-Memo
Python-Memo
Python-Memo
Python-Memo
Python-Memo
Python-Memo
Python-Memo mit Perl-Format ist praktisch.
Wenn Sie es so verwenden möchten, wie es ist, wenn Sie es mit Lambda-Memo verwenden
Lesen Sie die CSV-Datei mit Python und konvertieren Sie sie unverändert in DataFrame
Python ist einfach
Python-Anfänger-Memo (9.2-10)
Python Hinweis: Behandeln Sie Listen gemeinsam als Satz
Python-Anfänger-Memo (9.1)
Da Python als "Pichon" gelesen wird, kann es mit "Pichon" ausgeführt werden (es ist eine Geschichte)
[Python] EDA-Memo
Python 3-Operator-Memo
Was ist Python?
Python ist eine Instanz
[Mein Memo] Python
Python3-Metaklassen-Memo
[Python] Grundkarten-Memo
Beurteilen Sie, ob es sich um eine Primzahl handelt [Python]
Python-Anfänger-Memo (2)
[Python] Numpy Memo
Was ist Python?
Da der memory_profiler von Python schwer ist, habe ich ihn gemessen
[Python] Kalender Heatmap [Plotly] Memo
Python-Memo mit Perl - Wörterbuchtyp (Groß- / Kleinschreibung ungültig)
Python Int ist unendlich
Python-Klasse (Python-Lernnotiz ⑦)
Python OpenCV Installation (Memo)
Python-Modul (Python-Lernnotiz ④)
[Python] Was ist Pipeline ...
Python-Testpaket-Memo
Ich habe "Streamlit" ausprobiert, das den Python-Code so wie er ist in eine Webanwendung verwandelt
[Python] Memo über Funktionen
Python-Memo für reguläre Ausdrücke
Memo zur Bisektionssuche (python2.7)
[Mein Memo] Python -v / Python -V
Python3-Memo vom Typ Liste / Wörterbuch
[Memo] Python 3-Listensortierung
[Python] Memo Über Fehler
DynamoDB Script Memo (Python)
Python-Grundnotiz - Teil 2
Python-Rezeptbuch Memo
Schließen Sie die Vorbehandlung der Python-Verbindung ab
Grundlegende Python-Befehlsnotizen
Python OpenCV Tutorial Memo
Python grundlegende Grammatik Memo
TensorFlow API-Memo (Python)
Python nützliche Memo-Links
Python-Dekorator-Operationsnotiz
Python-Grundnotiz - Teil 1
Effektives Python-Memo Punkt 3