数据分析的整个流程
一、数据读取及浏览
1.数据读取
a.设置展示的行数和列数
pd.set_option('max_columns', None)
pd.set_option('max_rows', 100)
b.读取数据
# 部分默认参数
pd.read_csv(sep=',', index_col=None, encoding=None)
2.数据概览
a.观察部分数据
# append方法
Train_data.head(3).append(Train_data.tail(3)).append(Train_data.sample(3))
Test_data.head(3).append(Test_data.tail(3)).append(Test_data.sample(3))
b.查看数据类型和缺失值情况
Train_data.info()
Test_data.info()
c.查看数据的取值是否合理(异常值)以及数据的大致分布
# 只针对数值型数据(int 和 float),不包括object;缺失数据是不计数、不统计的
Train_data.describe()
Test_data.describe()
二、EDA-探索性数据分析
养成看数据集的head()以及shape的习惯,防止某一步出错造成的连串错误!!!
训练集和测试集都看!!!
1.数据缺失和异常分析
a.查看每个特征的缺失情况
# isnull对df操作,sum的默认axis=0,然后降序排列
missing_train = Train_data.isnull().sum().sort_values(ascending=False)
# Series的条件过滤,只展示有缺失值的特征
missing_train[missing_train > 0]
# 没必要的,缺失值的pandas作图,条形图
missing_train[missing_train > 0].plot.bar()
缺失值分析的目的在于:判断缺失值(nan)的个数,如果很小一般选择填充,如果使用lgb等树模型可以直接空缺,让树自己去优化,但如果nan存在的过多、可以考虑删掉;一般的百分比界限是??
新的缺失值分析库,分析缺失值
import missingno as msno
# 随机取些数据,可视化看下缺省值,白线越多说明缺失越严重,最右边的折线不知道是什么含义,百度也没找到
msno.matrix(Train_data.sample(250))
# 随机取些数据,计算每个特征的非缺失数量
msno.bar(Train_data.sample(1000))
缺失值里面,如果有的缺失值不是nan,而是特殊的符号,如’-’,那么isnull()函数是无法检测出来的!!!
b.异常值检测
本文中除了notRepairedDamage 特征为object类型外,其他都为数字,对该特征进行查看
统计特征的每个取值及其数量
Train_data['notRepairedDamage'].value_counts().sort_values(ascending=False)
异常值的替换:‘ - ’也为空缺值,对其进行替换,训练集和测试集都处理
Train_data['notRepairedDamage'].replace('-', np.nan, inplace=True)
Test_data['notRepairedDamage'].replace('-', np.nan, inplace=True)
c.无用特征的识别和删除
只需要看训练数据的,但是测试数据对应的也要删除!!
#以下两个类别特征严重倾斜,一般不会对预测有什么帮助,继续挖掘的意义不大,故先删掉
Train_data["seller"].value_counts() # 两个特征值的数量比是149999:1
Train_data["offerType"].value_counts() # 只有一个特征值
del Train_data["seller"]
del Train_data["offerType"]
del Test_data["seller"]
del Test_data["offerType"]
2.查看预测目标的分布
a.统计每个取值及其数量
Train_data['price'].value_counts().sort_values(ascending=False)
b. 用各种不同的分布去拟合数据
需要累积分布经验
import scipy.stats as st
y = Train_data['price']
# 无界约翰逊分布
plt.figure(1)
plt.title('Johnson SU')
sns.distplot(y, kde=False, fit=st.