您现在的位置是:主页 > 深度智能 >

5 个数据科学项目——实践数据科学项目

2022-02-25 14:57:00深度智能 124人已围观

免费预览:

随着人工智能的指数级爆发,公司急切地希望聘请熟练的数据科学家来发展他们的业务。除了获得数据科学认证之外,在你的简历中加入几个数据科学项目总是好的。有理论知识是永远不够的。因此,在本博客中,您将学习如何实际使用数据科学方法来解决实际问题。

以下是本文将涵盖的主题列表博客:

  1. 使用数据科学解决问题的基本方法

  2. 数据科学的实际实施

  3. 数据科学项目

数据科学项目生命周期

有了正确的数据,数据科学可用于解决从欺诈检测和智能农业到预测气候变化和心脏病等问题。话虽如此,数据不足以解决问题,您需要一种可以为您提供最准确结果的方法或方法。这给我们带来了一个问题:

您如何解决数据科学问题?

数据科学中的问题陈述可以通过以下步骤来解决:

  1. 定义问题陈述/业务需求
  2. 数据采集
  3. 数据清洗
  4. 数据探索与分析
  5. 数据建模
  6. 部署与优化

数据科学项目生命周期 – 数据科学项目

让我们详细看看这些步骤中的每一个:

第 1 步:定义问题陈述

在你开始一个数据科学项目之前,你必须定义你要解决的问题。在这个阶段,您应该清楚项目的目标。

第 2 步:数据收集

顾名思义,在这个阶段,您必须获取解决问题所需的所有数据。收集数据并不是一件容易的事,因为大多数时候您不会在数据库中找到等待您的数据。相反,你必须出去,做一些研究并收集数据或从互联网上抓取数据。

第三步:数据清理

如果你问数据科学家,他们最不喜欢数据科学的过程是什么,他们很可能会告诉你这是数据清洗。数据清洗是删除冗余、丢失、重复和不必要数据的过程。这个阶段被认为是数据科学中最耗时的阶段之一。然而,为了防止错误的预测,消除数据中的任何不一致是很重要的。

第 4 步:数据分析和探索

清理完数据后,就该拿出内在的福尔摩斯了。在数据科学生命周期的这个阶段,您必须检测数据中的模式和趋势。您可以在此处检索有用的见解并研究数据的行为。在这个阶段结束时,您必须开始对您的数据和您正在解决的问题形成假设。

第 5 步:数据建模

这个阶段就是建立一个最能解决您的问题的模型。模型可以是使用数据进行训练和测试的机器学习算法。这个阶段总是从一个称为数据拼接的过程开始,在这个过程中,您将整个数据集分成两个比例。一个用于训练模型(训练数据集),另一个用于测试模型的效率(测试数据集)。

接下来是使用训练数据集构建模型,最后使用测试数据集评估模型。

第 6 步:优化和部署:

这是数据科学生命周期的最后阶段。在这个阶段,你必须尝试提高数据模型的效率,使其能够做出更准确的预测。最终目标是将模型部署到生产或类似生产的环境中,以供最终用户接受。用户必须验证模型的性能,如果模型有任何问题,则必须在此阶段进行修复。

既然你知道一个问题是如何使用数据科学来解决,让我们进入有趣的部分。在接下来的部分中,我将为您提供五个高级数据科学项目,这些项目可以让您在顶级 IT 公司中获得聘用。

R中的数据科学

在我们开始编码之前,这里有一个简短的免责声明:

我将使用 R 语言来运行整个数据科学工作流程,因为R 是一种统计语言,它有超过 8000 个包,可以让我们的生活更轻松。

1994 年人口普查收入数据的分类

问题陈述:建立一个模型,该模型将根据有关该个人的可用数据预测美国任何个人的收入是否大于或小于 50,000 美元。

数据集描述:该人口普查收入数据集由 Barry Becker 于 1994 年收集并提供给公共网站http://archive.ics.uci.edu/ml/datasets/Census+Income。该数据集将帮助您了解一个人的收入如何因教育背景、职业、婚姻状况、地理、年龄、每周工作小时数等各种因素而变化。

