本篇是数据分析的入门学习,只是运行相应的代码和学习相应的函数和库,梳理数据分析大概流程。参考的源代码链接:Jupyter Notebook Viewer (nbviewer.org)
准备工作
1.准备数据集
导入数据集并查看前五条数据
查看数据集大小(行数和列数)
查看数据集具体信息(每一列的信息)和统计信息(总数(count)、均值(mean)、标准差(std)、最小值(min)、四分位数(25%,50%,75%)和最大值(max))。
探索性分析:
使用seaborn库里面的countplot函数绘制直方图。x
和y
参数用于指定绘制长格式数据的变量名称;data
参数是用于绘制图形的数据框;hue
参数用于指定数据框中绘制图形所需的变量名称,用于分组变量来控制绘图元素的顺序;palette
参数是用于设置图表中颜色方案。
用dataFrame的pivot_table生成一个数据透视表,其中聚合的列是PassengerId,用sex做索引的行名,Servived做的值作为列,聚合函数为count。
使用scipy.stats
模块中的chi2_contingency
函数是进行卡方独立性检验的。
chi2_contingency
函数返回一个包含四个元素的元组:卡方统计量的值;卡方统计量的p值;自由度;期望频数表。在这里只取了p值。卡方独立性检验(Chi-square test of independence)是一种统计假设检验方法,用于检验两个分类变量是否独立。用于确定两个变量之间是否存在某种实质性的关联。
创建一个图形(fig
)和两个子图(axes
),这两个子图将并排显示。nrows=1
和ncols=2
指定了子图的布局,即1行2列。设置了整个图形的大小为18英寸宽和6英寸高。筛选出data_train
中'Survived'列值为1的行,然后绘制这些行的'Age'列的直方图。直方图的颜色设置为绿色('g'),并指定在axes[0]
这个子图上绘制。为第一个子图(axes[0]
)设置标题为'Survived Age hist',并设置了标题字体大小为18。筛选出data_train
中'Survived'列值为0的行,然后绘制这些行的'Age'列的直方图。直方图颜色设置为红色('r'),并指定在axes[1]
这个子图上绘制。
使用seaborn
库来绘制一个箱线图,用于比较泰坦尼克号数据集中生存者(Survived=1
)和遇难者(Survived=0
)的船票价格(Fare
)分布
使用matplotlib
和seaborn
库来创建并显示两个直方图,分别展示泰坦尼克号数据集中生存者(Survived=1)和遇难者(Survived=0)的船票价格(Fare)分布。
使用seaborn
库的countplot
函数来绘制一个柱状图,展示泰坦尼克号数据集中不同乘客等级(Pclass
)的生存情况(Survived
)。
探究其他数据之间的关系(方法与上面同理,更换不同的参数即可)
特征提取
合并两个数据集,不做排序处理并删除passengerId。
ombined
DataFrame中创建了一个新的列'title'。它使用map
函数将lambda函数返回的x值存储到’title‘中,lambda表达式取将字符串分割后的第一个字符,即称呼,如女士先生等。
查看相应的统计信息
缺失值填充
Age:根据 Sex、Pclass 和 Title 分组,如果落在相同的组别里,就用这个组别的中位数填充。
Fare缺失值较多,使用平均值填充。其他缺失值采用类似方法处理。
模型训练与评估
使用scikit-learn
库中的RandomForestClassifier
类来创建一个随机森林分类器对象
使用scikit-learn
库中的cross_val_score
函数来评估随机森林分类器(rfc
)在训练数据上的性能。使用了10折交叉验证(cv=10
)来估计模型的泛化能力。
数据不是拿全部数据训练出来的,是交叉验证的结果。下面我们使用全部的训练数据重新训练一遍。
分析随机森林分类器(rfc
)中各个特征的重要性,并将它们按照重要性从高到低进行排序
使用scikit-learn
库中的SelectFromModel
类来进行特征选择。减少数据的维度,从而可能提高模型的性能,减少过拟合,并加速模型的训练。最后只剩五个特征。
用网格搜索(GridSearchCV
)来找到最优的参数组合,并使用分层k折交叉验证(StratifiedKFold
)来评估模型性能。
%%time用于测量执行下面代码块所需的时间。
参数网格 (parameter_grid): 定义了要搜索的参数空间。这里包括max_depth, n_estimators, max_features, min_samples_split, min_samples_leaf, 和 bootstrap等参数,并为每个参数指定了一组候选值。
GridSearchCV: 网格搜索类,用于在给定的参数网格上执行交叉验证,以找到最佳参数组合。
scoring='accuracy': 使用准确率作为评分指标。
param_grid=parameter_grid: 定义要搜索的参数网格。
cv=cross_validation: 使用前面定义的分层k折交叉验证。
verbose=1: 输出详细的进度日志。
grid_search.fit(train_reduced, y): 使用经过特征选择后的训练数据train_reduced和目标变量y来拟合网格搜索对象。
grid_search.best_score_ 和 grid_search.best_params_: 分别存储了网格搜索找到的最佳分数和对应的参数组合。
parameters
是字典,用于存储随机森林分类器通过网格搜索找到的最佳参数组合。它是在执行网格搜索后通过 grid_search.best_params_
获取的。
model = RandomForestClassifier(**parameters) 创建一个新的 RandomForestClassifier 实例,并使用 前面的parameters 中存储的最佳参数来初始化这个实例。
使用训练的模型对结果进行预测,并将结果输出到csv文件中。
部分结果如下: