[Python] Mémo de prétraitement complet tel quel

C'est un mémo que j'ai écrit et essayé auparavant.

Je me réfère aux livres suivants. Prétraitement complet [technique de pratique SQL / R / Python pour l'analyse des données]

Données à utiliser

https://github.com/ghmagazine/awesomebook

Extraction

#Utilisez la fonction de requête
pd.query('"2018-01-01" <= checkout_data <= "2018-01-20"')

Échantillonnage

#df à 50%Échantillonner
df.sample(frac=0.5)

ensemble

Échantillonnage basé sur l'ID d'ensemble


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

Calcul du nombre de données et du nombre de types


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

Calcul de la valeur totale


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

Calcul de la valeur la plus fréquente


#Le mode est la méthode la plus fréquente
df['total_price'].round(-3).mode()

À propos de la ronde

Si un entier positif est spécifié, les chiffres après la virgule décimale sont spécifiés, et si un entier négatif est spécifié, le chiffre (position) de l'entier est spécifié. -1 tours à la place des dizaines, -2 tours à la place des 100. 0 est arrondi à un entier (place de 1), mais contrairement au cas où il est omis, il retourne un type float.

Calcul du classement


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

Joindre

Jointure de table principale


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

Valeur totale des n derniers cas


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)
)

Divisé

Qu'est-ce que la vérification croisée?

  1. Répartition des données
  2. Apprendre à l'aide de certaines données
  3. Vérification à l'aide d'autres données
  4. Répétez les motifs 2 et 3 https://mathwords.net/kousakakunin

k vérification de l'intersection fractionnée

  1. Divisez les données en k morceaux
  2. Apprenez avec k-1 et vérifiez avec le reste
  3. Répétez 1 et 2 https://mathwords.net/kousakakunin

Vérification du blocage

Si vous ne faites que la vérification des intersections, vous aborderez un état de sur-apprentissage du problème de la vérification des intersections. La solution à ce problème est la vérification du blocage. Préparez les données séparément de la vérification d'intersection et utilisez les données préparées lors de la vérification finale de l'exactitude.

produire

La génération de données est utilisée lors de l'ajustement des données déséquilibrées Il existe trois modèles, et le plus couramment utilisé est une combinaison de suréchantillonnage et de sous-échantillonnage.

Augmentez le nombre de données afin que le suréchantillonnage n'affecte pas Réduisez le nombre de données afin que le sous-échantillonnage n'ait pas d'effet indésirable.

Suréchantillonnage

Augmenter le nombre de données

Sous-échantillonnage

Réduisez le nombre de données


#Suréchantillonnage
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'])

Type numérique

Convertir en type entier et type virgule flottante


#Convertir en type entier
df['value'].astype('int8')

#Convertir en type à virgule flottante
df['values'].astype('float64')

Logistique

Convertissez la valeur d'entrée en logarithmique.


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

Catégorisation de type numérique


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

Normalisation

Mécanisme pour éviter le surapprentissage.


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]

Suppression des valeurs aberrantes

#Supprime les valeurs supérieures à un certain multiple de la valeur de l'écart type de la valeur moyenne
#Définition d'une valeur supérieure à 3
#La valeur selon la distribution normale est d'environ 99 dans la plage de 3 fois la valeur de l'écart type par rapport à la valeur moyenne..73%Puisque la valeur de est réglée, la probabilité d'occurrence est de 0.27%Considérez les valeurs suivantes comme des valeurs aberrantes
df[(abs(df['total_price'] - np.mean(df['total_price'])) / np.std(df['total_price']) <= 3)].reset_index()

Compression dimensionnelle par analyse en composantes principales


from sklearn.decomposition import PCA

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

print('Taux de cotisation cumulé: {0}'.format(sum(pca.explained_variance_ratio_)))
print('Taux de contribution de chaque dimension: {0}'.format(pca.explained_variance_ratio_))
print('Taux de contribution de chaque dimension: {}'.format(pca.explained_variance_ratio_))

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

Perte d'informations PCA

Analyse des composants principaux Analysez les nombres manuscrits à l'aide de l'ACP. Partie 1 - Qiita Terme d'apprentissage automatique «Réduction de dimensionnalité» qui peut être compris en 30 minutes - Qiita

Complétion numérique

Achèvement constant