以下是用于预测个人收入是否超过 50,000 美元的自变量或预测变量列表:

  • 年龄
  • 工薪阶层
  • 最终重量
  • 教育
  • Education-num(受教育年限)
  • 婚姻状况
  • 职业
  • 关系
  • 种族
  • 性别
  • 资本收益
  • 资本损失
  • 每周几小时
  • 祖国

因变量是代表收入水平的“收入水平”。这是一个分类变量,因此它只能取两个值:

  1. <=50k
  2. >=50k

现在我们已经定义了目标并收集了数据,是时候开始分析了。

第 1 步:导入数据

幸运的是,我们在网上找到了一个数据集,所以我们所要做的就是将数据集导入我们的 R 环境,如下所示:

1
2
3
4
5
6
7
8
9
10
#Downloading train and test data
trainFile = "adult.data"; testFile = "adult.test"
if (!file.exists (trainFile))
destfile = trainFile)
if (!file.exists (testFile))
destfile = testFile)

在上面的代码片段中,我们下载了训练数据集和测试数据集。

如果您查看训练数据,您会注意到预测变量没有标记。因此,在下面的代码片段中,我为每个预测变量分配了变量名,并且为了使数据更具可读性,我去掉了不必要的空格。

1
2
3
4
5
6
7
8
9
10
11
#Assigning column names
colNames = c ("age", "workclass", "fnlwgt", "education",
"educationnum", "maritalstatus", "occupation",
"relationship", "race", "sex", "capitalgain",
"capitalloss", "hoursperweek", "nativecountry",
"incomelevel")
#Reading training data
training = read.table (trainFile, header = FALSE, sep = ",",
strip.white = TRUE, col.names = colNames,
na.strings = "?", stringsAsFactors = TRUE)

现在为了研究我们的数据集的结构,我们调用 str() 方法。这为我们提供了数据集中存在的所有预测变量的描述性摘要:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#Display structure of the data
str (training)
> str (training)
'data.fr ame': 32561 obs. of 15 variables:
$ age : int 39 50 38 53 28 37 49 52 31 42 ...
$ workclass : Factor w/ 8 levels "Federal-gov",..: 7 6 4 4 4 4 4 6 4 4 ...
$ fnlwgt : int 77516 83311 215646 234721 338409 284582 160187 209642 45781 159449 ...
$ education : Factor w/ 16 levels "10th","11th",..: 10 10 12 2 10 13 7 12 13 10 ...
$ educationnum : int 13 13 9 7 13 14 5 9 14 13 ...
$ maritalstatus: Factor w/ 7 levels "Divorced","Married-AF-spouse",..: 5 3 1 3 3 3 4 3 5 3 ...
$ occupation : Factor w/ 14 levels "Adm-clerical",..: 1 4 6 6 10 4 8 4 10 4 ...
$ relationship : Factor w/ 6 levels "Husband","Not-in-family",..: 2 1 2 1 6 6 2 1 2 1 ...
$ race : Factor w/ 5 levels "Amer-Indian-Eskimo",..: 5 5 5 3 3 5 3 5 5 5 ...
$ sex : Factor w/ 2 levels "Female","Male": 2 2 2 2 1 1 1 2 1 2 ...
$ capitalgain : int 2174 0 0 0 0 0 0 0 14084 5178 ...
$ capitalloss : int 0 0 0 0 0 0 0 0 0 0 ...
$ hoursperweek : int 40 13 40 40 40 40 16 45 50 40 ...
$ nativecountry: Factor w/ 41 levels "Cambodia","Canada",..: 39 39 39 39 5 39 23 39 39 39 ...
$ incomelevel : Factor w/ 2 levels "<=50K",">50K": 1 1 1 1 1 1 1 2 2 2 ...

因此,在导入数据并将其转换为可读格式之后,我们将进入数据处理的下一个关键步骤,即数据清洗。

第 2 步:数据清理

数据清理阶段被认为是数据科学中最耗时的任务之一。此阶段包括删除 NA 值、删除冗余变量和数据中的任何不一致。

我们将通过检查我们的数据观察是否有任何缺失值来开始数据清理:

