Task2:数据的探索性分析(EDA)

Task2:数据的探索性分析(EDA)

第一次打卡,昨晚的直播课受益匪浅,准备先跑一遍Baseline,再对着更改,在这么长篇的代码中,各个编辑器对比发现,推荐pycharm,唯一不好的地方就是不能像jupyter那样每句语言都显示结果,导致pycharm是每次都全部跑一遍结果,可能会比较慢,也许是我太小白了,还有别的更好方案吧。

Baseline

baseline的流程是:

  1. 导入各种工具箱import,数据处理有:numpy,pandas;可视化包括:matplotlib,seaborn,注意在pycharm中画图%matplotlib inline最后要加上plt.show(),否则会报错!
  2. 数据读取用Pd.read_csv,分隔符sep=空格,区分训练集和测试集,这里的比例是3:1,数据简要浏览:head(),数据信息查看Info(),统计信息浏览describe(),
  3. 特征工程:从数值型之中粗略的选了一些变量,待优化,缺省值用-1填补
  4. 模型训练与预测:
'''step4:模型训练与预测
利用xgb进行5折交叉验证查看模型的参数效果'''
xgr=xgb.XGBRegressor(n_estimators=120,learning_rate=0.1,gamma=0,subsample=0.8,colsample_bytree=0.9,max_depth=7)
scores_train=[]
scores=[]
##5折交叉验证方式
sk=StratifiedKFold(n_splits=5,shuffle=True,random_state=0)
for train_ind,val_ind in sk.split(X_data,Y_data):
    train_x=X_data.iloc[train_ind].values
    train_y=Y_data.iloc[train_ind]
    val_x=X_data.iloc[val_ind].values
    val_y=Y_data.iloc[val_ind]

    xgr.fit(train_x,train_y)
    pred_train_xgb=xgr.predict(train_x)
    pred_xgb=xgr.predict(val_x)

    score_train=mean_absolute_error(train_y,pred_train_xgb)
    scores_train.append(score_train)
    score=mean_absolute_error(val_y,pred_xgb)
    scores.append(score)

print('Train mae:',np.mean(score_train))
print('Val mae',np.mean(scores))

1)
利用xgb进行五折交叉验证查看模型的参数效果
2)
定义xgb和lgb模型函数
3)
切分数据集(Train,Val)进行模型训练,评价和预测
4)
进行两模型的结果加权融合。
本赛题的评价指标是MAE(平均绝对误差),
Task2:数据的探索性分析(EDA)_第1张图片

EDA内容介绍

  1. 载入各种数据科学以及可视化库:
    数据科学库 pandas、numpy、scipy;
    可视化库 matplotlib、seabon;
    其他;

  2. 载入数据:
    载入训练集和测试集;
    简略观察数据(head()+shape);
    head()前5行,tail()后5行

  3. 数据总览:
    通过describe()来熟悉数据的相关统计量,
    describe种有每列的统计量,个数count、平均值mean、方差std、最小值min、中位数25% 50% 75% 、以及最大值 看这个信息主要是瞬间掌握数据的大概的范围以及每个值的异常值的判断,比如有的时候会发现999 9999 -1 等值这些其实都是nan的另外一种表达方式,有的时候需要注意下;
    通过info()来了解数据每列的type,有助于了解是否存在除了nan以外的特殊符号异常

  4. 判断数据缺失和异常
    查看每列的存在nan情况

Train_data.isnull().sum()

发现这3个字段nan值较多:
Task2:数据的探索性分析(EDA)_第2张图片

# nan可视化
missing = Train_data.isnull().sum()
missing = missing[missing > 0]
missing.sort_values(inplace=True)
missing.plot.bar()

主要的目的在于 nan存在的个数是否真的很大,如果很小一般选择填充,如果使用lgb等树模型可以直接空缺,让树自己去优化,但如果nan存在的过多、可以考虑删掉异常值检测,通过
value_counts()函数了解含有缺失值的特征的类别,如果类别特征严重倾斜,一般不会对预测有什么帮助,故这边先删掉
5. 了解预测值Price的分布
总体分布概况(无界约翰逊分布等)
查看skewness and kurtosis
查看预测值的具体频数,Log
6. 特征分为类别特征和数字特征,并对类别特征查看unique分布
7. 数字特征分析
相关性分析
查看几个特征得 偏度和峰值
一.偏度Skewness
Definition:是描述数据分布形态的统计量,其描述的是某总体取值分布的对称性,简单来说就是数据的不对称程度。。
偏度是三阶中心距计算出来的。

(1)Skewness = 0 ,分布形态与正态分布偏度相同。
(2)Skewness > 0 ,正偏差数值较大,为正偏或右偏。长尾巴拖在右边,数据右端有较多的极端值。
(3)Skewness < 0 ,负偏差数值较大,为负偏或左偏。长尾巴拖在左边,数据左端有较多的极端值。
(4)数值的绝对值越大,表明数据分布越不对称,偏斜程度大。
计算公式:Skewness=E[((x-E(x))/(\sqrt{D(x)}))^3]
| Skewness| 越大,分布形态偏移程度越大。

二.峰度(Kurtosis)
Definition:偏度是描述某变量所有取值分布形态陡缓程度的统计量,简单来说就是数据分布顶的尖锐程度。

峰度是四阶标准矩计算出来的。
(1)Kurtosis=0 与正态分布的陡缓程度相同。
(2)Kurtosis>0 比正态分布的高峰更加陡峭——尖顶峰
(3)Kurtosis<0 比正态分布的高峰来得平台——平顶峰
计算公式:Kurtosis=E[ ( (x-E(x))/ (\sqrt(D(x))) )^4 ]-3
每个数字特征得分布可视化
数字特征相互之间的关系corr(),可视化多变量互相回归关系可视化
8. 类型特征分析
unique分布
类别特征箱形图可视化
类别特征的小提琴图可视化
类别特征的柱形图可视化类别
特征的每个类别频数可视化(count_plot)
9. 用pandas_profiling生成数据报告

你可能感兴趣的:(python,可视化,机器学习,数据分析)