#Convertir Aucun en nan avec la fonction de remplacement
df.replace('None', np.nan, inplace=True)

#Remplissez les valeurs manquantes pour l'épaisseur avec la fonction fillna
df['thickness'].fillna(1, inplace=True)

Type de catégorie

Conversion en type de catégorie


#Convertir en type booléen
df[['sex_is_man']] = (df[['sex']] == 'man').astype('bool')

#Convertir le sexe en type de catégorie
df['sex_c'] = pd.Categorical(df['sex'], categories=['man', 'woman'])

#Peut être converti avec un type
df['sex_c'] = df['sex_c'].astype('category')

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

Variable muette


#Convertir en type de catégorie
df['sex'] = pd.Categorical(df['sex'])
# get_Sexe variable factice avec fonction factice
dummy_vars = pd.get_dummies(df['sex'], drop_first=False)

Agrégation des valeurs de catégorie

#Convertir en type de catégorie
df['age_rank'] = pd.Categorical(np.floor(df['age']/10)*10)

#Pour maîtriser les données`60 ou plus`Ajouter
df['age_rank'].cat.add_categories(['60 ou plus'], inplace=True)

#fonction isin
#Vérifier si une colonne du bloc de données contient une valeur
df.loc[df['age_rank'].isin([60.0, 70.0, 80.0]), 'age_rank'] = '60 ou plus'
df['age_rank'].cat.remove_unused_categories(inplace=True)

Complément par KNN


from sklearn.neighbors import KNeighborsClassifier

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

#Extraction des données non manquantes
train = df.dropna(subset=['type'], inplace=False)

#Extraction des données manquantes
test = df.loc[df.index.difference(train.index), :]

#génération de modèle knn
kn = KNeighborsClassifier(n_neighbors=3)

#apprentissage du modèle knn
kn.fit(train[['length', 'thickness']], train['type'])

#Calculez la valeur prédite avec knnn et complétez le type
test['type'] = kn.predict(test[['length', 'thickness']])

Recommended Posts

[Python] Mémo de prétraitement complet tel quel
Mémo Python
mémo python
Mémo Python
mémo python
Mémo Python
Mémo Python
Un mémo python utilisant perl --format est pratique.
Lorsque vous souhaitez l'utiliser tel quel lorsque vous l'utilisez avec lambda memo
Lisez le fichier CSV avec Python et convertissez-le en DataFrame tel quel
[Python] Mémo sur le dictionnaire
Python est facile
mémo débutant python (9.2-10)
python Remarque: Traitez les listes collectivement comme un ensemble
mémo débutant python (9.1)
Puisque python est lu comme "Pichon", il peut être exécuté avec "Pichon" (c'est une histoire)
[Python] Mémo EDA
Mémo opérateur Python 3
Qu'est-ce que python
Python est une instance
[Mon mémo] python
Mémo de métaclasse Python3
[Python] Mémo de fond de carte
Juger s'il s'agit d'un nombre premier [Python]
Mémo débutant Python (2)
[Python] Mémo Numpy
Qu'est-ce que Python
Puisque le memory_profiler de python est lourd, je l'ai mesuré
[Python] Calender Heatmap [Plotly] Memo
mémo python utilisant perl - type de dictionnaire (casse non valide)
python int est infini
Classe Python (mémo d'apprentissage Python ⑦)
installation de python openCV (mémo)
Module Python (mémo d'apprentissage Python ④)
[Python] Qu'est-ce que Pipeline ...
Mémo du package de test Python
J'ai essayé "Streamlit" qui transforme le code Python en une application web tel quel
[Python] Mémo sur les fonctions
mémo d'expression régulière python
Recherche de bisection (python2.7) mémo
[Mon mémo] python -v / python -V
Mémo de type Liste / Dictionnaire Python3
[Mémo] Tri de liste Python3
[Python] Mémo sur les erreurs
Mémo de script DynamoDB (Python)
Mémo de base Python - Partie 2
livre de recettes python Memo
Prétraitement complet du composé Python
Notes de commande de base Python
Mémo du didacticiel Python OpenCV
Mémo de grammaire de base Python
Mémo de l'API TensorFlow (Python)
liens de mémo utiles python
Mémo d'opération de décorateur Python
Mémo de base Python - Partie 1
Élément de mémo Python efficace 3