1
2
3
4
> table (complete.cases (training))
FALSE TRUE
2399 30162

上面的代码片段表明 2399 个样本案例具有 NA 值。为了解决这个问题,让我们看一下我们所有变量的摘要,并分析哪些变量的空值数量最多。我们必须摆脱 NA 值的原因是它们会导致错误的预测,从而降低我们模型的准确性。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
> summary  (training [!complete.cases(training),])
age                   workclass        fnlwgt              education    educationnum
Min.   :17.00   Private         : 410   Min.   : 12285   HS-grad     :661   Min.   : 1.00
1st Qu.:22.00   Self-emp-inc    :  42   1st Qu.:121804   Some-college:613   1st Qu.: 9.00
Median :36.00   Self-emp-not-inc:  42   Median :177906   Bachelors   :311   Median :10.00
Mean   :40.39   Local-gov       :  26   Mean   :189584   11th        :127   Mean   : 9.57
3rd Qu.:58.00   State-gov       :  19   3rd Qu.:232669   10th        :113   3rd Qu.:11.00
Max.   :90.00   (Other)         :  24   Max.   :981628   Masters     : 96   Max.   :16.00
NA's            :1836                    (Other)     :478
maritalstatus           occupation           relationship                 race
Divorced             :229   Prof-specialty : 102   Husband       :730   Amer-Indian-Eskimo:  25
Married-AF-spouse    :  2   Other-service  :  83   Not-in-family :579   Asian-Pac-Islander: 144
Married-civ-spouse   :911   Exec-managerial:  74   Other-relative: 92   Black             : 307
Married-spouse-absent: 48   Craft-repair   :  69   Own-child     :602   Other             :  40
Never-married        :957   Sales          :  66   Unmarried     :234   White             :1883
Separated            : 86   (Other)        : 162   Wife          :162
Widowed              :166   NA's           :1843
sex        capitalgain       capitalloss       hoursperweek         nativecountry
Female: 989   Min.   :    0.0   Min.   :   0.00   Min.   : 1.00   United-States
Median :    0.0   Median :   0.00   Median :40.00   Canada
Mean   :  897.1   Mean   :  73.87   Mean   :34.23   Philippines
3rd Qu.:    0.0   3rd Qu.:   0.00   3rd Qu.:40.00   Germany
Max.   :99999.0   Max.   :4356.00   Max.   :99.00   (Other)
NA's         : 583

从上面的总结可以看出,三个变量具有大量的 NA 值:

  1. 工人阶级 – 1836
  2. 职业 – 1843
  3. 本国 – 583

这三个变量必须清除,因为它们是预测个人收入水平的重要变量。

1
2
3
#Removing NAs
TrainSet = training [!is.na (training$workclass) & !is.na (training$occupation), ]
TrainSet = TrainSet [!is.na (TrainSet$nativecountry), ]

一旦我们摆脱了 NA 值,我们的下一步就是摆脱任何对预测结果不是必需的不必要变量。摆脱这些变量很重要,因为它们只会增加模型的复杂性而不会提高其效率。

一个这样的变量是“fnlwgt”变量,它表示通过计算人口的任何特定社会经济特征的“加权统计”从 CPS 得出的人口总数。

该变量已从我们的数据集中删除,因为它无助于预测我们的结果变量:

1
2
3
#Removing unnecessary variables
TrainSet$fnlwgt = NULL

这就是数据清洗的全部内容,我们的下一步是数据探索。

第三步:数据探索

数据探索涉及分析每个特征变量以检查变量是否对构建模型很重要。

探索年龄变量

1
2
3
4
5
6
7
8
9
10
11
#Data Exploration
#Exploring the age variable
> summary (TrainSet$age)
Min. 1st Qu. Median Mean 3rd Qu. Max.
17.00 28.00 37.00 38.44 47.00 90.00
#Boxplot for age variable
boxplot (age ~ incomelevel, data = TrainSet,
main = "Income levels based on the Age of an individual",
xlab = "Income Level", ylab = "Age", col = "salmon")

箱线图 – 数据科学项目 

