使用 Python 的数据科学:使用 pandas 加载、子集化和过滤数据简介
Source: https://www.star-spain.com/en/blog/transittermstar-nxt-tooltips/filtering-data-records-termstar-nxt
介绍
作为数据科学家,我们经常处理大量数据。我们想要加载的数据可以用不同的方式存储。最常见的格式是 CSV 文件、 Excel 文件或数据库。此外,数据可以通过 web 服务获得。当然还有很多其他的格式。为了处理数据,我们需要用一个表格结构来表示它。任何表格形式的东西都排列在一个有行和列的表格中。
在某些情况下,数据已经是表格了,很容易加载。在其他情况下,我们处理非结构化数据。 非结构化数据 不是以预定义的方式组织的(纯文本、图像、音频、网页)。在这篇文章中,我们将着重于从 CSV(CommaSseparatedValues)文件中加载数据。
熊猫
Pandas 是 Wes McKinney 开发的 Python 编程语言的开源库。这个库非常高效,提供了易于使用的数据结构和分析工具。
数据帧
Pandas 包含一个用于数据操作的快速高效对象,称为 DataFrame。熊猫的一个常用别名是pd
。该库可以加载许多不同格式的数据。当我们的数据是干净的和结构化的,每一行代表一个观察,每一列代表一个特征。行和列可以有标签。
在下面的例子中,为了更好地理解我们正在改变的东西,我将用透明矩形标记一些部分。此外,为了简单起见,我们将使用数据集中非常小的子集。该数据集包含给定国家和年份的移动电话用户。完整数据可在这里找到。我事先做了一些清理,使数据整洁。
这是我们想要加载到 Pandas 数据框架中的数据。它被上传到 GitHubGist web 应用程序中,并在这里以表格结构显示出来。不过,我们可以在这里看到它的 raw 格式。同样,我们可以看到这个文件包含了 c omma s 单独的 v 值。
为了加载这些数据,我们可以使用pd.read_csv()
函数。
Loading data from a CSV file.
为了创造这些例子,我用了一个 Jupyter 笔记本。如果代码单元格中的最后一行包含值,则打印该行。所以,这就是为什么我把变量cellular_data
放在例子的最后一行。
我们可以看到数据已加载,但有些奇怪。这个Unnamed: 0
栏目是什么?我们的 CSV 文件中没有这样的列。在我们的例子中,这一列包含数据的行标签 ( 行索引),我们必须告诉熊猫。我们可以使用index_col
参数做到这一点。
Loading data from a CSV file using index_col
在其他情况下,我们的数据可以是而没有行标签。在这些情况下,熊猫会从0
开始到rows — 1
的长度自动生成这些标签。让我们看看没有行标签的相同数据的例子。
Loading data from a CSV file.
现在我们的数据帧看起来很好。有时,我们希望更改行标签,以便以后更容易地处理数据。在这里,我们可以将行标签设置为每行的国家代码。我们可以通过将熊猫数据帧的index
属性设置为一个列表来实现。列表的长度和行的长度必须与相同。之后,我们可以很容易地对我们的数据进行子集划分,或者使用国家代码查看给定的国家。
在许多情况下,我们不希望手动设置索引,我们希望索引是数据帧中的列之一。在这种情况下,我们可以使用 DataFrame 对象的方法调用set_index
。注意 pandas 不会永久设置索引 ,除非我们告诉它。如果我们想永久地设置索引,我们可以使用inplace
参数来实现。****
Setting the country column to be the index for our DataFrame.
Setting the country column to be the index for our DataFrame.
在上面的例子中,我们没有告诉熊猫永久设置索引,当我们打印cellular_data
数据帧时,我们看到索引没有改变**。让我们用inplace
参数再试一次。**
Setting (inplace) the country column to be the index for our DataFrame.
现在,我们可以清楚地看到,当我们使用inplace = True
时,我们的数据帧的索引被永久地改变。****
索引和选择数据
有许多方法可以从数据框中选择数据。在这篇博文中,我们将看到如何使用方括号和方法 loc 和 iloc 来实现这一点。
使用方括号,您可以从行中选择选项,也可以从列中选择选项。对于一个行选择,我们可以使用一个索引列表或者一个切片。我们可以像这样使用切片来选择行:sliceable[start_index:end_index:step]
end_index 不包含。我已经在之前的一篇名为数据科学 Python 基础的博客文章中写过关于切片的内容。可以快速看一下“子集列表”部分了解一下。虽然那里的例子都是带列表的,这里的想法和是一样的。我们这里只使用数据帧,它们也是可切片的。
Select all rows.
Select the first 2 rows.
Select the all rows from the third to the end.
Select the second row.
对于一个选择的列,我们可以使用一个包含所需列的列表。如果我们只将一列作为字符串而不是列表传递,结果将是 熊猫系列 。熊猫系列是一个一维数组,可以标为。如果我们将 2 个或更多系列粘贴在一起,我们将创建一个数据框架。在某些情况下,我们可能只想选择一列,但将数据保存在 DataFrame 中。在这种情况下,我们可以传递一个只有一个列名的列表。****
Select the “country” column only as series.
Select the “country” and “cellular_subscriptions” columns.
方括号很有用,但是它们的功能有限。我们可以从给定的数据帧中只选择列或行。在许多情况下,我们需要同时选择列和行。 loc 和 iloc 方法给了我们这种能力。
loc 方法允许我们根据标签选择数据的行和列。首先,你指定左侧的行标签 ,然后你指定右侧的列标签。 iloc 允许我们做同样的事情,但是基于我们数据帧的整数位置。****
如果我们想选择所有的行或列,我们可以简单地输入:
来选择行或列。同样,如果我们想要选择特定行而所有列**,我们可以只传递行标签。**
用例子理解比较容易,那就来看一些吧。在这些例子中,我们将比较这两种方法的用法。
Select the first row as Series.
Select the first row as DataFrame.
Select the rows for Bulgaria and Romania.
Select the rows for Russia and the United Kingdom and the “year” and “cellular_subscriptions” columns.
Select all the rows and the “year” and “cellular_subscriptions” columns.
Select the all the columns and the rows for Bulgaria, Russia, and Denmark.
Python 中的比较运算符
比较运算符可以告诉我们 2 个值如何将相互关联。在很多情况下, Python 无法告诉我们不同类型的 2 个值如何相互关联,但也有一些例外。比如我们可以比较浮点数和整数。需要记住的是,我们可以比较布尔值和整数。True
对应 1 ,False
对应 0 。这些运算符非常简单。
The comparison operators in Python.
让我们看一些非常简单的例子。
Simple Comparison Operators
过滤熊猫数据帧
比较运算符可用于熊猫系列。这可以帮助我们根据特定条件过滤我们的数据。我们可以对序列使用比较运算符,结果将是一个布尔序列。如果满足条件,这些系列的每一项将为True
,否则为False
。有了这些布尔序列后,我们可以应用一个行选择来得到一个过滤后的数据帧。****
Creating a boolean series called is_small_subscr
注意,我们已经使用了的另一种语法在这里得到了** cellular_subcription
列。DataFrame[column_name]
和DataFrame.column_name
代码块返回相同的结果。**
但是,要小心使用点语法**(在这些示例中使用),因为您的列可能与 DataFrame 的方法同名。例如,如果我们有一个名为“ min ”的列,我们就不能使用点语法从该列中获取值。那是因为 DataFrame 对象有一个名为“ min ”的方法。现在让我们看看如何使用上面的布尔序列来过滤我们的数据帧。**
Filtering the DataFrame using the boolean series from the previous example
让我们看另一个例子。假设我们希望获得所有记录,其中国家是英国。****
Get all records where the country is the United Kingdom
布尔运算符
既然我们知道了如何生成满足某些条件的布尔序列,我们现在可以对它们使用布尔运算符来创建更多的复杂过滤**。**
有 3 种类型的布尔运算****
- 和——取 2 个布尔值,如果和都是则返回
**True**
值**True**
。这个操作符是一个短路,如果第一个参数是**True**
,它只计算第二个参数。 - 或 -取 2 个布尔值,如果中至少有一个为 T1,则返回
**True**
。这个操作符也是一个短路符,如果第一个参数是**False**
,它只计算第二个参数。**** - 非——取一个布尔值,返回对面的。该运算符优先级低于非布尔运算符。例如,
not x == y
被解释为not (x == y)
,而x == not y
是一个语法错误。还有就是当我们需要组合不同的布尔运算然后想要对结果求反时常用的。********
Simple Boolean Operations
多条件子集化
当我们想要通过多个条件过滤我们的数据帧时,我们可以使用布尔运算符**。这里需要注意的一点是,当我们想要对熊猫使用布尔运算符时,我们必须如下使用它们😗*
&
用于和****|
为或****~
为而非****
当我们对两个大小相同的布尔序列应用布尔运算时,布尔运算将适用于每一对。
使用“与”运算符
我们可以看到 pandas 不使用and
操作符,它需要**&**
操作符。现在,让我们再试一次。这里的目标是只得到那些多于** 240 乘客而 少于 300 乘客的航班。**
使用“或”运算符
让我们找出所有低于** 200 或 大于 375 名乘客的航班。记住,对于或操作符,我们使用管道 **|**
字符。**
使用 not 运算符反转条件
在某些情况下,我们希望否定我们的条件**。在这种情况下,我们可以使用而不是操作符。对于这个操作符,我们使用波浪号 **~**
字符。**
假设我们想得到 11 月的而不是** 的所有航班。**
复杂条件
我们可以基于非常具体的条件进行更加复杂的过滤**。**
让我们看看 1952 年和 1954 年 11 月 22 日在 T21 的所有航班。
现在,让我们得到 1952 年和 1954 年之间的所有航班,月份是八月或九月。
isin 方法
假设我们想要比较单个列与多个值的相等。假设我们想要得到以下月份的所有航班:二月、八月和九月。实现这一点的一种方法是像这样使用多个or
条件。****
有一个重复码这是繁琐的**。使用****isin**
方法还有一种更好的方法可以达到同样的效果。我们需要传递一个列表或者设置值给这个方法,它将返回想要的布尔序列。****
当然,我们可以把这个方法返回的布尔级数和其他布尔级数组合起来。
假设我们想得到 1954 年和 2 月**、8 月和9 月的航班。******
between 方法
当我们想要选择一个范围内的值时,这个方法可以使我们的代码更干净。代替的写法 2 布尔条件,我们可以用这个方法。
假设我们想要得到 1955 年到 1960 年之间的所有航班。****
********
同样,我们可以将这种方法与另一种条件过滤相结合。
让我们得到所有在 1955 年和 1960 年之间并且在 10 月的航班。
isnull 和 isna 方法
这个**isna**
方法指示值是否缺失(数值数组中的**NaN**
,对象数组中的**None**
或**NaN**
,datetimelike 中的**NaT**
)。**isnull**
方法是**isna**
方法的别名。这意味着这两种方法完全相同,但是名称不同。
我已经改变了我们使用的航班数据框架。在月列中有一些**NaN**
值。让我们来看看如何获取有个月缺失的所有记录。
****
在许多情况下,我们希望得到没有缺失值的数据。让我们设法得到没有错过月份的航班。我们可以使用带有**~**
字符的 not 运算符对**isna**
方法返回的布尔序列求反。****
notna 方法
还有一种方法叫**notna**
。此方法是 **isna**
方法的 对面的。使用这种方法,我们可以获得与上一个示例相同的结果。****
通过一行中的条件进行子集设置
我们现在看到的所有例子都可以用一行写出来。有人喜欢,有人讨厌。当我们通过只设置一个条件时,在很多情况下,在一行中编写我们的过滤器会更好更容易。
我们先来看一个只有一个条件的子集化例子。
通过一行中的多个条件进行子集设置
在某些情况下,用一行写一个简单的表达式还行,但在另一些情况下,就非常不可读。我这里的建议是把简单的写一行复杂的写多行**。如果你的行很长,它可能不可读,所以要小心。**
使用.loc
方法对布尔序列进行子集化。
还记得**.loc**
法吗?我们可以用这种方法根据标签选择行和列。好的一面是我们可以传递布尔序列而不是传递行或列选择的标签,这样就可以了。
我们在上面的例子中使用的所有生成的布尔序列都可以传递给行选择。
注意,如果我们不使用** **loc**
方法进行列选择 ,那么的结果与使用方括号** **[]**
进行子集化的是相同的。****
文章注释
为了简单起见,本文中使用的数据集非常小。实际上,我们需要处理的数据集要大得多。但是不管您是在处理 100 MB 还是 10 GB 的数据集,子集化总是一种有用的技术!
练习
我已经创建了一个 Jupyter 笔记本文件,里面有一些关于加载和子集化数据的练习。如果你想检查你的技能,你可以从这个库下载。该存储库还包含另一个 Jupyter 笔记本文件,其中包含解决方案**。**
数据资源
我的其他博客文章
你也可以看看我以前的博文。
时事通讯
如果你想在我发表新的博客文章时得到通知,你可以订阅我的时事通讯。
领英
这是我在 LinkedIn 上的简介,如果你想和我联系的话。
最后的话
谢谢你的阅读。你喜欢这篇文章吗?如果你喜欢,请按住鼓掌按钮👏并分享给你的朋友。
Python 数据科学:将条件循环转化为 Numpy 向量
矢量化技巧是数据科学家非常熟悉的,通常用于编码,以加速整体数据转换,其中简单的数学转换是在可迭代对象(如列表)上执行的。不太为人所知的是,对非平凡的代码块(如条件循环)进行矢量化也是值得的。
”http://www.freepik.com" Designed by Harryarts / Freepik
Python 正迅速成为数据科学家选择的事实上的编程语言。但与 R 或 Julia 不同,它是一种通用语言,没有现成的函数语法来分析和转换数字数据。因此,它需要专门的图书馆。
Numpy ,简称数值 Python ,是 Python 生态系统中高性能科学计算和数据分析所需的基础包。它是几乎所有高级工具如 Pandas 和 scikit-learn 构建的基础。 TensorFlow 使用 NumPy 数组作为基本的构建模块,在此基础上他们构建了用于深度学习任务的张量对象和 graphflow(在一个长列表/向量/数字矩阵上大量使用线性代数运算)。
许多 Numpy 操作都是用 C 实现的,避免了 Python 中循环、指针间接和每元素动态类型检查的一般开销。速度提升取决于您正在执行的操作。对于数据科学和现代机器学习任务来说,这是一个无价的优势。
我最近的故事展示了基于 Numpy 的简单数据转换任务矢量化的优势,引起了读者的兴趣也受到了读者的好评。关于向量化对代码简单性的效用,有一些有趣的讨论。
现在,基于一些预定义条件数学变换在数据科学任务中相当常见。事实证明,通过首先将简单的条件循环块转换成函数,然后使用numpy.vectorize
方法,可以很容易地对其进行矢量化。在我之前的文章中,我展示了简单数学转换的 numpy 矢量化的速度提升数量级。对于目前的情况,加速没有那么显著,因为内部条件循环仍然有些低效。然而,与其他普通 Python 代码相比,执行时间至少有 20–50%的改进。
下面是演示它的简单代码:
import numpy as np
from math import sin as sn
import matplotlib.pyplot as plt
import time**# Number of test points**
N_point = 1000**# Define a custom function with some if-else loops**
def myfunc(x,y):
if (x>0.5*y and y<0.3):
return (sn(x-y))
elif (x<0.5*y):
return 0
elif (x>0.2*y):
return (2*sn(x+2*y))
else:
return (sn(y+x))**# List of stored elements, generated from a Normal distribution**
lst_x = np.random.randn(N_point)
lst_y = np.random.randn(N_point)
lst_result = []**# Optional plots of the data**
plt.hist(lst_x,bins=20)
plt.show()
plt.hist(lst_y,bins=20)
plt.show()**# First, plain vanilla for-loop**
t1=time.time()
for i in range(len(lst_x)):
x = lst_x[i]
y= lst_y[i]
if (x>0.5*y and y<0.3):
lst_result.append(sn(x-y))
elif (x<0.5*y):
lst_result.append(0)
elif (x>0.2*y):
lst_result.append(2*sn(x+2*y))
else:
lst_result.append(sn(y+x))
t2=time.time()print("\nTime taken by the plain vanilla for-loop\n----------------------------------------------\n{} us".format(1000000*(t2-t1)))**# List comprehension**
print("\nTime taken by list comprehension and zip\n"+'-'*40)
%timeit lst_result = [myfunc(x,y) for x,y in zip(lst_x,lst_y)]**# Map() function**
print("\nTime taken by map function\n"+'-'*40)
%timeit list(map(myfunc,lst_x,lst_y))**# Numpy.vectorize method**
print("\nTime taken by numpy.vectorize method\n"+'-'*40)
vectfunc = np.vectorize(myfunc,otypes=[np.float],cache=False)
%timeit list(vectfunc(lst_x,lst_y))**# Results** Time taken by the plain vanilla for-loop
----------------------------------------------
**2000.0934600830078** us
Time taken by list comprehension and zip
----------------------------------------
1000 loops, best of 3: **810 µs** per loop
Time taken by map function
----------------------------------------
1000 loops, best of 3: **726 µs** per loop
Time taken by numpy.vectorize method
----------------------------------------
1000 loops, best of 3: **516 µs** per loop
请注意,我在任何地方都使用了**% time it**Jupyter magic command来编写一行表达式。通过这种方式,我有效地运行了至少 1000 次相同表达式的循环,并平均执行时间以避免任何随机影响。因此,如果您在 Jupyter 笔记本上运行整个脚本,您可能会对第一种情况(即普通 for-loop 执行)产生略微不同的结果,但接下来的三种情况应该会给出非常一致的趋势(基于您的计算机硬件)。
有证据表明,对于这种基于一系列条件检查的数据转换任务,使用 numpy 的矢量化方法通常比一般的 Python 方法提高了 20–50%的速度。
这可能看起来不是一个巨大的改进,但每一点时间节省都会在数据科学管道中累积起来,从长远来看是值得的!如果数据科学工作需要这种转换发生一百万次,这可能会导致 2 天到 8 小时的差异。
简而言之,只要您有一个很长的数据列表,并且需要对它们执行一些数学转换,就应该考虑将这些 python 数据结构(列表、元组或字典)转换成numpy.ndarray
对象,并使用固有的矢量化功能。
Numpy 提供了一个 C-API 来实现更快的代码执行,但是它带走了 Python 编程的简单性。这篇简洁的讲稿展示了你在这方面的所有相关选项。
一位法国神经科学研究者写了一整本关于这个主题的开源在线书籍。点击这里查看。
如果您有任何问题或想法要分享,请联系作者在tirthajyoti【AT】Gmail[DOT]com。你可以查看作者的 GitHub 资源库 中其他有趣的 Python、R 或 MATLAB 代码片段和机器学习资源。此外,如果你像我一样对机器学习/数据科学/半导体充满热情,请随时在 LinkedIn 上添加我或在 Twitter 上关注我。
你需要知道的数据科学!A/B 测试
这是 5 篇系列文章的第 2 部分,旨在快速介绍数据科学和数据分析中的一些核心概念,特别关注我认为被忽略或在其他材料中简单讨论过的领域。
这篇文章概述了 A/B 测试,以及计划和建立你自己的健壮的 A/B 测试的必要步骤。
这个职位适合从事产品开发的数据科学家,以及希望与数据科学家更好沟通的产品经理。
谦逊的 A/B 测试(在其他科学中也称为随机对照试验,或 RCT)是产品开发的有力工具。
除了可能是估计效果大小(以及 ROI)最准确的工具之外,它还能够为我们提供因果关系,这是数据科学中非常难以捉摸的东西!有了因果关系,我们终于可以平息“相关性与因果性”的争论,并证明我们的新产品确实有效。
假设你是亚马逊的首席执行官,并试图找出将你的网站重新安排成一种新的格式是否会影响转化率(即亚马逊的访问者成为客户的比例):
一种方法是对选定的客户运行两个版本,并仅根据这些数字做出判断:
在这种情况下,我们会得出结论,布局 B 优于布局 a。
然而,这种简单的方法有两个可能的错误,统计学学生对此非常熟悉:
- 第一类错误——或者错误地认为你的干预是成功的(这里可能错误地认为布局 B 比布局 A 好)。也称为假阳性结果。
- 第二类错误——错误地认为你的干预不成功。也称为假阴性结果。
这些错误源于我们在[上一篇文章](http://“Data science concepts you need to know! Part 1” https://towardsdatascience.com/introduction-to-statistics-e9d72d818745)中提到的一个问题;也就是说,试图从一个样本(在这种情况下,是参与我们布局试验的访问者)中得出关于人群(在这种情况下,是所有亚马逊客户)的结论。
A/B 测试将使我们能够准确地量化我们的效应大小和误差,从而计算出我们犯下 I 型或 II 型错误的概率。
我认为,只有当我们理解了我们的结果的真实影响大小和稳健性,我们才能继续做出商业影响决策。换句话说,一旦我们了解了我们的效果大小和误差,我们应该只估计新产品的 ROI(投资回报)。
输入统计数据:
这篇文章将概述 A/B 测试的设计原则,以及如何确保一个试验是有效的和经济的。我们将依赖于在我们的[上一篇文章](http://“Data science concepts you need to know! Part 1” https://towardsdatascience.com/introduction-to-statistics-e9d72d818745)中介绍的概念(统计功效和 p 值),所以如果这些需要更新,请随意返回一篇文章。
一旦你理解了数据科学中的 A/B 测试,你也会理解随机试验,它通常用于:
- 医学,了解一种药物是否有效
- 经济学,来理解人类行为
- 外国援助和慈善工作(至少是有声望的),以了解哪些干预措施在缓解问题(健康、贫困等)方面最有效
A/B 测试的原则
我们可能会根据同事的问题或想法开始考虑 A/B 测试。例如,我们可能有预感贷款还款短信提醒将减少贷款违约。稍加努力,我们可以将这个问题转化为一个假设,然后进行 A/B 测试,评估新 SMS 系统带来的确切收益(或收益缺失)
为此,我们首先需要将我们的问题形成一个假设,然后我们需要制定出我们的随机化策略、样本量,最后是我们的测量方法。
假设
假设是描述您想要测试的关系的正式陈述。假设必须是一个简单、清晰且可测试的陈述(更多关于可测试性的内容见下文),将对照样本(如布局 A)与处理样本(如布局 B)进行对比。
为了形成一个假设,我们将“SMS 系统能改善还款吗”重新表述为两个陈述,一个无效假设和一个替代假设:
- 零假设(H0):零假设通常表示治疗组和对照组之间没有差异。(换句话说,我们说我们的治疗结果在统计上与我们的控制结果相似)
- 替代假设(H1):替代假设表明治疗组和对照组之间存在差异。(换句话说,治疗结果将在统计上不同于对照结果)
值得注意的是,假设应该包括参考被研究的 人口(Amazon.com 美国游客、伦敦银行客户等)、干预*(网站布局 A 和 B、有针对性的贷款偿还短信)、比较组(比较什么)、结果(你将测量什么)以及时间*(你将在什么点测量它****
P 人口增长, I 干预, C 比较, O 结果, T ime = PICOT 。在定义你的假设时,请记住 PICOT。
从我们的亚马逊例子中给出一个结构良好的假设的例子:
- 零假设(H0):与接受布局 A 的游客相比,接受布局 B 的 Amazon.com 游客不会有更高的参观结束转化率
- 另一个假设(H1):与接受版面 A 的游客相比,接受版面 B 的 Amazon.com 游客将有更高的最终转化率
请注意,上面清楚地说明了我们的 PICOT:
- 人群:访问过 Amazon.com 网站的个人
- 干预:新网站布局(布局 B)
- 比较:访问者接收布局 A
- 结果:转换率
- 时间:Amazon.com 访问结束
我们可以将此与农业背景下的弱假设进行对比,例如:
- H0:颜色好看的银行不会还贷
- H1:颜色好看的银行会还贷
为什么这么糟糕?在继续阅读之前,花点时间思考一下。
- “更好的颜色”没有明确的定义,我的好和你的好可能不匹配。这是 PICOT 的不良干预定义的一个例子
- 什么银行?在哪里,什么级别?我们指的是银行分行吗,如果是,我们是研究世界各地的所有分行,还是只研究曼彻斯特市中心的分行?这是一个很差的人口规格
- 我们如何衡量这一点?贷款违约率、逾期天数、分行总损失?这是来自 PICOT 的结果规范的一个例子。
强有力的假设将 A/B 测试结合在一起,并为设计和分析提供指导。你可以看到,上述假设对这些任务是没有用的。
随机化
回到我们的亚马逊例子,一旦我们有了一个良好的假设,我们就可以考虑随机化策略。为了扩展上面的例子,我们可以用两种方法随机选择我们的访问者:
- 将游客随机分配到布局 A 或布局 B
- 允许访问者选择加入新的布局测试版
这两种设置有什么不同?在我们回答这个问题之前,让我们检查一下为什么我们在 A/B 测试中随机化的原因。
A/B 测试中的随机化有两个相关目的:
- 均匀分布协变量
- 消除统计偏差
- 共变量是可能影响你的结果变量的因素,例如,游客地理位置、性别和风险偏好。请注意,其中有些是可观察和可测量的(如位置和性别),有些是不可观察(如风险偏好,难以测量)。
- 当你的样本与你的目标人群大相径庭的时候就会出现统计偏差。在 A/B 测试中,我们假设我们的样本代表我们的总体,偏离这一假设会导致我们对我们的总体产生不正确的理解,并得出看似可靠但实际上无效的结论!**
在 A/B 测试设计的这一阶段,常见的偏差形式(也会影响我们的协变量分布)有:
- 随机化偏倚 —由于不良随机化导致的偏倚不平衡的治疗/对照组(例如,与我们的对照组来访者相比,我们的治疗组来访者中德州来访者过多)。这使得一些共同变量(如德州人)在一个群体中比在另一个群体中发挥更大的影响。**
- 选择偏差 —如果我们允许访问者将他们自己分配到治疗/对照组,也会产生偏差。这是因为可能存在与治疗/控制选择相关的不可观察的协变量。例如,有更多风险偏好的访问者可能会选择进入测试组,因此我们的治疗访问者可能会同时产生治疗效果和风险偏好效果**
这两种情况都将导致所谓的混杂偏倚,这意味着将很难理清由于不良随机化造成的影响与由于实际干预造成的影响。**
然而,如果每个参与者都有平等的机会被随机分配到治疗/对照组,那么随机化将没有偏倚。这将导致可观察的(如位置)和不可观察的共变量(如风险偏好)被平均分配到治疗组和对照组。正是这种共变量的传播让我们能够理解因果关系。
回到我们在这一节的开头的例子,我们在两个策略之间的选择:
- 将游客随机分配到布局 A 或布局 B
- 允许访问者选择加入新的布局测试
从统计学的角度来看,这些策略中哪一个更好?
虽然可能有后勤或组织上的原因,为什么我们不能做前一个策略,但它肯定是一个更有统计学意义的试验。这是因为我们有完全的控制权来分配访问者(因此协变量)到每个组。如果我们使用策略 2,允许访问者选择新的布局,那么可能会有不可观察的因素在起作用,这可能会削弱我们的 A/B 测试,并将不可观察因素的影响与我们的结果变量混淆。
因此,完全随机地选择治疗组和对照组是很重要的,最好的方法是让 R 为你做这件事。我在下面加入了一个函数,可以帮你做到这一点。请注意 set.seed 函数的使用——我们将使用随机数将我们的参与者分配到治疗/控制状态,因此 set.seed 将使这种随机性可重现。
现在让我们看看分配治疗/控制状态的函数,我在这里称之为RCT _ 随机:
**#lets first make up a fake list of IDS from 1 to 1000 and 1000 random variables drawn from a normal distributiondf = data.frame("ID"=seq(1,1000), "randomvariable"=rnorm(1000))#lets now make a function to do the work - you can copy paste this function into your own scripts
# it needs to be given a dataframe and a list of naming options
# Options might be "treatment" and "control", or if there are more than 2 options then it might be "Control", "treatment1", "treatment2", or just "LayoutA", "LayoutB"RCT_random = function(dataframey, values_to_add){
set.seed(111)
dataframey$values_to_add[sample(1:nrow(dataframey), nrow(dataframey), FALSE)] <- rep(values_to_add)
colnames(dataframey)[which(colnames(dataframey)=="values_to_add")] = "Status"
return(dataframey) }# so this will take the dataframe called "df" and randomly assign each ROW to "Treatment" or "control"
df_new = RCT_random(df, c("Treatment","Control"))**
我们现在已经获得了原始数据帧
并用我的函数“RCT _ 随机”给他们随机分配治疗和控制状态:
我们现在应该仔细检查我们的随机化,以确保它按预期进行,为此,我们可以查看最重要的关键变量的分布。也可以运行适当的假设检验来评估分布是否不同。对于这些假设检验,我们将 P 值阈值设置为 0.01(而不是通常使用的 0.05),这是由于我们将在另一篇文章中讨论的多重比较问题。
现在让我们看看治疗组和对照组的汇总统计数据,并确保“randomvariable”是相似的:
他们看起来非常相似!到目前为止,随机化是成功的。
突击测验
让我们看看下面的一些随机化策略的例子,并尝试判断它们是正确的还是不正确的随机化:
- 参与者可以决定是加入治疗组还是对照组
- 任何身份证号码以奇数结尾的参与者被分配到治疗组,任何身份证号码以偶数结尾的参与者被分配到对照组。
- 我办公室东边的参与者被指定为控制组,我办公室西边的参与者被指定为治疗组
- 我们抛硬币来决定一个参与者是控制还是治疗
以上哪些是真正随机化的?在继续下面的建议答案之前,花点时间思考一下这个问题。
- 参与者可以决定是加入治疗组还是对照组。这不是随机的,因为参与者可能有理由选择一个会导致自我选择偏差的群体
- 任何身份证号码以奇数结尾的参与者被分配到治疗组,任何身份证号码以偶数结尾的参与者被分配到对照组。几乎是随机的,但不完全是!这里的问题是,可能有一些未知的因素与影响我们的结果的国民身份证。如果我们 100%知道国家 id 是随机产生的,那就没问题,但是我们不知道我们应该使用另一种方法
- 我办公室东边的参与者被指定为对照组,我办公室西边的参与者被指定为治疗组。这是一个可怕的想法,这可能会导致混淆性偏见,因为东西方参与者之间可能存在地理差异
- 我们抛硬币来决定参与者是控制还是治疗,正面意味着治疗,反面意味着控制。这是唯一一个真正随机的系统,因为它仅仅基于偶然性
聚类随机化
有时,我们不能在个体水平上随机化,但我们仍然想在那个水平上测量。例如,如果我们要随机评估对银行员工的激励对客户贷款偿还率的影响,那么不可能在客户层面进行随机化(因为这些共享银行,因此也共享银行员工),我们需要在银行层面进行随机化,同时仍然测量客户层面的结果(偿还率)。
在一个水平上随机化而在另一个水平上测量的过程导致我们的 A/B 测试设计复杂化。具体来说,共享一家银行的客户的固有相似性(在上面的例子中)将导致我们有更窄的分布,并低估我们的误差。反过来,这将对我们的研究能力和研究结果产生连锁反应(即,由于我们数据中的错误置信度,我们将有更高的假阳性率)。在群体中接受治疗的个体行为相似的概念被称为群集**,我们的解决方案是使用群集随机试验或**群集 A/B 测试。****
整群随机试验类似于 A/B 试验,但是我们的随机单元变成了整群而不是个体(所以在上面的例子中,银行就是整群)。我们可以使用群内相关性或 ICC 来测量聚类,这将告诉我们群内个体的响应有多相关。ICC 从 0(同一个集群的成员之间没有关联)到 1.0(完全关联)运行。更高的相关性会导致更多的分析问题,所以我们希望这个值为 0!
ICC 会导致我们的分布看起来比实际更窄,这反过来会对我们的统计功效、系数、置信区间和 p 值产生连锁反应。它本质上导致了对我们结果的错误信任。使用前一篇文章中概述的概念,你应该能够合理解释为什么低估我们的误差会导致这些影响。
使用历史数据在审判前计算 ICC 是可能的。这个估计的 ICC 将使您能够根据需要调整您的方法,以产生一个可靠的试验。
让我们首先看看如何计算 ICC:
***# make some fake data*
*#this data will have an ID number, variableA (our variable of interest), the bank name and the district name*
df = data.frame(ID=seq(1,100), variableA=rnorm(100,500,50), bank_name=c("first_bank","second_bank","third_bank","last_bank"), District=c("A","B"))
library(knitr)
kable(df[1:5,], format="markdown", align="c")**
我们可以使用下面的代码片段来计算 ICC:
**ICC_CI <- function(cluster_level,outcomevar, dataf){
#load library
require(ICC)
set.seed(123)
si = round(dim(dataf)[1]*0.66)
values_f <- c()
for(i in seq(1:50)){
samp_f = dataf[sample(nrow(dataf), si), ]
x_f = ICCbare(cluster_level,outcomevar,samp_f)
values_f <- c(values_f, x_f)
}
# note that 1.96StDevs = 95% confidence interval bounds in a normal dist.
ret = data.frame("Mean ICC" = round(mean(values_f, na.rm=TRUE),3), "CI" = round(1.96*sd(values_f, na.rm=TRUE),3))
ret$Significant = ifelse(ret$Mean.ICC > ret$CI, "Y", "N")
return( ret)
}
stored_ICC <- ICC_CI("bank_name", "variableA", df)**
从这个计算可以看出,我们在同一家银行的客户之间的 ICC 是(0.022 +/- 0.081)。当置信区间(CI)过零时,我们可以看到这并不显著(因此“显著= N”)。换句话说,银行似乎在客户之间的相似性中占的比例可以忽略不计。
然而,如果我们有一个重要的 ICC,那么我们将需要调整我们的试验设计和分析计划,以减轻 ICC 的影响。我们通常有两种选择:
ICC 解决方案 1
选项 1:计算每个集群的汇总指标(如集群平均值)。然后,每个聚类只提供一个数据点,并允许我们继续假设我们的数据是独立的,然后我们可以像往常一样继续使用标准统计工具(例如 T-test)。**
因此,如果我们有 45 组 500 个人,我们最终有 45 个数据点。这意味着我们的功率、样本大小和分析计算也需要在集群级别执行。这也意味着我们可以简单地在聚类级别分析我们的数据,并从这里开始忽略 ICC(因为我们本质上设置 ICC = 1.0 并继续这个假设)。
ICC 解决方案 2
使用 ICC 和个人数量来计算我们的新样本量。
对于选项 2,我们将继续在个人层面计算功效、样本大小和分析指标,但会进行一些修正,以解释错误的窄分布。
对于我们的样本大小,我们将使用下面的ICC_correction
函数来扩大它:
**ICC_correction <- function(samplesize, num_clusters, ICC_estimate){
average_cluster_size = samplesize/num_clusters
factor_inflate = 1 + (average_cluster_size - 1) * ICC_estimate
return(data.frame("New sample size"=round(samplesize*factor_inflate), "Old sample size"=samplesize ))
}
ICC_correction(200, 50, 0.2)**
因此,200
个客户的初始样本量,30 个集群(银行)和一个0.2
的 ICC 将导致新的样本量为320
。请注意一个相对较小的 ICC 是如何将我们的样本量增加 50%以上的。
我们还可以探索添加新集群与在现有集群中添加新个体之间的区别。例如:
**scenario1 <- ICC_correction(200,20,0.2)$New.sample.size #average 10 farmers per cluster, and 20 clusters
scenario2 <- ICC_correction(200,40,0.2)$New.sample.size # average 5 farmers per cluster, and 40 clusters**
`场景 1= 560 ’
`场景 2= 360 ’
我们可以看到,将集群数量增加一倍(但保持参与者数量不变,以便客户分散到更多的集群中)会导致校正后的样本量大幅减少。
我在下面运行了一个模拟,该模拟将绘制添加新个体(到现有聚类)与添加新聚类之间的关系,以及这如何影响样本大小(保持功效常数为 0.8):
总的来说,我们可以看到,在现有的集群中增加新的集群而不是新的个体**,在较小的程度上扩大了我们校正后的样本量(在这篇文章的底部有一个到这个模拟代码的链接)。**
通过添加新的聚类,我们将最小化由聚类内方差解释的总方差,从而获得信息。另一个直观的解释是,如果我在一个群集中已经有 10 个个体,并且我们有非零 ICC,那么该群集中的每个额外个体提供的信息越来越少,并且她的特征基于群平均值越来越可预测。
NB。在下一篇文章中,我们将看看用固定和随机效应模型对 ICC 数据的实际分析。
p 值阈值,也称为 alpha
一旦我们有了一个可检验的假设和随机化策略,我们将会考虑数据分析。通常,我们会用假设检验来检验干预的有效性。这个假设检验将产生一个 p 值,这是我们的数据可能纯粹是偶然产生的概率——换句话说,我们错误拒绝 H0 的概率(一个假阳性结果**)。**
当使用假设检验时,我们必须设置一个可接受的假阳性率,也称为 p 值阈值或α水平。最常见的 p 值阈值是 0.05 ( 一个非常随意的数字)。这意味着我们愿意接受产生假阳性的 5%的风险,并错误地断定我们的治疗之间有差异,而事实上没有差异。
我们可以在下面证明这一点,如果我们从相同的人群* 中随机测试两个**样本,那么我们将有 5%的机会错误地将样本识别为来自不同的人群:**
在某些情况下,我们可能希望将阈值设置为 0.01 (1%)或 0.1 (10%)。一般来说,我们越不愿意不正确,门槛就越低。因此,对于可能对客户产生负面影响的干预,我们希望非常确定正面影响(0.01 阈值),而不愿意接受负面影响(0.1 阈值)。请注意,我们的阈值越低,检测任何效果所需的样本量就越大。
和往常一样,这些数字的完整 R 代码可以在这篇文章的底部找到。
实践中的样本量计算
结合这篇文章和文章#1 的材料,给了我们一个很好的样本量计算的理论基础。然而,我想在这里提出的一个常见问题是:“我从哪里获得样本量计算的数据?”。我们可以使用上面的亚马逊布局试用示例来理解如何回答这个问题。
在计算样本量之前,需要的主要信息是对干预效应大小的估计。通常有两种方法可以为我们的计算得出效应大小的估计值:
- 分析历史数据或试点研究
- 设置最小可检测效应(MDE)
根据历史数据或试点研究进行估计
第一个包括文献回顾和/或小规模试点研究,以评估治疗组和对照组之间的差异。请注意,如果您使用试点数据,那么效果大小的估计可能会非常粗略,因此我建议将效果大小减半以保守,并将其用于计算。如果你再次使用文献值,谨慎对待它们,将任何文献值视为效应大小的上限估计(这是由于赢家的诅咒现象,这将在后面的帖子中讨论)。
最小可检测效应
也许对这个问题最有商业头脑的方法是利用 MDEs。
MDE 方法将询问“为了使干预有价值,我需要看到的最小效果是什么?”*,然后我们将效果大小设置为该值。这里的理由是,如果提议的干预的投资回报(ROI)是负的(或非常小),那么我们不需要能够精确地测量这样小的值来做出决定。*
例如,在 Amazon.com 实施布局 B 可能相当昂贵。我们可以计算出该实现将花费大约 20,000 美元的员工时间,在这种情况下,我们只关心是否能够检测到超过 20,000 美元的影响。为了便于讨论,我们假设 20,000 美元相当于美国市场转换率增加 2 个百分点,然后我们将 MDE 设置为 2 个百分点,将我们的效果大小设置为 2 个百分点。
MDE 方法可能非常强大。在预分析(估计样本大小)和后分析期间明智地使用它来说明使用 0.8 倍的光焦度我们能够检测到什么样的尺寸效应。您可以在下面看到一个预分析 MDE 的工作示例,我还包含了一个函数plot_MDE
,您可以对自己的数据使用它。
**#make some fake data, let's pretend its baseline data
dat <- data.frame("mean.client.expenditure" = rnorm(1000,100,10))
#this function will plot MDE for various differences
# differs is a list of intervention effects that you want to consider
plot_MDE <- function(historical_data, differs){
#initialise empty vec
p <- c()
#remember our effect size function from post 1?
cohen_d <- function(d1,d2) {
m1 <- mean(d1, na.rm=TRUE)
m2 <- mean(d2, na.rm=TRUE)
s1 <- sd(d1, na.rm=TRUE)
s2 <- sd(d2, na.rm=TRUE)
spo <- sqrt((s1**2 + s2**2)/2)
d <- (m1 - m2)/spo
rpb <- d / sqrt((d**2)+4)
ret <- list("rpb" = rpb, "effectsi" = d)
return(ret) }
#load libs
require(pwr)
for(i in seq(1:length(differs) ) ) {
samp1 <- historical_data
xnu = differs[[i]]
#this is a better version if you can understand it:
samp2 <- samp1 + rnorm(length(samp1), xnu, xnu/10) #add some noise
inp <- cohen_d(samp1, samp2)
p[i] <- pwr.2p.test(h=inp$effectsi , sig.level=0.05, power=0.8, n=NULL)$n
}
require(ggplot2)
print(ggplot() + geom_point(aes(x=p, y= differs), size=3, color="blue", shape=1) + geom_line(aes(x=p, y=differs), size=1.2, color="blue") + xlab("Sample size")+ ylab("MDE") + ggtitle("Minimum detectable effect vs. sample size"))
library(knitr)
mde_tab = data.frame("MDE"=differs, "Sample size"=p)
kable(mde_tab, digits=2)
}
#set some differences for the loop, here, 1,2,5 (etc) are dollar increases
diffs <- c(1,2,5,7.5,10,15,20,25)
#plot
plot_MDE(dat$mean.client.expenditure, diffs)**
请注意,这个函数将为您提供 Y 轴,无论您为该函数提供什么单位(在本例中是美元)。您可以使用 MDE 来计算初始样本大小,然后使用 ICC 校正来获得该 MDE 的 ICC 校正样本大小。
尺寸
A/B 测试的最后一部分是测量本身。这通常是测试设计中被忽视的部分,因此也是后来分析问题的主要来源。任何假设都需要有一个好的测量策略才有用。
我想用一个题外话来描述我对马拉维一家电信公司的通话时间使用(又名电话信用)的 A/B 测试所做的一些分析,以说明这里的陷阱。
这项 A/B 测试考察了新产品对通话时间使用的影响。在 A/B 测试中,我们要求人们回忆他们上个月在通话时间上花了多少钱,而他们不知道的是,我们还从电信公司获得了相同客户的实际花费数据。当我们比较这两个指标时,我们发现相关性很小!此外,当我们观察谁最有可能高估他们的通话时间时,我们发现是年轻的城市男性。
现在考虑一下——如果我们只有自我报告的数据,我们会认为年轻的城市男性是广播时间的大支出者,从中得出许多结论,并发现许多“具有统计学意义”(根据< 0.05) relationships! We would have made many recommendations to the telecommunications company about the new product, and our results would have held up to thorough statistical interrogation. In short — there would have been very little way to know we were wrong, but we would have been wrong nevertheless!
的 P 值,这个故事的寓意是,世界上最好的统计数据也不能挽救糟糕的测量试验。另一个寓意是,自我报告的数据往往是可怕的(当心调查-重非政府组织!),因为它受人们希望被如何看待的影响(可能是面试官、社区或他们自己对“低”通话时间的尴尬)。
重要的是花一些时间思考衡量策略的注意事项和弱点,然后尝试尽可能地减轻这些弱点(例如,通过获得上述确证数据)。
最后,一旦数据被收集和分析,让它可访问和可复制是很重要的。这意味着编写干净的代码(最好是在 R-markdown 或 Jupyter notebook 中)并将原始数据保存在公司服务器上。
一家新接触大数据的公司中的每一位数据科学家都目睹了散布在数十个员工硬盘上的一连串随机 CSV 文件和分析脚本。一个存储这些文件和脚本以备将来使用的系统是必要的,并且完全值得拥有自己的博客帖子!
如果你喜欢这个帖子,或者觉得有用,那么请鼓掌让我知道!
摘要
我们现在已经看到了 A/B 测试的关键部分:
- 假设:一个好的假设是可检验且可测。它必须有一个明确定义的评估标准(例如,我们是测量平均值还是中位数?个人层面还是群体层面?).**
- 随机化:我们必须使用 R 随机化,并确保我们的治疗组和对照组是平衡的。我们可以使用 RCT 随机函数来实现这一点。我们还应该考虑群集效应,并使用正确的随机化单位。可以计算 ICC 并相应地调整样本大小,假设 ICC 为 1.0 并根据聚类数计算样本大小也是合理的
- 功效:了解你在试验前后的统计功效、样本量和 MDE(见上一篇)
- 测量:测量必须稳健可靠,考虑我们可能不准确的地方,并在您设计的任何研究中尽量减少自我报告指标的重要性!
你可以在我的 GitHub 上查看这篇文章的完整版本(包括所有 R 代码)
下次
线性模型,混合效应模型,以及更多关于假设检验的内容!
原载于Michael-bar . github . io。**
数据科学的肮脏小秘密
尽管在这个主题上有相当多的贡献,但是定义今天的数据科学家的知识和技能集被证明是一个相当大的问题。这一挑战并没有阻止贸易专家预测世界范围内对这类“专家”的供需缺口【第二】【第三】;而 LinkedIn 的 2017 年十大最具市场价值技能调查则突出了统计分析、数据建模和数据呈现【iii】。自从威廉·克利夫兰(William Cleveland)在 2001 年提出“数据科学”这一术语作为计算机科学和统计学领域之间的结合点以来——“超级明星”、“忍者摇滚明星”和“性感独角兽”等最高级词汇对商业和高等教育理解这一行业的具体情况几乎没有帮助。究竟是什么让数据科学家与该领域的其他人区分开来?
有几个原因可以解释为什么这个行业在定义角色上有这么多困难。大多数组织倾向于使用这个术语作为一个包罗万象的短语,似乎包括统计学家、业务分析师和数据工程师。多年来统计工具和方法的快速发展并没有让这项任务变得更容易:专业知识的标准变得越来越雄心勃勃。数据科学家的营销与其他技术相关行业没有太大不同:IT 行业在不断重塑传统职位头衔的过程中,历史上一直表现出一种“本月流行”的心态。在回顾了当前职位空缺对数据科学家的要求后,人们应该想知道是否有数据科学家不能做的事情。
鉴于这份技能和能力的清单,也许更有前途的方法是列出数据科学家不是什么。Chuck Russel 的贡献提出了一些有效的观点。他表示,这个头衔并不附带数学、计量经济学或决策科学的高级学位。根据候选人对供应商统计平台培训视频的使用情况来判断他们是否是数据科学家就更加困难了。参加新兵训练营或专业在线课程的证书并不能区分专业人员。数据科学家不像专业人士那样擅长处理数据,而是练习解决组织问题。
如果数据、平台和编程方面的专业知识还不够,那么数据科学家的特质是什么?在我们看来,这一切都始于候选人对特定市场和行业逻辑的理解。数据科学也是一种思维框架,数据科学家不断扫描他们的物理和数字环境,寻找需要解决的问题。他们的日常工作包括探索要解决的问题的本质,鉴定手头的数据,确定哪些方法可以在给定的环境下产生更好的选择,以及将数据转化为有洞察力的行动。他们不会把自己孤立在电脑前,但正如李·贝克所说,他们充当公司和客户现实的侦探,以及组织内部技术和运营服务之间的中介。总之,数据科学家根本不是专家,而是人类决策活动的永恒学生。
这种对决策而非数据的关注,让我们对一名优秀的数据科学家与众不同的地方有了一些了解。贸易知识是不可替代的——理解市场如何运作是数据科学的基础。理解人们如何“看待”数据,以及决策中隐含的启发和认知偏差与数据本身一样重要。寻找要解决的问题是找到解决方案的前提。专注于通过数字讲述故事是促进有效决策的关键。数据科学不是一个职业头衔,而是一个组织每天带到工作中的思维方式。
改善管理决策是商业分析研究所的核心和灵魂。在我们位于巴约纳的暑期学校,以及我们在欧洲的大师班,我们让数据科学为您和您的组织服务。该研究所专注于管理者数据科学的五个应用:在数字时代工作、数据驱动的决策、机器学习、社区管理和可视通信。数据驱动的决策会对你未来的工作和职业生涯产生影响。
Lee Schlenker 是 Pau 商学院的教授,也是 http://baieurope.com 商业分析学院 的负责人。【www.linkedin.com/in/leeschlenker.】你可以在推特上关注我们https://twitter.com/DSign4Analytics
【I】参见例如 Smith,A. (2016),如何成为数据科学家,Experfy
【ii】Cap Gemini(2017)介意数据科学技能差距
【iii】Ficher,C. (2016),能让你在 2017 年被录用的顶级技能,LinkedIn
【v】贝克 L. (2016)。《50 种灰色阴影——数据科学家的心理学》
数据科学的再现性危机
Photo credit: Serg from the Swarmrobot.org project via Wikipedia
什么是数据科学中的再现性,我们为什么要关注它?
紧接着 Joelle Pineau 在今年的国际学习表示会议(ICLR) 上关于深度强化学习的可复制性、可重用性和健壮性的精彩演讲,似乎数据科学世界(或至少是数据科学研究世界)中的每个人都在谈论可复制性和可复制性。
这个问题不是数据科学独有的。事实上,根据 Nature 杂志 2016 年的调查,大多数科学领域都面临着可复制性危机。具有讽刺意味的是,根据调查受访者的说法,导致再现性危机的最重要因素之一是统计知识不足。这一结果很可能至少部分受到生物和医学领域大量受访者的影响(906/1500),他们通常在相关统计数据方面接受过次优培训。鉴于数据科学和机器学习从业者的职业性质,人们会希望他们具有更高的统计培训总体水平。然而,尽管该领域强调统计和确定性建模,但数据科学仍然面临着再现性方面的挑战,这些挑战往往突出了在大多数科学领域推动再现性危机的结构和组织力量。
什么是再现性?
在我们讨论数据科学中的再现性之前,我们需要从一个明确的定义开始。Chris Drummond 认为,许多关于“可复制性”的讨论实际上都是围绕着“可复制性”展开的(有些人将后者称为“可重复性”)。在他看来,可复制性是另一个人使用同样的工具和同样的数据产生同样结果的能力。在像数据科学这样的计算领域中,这个目标经常是微不足道的,对于“真实世界”的研究来说并不成立。任何人都可以派生一个开放访问的存储库,使用相同的数据运行完全相同的代码,并获得相同的结果。实验室环境很少如此完美地可复制,这意味着实验复制通常涉及一些实验参数的低水平扰动。通常,即使完全相同地复制别人的实验室工作也意味着从相同的来源订购原材料,重新配制他们的试剂,在你的机构中找到类似的设备,并在出版物允许的范围内尽可能严格地遵循他们的方法。正如 bench 科学家所说,“我为自己的研究复制了这个实验,这个方法在我手里也管用。”
但是实验复制的保真度在实验室和计算学科之间是不同的。计算复制的保真度通常被认为是非常高的。如果另一位研究人员将相同的代码应用于相同的数据,那么任何确定性算法都会产生相同或非常相似的结果。从本质上来说,大多数开源项目都满足这种可复制性要求,因此对于该领域大多数有意义的研究来说,停止在这种实验性复制水平上可能是微不足道的。然而,尽管它是琐碎的,这种练习仍然是至关重要的,可以作为其他从业者推出新工具或算法的积极控制。
相反,在德拉蒙德看来,再现性涉及更多的实验变异。我们可以把实验性复制看作是一种存在于从近乎完美的相似到完全不相似的连续体上的活动。在高保真度的一端,我们有一个分叉的项目,在没有任何改变的情况下重新执行。在天平的另一端,我们有通常保留给烹饪博客上食谱评论的那种废话。"我没有做这种面包的面粉,所以我用碎牛肉代替,它尝起来很难吃!"从这个角度来看,实验室实验中的实验复制看起来更像是计算实验中的复制。
Good reproduction is about finding a middle ground between replication and irrelevance.
我们为什么要关心?
可重复的实验是每个科学领域的基础,事实上,甚至是科学方法本身。卡尔·波普尔在《科学发现的逻辑》中说得好:“不可复制的单一事件对科学没有意义。”如果你是这个世界上唯一能取得特殊成果的人,其他人可能会发现很难信任你,尤其是如果他们已经花费时间和精力试图复制你的工作。在一个单一的未经证实的轶事上建立一个产品或理论是鲁莽和不负责任的,如果你把轶事作为一个可靠的现象,它会消耗时间和资源,否则这些时间和资源会花在实际的生产工作上。
不可复制性并不总是恶意的,甚至是故意的,但在科学领域它很少是积极的。科学贡献的有效性在于它们作为一种工具或视角对其他人应用于他们自己的问题的有用性。我们钦佩那些解决我们发现难以解决的问题的研究人员,或者那些开发工具来解决我们苦苦挣扎的困境的研究人员。作为科学家,我们应该努力创造工具和想法,帮助他人实现自己的目标。这样做,我们(希望)能丰富我们自己的成功和职业地位。
如果我们缺乏再现性的标准,或者如果我们陷入实施再现性护身符的陷阱而不考虑它们的真正目的,我们就有浪费我们自己和其他人的时间的危险。科学是超越单个从业者的思维连续性。当我们离开时,不管出于什么原因,其他人应该能够从我们离开的地方继续产生新的知识。同事们应该能够实施我们的想法,而不用我们在他们的肩膀上徘徊。
科学是一种将我们独特的经历和兴趣运用到世界上的方式,这种方式可以帮助其他人的经历和兴趣。我们不能总是预见到我们的新知识如何应用到我们自己的兴趣中去帮助别人,我们也不需要这样做。我们只需要尽最大努力,用可靠的方法解决我们感兴趣的问题。以无法复制的方式获得的知识对任何人都没有帮助,也没有潜力这样做。所以没有可重复的实践,我们只是在浪费我们自己和其他人的时间。
Photo credit: rawpixel.com on Pexels.
数据科学再现性的障碍
既然我们已经有了一个基本的框架来解释什么是再现性以及为什么它很重要,我们可以开始讨论如何解决它。有几个障碍导致了数据科学中的再现性危机,其中一些将非常难以解决,如果不是不可能的话。常见的问题包括数据和模型的可用性、基础设施、出版压力和行业标准,以及许多其他不经常讨论的问题。几乎所有这些问题都有多种不同的驱动因素,每个因素都需要自己的解决方案。因为我们是数据科学家,谈论模糊和复杂的概念,它可以帮助做我们最喜欢的任务之一:分类。
大多数问题都有“硬”和“软”因素驱动。硬驱动代表着执行上不可逾越的障碍。具备适当的基础设施就是一个很好的例子。有时你只是没有足够的存储空间或 GPU 来复制别人的作品。也许你不能访问临床或商业数据,因为你不能获得许可这样做。
另一方面,软挑战代表了这样一类问题,其中有一个概念性的解决方案,但行业或专业压力阻止你这样做。最典型的例子就是学术实践者,他们真的很想复制别人的作品,但是没有理由花时间去研究一些期刊不愿意发表的东西。
在许多情况下,解决数据科学家面临的再现性挑战需要对多个不同领域有细致入微的了解。这些问题中的大多数无法通过单一的规则或政策来解决,因此有时可用的最佳解决方案是开始讨论如何改进数据科学和相关分析领域的实践。随着本系列的继续,我希望深入探讨影响数据科学可再现性危机的每个最大挑战,并讨论我们作为一个新的独特的行业可以采取的潜在解决方案。
数据科学家:从优秀到卓越
你们中的许多人刚开始学习数据科学,并且正在寻找关于学习什么的资料,可能已经遇到过绘制的康威的维恩图关于数据科学的含义。我有一个改编自他的不同版本,并写在我的帖子中。
经过深思熟虑,我看了吴恩达关于在百度研究院建立他的数据科学团队的帖子(当时他还和他们在一起),我问自己一个问题:一个优秀的数据科学家如何才能成为一名伟大的数据科学家。
团队成员
我想到的一件事是,对于任何从事数据科学工作的人来说,他们都无法逃避成为团队的一员。他们必须学会如何成为一名好的领导者和好的追随者,以便扮演好支持角色,尤其是当数据科学家必须与数据工程师和业务用户沟通时。每个人都在使团队有效和高效的过程中发挥作用,没有团队成员的合作,领导者就不能有效,没有领导者的指导、保持专注、管理时间表和激励团队成员,团队成员也不能有效。
沟通技巧
除此之外,在我看来,要成为一名伟大的数据科学家,沟通技巧非常重要。能够以管理层能够理解的方式传达相关的见解,需要投入大量的思考。例如,演示应该如何组织,以便见解易于理解。
伟大的数据科学家需要了解人们是如何学习的,什么样的沟通媒介可以有效地传递信息/见解,以便他们容易理解并可以用来做出更好的决策。
移情
综上所述,作为一名优秀的领导者、优秀的追随者和优秀的沟通者,他们都需要一个共同的“要素”,那就是换位思考,能够设身处地为他人着想。
拥有同理心可以让一个人明白,如果“故事”以某种方式呈现,哪些行为可能被选择,哪些感知可能被采纳。这使数据科学家能够预测可能的结果,并为此做好准备,还能提出成功的演示。
例如,如果一个数据科学家必须准备一个特别的分析,他/她应该能够预料到听众可能会问的问题,并相应地准备好数字,以便在提问时可以方便地使用。能够回答观众的这些问题,可以增加数据科学家的可信度。
因此,要成为一名优秀的数据科学家,我建议这个人接受培训并具备以下方面的知识:
要从优秀的数据科学家成长为伟大的数据科学家,需要的第四项技能是
4)人际技能——团队精神、沟通技能和同理心
Moving from Good to GREAT!
总之,数据科学家不仅应该拥有可以通过书籍和其他媒介获得的“硬”技能、知识和技能,还应该拥有只能通过经验和实践获得的“软”技能。
好消息是它们可以并行拾取。所以去把它捡起来!开始团队项目,抓住更多的机会做演示!
希望博客有用!如果你有兴趣了解还需要哪些软技能,请访问第二部分这里。祝您的数据科学学习之旅愉快,请务必访问我的其他博客文章和 LinkedIn 个人资料。
**补充说明:**作为我 2020 年新年计划的一部分,我已经建立了自己的网站,最新消息请访问这里。感谢支持!
数据科学家:从优秀到卓越(第二部分)
在我写了关于如何成为一名伟大的数据科学家的博客文章后,我继续问这个问题,“一个人如何才能成为一名伟大的数据科学家,不断改进并为组织增加价值?”。经过大量的研究和思考,除了我在之前的博客文章中提到的,这里还有一些技巧。
研究技能
作为一名数据科学家,我们是各种各样的解决方案提供商,寻找信息/见解的金块,帮助组织克服当前的挑战或沿着持续改进的道路前进。
数据科学家不可能知道他们正在从事的项目的所有信息,因此非常需要研究解决方案。它可能是研究解决类不平衡的技术,集成不同的技术或新的机器学习技术,或者是在 R 或 Python 中寻找合适的函数的非常简单和常见的任务。
那么研究技能呢?在我看来,良好的研究技能包括两个方面。
(1)适宜性——找到正确的信息。能够搜索能够充分回答你的问题的信息。
(2)速度——快速查找信息。
拥有良好的研究技能(即快速找到正确的信息)有助于减少数据科学家用于其他重要任务的时间,如数据探索、数据管理、功能工程、提高代码可读性等。
好消息是,为了快速找到正确的信息,人们必须在搜索引擎中使用的关键字上下功夫。每当我研究一个特定的主题时,我会考虑我需要的关键字,以便搜索引擎“抛出”一个适合我当前需求的结果列表。
通过“锐化”关键词,它帮助搜索引擎更好地“理解”你在搜索什么,并生成所需的结果。除了所用的关键词,我还会注意关键词的顺序,以改善搜索结果。搜索引擎现在提供自动完成功能,所以好好利用它,快速获得你想要的结果。
我也倾向于使用单一的搜索引擎进行研究。这是为了“训练”搜索引擎理解我通常寻找什么,以便它可以提供我需要的必要信息。
高效学习
考虑到数据科学家涉及的众多领域,能够高效地学习非常重要。数据科学家学习或掌握的知识越多,他/她为组织提供的价值就越大。
能够快速获取知识也许是高效学习的一个方面。我认为高效学习的第二个方面是能够将每个领域的不同部分联系起来。换句话说,能够在不同领域之间建立许多相关的联系。能够建立相关的联系,有助于保持知识,也加强了对最近学到的概念的理解。
我们每个人都有自己的高效学习模式,因此快速发现并应用它对我们来说非常重要,尤其是如果我们正在提升数据科学学习曲线的话。
另一点需要补充的是,数据科学家工作的环境是非常动态的,有大量的变化。有时,我们需要“取消学习”以便快速学习新的东西,这意味着我们必须放弃某些我们以前已经学习过的东西中根深蒂固的概念。我们需要不断质疑我们根深蒂固的假设和概念,质疑它们的相关性。
师徒&教学
指导和教学如何帮助数据科学家从优秀走向卓越。我能想到两种方法。
首先,指导和教学有助于强化数据科学家的现有概念。让一群受训者/团队成员来指导或教学有助于验证一个人所持有的当前概念,无论它是否有用,或者在什么情况下是无用的。我坚信数据科学家在协作环境中会茁壮成长,因此即使是经验丰富的数据科学家也可以从其他人那里学到一两件事,因为他们可以带来新鲜/更新的观点。
其次,指导和教学有助于提高数据科学家的沟通技巧。在我主持的辅导课程中,它帮助我练习我的沟通技巧,因为我必须找到各种方法来解释同一个概念,以便我的学员能够很好地理解这个概念。通过寻找不同的方法来传达概念,使其易于理解,这与向业务用户传达见解非常相似,有助于用户很好地理解所提供的见解。
结论
这里分享的技能是为了帮助数据科学家增加他们对雇用他们的组织的价值,这些是软技能(类似于之前的帖子),不容易从书上/网上学到,但可以通过经验积累,所以现在就开始努力吧。😃
我希望这个博客对你有用。如果有,一定要分享。一两下掌声也是一种鼓励。祝您的数据科学学习之旅愉快,请务必访问我的其他博客文章和 LinkedIn 个人资料。
**补充说明:**作为我 2020 年新年计划的一部分,我已经建立了自己的网站,最新消息请访问这里。感谢支持!
数据科学家——这是 21 世纪最性感的工作吗?
关于我们前进方向的思考。
The Path Forward?
我们已经快到 2019 年了。2012 年,我们开始了解 21 世纪最性感的工作。从那时起,正如这篇文章所预测的那样,我们有了突飞猛进的数据科学家。
数据科学家最基本、最通用的技能是编写代码的能力。五年后,当更多的人在他们的名片上有“数据科学家”的头衔时,这可能就不那么真实了。更持久的是,数据科学家需要用所有利益相关者都能理解的语言进行交流,并展示用数据讲故事所涉及的特殊技能,无论是口头上、视觉上,还是理想情况下两者兼而有之。
— HBR
同意。这份工作不错,但不是以我们梦想的方式。如果下一部分感觉像是大企业无法从他们宝贵的数据科学家身上创造价值的咆哮,我感到非常抱歉。
但这确实是事实,需要有人说出来。
首先,数据科学真的很性感吗?
对此有两个阵营。有些人把数据科学称为*、、、“新电力”。但是我越深入研究这个问题,就越发现数据科学家只不过是反复试验的大师。或者是 非常擅长高效利用集群资源的工程师 。*
这张 xkcd 图很好地总结了这个问题。
Is Data Science just tuning?
我在这里想说的是— 数据科学的发展方式真的是正确的吗?所以,正如你现在已经猜到的,我不会把我的工作称为性感,尽管它有它的额外津贴。
- 我的大部分时间都浪费在手动数据管理任务上,剩下的时间,模型创建部分(据说是有趣的部分)实际上只是一个尝试新模型和超参数调整的 无休止的循环。
- 虽然我们看到图形社区等其他流正在用 GPU 计算做令人敬畏的事情,在他们的电影中有令人惊叹的设计,在他们的主机游戏中有不断扩展的真实世界,但我们 数据科学家仍然只是在做非常基本的线性代数 。当我们这样看的时候,似乎不太性感。并且从工作角度提醒你,使用 GPU 集群的人在做 【最好的工作】 有。
Thought Provoking?
- 在开始阶段设想的数据科学的 用例并没有很好地实现 。我们自己的上帝,内特·西尔弗,在做选举预测时动摇了。我们在过去几年中使用深度学习解决的图像分类和检测的用例,虽然是很大的研究问题,但仍有很多需要改进的地方。
- 企业没有真正准备好接受工作方式的改变 。首先想到的是金融领域。面对所有的法规和企业混乱,我注意到,除了简单的逻辑回归之外,在生产中部署任何东西都需要做大量的工作。当我观察业务伙伴或首席执行官的需求时,他们真的不想要模型,而是想要 【高级可视化】 。基本分析的一个美化的术语。 仪表板几乎是每个项目都有的。 虽然从一个数据科学家的角度来看,如果我能使用基本的可视化和模式提供良好的业务结果,我会很高兴,但这带走了我们作为从业者被承诺的性感。
总而言之,我们被困在新品牌重塑的名义下,做着和以前完全一样的工作。我们需要打破这个链条,追求卓越。
那么接下来呢?
- *数据科学家需要在决策桌上 *。随着问题变得更加清晰,这将有助于设想更好的用例。此外,我们设想的任何新项目都有其自身的数据问题。数据仓库系统是遗留的,需要大修。
- ****沟通是关键。**过去一代的商业领袖,现在的远见者,以及研究界 需要以有意义的方式走到一起来铺平前进的道路。
- 也是迄今为止最重要的— 研究团队正在筒仓里做着大量伟大的工作。有了大量可用的人力,合作和众包这样的工作实际上可以推动我们走向人工智能的最终目标。 正如埃隆·马斯克(Elon Musk)所说——“如果我们在一艘正在下沉的船上,我们或许应该分享水桶设计。”
我们正处于人类历史的关键十字路口。我们正在涉足有关人工智能的问题,但老实说,我们正处于整个生态系统的萌芽阶段。是时候从这种虚幻心态的陷阱中走出来,认识到我们的缺点,并共同努力建设一些伟大的东西了。接下来的步骤将决定我们为这一代人取得的成就。希望接下来的步骤是正确的,因为我们不能错过这个机会。
PS:以上是我自己的个人观点。
数据科学家不仅仅是数据科学家
一个不争的事实是,在过去的几年里,数据科学这个术语已经得到了企业界和学术界的广泛支持。
互联网上有许多文章解释什么是数据科学,它如何在不同行业中使用,以及为什么它在就业前景中获得了独角兽地位。
在这篇文章中,我想阐明一个成功的数据科学家在组织中需要扮演的隐含角色。
数据科学家的典型职位招聘要求的技能包括但不限于统计学、计算机科学、线性代数、数据挖掘、机器学习、数据库、可视化、演示和沟通技能。
尽管数据科学家需要上述所有技能来执行日常任务,但他们扮演一些职能角色来成为一名成功的数据科学家也很重要。因此,成功的数据科学家不仅仅是传统意义上的数据科学家,
一名侦探
组织/公司经常会偶然发现神秘的趋势、虚假的相关性甚至异常的数据指标。作为广泛接触基础数据及其数据库之旅的人,数据科学家拥有独特的能力来解释否则不合理的结果背后的原因。
这也是数据科学最令人兴奋的地方,能够扮演一个福尔摩斯,调查数据杀人案。调查包括询问负责数据之旅的每个团队和流程。在大多数情况下,通常怀疑是数据输入错误、缺失数据、异常值、数据标准化问题等。
说书人
无论你熟练地构建了多么宏伟的模型,它都取决于你传达其本质的能力。这就是像 Kaggle 这样的平台与现实世界数据科学脱节的地方。
虽然构建准确的模型很重要,但围绕从模型中收集的见解构建可靠的故事同样重要,如果不是更重要的话。
这个讲故事的技巧需要经验和练习,大量的练习。随着 auto-ml 平台和黑盒深度学习框架的出现,这是数据科学家在未来必须提供的最重要的增值技能之一。
一个说客
数据科学家,尤其是初创公司的数据科学家,有机会与从营销到销售到产品和客户支持的不同团队进行互动。很多时候,这些团队所做的决定是基于古老的假设或被反驳的假设。
数据科学家需要游说和宣传更多数据驱动的决策。在说服其他人对业务流程进行更改时,预计会遇到阻力。但是需要有意识的努力来引导决策过程中的变化,一小步一小步的。
首先,就数据和分析的最佳实践对组织内的关键利益相关者进行培训。构建自助分析工具,以便他们能够轻松访问和利用数据。建立你的关系网,获得他们的信任。做一个聪明的销售人员,即使在他们没有要求的情况下,也要软推销这些改变。
魔术师
一般来说,该组织对数据科学家有很高的期望,并要求他们施展魔法。他们需要回答每个问题,从什么是最有利可图的营销渠道,到公司主页上应该使用哪种字体。
当没有现成的答案时,或者当时间-价值权衡不平衡时,有一些锦囊妙计来摆脱那些棘手的情况是很好的。这并不是说应该拒绝所有无聊和耗时的任务,而是对任意问题的答案进行粉饰,以便将时间和精力用于更有价值的工作。
最后,用数据科学的魔力让他们大吃一惊。
凭借深度神经网络模型的能力、推荐系统的能力和无监督学习方法的多功能性,机会是无限的。
组织中没有比他更好的人来认识数据所能提供的真正潜力。
数据科学家需要战略思维
Should Business Intelligence be part of Data Science?
做了一段时间的培训和指导后,我注意到一些我遇到的大多数数据科学课程都没有教授的内容,但在我看来,这是数据科学家需要的一项基本业务知识。
让我们不要纠结于为什么数据科学课程中没有包含它,而要考虑为什么数据科学家知道它很重要。
洞察力和反馈
在很久以前,当大多数事情都不容易衡量时,企业所有者或首席执行官只能通过损益表了解其商业战略的成功,而且是在整个商业战略已经执行之后。这肯定不是理想的,因为在策略执行过程中会消耗极度稀缺的资源。
随着技术的发展,过去无形的东西现在可以被测量,这就是商业智能的闪光之处。对战略管理有了很好的理解,数据科学家可以提出可能的指标,这些指标可以确定战略是否在正轨上,如果没有,则能够确定其原因。对指标如何随时间变化的良好理解有助于企业更好地了解他们所处的市场和环境,稀缺资源的使用效率如何,最重要的是,如何改进下一个战略。
鉴于战略的进展现在可以被跟踪,如果企业发现战略没有奏效,他们现在可以节约稀缺资源。
例如,如果一个企业希望改善其品牌形象,并致力于推动一系列的广告。企业可以提出标签,看看情绪如何,信息传递了多远。通过测量情绪和信息的传播范围,企业可以决定他们营销活动的有效性。如果情绪是跨时间测量的,企业可以看到市场如何对每个新的营销元素做出反应,并阻止不理想的元素,扩展有效的营销元素。这是一个将资源(营销资金)从无效资源转移到更有效资源的例子。
最重要的是,现在有了数据,企业可以通过将手指放在正确的位置(即设置正确的指标)来轻松地寻求所需的反馈,并更有效地利用资源,而不是在战略执行结束时才发现战略无效。
实施分析
对战略管理有了很好的理解,数据科学家将会更好地了解如何收集数据,以及在哪里可以使用机器学习模型来帮助企业在战略执行期间做出快速而明智的决策。
例如,数据科学家将能够提出交叉销售模型和市场购物篮分析,以帮助超市通过电子邮件营销活动销售更多产品,减少受垃圾邮件影响的人。
对战略管理有很好的理解,数据科学家将理解并能够帮助企业从收集的数据中提取更多价值,方法是提出如何在现有流程中使用机器学习模型来协助执行业务战略。
可操作的见解
对于希望为所在组织提供价值的数据科学家来说,能够提供“可操作”的见解至关重要。对战略管理的良好理解,有助于数据科学家理解极具价值和可操作性的见解,并能够提前思考。
能够战略性地思考有助于数据科学家通过提供可以采取行动的见解来不断提供价值,并在此过程中建立可信度。(听说过喊狼来了的男孩吗?同样,如果数据科学家不能提供可操作的见解,就没有人会再关注他/她了)。
总之,我认为战略管理是数据科学家应该具备的基本知识,因为它有助于增加数据科学家可以带来的价值。
如果你渴望了解数据和战略管理是如何结合在一起的,我建议你仔细阅读一下平衡计分卡。
我已经提出了我的观点,数据科学家需要了解战略管理,并乐于听取您的意见。我希望所有读者有一个有趣的数据科学学习之旅,并访问我的其他博客文章和 LinkedIn 个人资料。
数据科学家:通过这 5 个领域外的阅读增长你的专业知识
我在 2018 年阅读的前 5 本非数据科学书籍帮助我设计了更好的人工智能
从一名优秀的数据科学家转变为一名伟大的数据科学家的关键不仅仅是技术知识。相反,你在职业生涯中取得的进步越大,就越有必要联系和综合其他地方的想法。对各种主题领域的主题有很好的理解可以在日常生活中激发伟大的想法,并最终在你的技术工作中带来巨大的突破。
那么如何培养这种能力呢?阅读各种各样的主题可以让你建立一个知识基础来联系想法,让创新变得更容易。我在 2018 年读的这五本书对我在数据科学和人工智能领域的工作影响最大。
这五本书跨越了多个学科,包括神经学、词典学、心理学、社会学和进化生物学——这些主题乍一看似乎并不相关。但是每一个都对我构建人工智能系统的方式产生了重大影响,以及它们可能带来的影响。
1.意识之河奥利弗·萨克斯著
**数据科学家致力于:**人类级人工智能、AGI、计算机视觉、强化学习、机器人技术。
**阅读:**更好地理解进化和神经科学的科学发现,包括视觉系统、记忆和意识。
内容是:
这本散文集在萨克斯 2015 年去世前概述,探索了生物学、心理学和神经科学历史上许多相互关联的主题。我为我们这些构建复杂人工智能应用的人找到了无数的见解,包括对记忆可靠性的丰富讨论,动物王国中存在的各种视觉系统,以及认知速度差异带来的问题。萨克斯对包括达尔文和弗洛伊德在内的其他著名科学家的深思熟虑的讨论是亮点,并鼓励我更深入地挖掘他们与这位科学家的作品。萨克斯深入研究了作为历史人物的这些巨人以及他们的重要工作,从而对背后的科学和科学家有了更深入的了解。
虽然有些人喜欢保持他们的藏书整洁,但我却相反。我越喜欢这本书,它的磨损就越严重——我把边角折起来,写在页边空白处。《意识之河》是我图书馆里标记最多的书之一。
热门引用:
在通常情况下,视觉是无缝的,并且没有给出它所依赖的潜在过程的指示。它必须被分解,通过实验或在神经疾病中,以显示组成它的元素。在某些中毒或严重的偏头痛中所经历的闪烁、持续、时间模糊的影像,使人相信意识是由离散的时刻组成的。
不管是什么机制,离散的视觉画面或快照的融合是连续性的先决条件,是流动的、移动的意识。这种动态意识可能最早出现在 2 . 5 亿年前的爬行动物身上。两栖动物似乎不存在这样的意识流。例如,一只青蛙没有积极的注意力,也没有对事件的视觉跟踪。正如我们所知,青蛙没有视觉世界或视觉意识,只有一种纯粹的自动能力,如果有人进入它的视野,它就能识别出一个类似昆虫的物体,并伸出舌头作为回应。它不扫描周围环境,也不寻找猎物。
这本书给了我很多关于如何从机器学习系统设计的角度思考意识的见解,并给了我很多关于构建计算机视觉系统的最佳方式的新想法,这些系统随着时间的推移变得越来越聪明。
**下一步:**读完这本书后,我拿起了一本《把妻子错当成帽子的男人》,这是一本非常好的读物,尤其是如果你喜欢神经学案例研究的话。无线电实验室已经做了一些关于这些主题的优秀节目,包括许多专门关于萨克斯和他的作品的。还可以看看精彩的一集揭开 Bolero 关于一个患有奇怪疾病的艺术家和关于植物的奇怪意识的聪明植物。
2.科里·斯坦普逐字逐句地写道
**面向从事以下工作的数据科学家:**自然语言理解和对话界面。
**阅读:**对语言学有更深的理解,并对词典的创建有一个有趣的看法。
关于什么:
词典编纂者 Kory Stamper 向我们展示了在杰出的词典公司之一韦氏词典工作的情况,包括词典的历史以及社交媒体如何改变语言。这本书对斯坦普优雅的文笔特别过瘾;她显然有“语感”。
每一章都通过一个引人入胜的例子来探索词典学的一个新的维度:词的定义是如何被创造和改变的?单词是如何添加到词典中的?单词之间是如何联系的?意义是如何随着时间而变化的?但更广泛地说,斯坦普提出了关于语言本身的问题,比如:我们是如何理解意义的?这些讨论对于在任何处理非结构化语言数据的应用程序中工作的数据科学家来说都是最有用的。
自从读了这篇文章,发现一个新的词义就成了我的一个梦想。目前为止,没有运气。但我充满希望:这本书不仅让我对词义有了更好的理解,对如何解释单词嵌入有了新的视角,而且让我探索如何改进自然语言处理的方法。
PS。“不管不顾”绝对是一个词。
热门引用:
当你一整天都在仔细观察单词时,你会与它们建立起一种非常疏远和不自然的关系。我想象,这很像当医生:一个漂亮的人走进你的办公室,脱去他们所有的衣服,而你则全神贯注地盯着血压计。
一旦你把他们带到办公室,脱掉他们的衣服,所有的单词对词典编纂者来说都是一样的。粗鲁、粗俗、令人尴尬、淫秽或其他令人厌恶的词语被视为临床科学术语和其他普通词汇。需要一些时间来适应。
**经验教训:**这是我第一次进入语言学领域,鉴于我在自然语言处理方面的工作,它给了我许多关于如何设计我正在构建的系统的新想法。从词典学的角度理解单词非常有用。
**下一步:**由于路易斯·拉帕姆的世界及时播客,我发现了斯坦普的作品,尽管词典编纂不是播客的常见主题(它通常是政治和历史的同等融合),但这本季刊非常值得一读,尤其是最近的心态期。同样值得注意的是,《文学评论》最近一期的主题是理解。
3.玛丽亚·孔尼科娃的《信心游戏》
**数据科学家致力于:**预测人类行为。
**阅读:**深入了解人类行为以及我们在自我认知和决策中的偏见。
内容是:
Maria Konnikova 带我们穿越骗子艺术家的不可思议的世界,将科学研究与臭名昭著的骗子和欺诈以及他们周围的历史事件的丰富故事编织在一起。有些故事绝对令人震惊,比如一个男人扮演了几十种职业,包括在朝鲜战争期间给士兵做手术的海军外科医生。Konnikova 带我们经历了骗局的所有不同部分,如搭建、分解、发送和触摸。每一个都融入了不同的心理学。
我们大多数人都带着嘲弄和怀疑的混合情绪对待这场信任游戏;普遍的情绪类似于“你能相信他们会上当吗?”但在这里,Konnikova 巧妙地用最新的实验研究结果来羞辱我们,痛苦地解释了为什么我们这些认为自己永远不会爱上这种东西的人可能会爱上它。
这本书充满了围绕心理学研究的讨论。这对我们这些构建旨在预测人类行为的机器学习系统的人来说具有重大意义。它挑战了我们对决策的为什么的理解,尤其是当我们表现得不理性的时候。
热门引用:
这是崩溃的核心问题,在这个时刻,骗子艺术家看到了他可以带我们走多远…事情还没有完全崩溃-那将会完全失去我们,游戏将会过早结束。但是裂痕开始显现。我们损失了一些钱。有些事情没有按计划进行。一个事实似乎是错误的。一个图形被错误地标注。一个酒瓶就是“故障”。关键问题是:我们会注意到还是会加倍努力?
**经验教训:**虽然我们认为被欺骗的人是幼稚、愚蠢或容易受骗的,但 Konnikova 的书很好地证明了这种过度自信正是导致我们首先陷入这些欺骗的原因。毕竟,最好的骗局是目标甚至不知道自己被骗了。考虑到人类推理的缺陷,这本书为我们这些致力于理解和预测人类行为的人提供了很多东西。
下一步: Konnikova 也有一本即将出版的关于扑克的书,但是她开始赢得太多了,以至于她暂停了这个项目。所以,我拿起一本更老的经典,卡尼曼的思考快与慢 关于我们在判断中经常犯的错误,尤其是在概率和预测方面,同时我在等她的新书。
4.凯西·奥尼尔的《摧毁数学的武器》
**数据科学家致力于:**道德人工智能和透明度,可解释的人工智能,以及人类行为的预测。
**阅读:**举例说明当我们无法不带偏见地设计系统时会出现什么问题,以及它可能给我们的社会带来的危险。
内容是:
我们刚刚开始意识到有偏见的算法对我们社会的各个部分产生的许多负面影响,数据科学家凯西·奥尼尔的《数学毁灭武器》带我们了解了算法和数据分析产生不幸结果的各种例子。从掠夺性贷款和高不可攀的工作表现评分系统,到加剧不平等的预测性监管,我们许多人都没有意识到这项技术在我们的现代世界中有多普遍。更糟糕的是,这些系统中固有的反馈回路会产生严重的后果。奥尼尔带我们经历了许多人的生活,他们亲身受到这些数学毁灭武器(WMDs)的影响,她讲故事的天赋加强了她为这本书所做的娴熟的分析。
随着偏见成为目前机器学习中最重要的话题之一,并呼吁人工智能系统更加透明,任何正在大规模构建机器学习应用程序的人都会从阅读本书中受益。作为一名数据科学家,许多例子对我来说已经很熟悉了,但将它们集中在一个地方是一种很好的方式,可以从社会的角度看到我们将面临的巨大挑战。
热门引用:
正如许多大规模杀伤性武器(数学毁灭武器)一样,这个问题从一开始就存在,当时管理员建立了这个模型的两个目标。第一是提高效率,让机器处理大量繁重的工作。它会自动从 2000 份申请中筛选出 500 份,届时人类将接管漫长的面试过程。第二个目标是公平。电脑不会因为管理者的情绪或偏见,或者上议院议员和内阁大臣的紧急请求而动摇。在第一次自动筛选中,每个申请人都将按照相同的标准进行评判。
这些标准是什么?这看起来很简单。圣乔治已经有了前几年的大量放映记录。这项工作是教计算机系统如何复制人类一直遵循的相同程序。我相信你能猜到,这些输入是问题所在。计算机从人类那里学会了如何辨别,并以惊人的效率完成了这项工作。
**经验教训:**在野外释放算法有可能导致重大的社会和社会问题,我们需要做好准备来处理我们社会中的这些问题。数据科学家有责任成为这场对话的重要组成部分,这本书有助于构建我们需要进行的讨论。
**下一步:**其他几本书最近出版了,详细介绍了我们在一个算法做出重要决定的世界中面临的额外挑战,如萨菲亚·诺布尔的压迫算法 和维吉纳·欧班克斯的自动化不平等 。Joy Buolamwini 关于面部识别系统偏见的 TED 演讲也很值得一看。
5.尤瓦尔·诺亚·哈拉里的《德乌斯人》
**数据科学家研究:**初创公司和未来技术。
**阅读:**人类社会的历史视角,包括超人类主义、政治、技术进步,以及我们人类的未来。
内容是:
当哈拉里在 TED 2018 舞台上全息亮相时,我坐在他右边远处的观众席上。从这个角度,我可以看到薄玻璃屏幕显示哈拉里的数字化身。效果是戏剧性的——我们确实生活在未来。德乌斯人给我留下了类似的敬畏感。在书中,哈拉里向我们展示了一段从一个地方到另一个地方的旅程,讨论了许多有趣的关于智人的历史观点,以及我们是如何走到今天这一步的:人类是如何接管世界的?我们如何在其中找到意义?最重要的是,我们将何去何从?
《德乌斯人》是我在 2018 年读过的最好的书,无论什么主题,我对数据驱动世界的社会变化的理解都要好得多。哈拉里触及技术及其对社会的影响,将许多不同的世界事件、信仰体系、科学突破和历史事件联系起来。这是一个充满可能性的世界,也是一个对未来生命延长、冲突和技术挑战的伟大概述。任何从事前沿研究和人工智能系统部署的人都将从这本书中受益匪浅。
顶级报价:
科幻电影通常认为,为了达到并超越人类的智能,计算机必须发展意识。但是真正的科学讲述了一个不同的故事。可能有几种或替代的方式通向超智能,只是其中一些通过意识的海峡。几百万年来,有机进化一直沿着意识路线缓慢前行。无机计算机的进化可能会完全绕过这些狭窄的海峡,为超级智能开辟一条不同的、更快的道路。
这就提出了一个新颖的问题:智力和意识,两者哪个真正重要?只要它们是齐头并进的,辩论它们的相对价值对哲学家来说只是一种有趣的消遣。但在 21 世纪,这正成为一个紧迫的政治和经济问题。我们清醒地认识到,至少对军队和公司来说,答案很简单:智力是强制性的,但意识是可选的。
**经验教训:**正如他在他的 TED 演讲中提到的,记住为什么超人类主义中的一些观点很诱人,但也可能很危险,这一点极其重要。
**接下来:**看完这本书,我拿起他之前的一本书,智人,也是一本同样优秀的读物。哈拉里还有一本新书 21 世纪的 21 课,并在《纽约时报》上接受了一次精彩的采访,他在采访中讨论了人工智能,尤其是人工智能、武器化人工智能和移情作用对失业的影响。
最后的想法
无论你是职业生涯的早期还是行业老手,形成丰富的知识可以带来巨大的新机会。数据科学在我们这个世界的兴起有可能在许多不同的领域释放大量新的机会,只要我们关注这些领域正在发生的事情。
我希望这些选择能帮助你以不同的方式思考你的数据科学项目,并激发新的方法来应对数据科学中的挑战,就像我一样。
关于作者:
Briana Brownell 是一名从数据科学家转型而来的科技企业家、未来学家和创新者。目前,Briana 是 PureStrategy.ai 的创始人兼首席执行官,pure strategy . AI 是一家技术公司,旨在创建人工智能同事并将其部署到企业中,以便员工可以更快地做出数据驱动的决策。作为一名频繁的主题演讲人、专家和作家,她以让非专家也能接触到高度技术性的话题而闻名,同时也领导了一场关于人工智能背后的科学的深思熟虑的技术讨论。
数据科学家:寻找他们在组织结构图中的位置
数据科学家并不是一个从零开始定义的新形象。长期以来,公司一直将深度数据分析作为一种有价值的工具,来帮助实现或超越他们的目标。现在发生变化的是这种分析的维度,因为更大数量的数据需要不同的方法,无论是在程序上还是在分析的目的上。
许多专家强调重新发现数据的想法,或者更确切地说,发现它对公司的价值贡献。过去管理数据、瞄准客户或检测营业额最高的产品的人,显然为公司增加了价值。但是数据科学家的角色远不止于此。
数据已经在内部了
没有以数据为中心的企业文化的公司的主要问题是,它们通常以分散和无组织的方式运营。由于这种孤立的管理,每个公司部门都在任何给定的时间做出它认为最合适的技术相关决策。
现在是处理数据的时候了,专家们遇到了障碍和不兼容,这极大地复杂化了他们的工作。在拥有庞大历史资料库的机构中,对数据文件进行分组和处理是一项巨大的工作,但一旦这条自学之路完成,这项工作就会转化为内部流程、人员管理和/或客户服务的改进。
与近年来的情况相比,不同之处在于数据分析专家现在拥有更加强大和有效的技术资源,允许他们从信息中提取更大的价值。计算成本更低,数据可用性更高,两者之间的连通性更强,因此这增加了发现模式或潜在案例推理的机会,有助于更新使用数据来改善管理的做法。
在认可数据科学家的地位的过程中,提到他们职业认可的一个根本性进步是至关重要的:他们承担了改善公司业绩的重要责任。他们的任务不再局限于指导或建议其他部门的行动,也不再是处理数据,然后提交给负责决策的经理。数据科学家的工作最终会带来基于数据的全面检查和翻译的新商业机会。
公司准备好倾听数据科学家的意见了吗?
在许多情况下,数据科学家面临着另一场关键的战斗,以确保他们在公司的新地位得到认可:克服变革的阻力。数字惯性正在推动许多公司走向数据文化,但在更传统或更大的组织中,数字本地人往往不是管理的一部分,这可能成为一个长期的昂贵旅程,或短期的创伤。
公司迈向大数据之旅的第一站必须得到高级管理层的坚定支持。涉及的部门非常多(IT、商业智能、电子商务、营销等。),而且数据的流动、共享和合理使用需要如此多的协调,只有从高层提供资源,才有可能发生变化。没有敏捷和合作,就不会有结果。
在倾向于便利或抵制变革的公司里,数据科学家甚至可能被视为不速之客,向专家讲授如何经营企业。很久以前就制定了游戏规则的高管们对数学家很警惕,他似乎在使用一种与公司无关的语言。
这是一个文化问题:数据科学家的建议背后的科学基础必须利用传统的决策过程,基于经验或其他类型的指标,有时就像电子表格一样简单。甚至可能有人会忽略数据科学家的贡献,因为他们可能暗示着对改进结果的承诺:满足新的 KPI 可能是一个痛苦的目标。
这种现象在包括初创公司在内的各种组织中都存在,因为最终每个人都倾向于保护自己的团队和项目。这就是为什么,我们将在后面看到,熵和沟通是数据科学家的两个重要的非技术素质。
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 本文是研究“数据科学家:他们是谁?他们是做什么的?它们是如何工作的?”,很快从叛逆的思维中走出来。
数据搜集:如何利用它为您的电子商务业务?
在这个残酷竞争的世界里,每个商业企业都在试图超越对方。
“我在哪里可以获得新的线索?”这个问题可能会让其他所有企业家感到担忧。在一个一切都以客户为中心的行业,竞争对手分析不是一种选择,而是一种需要。在本文中,我们将阐明数据收集在竞争对手分析中所扮演的角色。这也是为什么竞争对手分析不仅对于预测未来,而且对于深入研究和加强现在都是必不可少的。
我们可能不需要提供网络上现成可用数据的数量统计,但是,我们会告诉你为什么访问如此多的数据可以在你所属的利基领域提供竞争优势。开始电子商务审计最简单的方法是从电子商务网站或网络抓取中提取数据。网络抓取对于电子商务企业来说正慢慢变得至关重要,它可以帮助企业获得丰富的洞察力,帮助他们制定与竞争对手竞争的策略,并在此过程中节省时间和成本。让我们看看搜集公开可用的数据将如何帮助分析和制定您在市场中的位置。
竞争对手分析和竞争映射
SWOT——优势、劣势、机会、威胁——是每个企业都在学习的东西,但不知何故在实施的时候有点落后。从开发定制的网络抓取解决方案开始,从电子商务网站中提取数据进行 SWOT 分析。它为电子商务商家提供了一个具体和务实的看法,它的立场在其利基。这将有助于提供一个更清晰的市场状况,并提供洞察力,借此你可以减轻你的弱点,并建立你的优势,以制定一个战略,可以把你的业务提升到一个新的水平。
实时跟踪竞争对手的价格
当今的全球电子商务市场由数百万个商店组成,并且随着其他业务的出现,这个数字每天都在增长。在这种情况下,手动跟踪来评估和优化产品价格,w.r.t 竞争对手既不实际也不可行。但是实时提取电子商务网络数据可能吗?绝对的!!使用动态网络抓取构建竞争对手价格跟踪软件或 chrome 扩展,通过提供实时动态定价策略,最大限度地减少监控竞争对手价格的时间。
一旦你开始实时价格跟踪,你可以看到你的竞争对手是如何随着时间的推移改变他们的价格,了解趋势并制定策略,这将导致最佳的价格评估,并让你在你的竞争对手的定价之上。通过投资实时价格跟踪网络抓取解决方案,您还可以了解产品的生命周期、季节性价格变化、折扣和促销策略,并做出准确的决策,从而提高利润、降低成本,同时节省宝贵的时间。
情感分析
“让客户满意是最好的商业策略”。现在,对于一个产品的成功,什么是最重要的?客户接受度和忠诚度。这实际上是一个事实,情感分析实际上可以驱动任何电子商务网站。每天,数百万用户聚集在不同的社交平台上,表达他们对各种产品和服务的看法。这种数据就是我们所说的情绪数据,企业可以利用这种情绪数据来改善他们的电子商务战略。这种随时可用的社交数据可以被收集并用于向电子商务商家提供关于客户痛点、新市场可能性的有价值的信息,以便在它的帮助下采取可操作的决策。这也可以用来迎合失望的顾客,向他们推销自己的产品和服务。
预测分析
你需要大量的数据来建模,以预测未来的电子商务市场将会是什么样子,以及它可能会遵循什么样的特定趋势。预测分析有助于电子商务商家了解客户想要什么以及他们将为此支付多少钱,制定有针对性的建议和促销活动,改善供应链管理,实现货币化并获得更多利润。借助数据搜集,您可以获得数百万的数据,然后使用预测分析来分析过去和现在的趋势,以预测未来的趋势,并利用这一巨大的竞争优势来最大限度地提高销售额。
临别赠言
有一个数据的金矿,可以揭示你的竞争对手到底在做什么;你只需要一头扎进去。借助定制数据收集软件开发,轻松实现整个流程的自动化,以提高您自己的电子商务商店的绩效,并最大限度地提高客户参与度。凭借极具价值的洞察力,您可以轻松跟踪行业的现有趋势并预测未来趋势,通过竞争对手分析解决大多数业务问题,并帮助您在当前水平上竞争。
最初发布于:binary 乡亲
数据叙事:提高洞察力到行动的转换,以产生更大的现实世界影响
Photo by Alex Siale on Unsplash
数据科学结果和现实世界影响之间的差距
数据科学家有两种类型:B 型和 A 型。B 型用于构建,A 型用于分析。对应这两种类型,在数据科学项目中,我最担心两种潜在的结果。第一,模型不能进入生产系统。第二,洞察力不会导致行动。这两个令人沮丧的结果发生在从数据科学到其他领域的过渡中:一个是从数据科学到软件工程,另一个是从数据科学到业务执行。这两个转变是创造现实世界影响的关键途径,因此在这些转变中取得成功的风险很高。在移交过程中,软件工程师可能会说模型不符合他们的工程标准,业务合作伙伴可能会声称洞察很有趣,但没有采取任何行动。这些“因果关系”阻止了数据科学的成果重见天日,并且发生在数据科学家的身上([链接](http://There are two types of data scientists: type A and type B. Type A is for analysis and type B is for building. A Quora answer from Michael Hochster illustrates these two types in details. Whether you are a type A who supports decision makers with data analysis or type B who builds models to make products smarter, you have an inspiration to not only create data science solutions but also to drive results in practice. A result could be a business decision or a code commit into production. The last step in data science project life cycle is , I worry about other challenges less. With the right setup, it is more or less straightforward to acquire data, clean data, explore data, learn from data, engineer features, create visualizations, build models and conclude results. These items are well covered by learning materials and are the familiar challenges to data scientists.))。
这两个结果比其他典型的数据科学挑战更令人担忧,因为我们无法控制移交后数据科学结果的命运。尽管我们的控制非常有限,但我们应该采取行动来影响这两种结果。模型部署在不同的组织中有不同的含义,但是人们一致认为编写生产级代码有助于数据科学家进行部署。Trey Causey 在他的博客这里中列出了数据科学家在编写生产级代码时的一些首要任务。简而言之,使你的代码模块化,创建文档,使用版本控制,包括日志记录和设置测试。许多数据科学家采用自顶向下的命令式风格编码;这种风格给与软件工程师合作制造了障碍。为了使部署工作顺利进行,请编写生产级代码。
将洞察转化为行动,就像将“心智代码”部署到“社交机器”中。如果数据科学家可以通过编写生产级代码来改进模型部署,那么数据科学家可以做些什么来改进 insight 的部署呢?强大的数据叙事是一个关键的解决方案。来自数据的引人注目的故事可以给观众留下持久的印象并激励行动。
数据讲故事听起来很棒,但却是一个模糊的概念。为了真正深入了解数据讲故事,最近我回顾了科尔·克纳弗里克的《用数据讲故事的 T2》和内森·尤的《有意义的可视化 T4》。这两本书让我对数据讲故事有了新的认识。基于这两本书和我的经验,我想向你展示优化洞察力到行动转换的策略。
概述:
- 将洞察力放在展示层级的顶部
- 在视觉层次结构的顶端做出大胆的声明
- 争取合理的见解-行动转化率
1.将洞察力放在展示层级的顶部
几个月前,我知道了一种展示数据科学成果的方法。我认为这是最好的方法,因为无数的科学论文选择了这种方法。为了以这种方式展示我的数据科学成果,我会从背景开始,谈论数据源,使用图形和表格来突出数据属性,谈论模型构建,讨论建模结果,最后总结洞察力(在适当的时候呼吁采取行动)。在这个流程中,洞察力排在最后,因为对数据和模型的基本解释为观众对洞察力的真正理解做好了准备。这个流程对我来说很好,直到我开始向业务合作伙伴呈现数据结果,这些业务合作伙伴是业务执行方面的老手,但却是数据科学的局外人(不幸的是,今天的大多数决策者都有这种情况)。
我的商业伙伴对我的数据探索不太感兴趣,也对建模细节不感兴趣。他们对这些见解感兴趣,并建议我将数据细节移到附录中。起初,我对他们对科学推理过程的轻微关注感到惊讶,在我采纳了他们的建议后,我发现我的数据故事更快地引起了他们的共鸣。隐藏定量推理过程受到欢迎。更进一步,我开始回溯任何与我的见解间接相关的东西。现在我讲故事更多的是围绕结论,而不是围绕数据建模过程。Josh Bernoff 在他的书中的一段话很好地总结了这一观察:
你必须颠倒你在学校里所学的推理和写作。你学会了从热身开始,然后进行推理,从基本原则出发,得出结论。商业读者没有时间热身,也缺乏耐心进行深入的推理,除非他们事先知道回报。所以从大胆的陈述和结论开始。然后继续你的推理。这样,那些没有阅读整个文档的读者仍然会从阅读你的结论中受益。
我仍然会和我的技术同事说行话,但是,决策层级越高,我就越需要像 Josh 建议的那样颠倒我的故事流程。另一个职业,顾问,有着支持企业高管决策的悠久历史。看起来顾问们很久以前就已经知道了前置洞察的必要性。我看到一篇由家庭语音银行顾问撰写的研究论文。这篇论文的流程是久经考验的讲故事的方式。
Table of contents in a research paper from an advisory firm
正如您在上面的目录中看到的,顾问将建议放在执行摘要之后,将方法放在最后一节。介于两者之间的所有东西都是带有行动含义的大胆声明。在本文中,智能音箱银行的需求较低,因此顾问建议银行谨慎从事。这种方法在咨询师中很常见。
无论是以写作的形式还是以演讲的形式,紧接在开头之后的位置是表达层次的顶端。为了有助于洞察到行动的对话,洞察应该放在首位,而不是其他。
2.在视觉层级的顶端做出大胆的声明
数据可视化是数据故事的决定性时刻。它们是表格和图表,由视觉提示、坐标系统、比例尺、周围文字等组成。数据可视化既是一种交流信息的伟大方式,“一张图片胜过千言万语”,也是一种伟大的分析方式,“一张图片的最大价值在于它迫使我们注意到我们从未期望看到的东西”,John Tukey 在探索性数据分析中说道。考虑到数据可视化的有用性,我们可以通过更好地使用数据可视化来显著改进数据讲述。
在过去,对我来说,数据可视化优化就是让图形更有表现力。我会浏览我起草的表格和图表,找出有趣的,添加缺失的标题、图例和颜色,最后把它们放到我的演示文稿中。这种方法一直工作得很好,直到最近我的合作者在信息就在他们面前的时候询问信息。我现在意识到,我的图表显示了信息,但没有指示应该看哪里。
在用数据讲故事和有意义的可视化中,利用预先注意属性创建视觉层次的概念帮助我看到了数据可视化真正令人信服的力量。数据可视化不仅仅是使用正确的格式显示数据,还包括使用隐含的视觉指令来指导受众如何轻松处理给定的信息,并在视觉层次结构的顶部提供洞察力。我将用两个案例来说明。
这是科尔·克纳弗里克的一个案例研究。下面的第一张图是一个典型的意大利面条图。意大利面图在时间序列研究、重复测量研究等等中被大量使用。下图有正确的标题、轴和图例。从技术标准来看,这是一幅好图。然而,读者很难知道它试图说什么。
这个改进的版本使用了预先注意属性。下图用粗体蓝色突出显示了最大的增长趋势。所有其他趋势都用灰色作为背景。读者现在更容易理解这种可视化,因为读者通过更好地定义的视觉层次结构得到指导。
在我采用这种做法后,当我使用预先注意属性来突出我想说的话时,我立即看到了来自我的观众的更快、更强和更积极的反应。视觉层次真的很管用。
在另一个案例研究中,Cole Knaflic 展示了头衔的强大用途。在下图中,标题不是典型的“一段时间内的票据量”,它是描述性的,而是被动的。标题是“请批准雇用 2 名全职员工”,呼吁采取行动。这一行动号召有助于观众从趋势线中发现缺少 2 名员工会导致绩效差距。
我总是以一种描述性的方式使用标题:“X 和 Y 的趋势”,“A 和 B 的分布”等等。现在,我的标题要么是行动呼吁,要么是问题,要么是见解。标题是数据可视化中最重要的不动产,富有表现力的标题确实有助于提升我们的洞察力。
由于科尔和 T2 内森的功劳,我真诚地推荐他们的书,他们有许多其他可能对你有用的技巧。
3.争取合理的见解-行动转化率
数据故事不是一次性表演。你会被要求一遍又一遍地向不同的利益相关者讲述同一个故事,尤其是当你的洞察力成功地引起你最初的听众的共鸣时。这个过程就像一场路演,你推销你的数据故事,以获得尽可能多的认同。有了足够的认同,人们就会采取行动:以不同的方式瞄准销售潜力,调整做法以提高运营效率,关闭不必要的产品功能,推出新流程以防范风险,等等。正如一句中国谚语所说,“牵一发而动全身”,将一个见解转化为一个行动会对本组织的许多部门产生连锁反应,这自然会引起来自许多方面的审视。这些审查压力测试你的故事。
带着适度的怀疑,人们可以质疑你的数据质量、假设和建模方法。如果人们看到基础数据中的错误,就会削弱你的故事。从不同的角度来看,人们可能会问你范围之外的问题,这会导致额外的分析迭代。即使你的数据故事被完全接受,人们可能会要求你的数据,图表和模型进行带回家的分析;人们可能会在其他会议上要你的图表。这些需求驱使你把你的故事记录下来,便于阅读,模块化和互动。如果你通过这些压力测试不断改进你的故事,你的故事会变得更加完美,更接近一个行动。
路演可能会成功,也可能会失败,或者介于两者之间。A 型数据科学家需要对从洞察到行动的对话有一个合理的预期。如今,每个企业领导者都高度评价数据驱动的决策,让数据解决方案成为商业世界中的英雄极光,但这一趋势并不意味着决策将只由数据驱动。决策仍然是科学和艺术的复杂混合体,是数据逻辑和商业逻辑的混合体。在现实世界中,高管们利用多种来源的定性和定量情报来做出决策。一项数据科学分析直接决定一项主要业务活动的想法并没有错,但却有误导性。过去,在这种想法的驱使下,如果分析最终导致了行动,我会认为它是成功的。我看到了这样的成功,但是我看到了更多的案例,在这些案例中,洞察力被接受了,但是没有被转化。随着对复杂商业世界的进一步观察,我现在得出结论,将洞察力转化为行动部分取决于洞察力有多强,A 型数据科学家的成功不应该由他们的分析所促成的商业行动(和商业结果)来判断。放下数据英雄的幻想,承认洞察力的实际局限性,有助于我更好地专注于自己的工作,而不是被超出我控制范围的事情分散注意力。
最后的想法
洞察力是数据科学工作的一个重要成果。我们在数据中寻找洞察力,因为我们希望洞察力能帮助我们让这个世界变得更美好。将洞察力转化为行动是实现有价值的洞察力的方法。因为数据科学家通常会将洞察力交给其他专业人员来采取行动,所以数据科学家应该优化他们的数据叙事,以保持洞察力到行动的成功转换。以合理的洞察力到行动的转化率为目标,数据科学家可以通过将洞察力放在呈现层次的顶部并在视觉层次的顶部做出大胆的陈述来讲述更强有力的数据故事。
一如既往,我欢迎反馈,并且可以联系到我 @yuzhouyz
使用 BigQuery 的数据工作室:2018 年最佳实践
多年来,我一直使用 BigQuery 和公共数据集来发布有趣的文章——现在有了 Data Studio,我可以让它们在媒体上互动。在这里找到我们迄今为止开发的使 BigQuery 和 Data Studio 协同工作的最佳实践。
【2019 重要更新:BigQuery 和 Data Studio 之间要使用 BI 引擎
**[## BigQuery BI 引擎介绍| BI 引擎|谷歌云
测试版该产品或功能处于预发布状态,可能会有变化或支持有限。有关更多信息…
cloud.google.com](https://cloud.google.com/bi-engine/docs/overview)**
谷歌数据工作室完全免费,你也可以使用它。将它与许多不同的来源联系起来真的很容易,包括 BigQuery。这就是我现在所做的:我用 BigQuery 分析数据,我把结果连接到 Data Studio,我让我的仪表板交互,我在媒体上发布它们。
Interactive dashboard — click to play with it: World Cup goals
但是也有一些挑战。如您所知,BigQuery 允许您在几秒钟内分析大量数据——并且它只对您运行的每个查询收费。我们甚至有一个免费的月层用于查询,所以你可能最终什么也不用付。但是如果您将 BigQuery 连接到一个流行的仪表板,那么您的用户最终可能会代表您生成大量的查询——这意味着您最终会有一个巨大的 BigQuery 账单。我们不想那样。
在 Google Next 18 上,Data Studio 的开发者代言人— Minhaz Kazi —和我做了一个关于最佳实践的演讲,我们已经开发了这些最佳实践来让我们最喜欢的产品协同工作。
例如,避免将新查询从 Data Studio 推入 BigQuery 的最简单方法是将查询结果具体化到 Data Studio 中。没错,一旦有了想要可视化的 BigQuery 结果或表,就可以使用 extract 按钮来实现,Data Studio 将为您提供一种简单的方法来保存和刷新这些数据的副本。
但目前该功能仍在开发中,它将受到某些限制——所以我们还分享了一些其他选项,以在 Data Studio 和 BigQuery 之间创建一个廉价的层。
例如,你可以使用 Google Apps 脚本安排查询,并将结果推送到 Google 云存储中。csv
文件。然后,您可以将 Data Studio 连接到该文件,该文件将根据您的计划进行刷新,您的用户将能够快速浏览结果。
Predicting when will Stack Overflow reply
但这仅在结果达到一定规模时有效。在其他情况下,使用支持按键查找的数据库可能更有意义。一旦您知道您的可视化只需要键查找来检索数据,而不是在 BigQuery 中扫描一个表,您就可以将 Data Studio 连接到一个传统的数据库,只从其中获取单个行。在这种情况下,您可以将 BigQuery 结果导出到托管在云 SQL 上的 MySQL 数据库,添加所需的索引,并快速获得便宜的结果。
Reddit kept getting slower throughout 2018. Source: Crux.
但是有时您可能有更复杂的需求——例如,当您想让一个数据源对许多用户可用,并让他们构建自己的自定义可视化时。在这种情况下,您可以使用 Apps 脚本创建一个 Data Studio 社区连接器,并在其中设计您自己的缓存逻辑。
在完整的演讲中,您可以从 Minhaz 的例子中看到这一点——他创建了一个任何人只需点击几次就可以使用的连接器,他们获得了一个自定义和可定制的可视化——在 BigQuery 中托管了新数据——无需任何编码——SQL 或其他。
总的来说,如果您想连接 BigQuery 和 Data Studio 来创建一个交互式仪表板,并且您想让每个人都可以使用这个仪表板,请记住考虑您想在 BigQuery 和 Data Studio 之间有一个什么样的层。请继续关注,因为在谷歌,我们总是在思考如何让这种联系更加强大和令人敬畏。
重要 2019 更新:BigQuery 和 Data Studio 之间要使用 BI 引擎
数据到业务桥梁模型:提取、应用和跟踪可行的见解,以应对您的业务发展挑战
几个月前, SAP 表示数字化转型强调并关注众多主题&公司面临的挑战:收集所有公司内部信息&整合来自外部来源的数据,这些数据一旦经过处理&分析,就可以改变现有的工作流程。积极使用数据的结果是商业模式的转变&决策。
那是为了理论和预期的大局。现实不幸要复杂得多。我有机会为一家公司工作,该公司多年来在收购和实施多渠道方面支持了 100 多家化工行业的新业务开发组织,其中 90%的公司起点是相同的:这些公司的结构都不能处理&利用其数据——无论这些数据来自传统渠道还是新渠道——包括数字流。
理解这种说法的一个关键是不规则&无组织地使用 CRM 工具。大多数时候,这样的系统被用来存储原始数据,但不经常被利用。销售人员通常认为 CRM 工具是一个存储设备,用来保存他们的电话报告或销售过程中获取的原始信息。这是一个很好的做法,但不够有效——因为他们添加了自己的措辞,或者可能会忘记一些信息。因此,非结构化数据很难分析和提取相关的见解。
但是,销售人员并不是唯一应该受到责备的人。**该数据结构必须来自产品&业务开发中涉及的不同部门的具体要求。销售人员应该从其他人那里知道他们需要收集什么类型的数据。而这些部门应该明白如何提取这些信息的价值。**如果很好地识别和设计了价值,它会很快转化为洞察力,帮助采取或支持战略决策或改进业务流程。
随着数字化转型和“数据使用”的觉醒在我们身边发生,你可能已经听到过这样的说法。数百篇文章声称需要采用数字结构和自动化数据提取模型,但最终,让我们面对现实吧。采用“随时可用”的解决方案是必须的,但这需要巨额投资和大量时间来唤醒和教育部门意识,在组织中建立解决方案基础设施,并使其在日常工作中发挥作用。此外,一种风险似乎切断了大多数跨部门的互动,而这种互动让你的见解变得有价值,让你的组织有一个持续学习的环境。另一方面,仅仅依靠你的“上帝的感觉”或你的业务开发人员或部门变得越来越不适应这个世界需要来自服务于整个组织的市场的结构化洞察力,作为学习机器(而不仅仅是一个人)和所需业务决策的燃料,例如与弱信号识别或蓝海存在证据相关的有争议的明智之举。
今天,我在这里提出的是一个折衷方案,**一种从结构化数据集和跨部门交换中提取、证明、应用和跟踪可行见解的方法,而无需投资于众多组织无法实现的全方位解决方案。**它是基于我在过去五年中观察到的情况,即化学行业中超过 **30 家 NBD 组织应用的解决方案摘要。**因此,要实现这一目标并在您的组织内产生相应的收益,您需要构建我所说的“数据到业务的桥梁”。基于四大支柱及其相关关键行动的简单“协调&行动”概念。请在下面找到它的简化结构:
除了这个模型之外,我还在这里提供了一种方法来应用强有力的原则,这些原则每天都在滋养你的组织:生长细胞&“可食用的”燃料。人类交互并协作学习&他们可以理解和利用的结构化数据。由于这两者和我提供的 D2B 桥指导,您的组织将能够识别和实施可操作的见解,这些见解将积极影响您的整体业务增长和组织流程。此外,你的组织将自己建造一台学习机器,每个人都将从中受益。由某人的神的感觉运行的行动现在看来是过时的。当然,独自一人,我们走得更快。一起,我们走得更远。
对于可能出现的合理问题——“它背后的具体商业价值是什么?”—这 5 年的经验告诉我,建造这座桥梁来填补空白(并实施正确的思维、方法、流程和工具)的公司受益于以下结果:
将潜在客户转化为销售额的机会更大&销售人员的关注度更高
加快将前景转化为销售额的速度
期房结算营销策略
更深入的市场理解
更快的响应&更高效率的技术支持
潜在客户的项目获得技术成功的几率更高
对市场挑战的技术反应更强
加速&相关应用研究
我建议你下载整篇文章(最后有链接),根据我在过去五年中观察到的情况,共同发展这四个支柱。最后,我建议你做一个简短的练习,来评估你提取和利用数据为你的新业务发展战略服务的能力。
感谢您的关注。我欢迎你的任何评论,也非常欢迎你想和我开始的任何讨论。
马修·里奥特
非私有互联网中的数据透明
信息时代彻底改变了我们互动、交流和被感知的方式。在美国,大约 90%的人口都在互联网上,使用脸书和谷歌来与高中朋友联系并回答他们的问题。谷歌等公司不断收集用户搜索习惯和喜好的数据,以便提供更个性化的结果,并改善他们的公司。
数据收集和出售这些个人数据最近一直是一个有争议的话题,主要是由于脸书和剑桥分析公司的丑闻。在 2017 年的热门科幻电影《圆圈》中,主角梅在一家与谷歌极其相似的公司找到了一份工作,名为“圆圈”。该公司创建了一个类似于脸书的名为“真实的你”的社交网络,并不断创造围绕收集大量数据的新软件和产品,因为“知道是好的;知无不言,言无不尽。”随着电影接近尾声,圈子知道任何人的一切,可以在 20 分钟内追踪到一个人。虽然被大大夸大了,但这显示了不当使用数据可能导致的潜在后果,并引发了一个问题:我们是否应该允许访问人们的私人数据,以改善我们使用的服务的个性化,甚至允许访问政府,以增加国家安全?正确使用数据可以极大地改善产品并使我们的生活更加轻松,但是,作为消费者,我们有权知道我们的信息是如何被收集和使用的。
每次我们注册一个新的网络服务,我们必须接受一个条款和条件合同。这份协议充满了法律术语,对普通消费者来说非常难懂,需要修改以便更容易阅读和理解。在一项由乔纳森·奥巴进行、NPR 报道的研究中,研究人员创建了一个虚拟的社交网站,并为其编写了条款和条件。所有的信息都会被传递给国家安全局,你必须把你的第一个孩子交给公司。500 名参与者中只有 1 人表达了对 NSA 的担忧,近 98%的参与者表示他们甚至没有注意到第一胎条款。实际上,没有人阅读条款和条件(本研究中有 26%的人浏览了文档,其余的人根本没有阅读),这部分是由于它们的长度,根据 Obar 的说法,“普通用户每天需要花费 40 分钟来阅读所有的隐私和服务条款”,但在很大程度上也是由于文本的可读性。事实上, 2014 年的一项调查发现, 52%的互联网用户错误地认为“当公司发布隐私政策时,它确保了公司对其收集的所有用户信息保密”。起初,这是令人惊讶的,但仔细想想,许多条款和条件合同可读性差,导致对公司可以用你的信息做什么的严重误解。为了衡量条款和条件协议有多严格,我计算了苹果合同的 SMOG(一个常用的公式,用来计算理解文本需要什么样的教育水平)分数,该合同的分数为 14 年教育。这意味着你至少需要在大学二年级才能完全理解当你注册苹果产品时你所同意的。孩子们获得第一个移动设备的平均年龄是 12.1 岁,他们不可能接受足够的教育来正确理解他们经常盲目同意的东西。
加拿大等国家和欧盟最近通过了通用数据保护条例(GDPR)立法,正在采取措施改善条款和条件以及数据透明度。加拿大有个人信息保护和电子文档法案 (PIPEDA),该法案侧重于让公司对个人数据使用管理负责,限制收集和使用、准确性以及少数人对个人数据的访问。GDPR 于 2018 年 4 月中旬刚刚颁布成为法律,并将于 2018 年 5 月 25 日适用。这项法律旨在通过要求具体的数据同意和仔细规范公司商品化和出售个人数据,将数据还给消费者。根据《T2 哈佛商业评论》的一篇文章,25%的人不知道公司可以收集他们的位置数据。然而,通过颁布 PIPEDA 和 GDPR 等法律,政府在数据透明度方面迈出了一大步,更加公开他们收集的数据以及他们如何使用这些数据,并允许消费者查看他们收集的数据。最终,诸如此类的法律将允许消费者更加了解他们个人数据的范围。
根据 T4 外交关系委员会的文章,美国大约有 286,942,362 名网民
“美国缺乏单一、全面的联邦法律来规范个人信息的收集和使用。相反,政府通过只监管某些部门来处理隐私和安全问题,这[反过来造成]重叠和矛盾的保护"。
最近的 GDPR 法律是美国迄今为止最全面的数据保护,而且是一部欧洲法律!GDPR 正在改变许多美国公司处理客户数据的方式,因为 Snapchat、脸书和谷歌等公司也在欧洲开展业务。这促使许多公司根据新法律修改条款和条件。事实上,在过去的一周里,我每天至少会收到一封电子邮件,通知我某家公司根据 GDPR 规则在数据透明度和使用方面所做的改变。欧洲法律对美国公司数据标准拥有更多控制权的事实是荒谬的,应该(但很可能不会)促使国会通过一项法律。在一项潜在的法案通过之前,它必须通过公共议程引起注意,在数据透明度问题上,这似乎很难做到。2015 年,几乎的美国人不愿意与企业分享他们的数据,因为他们想维护自己的隐私,并且“93%的成年人表示,控制谁可以获得他们的信息很重要”。然而,人们对消费者数据的收集和使用方式存在严重误解。虽然大多数人认为公司正在收集你的数据,不超过 25%的人知道搜索历史、通信历史和 IP 地址是专门收集的。这是一个挑战,大多数消费者并不知道他们收集的数据实际上有多隐私。例如,在 2015 年年中,85%的美国人表示他们信任信用卡公司的个人数据,然而根据 ID Theft Center 2015 年的报告,2015 年在银行、信贷和金融领域发生了 71 起数据泄露事件。普通美国消费者不知道他们自己的数据有多大,也不知道这些数据是如何被使用的,更不用说这些数据被滥用了。这是一个问题,因为为了恰当地规范大公司对高度敏感的个人数据的使用,数据透明是必要的,然而许多美国人并不认为这是一个问题。例如,在 FCC(监管互联网)的网站上,你可以查看消费者提交的所有投诉,数据隐私甚至没有排在前 5 位,它排在不受欢迎的电话和电话营销之后。显然,这在美国不是一个大问题,这主要是因为消费者不知道该行业的不良做法。
美国数据隐私的现状是极度封闭的,并且将会持续下去,直到大多数消费者对此有所表示。条款和条件协议变得越来越难以理解,尽管它们已经更新以符合新的数据监管法律。总体而言,消费者对他们的数据是如何被收集和使用的一无所知,甚至不知道所收集的关于他们的基本信息类型。随着公司及其软件变得更加侵入性(特别是随着人工智能和机器学习的进步),个人数据隐私将成为一个主要问题。然而,如果没有全国性的行动号召,什么也做不了,这些大公司拥有巨大的游说力量,如果没有明显的反弹,他们将继续不当使用个人数据。
从机器学习的角度看数据类型,并附有示例
几乎任何东西都可以变成数据。建立对不同数据类型的深刻理解是对机器学习模型进行探索性数据分析(EDA)和特征工程的重要前提。您还需要转换一些变量的数据类型,以便在数据可视化和讲故事中为可视编码做出适当的选择。
从机器学习的角度来看,大多数数据可以分为 4 种基本类型:数值数据、分类数据、时间序列数据和文本。
Data Types From A Machine Learning Perspective
数据
数字数据是数据点是精确数字的任何数据。统计学家也可以称数字数据为定量数据。这些数据既可以作为房价等衡量指标,也可以作为统计数据,比如洛杉矶的住宅数量或去年售出的房屋数量。
数字数据可以用连续或离散数据来表征。连续数据可以采用某个范围内的任何值,而离散数据具有不同的值。
Numerical Data
例如,学习 Python 课程的学生人数将是一个离散的数据集。只能有离散的整数值,如 10、25 或 33。一个班级不能有 12.75 名注册学生。一个学生要么去上课,要么不去。另一方面,连续数据是可以落在一个范围内任何地方的数字。比如一个学生的平均分是 88.25,介于 0 到 100 之间。
这里的要点是数字数据没有及时排序。它们只是我们收集的数字。
分类数据
分类数据表示特征,例如曲棍球运动员的位置、球队、家乡。分类数据可以采用数值。例如,也许我们会用 1 代表红色,用 2 代表蓝色。但是这些数字没有数学意义。也就是不能相加,也不能取平均值。
在超级分类的上下文中,分类数据将是类标签。这也类似于一个人是男是女,或者财产是住宅还是商业。
还有一种叫做顺序数据的东西,从某种意义上说,它是数字数据和分类数据的混合。在顺序数据中,数据仍然属于不同的类别,但是这些类别是以某种特定的方式排序的。一个例子是等级难度,比如初级、中级和高级。这三种类型的职业是我们给职业贴标签的一种方式,它们在难度增加时有一个自然的顺序。
另一个例子是,我们只是获取定量数据,并将其分组,因此我们有其他类型数据的箱或类别。
Ordinal Data
出于绘图目的,序数数据的处理方式与分类数据非常相似。但是组通常是从最低到最高排序的,这样我们可以保持这种排序。
时序数据
时间序列数据是在一段时间内定期收集的一系列数字。这非常重要,尤其是在金融这样的特殊领域。时间序列数据附有一个时间值,所以这可能是一个类似日期或时间戳的东西,您可以从中寻找时间趋势。
例如,我们可以测量多年来房屋销售的平均数。时间序列数据和数值数据的区别在于,时间序列数据并不是有一堆没有任何时间顺序的数值,而是有一些隐含的顺序。收集了第一个数据点和最后一个数据点。
CREA
文本
文本数据基本上只是文字。很多时候,你对文本做的第一件事就是用一些有趣的函数把它变成数字,比如单词袋公式。
从机器学习的角度来看,这是四种类型的数据。根据具体的数据类型,这可能会对可用于特征工程和建模的算法类型或可向其提出的问题类型产生一些影响。
如果你有任何问题或意见,请告诉我。以后想写一篇关于基于不同数据类型的特征工程的文章。感谢您的阅读。
报名参加🦞:的 Udemy 课程
具有机器学习和统计的推荐系统
统计中的数据类型
数据类型是统计学的一个重要概念,需要理解这一概念,才能正确地对数据进行统计测量,从而正确地得出关于数据的某些假设。这篇博客文章将向您介绍您需要了解的不同数据类型,以进行适当的探索性数据分析(EDA),这是机器学习项目中最被低估的部分之一。
目录:
- 数据类型简介
- 分类数据(名义数据、序数数据)
- 数字数据(离散、连续、区间、比率)
- 为什么数据类型很重要?
- 统计方法
- 摘要
数据类型简介
很好地理解不同的数据类型(也称为度量尺度)是进行探索性数据分析(EDA)的重要前提,因为您只能对特定的数据类型使用特定的统计度量。
您还需要知道您正在处理的数据类型,以便选择正确的可视化方法。将数据类型视为对不同类型的变量进行分类的一种方式。我们将讨论变量的主要类型,并查看每种类型的示例。我们有时将它们称为测量尺度。
分类数据
分类数据代表特征。因此,它可以代表一个人的性别,语言等。分类数据也可以采用数值(例如:1 代表女性,0 代表男性)。请注意,这些数字没有数学意义。
标称数据
标称值代表离散单位,用于标记没有定量值的变量。就把它们想象成“标签”。请注意没有顺序的名义数据。因此,如果你改变它的值的顺序,它的意义不会改变。您可以在下面看到两个名义特征示例:
描述一个人是否已婚的左侧特征被称为“二分法”,这是一种名义尺度,只包含两个类别。
序数数据
序数值表示离散的和有序的单位。因此,除了排序问题之外,它几乎与名义数据相同。你可以看到下面的例子:
注意,小学和高中的区别不同于高中和大学的区别。这是序数数据的主要局限性,数值之间的差异并不真正为人所知。正因为如此,序数量表通常被用来衡量非数字特征,如快乐、顾客满意度等。
数据
1.离散数据
如果数据的值是不同的和独立的,我们称之为离散数据。换句话说:如果数据只能取某些值,我们称之为离散数据。这类数据无法测量,但可以计算。它基本上代表了可以分类的信息。一个例子是 100 次掷硬币中的人头数。
你可以通过问以下两个问题来检查你是否在处理离散数据:你能统计它吗,它能被分成越来越小的部分吗?
2.连续数据
连续数据代表测量值,因此它们的值无法计算,但可以测量。一个例子是人的身高,你可以用实数线上的区间来描述。
区间数据
间隔值代表具有相同差值的有序单元。因此,当我们有一个包含有序数值的变量,并且我们知道这些值之间的确切差异时,我们称之为区间数据。一个例子是包含给定地点温度的要素,如下所示:
区间值数据的问题在于它们没有“真零”。就我们的例子来说,这意味着没有温度这回事。对于区间数据,我们可以加减,但不能乘、除或计算比值。因为没有真正的零,所以大量的描述性和推断性统计无法应用。
比率数据
比率值也是具有相同差值的有序单位。比率值与区间值相同,不同之处在于它们有一个绝对零点。很好的例子是身高、体重、长度等。
为什么数据类型很重要?
数据类型是一个重要的概念,因为统计方法只能用于特定的数据类型。你必须以不同于分类数据的方式分析连续数据,否则会导致错误的分析。因此,了解你正在处理的数据类型,使你能够选择正确的分析方法。
我们现在将再次检查每种数据类型,但这一次是关于可以应用什么统计方法。为了正确理解我们将要讨论的内容,你必须了解描述统计学的基础知识。如果你不了解他们,可以看看我关于此事的博文(9 分钟阅读):https://towardsdatascience . com/intro-to-descriptive-statistics-252 e 9 c 464 AC 9。
统计方法
标称数据
当您处理名义数据时,您通过以下方式收集信息:
频率:频率是某件事情在一段时间内或者在一个数据集中发生的频率。
比例:用频率除以事件总数,可以很容易地计算出比例。(例如,某件事发生的频率除以它可能发生的频率)
百分比。
可视化方法:为了可视化名义数据,你可以使用饼图或条形图。
在数据科学中,您可以使用一种热编码将名义数据转换为数字特征。
序数数据
当您处理序数数据时,您可以使用与处理名义数据相同的方法,但是您还可以使用一些额外的工具。因此,你可以用频率、比例、百分比来总结你的序数数据。你可以用饼状图和柱状图来展示它。此外,您可以使用百分位数、中位数、众数和四分位数范围来总结您的数据。
在数据科学中,您可以使用一种标签编码,将序数数据转换为数字特征。
连续数据
当你在处理连续数据时,你可以用最多的方法来描述你的数据。您可以使用百分位数、中位数、四分位数范围、平均值、众数、标准差和范围来总结您的数据。
可视化方法:
为了显示连续的数据,你可以使用直方图或箱线图。使用直方图,您可以检查分布的集中趋势、可变性、模态和峰度。请注意,直方图无法显示您是否有任何异常值。这就是为什么我们也使用箱线图。
摘要
在这篇文章中,您发现了统计中使用的不同数据类型。您学习了离散数据和连续数据之间的区别,以及什么是名义、顺序、间隔和比率测量尺度。此外,你现在知道你可以在哪个数据类型下使用什么统计测量,以及哪个是正确的可视化方法。您还了解了可以将分类变量转换为数值变量的方法。这使您能够在给定的数据集上创建探索性分析的大部分。
资源
- https://en.wikipedia.org/wiki/Statistical_data_type
- https://www.youtube.com/watch?v=hZxnzfnt5v8
- http://www . dummies . com/education/math/statistics/types-of-statistical-data-numerical-categorial-and-ordinal/
- https://www.isixsigma.com/dictionary/discrete-data/
- https://www.youtube.com/watch?v=zHcQPKP6NpM&t = 247s
- http://www . mymarketresearchmethods . com/types-of-data-nominal-ordinal-interval-ratio/
- https://study . com/academy/lesson/what-is-discrete-data-in-math-definition-examples . html
这篇文章最初发表在我的博客上(【https://machinelearning-blog.com】)。
使用 R 可视化 1948 年以来美国航空悲剧的数据
NTSB investigators looking at the fuselage of Asiana Airlines Flight 214 after it crash landed in San Francisco (Wikimedia Commons)
在这篇文章中,我看了一个来自 NTSB 航空事故数据库的数据集,它包含了关于民航事故的信息。在 Kaggle 上也有一个数据集。
这种探索性数据分析 ( EDA )旨在对数据进行初步探索,并初步了解数据集中存在的各种变量之间的关系。
我的目的还在于展示简单理解数据分析和争论以及领域知识如何能够更好地理解数据集中变量之间的关系。R Markdown 文件可以在这个 GitHub repo 中找到。
介绍
首先,快速介绍一下我将探索的数据集。该数据集包含与记录的航空事故相关的 31 个变量的 81,013 个观察值。
## [1] 81013 31
变量提供各种主题的信息,包括观察的日期和位置、飞机的型号和类型、乘客和飞机持续受伤的信息以及当时报告的天气情况。
## [1] "Event.Id" "Investigation.Type"
## [3] "Accident.Number" "Event.Date"
## [5] "Location" "Country"
## [7] "Latitude" "Longitude"
## [9] "Airport.Code" "Airport.Name"
## [11] "Injury.Severity" "Aircraft.Damage"
## [13] "Aircraft.Category" "Registration.Number"
## [15] "Make" "Model"
## [17] "Amateur.Built" "Number.of.Engines"
## [19] "Engine.Type" "FAR.Description"
## [21] "Schedule" "Purpose.of.Flight"
## [23] "Air.Carrier" "Total.Fatal.Injuries"
## [25] "Total.Serious.Injuries" "Total.Minor.Injuries"
## [27] "Total.Uninjured" "Weather.Condition"
## [29] "Broad.Phase.of.Flight" "Report.Status"
## [31] "Publication.Date"
数据争论
由于这是来自美国的 NTSB 数据库,该数据库中的大多数事故(超过 94%)是在美国观察到的。因此,在这次分析中,我将重点关注发生在美国的事故。除去国际观测数据后,新的数据框架现在有 76,188 个观测数据。
## [1] 76188 31
当然,一些数据争论是必要的(细节可以在 GitHub repo 中的 R Markdown 文件中找到)。例如,列出的位置名称(城市,州)被分成两个变量:一个用于城市,一个用于州,用于每个观察。
将与观察事件日期相关的变量按日、月和年分解为观察事件日期,以调查一年内事故数量和特定时期之间是否存在任何相关性。更多的数据争论是必要的
此外,显示与给定观测的总死亡人数相关的数据的更好方法是将死亡人数分组。这将使我们能够更好地表示数据集中所有观测数据的死亡率分布。
单变量绘图部分
在这一节中,我将为感兴趣的变量创建单变量图。
按年份、月份和工作日划分的事故
让我们在数据集中绘制事故发生的年份、月份和工作日的频率直方图。数据框架中的大部分观察数据来自 20 世纪 80 年代早期以后。所以我们来生成一个 1980 年到 2017 年的剧情。
事故数量总体上减少了大约。从 1982 年到 2017 年间的约 47%。大约 3400 次观察。1600 次观察。
接下来,让我们看看一年中各月的观测分布。
在给定年份的数据集中,最高数量的事故发生在北半球夏季(6 月-7 月-8 月)。这也可能与暑假期间航班数量增加有关。
最后,让我们看看一周中每天的观察分布。
一周内事故发生频率最高的时间是周末(周六至周日)。同样,这也可能与暑假期间航班数量的增加有关。
致命伤害总数
下一个感兴趣的变量与数据集中每个观察值的致命伤害总数相关。这可以通过每次记录的观察中致命受伤的人数来量化。让我们按照下图所示,对铲斗中的死亡人数进行分组。注意下图中 y 轴使用了 Log10 标度。
大部分记录在案的事故死亡人数为 100 人。
发动机类型
接下来,我查看数据集中记录的飞机发动机型号。我已经缩写了引擎类型名称,以改进 x 轴的标注。注意下图中 y 轴使用了 Log10 标度。
根据上面的图表,报告事故中的大部分发动机类型是商用飞机中流行的往复式发动机类型,特别是在 20 世纪建造的飞机中。最近的飞机,像空客 A380 或波音 787 梦想飞机依靠喷气发动机(例如涡轮风扇发动机、涡轮螺旋桨发动机)。
气象条件
接下来,我查看数据集中记录的天气情况。这里需要熟悉两个关键的航空气象条件: [VMC](http://VMC which stands for visual meteorological conditions and IMC stands for instrument meteorological conditions.) 这意味着条件是飞行员有足够的能见度驾驶飞机,与地形和其他飞机保持目视间隔。 IMC 指天气条件要求飞行员主要参照仪表飞行。
数据集中的大部分事故发生在 VMC 天气条件下,这是飞行的好条件,因为 VMC 比 IMC 需要更大的能见度和云层间隙。
当谈到天气状况和航空事故之间的关系时,我想这将违背大多数人的直觉。飞行员确实训练有素,能够在各种天气条件下飞行,仅仅依靠由他们支配的航空电子仪器。
飞行的大致阶段
接下来,让我们看看数据集中记录的事故的飞行阶段。根据情节,大部分事故发生在着陆或起飞期间。业内众所周知,这些都是高风险的——通常被称为“飞行关键阶段”。
二元地块剖面
让我们来看看变量对之间的关系,它们可能显示出有趣的关系。
发动机类型和致命伤害总数
大部分分布的致命伤害总数在 10 以下,让我们放大这部分数据。R 函数 geom_jitter 用于放大数据点的可视化。
根据该图,10 岁以下死亡人数的大部分数据来自 r 型往复式发动机型。第一个图显示,涡轮风扇发动机比其他发动机有更多的异常值,死亡人数更高。这可能与大型商用飞机上使用的涡轮风扇发动机有关。
天气条件和致命伤害总数
如前所述,天气条件并没有显示出与总致命伤害有特别强的关系。大部分分布与 VMC 的天气条件有关。然而,这可能是因为绝大多数航班都是在 VMC 条件下飞行的。
飞行阶段和致命伤害总数
让我们看看飞行阶段和致命伤害总数之间的关系
这些图表明,起飞和进场与高死亡率的异常值有关。如前所述,由于这个特殊原因,这两个飞行阶段通常被称为“T6”飞行的关键阶段“T7”。
事件月份和工作日以及致命伤害总数
让我们看看事件日期和致命伤害总数之间的关系。我们将关注死亡人数少于 10 人的大部分分布。似乎没有任何特定的月份或工作日显示出特别高的事故频率。
广泛的飞行阶段和天气条件
这些图表明,对于某些天气和飞行阶段的组合,记录的观测频率更高,例如,在飞行的“巡航”或“进场”阶段的 IMC 飞行条件。
飞行和活动月的主要阶段
这些图表明,在着陆和起飞期间,北方夏季月份的记录观测频率更高。在所有月份中,热图还显示起飞和着陆记录了最多的观察数据。
记录事故的经度和纬度
绘制事故发生地的纬度和经度基本上给了我们美国的地图。这些图还表明,与中西部各州和阿拉斯加大部分地区相比,沿海各州受到的影响更大。这可以用往来于美国这些地区的航班数量来解释。然而,一个令人悲伤的图表显示,美国绝大多数州在 1948 年至 2017 年期间遭遇了航空悲剧。
多元图部分
现在我们来看看多元图。
一年中各月观测值的纬度与经度
跨纬度和经度的事故月份分布在整个美国相当广泛,在佛罗里达州等南部各州,冬季的观测数据略高。
天气条件下的经度和纬度
现在让我们来看看纬度与经度的关系,并为天气状况添加图层。
VMC 的天气状况似乎相当稳定,除了中西部某些不连续的地区出现了一些主要的 IMC 状况。
根据天气条件划分的飞行和活动月份的大致阶段
现在让我们来看看飞行的主要阶段与天气条件下的月份之间的关系。我决定留下“未知”天气条件下的观察,因为我认为有不可忽略的观察数量,特别是对于飞行的“巡航”阶段。
当观察飞行的主要阶段与月份和天气条件之间的关系时,我们可以看到事故主要发生在 VMC 天气条件下。然而,对于一年中的某些月份,如 12 月和 1 月,IMC 条件是观测值中不可忽略的一部分,尤其是在飞行的进近和巡航阶段。
致命伤害总数和按天气条件划分的飞行阶段
接下来,让我们看看总致命伤害与天气条件下飞行的主要阶段。我决定把重点放在低于 40 的致命伤害总数上,以突出记录的致命伤害的大部分分布。
IMC 天气条件与飞行“巡航”和“进场”阶段的事故有关,其发生频率高于 VMC 天气条件。
每年致命伤害总数和发动机类型
这个图很有趣,因为它显示了某些引擎是如何在不同时期变得流行的。例如,涡轮喷气发动机和涡轮风扇发动机驱动的飞机在以后的几年中显示出较高的死亡人数,而往复式发动机在早些年中显示出死亡人数的分布,这与现代飞机中越来越多地使用喷气发动机相对应。
结束语
我希望你喜欢这个 EDA,并在这个过程中学到了一些关于航空的东西。我希望这篇文章也展示了用 R 中的 ggplot2 实现简单数据可视化的强大功能。当在数据科学管道的初始阶段探索数据集时,这种技能特别有用。我当然喜欢这个周末做的有趣的小研究。
让您的数据自己说话!少即是多(而且人们不读书)
我最近从一家分析公司得到了一些非常可怕的数据可视化的例子,这里就不说了。所以,我开始教育我的员工,好的数据可视化是什么样子,大小、微妙的颜色和位置是传达信息的最佳方式,而不是对他们大喊大叫。如果你仍然在你的图表上使用明亮的背景——看看你,孩子。您需要高数据-油墨比率。这意味着更多的墨水(在大多数情况下,数字墨水)被用来传递数据,而不是任何其他元素。
如果你已经错过了信息过载的时代,只要知道人们不会通读文本——(读者,你还在吗?;你的图表必须坚如磐石。他们必须独立——他们不能接受任何解释。他们不能要求人们阅读附带的文本来理解。它们不应该用大量的亮色和粗体来分散信息——尽量少用这些元素!你不能把认知负担放在用户身上——如果你让理解你的研究变得太难,这肯定不会让他们愿意投资你的公司。你如何向人们传达信息至少和研究本身一样重要!,我内心的科技作家和外在的 UX 自我尖叫道(声明:我是一名科技作家多年:-D)。毕竟,你是想用你的数据赢得人们,而不是迷惑他们!
以下是我将在本文中讨论的一些亮点:
- 只有在添加信息时才明智地使用不同的颜色
- 不添加 chartjunk
- 具有高的数据-墨水比率。彩色背景有损于所传达的信息
- 使用正确类型的图表来传达信息
- 理解特定颜色的含义,如红色和绿色,并有节制地使用它们来分别表示问题和成功。
- 将图表值放在尽可能靠近其详细描述的图形部分。尽可能避免传奇。
- 使用元素大小、颜色饱和度和位置来传达信息
- 少即是多!
这里有一些坏数据的例子,更好的是,如何修复它们:
过度使用颜色有损实际数据
颜色应该被明智地使用,只有当使用颜色传达更多的信息。
这张图表有很多问题:
- 颜色的随意使用和一些类别使用相同的颜色会让人觉得这些类别之间有某种联系。当用户努力寻找例如产品/服务交付速度和移动策略集成之间的联系时,这引入了认知负担。我们想知道,为什么新的商业模式本身是蓝色的?
- 在图表中,红色通常用于显示错误,橙色用于警告。但在这里,用著名的马克·吐温(我承认我崇拜他)的话来说,最好的做法是,“这条规则被抛下,在上面跳舞”。产品交付的速度用红色表示,但它代表了图表中的最大收益。
- 明亮的蓝色背景会使用户更加困惑。使用明亮、饱和、引人注目的颜色(尤其是红色、橙色和黄色)会导致眼睛不知道先关注什么。用户最终会跳来跳去,而不是真正接受你想要他们接受的信息。
- 好像所有的红色还不够,增加了一个红框,进一步分散了用户的注意力,甚至没有任何东西显示为什么红框会在那里。
改版:
在这里,我已经减少到只有蓝色,减少了图形线条的重量,删除了背景(白色背景对大多数用户来说是最可读的),并添加了一个小括号指示器来代替红色框,并配有文本。没有什么留给读者去理解。请记住,读者不会花时间阅读附带的文字,只会快速浏览一下你的图表,看看是否值得进一步研究。你不会再有第一印象的机会了!
重治疗处处招关注——什么重要?!
这是另一个罪魁祸首,整个图表都让你眼前一亮。但是你想传达的关键信息是什么呢?让你困惑的是:
- 一切都是粗体的——线条、圆圈和数值
- 图例上的文本看起来很重要,但却被包裹在 4 行中,妨碍了可扫描性
- 明亮的蓝色背景使整个东西颤动起来
- 网格线与背景和数据的对比度太高。他们应该被制服,微妙地传递信息,但不是尖叫。
改版:
在这里,一个更饱和的大胆的处理和文字被用来传达重要的部分,和大小被用来立即传达价值的差异。文本被缩短,文本列的长度被加宽,以便更快地扫描。
颜色、文本、箭头——哦,天哪!
有许多事情使下面的图表难以理解。
- 弹出的是箭头。它们到底是什么意思?我找不到知道的人!49%的内部部门系统流向 36%的客户供应链?什么?
- 为什么是红色和橙色?!这些本身就引人注目,但在蓝色背景的映衬下,它们似乎在颤动。不是你想要的,除非它是一张迷幻的黑光灯海报,就像我们在大学时代回到斯潘塞(在美国)一样;-D!
- 不必要的长标签会导致缺乏即时理解。
- 疯狂长标题!像狄更斯时代一样,这个机构是按角色收费的吗?;-D
一百万年后,你可能也猜不到这些箭头是什么意思——我甚至犹豫是否要告诉你。显然,它们应该是趋势线。嗯……嗯,对我没有,对我问过的其他人也没有。
在这里,在与主要利益相关者交谈后,我简化了——当我们真正想要的是显示外部 API 使用的增加趋势时,显示内部 API 使用的减少趋势有那么重要吗?为了传达这两种价值,把图表弄乱值得吗?在这种情况下,我们决定它不是。
改版:
在这里,将颜色减少到只有两种,都是蓝色的阴影,在这里,外部扩张被显示为更重要,用更饱和的蓝色来吸引注意力。一个简单的花括号指示器被用来代替原始图表上那些神秘的箭头。标题和图例文本被缩短,以便于理解和浏览。
从头开始!
在某个不知名的地方随机出现的图表应该能够解释它们自己,以及它们为什么会出现在那里(是的,马克·吐温的读者,你可能知道我最喜欢的作者的一种说话方式。我是一个博学的人,这意味着我从许多知识流派中汲取知识——我喜欢吐温——如果有一天我发明了时光机,或者你发明了时光机,塞缪尔·克莱门斯是我最想见到的作家!😄)。
除了我们已经详细讨论过的背景和过度饱和、引人注目的颜色之外,这里还有另一个数据 viz 规则——为了有效地传达信息,图表应该从 0 开始。任何其他事情,你试图扭曲数据,以显示其他东西!诚实对待你的数据!
在这里,蛋糕层毫无意义。为什么他们从中间开始?很难比较。相同颜色的条传达了一种不存在的关系。而且横条看起来也不成比例。
改版:
这个超级简单。就像所有优秀的故事讲述者一样,从头开始!我也简化为蓝色主题。正如你将在后面的一些图表中看到的,我也开始使用饱和度来传达意思,但在这里,它们只是不同的蓝色色调:)。
一致地传达信息
如果第一次你使用一种方法来表达一种尺度,不要为了增加更多的颜色而在下一次使用不同的方法!您可能会在前面的示例中认出这个用在折线图上的从低到高的比例,但它变得更加复杂了!
在这里,除了背景和颜色,我已经唠叨够了;-D,红色边框、图例和颜色合并到 x 轴中。网格标记实际上甚至没有必要,因为百分比就在横条上。
改版:
我告诉过你我要开始用饱和度来传达意思,就是这样!耶!通过使用越来越饱和的蓝色,我们传达了意义——低能力到核心能力。投入的时间、精力和金钱由较高的饱和度表示。哦,对了,还有那个花括号来代替上面那个神秘的没有标签的红盒子。图例被简化为仅包含重要信息。
颜色有意义——用它来传达信息!
这里,重要的信息不是“没有计划”部分,而是“是”部分和“没有,但有计划”部分。没有计划是特别不重要的。这表明他们已经想到了这一点,并放弃了这个想法。这里没什么潜力。那么为什么是红色和橙色呢?为什么要用橙色来引起对最不重要部分的注意?
改版:
在这里,我看了颜色的含义——橙色表示没有任何意义的计划,红色表示有任何意义的计划——红色和橙色分别用于错误和警告状态,记得吗?没有计划意味着灯灭了,它是灰色的。我还将标签整合到了细分市场中——我的观众没有眼跳——他们不必在图表和图例之间跳来跳去,这进一步妨碍了理解和浏览。
然后,让我们看看饼状图中的现代性。油炸圈饼的使用范围更广。分隔区段的空间使得比较更加困难。我喜欢甜甜圈的另一点(不,不是吃——我很奇怪,我知道)是潜在的核心圈子。我在这里没有使用任何东西,但是你可以展示一些重要的东西,比如被调查的客户数量,或者甚至一张简单的图片来传达更多的信息。哦,可能性!是的,我爱死 UX 了——这表现出来了吗?;-D
不要让你的读者认为!
哦,这些颜色!它们是什么意思?它们都很亮,但传达不出任何意义!干掉他们,数据可视化蚱蜢!😄
改版:
我不得不在这里做了一点延伸,将不重要的标签移动到段中,但是我觉得这比将标签放在外面的巨大段更好。记住,如果你不能把标签放在片段中,紧挨着它们是下一个最好的选择。例如,如果您必须处理要翻译的设计,这很好。我说的紧挨着,是指毗邻,而不是在传说中。这是我写的另一篇文章,其中我详细讨论了饼图设计和颜色使用,供色盲用户使用,如果你想了解更多信息:https://medium . com/@ Courtney Jordan/design-for-all-users-why-you-should-care-color-blindness-beabd 61943 EB
颜色饱和度和尺寸
哦天哪!我们还能比这更无聊吗?什么重要?一切都是大胆的,意味着什么都不会被关注。什么都不突出,因为什么都突出!
改版:
这可能是我最喜欢的重新设计之一:)。在这里,我用了一种不太饱和的蓝色来显示内部焦点逐渐增加到一种更饱和的蓝色,以部分或完全关注外部客户。我还用大小来传达大多数公司的位置。通过将内部和外部的传说分成两种不同的蓝调,并合计每种的百分比,它减少了蓝调可能造成的认知负担。相信我,我试过了:)。
希望您喜欢学习数据可视化及其在传递信息方面的重要性,尤其是让他们阅读,更重要的是理解它。这不禁让更多人议论起来!好的数据可视化让你的公司好看!什么样的潜在客户会去看一家向他们展示令人困惑的图表的公司?你希望那家公司能够帮助你吗?如果你的答案是肯定的,“我在亚利桑那州有一些海滨房产…”😄
快乐的数据分析和可视化!
数据可视化设计和赏心悦目的命令
你还记得人们哀叹被称为“信息娱乐”的可怕的新祸害吗?这个词最早出现在 20 世纪 60 年代,但随着 80 年代 MTV 的推出,这个词变得无处不在。如果 MTV 新闻是“信息娱乐”的中心,那么主播库尔特·洛德就是它的代言人。我是看着洛德长大的,我认为他体现了新闻业美好未来的先兆,因为他和 MTV 承认他们的观众对媒体有不同的期望。
事实是,我们需要娱乐(每天都是如此)。但是比这更简单。我们喜欢漂亮的东西。我们喜欢漂亮的人、漂亮的东西和漂亮的想法。如今,即使丑陋也能被遗忘。无论你做什么,不要让我厌烦!
我认为有一种强烈的“赏心悦目的需求”制造美丽的东西不再是一种奢侈。这是强制性的。换句话说,审美很重要。
2016 年我最喜欢的一个项目(现在是一本书)是亲爱的数据。这是两位信息设计师乔治·卢皮和斯蒂芬妮·波萨维克的合作,他们在整整一年的时间里,每周都互相发送个人数据的明信片草图。这个项目在很多层面上都是有趣和鼓舞人心的,尤其是在赏心悦目的背景下。为什么?因为 104 张明信片中没有一张是标准的“图表”
每一个都是某个数据集的独特定制视图。每一个都是赏心悦目的,因为它是数据的美丽而有趣的表达。每个都是“信息娱乐”,因为它是信息(数据)和娱乐(艺术表现)。正如我所说的,它们很好地证实了视觉糖果打动观众的力量。这个项目已经席卷了信息设计界,甚至泄露到了更一般的媒体渠道,比如 Slate 和 Quartz。
视觉糖果在设计中有三个主要的关键目的:
- 它让事物在视觉上保持新鲜和有趣
- 它能把注意力吸引到重要的东西上
- 它可以提醒观众注意功能
反对视觉糖果的一个论点是,“严肃”的人会质疑视觉糖果是否会降低主题的重要性,或者更糟的是,可能会使设计变得不那么有用或不准确。研究证明这不是真的。萨斯喀彻温大学的一项研究调查了“图表垃圾”的概念,这是理解图表信息不必要的修饰,由爱德华·塔夫特创造,至少可以说,他不是一个视觉糖果的粉丝。正如 Tufte 所说,这项研究的目的是确定图表垃圾是否是一个坏主意。
该研究发现,图表垃圾没有任何有害影响——理解的准确性不会因装饰而降低,事实上,与没有添加闪光的图表相比,使用“图表垃圾”视觉效果回忆信息的能力要好得多。
另一项研究研究美学对数据可视化可用性的影响,发现用户更喜欢“漂亮”的图表——最好的例子是旭日图——即使他们通常并不真正理解它们是如何工作的。这项研究还发现,人们会花更多的时间在他们喜欢的图表上,学习它们是如何工作的,他们理解的准确性最终不会受到影响。因此,即使更简单的“更有效的”图表可能适用于您的数据,也有理由使用美观的可视化效果。
换句话说,你应该争取形式和功能最纯粹、最充分的体现。做出好看的,有趣的,动画的,创新的新鲜东西。挑战极限,吸引观众眼球,迫使他们离开舒适区一点。记住要小心——在设计视觉效果时,要非常仔细地考虑可用性和你的最终沟通目标。
要了解更多关于数据故事和信息设计的知识,请加入我的成长社区,在那里我一直在收集关于这个主题的精彩内容。
这篇文章最初发表在信息博客上。
仅使用熊猫的数据可视化和探索:初学者
关于熊猫你需要知道的一切
Pandas 是一个用于 python 编程的开源数据结构和数据分析工具。正如我们从这篇文章中看到的,Python 是 2018 年最受欢迎的数据科学语言。熊猫这个名字来源于 Panel Data 这个词——多维数据的计量经济学。本教程将提供一个初学者指南,如何与熊猫进行数据争论和可视化。
进口熊猫
我们首先导入 pandas,并将其别名化为 pd,以便在分析中使用。
进口熊猫当 pd
加载数据
Pandas 允许您导入各种格式的文件。最流行的格式是 CSV。
第一步是将要加载的文件分配给一个变量,以便能够在以后的分析中操作数据框。数据框基本上是数据集中的行和列的表示
对于 csv 文件
df = PD . read _ CSV(’ pathtoyourfile . CSV ')
对于 Excel 文件
df = PD . read _ excel(’ pathtofyourfile . xlsx ',sheetname='nameofyoursheet ')
读取在线 HTML 文件
Pandas 还可以使用下面的命令在线读取 HTML 表格
df = PD . read _ html(’ linktoonlinehtmlfile ')
您可能需要安装以下软件包才能工作
pip 安装 Beautifulsoup htmllib5 lxml
为了说明你可以对熊猫做的一些事情,我们将使用我在 2017 年收集的来自主要孵化器的推文。
为了查看前五项,我们在数据集上调用 head 命令。同样,为了查看数据集中的最后五个元素,我们使用了 tail 函数。检查列的数据类型以及是否有空值通常很重要。这可以使用 info 命令来实现。
从这里我们可以看出,我们的数据集有 24933 个条目,5 列,它们都是非空的。情况不会总是这样。如果有些行是空的,我们必须根据当前的情况适当地处理它们。一种方法是放下它们,另一种方法是填满它们。让我们假设我们的数据集中有一个年龄列,代表发出推文的人的年龄。我们将用如下的平均值来填充它
df[‘年龄’]。fillna(value=df[‘age’]。平均值())
我们也可以决定这样放下它们
df.dropna() 这将删除所有包含空值的列。处理空值非常重要,因为它会影响您从数据中获得的洞察力。
您还可以使用此方法来检查空值
正如我们前面看到的,这个数据集没有空值。
分组通过
我们可能希望按照用户名对所有的推文进行分组,并统计每个组织的推文数量。我们可能也有兴趣看看推文最多的前 10 个组织。
我们使用 Sort_values 按照 tweets 的数量对数据帧进行排序。
总和
因为所有组织都有转发,所以让我们看看哪个组织有最多的转发。我们可以通过按组织的用户名对推文进行分组并对转发进行汇总来实现这一点。
统计数据集中唯一用户名的数量。
我们的数据集中有 26 个独特的组织。
我们可以通过调用列上的 unique 函数得到它们的名字。
统计某一列的项目数
重要的是 value_counts() 不能用于数据帧,它只能用于序列。我们可以通过在 dataframe 上调用它来说明这一点。
对整个数据集应用函数
假设我们想知道每条推文中的字数。我们将创建一个新列来保存该列的长度,然后对其应用len 函数来计算字符数。
您可以通过在上面调用 describe 函数来查看我们刚刚创建的列的描述。
我们可以看到最长的推文有 158 个字符长。我们怎么能看到那条微博呢?
你会注意到我们只能看到推文的一部分。我们可以通过使用 iloc 功能看到完整的 tweet
这意味着我们想要查看位于索引 0 的项目,也就是这种情况下的 tweet。
合并两个数据帧
有时,作为我们数据分析工作的一部分,我们可能需要合并两个数据帧。比方说,我们想找出推文数量和转发数量之间的关系。这意味着我们将有一个包含推文数量的数据帧和另一个包含转发数量的数据帧,然后将它们合并。
有时,您可能还想连接两个数据集。让我们以 Kaggle 竞赛数据集为例。您可能希望加入测试和训练数据集,以便使用完整的数据集。您可以使用 concat 来实现这一点。
使用熊猫进行数据可视化
当你想快速查看你的数据时,用熊猫做可视化是很方便的。让我们用熊猫来绘制推文长度的直方图。
直方图
查看直方图,我们可以看出大多数推文的长度在 120 到 140 之间。
我们现在可以使用相同的概念来绘制散点图,以显示推文数量和转发数量之间的关系。
散点图
这意味着推文数量和转发数量之间存在正相关关系。
区地块
线条图
核密度估计图(KDE
通过从不同的在线课程中学习这一点和更多内容,你可以在 2018 年开始你的职业生涯。
学习 Python 的数据科学,NumPy,Pandas,Matplotlib,Seaborn,Scikit-learn,Dask,LightGBM,XGBoost,CatBoost 等等…
www.udemy.com](https://www.udemy.com/course/data-science-bootcamp-in-python/?referralCode=9F6DFBC3F92C44E8C7F4)
濒危语言的数据可视化
作者:明成,徐悦,查维萨拉
GitHub 链接:https://github.com/mc2637/INFO5100Project1.git
我们的项目展示了世界各地灭绝和濒危语言的分布。数据集是从《卫报》发布的 Kaggle 上下载的。它总共包括 14 个变量(即列),但我们只选择了 5 个变量在这个项目中进行可视化:语言的名称、经度、纬度、濒危程度(脆弱、绝对脆弱、严重脆弱、严重濒危或灭绝),以及说话者的数量。
World Map Data Visualization of Extinct and Endangered Language
US Map of Extinct and Endangered Language
我们还为灭绝日期已知的灭绝语言创建了单独的数据集。由于数据集中灭绝的语言较少,我们手动在维基百科上查找每种灭绝语言的灭绝日期。几个灭绝日期是近似的。那些不知道灭绝日期的物种被排除在这个数据之外。我们通过对灭绝年份的排序和分组进一步处理数据,然后随着时间的推移找到累积和。
我们使用 d3-geo-projection 扩展来绘制世界地图(geoNaturalEarth)和美国地图(geoAlbersUSA),使用了教授为课堂练习提供的 JSON 文件。地图描述对于世界地图,我们希望首先展示灭绝和濒危语言的总体分布。我们用圆圈来确定每种语言的位置,并用紫色到黄色的色标来表示相应的濒危程度(灭绝的语言是紫色的,而脆弱的语言是黄色的)。给语言名称贴上标签或显示每种语言的使用者数量会让读者不知所措,导致信息难以辨认,所以我们决定在这张地图上只使用两个变量:位置和濒危程度。
在美国地图中使用了更多的变量,我们添加了一些著名语言的标签和说话者的数量。后者通过改变圆的大小或半径来表示,线性缩放它们。扬声器数量越多,圆圈越大。为了更清楚地查看数据点群,我们决定在左上角创建一个放大的美国西海岸迷你地图。这一次,所有的语言都被贴上了相应的标签,还有不同的圆圈半径(尽管它们中的大多数都有相同的大小,因为它们要么已经灭绝,要么濒临灭绝)。故事当我们在世界地图上绘制了所有数据后,可视化告诉我们世界上所有灭绝和濒危语言的位置。我们注意到一些国家的边境上有许多灭绝的语言,这让我们感到惊讶。例如,在北美西海岸有高度集中的灭绝语言,在中国西部边境也有高度集中的灭绝和濒危语言。此外,灭绝和濒危语言高度集中在南美洲中部和上部、中非和太平洋岛屿。
这是一个非常有趣的发现。我们怀疑在每个国家的边境上有更多的方言,并且有相对较少的人口说这些方言。随着每个国家的官方语言占主导地位,说方言的人数减少了。此外,我们注意到西海岸有许多美洲土著部落语言灭绝或濒临灭绝。我们认为这些语言的灭绝是由于美国历史上土著美国人被置于保留地并被高加索文化和语言所同化。关于美国西海岸灭绝的语言的另一种推测是,西海岸在 20 世纪曾是墨西哥和加拿大的一部分。随着西海岸成为美国的一部分,一些语言灭绝了。
我们希望使用我们的数据可视化来善意地提醒我们的观众,通过拯救某些濒危语言来保护自己的独特遗产。如果越来越多的语言灭绝,那将是极其不幸的,也是世界文化的巨大损失。
使用 Python 进行机器学习和数据科学的数据可视化;
大家好,
我是萨纳特,目前在 IBM 工作,我基本上是一名数据科学家,喜欢亲自动手处理大量数据。让我在这里缩短我无聊的介绍:P,转到今天的主题**“数据可视化”。**
注意:写这篇博客时要记住,读者只知道数据可视化的基础知识,有些主题可能太天真。所以请跳过你已经知道的话题,享受剩下的。我欢迎你对博客的所有评论。
众所周知,人们对术语数据议论纷纷,比如大数据、数据科学、数据分析师、数据仓库、数据挖掘等等。其中强调,在当今时代,数据在影响人类的日常活动中起着重要作用。每天我们都会产生超过 2.5 万亿(10 ⁸)字节的数据(链接),从我们的短信、图像、电子邮件,到来自自动驾驶汽车、物联网设备等的数据。手头有如此大量的数据可用,利用这些数据中的有用信息可以帮助每个组织清楚地了解几个领域,如什么可以提高组织的收入,哪个领域需要更多的关注,如何寻求更多的客户关注等。机器学习(ML)、数据科学是人工智能(AI)的一些相关领域,最近这些天从数据中学习的任务在很大程度上已经完成。
通过以上介绍,现在您可能对术语“数据”很感兴趣,并将计划更有效地利用这些可用数据,以获得尽可能多的有用信息。你觉得解读这些收集到的数据很容易吗?可能是没有:()。数据将是原始格式,需要执行几个步骤才能将原始数据转换为有用的信息,就像金匠如何通过对原始黄金进行几个预处理步骤来准备装饰品。这就是数据科学家派上用场的地方,你扔给他/她一份原始数据,他们可以从中为你讲述一个伟大的故事,这对于拥有相同数据的其他人来说并不容易。当这些数据科学家撰写他们的故事(我的意思是使用数据:P)时,将会有几个阶段,如数据获取、数据清洗、数据可视化、建立可用于预测未来信息的模型等。其中一个关键阶段是数据可视化。这是第一步,也是最重要的一步,在这一步中,他们将获得关于数据状况的高级统计概述。以及它的一些属性,如底层分布、异常值的存在以及一些更有用的特性。
“数据是新的石油吗?不,数据是新的土壤。”—大卫·麦坎德斯
为什么要可视化?
你认为在一个表格/数据库文件中给你 100 万个点的数据,并要求你仅仅通过查看表格上的数据来提供你的推论是可行的吗?除非你是一个超人,否则这是不可能的。这就是我们利用数据可视化的时候,其中所有的数据都将被转换成某种形式的图表,并进一步分析。作为一个人,我们比其他人更习惯于从图示中获取大量信息。
孩子们应该从很小的时候就开始学习如何阅读和创建图形。大多数孩子是天生的艺术家,因为我们人类是视觉物种。我们应该利用这一点,因为图形和插图可以成为理解和交流的强大武器——阿尔贝托·开罗
好吧!所以既然说要把枯燥的表格里的数据转换成散点图或者柱状图这样有趣的图示形式,你可能会想,我怎么做呢?我需要为此编写自己的代码吗?没有!实际上,我们可以利用一些流行的编程语言的非常好的包,这些包很容易获得,并且只需要一行代码就可以使工作变得非常简单。这就是现代编程的力量,😄!
Meme created using imgflip.com
**作为一个人,我们可以想象任何二维或三维的东西。但是相信我,你在现实世界中获得的数据绝大多数不会是这样的。作为一名机器学习工程师,处理超过 1000 维的数据是非常常见的。那么在这种数据不止 3D 的情况下,我们能做些什么呢?有一些 降维(DR) 技术,如 PCA ,TSNE,LDA等,帮助你将高维数据转换成 2D 或 3D 数据,以便可视化。每种 DR 技术可能会丢失一些信息,但只有它们才能帮助我们在 2d 图上可视化非常高维的数据。TSNE 是用于高维数据可视化的最新 DR 技术之一。
从构建模型的角度来看,通过可视化数据,我们可以发现隐藏的模式,探索数据中是否有任何聚类,我们可以发现它们是否是线性可分的/重叠太多等等。从这个初始分析中,我们可以很容易地排除不适合这种数据的模型,我们将只实现适合的模型,而不会浪费我们宝贵的时间和计算资源。
数据可视化的这一部分是数据科学/ML 领域最初的探索性数据分析(EDA)** 的主要部分。**
我可以使用哪种语言?
Meme created using imgflip.com
我们可以使用多种语言来执行数据可视化,但在数据科学领域使用最广泛的是 Python & R。因此,您的下一个问题可能是, 应该学习哪种语言,哪种语言的范围更广?。答案很简单!纯属你的选择 不过我会推荐 Python;)。r '是一种更具统计性的语言,有几个用于数据科学应用程序的优秀包,而另一方面,Python 被广泛用于通用编程以及数据科学和 ML 相关的应用程序。我对 python 很熟悉,所以我会继续用 python 代码写博客的其余部分,它也有几个很好的包,像 Scikit,Matplotlib,seaborn 等等,对我们帮助很大。特别感谢那些让我们的工作变得简单的开发人员。
使用 Python 绘制数据:
如上所述,Python 有几个很好的包来绘制数据,其中 Matplotlib 是最突出的一个。 Seaborn 也是一个很棒的包,它提供了很多更吸引人的情节,甚至它使用 matplotlib 作为它的基础层。当整个数据存储在 pandas 数据框架中时,Pandas 中也有许多相似类型的绘图,我们也有一个名为 plotly 等的库。在这篇博客中,我们将讨论在开头提到的 2 个包中的不同类型的情节,并让我们详细地探索它们。
Matplotlib 架构:
matplotlib 的体系结构总共有 3 个不同的层,如下所示。
- )后端层。
- )艺人层。
- )脚本层。
- 后端层:
这是图形的最底层,包含绘图所需的几个功能的实现。后端层 FigureCanvas (将在其上绘制图形的层/表面) Renderer (负责在表面上绘图的类)和 Event (处理鼠标和键盘事件)中有 3 个主要的类。与对应层相比,我们在后端层上做得不多。
- 艺术家图层:
这是架构中的第二层/最中间层。它主要负责绘制各种函数,比如协调如何在图形画布上使用渲染器的 axis。 简单来说,让我们把纸当做图形画布,把素描笔当做渲染器。那么画师的手就是有一定功能的艺术家图层 ,知道如何素描得到确切的图形。艺术家层有几个可用的类,几个重要的是图形,轴和轴。
Machine learning/Data Science
上面的两张图片解释了艺术家层中不同类之间的层次结构。图形是最上面的一个,一个图形可以包含多个轴,在这些轴上绘图。继续,在每个轴下,我们可以添加多个图。这提供了更多的额外功能来改善地块,这是大多数重型起重工程发生的地方。
- 脚本层:
这是最上面的一层,我们的大部分代码都将在这一层上运行。对于日常的探索性工作,我们几乎依赖于 matplotlib 的这个脚本层。Pyplot 是脚本层,它提供了与 python 中的 Matlab 几乎相似的功能。脚本层中的方法几乎自动处理其他层,我们需要关心的只是当前状态(图&子图)。因此也被称为 有状态接口 。
请访问链接进行参考。
Matplotlib 术语:
在这里,让我们看一下使用 Matplotlib 进行数据可视化时的一些常用术语。
页(page 的缩写)学生:无论在哪里。(某函数)被使用,表示我在程序中导入 matplotlib.pyplot 作为 plt 而 sns 表示我导入 seaborn 只是为了方便编码。
**import matplotlib.pyplot as plt
import seaborn as sns**
如果您的系统中还没有安装这些软件包。请安装 Python 3 并在命令提示符下使用下面的代码。
****pip3 install matplotlib
pip3 install seaborn****
斧头:
轴是图中单一地块的整个区域。这个类包含了绘制一个图所需要的几个属性,比如添加标题,给标签,为每个轴上不同类型的图选择 bin 值等等。
我们可以在一个图中有多个轴,这样我们就可以将多个图组合成一个图形。例如:如果我们希望 PDF 和 CDF 曲线在同一个图形中,我们可以创建 2 个轴,并在不同的轴上绘制它们。然后我们可以把它们组合成一个单一的图形。
网格:
当在绘图中启用网格时,将在绘图的背景层添加一组水平线和垂直线。这可以使用 plt.grid()来实现。这对于粗略估计特定坐标的值非常有用,只需查看图即可。
Ref: 链接
图例:
图例只不过是图形中可用的不同图的标记表示。例如,当单个图像中有多个图时(例如:虹膜数据集),图例将帮助我们识别单个图中不同颜色图的正确名称。
参考:链接
支线剧情:
当我们希望在一个图像中有两个或更多的绘图时,我们可以使用 Matplotlib,plt.subplot (xyz)中的 Subplot。xyz 是一个 3 位数整数,其中 x-行数,y =列数,z=该图的索引号。当我们需要比较两个或更多的图而不是将它们放在不同的图像中时,这是最有用的功能之一。
**plt.figure(1,figsize=(30,8))plt.subplot(131)
#Code for fig1.plt.subplot(132)
#code for fig2plt.subplot(133)
#code for fig3.plt.show()**
Subplots
除了支线剧情之外,尝试使用 gridspec ,这可以帮助我们更有效、更容易地拆分支线剧情中的情节。
参考:链接
标题:
我们可以使用 plt.title()为一个图设置一个标题
xlabel:
plt.xlabel()是设置 x 轴标签的命令
ylabel:
plt.ylabel()是设置 y 轴标签的命令
下图很好地解释了将数据可视化为图形的每个部分。
不同类型的分析:
有不同类型的分析,如下所述。
- 单变量:在单变量分析中,我们将使用单个特征来分析它的几乎所有属性。
- 双变量:当我们比较两个特征之间的数据时,这叫做双变量分析。
- 多变量:比较两个以上的变量称为多变量分析。
在下面的博客中,对于每个图,我将它们标记为(U)、(B)和(M),分别表示为单变量、双变量和多变量图。
讨论的情节:
以下是我将在后续主题中解释的情节列表。
I)散点图(B)
ii)配对图(M)
三)箱线图(U)
iv)小提琴情节(U)
v)分布图(U)
六)联合地块(U)和(B)
七)条形图(B)
八)线形图(B)
一、散点图:
就机器学习/数据科学而言,简单数据可视化最常用的图之一是散点图。该图显示了整个数据集中的每个点相对于任何 2/3 特征(列)的位置。散点图有 2D 版和 3D 版。2D 散点图是重要的/常见的,在这里我们将主要找到数据的模式/聚类和可分性。使用散点图的代码片段如下所示。
**plt.scatter(x,y)**
当我们直接使用 Matplotlib 中的散点图时,我们将得到一个类似于下图的图。我使用虹膜数据集来解释简单的散点图。
**plt.scatter(iris['sepal_length'],iris['sepal_width'])
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.title('Scatter plot on Iris dataset')**
在这里,我们可以看到所有的点都标记在它们相应的位置上,分别对应于它们的 x 和 y 值。让我们调整一下,看看我们是否可以得到不同颜色的点。
**plt.scatter(iris['sepal_length'],iris['sepal_width'],color=['r','b','g'])
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.title('Scatter plot on Iris dataset')**
这个看起来不错!但是颜色是根据它们在数据集中的呈现方式分配给点的。现在,如果我们能根据它们的分类标签给这些点上色,那该有多好。这里的分类标签是 Setosa、Virginica 和 Veriscolor。这就是 Seaborn 出现的地方,它有有效的可视化工具。
**sns.set_style("whitegrid")
sns.FacetGrid(iris, hue="species", size=4) \
.map(plt.scatter, "sepal_length", "sepal_width") \
.add_legend()
plt.show()**
万岁!!这个情节现在看起来很酷,只是简单地通过视觉化它,我们可以得出这样的结论,像 setosa 花与其他两个类很好地分开,并且在 virginica 和 versicolor 之间也有一些重叠。facetGrid 中的参数 hue 决定了每个数据点的颜色。这里,我们在色调中使用了物种列(相关要素/类),因此我们以这种方式对该图进行了着色。
这使得 seaborn 在可视化方面比 Matplotlib 更胜一筹。但是不要忘记,我们仍然在 seaborn 的地图函数上使用 Matplotlib 中的 plt.scatter。所以 seaborn 只是让视觉更吸引人。对于 3d 散点图,我们可以使用 plot.ly 来实现。但是有一种方法我们可以尝试,比如在两个变量之间绘制点,并根据第三个变量设置点的大小,我们分析了三个特征。
scatter plot 的文档链接
使用的数据集:虹膜数据集
二。配对图:
我们可以用 Matplotlib 为 2d 使用散点图,甚至为 3D,我们可以从 plot.ly 中使用它。当我们拥有 4d 或更多时,该怎么办?这是当从 seaborn 包的配对情节开始发挥作用。
假设我们在一个数据中有 n 个特征,配对图将为我们创建一个(n x n)图,其中对角线图将是对应于该行的特征的直方图,其余的图是 y 轴中每行的特征和 x 轴中每列的特征的组合。
下面提供了为 Iris 数据集实现的 pair plot 的代码片段。
**sns.set_style("whitegrid");
sns.pairplot(iris, hue="species", size=3);
plt.show()**
通过从 pair plot 获得图的高级概述,我们可以看到哪两个特征可以很好地解释/分离数据,然后我们可以使用这两个特征之间的散点图来进一步探索。从上面的图中,我们可以得出这样的结论,花瓣长度和花瓣宽度是可以很好地分离数据的两个特征。
因为我们将得到 n 个特征的 n×n 图,当我们有更多的特征时,比如 10 个左右,pairplot 可能变得复杂。因此,在这种情况下,最好的办法是使用降维技术将数据映射到 2d 平面,并使用 2d 散点图将其可视化。
pair plots的文档链接。
使用的数据集:虹膜数据集
三。箱线图:
这是一种可用于获取更多数据统计细节的绘图类型。最大值和最小值处的直线也被称为须**。胡须外的点将被推断为异常值。箱形图给出了第 25、50、75 个四分位数的代表。从箱线图中,我们还可以看到四分位间距(IQR) ,在这里将呈现数据的最大细节。它还让我们清楚地了解数据中的异常点。**
Image taken from link
箱线图可在 seaborn 图书馆获得。让我们跳到代码部分。这里 x 是要预测的变量,y 是独立特征。这些箱线图属于单变量分析**,这意味着我们仅使用一个变量探索数据,也就是说,我们只是检查特征 axil_nodes 对类生存状态的影响,而不是任何两个独立特征之间的影响。**
**sns.boxplot(x='SurvStat',y='axil_nodes',data=hb)**
使用箱线图,如上所述,我们可以看到有多少数据出现在第一个四分位数,有多少点是异常值等。从上述第 1 类的图中,我们可以看到中位数和第 1 个四分位数之间的数据很少/没有。特征 axil_nodes 中的类 1** 也有更多数量的异常点。关于离群值等的这些细节将帮助我们在将数据发送到模型之前做好准备,因为离群值会影响很多机器学习模型。**
使用的数据集:哈伯曼数据集。
四。小提琴情节:
violin 图可以推断为中间的箱线图和数据两侧的分布图(核密度估计)的组合。这可以给我们分布的细节,如分布是否是多模态的,偏斜度等。它也给了我们有用的信息,如 95%的置信区间。下图帮助我们从小提琴的情节中抓住一些重要的部分。
Image taken from Link
小提琴剧情也是来自 seaborn 包。代码很简单,如下所示。
**sns.violinplot(x='SurvStat',y='op_yr',data=hb,size=6)**
从上面的 violin 图中,我们可以推断出两个等级的中位数都在 63 左右,等级 2 的最大人数 op_yr 值为 65,而等级 1 的最大人数 op _ yr 值为 60 左右。第三个四分位数到中位数的点数比第一个四分位数的中位数少,依此类推。
使用的数据集:哈伯曼数据集。
动词 (verb 的缩写)分布图:
这是了解数据分布的最佳单变量图之一。在分析单个特征(输入)对因变量(输出)的影响时,我们会大量使用分布图。它也很容易在 seaborn 包中获得。这个图在一个图中给出了 pdf 和直方图的组合。
**sns.FacetGrid(hb,hue='SurvStat',size=5).map(sns.distplot,'age').add_legend()**
从上面的图中,我们可以看到,我们在特征“年龄”(输入特征)上创建了一个分布图,我们使用不同的颜色来表示生存状态(因变量/输出),因为它是要预测的类,我们可以看到它们的 pdf 之间有很大的重叠。尖锐的块状结构是直方图,平滑的曲线称为概率密度函数(PDF)。曲线的 pdf 可以帮助我们识别该特征的基本分布,这是数据可视化/EDA 的一个主要特点。
dist plot的文档链接。
使用的数据集:哈伯曼数据集。
不及物动词联合地块:
这是我的最爱之一,联合图的伟大之处在于,在一个图中,我们可以进行单变量和双变量分析。主图将为我们提供双变量分析,而在顶部和右侧,我们将获得所考虑的两个变量的单变量图。有多种选项可供选择,可以使用 seaborn joint plot 函数中的种类参数进行调整。下面显示的是 KDE(核密度估计)的类型,它在等高线图中表示,具有相同边界的所有点将具有相同的值,并且一个点的颜色取决于数据点的数量,即当很少的点具有该值时,它将是浅色的,随着点的增加,它将变得更暗。这就是为什么在这个数据集的中心会更暗,而在两端会更浅/更亮。
我们使用的两个最重要的图是双变量散点图和单变量分布图,因为我们在一个图中得到这两个图,如下所示,这将使我们的工作容易得多。
使用的数据集:虹膜数据集
七。条形图:
这是一个广泛使用的图,我们不仅在数据分析中,而且在许多领域的趋势分析中都会多次看到。虽然看起来很简单,但它在分析数据方面很强大,比如每周的销售额、产品收入、一周中每天的网站访问量等等。
代码非常简单,我们将使用 Matplotlib 中的 bar 函数来实现它。下面的代码将给出一个条形图,其中条形的位置用 x 值表示,条形的长度/高度用 y 值表示。
**plt.bar(x,y)**
我将向您展示我在当前工作中创建的一个图表,作为向我的管理层提供回顾性详细信息的主要成员,我需要详细说明之前用简单的表格数据完成的警报趋势分析。然后,通过使用相同的条形图,我的观众会更容易理解。
**a=np.arange(6)
w=0.15fig,ax=plt.subplots(figsize=(12,7),edgecolor='k')
p1=ax.bar(a,d,w,color='b')
p2=ax.bar(a-w,c,w,color='g')
p3=ax.bar(a+w,e,w,color='y')
ax.set_xticks(a)
ax.set_xticklabels(('Apr','May','June','July','Aug','Sep'))
ax.set_title('Alert trend')
ax.legend((p1[0],p2[0],p3[0]),('A','B','C'))
plt.xlabel('Month')
plt.ylabel('No of alerts received')#plt.grid()plt.show()**
这样,我们可以在一个很酷的图表中查看数据,并可以直接向他人传达细节。该图可能简单明了,但在数据科学应用中并不常用。我将在下面提供柱状图的文档,请使用几个参数来得到你想要的图。
八。线形图:
这是你能在两个变量之间的任何分析的角落里看到的图。线图只是一系列数据点上的值用直线连接起来。这个情节可能看起来非常简单,但它不仅在机器学习中有更多的应用,而且在许多其他领域中也有更多的应用。
代码非常简单,matplotlib 中的绘图函数很好地完成了线图的任务。
**plt.plot(x,y)**
我们称之为在一个图形内绘制多条线,如下所示,其中您需要添加多个 plt.plot()命令,每条线代表一个不同的颜色参数。
从使用 QQplots 进行分布比较,到使用 elbow 方法进行 CV 调整,以及使用 AUC 曲线分析模型性能,都可以使用折线图。
到目前为止,我们看到了一些广泛使用的方法,用于从数据中提取有用的信息/洞察力。
我们还可以使用一些可视化工具,将我们最终的信息/推论以剧情的形式传达给观众。让我们看看其中几个常用的。
热图:
热图是一种很好的可视化技术,用于比较任意两个变量/特征的值。seaborn library 的热图将创建一个类似网格的图,并带有一个可选的颜色条。我们为热图的每个元素提供了一个具有特定值的 2D 输入矩阵,它以与输入矩阵相同的形状精确地再现了输出图,并且每个图块根据矩阵的每个元素中提供给其对应图块的值进行着色。
这在矩阵较大的情况下非常有用,我们希望通过简单地查看使用的不同色调来确定哪个值更高、更低等等。不同公司的每周业绩图表可以用热图来绘制
在机器学习应用中,它可以用于表示模型的混淆矩阵,用于超参数调整以绘制 2 个不同超参数之间的误差值等。
Wordcloud:
Wordcloud 只不过是创建一个图像,其中包含一段/一串中不同大小的所有单词,根据该段中出现的频率而定。如果这个单词在给定的文章中出现的次数更多,它会显得更大更粗。
在你的命令提示符下输入下面一行来安装 wordcloud。
**pip3 install wordcloud**
这是最近在很多地方使用的,通过看到单词 cloud,我们可以像在一个段落中讨论的那样得出结论,而不用读太多。重复次数最多的单词将会比最少出现的单词显得更粗更大。
它可以与文本数据分析一起使用,例如,在执行情感分析和 SEO 优化时,在集群中找到共同的主题等。
Graphviz:
决策树算法是流行的非线性模型之一。它构建了一个树,其中每个分裂的条件/特征将基于信息增益或基尼不纯值来选择。
如果你想查看像线性回归这样的线性模型,你可以简单地使用 matplotlib/seaborn,而要可视化树,我们使用一个叫做 Graphviz 的特殊工具。你可以使用下面的命令来安装它,就像我们安装其他 python 包一样。
**pip3 install graphviz**
Sklearn 很好地实现了一个名为 export_graphviz 的函数,它可以帮助我们将决策树模型转换为点格式,这是 graphviz 工具所支持的。
参考: Sklearn 链接
Image taken from Sklearn
树形图:
这是在使用分层聚类技术(如凝聚聚类)时用来可视化所形成的聚类的方法。
这里点之间的每个链/链接,意味着它们属于同一个集群。当数据点的数量很大时,树状结构可能太复杂。
参考:链接到绘制树形图的程序
我认为这对于这篇博客来说已经足够了,这里讨论了各种可视化方法。如果我觉得缺少了什么,如果有必要,我会试着编辑或创建第二部分…
非常感谢你阅读我的博客直到这个结论,如果我占用了你的宝贵时间,我真的很抱歉!!。 发现有用就鼓掌示爱 。如果您还有 2 分钟时间,请给我留下反馈,我可以用它在接下来的日子里提高自己。这是我在互联网上的第一篇博客,如前所述,非常欢迎你的建设性反馈。
“我认为有一个反馈环非常重要,在这个反馈环中,你会不断思考你已经做了什么,以及如何才能做得更好。”
–埃隆马斯克(我的灵感;))
过得愉快,编码快乐:)!!!
- 萨纳特
电子邮件 ID:smartersanat@gmail.com
编辑:非常感谢应用人工智能团队从提交的 118 个博客中选择我的博客作为前 20 个特别提到的博客之一。链接
参考资料:
下面这些对我的博客帮助很大,我想通过提供参考来表达我的敬意。
1.)https://dev.to/skotaro/artist-in-matplotlib——某个我想知道的人——花了大量时间在谷歌上搜索“如何做”的问题
2.)https://www.aosabook.org/en/matplotlib.html
3.)https://www . fusioncharts . com/resources/chart-primers/heat-map-chart
4.)Sklearn 库。
5.)应用课程。
6.)维基百科。
7.)Imgflip.com 创造了迷因形象。