EDA-数据探索性分析
- EDA的作用
对已有数据在尽量减少先验假设下通过作图制表、方程拟合、计算特征量等手段探索数据的结构和规律的一种数据分析方法,常用的手段包括仃阿凌分析和可视化技术。 - 步骤如下:
1,载入各种数据科学以及可视化库:
数据科学库 pandas、numpy、scipy;
可视化库matplotlib、seaborn;
seaborn是一个基于matplotlib的数据可视化库,他用户回执有吸引力的且信息丰富的统计图形,它可以绘制高颜值的图表,专门为数据分析设计的可视化库,对pandas的兼容性非常好。
2,载入数据
Train_data = pd.read_csv(path+"used_car_train_20200313.csv",sep = " ")
Test_data = pd.read_csv(path+"used_car_testA_20200313.csv",sep = " ")
display(Train_data.shape)
display(Test_data.shape)
3,数据总览
Train_data.head().append(Train_data.tail())#显示前五行和末尾五行
Train_data.info()#用于查看数据所有列的数目和所属类型
Train_data.describe()#显示所有列的总条数,均值,方差,最小、大值,以及1/4,1/2和3/4时的统计信息
4,判断数据缺失和异常情况
Train_data.isnull().sum()#统计每列的缺失条数
#用柱状图显示缺失列的条目
missing = Train_data.isnull().sum()
missing = missing[missing>0]
print(missing)
missing.sort_values(inplace =True)
missing.plot.bar()
#删除缺失值多的列
del Train_data["seller"]
del Train_data["offerType"]
5,了解预测值的分布
#看预测值
Train_data["price"]
#总体分布情况,用不同的图可视化,最后看那个结果能更清晰地描绘预测值的分布情况
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)
6,特征分为类别和数字特征,并对类别特征查看unique分布
#分离label即预测值
Y_train = Train_data["price"]
#特征nunique分布
for cat_fea in categorical_features:
print(cat_fea + "的特征分布如下:")
print("{}特征有{}不同的值".format(cat_fea,Train_data[cat_fea].nunique()))
print(Train_data[cat_fea].value_counts())
7,数字特征分析
#相关性分析
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)
8,类型特征分析
# 2,类别特征箱型图可视化
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')
3,EDA实则是把握所有数据分布情况,将缺失值严重的列删除,根据热力图处理所有数据特征之间的相关性,观察预测值的分布情况。