1
2
3
4
5
6
7
8
9
10
11
12
#Histogram for age variable
incomeBelow50K = (TrainSet$incomelevel == "<=50K")
xlimit = c (min (TrainSet$age), max (TrainSet$age))
ylimit = c (0, 1600)
hist1 = qplot (age, data = TrainSet[incomeBelow50K,], margins = TRUE,
binwidth = 2, xlim = xlimit, ylim = ylimit, colour = incomelevel)
hist2 = qplot (age, data = TrainSet[!incomeBelow50K,], margins = TRUE,
binwidth = 2, xlim = xlimit, ylim = ylimit, colour = incomelevel)
grid.arrange (hist1, hist2, nrow = 2)

直方图 – 数据科学项目

上图表明年龄变量随收入水平而变化,因此它是一个强有力的预测变量。

探索“educationnum”变量

该变量表示个人的受教育年限。让我们看看 'educationnum' 变量如何随收入水平变化:

1
2
3
4
5
6
7
8
> summary (TrainSet$educationnum)
Min. 1st Qu. Median Mean 3rd Qu. Max.
1.00 9.00 10.00 10.12 13.00 16.00
#Boxplot for education-num variable
boxplot (educationnum ~ incomelevel, data = TrainSet,
main = "Years of Education distribution for different income levels",
xlab = "Income Levels", ylab = "Years of Education", col = "green")

数据探索 (educationnum) – 数据科学项目

上图描述了 'educationnum' 变量随着收入水平 <=50k 和 >50k 的变化而变化,因此证明它是预测结果的重要变量。

探索资本收益和资本损失变量

在研究了每个收入水平的资本收益和资本损失变量的汇总后,很明显它们的均值差异很大,因此表明它们是预测个人收入水平的合适变量。

1
2
3
4
5
6
7
8
9
> summary (TrainSet[ TrainSet$incomelevel == "<=50K",
+                        c("capitalgain", "capitalloss")])
capitalgain       capitalloss
Min.   :    0.0   Min.   :   0.00
1st Qu.:    0.0   1st Qu.:   0.00
Median :    0.0   Median :   0.00
Mean   :  148.9   Mean   :  53.45
3rd Qu.:    0.0   3rd Qu.:   0.00
Max.   :41310.0   Max.   :4356.00

探索小时/周变量

同样,评估“hoursperweek”变量以检查它是否是一个重要的预测变量。

1
2
3
4
5
6
7
8
9
#Evaluate hours/week variable
> summary (TrainSet$hoursperweek)
Min. 1st Qu. Median Mean 3rd Qu. Max.
1.00 40.00 40.00 40.93 45.00 99.00
boxplot (hoursperweek ~ incomelevel, data = TrainSet,
main = "Hours Per Week distribution for different income levels",
xlab = "Income Levels", ylab = "Hours Per Week", col = "salmon")

数据探索(每周小时数) – 数据科学项目 

箱线图显示了不同收入水平的明显变化,这使其成为预测结果的重要变量。

同样,我们也将评估分类变量。在下面的部分中,我为每个变量创建了 qplots,在评估了这些图之后,很明显这些变量对于预测个人的收入水平至关重要。

探索工作类变量

1
2
#Evaluating work-class variable
qplot (incomelevel, data = TrainSet, fill = workclass) + facet_grid (. ~ workclass)

数据探索 (workclass) – 数据科学项目

1
2
#Evaluating occupation variable
qplot (incomelevel, data = TrainSet, fill = occupation) + facet_grid (. ~ occupation)

数据探索(职业) – 数据科学项目 

1
2
#Evaluating marital-status variable
qplot (incomelevel, data = TrainSet, fill = maritalstatus) + facet_grid (. ~ maritalstatus)

数据探索 (martialstatus) – 数据科学项目 

1
2
#Evaluating relationship variable
qplot (incomelevel, data = TrainSet, fill = relationship) + facet_grid (. ~ relationship)

数据探索(关系) – 数据科学项目 

所有这些图表都表明,这些预测变量集对于构建我们的预测模型非常重要。

第 4 步:建立模型

扫码免登录支付
本文章为付费文章,是否支付1宇宙币后完整阅读?

如果您已购买过该文章,[登录帐号]后即可查看

随机图文