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]
https://github.com/ghmagazine/awesomebook
#Utilisez la fonction de requête
pd.query('"2018-01-01" <= checkout_data <= "2018-01-20"')
#df à 50%Échantillonner
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()
#Le mode est la méthode la plus fréquente
df['total_price'].round(-3).mode()
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.
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)
)
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.
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.
Augmenter le nombre de données
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'])
#Convertir en type entier
df['value'].astype('int8')
#Convertir en type à virgule flottante
df['values'].astype('float64')
Convertissez la valeur d'entrée en logarithmique.
df['total_price_log'] = df['total_price'].apply(lambda x: np.log(x / 1000 + 1))
df = (np.floor(df['age'] / 10) * 10).astype('category')
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]
#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()
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']])
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
#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)
#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
#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)
#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)
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