SQL 与 T-SQL:了解差异
March 4, 2021
SQL 或 T-SQL——你需要学习哪一个?
SQL 和 T-SQL 在数据库和数据科学行业中都有大量的使用。但是它们到底是什么呢?这两种查询语言在名称和功能上都非常相似,因此很难理解它们之间的区别。
在这篇文章中,我们将:定义什么是标准 SQL 和 T-SQL,研究它们之间的区别,提供各自的例子,总结你应该学习哪一个以及为什么。
- 定义什么是标准 SQL 和 T-SQL
- 调查它们之间的差异
- 提供每个的示例
- 总结你应该学习哪些内容,为什么要学
什么是标准 SQL?
标准 SQL,通常简称为“SQL”,是一种称为查询语言的编程语言。查询语言用于与数据库通信。
SQL 用于添加、检索或更新存储在数据库中的数据。它被用于许多不同类型的数据库。也就是说,如果你学习了 SQL 的基础,你将在数据职业生涯中处于有利地位。
数据库和存储在其中的数据是许多公司运营的核心部分。一个简单的例子是,零售商可能会将订单或客户信息存储在数据库中。SQL 是一种允许公司处理这些数据的编程语言。
什么是 T-SQL?
T-SQL 代表 Transact-SQL,有时也称为 TSQL,是主要在 Microsoft SQL Server 中使用的 SQL 语言的扩展。这意味着它提供了 SQL 的所有功能,但增加了一些额外的功能。
你可以把它想象成一种 SQL 方言——它非常类似于常规的 SQL,但是它有一些额外的和不同的地方,使它独一无二。
尽管标准 SQL 有清晰而严格的规范,但它确实允许数据库公司添加自己的扩展,以使它们有别于其他产品。对于 Microsoft SQL Server 数据库来说,T-SQL 就是这样一个例子— T-SQL 是该软件的核心,并且在其中运行大多数操作。
大多数主要的数据库供应商都为自己的产品提供了自己的 SQL 语言扩展,T-SQL 就是其中使用最广泛的一个例子(因为 Microsoft SQL server 很流行)。
简而言之:当您在 Microsoft SQL Server 中编写查询时,您可以有效地使用 T-SQL。无论应用程序的用户界面如何,所有与 SQL Server 通信的应用程序都是通过向服务器发送 T-SQL 语句来进行通信的。
但是,除了 SQL Server,其他数据库管理系统(DBMS)也支持 T-SQL。另一款微软产品 Microsoft Azure SQL Database 支持 T-SQL 的大部分功能。
T-SQL 旨在使支持它的数据库的工作更容易、更高效。
SQL 和 T-SQL 有什么区别?
现在我们已经介绍了这两者的基础知识,让我们来看看它们的主要区别:
差异#1
明显的区别在于它们的设计目的:SQL 是一种用于操作存储在数据库中的数据的查询语言。T-SQL 也是一种查询语言,但它是 SQL 的扩展,主要用于 Microsoft SQL Server 数据库和软件。
差异#2
SQL 是开源的。T-SQL 由微软开发并拥有。
差异#3
SQL 语句一次执行一条,也称为“非过程化”T-SQL 以一种“过程化”的方式执行语句,这意味着代码将作为一个块,在逻辑上以结构化的顺序进行处理。
每种方法都有优点和缺点,但从学习者的角度来看,这种差异并不太重要。您将能够以任何一种语言获取和处理您想要的数据,只是根据您使用的语言和查询的具体情况,您处理数据的方式会有所不同。
差异#4
除了这些更普遍的差异之外,SQL 和 T-SQL 还有一些稍微不同的命令关键字。T-SQL 还具有不属于常规 SQL 的功能。
这方面的一个例子是我们如何选择最上面的 X 行。在标准 SQL 中,我们会使用 LIMIT 关键字。在 T-SQL 中,我们使用 TOP 关键字。
这两个命令做同样的事情,正如我们在下面的例子中看到的。这两个查询都将返回 users 表中按 age 列排序的前十行。
SQL 示例
SELECT *
FROM users
ORDER BY age
LIMIT 10;
T-SQL 示例
SELECT TOP 10 (*)
FROM users
ORDER BY age;
差异#5
最后,如前所述,T-SQL 提供了常规 SQL 中没有的功能。ISNULL 函数就是一个例子。这将替换来自特定列的空值。对于年龄列中值为 NULL 的任何行,下面的将返回年龄“0”。
SELECT ISNULL(0, age)
FROM users;
(当然,在标准 SQL 中也有这样做的种方式,但是命令略有不同。)
这些只是一些代码差异,让您对两者的比较有所了解,当然,还有更多。通过我们丰富的指南,您可以了解更多关于 SQL 命令的信息。当然,微软有与 T-SQL 一起工作的文档。
学哪个比较好?
如果你想以任何方式使用数据库,或者如果你正在寻找一份数据工作,学习 SQL 是必要的。
因为 T-SQL 是 SQL 的扩展,所以在开始之前,您需要学习 SQL 的基础知识。如果您首先学习 T-SQL,无论如何,您最终都会学到标准 SQL 的知识。
对于大多数事情来说,你选择学什么应该取决于你想要达到的目标。如果您打算使用 Microsoft SQL server,那么学习更多关于 T-SQL 的知识是值得的。如果你是一个初学使用数据库的人,那就从学习 SQL 开始吧。
如果你想了解关于这个话题的更多信息,请查看 Dataquest 的交互式SQL 和数据库介绍课程,以及我们的 SQL 基础知识,帮助你在大约 2 个月内掌握这些技能。
用正确的方法学习 SQL!
- 编写真正的查询
- 使用真实数据
- 就在你的浏览器里!
当你可以 边做边学 的时候,为什么要被动的看视频讲座?
在 R 中使用线性回归进行预测建模
原文:https://www.dataquest.io/blog/statistical-learning-for-predictive-modeling-r/
May 16, 2018
在 R 编程中,预测模型对于预测未来的结果和估计那些不切实际的度量是非常有用的。例如,数据科学家可以使用预测模型根据降雨量和温度预测作物产量,或者确定具有某些特征的患者是否更有可能对新药产生不良反应。
在我们具体讨论线性回归之前,让我们提醒自己典型的数据科学工作流可能是什么样子。很多时候,我们会从一个我们想回答的问题开始,然后做如下的事情:
- 收集一些与问题相关的数据(越多越好)。
- 如果需要,将数据清理、扩充和预处理成方便的形式。
- 对数据进行探索性分析,以便更好地理解数据。
- 以你的发现为指导,构建数据的某个方面的模型。
- 使用该模型来回答您开始提出的问题,并验证您的结果。
线性回归是数据科学家用于预测建模的最简单、最常用的监督机器学习算法之一。在本帖中,我们将使用线性回归来构建一个模型,该模型可以根据研究树木的人更容易测量的指标来预测樱桃树的体积。
在这篇博文中,我们将使用 R 来探索这个数据集,并学习线性回归的基础知识。如果你是学习 R 语言的新手,我们推荐我们的 R 基础和 R 编程:中级课程,它们来自我们的 R 数据分析师路径。掌握一些非常基本的统计学知识也会有所帮助,但是如果你知道什么是均值和标准差,你就能理解了。如果您想自己练习构建模型和可视化,我们将使用下面的 R 包:
data sets
这个包包含了各种各样的练习数据集。我们将使用其中的一个“树”来学习构建线性回归模型。ggplot2
我们将使用这个流行的数据可视化包来构建我们的模型图。GGally
这个包扩展了ggplot2
的功能。我们将使用它来创建一个绘图矩阵,作为我们初始探索性数据可视化的一部分。scatterplot3d
我们将使用这个软件包来可视化更复杂的具有多个预测因子的线性回归模型。
他们是如何测量树木体积的?
树数据集包含在 base R 的datasets
包中,它将帮助我们回答这个问题。由于我们正在使用一个现有的(干净的)数据集,上面的步骤 1 和 2 已经完成,所以我们可以直接跳到步骤 3 中的一些初步探索性分析。这个数据集是什么样子的?
data(trees) ## access the data from R’s datasets package
head(trees) ## look at the first several rows of the data
| 肚带 | 高度 | 卷 |
| Eight point three | Seventy | Ten point three |
| Eight point six | Sixty-five | Ten point three |
| Eight point eight | Sixty-three | Ten point two |
| Ten point five | seventy-two | Sixteen point four |
| Ten point seven | Eighty-one | Eighteen point eight |
| Ten point eight | Eighty-three | Nineteen point seven |
str(trees) ## look at the structure of the variables
| $围长:数量 | 8.3 8.6 8.8 10.5 10.7 10.8 11 11 11.1 11.2 … |
| $高度:数字 | 70 65 63 72 81 83 66 75 80 75 … |
| $ Volume:一个 | 10.3 10.3 10.2 16.4 18.8 19.7 15.6 18.2 22.6 19.9 … |
该数据集由描述黑樱桃树的 3 个数值变量的 31 个观察值组成:
- 树干周长(英寸)
- 高度(英尺)
- 体积(英尺 ³
这些指标对于研究树木生态的森林学家和科学家来说是有用的信息。使用基本的林业工具来测量树的高度和周长是相当简单的,但是测量树的体积要困难得多。如果你不想真的砍倒和拆除这棵树,你不得不求助于一些技术上具有挑战性和耗时的活动,如爬树和进行精确测量。能够从高度和/或围长准确预测树木体积将是有用的。
为了决定我们是否可以建立一个预测模型,第一步是看看我们的预测变量和反应变量(在这种情况下是周长、高度和体积)之间是否存在关系。让我们做一些探索性的数据可视化。我们将使用GGally
包中的 ggpairs()
函数来创建一个绘图矩阵,以查看变量之间的关系。
ggpairs(data=trees, columns=1:3, title="trees data")
ggpairs()
函数为我们提供了每个变量组合的散点图,以及每个变量的密度图和变量之间的相关性强度。
如果你以前用过ggplot2
,这个符号可能看起来很熟悉:GGally
是ggplot2
的扩展,它提供了一个简单的接口来创建一些复杂的图形,就像这个一样。当我们看这些图时,我们可以开始了解数据并提出问题。相关系数提供了关于变量有多接近某种关系的信息;相关系数越接近 1,关系越强。散点图让我们可以看到变量对之间的关系。散点图中的点具有清晰的视觉模式(与看起来像不成形的云相反),表明关系更强。
我们的问题:**哪些预测变量似乎与响应变量相关?**从查看ggpairs()
输出来看,周长肯定似乎与体积相关:相关系数接近 1,并且点似乎具有线性模式。高度和体积之间可能存在关系,但似乎是一种较弱的关系:相关系数较小,散点图中的点更分散。变量之间的关系是什么形状?
这种关系似乎是线性的;从散点图中,我们可以看到,随着树围的增加,树的体积不断增加。**是相关性强,还是数据中的噪音淹没了信号?**身高和体积之间的关系不太清楚,但腰围和体积之间的关系似乎很强。现在,我们已经对数据有了相当全面的了解,我们可以进入第 4 步,进行一些预测建模。
形成一个假设
假设是关于我们认为数据发生了什么的有根据的猜测。在这种情况下,我们假设樱桃树的周长和体积是相关的。我们形成的每个假设都有一个对立面:“零假设”( H [0] )。这里,我们的无效假设是周长和体积不相关。在统计学中,零假设是我们用数据来支持或拒绝的假设;我们永远不能说我们“证明”了一个假设。我们称周长和体积相关的假设为“另类”假设( H [a] )。总结一下: H [0] :围长和体积没有关系 H [a] :围长和体积有一定的关系我们用线性回归模型来检验我们的假设。如果我们找到足够有力的证据来拒绝H[0],那么我们就可以用这个模型从围长来预测樱桃树的体积。
线性回归模型的构建模块
线性回归描述了感兴趣的响应变量(或因变量)和一个或多个预测变量(或自变量)之间的关系。它有助于我们将信号(我们可以从预测变量中了解到的响应变量)与噪声(我们无法从预测变量中了解到的响应变量)分开。随着我们的进展,我们将更深入地研究这个模型是如何做到这一点的。
让我们深入研究,建立一个树木体积和周长的线性模型。r 用基本函数lm()
使这变得简单明了。
fit_1 <- lm(Volume ~ Girth, data = trees)
lm()
函数为我们的数据拟合一条线,这条线尽可能接近我们的所有 31 个观察值。更具体地说,它以这样一种方式拟合直线,使得点和直线之间的平方差之和最小化;这种方法被称为“最小化最小二乘法”即使线性回归模型很好地拟合了数据,拟合也不是完美的。我们的观测值和它们的模型预测值之间的距离称为 残差 。
数学上,我们可以把线性回归的方程写成:Y≈β0+β1X+ε
- Y 和 X 变量是我们相互关联的数据中的响应和预测变量
- β0 是模型系数,代表模型截距,或与 y 轴相交的位置
- β1 是代表模型斜率的模型系数,该数字给出了关于直线的陡度及其方向(正或负)的信息
- ε 是误差项,包含了我们在模型中无法捕捉的可变性(X 无法告诉我们关于 Y 的事情)
以我们的例子为例:树量≈ 截距 + 斜率(树围)+ 误差
lm()
函数估计它拟合到我们的数据的线性模型的截距和斜率系数。有了模型,我们可以继续第 5 步,记住我们还有一些工作要做,以验证这个模型实际上是适合数据的。
我们可以用这个模型来做预测吗?
我们能否使用我们的模型进行预测将取决于:
- 我们是否可以拒绝变量之间没有关系的零假设。
- 模型是否适合我们的数据。
让我们使用summary()
调用我们模型的输出。模型输出将为我们提供所需的信息,以测试我们的假设并评估模型与数据的吻合程度。
summary(fit_1)
让我们浏览一下输出,回答每个问题。
假设得到支持了吗?
系数:估计值和标准值。错误:
- 如果围长值为零,我们示例中的截距就是期望的树木体积。当然,我们不能有一棵负体积的树,但以后会有更多。
- 我们例子中的斜率是树围对树体积的影响。我们看到树围每增加一英寸,树的体积就增加 5.0659 英尺。
- 系数标准误差告诉我们估计系数与我们响应变量的实际平均值的平均偏差。
t 值:
Pr( > |t|) :
- 这个数字就是 p 值,定义为如果H[0]为真,观察到任何值等于或大于 t 的概率。t 统计值越大,p 值越小。通常,我们使用 0.05 作为显著性的临界值;当 p 值小于 0.05 时,我们拒绝 H [0] 。
我们可以拒绝零假设,而相信树的宽度和体积之间有关系。
模型与数据的吻合程度如何?
残差:
- 输出的这一部分为我们提供了残差的摘要(回想一下,这些是我们的观察值和模型之间的距离),它告诉我们一些关于我们的模型与我们的数据的拟合程度。残差应该在零附近有一个非常对称的分布。一般来说,我们希望残差在零附近呈正态分布(即钟形曲线分布),但重要的是,它们没有明显的视觉模式,这表明线性模型不适合数据。
我们可以使用ggplot2
制作一个直方图来直观显示这一点。
ggplot(data=trees, aes(fit_1$residuals)) +
geom_histogram(binwidth = 1, color = "black", fill = "purple4") +
theme(panel.background = element_rect(fill = "white"),
axis.line.x=element_line(),
axis.line.y=element_line()) +
ggtitle("Histogram for Model Residuals")
我们的残差在 0 附近看起来非常对称,表明我们的模型很好地符合数据。残差标准误差:
- 这一项表示我们的响应变量测量值偏离拟合线性模型的平均量(模型误差项)。
自由度:
- 对自由度的讨论可能变得相当专业。就本文的目的而言,将它们视为用于计算估计值的独立信息片段的数量就足够了。自由度与测量次数有关,但并不相同。
多个 R 平方:
- R² 值是我们的数据与线性回归模型接近程度的度量。R²值始终在 0 和 1 之间;接近 1 的数字表示模型非常合适。 R²
F 统计:
- 这个测试统计量告诉我们在我们测试的因变量和自变量之间是否有关系。一般来说,一个大的 F 表示更强的关系。
p 值:
- 该 p 值与 F 统计相关,用于解释整个模型与我们的数据拟合的显著性。
让我们来看看适合我们的宽度和体积数据的模型。我们可以通过使用ggplot()
将线性模型拟合到我们数据的散点图来做到这一点:
ggplot(data = trees, aes(x = Girth, y = Volume)) +
geom_point() +
stat_smooth(method = "lm", col = "dodgerblue3") +
theme(panel.background = element_rect(fill = "white"),
axis.line.x=element_line(),
axis.line.y=element_line()) +
ggtitle("Linear Model Fitted to Data")
线周围的灰色阴影表示置信区间为 0.95,这是 stat_smooth()
函数的默认值,它平滑数据以使模式更容易可视化。这个 0.95 的置信区间是所有黑樱桃树围长和体积的真实线性模型位于拟合我们数据的回归模型的置信区间内的概率。尽管这个模型非常符合我们的数据,但在我们的观察中仍然存在可变性。
这是因为这个世界普遍不整洁。在我们的模型中,树木体积不仅仅是树围的函数,也是我们不一定有数据可以量化的事物的函数(树干形状之间的个体差异,林业工作者树干围长测量技术的微小差异)。有时,这种可变性掩盖了反应变量和预测变量之间可能存在的任何关系。但在这里,我们的数据中的信号足够强,让我们开发出一个有用的模型来进行预测。
使用我们简单的线性模型进行预测
我们的模型适合做预测!各地的树木科学家欢欣鼓舞。假设我们有一棵树的围长、高度和体积数据,但这些数据被排除在数据集之外。我们可以用这棵树来测试我们的模型。
肚带 | 高度 | 卷 |
---|---|---|
18.2 英寸 | 72 英尺 | 46.2 英尺 ³ |
我们的模型从树的周长预测树的体积会有多好?我们将使用predict()
函数,这是一个通用的 R 函数,用于从模型拟合函数的模块中进行预测。predict()
将我们的线性回归模型和我们需要响应变量值的预测变量的值作为参数。
predict(fit_1, data.frame(Girth = 18.2))
我们的体积预测是 55.2 英尺³。这接近我们的实际值,但有可能将我们的另一个预测变量高度添加到我们的模型中,可能会让我们做出更好的预测。
添加更多预测因子:多元线性回归
如果我们使用所有可用的信息(宽度和高度)来预测树木体积,也许我们可以提高模型的预测能力。重要的是,从帖子开始的五步过程实际上是一个迭代过程——在现实世界中,你会获得一些数据,建立一个模型,根据需要调整模型以改进它,然后可能会添加更多的数据并建立一个新的模型,等等,直到你对结果满意和/或确信你不能做得更好。我们可以建立两个独立的回归模型并对它们进行评估,但是这种方法存在一些问题。首先,想象一下,如果我们有 5 个、10 个甚至 50 个预测变量,那会有多麻烦。第二,两个预测模型将为我们提供两个独立的预测量,而不是我们追求的单一预测量。也许最重要的是,建立两个独立的模型并不能让我们在估计模型系数时考虑预测因子之间的关系。在我们的数据集中,基于我们最初的数据探索,我们怀疑树的高度和围长是相关的。正如我们将在本文中更清楚地看到的,忽略预测变量之间的这种相关性会导致关于它们与树木体积关系的误导性结论。更好的解决方案是建立一个包含多个预测变量的线性模型。我们可以通过为我们的模型中感兴趣的每个额外独立变量添加一个斜率系数来做到这一点。
树体≈ 截距 + 斜率 1 (树围)+ 斜率 2 (树高)+ 误差
使用lm()
函数很容易做到这一点:我们只需要添加另一个预测变量。
fit_2 <- lm(Volume ~ Girth + Height, data = trees)
summary(fit_2)
我们可以从模型输出中看到,围长和高与体积显著相关,并且模型很好地符合我们的数据。我们调整后的 R² 值也比我们调整后的 R² 型号
fit_1
高一点。因为我们在这个模型中有两个预测变量,我们需要一个第三维度来可视化它。我们可以使用包scatterplot3d
创建一个漂亮的 3d 散点图:首先,我们为预测变量(在我们的数据范围内)制作一个网格。expand.grid()
函数根据因子变量的所有组合创建一个数据框。
Girth <- seq(9,21, by=0.5) ## make a girth vector
Height <- seq(60,90, by=0.5) ## make a height vector
pred_grid <- expand.grid(Girth = Girth, Height = Height)
## make a grid using the vectors
接下来,我们基于预测变量网格对体积进行预测:
pred_grid$Volume2 <-predict(fit_2, new = pred_grid)
现在,我们可以根据预测网格和预测体积制作 3d 散点图:
fit_2_sp <- scatterplot3d(pred_grid$Girth, pred_grid$Height, pred_grid$Volume2, angle = 60, color = "dodgerblue", pch = 1, ylab = "Hight (ft)", xlab = "Girth (in)", zlab = "Volume (ft3)" )
最后叠加我们的实际观察结果,看看它们有多吻合:
fit_2_sp$points3d(trees$Girth, trees$Height, trees$Volume, pch=16)
让我们看看这个模型如何预测我们的树的体积。这一次,我们包括树的高度,因为我们的模型使用高度作为预测变量:
predict(fit_2, data.frame(Girth = 18.2, Height = 72))
这一次,我们得到的预测体积为 52.13 英尺 ³ 。这个预测比我们用简单的模型得到的预测更接近真实的树木体积,这个模型只用围长作为预测因子,但是,正如我们将要看到的,我们也许可以改进。
互动会计
虽然我们已经做出了改进,但我们刚刚构建的模型仍然不能说明全部情况。它假设树围对材积的影响独立于树高对材积的影响。这显然不是事实,因为树的高度和周长是相关的;更高的树往往更宽,我们的探索性数据可视化表明了这一点。换句话说,腰围的斜率应该随着身高斜率的增加而增加。为了说明我们模型中预测变量的这种非独立性,我们可以指定一个交互项,它被计算为预测变量的乘积。
树体≈ 截距 + 坡度 1 (树围)+ 坡度 2 (树高)+ 坡度 3 (树围 x 树高)+ 误差
同样,使用lm()
很容易构建这个模型:
fit_3 <- lm(Volume ~ Girth * Height, data = trees)
summary(fit_3)
注意,在我们的模型中,**“周长高度”术语是“周长+高度+周长高度”**的简写。正如我们所猜测的,树高和树围的交互作用是显著的,这表明我们应该在我们用来预测树木体积的模型中包括交互作用项。调整后的R²值接近 1,f 的大值和 p的小值也支持这一决定,表明我们的模型非常适合该数据。让我们来看一个散点图,用这个模型来直观地显示树木体积的预测值。我们可以使用为
fit_2
可视化生成的预测值的相同网格:
Girth <- seq(9,21, by=0.5)
Height <- seq(60,90, by=0.5)
pred_grid <- expand.grid(Girth = Girth, Height = Height)
类似于我们如何可视化fit_2
模型,我们将使用带有交互项的fit_3
模型来预测预测变量网格中的体积值:
pred_grid$Volume3 <-predict(fit_3, new = pred_grid)
现在我们制作预测网格和预测体积的散点图:
fit_3_sp <- scatterplot3d(pred_grid$Girth, pred_grid$Height, pred_grid$Volume3, angle = 60, color = "dodgerblue", pch = 1, ylab = "Hight (ft)", xlab = "Girth (in)", zlab = "Volume (ft3)")
最后,我们叠加我们观察到的数据:
fit_3_sp$points3d(trees$Girth, trees$Height, trees$Volume, pch=16)
在这幅图中有点难以看出,但这次我们的预测位于某个曲面上,而不是平面上。现在是关键时刻:让我们用这个模型来预测我们的树的体积。
predict(fit_3, data.frame(Girth = 18.2, Height = 72))
我们使用第三个模型的预测值是 45.89 ,最接近我们的真实值 46.2 英尺³。
关于预测模型的一些注意事项
请记住您的数据范围
使用模型进行预测时,最好避免试图外推至远远超出用于构建模型的值的范围。为了说明这一点,让我们试着估算一棵小树苗(幼树)的体积:
predict(fit_3, data.frame(Girth = 0.25, Height = 4))
我们得到的预测体积为 62.88 英尺(T1 3 T2 T3),比我们数据集中的大树还要大。这当然说不通。请记住,我们做出准确预测的能力受到我们用来构建模型的数据范围的限制。
避免制作过于特定于数据集的模型
在本帖中我们研究的简单示例数据集中,向我们的模型添加第二个变量似乎提高了我们的预测能力。然而,当尝试具有许多差异变量的多种多元线性回归模型时,选择最佳模型变得更具挑战性。如果添加了太多不能提高模型预测能力的项,我们就有可能使我们的模型“过度适应”我们的特定数据集。
过度适应特定数据集的模型会失去预测未来事件或适应不同数据集的功能,因此不是非常有用。虽然我们在本文中用于评估模型有效性的方法(调整后的 R² ,残差分布)有助于了解您的模型与您的数据的拟合程度,但将您的模型应用于数据集的不同子集可以提供有关您的模型在实践中表现如何的信息。
这种方法被称为“交叉验证”,通常用于测试预测模型。在我们的例子中,我们使用三个模型中的每一个来预测一棵树的体积。然而,如果我们在构建更复杂的模型,我们会希望保留一部分数据用于交叉验证。
后续步骤
我们使用线性回归来建立从两个连续预测变量预测连续响应变量的模型,但线性回归对于许多其他常见场景来说是一种有用的预测建模工具。
下一步,尝试建立线性回归模型,从两个以上的预测变量预测反应变量。考虑如何决定回归模型中包含哪些变量;你如何判断哪些是重要的预测因素?预测变量之间的关系如何影响这个决定?
R 中对处理多元线性回归问题有用的数据集包括:airquality
、iris
和mtcars
。从数据中构建模型的另一个重要概念是用从现有数据中计算出的新预测值来扩充数据。这就是所谓的特征工程,在这里你可以运用你自己的专业知识来解决问题。
例如,如果您正在查看一个将时间戳作为变量之一的银行交易数据库,那么星期几可能与您想要回答的问题相关,因此您可以根据时间戳计算出该日期,并将其作为一个新变量添加到数据库中。这是一个复杂的主题,添加更多的预测变量并不总是一个好主意,但随着您对建模了解的深入,您应该记住这一点。在这篇文章使用的树木数据集中,你能想出任何额外的数量来计算周长和高度,这将有助于你预测体积吗?(提示:回想一下你学习各种几何形状体积公式的时候,想想一棵树是什么样子的。)
最后,虽然我们关注的是连续数据,但是线性回归也可以扩展到从分类变量进行预测。尝试使用线性回归模型从分类变量和连续预测变量中预测反应变量。R 中有几个数据集特别适合这个练习:ToothGrowth
、PlantGrowth
和npk
。
准备好提升你的 R 技能了吗?
我们 R path 的数据分析师涵盖了你找到工作所需的所有技能,包括:
- 使用 ggplot2 进行数据可视化
- 使用 tidyverse 软件包的高级数据清理技能
- R 用户的重要 SQL 技能
- 统计和概率的基础知识
- …还有多得多的
没有要安装的东西,没有先决条件,也没有时间表。
统计学新课程:R 中的条件概率
原文:https://www.dataquest.io/blog/statistics-course-conditional-probability-in-r/
January 14, 2020
借助我们快速发展的数据分析师 R 学习路径中的最新成员:R中的条件概率,让您的数据科学和统计知识更上一层楼。
在本课程中,您将学习条件概率的基础知识,然后深入探讨更高级的概念,如贝叶斯定理和朴素贝叶斯算法。随着你的学习,你将运用你的 R 技能将理论付诸实践,并建立这些关键统计概念的工作知识。
准备好开始学习了吗?单击下面的按钮深入研究 R 中的条件概率,或者向下滚动以了解关于这门新课程的更多信息。
## R 中的条件概率涵盖了哪些内容?*
条件概率是概率论的一个领域,顾名思义,它是根据特定条件来衡量特定事件发生的概率。
在本课程中,我们将从一些基础概念的课程开始,如条件概率公式、乘法法则、统计相关性和独立性等。本课程建立在中的概率基础课程的基础上。
从那里,我们将看看贝叶斯定理以及它如何被用来计算概率。我们将检查先验和后验概率分布。然后,我们将通过了解朴素贝叶斯算法(数据科学家使用的一种常用统计工具)来深入研究和应用这些统计概念。
最后,您将在一个新的指导项目中将所有新知识付诸实践,该项目要求您使用超过 5,000 条消息的数据集,采用朴素贝叶斯算法构建一个垃圾短信过滤器。
本课程结束时,你将能够运用条件概率的规则,根据条件为事件分配概率。你会知道这些事件何时对其他事件有(或没有)统计相关性。您将能够使用贝叶斯定理基于先验知识分配概率。
当然,您已经构建了一个很酷的垃圾短信过滤器,它利用了朴素贝叶斯算法(以及您在整个学习过程中构建的所有 R 编程技能)!
为什么我需要知道这些?
条件概率是统计学的一个重要领域,在数据分析和数据科学工作中经常出现。理解这一点对于确保你的分析建立在坚实的统计基础上是很重要的,并且你不会从你的数据中得出错误的结论。
实际上,关于贝叶斯定理和朴素贝叶斯算法的问题在数据科学工作面试中相当常见。例如,你可能会被要求解释朴素贝叶斯算法的“本质”是什么。理解它是如何工作的——我们将在本课程中介绍——有助于你证明你不仅仅是从 GitHub 复制粘贴,而且你真正理解你的分析背后的数学。
那么为什么要等呢?今天开始学习条件概率:
还没准备好投入进去吗?今天就开始学习 R 吧,你很快就会为这门新课程做好准备。另外,我们的前两门 R 课程完全免费😗
新 Python 统计教程:条件概率
原文:https://www.dataquest.io/blog/statistics-course-conditional-probability-python/
October 31, 2019
借助我们最新增加的数据科学课程: 条件概率 ,让您的数据科学和统计知识更上一层楼。
在本课程中,您将学习条件概率的基础知识,然后深入探讨更高级的概念,如贝叶斯定理和朴素贝叶斯算法。随着您的学习,您将使用 Python 技能将理论付诸实践,并构建这些关键统计概念的工作知识。
准备好开始学习了吗?点击下面的按钮深入了解条件概率,或者向下滚动以了解关于这门新课程的更多信息。
*## 条件概率涵盖了哪些内容?
条件概率是概率论的一个领域,顾名思义,它是根据特定条件来衡量特定事件发生的概率。
本课程建立在之前的概率基础课程的基础上,我们将从一些基础概念开始,如条件概率公式、乘法规则、统计相关性和独立性等。
从那里,我们将看看贝叶斯定理以及它如何被用来计算概率。我们将检查先验和后验概率分布。然后,我们将通过了解朴素贝叶斯算法(数据科学家使用的一种常用统计工具)来深入研究和应用这些统计概念。
最后,您将在一个新的指导项目中将所有新知识付诸实践,该项目要求您使用超过 5,000 条消息的数据集,采用朴素贝叶斯算法构建一个垃圾短信过滤器。
本课程结束时,你将能够运用条件概率的规则,根据条件为事件分配概率。你会知道这些事件何时对其他事件有(或没有)统计相关性。您将能够使用贝叶斯定理基于先验知识分配概率。
当然,您将构建一个很酷的垃圾短信过滤器,它利用了朴素贝叶斯算法(以及您的 Python 编程技能)!
为什么我需要知道这些?
条件概率是统计学的一个重要领域,在数据分析和数据科学工作中经常出现。理解这一点对于确保你的分析建立在坚实的统计基础上是很重要的,并且你不会从你的数据中得出错误的结论。
实际上,关于贝叶斯定理和朴素贝叶斯算法的问题在数据科学工作面试中相当常见。例如,你可能会被要求解释朴素贝叶斯算法的“本质”是什么。理解它是如何工作的——我们将在本课程中介绍——有助于你证明你不仅仅是从 GitHub 复制粘贴,而且你真正理解你的分析背后的数学。
那么为什么要等呢?今天开始学习条件概率:
停止拖延,开始用科学来学习
原文:https://www.dataquest.io/blog/stop-procrastinating-science-based/
May 2, 2019
我希望我能停止拖延。这可能是自古以来每个学生都说过的一句话。
拖延对于在线学生来说是一个特别的问题(就像你们这些在我们平台上学习数据科学的人一样),因为在线学习非常方便。如果你翘了一堂大学课,你就错过了,而且永远也补不回来。但是很容易告诉自己,你可以跳过今晚的学习课,明天再补上。
此外,对于在线学生来说,拖延的诱惑可能更强,他们经常试图将他们的学习融入已经忙碌的生活,其中可能包括全职工作或其他领域的学习。
那么如何停止拖延呢?有几十种理论(和大约一百万篇文章)声称拥有这个秘密,但是让我们来看看实际的科学是怎么说的。
什么是拖延症?
拖延症是一个适用于许多拖延工作的行为的术语,但重要的是要指出,并非所有这些都是真正的拖延症。举例来说,在试图解决问题之前花时间思考它并不是拖延症,尽管它有时被贴上拖延症的标签。当你有一张要做的事情的清单时,花时间去组织和排列优先次序也是一样。
约瑟夫·法拉利博士说,这些有益的拖延和有害的拖延的区别在于程度。任何人都可能在开始工作前花时间按优先顺序组织一份任务清单。但是如果你发现自己写下了清单,然后重写,然后开始一项任务,但又回去重新整理清单,然后复制一些……这就是拖延症。
拖延只是一种行为,它本身没有好坏之分。研究表明,它甚至有一些短期的心理好处。例如,在的一项研究 (PDF 链接)中,拖拉的学生在整个学期中报告了较低的压力水平,可能是因为他们在做更多有趣的事情,而不是做他们推迟的工作。
然而,从长远来看,对于那些关心有效学习成绩,甚至普遍快乐的人来说,拖延有一些非常明显的缺点。在那项研究中,拖延的学生报告说,随着截止日期的临近,他们的压力水平急剧上升,他们的成绩比那些没有拖延的同学“明显更低”。
从长远来看,很明显,如果学生们能够停止拖延,他们会过得更好。“拖延者最终比其他人遭受更多痛苦,表现更差,”该研究的作者总结道。
我们为什么拖延
如果拖延从长远来看对我们如此有害,我们为什么还要这样做呢?一种理论认为,这是一种自卫应对策略,旨在让他人(或我们自己)相信,我们所缺乏的只是努力而不是天生的能力。
一项表明这一点的研究将自称拖延者的人放入实验室,告诉他们在完成任务之前有 15 分钟的练习时间。所有受试者都被要求完成相同的任务,但对它的描述不同——对一些受试者来说,这被称为一项可以衡量他们认知技能的数学任务,而其他人则被告知这是一项“有趣的游戏”
在 15 分钟的练习期间,受试者可以玩电子游戏和其他有趣的活动。当拖延者被告知即将到来的任务是对他们技能的重要衡量时,他们比被告知这是一个“有趣的游戏”时花更多的时间拖延因此,该研究的作者得出结论,拖延可能是一种故意的“自我障碍”,一种在我们认为重要的任务没有做好的情况下给自己找借口的方式。
另一个理论是拖延症是关于用长期的不适换取短期的快乐和压力减轻。回想一下对拖延的大学生的研究:从长远来看,他们经历了更多的压力和更差的结果,但从短期来看,他们比那些跟上进度的学生压力更小。这种短期回报可能是导致许多拖延行为的原因。
当然,这些只是理论。还有其他原因,也有可能拖延症更多的是生理上的,而不是心理上的。最近的一项研究发现,自称拖延者的大脑往往有更大的杏仁核——这是大脑的一部分,它警告你做某事的潜在负面影响。他们的杏仁核和背侧前扣带皮层之间的连接也较少,这有助于你在决定是否实际做某事时处理来自杏仁核的信息。
当然,这并不意味着拖延者注定会被他们的大脑结构所左右(而且心理学和过去的行为会在多大程度上影响大脑结构还不清楚)。各种研究表明,各种各样的因素,从目前的情绪到任务的难度和不愉快程度,都会对我们拖延的程度产生影响。
无论如何,个人和情况变化如此之大,以至于你可能无法确定为什么你会拖延。谢天谢地,这并不意味着你无法阻止。
如何停止拖延(根据科学)
科学还没有找到治疗拖延症的灵丹妙药,这并不奇怪。没有什么灵丹妙药能让你专心学习,值得记住的是,科学研究不是科学定律,尤其是在心理学领域。这些结果可能是错误的,甚至那些正确的结果对你来说也可能是错误的。
也就是说,科学确实表明,如果你正在努力停止拖延,你可以做一些事情。具体来说,请尝试以下一种或多种方法:
分解任务,给自己奖励
将大任务分解成小任务有助于减轻大任务的压力。当你完成一项任务时,它也给你一个更快的途径去获得那种温暖的成就感。
对一些人来说,多巴胺的冲击已经足够奖励了,但对其他人来说,研究表明通过完成任务给自己奖励和改变奖励的种类可以对你成功的机会产生有意义的影响。
不同的类别很重要,因为虽然奖励可能是一个强大的动力,但为完成一个目标给自己一些奖励选项会让你感觉你错过了。想象一下,例如,你计划学习两个小时,然后奖励自己一块饼干或额外的半小时你最喜欢的电视节目。这看起来是给自己一些灵活性的好方法,但实际上这会让你觉得错过了你没有选择的奖励,这可能会打击你的积极性。
那么,更好的方法是把你的大任务分成小任务,每完成一项任务就给自己一个小奖励,同时保持奖励的多样性。例如,如果你想在一周内完成完整的 Dataquest 课程,最好是将任务分解为每个任务的单独部分,并在每个任务结束时给自己不同的奖励:完成任务 1 的额外游戏时间,完成任务 2 的美味甜点,完成任务 3 的长时间沐浴或淋浴,等等。
为了确保这种方法是可持续的,选择你感兴趣的奖励,小的,容易负担得起的或免费的。
设定最后期限(内部和外部)
研究表明,设定清晰、详细的截止日期对完成率有积极的影响。在之前的一篇文章中,我们已经讨论了制定关于何时、何地以及如何学习的真正具体计划的价值,但是这里值得补充的是,科学表明外部期限甚至比内部期限更有效。
对于使用灵活的在线自学平台的学生来说,这可能是一个问题,因为没有教授告诉他们在截止日期前上交任何作业。然而,订阅期可以作为一个很好的长期到期日——避免因为你没有完成工作而为额外的一年订阅支付更多费用的愿望可以是一个很好的激励因素。
外部分配的目标也是如此。例如,Dataquest 根据您的进度和长期目标,在您的仪表盘中分配每周目标。许多其他平台也提供了类似的功能,你可以用它来为自己设定外部期限。
让它有趣
如上所述,研究表明,当拖延者认为一项任务严肃或重要时,他们往往会拖延更多的时间。虽然你可能认为你的数据科学研究很重要,但你可以通过在心理上将你的研究课程重新定义为有趣的活动来减少你拖延的冲动。
当然,最简单的方法就是让它们变得有趣。这就是为什么我们一直提倡基于项目的方法,以及为什么我们提倡与真实世界的数据互动工作,而不是观看视频或通过假设的实践问题翻腾的很大一部分原因。
做真实的东西更有趣,更好玩。这将有助于你保持前进的动力,并使你不太可能开始拖延和寻找借口逃避学习。
改善其他影响拖延的因素
日常生活中的各种因素会影响你拖延的可能性,解决这些问题有时可能是唾手可得的果实,可以帮助你改善拖延症,而不会实际改变你的学习习惯。
例如,如果你是那种容易拖延的人,睡眠质量会影响第二天的拖延率。所以,如果你在改掉拖延的习惯上有困难,你可能会发现改善你的睡眠模式以获得更多(更好)的睡眠会有很大的不同。
还有其他因素你也可以看看。在之前的一篇文章中,我们写了智能手机的威胁和手机邻近效应——即使你的手机关机了,它也可能会让你分心!移除你的手机和其他环境干扰,改善你的工作空间,以及其他这种性质的调整可以通过增加自我干扰的难度来减少你拖延的机会。
(不过要小心,因为如果你花了本该花在学习、整理和完善学习空间上的两个小时,这种优化本身就是一种拖延。)
别自责了
有趣的是,治疗拖延症的最好方法可能是宽恕。2010 年的一项研究表明,能够原谅自己过去拖延行为的学生更有可能在将来做同样的事情时不再拖延。
当然,原谅自己过去的失败说起来容易做起来难。但有趣的是,实际上让自己休息一下可能是对抗拖延症最有效的方法之一。如果你想停止拖延,似乎最好的开始就是对自己好一点!
教程:在 Python 中使用流数据和 Twitter API
September 8, 2016
如果您做过任何数据科学或数据分析工作,您可能会读入 CSV 文件或连接到数据库并查询行。典型的数据分析工作流包括检索存储的数据,将其加载到分析工具中,然后对其进行研究。当您处理历史数据时,例如分析在线商店的客户最有可能购买什么产品,或者人们的饮食是否因广告而改变,这种方法非常有效。但是如果你想实时预测股票价格呢?或者弄清楚人们现在在看什么电视?
随着越来越多的数据生成,能够处理实时数据变得越来越重要。实时或流数据是连续生成的,在股票市场的情况下,每小时可以生成数百万行数据。由于大小和时间的限制,通常没有一个整洁的数据集可供您分析,您需要存储数据以供以后分析,或者在获得数据时进行实时分析。
对于任何有抱负的数据科学家来说,能够处理流数据是一项关键技能。在这个 Python API 教程中,我们将讨论处理流数据的策略,并通过一个例子来演示我们如何从 Twitter 中传输和存储数据。
推特
对于那些不熟悉 Twitter 的人来说,它是一个社交网络,人们在这里发布简短的 140 个字符的状态消息,称为 tweets。因为推文是不断发出的,Twitter 是一个很好的方式来了解人们对时事的感受。在本帖中,我们将创建一个工具,让我们能够了解人们对美国总统候选人唐纳德·川普和希拉里·克林顿的看法。为此,我们需要:
- 从 Twitter API 流推文。
- 过滤掉不相关的推文。
- 处理推文,找出他们对每个候选人表达了什么情绪。
- 存储推文以供进一步分析。
我们会在文章中构建代码,但是如果你想看最终版本,你可以看这里的。
事件驱动编程
如前所述,在典型的数据分析工作流程中,您将:
- 打开一个 csv 文件。
- 迭代这些行。
- 发现见解并创建可视化。
该流程可能涉及如下脚本:
import pandas
data = pandas.read_csv("products_sold.csv")
# Print out the mean selling price.
print(data["price"].mean())# Plot out the sale prices.data["price"].plot()
在上面的例子中,Python 解释器从我们程序的第一行开始,然后遍历它,直到完成。这被称为过程化编程,因为程序像过程一样以固定的顺序执行。
我们可以修改上面的程序来处理我们事先下载的一组推文:
import pandas
tweets = pandas.read_csv("tweets.csv")
# Get the emotion (sentiment) in each tweet.
# This is an example function that we'll assume is defined further up.
sentiment = tweets["text"].apply(get_sentiment)
# Plot out the sentiment in each tweet.sentiment.plot()
虽然处理一个 csv 格式的 tweets 文件很简单,但是我们如何修改这个程序来处理流媒体 tweets 还不清楚。对于流媒体推文,我们不会有一个好的 csv 文件——我们必须实时检索推文。要处理流媒体推文,我们需要:
- 打开到 Twitter API 的持久连接。
- 处理我们收到的每条微博。
- 存储处理后的推文。
为了实现这一点,我们需要使用一种叫做事件驱动编程的编程范式。在事件驱动编程中,程序根据外部输入执行动作。一个很好的例子是网络浏览器。网络浏览器可能由几个功能组成:
def go_to_site(url):
# Given a url, visit the site. ...
def go_back():
# Go back to the last site. ...
def go_forward():
# Go forward to the next site (if applicable) ...
def reload():
# Reload the current page. ...
当 web 浏览器加载时,它不做任何事情,而是等待用户采取行动。用户在地址栏中键入一个 URL 并按 enter 键将触发函数go_to_site
,该函数将呈现该 URL 的内容。
在 web 浏览器中,一个函数可以被调用一次、多次,或者根本不被调用。这完全取决于用户做什么。该程序没有遵循一个过程,而是在等待外部操作。每个动作都可以被称为一个事件,这就是为什么这种编程风格是事件驱动的。功能可以绑定到事件(在这种情况下是用户按下按钮)。每个绑定到事件的函数都被称为该事件的回调函数。例如,在浏览器栏中输入一个 URL 被绑定到go_to_site
回调函数,然后该函数访问该站点。点击后退按钮与go_back
回调函数绑定,该函数访问上一个站点。
Chrome 浏览器的截图——你可以看到与每个回调函数相关的按钮。
在 web 浏览器的例子中,我们依靠用户来生成事件,但是我们也可以依靠其他程序来生成事件。比方说,我们有一个程序,它对 tweets 进行流式处理,然后调用我们的程序来处理它们。我们的程序中只需要几个函数:
def filter_tweet(tweet):
# Remove any tweets that don't match our criteria.
if not tweet_matches_criteria(tweet):
return
# Process the remaining tweets.
process_tweet(tweet)
def process_tweet(tweet):
# Annotate the tweet dictionary with any other information we need.
tweet["sentiment"] = get_sentiment(tweet)
# Store the tweet.
store_tweet(tweet)
def store_tweet(tweet):
# Saves a tweet for later processing. ...
我们设置了一个独立的程序来实时获取推文——我们称之为streamer
。我们将filter_tweet
注册为对streamer
的回调,因此每次收到新的 tweet 时都会调用filter_tweet
。我们可以决定是否要处理这条推文,然后调用process_tweet
和store_tweet
来处理这条推文。
Twitter 流媒体应用编程接口
为了使实时推文的工作变得容易,Twitter 提供了 Twitter 流 API 。关于如何从 Twitter 上传推文,有很多规则,但主要的有:
- 创建到 Twitter API 的持久连接,并增量读取每个连接。
- 快速处理推文,不要让你的程序出现备份。
- 正确处理错误和其他问题。
在所有主流编程语言中,Twitter 流 API 都有各种各样的客户端。对于 Python,有不少,你可以在这里找到。最受欢迎的是 tweepy ,它允许你连接到流式 API 并正确处理错误。
虽然 tweepy 为我们处理了处理流的大部分后勤工作,但我们还是要看一看幕后发生了什么。
打开连接
第一步是打开到 Twitter 流 API 的连接。这涉及到打开一个持久的 HTTP 连接。Tweepy 使用下面的代码段来实现这一点,您可以在这里找到:
resp = self.session.request('POST',
url,
data=self.body,
timeout=self.timeout,
stream=True,
auth=auth,
verify=self.verify)
上面的代码段使用 python requests 库发出请求,并传递了stream=True
关键字参数以保持连接永远打开。每当 Twitter 上创建新的推文时,它都会通过连接将推文发送到我们的程序。
您可能会注意到上面的url
参数。我们可以通过点击 firehose.json API 端点来收集 Twitter 上生成的所有推文。然而,一次收集所有的推文会让我们的电脑不堪重负,因为每分钟有几十万条推文。这种访问也受到限制,不是每个人都可以访问消防软管数据。我们将不得不访问 filter.json API 端点。这个 API 端点接受一个字符串列表,然后在 tweets 中搜索这些字符串。你得到的不是所有的 tweets,而是经过过滤的子集,这使得你的本地机器更容易处理它们。
您可能还注意到了上面的auth
关键字参数。Twitter 流 API 需要认证。您需要创建一个开发者帐户,然后将您的凭据传递给 tweepy,这样 tweepy 就可以将它们传递给 Twitter。我们将在后面的小节中介绍如何做到这一点。
收听推文
一旦我们打开一个连接,我们将需要监听通过该连接传来的推文。Twitter 通过连接以纯文本形式发送数据,如下所示:
HTTP/1.1 200 OK
Content-Type: application/json
Transfer-Encoding: chunked
1953
{"retweet_count":0,"text":"Man I like me some @twitterapi","entities":{"urls":[],"hashtags":[],"user_mentions":[{"indices":[19,30],"name":"Twitter API","id":6253282,"screen_name":"twitterapi","id_str":"6253282"}]},"retweeted":false,"in_reply_to_status_id_str":null,"place":null,"in_reply_to_user_id_str":null,"coordinates":null,"source":"web","in_reply_to_screen_name":null,"in_reply_to_user_id":null,"in_reply_to_status_id":null,"favorited":false,"contributors":null,"geo":null,"truncated":false,"created_at":"Wed Feb 29 19:42:02 +0000 2012","user":{"is_translator":false,"follow_request_sent":null,"statuses_count":142,"profile_background_color":"C0DEED","default_profile":false,"lang":"en","notifications":null,"profile_background_tile":true,"location":"","profile_sidebar_fill_color":"ffffff","followers_count":8,"profile_image_url":"http:\/\/a1.twimg.com\/profile_images\/1540298033\/phatkicks_normal.jpg","contributors_enabled":false,"profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/365782739\/doof.jpg","description":"I am just a testing account, following me probably won't gain you very much","following":null,"profile_sidebar_border_color":"C0DEED","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/1540298033\/phatkicks_normal.jpg","default_profile_image":false,"show_all_inline_media":false,"verified":false,"profile_use_background_image":true,"favourites_count":1,"friends_count":5,"profile_text_color":"333333","protected":false,"profile_background_image_url":"http:\/\/a3.twimg.com\/profile_background_images\/365782739\/doof.jpg","time_zone":"Pacific Time (US & Canada)","created_at":"Fri Sep 09 16:13:20 +0000 2011","name":"fakekurrik","geo_enabled":true,"profile_link_color":"0084B4","url":"http:\/\/blog.roomanna.com","id":370773112,"id_str":"370773112","listed_count":0,"utc_offset":-28800,"screen_name":"fakekurrik"},"id":174942523154894848,"id_str":"174942523154894848"}
前几行是 HTTP 连接头,我们可以忽略,因为它们只在建立连接时使用。一旦我们建立了连接,我们将得到一系列数字和 JSON 编码的推文。这些数字表明 tweet 数据正在通过连接发送,并告诉程序要从连接中读取多少字节才能获得 tweet 数据。在这种情况下,1953
是在 tweet 结束之前从流中读取的字节数。读取下一个1953
字节将为我们获取 tweet 的数据。
如您所见,数据不仅包含推文文本,还包含发送者、关注者数量和其他元数据的信息。这些数据是 JSON 格式的,可以使用 Python json
库读取和处理。随着越来越多的 tweet 从 Twitter API 发送给我们,它们将遵循类似的格式,一行的长度以字节为单位,下一行是 tweet 的数据。所有的推文将通过相同的持久连接发送。
例如,随着我们处理更多的推文,我们可能会在我们的流中看到更多的推文,如下所示:
HTTP/1.1 200 OK
Content-Type: application/json
Transfer-Encoding: chunked
1953
{"retweet_count":0,"text":"Man I like me some @twitterapi","entities":{"urls":[],"hashtags":[],"user_mentions":[{"indices":[19,30],"name":"Twitter API","id":6253282,"screen_name":"twitterapi","id_str":"6253282"}]},"retweeted":false,"in_reply_to_status_id_str":null,"place":null,"in_reply_to_user_id_str":null,"coordinates":null,"source":"web","in_reply_to_screen_name":null,"in_reply_to_user_id":null,"in_reply_to_status_id":null,"favorited":false,"contributors":null,"geo":null,"truncated":false,"created_at":"Wed Feb 29 19:42:02 +0000 2012","user":{"is_translator":false,"follow_request_sent":null,"statuses_count":142,"profile_background_color":"C0DEED","default_profile":false,"lang":"en","notifications":null,"profile_background_tile":true,"location":"","profile_sidebar_fill_color":"ffffff","followers_count":8,"profile_image_url":"http:\/\/a1.twimg.com\/profile_images\/1540298033\/phatkicks_normal.jpg","contributors_enabled":false,"profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/365782739\/doof.jpg","description":"I am just a testing account, following me probably won't gain you very much","following":null,"profile_sidebar_border_color":"C0DEED","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/1540298033\/phatkicks_normal.jpg","default_profile_image":false,"show_all_inline_media":false,"verified":false,"profile_use_background_image":true,"favourites_count":1,"friends_count":5,"profile_text_color":"333333","protected":false,"profile_background_image_url":"http:\/\/a3.twimg.com\/profile_background_images\/365782739\/doof.jpg","time_zone":"Pacific Time (US & Canada)","created_at":"Fri Sep 09 16:13:20 +0000 2011","name":"fakekurrik","geo_enabled":true,"profile_link_color":"0084B4","url":"http:\/\/blog.roomanna.com","id":370773112,"id_str":"370773112","listed_count":0,"utc_offset":-28800,"screen_name":"fakekurrik"},"id":174942523154894848,"id_str":"174942523154894848"}
2154
{"retweet_count":1,"text":"What's a tweet?","entities":{"urls":[],"hashtags":[],"user_mentions":[{"indices":[19,30],"name":"Twitter API","id":6253282,"screen_name":"twitterapi","id_str":"6253282"}]},"retweeted":false,"in_reply_to_status_id_str":null,"place":null,"in_reply_to_user_id_str":null,"coordinates":null,"source":"web","in_reply_to_screen_name":null,"in_reply_to_user_id":null,"in_reply_to_status_id":null,"favorited":false,"contributors":null,"geo":null,"truncated":false,"created_at":"Wed Feb 29 19:42:02 +0000 2012","user":{"is_translator":false,"follow_request_sent":null,"statuses_count":142,"profile_background_color":"C0DEED","default_profile":false,"lang":"en","notifications":null,"profile_background_tile":true,"location":"","profile_sidebar_fill_color":"ffffff","followers_count":8,"profile_image_url":"http:\/\/a1.twimg.com\/profile_images\/1540298033\/phatkicks_normal.jpg","contributors_enabled":false,"profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/365782739\/doof.jpg","description":"I am just a testing account, following me probably won't gain you very much","following":null,"profile_sidebar_border_color":"C0DEED","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/1540298033\/phatkicks_normal.jpg","default_profile_image":false,"show_all_inline_media":false,"verified":false,"profile_use_background_image":true,"favourites_count":1,"friends_count":5,"profile_text_color":"333333","protected":false,"profile_background_image_url":"http:\/\/a3.twimg.com\/profile_background_images\/365782739\/doof.jpg","time_zone":"Pacific Time (US & Canada)","created_at":"Fri Sep 09 16:13:20 +0000 2011","name":"fakekurrik","geo_enabled":true,"profile_link_color":"0084B4","url":"http:\/\/blog.roomanna.com","id":370773112,"id_str":"370773112","listed_count":0,"utc_offset":-28800,"screen_name":"fakekurrik"},"id":174942523154894848,"id_str":"174942523154894848"}
呼叫回拨
一旦 tweepy 解码了 tweepy 数据,它就将数据传递给一个预先注册的回调函数。你可以在这里看到它的代码,我们将复制下面的一部分:
def _data(self, data):
if self.listener.on_data(data) is False:
self.running = False
self.listener
实际上是一个用户定义类的实例,它有一个名为on_data
的方法。on_data
处理推文,然后返回True
或False
。如果on_data
返回True
,它处理了 tweet,一切正常。如果on_data
返回False
,连接将被关闭。
我们将在listener
中放置我们的自定义代码来处理 tweet,然后返回适当的状态(True
或False
)。
速率限制和其他问题
Twitter 流媒体 API 有速率限制,禁止太多太快的连接尝试。它还防止使用相同的授权密钥建立太多的连接。谢天谢地,tweepy 为我们处理了这些细节,我们可以专注于我们的程序。
我们需要注意的主要事情是我们正在处理的推文队列。如果我们花太长时间处理推文,它们将开始排队,Twitter 可能会断开我们的连接。这意味着处理每条推文的速度必须非常快。
设置 Tweepy
既然我们已经了解了 Twitter 上的推文流是如何工作的,我们可以继续设置 tweepy 来开始流数据。我们需要做的第一件事是访问 Twitter 开发者中心并创建一个开发者账户。这个帐户将使我们能够创建凭据,让我们通过 Twitter 流 API 进行身份验证。
创建帐户后,我们可以转到应用程序控制台,创建一个新的 Twitter 应用程序。这将让我们获得特定于应用程序的凭证,这将让我们连接到 API。
填写所有的值来创建一个 Twitter 应用程序。
正如你在上面的截图中所看到的,你需要将“回拨 URL”字段留空。在“网站”字段中填写一个网站(如果有),否则您可以输入一个占位符值,如https://www.site.com
。
创建应用程序后,您可以单击“密钥和访问令牌”选项卡来获取凭据。您需要从“应用程序设置”下获取以下信息:
Consumer Key (API Key)
—我们称之为TWITTER_APP_KEY
。Consumer Secret (API Secret)
—我们称之为TWITTER_APP_SECRET
。
您还需要在“您的访问令牌”下执行以下操作:
- 单击“创建我的访问令牌”
- 得到名为
Access Token
的值—我们称之为TWITTER_KEY
。 - 得到名为
Access Token Secret
的值—我们称之为TWITTER_SECRET
。
我们可以用下面的代码设置 tweepy 向 Twitter 认证:
auth = tweepy.OAuthHandler(TWITTER_APP_KEY, TWITTER_APP_SECRET)
auth.set_access_token(TWITTER_KEY, TWITTER_SECRET)
然后,我们可以创建一个 API 对象来从 Twitter 获取数据——我们将传递身份验证:
api = tweepy.API(auth)
设置监听器
正如我们上面提到的,使用 tweepy 打开 Twitter 流需要一个用户定义的listener
类。我们需要子类化 StreamListener 类,并实现一些自定义逻辑。StreamListener
类有一个叫做on_data
的方法。这个方法会自动算出 Twitter 发送的是什么类型的数据,并调用合适的方法来处理具体的数据类型。它可以处理像用户发送直接消息、推文被删除等事件。目前,我们只关心用户何时发布推文。因此,我们需要覆盖 on_status 方法:
class StreamListener(tweepy.StreamListener):
def on_status(self, status):
print(status.text)
上面的代码将创建一个监听器,它打印来自 Twitter API 的任何 tweet 的文本。
我们还需要覆盖StreamListener
的 on_error 方法,这样我们就可以正确处理来自 Twitter API 的错误。如果我们受到速率限制,Twitter API 将发送一个 420 状态码。如果发生这种情况,我们会想要断开连接。如果是其他错误,我们会继续:
class StreamListener(tweepy.StreamListener):
def on_status(self, status):
print(status.text)
def on_error(self, status_code):
if status_code == 420:
return False
启动监听器
一旦我们设置好监听器,我们就准备好连接所有东西,并传输提到Donald Trump
或Hillary Clinton
的 tweets。
在下面的代码段中,我们将:
- 创建我们的
StreamListener
类的一个实例。 - 创建 tweepy Stream 类的一个实例,它将对 tweepy 进行流式传输。
- 我们传递我们的认证凭证(
api.auth
),以便 Twitter 允许我们连接。 - 我们传入我们的
stream_listener
,以便我们的回调函数被调用。
- 我们传递我们的认证凭证(
- 通过调用过滤器方法开始传输推文。这将开始从
filter.json
API 端点传输推文,并将它们传递给我们的监听器回调。- 按照 API 的要求,我们传入一个要过滤的术语列表。
stream_listener = StreamListener()
stream = tweepy.Stream(auth=api.auth, listener=stream_listener)
stream.filter(track=["trump", "clinton", "hillary clinton", "donald trump"])
一旦我们设置好了,我们就有了一个简单的 Twitter 流!它不会做太多(只是打印出所有提到希拉里·克林顿或唐纳德·特朗普的推文的文本),但我们用很少的代码完成了很多工作。
过滤事件
我们想看看人们对每位总统候选人的看法。这意味着我们想忽略转发。转发出现在来自 Twitter API 的数据流中,但相同的文本可能会出现数百次或数千次。这将扭曲我们的结果,因为一个人的推文将在我们的分析中被有效地计数成千上万次。传递给on_status
方法的 tweet 是状态类的一个实例。这个类有描述 tweet 的属性,包括属性retweeted_status
,它告诉我们 tweet 是否是 retweet。我们可以通过检查retweeted_status
属性来过滤掉转发。在下面的代码中,我们:
- 修改
on_status
函数来过滤掉转发。- 如果
retweeted_status
属性存在,那么不处理 tweet。 - 打印所有没有转发的推文。
- 如果
def on_status(self, status):
if status.retweeted_status:
return
print(status.text)
到目前为止,我们已经使用了 tweet 的text
属性和retweeted_status
属性。你可以在这里找到可用属性的完整列表。这些值来自 Twitter API,然后 tweepy 将它们设置为Status
类实例的属性。我们可以通过使用以下字段来执行额外的过滤:
- 一条推文被转发的次数。
- 这条推文在某些国家被禁止发布。
favorite_count
—该推文被其他用户收藏的次数。
例如,下面的代码将过滤掉收藏少于10
的任何推文:
def on_status(self, status):
if status.favorite_count is None or status.favorite_count < 10:
return
print(status.text)
提取信息
因为我们必须快速处理推文,所以在保存之前,我们不想做任何太密集的事情。我们主要想提取和存储我们想要的属性。因为我们对分析支持Hillary Clinton
或Donald Trump
的人的情绪感兴趣,所以有几个领域会让我们感兴趣:
- 用户的描述(
status.user.description
)。这是创建该推文的用户在他们的传记中写的描述。 - 用户的位置(
status.user.location
)。这是创建推文的用户在他们的传记中写的位置。 - 用户的屏幕名称(
status.user.screen_name
)。 - 创建用户帐户的时间(
status.user.created_at
)。 - 用户有多少关注者(
status.user.followers_count
)。 - 用户为其个人资料选择的背景颜色(
status.user.profile_background_color
)。 - 推文的文本(
status.text
)。 - Twitter 分配给 tweet 的唯一 id(
status.id_str
)。 - 推文发送的时间(
status.created_at
)。 - 该推文被转发了多少次(
status.retweet_count
)。 - 推文的坐标(
status.coordinates
)。推文发送的地理坐标。
这些属性将使我们能够分析有趣的事情,比如拥有更多追随者的用户是否支持Trump
或Clinton
。
我们可以用on_status
方法提取这些信息:
description = status.user.description
loc = status.user.location
text = status.text
coords = status.coordinates
name = status.user.screen_name
user_created = status.user.created_at
followers = status.user.followers_count
id_str = status.id_str
created = status.created_at
retweets = status.retweet_count
bg_color = status.user.profile_background_color
处理推文
因为我们对支持两位总统候选人的人的情绪感兴趣,所以我们想分析每条推文的文本,以找出它表达的情绪。例如,这将告诉我们人们是否经常在推特上发布关于Hillary Clinton
的正面消息。我们可以使用一种叫做情感分析的方法,给每条推文加上一个情感分数,从-1
到1
。一条-1
意味着这条推文非常负面一条0
是中性的,一条1
意味着这条推文非常正面。情感分析工具通常通过查看字符串中是否出现已知表示消极和积极情感的单词来生成该分数。例如,如果单词hate
出现在字符串中,它更有可能是负数。因为情感分析本质上是字符串匹配,所以它的工作速度非常快,这对我们来说很重要,因为我们处理的时间越长,我们就越有可能在处理推文时落后和断开连接。
为了执行情感分析,我们可以使用一个名为 TextBlob 的库,它允许我们在 Python 中进行情感分析,以及其他自然语言处理任务。
以下代码将:
- 在 tweet 的文本上初始化 TextBlob 类。
- 从班级中获取情绪得分。
blob = TextBlob(text)
sent = blob.sentiment
一旦我们有了sent
对象,我们需要从中提取polarity
和subjectivity
。polarity
是推文的负面或正面,用-1
到1
来衡量。subjectivity
是指推文的客观或主观程度。0
表示推文非常客观,1
表示非常主观。为此,我们只需访问属性:
polarity = sent.polarity
subjectivity = sent.subjectivity
存储推文
一旦我们在每条 tweet 上获得了我们想要的所有数据,我们就准备存储这些数据以供以后处理。可以将我们的数据存储在 csv 文件中,但是 csv 文件使得查询数据变得困难。如果我们想从一个 csv 文件中读取,我们要么必须加载整个文件,要么通过一个复杂的过程来查询并只加载我们想要的部分。
存储数据的好地方是数据库。因为它们是常用的并且易于查询,所以我们将使用关系数据库。SQLite 是最容易使用的主要关系数据库,因为它不需要运行任何进程,所有东西都存储在一个文件中。
为了访问数据库,我们将使用数据集包,这使得访问数据库和存储数据变得极其简单。我们不是创建数据库和表,而是简单地存储数据,dataset
包会自动创建数据库和我们需要的所有表。
我们必须首先使用连接字符串连接到我们的数据库:
import dataset
db = dataset.connect("sqlite:///tweets.db")
当使用 SQLite 时,如果数据库文件(在本例中为tweets.db
)不存在,它将自动在当前文件夹中创建。
然后,我们必须将我们的坐标 json 字典转储到一个字符串中,这样我们就可以存储它:
if coords is not None:
coords = json.dumps(coords)
最后,我们可以在on_status
方法中添加代码,将 tweet 写入数据库:
table = db["tweets"]
table.insert(dict(
user_description=description,
user_location=loc,
coordinates=coords,
text=text,
user_name=name,
user_created=user_created,
user_followers=followers,
id_str=id_str,
created=created,
retweet_count=retweets,
user_bg_color=bg_color,
polarity=sent.polarity,
subjectivity=sent.subjectivity,))
我们现在能够将我们处理过的每条推文写入数据库。一旦它们进入数据库,就可以很容易地被查询,或者转储到 csv 以供进一步分析。
将所有东西连接在一起
我们现在已经拥有了从 Twitter API 传输数据所需的所有部分!我们只需要将所有内容放在一个文件中,就可以从命令行运行了。这将使我们能够想看多久就看多久。你可以在这里看一下执行流的最终程序。这个程序可以通过输入python scraper.py
来运行,之后它将永远运行,流式传输推文,处理它们,并保存到磁盘上。您可以使用Ctrl+C
来停止程序。
我们希望将我们使用过的一些常量(比如数据库连接字符串、我们的数据库名称和我们的 Twitter 键)分离到一个单独的文件中,名为settings.py
,这样它们就很容易更改。下面是settings.py
的默认内容:
TRACK_TERMS = ["trump", "clinton", "hillary clinton", "donald trump"]
CONNECTION_STRING = "sqlite:///tweets.db"
CSV_NAME = "tweets.csv"
TABLE_NAME = "tweets"
这里可以看到设置文件。
你可以在这里阅读运行代码的完整说明。
分析推文
如果我们想在存储后分析推文,我们需要编写额外的代码来查询数据库。我们也可以使用datasets
包来完成这项工作。
例如,下面的代码将从我们的数据库中查询所有的 tweets:
db = dataset.connect("sqlite:///tweets.db")
result = db["tweets"].all()
一旦我们有了一组结果,我们就可以处理它们,或者将它们存储到一个 csv 文件中,如下例所示:
dataset.freeze(result, format='csv', filename=settings.CSV_NAME)
你可以在这里看到一个程序的代码,该程序将所有现有的推文转储到一个 csv 文件。你可以用python dump.py
从命令行运行这个程序。
后续步骤
我们在这篇文章中已经介绍了很多!我们开发了一个程序,可以从 Twitter 上传推文,对其进行注释,并将其存储到数据库中。既然您已经掌握了事件驱动编程,并且使用了流数据,我们就可以开始分析 tweets 了。这里有一个使用流媒体推特来描绘美国人对选举中每个候选人的感受的例子。
就你自己而言,这里有几个你可能想尝试使用 Twitter 流媒体工具的项目:
如果您有兴趣了解更多关于使用流数据和数据管道的信息,您可以查看我们的 Data questData Engineer Path。
获取免费的数据科学资源
免费注册获取我们的每周时事通讯,包括数据科学、 Python 、 R 和 SQL 资源链接。此外,您还可以访问我们免费的交互式在线课程内容!
如何构建更好的 Tableau 项目(终极指南)
October 12, 2022
你想学 Tableau 吗?然后练习,练习,练习!这里有六个资源,将建立你的画面技巧和你的作品集!
Tableau 是一个非常强大的、包罗万象的数据可视化工具。它可以使用各种图表类型创建漂亮、清晰的数据可视化。它还有许多强大的内置计算功能。这为 Tableau 项目创造了无限的可能性,无论是自我指导还是作为更广泛社区的一部分,你都可以完成这些项目,从 Tableau 初学者到中级开发者,或者从中级到专业。
以下是一个资源列表,可以指导你通过 tableau 项目的想法,帮助你建立你的技能!
开始建造
盯着一张空白的画布是一种自由和挑战!我们会被所有的可能性压垮。然而,如果我们有一个有趣的数据源或分析,那么没有比简单地迎接挑战更好的学习方法了!
您可以运行从数据发现到仪表板设计和实施的整个范围的数据可视化项目。完成后,将其分享到 Tableau Public 个人资料上,并邀请朋友和同事对您的项目发表评论。
如果空白画布的前景让你兴奋,但你不确定在哪里可以找到数据,请查看 24 个免费数据集上的资源,以构建数据组合。你可以在 Kaggle.com 的或 data.world 的使用谷歌的数据集搜索找到额外的数据集。
改造星期一
如果你正在努力为你自己的 Tableau 项目想法寻找灵感,Tableau 社区会帮助你。
周一改头换面是八年来的传统。自 2016 年以来(2022 年有短暂中断),他们在自己的网站上发布了一张图表和一个附带的数据集。Tableau 用户可以利用数据集制作原始可视化的更好版本。这个群里分享的项目不会占用你太多时间,一周做一个当然是可行的。数据是经过筛选的,通常是干净的,因此您可以专注于可视化。
如果你在 Twitter 或 LinkedIn 上,你也可以使用标签#改头换面星期一与志同道合的数据专家分享你的结果。
周三锻炼
周三锻炼挑战我们探索利基 Tableau 功能,通常在计算或设计层。这些是很好的 Tableau 项目,用于练习我们可能不会每天使用的更高级的计算或图表类型。这是一个很好的工具,可以拓展我们的画面边界,发现有用的功能,否则我们可能发现不了。
结果会出现在网上,并附有一篇博文或操作视频。然后我们可以把我们学到的技术应用到另一个 Tableau 项目中。
真实世界的假日期
另一个由充满活力的 Tableau 社区创建的 Tableau 项目示例名为真实世界假数据(RWFD) 。我在提供 Tableau 培训中看到的一个主要问题是数据集通常是非概念性的。当然,我们可以想象《T2·宋飞正传》每一季的 IMDB 评分,但是这如何帮助发展业务呢?RWFD 试图通过提供反映真实商业环境的数据来纠正这一点。该分析更类似于在类似工作的情况下要求数据专业人员从事的工作类型。
类似于改造星期一和锻炼星期三,RWFD 有一个专门的用户组,分享,评论和鼓励彼此的数据可视化工作。
当天的画面
Tableau Public 有一个现象特征,叫做即今日。每周,Tableau 都会在 Tableau Public 的每日专题 Viz 中展示其他作者创建的 Tableau 项目示例。这些是典型的精细和专业的数据可视化,推动了 Tableau 功能的极限。虽然大多数日常生活可能与你无关,但它们仍然是灵感的绝佳来源。
大多数情况下,您可以下载《今日 Viz》工作簿。如果有我们感兴趣的特定设计元素或计算,我们可以下载 Tableau 文件并尝试对其进行逆向工程。然后,如果我们愿意,我们可以尝试将相同的方法和功能应用到我们已经在处理的项目或数据源中。
构建 Tableau 投资组合
一个 Tableau 作品集,通常在 Tableau Public 上,是我们作为 Tableau 专业人士进行交流和成长的最有价值的工具之一。填写一份生动的公开投资组合可能令人望而生畏。但是希望这篇文章已经给了你一些开始的方法。
无论你如何构建你的 Tableau 项目,请记住 Tableau 社区的价值。参与和分享你的 Tableau 项目将会带来参与和指导——两者都将有助于提高你的技能和职业生涯。
Tableau 培训:停止不正确的学习(改为这样做)
October 26, 2022
为什么要学 Tableau?
Tableau 是世界上最受欢迎的商业智能工具之一,根据 Gartner 的排名,它是该市场的前三大领导者之一。
2022 年,超过 3 万家机构使用 Tableau,LinkedIn 上超过 20 万个职位空缺至少需要一些关于它的知识。Tableau 不仅经常被数据专业人员使用,如业务分析师和数据分析师,还被广泛的其他人使用,如数字营销人员、消费者体验专家等。
通过学习 Tableau,你可以获得一项有价值的技能,这将有助于你的职业发展。向雇主证明你的技能并在面试中脱颖而出的最佳方式是获得 Tableau 专家认证并建立一个项目组合。
在本文中,我们将为您提供 5 个步骤来准备认证,给您掌握 Tableau 的经验,最后,帮助您建立一个项目组合。这 5 个步骤将促进你的职业发展。
如何学习 Tableau?
随着 Tableau 受欢迎程度的上升,培训的选择迅速增加。选择正确的方法来学习 Tableau 可能会很困难。
在 YouTube 上观看研讨会或在互联网上阅读专家博客似乎是很有吸引力的选择,但掌握 Tableau 需要深厚的知识和实践经验——其余的可以在工作中学习。
如果您想学习 Tableau,获得认证,并在短短几个月内建立您的投资组合,我们已经创建了一系列 Tableau 课程,将教你所需的一切。
第一步:下载 Tableau 并习惯它的界面
Tableau 有免费版和付费版可供下载。对于学生或只想试用 14 天的人来说,Tableau 可以在这里下载用于 PC 和 MAC 电脑。经过 14 天的试用,用户可以转换为付费许可证。对于那些想要长期免费访问的人,有 Tableau Public 。只要你不处理敏感数据,并且总是能够保存到云中,Tableau Public 就是一个极好的选择。
一旦 Tableau 安装完毕并准备就绪,我们就可以通过遵循入门指南来熟悉 Tableau 界面。在进入详细的 Tableau 在线培训之前学习界面是一个好主意,就像 Dataquest 的第一个 Tableau 课程。
步骤 2:开始构建图表和仪表板
跳转到数据源并构建图表和仪表板是 Tableau 最有趣的事情。但是说起来容易做起来难!在学习如何创建可视化分析时,一个干净的数据源是很重要的。Tableau 为数据清理和操作提供了很好的选择,但这可能不是我们想学的第一件事。相反,让我们找到一个干净的数据源来使用。在Kaggle.com上有很多选项,比如桌游排行榜上的这个数据集,或者多伦多 2017 年自行车份额使用情况的这个数据。Dataquest 在 Tableau track 中有一个关于塑造和设计仪表板的很棒的课程。
步骤 3:发布和共享您的仪表板
与他人分享我们的见解甚至比构建仪表板更有意义。共享仪表板有两种方式:静态或交互。
共享静态仪表板可以通过将其导出为 PDF、图像或 Powerpoint 来完成。这样做的时候,我们失去了所有的交互性,包括过滤器,点击动作和工具提示(悬停)。尽管如此,这仍然是一个很好的共享方法,因为它简单且与软件无关。所有这些选项都可以在顶部的仪表板菜单中找到。
如果我们希望我们的数据消费者具有交互性,我们需要将我们的工作簿发布到 Tableau Public、Online 或 Server。只有 Tableau Public 允许我们免费发布和分享,所以这是我们建立作品集的最佳选择。Tableau 有一个伟大的资源为分享你的仪表板的最佳方式,所以选择最适合你的路径。
第四步:建立你的投资组合
希望发布第一个仪表板的激动是一个积极的体验。是时候考虑扩大我们的 Tableau 投资组合了。为了让 Tableau 学习体验变得有吸引力和有价值,做一些令人愉快的事情是有帮助的。太多的在线 Tableau 课程使用完美的超市销售数据集,这既不现实,也不鼓舞人心。相反,尝试使用众多数据集聚合器中的一个来查找您感兴趣的数据。我们已经使用过几次 Kaggle 了。还有网站数据中的我们的世界和 Dataquest 文章 24 个免费数据集打造不可抗拒的投资组合(2022) 。无论是体育、政治、电影,还是任何其他激情,都很有可能存在一个关于这个主题的免费数据集。
第五步:获得认证
为了完成您的学习之旅,请考虑参加 Tableau 专业桌面认证。桌面认证的两个级别分别是桌面专员和认证数据分析师。专家考试是多项选择题,而认证数据分析师考试是多项选择题和解决问题的结合。两者都是很好的简历助推器,并提供了一个学习的里程碑,以建立对你的画面技巧的信心。这里有备考选项:来自 Tableau (guide)的备考文档。
外卖食品
获得 Tableau 技能并获得认证可能需要 1 到 6 个月甚至更长时间。有些人学得很快,而有些人可能需要更长的时间,因为其他的生活承诺。这完全取决于你的时间表和你的奉献精神,以你想要的速度学习 Tableau。
使用 Microsoft Power BI 技能路线分析数据现已上线!
原文:https://www.dataquest.io/blog/the-analyzing-data-with-microsoft-power-bi-skill-path-is-now-live/
March 21, 2022
这一天终于到来了—我们与微软合作开发的全新技能路线“使用微软 Power BI 分析数据”现已上线!在短短的几个月内,这条技能路线将帮助你获得在商业分析中找到工作所需的基本技能。您将学习使用数据分析来为更好的商业决策创造洞察力;您还将学习如何通过使用拖放界面来建模数据、创建报告和构建交互式仪表板。
响应市场需求的技能途径
我们推出这条技能之路有几个主要原因:
- 对商业分析和商业智能工作和技能的日益增长的市场需求
- 需要 Microsoft Power BI 的工作数量激增
- 与微软的共同愿望是将微软 Power BI 技能带给世界各地的学习者
- 构建一条业务分析师职业道路,该道路将教授以 Microsoft Excel 和 Microsoft Power BI 为基础开始职业生涯的基本技能
技能路径中的微软 Power BI 要素
通过我们的“使用 Microsoft Power BI 分析数据”技能路线,我们决定将重点放在您需要了解和使用该平台以做好工作准备的基本技能上。
你将学习如何做以下事情:
- 浏览 Power BI 界面
- 清理、转换、加载和结构化数据
- 设计数据模型
- 借助有意义的视觉效果、仪表盘和报告,创建引人注目的数据驱动型故事
- 管理工作区
- 执行业务分析
“我很高兴与微软合作推出我们新的 Power BI 技能路线。Power BI 被全球数以万计的公司使用,是当今最受欢迎的数据技能之一。我们的新路径将通过实践练习和项目帮助世界各地的学习者提高他们的 Power BI 技能。
我期待着继续与微软合作,为学习者创造更多的培训和认证机会。我们的创始人 Vik 说。
为什么您应该与我们一起学习 Microsoft Power BI
我们已经创建了一个技能途径,帮助技术和非技术用户开发他们需要的应用技能,以充分利用 Microsoft Power BI 您可以在工作中学习其他内容。
您不需要事先了解 Microsoft Power Bi —一些数学和电子表格的基本知识就足够了。完成课程后,你将具备向现有和未来的雇主展示必要知识和技能的能力。这不会像新兵训练营那样需要一年时间——只需要几个月。
当您完成这一过程时,您将为 Microsoft 认证考试 PL-300 做好准备,这是一项衡量您能力并证明您在 Power BI 方面技能的评估。而且,在我们的道路上完成 4 门课程,您将在考试中获得 50%的折扣。有了这个认证,您将让现有或未来的雇主知道,在涉及到 Power BI 时,您带有微软的认可印记。
学习 Dataquest
在 Dataquest,我们相信边做边学,而不仅仅是看视频或阅读支持文档。这意味着您将直接在浏览器中编写真实的代码,并且您将完成引导项目,您可以使用这些项目来构建您的文件夹。
Dataquest 的所有课程都是异步的,因此您可以在方便的时候按照自己的节奏学习。如果您遇到困难,我们积极支持的用户社区会为您解答每一个问题,我们只需点击一下鼠标。
这里有一些你在跟我们一起学习时可以期待的东西:
- 使用我们的浏览器内置编码界面轻松开始学习——安装软件时不会出现任何问题
- 通过我们基于实践和项目的学习方法,获得真实的实践经验,为您的工作做好准备
- 建立你的项目组合,向现有或未来的雇主展示你的技能
- 通过我们的结构化路径,只学习必要的东西,并走上实现目标的道路
- 在你的学习过程中,从同路的志趣相投的人那里获得支持
- 庆祝你的成就,展示你学习的证据
所以,现在技能之路已经开放,可以开始做生意了,来看看吧。您可以在短短几个月内掌握 Power BI。
Dataquest 的理念:构建完美的数据科学学习工具
原文:https://www.dataquest.io/blog/the-perfect-data-science-learning-tool/
August 6, 2019When I launched Dataquest several ago, one of the first things I did was write a blog post about why. Here, I’d like to dig a bit deeper into Dataquest’s philosophy.
在我创办 Dataquest 的时候,如果你想成为一名数据科学家,你会在 EdX 或 Coursera 等网站上遇到许多课程,找工作并不容易。我看到许多有前途的学生放弃学习数据科学,因为他们陷入了反复学习相同课程的循环中。
我试图用 Dataquest 解决学习数据科学的两个主要障碍:从理论到应用的挑战,以及知道下一步该学什么的挑战。
我坚信每个人都应该有机会做自己感兴趣的工作,Dataquest 是一种将这种信念付诸行动的方式,可以帮助其他人在一个困难的领域获得立足点。
多年来,我们一直努力让在一个地方学习数据科学职位所需的所有技能变得简单。从基本的 Python 和 R 到 SQL 再到机器学习,Dataquest 教你正确的技能,并帮助你建立一个项目组合。
当我们建立这个网站时,我们学到了很多如何最有效地帮助学生的经验。我们一直在逐步扩大我们最初设想的范围。在这篇文章中,我想概述一下我们现在关注的是什么,以及我们的前进方向。在这个过程中,我希望说明为什么 Dataquest 是您学习数据科学的好地方。
Dataquest 的哲学,基于多年的观察
人们常说,学习本身就是一种奖励。像前面提到的 edX 和 Coursera 这样的大规模开放在线课程(MOOC)网站就是基于这种智慧而创建的。
相反,我们发现我们的学生学习数据科学是因为他们喜欢它和因为他们想要更好的工作。这一观察促使我们变得更加专注于职业。学生们最希望的是一条通往数据科学职业生涯的更好的道路,我们认为这是我们能够努力的最高杠杆。
在我们帮助人们为新职业做好准备的同时,我们提出了四项重要观察:
- 专注对于保留知识至关重要,尤其是当你时间有限的时候。
- 动机是你能否找到工作的最重要的决定因素。
- 很容易陷入“困境”和沮丧——及时的帮助是关键。
- 没有太多好的职业建议和面试准备帮助。
让我们更深入地研究这些观察,看看它们是如何影响我们的思维的。
焦点
当您学习数据科学时,很容易迷失在工具的海洋中。有人告诉你,你必须学习 R、Python、Spark 和 Tensorflow。如果你不这样做,你就不是一个“真正的”数据科学家。这令人不快,但更重要的是,这实际上不是真的。
相反,我们发现最终找到工作的学生更关注概念而不是工具。如果你从零开始学习如何实现一个随机森林,并且知道训练它所涉及的权衡,那么你是使用 Python、Scala 还是 R 来做预测都没关系。
概念在工具之间泛化;如果你很好地学习了一个概念,你可以使用任何工具来实现它。如果你能在 R 中拟合一个决策树模型,你会有一些工作前景,但是如果你深刻理解这个模型及其工作原理,你会有一个数量级的提升。
一次专注于几个概念,在继续学习之前掌握它们是保留知识的关键。我们一直非常专注于 Dataquest,因此知识会深入人心。我们的互动平台不断挑战学生,让他们在进入下一步之前通过编写自己的代码来应用他们所学的知识,这样他们就可以一步一步地学习,并在他们没有理解某些内容时从我们的答案检查系统中获得即时反馈。
我们有一个线性课程,带你从没有编程知识一直到高级机器学习。因为我们开发了整个课程,所以我们能够按照逻辑顺序教学,并确保你永远不会迷路。我们一贯的风格和对概念的关注意味着你可以一次专注于学习一个概念。
例如,下面是我们的数据分析师在 Python 路径中的前几个步骤。每门课程都建立在前一门课程所学技能的基础上。
动机
学校里经常教导说,教师的工作是教学,而你的工作是激励学生。但是如果你没有动机,即使是一个非常了解材料的老师也不会有效。
我们发现动机是找到工作的学生和找不到工作的学生之间最大的区别。仅仅“打勾”领证是不够的。你必须建立项目来展示你的技能并建立一个投资组合。建立一个好的需要真正的兴趣和动力。
为了有动力建立有效的项目,你必须真正喜欢与数据打交道。正如我在一篇关于如何学习数据科学的博客文章中所写的,学习数据科学的先决条件是找到让你感兴趣和激励你的问题。
在 Dataquest,我们的理念是激励是我们的工作,我们围绕这一点来定位网站。
我们设计了我们的课程,将几十个有趣的数据集交织在一起,包括中情局干预和 NBA 球员统计数据。当你准备好了,我们包括几十个有趣的项目,探索如何赢得危险和股票价格预测等主题。通过专注于吸引和激励您,我们帮助您在获得数据科学工作的旅程中走得更远。
例如,这里有一个指导项目的屏幕,您使用 SQL 来分析电影评论网站上评分的一些差异:
被“卡住”
当涉及到更多开放式项目的工作时(这是所有有抱负的数据分析师和数据科学家都需要做的事情),我们发现学生需要帮助来“摆脱困境”。
被卡住的范围从不知道如何安装软件包到难以概念化数据的结构。学生们通常不需要大的帮助——只是朝着正确方向的一个小小的推动或者信心的提升都是非常宝贵的。
我们已经意识到,当你陷入困境时,这些小挫折累积起来,会降低你的动力,使你更有可能达不到你的目标。我们设计了一些系统,确保您可以从导师或同行那里获得帮助,以避免这种挫折,包括我们的数据科学学生社区。
职业建议
我们注意到,我们的许多学生都有职业问题,从想知道他们应该学习什么技能才能最受雇主欢迎,到面试中可能会问什么问题,到他们的投资组合应该是什么样子。
为了帮助回答这些问题,我们采访了数十位数据科学家、招聘人员和招聘经理,并制作了一份数据科学职业指南。对于高级订户,我们还提供职业咨询,在更直接、更私人的层面上帮助解决职业问题。当然,学生们也可以在学生社区向同龄人和导师寻求职业建议。
完美的数据科学学习工具
基于上述观察,Dataquest 的理念是,理想的数据科学学习工具应包括以下要素:
- 为您提供学习数据科学的路线图。
- 允许您通过在浏览器中编码来练习技能。
- 以应用的方式教授高级概念。
- 帮助您建立项目组合。
- 通过导师和社区帮助为您提供支持。
- 指导你的职业选择,并帮助你找到潜在的雇主。
我们认为我们正在处理所有这六个元素,尽管我们肯定还有很多可以改进的地方。我们一直在努力改进 Dataquest,所以让我们来看看这六个方面,我们提供了什么,我们正在努力改进什么。
1.数据科学路线图
数据科学路线图可以让您保持专注和按部就班,而不必考虑下一步该走哪条路。我们目前提供四种学习途径,旨在让学生从零经验到做好工作准备,成为数据分析师(Python 或 R)、数据科学家(Python)和数据工程师(Python)。
但是我们能做的还有很多。在不久的将来,我们计划重新推出我们的数据工程课程,使其对初学者更加友好,我们也在不断努力扩展我们的 R 课程,最终目标是培养一名 R 路径的数据科学家。
2.浏览器内编码
当你是一个初学者时,安装像熊猫这样的软件包或像 Spark 这样的工具要花很长时间,这是令人惊讶的。Dataquest 让您可以在浏览器中体验一下,编写真正的代码,而无需在本地进行任何设置。我们有自动化的答案检查,这使得在我们的网站上工作比在你的本地机器上工作更有利于学习。
不过,最终每个人都需要适应在本地工作,因此我们也帮助您在自己的计算机上设置一切,以便在自己的计算机上工作。
在过去的一年中,我们推出了一些令人兴奋的变化,如具有更好的浏览器内界面的大修命令行课程,以及使我们基于浏览器的系统更加可靠和快速的代码运行改进。我们一直在努力改进和优化我们的平台,因此在可预见的未来,我们将继续努力改进我们的交互式浏览器内编码。
3.应用概念
我们的课程通过让您使用有趣的数据集解决实际问题,向您传授决策树等数据科学概念。例如,您可能会处理有关航空事故或全球教育成就的数据。使用我们的浏览器内编码系统,您将一点一点地学习,在操作真实数据集的代码中应用每个概念。
一旦你学会了这些技能,你将能够在更大的指导项目中应用它们,这些项目仍然提供一些结构,同时挑战你综合你所学的新技能。
这种先学习后应用的循环有助于你快速发展和巩固你的技能。我们认为,我们的概念学习和应用的快速循环穿插着更大的指导项目是教授数据科学的最有效方式,我们的学生也同意这一点。
(查看我们的学生故事,看看有多少学生提到他们已经尝试了多种平台,但 Dataquest 是“迫使他们思考”并应用他们所学知识的平台)。
不过,总有改进的空间,我们会根据学生数据不断迭代和调整我们的课程。例如,如果我们发现学生在某个特定的屏幕上卡住了,我们可以也确实会做出调整。这是我们将继续做的事情,在未来的岁月里,我们将做得更多。
4.项目
我们帮助你建立一个项目组合。这不仅有助于你实践和学习概念,也有助于你获得工作面试!
招聘经理在决定面试谁时,越来越多地考虑投资组合。就连面试也越来越倾向于将项目作为一种评估手段——你可能会得到一个带回家的或亲自参与的项目作为面试的一部分。
我们知道 Dataquest 的引导式项目可以帮助人们找到工作— 这里有一个这样的例子。但是,我们希望提供更多的项目和更广泛的数据集,让学生在学习我们的课程时有更多的选择。
5.一路支持
现在,你可以在我们的学生社区从其他学习 Dataquest 的学生那里获得帮助,我们的数据科学家也经常在那里发帖。这种帮助对于保持你的注意力和积极性是至关重要的。今年,我们将努力扩大该社区,并引入工具,使其在遇到困难时更有效地快速找到您需要的帮助。
6.职业帮助
在过去的一年里,我们发布了一份超过 30,000 字的数据科学职业指南,这是基于对专家的几十次采访。它涵盖了工作申请过程的每个阶段。
我们还为 Dataquest Premium 用户提供职业咨询,以便他们可以获得更多个人职业问题的帮助。
在未来的一年里,我们计划引入更多的职业帮助,例如与职业专家举行社区网络研讨会,他们可以提供建议和回答问题。
Dataquest 的理念:展望未来
正如您所读到的,您可以期待 Dataquest 的许多改进。但是进步不会一蹴而就,它会定期发生,因为我们会不断调整 Dataquest 体验。
我们在不断迭代和改进平台体验,我们也在不断编写和发布新的课程来扩展我们的课程。如果您选择订阅,您将看到我们的课程目录随着您的学习而扩展,因此总会有新的东西添加到您的技能组合中。
祝你学习数据科学好运,希望我已经说服你试用 Dataquest !如有任何问题,请联系。
获取免费的数据科学资源
免费注册获取我们的每周时事通讯,包括数据科学、 Python 、 R 和 SQL 资源链接。此外,您还可以访问我们免费的交互式在线课程内容!
这位艺术家将森林地面变成了数据可视化
原文:https://www.dataquest.io/blog/this-artist-turns-the-forest-floor-into-data-visualizations/
May 2, 2018
编者按:这篇文章是与营销情报公司 iDataLabs 合作的一部分。作者朱莉娅·库克在 iDataLabs 从事营销工作。
我们都熟悉数据可视化——文字云、饼图、数据透视表——但是如何将查询用绘画表现出来呢?来自华盛顿州西雅图的景观艺术家帕蒂·哈勒可能已经发现了这一点。她在华盛顿大学接受的金融培训和在盖奇艺术学院接受的传统油画培训提出的问题比回答的问题更多。在她的职业生涯中,从林务员到分析师再到艺术家,哈勒从未停止对她的工作提出问题。当每个形状都是一个数据点时,每个绿色空间就成了一个独特的群体,而她的工作就是找到模式。
在开始之前,你如何确定一个主题?
我喜欢真正复杂的森林,有很多不同层次的植物。如果我能在描绘我实际看到的东西和代表它的模式之间找到一个好的结合,我喜欢这样做。我喜欢用图案来表示沿横断面排列的事物。例如,我可以想象沿着这条线从这里到华盛顿湖的所有休耕植物。我可以运用数学或统计学的任何其他方法来帮助我自己理解这些意象。
我想了很多。如果所有这些叶子都占据笛卡尔坐标 x,y 和 z,我可以说,‘所有代表 y=x +5 的东西,不管在哪里,都是紫色的。’并不是我真的在做这些东西,而是我在思考它们。我把一点点应用到我正在画的任何画中。
那么当你开始创作时,你脑子里有完整的作品吗?
我主要有完整的骨架,我需要知道这将是一个很好的组成。这可以是一个快速的草图,或者有时是我提前做的非常详细的草图。一旦在面板上建立了这个,我就开始做其他的事情。如果我想加入一些很酷的叶子形状,我会把照片拿出来。一旦我有了骨架,我就填充中间的空间。
你在你的博客上谈到了对空间进行分组,你能谈谈吗?
如果我为自己选择一些规则来组织事物,我想这会让整体看起来更有凝聚力。所以我用一个叫做 Gesamkunstwerk 的概念来工作,这是德语,意思是“全部的艺术作品”,部分加起来就是整体,整体是有凝聚力的,艺术作品作为一个整体应该是有趣的,如果你想深入研究。
这就是我开始思考财务和我所有的电子表格的时候,你怎么能有一个汇总电子表格,但有所有这些东西在它后面,所有这些其他的表可以支持你的汇总数字。如果你给一位高管看‘这是我们的损益表’,他会说‘这个费用行是怎么回事,后面是什么?’你可以回答这个问题。当我画森林时,我必须考虑所有这些事情,因为它太复杂了。大多数艺术家只会简化事物,就像在一幅油画中,但这种方式对我来说更有趣。我试着不让自己觉得无聊。让别人感到厌烦已经够粗鲁的了…
如果我说,“前面需要一棵蕨类植物”,那就不是蕨类植物,它需要一些东西让你的眼睛跟随。它不是为了复杂而复杂,而是添加了一些东西,让它变得更有趣。
当你在一幅画中添加一些东西时,你是在绘画的同时为它创造一个功能吗?
我会一直为自己想规则,但我只会在对绘画有用的时候使用规则。总有一天它会变成一种直观的颜色。色彩真的是我知道我需要努力的最后一件事。所以唯一对我有用的功能就是让它和颜色有关。否则我想我会打破我的规则。
你也为大师们制作颜色图表。你能谈谈每个灯罩的位置吗?
挺随机化的。我学会了做彩色图表,网格中的每个矩形都是预先确定的,因为我在作品的顶部和侧面有一些东西。但是这些图表对我来说没有用,因为我更想知道,如果我选择这五管颜料,对我有用的所有可能的组合是什么,它们彼此看起来如何?所以对我来说,拿五管颜料会更好,这是最上面一排,下面是所有的混合物。所以这一切都是随机的,但对我来说,它非常有用。我已经做了很多年了,我有满满的彩色图表。我把它们拿出来,这就是我如何决定一件作品的颜色。
作为一名分析师,你会对庞大的数据集提出问题。在你开始工作之前,你会给你的项目分配一个问题吗?
有时候我就是这样,这是一个很好的例子:
我被要求画一些我通常不画的花卉,因为作为一名女画家,我不想被归类。所以如果你看我的画,有很多植物和树木,但实际上这些意象相当有男子气概。但是当我被要求画这些花卉时,我去了斯卡吉特山谷的冷杉岛,那里有成千上万的植物。所以我马上开始考虑巨型数据集。
事实上,我上周完成了一幅名为《冷杉岛数据集》的画。因为它让我想起了大数据中的概念,我们能不能把整个人口的数据保存为个体点,让数据自己说话?我一直在问自己,我是在让面板上的数据自己说话,还是我自己插入,特别是在过程的早期,总结和简化工厂,因为这是我唯一能处理的方式。我问自己的问题是扩展这个过程的方法,在这个过程中,我让各个数据点保持它们的特征。
有道理。没有人说过他们明白我在说什么!
我在一家数据科学公司工作,所以这对我很有意义!但是你用什么来表示每个数据点,是一朵花,还是花序?
通常是一个形状。一次想不出太多东西,就用形状。场景本身是绿色的,所以颜色对我来说并不太有趣。但是如果你看看这些形状,即使在这么小的区域,也有上百种。所以我认为每个形状都是一个数据点。我不太在意它,因为我只是用刷子做标记,但我确实试图做单独的标记来代表单独的叶子形状。再说一次,这和植物没有任何关系。这是关于保持复杂性。
那么,当你把目光吸引到一条线或一个图案上时,你关注的是像差还是相似点?
用我所谓的‘视线路径’,我用典型的艺术关注,在如何划分你的平面上。我没有考虑植物中的异常现象,除非有一个我想叫出来。如果有趣的话,我会把面板分成几部分,并把它放在特定的点上。我知道,从学习艺术,当这是有意义的。
我花了很多时间去想象,但是这幅画总是会接管,告诉你它想要什么。历史上有很多谈论——来自男人——关于对抗绘画,我对我的工作更温柔。我得到了我的电枢和图案,但后来它几乎感觉像一个对话,在那里我问它帮我看看它需要什么。如果没用就很明显了。
你有没有发现你画画的过程,比如让简单的事情变得更复杂,或者倾听数据告诉你的事情,会渗透到你生活的其他方面?
倒过来了!我很年轻的时候就获得了 MBA 学位,所以从 23 岁开始,我就每天阅读《华尔街日报》。所以对我来说,总结和深入研究的概念,或者发现一些细节并想知道关于一个群体的结论可能是什么,一直是显而易见的。那对我来说是自然的。我让这种态度贯穿于我的画中。
Madonna of the Back 40 oil on canvas, 60x40Smith and Vallee Gallery’s January 2017 show
As a painter, I’m trying to be more of myself. And myself is an analytical person. I get frustrated with people who don’t have the patience to drill down every once in awhile. Or people who try to change the characteristics of a data population because of some idea they have, some narrative. I find that very common with artists. They have this concept of ‘how the world works,’ and it’s a decision tree they only allow three branches to grow. You get to a more interesting truth if you’re patient, and acknowledge that there’s more complexity. I didn’t learn that in business school, though.
对于那些希望将数据科学和统计流程引入一个可能尚不适合这些方法的领域的人,你有什么建议吗?
不追求显而易见的东西。分形艺术,计算机生成的艺术,如果你对它不感兴趣,你就不应该做。我所说的一些东西,包括我的坐标,或者我的人口,一开始并不清楚如何把它们结合起来。但如果你只是拿着你的供给,不停地乱搞,你会找到某种方式来表达它。
我真的对我的实验很有条理,我做了很多笔记,我把它们储存起来,我考虑我以后要如何使用它们。只有当我发现自己真的对工作感到厌倦时,我才不得不问自己,“为什么我觉得它无聊,而其他人都觉得它很有趣?”我意识到这是因为我没有解决我对复杂性的兴趣。我对它有耐心,也有其他艺术家没有的兴趣。我不得不考虑了很久。
我读了肯尼斯·库基尔和维克托·迈尔·舍恩伯格的《大数据》( Big Data )( T1 ),他们谈到了大量的数据,以及我们过去如何需要统计抽样来观察这些数据。因为你永远没有预算去衡量一切。我以前也是做这个的,我在树林里做统计取样。有了更强大的计算机能力,你就可以在不使用这些样本的情况下处理更多的数据。在极端情况下,你的样本集可以包括每一个点。一切都可以被测量并保持其原有的特征。这是一个极端,也是理论上的,但阅读它对我产生了巨大的影响,因为我意识到我不必画每一片叶子,只要我保留视图的复杂性。这是授权,也是对主体的尊重。
帕蒂·哈勒最近在西雅图艺术博物馆画廊展出。她的下一个个展将于 2018 年 7 月在华盛顿州爱迪生市的史密斯和瓦利画廊举行。
你应该学习数据科学 R 的六个理由
原文:https://www.dataquest.io/blog/three-mighty-good-reasons-to-learn-r-for-data-science/
July 30, 2020
所以你想学数据技能。太好了!但是我们提供大量的数据科学课程。为什么要专门学 R 编程*?学 Python 会不会更好?*
*如果你真的想探究这个问题,我们已经展示了 Python 和 R 来展示每种语言如何处理常见的数据科学任务。虽然底线是每种语言都有自己的优势,并且都是数据科学的绝佳选择,但 R 确实有值得考虑的独特优势!
1。r 是为统计而建的。
r 最初是由统计学家为进行统计分析而设计的,现在它仍然是大多数统计学家的编程选择。r 的语法使得用几行代码创建复杂的统计模型变得很容易。既然这么多的统计学家使用 R 包并为之做出贡献,你很可能能够找到任何你需要执行的统计分析的支持。
出于相关的原因,R 是许多学术环境中的统计和数据分析语言。如果你渴望在学术界工作——或者如果你只是想阅读学术论文,然后能够挖掘它们背后的代码——拥有 R 编程技能可能是必须的。
2。r 是顶级科技公司 中数据科学的流行语言
几乎都是 雇佣使用 R .脸书的数据科学家,比如用 R 用用户帖子数据做行为分析。谷歌使用 R 来评估广告效果和进行经济预测。Twitter 使用 R 进行数据可视化和语义聚类。微软、优步、AirBnb、IBM、惠普——他们都雇佣了会用 r 语言编程的数据科学家
顺便说一下,不仅仅是科技公司:分析和咨询公司、银行和其他金融机构、学术机构和研究实验室都在使用 R,几乎所有其他需要分析和可视化数据的地方都在使用 R。连纽约时报都用 R!
3。在 r 中,学习数据科学基础知识无疑会更容易。
Python 可能是对初学者最友好的编程语言之一,但是一旦你掌握了语法,R 就有了一个很大的优势:它是专门为数据操作和分析而设计的。
正因为如此,一旦你掌握了基本的基础知识,学习数据科学的核心技能——数据操作、数据可视化和机器学习——实际上会变得更加容易。例如,看看在 R 中 创建这些常见的数据可视化样式有多简单。
当然,还有 tidyverse ,这是一组专门为使 R 中的数据工作更快、更容易、更易访问而构建的包。事实上,这本身就是一个优势:
4。令人惊叹的包装让您的生活更轻松。
因为 R 的设计考虑到了统计分析,所以它有一个奇妙的软件包和其他资源的生态系统,这对数据科学非常有用。例如,dplyr 包使数据操作变得轻而易举,而 ggplot2 是数据可视化的绝佳工具。
这些软件包是 tidyverse 的一部分,这是一个由 RStudio 维护的不断增长的软件包集合,R studio 是一家经过认证的 B-corp,它还创建了一个免费使用的同名 R 环境,非常适合数据工作。这些软件包功能强大,易于访问,并且有很好的文档。
RStudio 是一家生产一些令人惊叹的 R 软件包和最受欢迎的 R IDE 的公司。
这只是冰山一角——即使在 tidyverse 之外,也有很多 R 包做着很酷的事情。例如,看看这篇关于如何使用 R 和一个名为 googleAnalyticsR 的包来处理谷歌分析数据的博文。
5。包容的、不断壮大的数据科学家和统计学家社区。
随着数据科学领域的爆炸,R 也随之爆炸,成为世界上发展最快的语言之一( 用 StackOverflow 来衡量)。这意味着,当您在 R 中进行项目时,很容易找到问题的答案和社区指导。由于有如此多热情的 R 用户,您可以找到集成了几乎任何您能想到的应用程序的 R 包!
R 社区也特别热情和包容,有像 R 女士和少数民族 R 用户这样令人惊叹的团体,旨在帮助确保每个人学习和使用 R 技能。
6。在你的工具箱里再放一个工具。
即使你已经是一名 Python 专家,也没有一种语言是适合所有工作的工具。将 R 加入到你的技能清单中会让一些项目变得更容易——当然,当你在寻找数据科学领域的工作时,这也会让你成为一名更灵活、更有市场的员工。
即使你自己不想使用 R,如果你不得不接手一个同事的项目,学习这些基础知识会让你更容易遵循别人的 R 代码。能够查看 R 并将其翻译成 Python 意味着两种语言的惊人资源向你开放。
长话短说:有很多很好的理由说明你应该学习 R,因为它是数据科学的一门极好的语言。
准备好提升你的 R 技能了吗?
我们 R path 的数据分析师涵盖了你找到工作所需的所有技能,包括:
- 使用 ggplot2 进行数据可视化
- 使用 tidyverse 软件包的高级数据清理技能
- R 用户的重要 SQL 技能
- 统计和概率的基础知识
- …还有多得多的
没有要安装的东西,没有先决条件,也没有时间表。
数据科学初学者的 10 个最佳机器学习算法
原文:https://www.dataquest.io/blog/top-10-machine-learning-algorithms-for-beginners/
June 26, 2019
自从哈佛商业评论 的文章将“数据科学家”命名为“21 世纪最性感的工作”以来,人们对机器学习的兴趣飙升。但如果你刚刚开始学习机器,可能会有点困难。这就是为什么我们重新启动我们非常受欢迎的关于初学者良好机器学习算法的帖子。
(这篇文章最初发表在 KDNuggets 上,名为机器学习工程师需要知道的 10 种算法。已经用 perlesson 转贴了,最后一次更新是在 2019 年)。
这篇文章是针对初学者的。如果你在数据科学和机器学习方面有一些经验,你可能会对这个更深入的关于用 Python 和scikit-learn
进行机器学习的教程更感兴趣,或者对我们在这里开始的机器学习课程更感兴趣。如果你还不清楚“数据科学”和“机器学习”之间的区别,这篇文章提供了一个很好的解释:机器学习和数据科学——是什么让它们不同?
机器学习算法是可以从数据中学习并根据经验进行改进的程序,无需人工干预。学习任务可以包括学习将输入映射到输出的函数,学习未标记数据中的隐藏结构;或者“基于实例的学习”,其中通过将新实例(行)与存储在存储器中的来自训练数据的实例进行比较,为新实例产生类别标签。“基于实例的学习”并不从具体的实例中抽象出来。
机器学习算法的类型
有 3 种类型的机器学习(ML)算法:
监督学习算法:
监督学习使用带标签的训练数据来学习将输入变量(X)变成输出变量(Y)的映射函数。换句话说,它在下面的等式中求解 f :
Y = f (X)
这允许我们在给定新输入时准确地生成输出。
我们将讨论两种类型的监督学习:分类和回归。
分类用于当输出变量为类别形式时,预测给定样本的结果。分类模型可能会查看输入数据,并尝试预测“生病”或“健康”等标签
回归用于当输出变量为实值形式时,预测给定样本的结果。例如,回归模型可以处理输入数据来预测降雨量、人的身高等。
我们在这篇博客中介绍的前 5 种算法——线性回归、逻辑回归、CART、朴素贝叶斯和 K 近邻(KNN)——都是监督学习的例子。
集合是另一种监督学习。这意味着结合多个单独较弱的机器学习模型的预测,以对新样本产生更准确的预测。本文的算法 9 和 10——用随机森林打包,用 XGBoost 增强——是集成技术的例子。
无监督学习算法:
当我们只有输入变量(X)而没有相应的输出变量时,使用无监督学习模型。他们使用未标记的训练数据来建模数据的底层结构。
我们将讨论三种类型的无监督学习:
关联用于发现集合中项目同时出现的概率。它被广泛用于购物篮分析。例如,关联模型可能用于发现如果顾客购买面包,她/他有 80%的可能也购买鸡蛋。
聚类用于对样本进行分组,使得同一个聚类中的对象彼此之间的相似度高于另一个聚类中的对象。
降维用于减少数据集的变量数量,同时确保仍然传达重要信息。降维可以使用特征提取方法和特征选择方法来完成。特征选择选择原始变量的子集。特征提取执行从高维空间到低维空间的数据转换。示例:PCA 算法是一种特征提取方法。
我们在这里讨论的算法 6-8——Apriori、K-means、PCA——都是无监督学习的例子。
强化学习:
强化学习是一种机器学习算法,它允许代理根据其当前状态,通过学习将最大化奖励的行为来决定最佳的下一步行动。
强化算法通常通过试错来学习最优动作。例如,想象一个视频游戏,玩家需要在特定的时间移动到特定的地方来获得分数。玩这种游戏的强化算法一开始会随机移动,但随着时间的推移,通过反复试验,它会知道何时何地需要移动游戏中的角色,以最大化其总点数。
量化机器学习算法的流行程度
这篇文章中列出的 10 大算法是考虑到机器学习初学者而选择的。它们主要是我在孟买大学攻读计算机工程学士学位期间从“数据仓库和挖掘”(DWM)课程中学到的算法。我特别包括了最后两种算法(集成方法),因为它们经常被用来赢得游戏比赛。
事不宜迟,面向初学者的 10 大机器学习算法:
1.线性回归
在机器学习中,我们有一组输入变量(x ),用于确定输出变量(y)。输入变量和输出变量之间存在关系。ML 的目标是量化这种关系。
Figure 1: Linear Regression is represented as a line in the form of y = a + bx. Source
在线性回归中,输入变量(x)和输出变量(y)之间的关系表示为 y = a + bx 形式的方程。因此,线性回归的目标是找出系数 a 和 b 的值。这里,a 是直线的截距,b 是直线的斜率。
图 1 显示了一个数据集的 x 和 y 值。目标是拟合一条最接近大多数点的线。这将减少数据点的 y 值和直线之间的距离(“误差”)。
2.逻辑回归
线性回归预测是连续值(即以厘米为单位的降雨量),逻辑回归预测是应用变换函数后的离散值(即学生是否及格)。
逻辑回归最适合二元分类:y = 0 或 1 的数据集,其中 1 表示默认类别。例如,在预测一个事件是否会发生时,只有两种可能性:它会发生(我们用 1 表示)或不会发生(0)。因此,如果我们预测一个病人是否生病,我们将使用数据集中的值1
来标记生病的病人。
逻辑回归因其使用的变换函数而得名,称为逻辑函数 h(x)= 1/ (1 + ex)。这就形成了一个 S 形曲线。
在逻辑回归中,输出采用默认类别概率的形式(与直接产生输出的线性回归不同)。因为是概率,所以输出在 0-1 的范围内。因此,举例来说,如果我们试图预测患者是否生病,我们已经知道生病的患者被表示为1
,因此如果我们的算法给患者分配 0.98 的分数,它认为该患者很可能生病。
此输出(y 值)是通过使用逻辑函数 h(x)= 1/ (1 + e^ -x)对 x 值进行对数变换而生成的。然后应用一个阈值将这个概率强制转换成二进制分类。
图 2:确定肿瘤是恶性还是良性的逻辑回归。如果概率 h(x)>= 0.5,则分类为恶性。来源
在图 2 中,为了确定肿瘤是否是恶性的,默认变量是 y = 1(肿瘤=恶性)。x 变量可以是肿瘤的度量,例如肿瘤的大小。如图所示,逻辑函数将数据集各种实例的 x 值转换到 0 到 1 的范围内。如果概率越过阈值 0.5(由水平线显示),则肿瘤被分类为恶性。
logistic 回归方程*p(x)= e ^(B0+b1x)/(1+e(B0+b1x))*可以转化为 ln(p(x) / 1-p(x)) = b0 + b1x 。
逻辑回归的目标是使用训练数据来找到系数 b0 和 b1 的值,使得它将最小化预测结果和实际结果之间的误差。使用最大似然估计技术来估计这些系数。
3.手推车
分类和回归树(CART)是决策树的一种实现。
分类和回归树的非终端节点是根节点和内部节点。终端节点是叶节点。每个非终端节点代表单个输入变量(x)和该变量上的分裂点;叶节点代表输出变量(y)。该模型如下用于进行预测:遍历树的分裂以到达叶节点,并输出叶节点处存在的值。
下图 3 中的决策树根据一个人的年龄和婚姻状况对他是会买跑车还是小型货车进行了分类。如果这个人已经超过 30 岁了,还没有结婚,我们就像下面这样遍历树:“超过 30 岁?”->是-> ‘结婚了吗?’->否。因此,模型输出一辆跑车。
图 3:决策树的组成部分。来源
4.朴素贝叶斯
为了计算一个事件发生的概率,假设另一个事件已经发生,我们使用贝叶斯定理。为了计算假设(h)为真的概率,给定我们的先验知识(d),我们使用贝叶斯定理如下:
P(h|d)= (P(d|h) P(h)) / P(d)
其中:
- P(h|d) =后验概率。假设 h 为真的概率,给定数据 d,其中 P(h|d)= P(d1| h) P(d2| h)…P(dn| h)
- P(d|h) =可能性。假设假设 h 为真,数据 d 的概率。
- P(h) =类别先验概率。假设 h 为真的概率(不考虑数据)
- P(d) =预测值先验概率。数据的概率(不考虑假设)
这种算法被称为“天真的”,因为它假设所有的变量都是相互独立的,这是在现实世界的例子中做出的天真的假设。
图 4:使用朴素贝叶斯通过变量“天气”来预测“播放”的状态。
以图 4 为例,如果天气=晴朗,结果会是什么?
给定变量 weather = 'sunny '的值,计算 P(yes|sunny)和 P(no|sunny)并选择概率较高的结果,以确定结果 play = ‘yes ‘或’ no’。
->P(是|晴)= (P(晴|是)* P(是))/ P(晴)= (3/9 * 9/14 ) / (5/14) = 0.60
-> P(no | sunny)=(P(sunny | no)* P(no))/P(sunny)=(2/5 * 5/14)/(5/14)= 0.40
因此,如果天气= ‘晴朗’,结果就是玩= ‘是’。
5.KNN
K-最近邻算法使用整个数据集作为训练集,而不是将数据集分成训练集和测试集。
当一个新的数据实例需要一个结果时,KNN 算法会遍历整个数据集,以找到与新实例最近的 k 个实例,或者与新记录最相似的 k 个实例,然后输出结果的平均值(对于回归问题)或者模式(最频繁的类)以解决分类问题。k 值由用户指定。
实例之间的相似性使用诸如欧几里德距离和汉明距离之类的度量来计算。
无监督学习算法
6.推测的
Apriori 算法用于事务数据库中挖掘频繁项目集,然后生成关联规则。它广泛用于市场购物篮分析,在这种分析中,人们检查数据库中频繁出现的产品组合。一般来说,我们把‘如果一个人购买了物品 X,那么他购买了物品 Y’的关联规则写成:X -> Y。
例如:如果一个人购买牛奶和糖,那么她可能会购买咖啡粉。这可以用关联规则的形式写成:{牛奶,糖} ->咖啡粉。关联规则是在跨越支持度和置信度的阈值之后生成的。
图 5:关联规则 X->Y 的支持度、置信度和提升度的公式。
支持度有助于减少在频繁项目集生成期间要考虑的候选项目集的数量。这项支持措施以先验原则为指导。先验原则指出,如果一个项目集是频繁的,那么它的所有子集也必须是频繁的。
7.k 均值
K-means 是一种迭代算法,它将相似的数据分组到聚类中。它计算 k 个聚类的质心,并将一个数据点分配给质心和该数据点之间距离最小的那个聚类。
图 6:K 均值算法的步骤。来源
它是这样工作的:
我们从选择 k 值开始,这里,假设 k = 3。然后,我们将每个数据点随机分配给 3 个集群中的任何一个。计算每个聚类的聚类质心。红色、蓝色和绿色的星星表示 3 个星团中每个星团的质心。
接下来,将每个点重新分配给最近的聚类质心。在上图中,上面的 5 个点被分配给了具有蓝色质心的簇。按照相同的步骤为包含红色和绿色质心的簇指定点。
然后,计算新簇的质心。旧的质心是灰色的星;新的质心是红色、绿色和蓝色的星。
最后,重复步骤 2-3,直到没有点从一个集群切换到另一个集群。一旦连续 2 步没有切换,退出 K-means 算法。
8.污染控制局(Pollution Control Agency)
主成分分析(PCA)用于通过减少变量的数量来使数据易于探索和可视化。这是通过将数据中的最大方差捕获到一个新的坐标系中来实现的,该坐标系具有称为“主分量”的轴。
每个分量都是原始变量的线性组合,并且彼此正交。分量之间的正交性表示这些分量之间的相关性为零。
第一个主成分捕获数据中最大可变性的方向。第二个主成分捕获数据中的剩余方差,但具有与第一个成分不相关的变量。类似地,所有连续的主成分(PC3、PC4 等)捕获剩余的方差,同时与前一个成分不相关。
图 7:3 个原始变量(基因)减少到 2 个新变量,称为主成分(PC 的)。来源
集成学习技术:
集成意味着通过投票或平均来组合多个学习者(分类器)的结果以获得改进的结果。在分类期间使用投票,在回归期间使用平均。这个想法是全体学习者比单个学习者表现更好。
有 3 种类型的组合算法:打包、提升和堆叠。我们不打算在这里讨论“堆叠”,但是如果你想要一个详细的解释,这里有一个来自 Kaggle 的可靠介绍。
9.用随机森林装袋
bagging 的第一步是用 Bootstrap 抽样方法创建的数据集创建多个模型。在 Bootstrap 采样中,每个生成的训练集都由原始数据集中的随机子样本组成。
这些训练集的大小都与原始数据集相同,但有些记录会重复多次,有些记录则根本不会出现。然后,整个原始数据集被用作测试集。因此,如果原始数据集的大小是 N,那么每个生成的训练集的大小也是 N,唯一记录的数量大约是(2N/3);测试集的大小也是 n。
bagging 的第二步是通过对不同生成的训练集使用相同的算法来创建多个模型。
这就是随机森林的由来。与决策树不同,在决策树中,每个节点根据最小化错误的最佳特征进行分割,在随机森林中,我们选择随机选择的特征来构建最佳分割。随机性的原因是:即使使用 bagging,当决策树选择最佳特征进行分割时,它们最终会得到相似的结构和相关的预测。但是在特征的随机子集上分裂后的 bagging 意味着来自子树的预测之间更少的相关性。
在每个分割点要搜索的特征数量被指定为随机森林算法的一个参数。
因此,在具有随机森林的 bagging 中,使用记录的随机样本来构建每棵树,并且使用预测因子的随机样本来构建每个分裂。
10.使用 AdaBoost 升压
Adaboost 代表自适应增压。Bagging 是一个并行集合,因为每个模型都是独立构建的。另一方面,boosting 是一个顺序集成,其中每个模型都是基于纠正前一个模型的错误分类而构建的。
Bagging 主要涉及“简单投票”,每个分类器投票以获得一个最终结果——一个由大多数平行模型决定的结果;提升涉及“加权投票”,其中每个分类器投票以获得由多数决定的最终结果——但顺序模型是通过给先前模型的错误分类实例分配更大的权重来建立的。
图 9:决策树的 Adaboost。来源
在图 9 中,步骤 1、2、3 涉及一个称为决策树桩的弱学习器(一个 1 级决策树仅基于一个输入特征的值进行预测;其根直接连接到其叶的决策树)。
构建弱学习者的过程继续,直到已经构建了用户定义数量的弱学习者,或者直到在训练时没有进一步的改进。步骤 4 组合了前面模型的 3 个决策树桩(因此在决策树中有 3 个分割规则)。
首先,从一个决策树开始,对一个输入变量进行决策。
数据点的大小表明我们已经应用了相等的权重来将它们分类为圆形或三角形。decision stump 在上半部分生成了一条水平线来对这些点进行分类。我们可以看到,有两个圆被错误地预测为三角形。因此,我们将为这两个圆分配更高的权重,并应用另一个决策树桩。
其次,移动到另一个决策树树桩,对另一个输入变量做出决策。
我们观察到上一步中两个错误分类的圆的大小大于其余的点。现在,第二个决策树桩将尝试正确预测这两个圆。
由于分配了较高的权重,这两个圆已被左边的垂直线正确分类。但这导致了顶部三个圆圈的错误分类。因此,我们将为顶部的这三个圆圈分配更高的权重,并应用另一个决策树桩。
第三,训练另一个决策树树桩对另一个输入变量做出决策。
上一步中的三个错误分类的圆大于其余的数据点。现在,已经生成了一条向右的垂直线来对圆和三角形进行分类。
第四,结合决策树桩。
我们结合了前面 3 个模型中的分隔符,并观察到与任何单个弱学习者相比,该模型中的复杂规则能够正确分类数据点。
结论:
概括地说,我们已经介绍了数据科学中一些最重要的机器学习算法:
- 5 监督学习技术——线性回归、逻辑回归、CART、朴素贝叶斯、KNN。
- 3 无监督学习技术——Apriori,K-means,PCA。
- 2 集合技术——用随机森林打包,用 XGBoost 增强。
编者按:这篇文章最初发布在 KDNuggets 上,并被 perlesson 转载。作者莉娜·肖是一名开发人员和数据科学记者。
获取免费的数据科学资源
免费注册获取我们的每周时事通讯,包括数据科学、 Python 、 R 和 SQL 资源链接。此外,您还可以访问我们免费的交互式在线课程内容!
数据科学家必备的 12 个命令行工具
原文:https://www.dataquest.io/blog/top-12-essential-command-line-tools-for-data-scientists/
June 20, 2018This post is a short overview of a dozen Unix-like operating system command line tools which can be useful for data science tasks. The list does not include any general file management commands (pwd
, ls
, mkdir
, rm
, …) or remote session management tools (rsh
, ssh
, …), but is instead made up of utilities which would be useful from a data science perspective, generally those related to varying degrees of data inspection and processing. They are all included within a typical Unix-like operating system as well. It is admittedly elementary, but I encourage you to seek out additional command examples where appropriate. Tool names link to Wikipedia entries as opposed to man pages, as the former are generally more friendly to newcomers, in my view.
1.wget
wget
是一个文件检索实用程序,用于从远程位置下载文件。在其最基本的形式中,wget
用于下载远程文件,如下所示:
~$ wget https://raw.githubusercontent.com/uiuc-cse/data-fa14/gh-pages/data/iris.csv
--2018-03-20 18:27:21-- https://raw.githubusercontent.com/uiuc-cse/data-fa14/gh-pages/data/iris.csv
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.20.133
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|151.101.20.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3716 (3.6K) [text/plain]
Saving to: ‘iris.csv’
iris.csv
100 [=======================================================================================================>] 3.63K --.-KB/s in 0s
2018-03-20 18:27:21 (19.9 MB/s) - ‘iris.csv’ saved [3716/3716]
2.cat
cat
是将文件内容输出到标准输出的工具。名字来源于串联。更复杂的用例包括将文件组合在一起(实际连接),将文件附加到另一个文件,给文件行编号,等等。
~$ cat iris.csv
sepal_length,sepal_width,petal_length,petal_width,species
5.1,3.5,1.4,0.2,setosa
4.9,3,1.4,0.2,setosa
4.7,3.2,1.3,0.2,setosa
4.6,3.1,1.5,0.2,setosa
5,3.6,1.4,0.2,setosa
...
6.7,3,5.2,2.3,virginica
6.3,2.5,5,1.9,virginica
6.5,3,5.2,2,virginica
6.2,3.4,5.4,2.3,virginica
5.9,3,5.1,1.8,virginica
3.wc
wc
命令用于从文本文件中产生字数、行数、字节数和相关值。在不带选项的情况下运行时,wc 的默认输出是一行,从左到右包括行数、字数(注意每行不带分隔符的单个字符串算作一个单词)、字符数和文件名。
~$ wc iris.csv
151 151 3716 iris.csv
4.head
head
将文件的前 n 行(默认为 10 行)输出到标准输出。可以使用-n 选项设置显示的行数。
~$
head -n 5 iris.csv
sepal_length,sepal_width,petal_length,petal_width,species
5.1,3.5,1.4,0.2,setosa
4.9,3,1.4,0.2,setosa
4.7,3.2,1.3,0.2,setosa
4.6,3.1,1.5,0.2,setosa
5.tail
有人猜测 tail
是做什么的吗?
~$ tail -n 5 iris.csv
6.7,3,5.2,2.3,virginica
6.3,2.5,5,1.9,virginica
6.5,3,5.2,2,virginica
6.2,3.4,5.4,2.3,virginica
5.9,3,5.1,1.8,virginica
Working that command line sorcery.
6.find
find
是一个在文件系统中搜索特定文件的工具。以下代码从当前目录(" .)开始搜索树结构)对于任何以“iris”开头并以常规文件类型(“-type f”)的任何 dumber 字符(“-name‘iris *’”)结尾的文件:
~$ find . -name 'iris*' -type f
./iris.csv
./notebooks/kmeans-sharding-init/sharding/tests/results/iris_time_results.csv
./notebooks/ml-workflows-python-scratch/iris_raw.csv
./notebooks/ml-workflows-python-scratch/iris_clean.csv
...
7.cut
cut
用于从文件中切出一行文字的片段。虽然可以使用各种标准制作这些切片,但是 cut 对于从 CSV 文件中提取列数据非常有用。这将输出 iris.csv 文件的第五列(“-f 5 “),使用逗号作为字段分隔符(”-d ‘,’”):
~$ cut -d ',' -f 5 iris.csv
species
setosa
setosa
setosa
...
8.uniq
uniq
通过将相同的连续行折叠成单个副本,将文本文件的输出修改为标准输出。就其本身而言,这可能看起来不太有趣,但是当用于在命令行构建管道(将一个命令的输出管道化到另一个命令的输入中,等等)时,这可能会变得有用。
下面给出了第五列中保存的 iris 数据集类名的唯一计数,以及它们的计数:
~$ tail -n 150 iris.csv | cut -d "," -f 5 | uniq -c
50 setosa
50 versicolor
50 virginica
What the cow say.
9.awk
awk
实际上并不是一种“命令”,而是一种完整的编程语言。它用于处理和提取文本,可以从命令行以单行命令的形式调用。
掌握 awk 需要一些时间,但在此之前,这里有一个它可以完成的示例。考虑到我们的示例文件— iris.csv —相当有限(尤其是当它涉及到文本的多样性时),这一行将调用 awk,在给定的文件(“iris.csv”)中搜索字符串“setosa”,并将遇到的项目(保存在$0 变量中)一个接一个地打印到标准输出中:
~$ awk '/setosa/ { print $0 }' iris.csv
5.1,3.5,1.4,0.2,setosa
4.9,3,1.4,0.2,setosa
4.7,3.2,1.3,0.2,setosa
4.6,3.1,1.5,0.2,setosa
5,3.6,1.4,0.2,setosa
10.grep
grep
是另一个文本处理工具,这个用于字符串和正则表达式的匹配。
~$ grep -i "vir" iris.csv
6.3,3.3,6,2.5,virginica
5.8,2.7,5.1,1.9,virginica
7.1,3,5.9,2.1,virginica
...
如果你花很多时间在命令行上做文本处理,grep 绝对是一个你会很熟悉的工具。更多有用的细节见这里。
11.sed
sed
是一个流编辑器,又一个文本处理和转换工具,类似于 awk。让我们使用下面的代码行将 iris.csv 文件中出现的“setosa”更改为“iris-setosa”。
~$
sed 's/setosa/iris-setosa/g' iris.csv > output.csv
~$ head output.csv
sepal_length,sepal_width,petal_length,petal_width,species
5.1,3.5,1.4,0.2,iris-setosa
4.9,3,1.4,0.2,iris-setosa
4.7,3.2,1.3,0.2,iris-setosa
...
12.history
history
非常简单,但也非常有用,尤其是如果您依赖于复制您在命令行中完成的一些数据准备工作。
~$ history
547 tail iris.csv
548 tail -n 150 iris.csv
549 tail -n 150 iris.csv | cut -d "," -f 5 | uniq -c
550 clear
551 history
这是对 12 个方便的命令行工具的简单介绍。这只是对数据科学(或任何其他目标,就此而言)命令行可能实现的功能的一个尝试。把你从鼠标中解放出来,看着你的生产力提高。
编者按:这是最初发布在 KDNuggets 上的,已经被 perlesson 转载。作者马修·梅奥是机器学习研究员,也是 KDnuggets 的编辑。
商业分析师 20 大面试问答(2022)
原文:https://www.dataquest.io/blog/top-20-job-interview-questions-and-answers-for-business-analysts-2022/
September 21, 2022
在本文中,我们将分享你在求职面试中可能遇到的 20 个最常见的商业分析师面试问题和答案。为这些问题做好准备不仅可以帮助你为业务分析师职位的面试做好准备并感到更加舒适,还可以确定你在技术技能方面可能存在的差距。
我们从分享一般商业分析师面试问题开始。然后,我们将关注数据分析,探索您将面临的最常见的技术问题。
一般商业分析师面试问题
1.商业分析师的主要职责是什么?
业务分析师的主要目标是帮助组织解决问题,或者定义、推荐和实现最佳解决方案。
虽然业务分析师的一些活动可能因行业或组织而异,但以下是所有业务分析师共有的主要职责:
- 确定业务需求和目标
- 评估业务问题和市场机会
- 为企业提供数据驱动的建议
- 通过分析数据,协助制定战略性商业决策
- 定义关键和次要 KPI
- 创建项目计划以改善业务状况
- 提供相关数据报告以监控进度
如果您成为 IT 业务分析师,您的职责将包括 IT 项目的建议、设计、实现和变更管理。
延伸阅读
您可以在下面的文章中了解更多关于业务分析师的主要职责:
2.业务分析师和数据分析师的区别是什么?
虽然这两个角色有许多相似之处(都处理大量数据,做出数据驱动的决策,需要相同的软技能,等等。)有一些重要的区别:
| | 商业分析师 | 数据分析师 |
| 工作重点: | 通过数字和非数字数据确定业务需求 | 识别数字数据中的模式 |
| 与一起工作 | 营销、销售和产品团队 | 数据科学家和数据工程师 |
| 背景: | 商科专业 | 技术专业 |
| 技能: | 商业智能、项目管理、数据仓库 | 数据清理、数据争论、数据分析、统计 |
延伸阅读:
您可以在下面的文章中了解更多关于差异的信息:
- 商业分析师与数据分析师:哪个适合你?(2022)
3.商业分析师的基本技能是什么?
技术技能:
- 统计分析
- 商业智能软件(微软 Power BI、Tableau、Qlik Sense 等。)
- 数据分析和可视化
- 数据库管理
- 商业智能软件中的数据建模
- 使用数据库
- 领域专业知识
- 业务流程
- 项目管理
- 文件和报告
软技能:
- 分析思维
- 批判性思维
- 解决问题
- 决策
- 沟通和谈判技巧
- 时间管理
- 关注细节
- 协力
- 好奇心
4.商业项目的主要阶段是什么?
任何业务项目都包括以下全球阶段:
- 开始
- 分析
- 规划
- 履行
- 监测和控制
- 关闭
5.商业分析师使用哪些数字工具?
以下是业务分析师使用的一些工具:
- 商业智能工具:微软 Power BI、Tableau、Qlik Sense、SAP
- 办公工具:微软 Excel、Word、PowerPoint 或谷歌文档、谷歌工作表和谷歌幻灯片
- 项目管理工具:特雷罗,吉拉,汇合,阿萨纳
- 数据库语言(例如 SQL)
- 调查:调查猴子,类型表单,谷歌表单
- UX 线框:Balsamiq,UXPressia,Figma,Adobe XD
- 图表工具:MS Visio,draw.io
6.业务分析师处理哪些文档?
业务分析师使用不同类型的文档,这取决于他们工作的性质(例如 IT 业务分析师、具有领域专业知识的业务分析师等)。).
业务分析师在处理项目时最常用的一些文档包括:
- 商业案例
- 商业分析文件
- 业务需求文档(BRB)
- 用例文档
- 系统需求规格文件
- 功能需求
- 非功能性需求
- 数据映射要求
- 风险分析文件
- 征求建议书(RFP ),包括评估图
- 工程计划
- 线框
- 差距分析
- 用户验收测试(UAT)进度报告
- 测试案例
- 项目进度报告
- 移交文件
7.业务分析师使用什么样的图表?
业务分析中最常用的图表包括:
- 用例图——表示参与者与系统的所有可能的交互
- 活动图—显示跨不同业务单位的各种活动的流程
- 协作图—显示系统对象之间的交互
- 流程图—说明解决特定任务的操作工作流程
- 数据流图—显示进出系统的信息流
- 序列图——描述按时间顺序排列的系统各部分之间的相互作用
- 实体关系图(ERD) —描述系统中实体之间的关系
- 类图——展示系统的结构,包括其类、方法、属性和对象
8.什么是项目可交付成果?
项目可交付成果是指在项目的每个阶段产生的一系列有形或无形的成果,这些成果可以在内部交付,也可以交付给股东和客户。这些包括各种报告、文件、提案、图纸、战略以及最终产品和服务。
9.什么是需求,它和需求有什么不同?
需求是由股东制定的有针对性的陈述,并且代表了他们为了满足特定的业务需求和实现特定的业务目标而需要什么的良好记录的指示。需求代表了项目的核心;股东在项目开始前设定它们,然后业务分析师定义、分析、估计它们,并对它们进行优先级排序。我们可以说,虽然业务需求是期望的最终结果的高级规范,但是业务需求是该业务需求的可应用的、完整记录的表示。
10.定义需求获取,并列出其方法。
需求获取是从与股东、客户和最终用户的直接互动中收集与项目相关的需求的过程。需求获取的方法包括以下几种:
- 头脑风暴
- 面谈
- 车间
- 调查和问卷
- 观察
- 文件分析
- 小组讨论
- 界面分析
- 样机研究
11.业务分析师如何评估需求的质量?
为此,业务分析师可以使用智能规则。一个好的需求应该满足以下标准:
- 特定的:需求的描述应该是特定的、全面的和定义明确的。
- 可度量的:需求成功的标准可以使用提供的度量来度量。
- 可实现的:应该有所有必要的资源(时间、金钱和人员)来实现需求。
- 现实:在给定可用资源的情况下,需求应该是可行的。
- 有时间限制的:需求的满足应该被一个确定的时间间隔所限制。
12.什么是 BRD,它的主要组成部分是什么?
BRD 代表业务需求文档。这是一个重要的正式文档,它清楚地陈述了项目的目标并确定了项目的主要股东,包括他们的业务需求和要求、潜在的风险以及项目的预期结果。业务分析师负责在与股东沟通后创建此文档。
BRD 的主要内容包括:
- 行动纲要
- 项目概述、愿景和目标
- 项目范围
- 项目路线图
- 主要股东
- 业务需求陈述
- 业务需求
- 成本效益分析
- 项目风险
- 项目限制
- 基础设施要求
数据分析面试问题
数据分析是商业分析师最重要的部分之一。为了让你的建议得到关键利益相关者和企业领导的认可,你必须让他们相信你对形势做出了正确的诊断。您需要确定业务需求和问题,并有效地分享有意义的见解。为此,您将使用商业智能(BI)解决方案,如 Power BI 和 Tableau。以下是你在商业分析师面试中会遇到的一些最常见的问题。
13.商业分析师可用的顶级商业智能解决方案有哪些?
全球业务分析师最常用的商业智能解决方案包括:
- 微软 Power BI(世界领先的解决方案)
- (舞台上由人扮的)静态画面
- Qlik Sense
- 谷歌数据工作室
- 检查员
- 西森斯
延伸阅读
你可以在下面的文章中了解更多关于微软商务智能的顶级面试问题:
14.力量 BI 和 Tableau 有什么区别?
虽然 Power BI 和 Tableau 都是用于业务数据争论、数据分析和数据可视化的商业智能(BI)应用程序,但它们之间存在一些显著差异:
- Power BI 使用 DAX(数据分析表达式)进行计算,Tableau 使用 MDX(多维表达式)。
- Power BI 可以处理相对有限的数据量,而 Tableau 可以轻松处理海量数据。
- Power BI 有一个相对简单易学的界面,专业人士和初学者都可以使用。Tableau 界面更具挑战性;所以,不太适合新手。
- 与 Tableau 相比,Power BI 可连接的数据源范围较小。
- Power BI 比 Tableau 便宜很多。
- Power BI 是一个完美的报告工具,而 Tableau 擅长数据可视化。
15.商业智能解决方案的最大优势是什么?
作为业务分析师,您将使用业务分析或业务智能工具,如 Microsoft Power BI、Qlik Sense 或 Tableau。
以下是使用 BI 解决方案的主要优势:
- 无需深厚的技术技能即可分析数据
- 以结构化和一致的方式呈现数据和见解
- 使用相关 KPI 支持决策
- 在一个地方整合来自多个来源的数据
- 通过交互式仪表盘分享实时见解
- 提高公司对有意义数据的可见性
- 进行预测分析
- 提高生产力
16.商业智能解决方案的数据分析有哪些不同阶段?
商业智能解决方案的数据分析过程有四个主要阶段:
- 数据准备:这个阶段包括从多个数据源加载数据,格式化、清理和合并数据。
- 数据模型:这个阶段包括描述数据的结构,如何存储数据,以及各种数据集之间的关系和约束。
- 数据可视化:这个阶段包括选择正确的视觉效果和颜色来有效地传达你的故事。
- 数据分析:这个阶段包括分析数据、将数据分组、宁滨数据,以及准备表示 KPI 的仪表板
17.什么是数据清理,为什么它对您的分析很重要?
数据清理是数据分析过程中必要的准备(通常相当耗时)步骤,在收集数据之后,分析数据之前。该步骤包括以下内容:
- 删除重复数据
- 处理缺失值
- 纠正或删除不准确的数据
为了从输入数据中提取有意义的见解,它应该是可靠的、完整的、一致的和有代表性的-这正是数据清理的目的。
18.如果你有丢失的数据,你该怎么办?
处理缺失数据有多种方法:
- 删除任何缺少值的行
- 删除任何缺少值的列
- 用其他值填充缺失值,如该列的平均值、中值或众数;从另一列提取的值;从附加研究中获得的值;等等
- 保留丢失的值不变
19.数据建模涉及哪些关键活动?
- 识别用例及需求
- 检索、清理和转换数据
- 设计数据模型
- 定义不同表中数据之间的关系和层次结构
- 处理数据粒度
- 创建度量和扩充数据
- 调整和优化模型性能
- 验证数据模型
20.对于您的数据分析来说,什么是好的数据可视化?
良好的数据视觉效果应遵循的主要原则包括:
- 应该是干净易读。这意味着选择合适的字体,没有任何干扰元素(如不必要的颜色、线条、网格、多余的注释等)。)、所有必要元素(情节标题、轴名称和单位、关键特征的强调等。),并用最小的视觉效果传达最大的信息。
- 应该对目标受众清晰,有说服力,包括没有任何技术背景的人。
- 它应该讲述一个隐藏在原始数据中的故事,回答商业项目目标中陈述的主要问题或任何对回答主要问题很重要的中间问题。
外卖
现在,您已经看到了最常见的业务分析师面试问题和答案,您可以满怀信心地准备业务分析师技术面试了!
如果你想掌握或更新你的技能(并获得认证!)在申请商业分析师工作之前,在 Dataquest 探索独立的商业分析师职业道路。它将帮助您学习必要的技术技能,并在现实世界的项目中实践这些技能,您可以将它们包含在您的投资组合中。
有关业务分析的更多信息,请查看以下文章:
20 大 Python AI 和机器学习开源项目
原文:https://www.dataquest.io/blog/top-20-python-ai-and-machine-learning-open-source-projects/
July 23, 2018
进入机器学习和人工智能领域不是一件容易的事情,但却是数据科学项目的关键部分。许多有抱负的专业人士和爱好者发现很难建立一个合适的进入该领域的途径,因为今天有大量的资源可用。这个领域在不断发展,我们必须跟上这一快速发展的步伐。为了应对这种势不可挡的发展和创新速度,保持更新和了解 ML 进展的一个好方法是通过为许多高级专业人员日常使用的开源项目和工具做出贡献来参与社区。
在这里,我们更新了信息,并检查了自我们上一篇文章20 大 Python 机器学习开源项目(2016 年 11 月)以来的趋势。
Tensorflow 以三位数的贡献者增长率跃居第一。Scikit-learn 跌至第二位,但仍拥有大量的贡献者。
与 2016 年相比,贡献者数量增长最快的项目是
- TensorFlow 增长了 169%,从 493 人增加到 1324 人
- Deap 增长了 86%,从 21 人增加到 39 人
- Chainer 的贡献者从 84 人增加到 154 人,增加了 83%
- Gensim 增长了 81%,从 145 人增加到 262 人
- Neon,增长了 66%,从 47 人增加到 78 人
- Nilearn 增长了 50%,从 46 人增加到 69 人
2018 年还新增了:
- Keras,629 个贡献者
- PyTorch,399 个贡献者
图 Github 上排名前 20 的 Python AI 和机器学习项目。
大小与贡献者的数量成正比,颜色代表贡献者数量的变化——红色较高,蓝色较低。雪花形状用于深度学习项目,圆形用于其他项目。
我们看到像 TensorFlow、Theano 和 Caffe 这样的深度学习项目是最受欢迎的。
下面的列表根据 Github 上贡献者的数量以降序给出了项目。贡献者数量的变化是相对于 2016 KDnuggets 关于前 20 名 Python 机器学习开源项目的帖子。
我们希望您喜欢浏览这些文档页面,开始合作并学习使用 Python 进行机器学习的方法。
- TensorFlow 最初是由谷歌机器智能研究组织谷歌大脑团队的研究人员和工程师开发的。该系统旨在促进机器学习的研究,并使其快速而容易地从研究原型过渡到生产系统。投稿人数:1324(上升 168%),提交人数:28476,明星人数:92359。Github 网址: Tensorflow
- Scikit-learn 是用于数据挖掘和数据分析的简单高效的工具,每个人都可以访问,并可在各种上下文中重用,构建于 NumPy、SciPy 和 matplotlib 之上,开源,商业可用–BSD 许可证。投稿人数:1019(上升 39%),提交人数:22575,Github 网址: Scikit-learn
- Keras ,高级神经网络 API,用 Python 编写,能够运行在 TensorFlow、CNTK 或 Theano 之上。投稿人数:629(新),提交人数:4371,Github 网址: Keras
- PyTorch ,强 GPU 加速的 Python 中的张量和动态神经网络。投稿人数:399(新),提交人数:6458,Github 网址: pytorch
- Theano 允许您高效地定义、优化和评估涉及多维数组的数学表达式。投稿人数:327(上升 24%),提交人数:27931,Github 网址:theno
- Gensim 是一个免费的 Python 库,具有可扩展的统计语义、分析纯文本文档的语义结构、检索语义相似的文档等特性。贡献者:262 (81%以上),提交:3549,Github 网址: Gensim
- Caffe 是一个深度学习框架,考虑到了表达、速度和模块化。它是由伯克利视觉和学习中心()和社区贡献者开发的。投稿人数:260(上升 21%),提交人数:4099,Github 网址:咖啡馆
- Chainer 是一个基于 Python 的独立开源框架,用于深度学习模型。Chainer 提供了一种灵活、直观和高性能的方法来实现全方位的深度学习模型,包括最先进的模型,如递归神经网络和变分自动编码器。贡献者:154 (84%以上),提交:12613,Github 网址:链接者
- Statsmodels 是一个 Python 模块,允许用户探索数据、估计统计模型和执行统计测试。描述性统计、统计测试、绘图函数和结果统计的广泛列表可用于不同类型的数据和每个估计量。贡献者:144(上升了 33%),提交:9729,Github 网址: Statsmodels
- 幕府将军是一个机器学习工具箱,提供了广泛的统一高效的机器学习(ML)方法。工具箱无缝地允许轻松组合多种数据表示、算法类和通用工具。投稿人数:139(上升 32%),提交人数:16362,Github 网址:幕府
- Pylearn2 是一个机器学习库。它的大部分功能都建立在 Theano 之上。这意味着你可以使用数学表达式编写 Pylearn2 插件(新模型、算法等),Theano 将为你优化和稳定这些表达式,并将它们编译到你选择的后端(CPU 或 GPU)。贡献者:119(上升 3.5%),提交:7119,Github 网址:派拉恩 2
- NuPIC 是一个开源项目,基于一种叫做分级时间记忆(HTM)的大脑皮层理论。HTM 理论的一部分已经被实现,测试,并在应用中使用,而 HTM 理论的其他部分仍在发展中。投稿人数:85(上升 12%),提交人数:6588,Github 网址: NuPIC
- Neon 是 Nervana 的基于 Python 的深度学习库。它提供了易用性,同时提供了最高的性能。注意:英特尔不再支持 Neon,但是你仍然可以通过 Github 上的内容使用它。投稿人数:78(上升 66%),提交人数:1112,Github 网址:霓虹
- Nilearn 是一个 Python 模块,用于快速简单地对神经影像数据进行统计学习。它利用 scikit-learn Python 工具箱进行多变量统计,并应用于预测建模、分类、解码或连通性分析。投稿人数:69(上升 50%),提交人数:6198,Github 网址: Nilearn
- Orange3 是面向新手和专家的开源机器学习和数据可视化。带有大型工具箱的交互式数据分析工作流。贡献者:53 人(上升了 33%),提交数:8915,Github 网址: Orange3
- Pymc 是一个 python 模块,实现了贝叶斯统计模型和拟合算法,包括马尔可夫链蒙特卡罗。它的灵活性和可扩展性使它适用于大量的问题。贡献者:39(上升 5.4%),提交:2721,Github 网址: Pymc
- Deap 是一个新颖的进化计算框架,用于快速原型和想法测试。它试图使算法清晰,数据结构透明。它与多处理和 SCOOP 等并行化机制完美地协调工作。贡献者:39 人(86%以上),提交时间:1960 年,Github 网址: Deap
- aroy(近似最近邻哦耶)是一个 C++库,用 Python 绑定来搜索空间中靠近给定查询点的点。它还创建基于文件的大型只读数据结构,这些数据结构被映射到内存中,以便许多进程可以共享相同的数据。贡献者:35(上升 46%),提交:527,Github 网址:惹怒
- PyBrain 是 Python 的模块化机器学习库。它的目标是为机器学习任务提供灵活、易用但仍然强大的算法,并提供各种预定义的环境来测试和比较您的算法。贡献者:32(上升了 3%),提交:992,Github 网址: PyBrain
- Fuel 是一个数据管道框架,为你的机器学习模型提供它们需要的数据。计划由区块和派尔恩 2 神经网络库共同使用。投稿人数:32(上升 10%),提交人数:1116,Github 网址:燃料
贡献者和提交数记录于 2018 年 2 月。
编者按:这是最初发布在 KDNuggets 上的,已经被 perlesson 转载。作者 Ilan Reinstein 是一名物理学家和数据科学家。
准备好继续学习了吗?
永远不要想接下来我该学什么?又来了!
在我们的 Python for Data Science 路径中,您将了解到:
- 使用 matplotlib 和 pandas 进行数据清理、分析和可视化
- 假设检验、概率和统计
- 机器学习、深度学习和决策树
- …还有更多!
立即开始学习我们的 60+免费任务:
面向数据专业人员的顶级会议
原文:https://www.dataquest.io/blog/top-conferences-for-data-professionals/
November 23, 2021
说到数据科学,我们都知道发展知识和技能的一个很好的方法就是一头扎进去做工作。然而,在数据科学领域,还有另一种方法可以让学习曲线变平,那就是向更有经验、更成功的数据专业人士学习,他们可以分享他们的专业知识,教你做生意的诀窍。获得这种机会的最佳方式之一是参加数据科学会议。
世界各地都有很多这样的会议,有面对面的,也有虚拟的。这些会议将行业领袖和杰出的数据专业人士聚集在一起,共同学习、分享想法和发展职业技能。如果您是任何类型的数据专业人员,参加数据科学会议可能是发展技术技能、扩展专业网络和保持数据科学最新发展前沿的最佳方式。
以下是您应该了解的七大即将召开的数据科学会议:
ODSC 西重新连接 2021
**时间:**2021 年 11 月 16 日至 18 日
**地点:**旧金山,虚拟的和真实的
定价::399 美元至 1699 美元
开放数据科学大会是机器学习和数据科学的领先会议之一。今年,OSDC 举办了有史以来第一次混合会议,将现场会议和实践培训与创新和有见地的虚拟会议相结合。1,700 家公司和 6,000 多名其他与会者参加了为期三天的会议,您将参加 80 场培训课程和研讨会,学习 300 个小时的内容。
TDWI 会议奥兰多
**时间:**2021 年 11 月 15 日至 18 日
**地点:**奥兰多,部分虚拟且真实
**定价:**1,535-3,535 美元
在四天的时间里,“用智能转变数据”将为您提供 40 门现场课程,其中 24 门也将通过虚拟方式提供。这些课程将增强您在 BI 和分析、数据科学和机器学习、数据素养和数据可视化、数据建模和数据治理、数据仓库和数据湖、架构等方面的技能。通过“选择您自己的培训议程”选项,无论您是新手还是经验丰富的专业人士,您都将从此次会议中受益。
Ai4
**时间:**2021 年 11 月 3 日至 4 日
**其中:**虚拟
**定价:**符合条件的申请人免费,普通注册 395 美元
Ai4 2021 企业人工智能峰会汇集了商业领袖和数据专业人士,以促进人工智能和机器学习技术的采用。在为期两天的会议中,您将听到来自积极参与企业人工智能和机器学习项目的领先组织的近 20 位发言者。这是一个“仅应用”的会议,它将允许您与企业人工智能计划的其他领导者联系,以获得专注于人工智能的企业级见解。
数据科学大会
**时间:**2022 年 5 月 12 日至 13 日
**地点:**芝加哥
**定价:**起价 900 美元
数据科学大会是一个没有赞助商和供应商的活动,它提供了一个空间,分析专业人员可以在这里交流和分享想法,而不会感觉自己被提议。它的“禁止拍照/录像/录音/广播”政策为它赢得了一个声誉,在这个活动中,数据专业人士可以分享他们否则可能不会广播的信息。这个会议集中于技能发展、知识分享和网络。是给专业人士的,由专业人士做的。
【icml 2022】
**时间:**2022 年 7 月 17 日至 23 日
**地点:**马里兰州巴尔的摩市
在机器学习国际会议上,你会发现关于机器学习的所有方面及其在人工智能、统计学、数据科学和其他相关领域中的作用的最新前沿研究。ICML 的参与者超越了广泛的背景来建立网络,分享想法,并了解机器学习及其现实世界应用中最令人兴奋的发展。
返工深度学习混合峰会
**时间:**2022 年 2 月 17 日至 18 日
**地点:**旧金山,虚拟的和真实的
**定价:**起价 595 美元
这次为期两天的峰会将有 90 名主要发言人出席。在这里,你将发现深度学习、企业人工智能和人工智能伦理的最新技术进步和现实应用。加入数百名其他参与者,了解人工智能的最新突破如何塑造未来,并对商业和社会产生深远影响。
ICLR 2022
**时间:**2022 年 4 月 25 日至 29 日
**其中:**虚拟
学习表征国际会议是世界上发展最快的人工智能会议之一。在这次会议上,你将涵盖广泛的人工智能主题,从度量学习和组合建模到结构化预测和强化学习,再到关于大规模学习和非凸优化的问题。在这个过程中,你将有机会扩大你的职业关系网。你会遇到研究人员、企业家、工程师、学生、博士后,以及介于两者之间的所有人!如果你对人工智能和深度学习的爆炸式增长感兴趣,这可能是适合你的会议。
结论
这些只是众多即将举行的数据科学会议中的一小部分,你可以从中选择来发展你的职业道路。如今有如此多的选择,尤其是随着虚拟活动的广泛使用,你有了前所未有的机会接触到业内的领军人物。利用这些会议获得有价值的见解并开启新的机会。如果你是一名有抱负的数据专家,我们强烈建议你考虑参与我们的七大选择之一。
向非洲 R 的 Shelmith Kariuki 学习 R 的技巧
原文:https://www.dataquest.io/blog/top-tips-for-learning-r-from-africa-rs-shelmith-kariuki/
August 20, 2020
如果你刚刚开始学习 R 编程,并且正在寻找技巧,那么你可以从 Shelmith Kariuki 那里学到很多东西。
Shel 在数据科学领域拥有多年的专业经验,并拥有多年向他人教授统计和数据技能的经验。她是一名数据分析师,RStudio 认证的 Tidyverse 讲师,也是一名社区领导者 NairobiR 的共同组织者,也是总部位于非洲的 R 用户组联盟 Africa R 的核心团队成员。
换句话说,她非常了解 R 的教与学。她最近从自己的日程安排中抽出一些时间与 Dataquest 谈论了她自己的 R 学习之旅以及她对当今 R 学习者的建议。
对 R 编程感兴趣
在获得精算学学士学位和应用统计学硕士学位的过程中,Shel 很早就接触了 R 语言编程的基础知识。在她攻读硕士学位期间,当她成为统计学的助教/讲师时,基数 R 成了她教授学生的课程的一部分。
但她说,这对她来说没有多大意义,直到一名学生来到她的办公室,问学习 R 将如何帮助他们的生活。
“作为一名讲师,你要勇敢面对,说,‘是的,这将对你的人生有所帮助,’”她说。“但实际上当我回到房间时,我想了很多。下一步是什么?我们会在哪里应用这些东西?”
所以她做了我们大多数人有问题时都会做的事情:“我谷歌了一下。我拿起手机,在谷歌上搜索‘我们如何用 R 来解决肯尼亚的问题?’我不知道该去谷歌搜索什么。所以我谷歌了一下,发现了很多东西。"
她发现其他的硕士生在他们的论文中使用 R 语言,她还在 Data Science Central 上发现了一些关于 R 编程的博客,这些博客让她看到了一个全新的世界。她发现了 RStudio,上了 Twitter,发现了那里的#rstats 社区。她很喜欢。
“在这一点上,过了一段时间后,我觉得学术界不适合我,”她说。“我真的想做一些不同的事情。”
完成硕士学位后,她仍在做讲师,但她开始寻找数据科学方面的工作。与此同时,她开始构建项目来自学更多关于 r 的知识,“我会登录互联网,获取一些数据,然后浏览一些资料。我会谷歌:我如何在 R 中创建一个表?我如何在 R 中创建一个图形?我如何改变颜色?诸如此类的事情。”
最终,她看到了一份数据分析工作的广告,申请了,然后就忘了这件事。她说,她对自己的机会并不乐观,因为她的背景是学术界,而不是数据科学。但令她惊讶的是,他们喜欢她的应用程序,并给她发送了一个数据任务来完成。
“我告诉你,我从一开始就在谷歌上搜索,”她笑着说。“我想我几乎谷歌了所有的东西……我甚至记得谷歌了 mutate 是什么。”
Google 是学习数据科学的好工具,但前提是你要正确使用它!
提示 1:不要盲目搜索——学习你搜索的内容
编程的行业秘密并不秘密,那就是每个人都使用谷歌。但谢尔的秘密是,她不只是在谷歌上寻找答案。“我不会盲目地搜索,”她说。“我试着去理解。”因此,当她完成工作申请的数据任务时,她在谷歌搜索,但她也在学习她搜索的内容。
她做得很好,所以她得到了第二个任务。“我当时想,‘哇,要是这些人知道我作弊就好了!’”她说因为对我来说,[谷歌搜索]是作弊。”但她坚持了下来,提交了第二份任务,并接到了亲自面试的电话。
这就是她的方法得到回报的地方。在采访中,她被要求解释她的一些代码。“记住,我不会盲目地搜索,”她说,“所以当我走进面试时,我知道我所有的代码都做了什么。”她解释得很好,这也是她获得第一份数据科学工作的原因。
“那时我开始意识到谷歌搜索并没有错,”谢尔说。“谷歌没关系,再优秀的人也谷歌。”关键是要像谢尔那样用谷歌搜索:不要只是找到答案然后复制粘贴;在你继续前进之前,努力去理解答案。
“我见过盲目搜索的人,”她说,“但当需要处理那个人的代码时,你会问,‘这个函数是做什么的?’他们会说,‘我其实不知道。我谷歌了一下。"
“特别是当我做自己的分析时,”她说,“我应该能够解释分析中的每一段代码。因为,第一,这是我们学习的方式,第二,你的代码可能会到达不同的人。当他们回来时,即使是两年后,问你某个功能,你应该能解释清楚,因为你拥有那件作品。”
技巧 2:了解 R 实际上是如何被使用的
Shel 说,帮助她学习 R 编程的另一件事是,当她开始在线参与 R 社区时,她看到了其他人在用 R 做什么,以及它在现实世界中是如何使用的。
“你需要知道 R 在这个领域是如何被使用的,”她说。“这是第一件事。你不能在不知道人们在这个领域到底在做什么的情况下盲目地去学习一门课程。”
了解人们是如何使用 R 的也将帮助你决定你自己的学习道路应该是怎样的。
“一旦你看到人们在做什么,你就会知道是什么让你心动。你想干嘛?你想成为数据分析师吗?你想成为一名机器学习工程师吗?对我来说,这是第一件事。”
技巧 3:参与全球 R 社区…
谢尔说,“关注业内人士”很重要,“因为这是我了解#rstats 的方式,也是我了解 Hadley(Wickham)的时候。他会发布令人惊叹的东西,我会在谷歌上搜索他和其他发布有趣东西的人。”
“我发现看他们的作品令人鼓舞,”她说。“只是跟踪他们,看看人们是如何进化的。开发人员在开发什么包,等等。”
“我的目标很高。我想成为一名 R 大师。”观察 R 大师们在做什么帮助 Shel 弄清楚她需要学习什么,以及什么样的 R 项目在现实世界中有用。
“让你尊敬的人给你指路真的真的很重要,”她说。
非洲 R 用户十六进制贴纸(图片来自@AfricaRUsers twitter)
技巧 4:…但是不要忘记在当地参与
“另一件非常重要的事情是见面,”谢尔说。“我真的,真的,真的感谢上帝的相遇,因为我在一次相遇中知道了什么是机器学习。”
“我从我的老师那里知道什么是回归,但我第一次听到机器学习时,我就想,‘哦,我的上帝,什么是机器学习?’然后我去参加了一个聚会,人们向我解释。我当时想,‘啊,所以我知道一点机器学习!’我从聚会中学到了很多。"
“我过去参加的第一次会议是内罗毕妇女在机器学习方面的会议。她说:“它们过去常常在周六上午举行,学习新东西总是令人惊叹。”。当时,她正处于数据分析师工作的第一年,她很快发现她在会面中学到的新东西可以应用到日常工作中。
“会面也是一种社交方式。她说:“你开始了解人们在做什么,这总能开阔你的思路。“尤其是如果你所有的同事都在同一个领域,有时认识其他人并看看他们在做什么是很好的。你可以从他们身上学到东西,这有助于建立你的投资组合。”
技巧 5:建立“宠物项目”
谢尔说,说到投资组合,构建项目来填补一个项目是至关重要的。她说这是新学员经常跳过的重要一步。
“例如,某人将在 Dataquest 注册一门课程,并获得证明他们成功完成课程的证书。太好了。但是接下来呢?我怎么知道你是熟练的?我怎么知道你真的理解了这门课程?最终并不总是证书的问题。”
“我总是建议新手,尤其是拥有像 GitHub 这样的公众形象真的很有帮助,因为这是你出售作品的唯一方式,”她说。“当你学了 100 门课程,却仍然失业,这是非常令人沮丧的。但是你为什么会失业呢?是课程没有帮到你吗?不完全是。可能是你不知道如何营销你的技能。”
(顺便说一下,这是我们 Dataquest 非常赞同的建议。我们已经写过数据科学证书以及为什么证书本身可能不会帮助你找到工作。我们的课程以指导的项目结束,以帮助学习者建立他们的文件夹,我们也鼓励学生在我们的社区的帮助下建立和分享个人项目。)
“任何时候我有一个短期培训,”Shel 说,“我告诉人们,‘创建一个 GitHub 个人资料和我在这个会议上要教的任何东西,做一些任务,并公开发布它们。’你永远不知道谁会看到它。有时这是向潜在雇主推销你技能的一种方式。"
谢尔说,事实上,公开项目可能是能否找到工作的关键。如果雇主有需要快速分析的数据,看到你的证书并不足以说服他们雇佣你做他们的分析。但是如果他们能在你的投资组合中看到你已经做过的类似项目,他们知道他们可以依靠你来做这项工作。
谢尔说,雇主“希望看到一些东西,让他们说,‘嗯,这正是我想让你为我做的,或者这正是我们想要的’”
秘诀 6:不要害怕从小处着手
“我给人们的一个建议是:我们并不完美,也不是超人,”谢尔说。“我们不是什么都知道。一周或一个月后你就不会好了。不能急。最好的学习方式是体验。”
“你不可能在一个月内一下子学会数据分析、数据科学、机器学习、人工智能。我想没有人这样做过。对我来说,为了得到我的第一份工作,我只需要知道如何在 R 中创建一个表和一个图。从那里,随着时间的推移,我学到了越来越多的东西:如何优化我的代码,如何在 R 中构建仪表板,如何做这做那。”
“我们总是必须一步一步来,”Shel 说,这在数据科学中尤其具有挑战性,因为炒作周期会让你觉得需要立即学习最新的热门技术。
“你不用什么都学。学一些能帮你找到第一份工作的东西。也就是说,如果你还没有工作的话。如果是这样,那就学习一些能帮助你提高技能的东西,因为归根结底,我们的目标是提高技能。”
这种从小做起的方法也适用于就业。虽然你的梦想可能是一份全职工作,但把你的作品集放到网上有时能让你得到一份短期工作。
“如果你能完成一项任务,并将其发布到网上,然后获得一份为期五六天的小合同,足以支付你未来两个月的租金,谁会讨厌这样呢?”谢尔说。
这也是拥有一个在线项目组合至关重要的另一个原因:“如果你的作品不在网上,别人将如何联系你?”
满座,2019 年在 NairobiR meetup 学习。(图片来自@AfricaRUsers Twitter)
技巧 7:教导他人
“你训练别人越多,你就越能消化你学到的所有信息,”谢尔说。
虽然 Shel 本人是 RStudio 认证的培训师,在不同的数据科学活动中为他人提供教育,但你不需要那种机会来通过教学开始学习。“只要找五个人并训练他们,”谢尔说。“在潮水上训练他们。如果你训练两次、三次,你就再也不需要回到书本或网络课程中去记住什么是 tidyverse,或者哪个功能用于什么任务。”
“训练可以和朋友一起进行,”她说。“坚持说你想向你的一个朋友解释一些事情.”
“我过去也是这样,甚至在工作中也是这样,问‘我能向你解释一下这段代码是做什么的吗?’"
“你解释得越多,你就越意识到要么你知道,要么你不知道。当你解释时,你会想,‘顺便问一下,为什么会这样?’这意味着在某个地方有差距,你需要学习更多。"
换句话说,教学有助于强化你所知道的,突出你所不知道的。解释你的代码——即使是对那些可能没有要求解释的人——可以帮助你更好地学习它。
此外,培训他人是有益的。“当你教别人你知道的东西时,你是在给他们知识。你给了他们能力,让他们能够利用自己的技能找到工作。然后他们去教其他人,你的一次培训将导致五个人被雇用。”
“没有什么比这更令人惊讶了,”她说。“它实际上祝福你的心。”
秘诀 8:抓住机会(并给予机会)
正如谢尔所说的,把自己放在那里并“投出你的一球”,可以获得令人印象深刻的回报。这是她在帮助建立 Africa R 用户组时所看到的。在 R 社区,当你伸出手寻求帮助时,人们会有所回应。
例如,来自 RStudio 的许多人通过演讲和培训来帮助 Africa R。“这是巨大的,”谢尔说。
另一方面,虽然她说全球 R 社区一直非常支持非洲不断增长的 R 社区,但她希望看到更多的全球就业机会。“我知道有些国家对工作许可证有严格的限制,”她说,“但也有其他国家没有。拥有更加多样化的工作场所会让一些 Africa R 成员受益。我希望看到更多向所有人开放的机会。”
(尽管她很快补充道,这个问题与 R 社区的关系更小,而与整个世界的关系更大。她说,全球 R 社区“给了我们(非洲 R 用户)如此多的支持。我不认为我们可以说什么,他们没有帮助我们。”)
外卖食品
从 Shel 学习和教授 R 的经验中,我们可以学到很多东西,但这里有一个对新学习者来说最重要的事情的快速回顾:
- 不要盲目地搜索——想搜索多少就搜索多少,但要学习和理解你找到的答案,不要只是盲目地将它们复制粘贴到你的代码中,然后继续前进。
- 看看其他人在用 R 做什么——这将帮助你理解 R 在现实世界中是如何使用的,并帮助你找出你最热衷于用它做什么。
- 参与全球 R 社区,但要在当地结识同事——你应该跟踪全球领导者在 R 方面做了什么,但你也应该向周围的人学习并与他们建立联系。
- 建立项目——你需要展示你正在学习的技能,并公开分享。你永远不知道这会给你带来什么样的工作机会!
- 从小事做起——罗马不是一天建成的。不要被一个热门新技术的宣传,或者试图学习所有东西的诱惑分散注意力。
- 教导他人,解释你的代码——这有助于你学习,也有助于他人。双赢。
- 通过寻求帮助来抓住机会,当你可以的时候帮助别人——当你寻求帮助时,最坏的情况可能是有人说不。尝试一下,当别人和你一起尝试时,一旦你有了一些经验,就去帮助他们。
如果你想更多地了解谢尔和她的经历,你可以查看她的个人网站和关注她的推特。你也可以通过他们的网站或 Twitter 联系她帮助运营的 Africa R users 组织。
准备好提升你的 R 技能了吗?
我们 R path 的数据分析师涵盖了你找到工作所需的所有技能,包括:
- 使用 ggplot2 进行数据可视化
- 使用 tidyverse 软件包的高级数据清理技能
- R 用户的重要 SQL 技能
- 统计和概率的基础知识
- …还有多得多的
没有要安装的东西,没有先决条件,也没有时间表。