analyse exploratoire des données EDA
EDA but
familier avec la collecte des données, ensemble de données de validation et assurez - vous qu'il peut être utilisé dans l' apprentissage de la machine.
Comprendre la relation entre les variables et la relation qui existe entre la valeur prédite de la variable.
Analyse complète de l'exploration de données, pour tableau de texte ou un résumé.
RESUME Exemple
1, la bibliothèque de traitement de données et bibliothèques de visualisation chargées
PANDAS, numpy, SciPy
matplotlib, Seabon
2, le chargement de données
tête d'observations, la forme
3. Vue d' ensemble des données
de statistiques pertinentes décrit au courant des données, à travers les informations familières du type de données
4, et détermine une anomalie de données manquantes
détecter une valeur anormale
5, comprendre la distribution de la valeur prédite de
l'ensemble du profil de distribution, voir l' asymétrie et l' aplatissement kurtosis dissymétrie
6, traits caractéristiques sont divisés en catégories et caractéristiques numériques, voir les caractéristiques uniques de la distribution des catégories
7, dans lequel l' analyse de la numérique
analyse de corrélation, la visualisation de la distribution de chaque signature numérique, la relation mutuelle de signature numérique entre le visuel
8, dans lequel le type d'analyse
boîte de distribution unique distinction de classe figure, le violon, la visualisation de la colonne
9, pandas_profiling données du rapport
Le code échantillon
chargé de la bibliothèque concernée
import warnings
warnings.filterwarnings('ignore')
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
1, les données de chargement
path = 'C:/Users/lenovo/Desktop/data/'
Train_data = pd.read_csv(path+'used_car_train_20200313.csv',sep=' ')
Test_data = pd.read_csv(path+'used_car_testA_20200313.csv',sep=' ')
2, les données observées et la fin des données pour mettre fin à dimension
print(Train_data.head().append(Train_data.tail()))
print(Train_data.shape)
3. Vue d'ensemble Vue d'ensemble des données
overview = Train_data.describe()
datatype = Train_data.info()
décrire description des différentes caractéristiques de chaque statistiques de colonne, y compris le nombre COUNT, moyenne moyenne, variance STD, la valeur minimale min, la médiane 25% 50% 75% et une valeur maximale. d'
info savoir type de fonction pour chaque colonne, en plus de comprendre nan symboles spéciaux autres que l'exception.
4, et la suppression des données d'anomalie de jugement
#统计缺失值isnull
missing = Train_data.isnull().sum()
print(Train_data.isnull().sum())
miss = missing[missing > 0]
miss.sort_values(inplace=True)
miss.plot.bar()
#统计异常值
print(Train_data.info())
print(Train_data['notRepairedDamage'].value_counts())
Train_data['notRepairedDamage'].replace('-', np.nan, inplace=True)
print(Train_data['notRepairedDamage'].value_counts())
Train_data.isnull().sum()
Test_data['notRepairedDamage'].replace('-', np.nan, inplace=True)
#删除严重倾斜的特征
print(Train_data['seller'].value_counts())
print(Train_data['offerType'].value_counts())
del Train_data['seller']
del Train_data['offerType']
del Test_data['seller']
del Test_data['offerType']
print(Train_data.shape)
print(Test_data.shape)
Le « - » valeur est remplacée nan. Pour beaucoup catégories asymétriques peuvent être supprimés.
5, pour comprendre la répartition des valeurs prévues
print(Train_data['price'])
print(Train_data['price'].value_counts())
#总体分布概况
import scipy.stats as st
y = Train_data['price']
plt.figure(1);plt.title('Johnson SU')
sns.distplot(y, kde=False, fit=st.johnsonsu)
plt.figure(2);plt.title('Normal')
sns.distplot(y, kde=False, fit=st.norm)
plt.figure(3);plt.title('Log Normal')
sns.distplot(y, kde=False, fit=st.lognorm)
#分析预测值价格分布的skewness and kurtosis
sns.distplot(Train_data['price'])
print('skewness:%f'%Train_data['price'].skew())
print('kurtosis:%f'%Train_data['price'].kurt())
#分析所有特征分布的skewnes and kurtosis
Train_data.skew()
Train_data.kurt()
sns.distplot(Train_data.skew(),color='blue',axlabel='Skewness')
sns.distplot(Train_data.kurt(),color='orange',axlabel='Kurtness')
#分析预测值的具体频数
plt.hist(Train_data['price'], orientation='vertical', histtype='bar',color='red')
plt.show()
#将预测值进行log变换
plt.hist(np.log(Train_data['price']), orientation='vertical', histtype='bar', color='red')
plt.show()
Les valeurs prédites de conversion logarithmique afin que une distribution normale.
6, voir les caractéristiques uniques de la répartition des catégories
Y_train = Train_data['price']
numeric_features = ['power', 'kilometer', 'v_0', 'v_1', 'v_2', 'v_3', 'v_4', 'v_5', 'v_6', 'v_7', 'v_8', 'v_9', 'v_10', 'v_11', 'v_12', 'v_13','v_14' ]
categorical_features = ['name', 'model', 'brand', 'bodyType', 'fuelType', 'gearbox', 'notRepairedDamage', 'regionCode',]
#特征unique分布:
for cat_fea in categorical_features:
print(cat_fea+'特征的分布如下:')
print('{}特征有{}个不同的值'.format(cat_fea, Train_data[cat_fea].unique()))
print(Train_data[cat_fea].value_counts())
7, voir les caractéristiques uniques de la distribution du numérique
numeric_features.append('price')
#相关性分析
price_numeric = Train_data[numeric_features]
correlation = price_numeric.corr()
print(correlation['price'].sort_values(ascending=False), '\n')
f,ax = plt.subplots(figsize=(7,7))
#plt.title('Correlation of Numeric Features with Price',y=1, size=16)
#sns.heatmap(correlation, square=True, vmax=0.8)
del price_numeric['price']
#查看每个特征的偏度和峰值
for col in numeric_features:
print('{:15}'.format(col),
'Skewness: {:05.2f}'.format(Train_data[col].skew()) ,
' ' ,
'Kurtosis: {:06.2f}'.format(Train_data[col].kurt())
)
#每个数字特征的分布可视化
f = pd.melt(Train_data, value_vars=numeric_features)
g = sns.FacetGrid(f, col='variable', col_wrap=2, sharex=False, sharey=False)
g = g.map(sns.distplot, 'value')
#数字特征相互之间的可视化
sns.set()
columns = ['price', 'v_12', 'v_8' , 'v_0', 'power', 'v_5', 'v_2', 'v_6', 'v_1', 'v_14']
sns.pairplot(Train_data[columns],size = 2 ,kind ='scatter',diag_kind='kde')
plt.show()
8, catégorie analyse des caractéristiques
#unique分布
for fea in categorical_features:
print(Train_data[fea].unique())
#类别特这个箱型图可视化
categorical_features = ['model',
'brand',
'bodyType',
'fuelType',
'gearbox',
'notRepairedDamage']
for c in categorical_features:
Train_data[c] = Train_data[c].astype('category')
if Train_data[c].isnull().any():
Train_data[c] = Train_data[c].cat.add_categories(['MISSING'])
Train_data[c] = Train_data[c].fillna('MISSING')
def boxplot(x, y, **kwargs):
sns.boxplot(x=x, y=y)
x = plt.xticks(rotation=90)
f=pd.melt(Train_data, id_vars=['price'], value_vars=categorical_features)
g=sns.FacetGrid(f, col='variable', col_wrap=2, sharex=False, sharey=False, size=5)
g=g.map(boxplot, "value", "price")
#类别特征的小提琴可视化
catg_list = categorical_features
target = 'price'
for catg in catg_list:
sns.violinplot(x=catg, y=target, data=Train_data)
plt.show()
#类别特征的频数可视化
def count_plot(x, **kwargs):
sns.countplot(x=x)
x=plt.xticks(rotation=90)
f=pd.melt(Train_data, value_vars=categorical_features)
g=sns.FacetGrid(f, col='variable', col_warp=2, sharex=False, sharey=False, size=5)
g=g.map(count_plot, "value")
9, les données peuvent être générées par pandas_profiling rapport de visualisation
import pandas_profiling
pfr = pandas_profiling.PrifileReport(Train_data)
pfr.to_file("./example.html")