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]
https://github.com/ghmagazine/awesomebook
#Verwenden Sie die Abfragefunktion
pd.query('"2018-01-01" <= checkout_data <= "2018-01-20"')
#df bis 50%Zum Probieren
df.sample(frac=0.5)
pd.Series(df['customer_id'].unique()).sample(frac=0.5)
df.groupby('hotel_id').agg({'reserve_id': 'count', 'customer_id': 'nunique'})
df.groupby(['hotel_id', 'people_num'])['total_price'].sum().reset_index()
#Der Modus ist die häufigste Methode
df['total_price'].round(-3).mode()
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.
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
pd.merge(df.query('people_num == 1'), df_hotel.query('is_business'), on='hotel_id', how='inner')
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)
)
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.
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.
Erhöhen Sie die Anzahl der Daten
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'])
#In Integer-Typ konvertieren
df['value'].astype('int8')
#In Gleitkommatyp konvertieren
df['values'].astype('float64')
Konvertieren Sie den Eingabewert in logarithmisch.
df['total_price_log'] = df['total_price'].apply(lambda x: np.log(x / 1000 + 1))
df = (np.floor(df['age'] / 10) * 10).astype('category')
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]
#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()
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']])
Hauptkomponentenanalyse Analysieren Sie handschriftliche Zahlen mit PCA. Teil 1 - Qiita Maschinelles Lernen "Dimensionalitätsreduzierung", verstanden in 30 Minuten-Qiita
#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)
#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
#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)
#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)
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']])