此篇文章翻译自:https://www.kaggle.com/startupsci/titanic-data-science-solutions/code(Kaggle上Titanic问题点赞前三的Notebook)
工作流程:
在数据科学竞赛的解决问题的七个步骤:
1.问题或问题的定义。(理解题目)2.获得培训和测试数据。(获取数据)
3.争论,准备清理数据。(初步清洗数据)
4.分析、识别模式,并探索数据。(特征工程)
5.模型,预测和解决问题。(机器学习算法介入)
6.可视化报告,并提出解决问题的步骤和最终的解决方案。(调参、优化)
7.供应或提交结果。
理解题目:
像Kaggle这样的比赛网站可以定义要解决的问题或需要提出的问题,同时提供用于训练数据科学模型和根据测试数据集测试模型结果的数据集。泰坦尼克号生存竞赛的问题和问题定义在Kaggle中描述(https://www.kaggle.com/c/titanic):
从列出泰坦尼克灾难中幸存或未存活的乘客的样本训练集知道,如果测试数据集中的这些乘客存活与否,我们的模型是否可以基于给定的测试数据集来确定,而测试数据集不包含存活信息。
我们也可能希望对我们问题的领域有所了解。这在Kaggle比赛描述页面描述。以下是要强调的要点:
·1912年4月15日,在首次航行期间,泰坦尼克号撞上冰山后沉没,2224名乘客和机组人员中有1502人遇难。翻译成32%的存活率。
·海难导致生命损失的原因之一是没有足够的救生艇给乘客和机组人员。
·虽然幸存下来的运气有一些因素,但一些人比其他人更有可能生存,比如妇女,儿童和上层阶级。
需要用到的第三方库的导入:
# data analysis and wrangling
import pandas as pd
import numpy as np
import random as rnd
# visualization
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
# machine learning
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC, LinearSVC
from sklearn.ensemble import RandomForestClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.linear_model import Perceptron
from sklearn.linear_model import SGDClassifier
from sklearn.tree import DecisionTreeClassifier
获取数据:
Python为我们提供了一个很好的处理数据集的第三方库Pandas,我们把数据集导入成DataFrame格式,同时新建一个Combine List将训练数据和测试数据组合到一起。
train_df = pd.read_csv(r'文件地址')
test_df = pd.read_csv(r'文件地址’)
combine = [train_df,test_df]
初步分析数据:
Pandas提供的一些方法方便我们熟悉数据集:
在数据集中有什么特征?
#train_df.keys()
print(train_df.columns.values)
['PassengerId' 'Survived' 'Pclass' 'Name' 'Sex' 'Age' 'SibSp' 'Parch' 'Ticket' 'Fare' 'Cabin' 'Embarked']
特征的数据类型?哪些数据是数值型数据?哪些是非数值类型数据?
哪些特征是分类型?
这些值将样本分为几组相似的样本。 分类特征中的值是名义值,序数值,比值还是区间值? 除此之外,这有助于我们选择合适的图表进行可视化。
分类:Survived, Sex, and Embarked。 序数:Pclass。
哪些特征是数字型?
哪些功能是数字? 这些值随着样品的不同而不同。 数值特征中的值是离散的,连续的还是时间序列的基础? 除此之外,这有助于我们选择合适的图表进行可视化。
连续:Age, Fare。 离散型:SibSp,Parch。
哪些特征是混合的数据类型?
在一个特征中既含有数字型同时含有字母型数据,这种类型的数据是作为修正的数据目标。
Ticket和Cabin
哪些特征也许包含了错误或者拼写错误?
这种错误很难通过浏览庞大的数据集来识别,然而通过随意从数据集中挑选出的小样本可以有一个简单的全局认识,然后这些特征也许需要修正。
Name
哪些特征包含空格、Null或者空值?
这些特征数据需要被修正
Cabin>Age>Embarked这些特征在训练集中缺失值的排序
Cabin>Age这些特征在测试集中缺失值的排序
特征的数据类型是什么样的?
·七个特征是整型和浮点型数据,测试集中有6个
·五个特征是Object对象
train_df.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 891 entries, 0 to 890 Data columns (total 12 columns): PassengerId 891 non-null int64 Survived 891 non-null int64 Pclass 891 non-null int64 Name 891 non-null object Sex 891 non-null object Age 714 non-null float64 SibSp 891 non-null int64 Parch 891 non-null int64 Ticket 891 non-null object Fare 891 non-null float64 Cabin 204 non-null object Embarked 889 non-null object dtypes: float64(2), int64(5), object(5) memory usage: 83.6+ KB ________________________________________ <class 'pandas.core.frame.DataFrame'> RangeIndex: 418 entries, 0 to 417 Data columns (total 11 columns): PassengerId 418 non-null int64 Pclass 418 non-null int64 Name 418 non-null object Sex 418 non-null object Age 332 non-null float64 SibSp 418 non-null int64 Parch 418 non-null int64 Ticket 418 non-null object Fare 417 non-null float64 Cabin 91 non-null object Embarked 418 non-null object dtypes: float64(2), int64(4), object(5) memory usage: 36.0+ KB
PassengerId | Survived | Pclass | Name | Sex | Age | SibSp | Parch | Ticket | Fare | Cabin | Embarked | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 0 | 3 | Braund, Mr. Owen Harris | male | 22.0 | 1 | 0 | A/5 21171 | 7.2500 | NaN | S |
1 | 2 | 1 | 1 | Cumings, Mrs. John Bradley (Florence Briggs Th... | female | 38.0 | 1 | 0 | PC 17599 | 71.2833 | C85 | C |
2 | 3 | 1 | 3 | Heikkinen, Miss. Laina | female | 26.0 | 0 | 0 | STON/O2. 3101282 | 7.9250 | NaN | S |
3 | 4 | 1 | 1 | Futrelle, Mrs. Jacques Heath (Lily May Peel) | female | 35.0 | 1 | 0 | 113803 | 53.1000 | C123 | S |
4 | 5 | 0 | 3 | Allen, Mr. William Henry | male | 35.0 | 0 | 0 | 373450 | 8.0500 | NaN | S |
train_df.describe()
PassengerId | Survived | Pclass | Age | SibSp | Parch | Fare | |
---|---|---|---|---|---|---|---|
count | 891.000000 | 891.000000 | 891.000000 | 714.000000 | 891.000000 | 891.000000 | 891.000000 |
mean | 446.000000 | 0.383838 | 2.308642 | 29.699118 | 0.523008 | 0.381594 | 32.204208 |
std | 257.353842 | 0.486592 | 0.836071 | 14.526497 | 1.102743 | 0.806057 | 49.693429 |
min | 1.000000 | 0.000000 | 1.000000 | 0.420000 | 0.000000 | 0.000000 | 0.000000 |
25% | 223.500000 | 0.000000 | 2.000000 | 20.125000 | 0.000000 | 0.000000 | 7.910400 |
50% | 446.000000 | 0.000000 | 3.000000 | 28.000000 | 0.000000 | 0.000000 | 14.454200 |
75% | 668.500000 | 1.000000 | 3.000000 | 38.000000 | 1.000000 | 0.000000 | 31.000000 |
max | 891.000000 | 1.000000 | 3.000000 | 80.000000 | 8.000000 | 6.000000 | 512.329200 |
数值型的特征类型能够看出什么信息?
·数据中的样本量891占实际上船人员2224的40%
·Survived是一个分类特征值取0和1
·大多数乘客(>75%)没有跟父母或者孩子一起出游
·将近30%的乘客有兄弟姐妹或者配偶
·极少数乘客(<1%)支付了像512美元这样的票价
·年纪大的乘客非常少(仅有<1%的乘客是年龄65-80)
哪些分类类型的特征可以看出什么信息?
·Names这个特征在数据集中是不重复的
·Sex特征中男女比是13:7(男性乘客多)
·Cabin在样本中有几个dupicates。也有几位乘客共用一间小木屋。
·Embarked有三个不一样的值,S港口上的乘客最多
·Ticket特征有高达22%的重复数据
train_df.describe(include=['O'])
Name | Sex | Ticket | Cabin | Embarked | |
---|---|---|---|---|---|
count | 891 | 891 | 891 | 204 | 889 |
unique | 891 | 2 | 681 | 147 | 3 |
top | Lester, Mr. James | male | 347082 | G6 | S |
freq | 1 | 577 | 7 | 4 | 644 |