我从攻读计算机视觉和机器学习硕士学位中学到了什么
经验
如果你打算在计算机视觉或机器学习方面进行任何形式的高级研究,请阅读本文。你可能会发现一两件有用的东西。
约瑟夫·陈在 Unsplash 上的照片
我写这篇文章是为了反思我在攻读机器学习硕士学位时学到的东西。我不得不承认,我的研究有些部分有用,有些部分没用。
他的文章涵盖了我的经历和课程内容,但我相信其他大学的课程不会有太大的不同。因此,一些的读者可以将这篇文章作为一个窗口,了解机器学习和计算机视觉的硕士学位会带来什么。
除了我在学习期间学到的信息,我还将包括所获得的学术知识与我目前作为计算机视觉工程师的工作角色的相关性。
先决条件
机器学习的高级学位有几个选择的主题,反映了机器学习领域的发展方向。
机器学习的任何一门课程都有太多的内容要涵盖。因此,我攻读的理学硕士学位确保了学生在接受该课程之前具备以下先决条件。
- 很好地理解线性代数和微积分(微分/最优化)
- 基础水平统计和概率研究
- 编程语言背景
- 本科学习计算机科学、数学、物理或电子和机械工程
现在谈谈我从我的机器学习硕士那里学到的关键信息。
1.计算机视觉
让我从本课程中我最擅长的模块开始。
计算机视觉和深度学习研究是我真正感兴趣的机器学习领域。也许我被吸引到这个领域是因为技术发展的直接影响。
媒体对计算机视觉技术在过去几十年里取得的进步大加赞赏。面部识别系统的快速出现是不容错过的。在主要的国际机场、银行和政府机构很难找到面部识别系统。
我硕士期间的计算机视觉研究非常有条理。我们不期望你直接跳到实现和分析最先进的技术。
事实上,你后退了好几步。您从了解基本的图像处理技术开始,这些技术是在我们今天看到和使用的计算机视觉高级技术出现之前开发的。
在 Unsplash 上由 Gery Wibowo 拍摄的照片
在深度学习中,我们知道卷积神经网络的较低层从输入图像中学习低级模式,如线条和边缘。
但在卷积神经网络(CNN)引入计算机视觉之前,有基于启发式的技术用于检测感兴趣的区域和从图像中提取特征。
我的计算机视觉研究确保了我理解该领域的基础,获得了一些关于这些启发式技术如何工作以及在实际应用中如何使用的知识。
计算机视觉研究为我提供了传统机器学习技术的知识,以处理图像,提取特征并对从图像中获得的描述符进行分类。
以下是我在计算机视觉研究期间引入的几个关键主题和术语:
随意跳过定义。我把这些放在这里是为了给好奇的人提供一些信息…
- (尺度不变特征变换)SIFT :这是一种计算机视觉技术,用于生成图像关键点描述符(特征向量)。生成的描述符包含关于诸如边、角和斑点的特征的信息。该描述符可用于检测不同比例和失真的图像中的对象。SIFT 被用在诸如对象识别、手势识别和跟踪的应用中。这里有一个介绍这项技术的原始研究论文的链接。SIFT 的关键在于它的检测特征对于任何仿射变换都是不变的,例如缩放、平移和旋转。
- (梯度方向直方图)HOG :这是一种用于从图像中提取特征的技术。所提取的特征是从通过图像内的边缘和拐角提供的信息中导出的,更具体地说,是从图像内的对象中导出的。对这些技术的简单描述是,它识别图像内的边缘(梯度)、角和线的位置,并且还获得关于边缘方向的信息。HOG 描述符生成直方图,该直方图包含从图像中检测到的边缘分布信息和方向信息。这种技术可以在计算机视觉应用和图像处理中找到。这里有一个链接提供更多信息
- 主成分分析(PCA): 对特征丰富的数据集进行降维的算法。降维是通过将数据点从较高维度投影到较低平面来实现的,但仍然保持信息并使信息损失最小化。
其他值得一提的话题如下:
- 线性插补
- 无监督聚类(K 均值)
- 视觉单词包(视觉搜索系统)
在我学习的早期,我被期望开始开发基于计算机视觉的应用程序。对象分类是一个热门话题,也是一个相对容易获得一些基本知识和实现的话题。
在我的研究中,我的任务是在 Matlab 中开发一个视觉搜索系统。
Matlab 是一种为高效数值计算和矩阵操作而开发的编程语言,Matlab 库配备了一套算法和可视化工具。
过去在 JavaScript、Java 和 Python 方面的编程经验帮助我轻松掌握了 Matlab 编程语法,这样我就可以全心全意地专注于计算机视觉方面的研究。
更多信息…
要实现的视觉系统相当简单,它的工作方式是通过系统传递查询图像,然后系统产生一组与传递到系统中的查询图像相似的图像结果。
我应该提到,该系统包含一个存储图像的数据库,用于从中提取结果图像(q 查询图像,然后输出结果图像)。
视觉系统没有使用任何花哨的深度学习技术,而是前面提到的一些传统的机器学习技术。
您只需传递一个转换为灰度的 RGB 图像,然后对该图像应用一个特征提取器;此后,提取图像描述符并将其表示在 N 维特征空间上。
在这个特征空间中,通过计算两个 N 维点之间的欧几里德距离,可以计算出相似的图像。
事情开始变得严重…
理解计算机视觉不仅仅局限于处理图像;你被期望在视频上利用算法和技术。
请记住,视频只是图像序列,因此在输入数据的准备和处理方面,您并没有学到任何新东西。
如果你使用一个物体检测框架,比如 YOLO 、 RCNN 等,那么在一系列图像中的物体跟踪似乎是非常琐碎的。但是要认识到,研究计算机视觉不是使用预先训练好的网络和微调。它是关于理解这个领域本身是如何在这些年中发展的,获得坚实理解的最好方法是通过调查随着时间的推移而发展的各种传统技术。
因此对于目标跟踪的任务,引入了以下主题:
- 斑点跟踪器
- 卡尔曼滤波器
- 粒子过滤器
- 马尔可夫过程
作为计算机视觉工程师的相关性
老实说,在我目前的角色中,我还没有使用过任何传统的机器学习分类器,我也不认为我会很快使用。
但是,为了让您了解所提到的一些技术的相关性,有必要说明一下,自动驾驶汽车、车牌阅读器和车道检测器结合了前面讨论的一两种方法。
左图:布拉姆·范·奥斯特在 Unsplash 上拍摄的照片。右图: Trent Szmolnik 在 Unsplash 上拍摄的照片
2.深度学习
深度学习是计算机视觉研究的自然进展。
一些深度学习主题已经包含在计算机视觉模块中,而深度学习的其他主题是传统计算机视觉技术的扩展或改进。
深度学习主题的教学采取了与我的计算机视觉研究相似的道路,即在转向高级主题和应用程序开发之前,创建对该领域基础的坚实理解。
图片来自 kisina/Getty Images
深度学习研究始于对图像基本组成部分像素的理解。
您很快就会知道,数字图像是包含像素集合的网格。
在理解了图像的原子基础之后,您将继续学习图像是如何存储在系统内存中的。
framebuffer 是系统内存中像素存储位置的名称(没有多少 MOOCS 会教你这个)。
我也了解了照相设备是如何捕捉数字图像的。
我不得不承认,对智能手机相机如何捕捉图像有一些直觉是很棒的。
让我们快进到一些更酷的东西。
不了解卷积神经网络(CNN)就无法学习深度学习,它们是齐头并进的。
我的研究介绍了过去 20 年中 CNN 的引入和发展时间表(从 LeNet-5 到 RCNNs)以及它们在取代传统管道以完成典型计算机视觉任务(如对象识别)中的作用。
在我的研究中,介绍了在深度学习早期出现的不同 CNN 架构的探索。 AlexNet 、 LeNet 和 GoogLeNet 是案例研究,用于了解卷积神经网络的内部结构及其在解决目标检测、识别和分类等任务中的应用。
我学到的一项重要技能是如何阅读研究论文。
阅读研究论文不是你直接学到的技能。如果你对深度学习和一般的学习很认真,去信息和研究的来源总是一个好主意。利用深度学习框架提供的预训练模型相当容易。不过,高级研究希望您了解所呈现的每种架构的技术和组件的内在细节,这些信息只在研究论文中呈现。
以下是深度学习模块中涵盖的主题摘要:
请随意跳过这些定义。我把这些放在这里是为了给好奇的人提供一些信息…
- 多层感知器(MLP) :多层感知器(MLP)是几层感知器一个接一个地连续堆叠。MLP 由一个输入层、一个或多个称为隐藏层的 TLU 层以及一个称为输出层的最终层组成。
- 神经风格转移(NST): 利用深度卷积神经网络和算法从一幅图像中提取内容信息,从另一幅参考图像中提取风格信息的技术。在提取样式和内容之后,生成组合图像,其中所得图像的内容和样式源自不同的图像。
- 递归神经网络(RNN)和 LSTM :神经网络架构的一种变体,可以接受任意大小的输入,并产生随机大小的输出数据。RNN 神经网络结构学习时间关系。
- 人脸检测:这个术语指的是实现可以自动识别和定位图像和视频中人脸的系统的任务。面部检测存在于与面部识别、摄影和动作捕捉相关联的应用中。
- 姿势估计:从提供的数字资产,如图像、视频或图像序列中推断身体主要关节位置的过程。姿态估计的形式存在于诸如动作识别、人类交互、虚拟现实和 3D 图形游戏的资产创建、机器人等应用中。
- **物体识别:**识别与 a 类目标物体相关的过程。对象识别和检测是具有相似最终结果和实现方法的技术。尽管在各种系统和算法中识别过程先于检测步骤。
- **跟踪:**一种在一段时间内在一系列图像中识别、检测和跟踪感兴趣对象的方法。在许多监控摄像机和交通监控设备中可以找到系统内跟踪的应用。
- 目标检测:目标检测与计算机视觉相关联,描述了一种能够识别图像中期望的目标或身体的存在和位置的系统。请注意,要检测的对象可能出现一次或多次。
其他值得注意的主题和子主题包括神经网络、反向传播、CNN 网络架构、超分辨率、手势识别、语义分割等。
作为计算机视觉工程师的相关性
这基本上是我的面包和黄油。
迄今为止,我已经在边缘设备上集成了人脸检测、手势识别、姿势估计和语义分割模型,用于游戏目的。
在我目前的角色中,我实施、训练和评估了许多深度学习模型。如果你想在先进的公司里与许多前沿算法、工具一起工作,那么深度学习是一个可以让你处于人工智能实际商业发展前沿的领域。
3.论文
硕士论文的目的是使你能够利用你在研究中获得的所有技能、知识和直觉来设计一个基于现实生活的问题的解决方案。
我的论文是基于利用计算机视觉技术对四足动物(四条腿的动物)进行运动分析。我用来进行运动分析的关键计算机视觉技术是姿态估计。
这是我第一次接触深度学习框架的世界。我已经决定,我的运动分析解决方案将是一个基于深度学习的解决方案,利用卷积神经网络。
对于框架的选择,我在 Caffe 和 Keras 之间来回选择,但是我选择了 PyTorch,因为它有与任务相关的现成的预训练模型。Python 是我选择的编程语言。
以下是我通过论文学到的一些东西:
- 迁移学习/微调
- Python 编程语言
- C#编程语言
- 姿态估计的理论知识
- 关于如何使用 Unity3D 进行模拟的知识
- 使用谷歌云平台的体验
关于运动分析的更多信息
运动分析是一个术语,指从清晰的运动图像或代表运动顺序的图像序列中获取运动信息和细节的过程。
利用运动分析的应用和操作的结果是关于运动检测和关键点定位的最直接的形式细节。复杂的应用程序能够利用连续的相关图像逐帧跟踪对象。
如今,当在时间数据上使用时,运动分析及其各种应用形式提供了显著的益处和丰富的信息。
不同的行业受益于通过运动分析提供的结果和信息,如医疗保健、制造、机械、金融等行业。有各种各样的用例以及应用运动分析的方法来解决问题或者为消费者创造价值。
运动分析在整个行业中使用方式的多样性间接引入了运动分析的各种不同子集,如姿态估计、对象检测、对象跟踪、关键点检测和不同的其他子集。
关于论文的更多信息
本论文提出了一种利用计算机视觉和机器学习技术进行运动分析的方法。在所提出的方法中,使用合成四足动物图像的数据集来训练预训练的关键点检测网络。
关键点-RCNN 是 Pytorch 库中的一个内置模型,它扩展了原来的 Fast-RCNN 和Fast-RCNN的功能。论文中的方法修改了在 COCO 2017 对象检测和分割数据集上预先训练的关键点-RCNN 神经网络架构,并用合成生成的数据集重新训练最后一层。
通过扩展人体上具有 17 个关节的人的关键点检测的基线框架,我提出了该框架的扩展,以预测具有 26 个关节的几个生成的四足动物的主要关节位置。
论文结果片段
定量和定性评估策略用于显示改进的关键点-RCNN 架构在预测人工四足动物关键点时的视觉和度量性能。
如果你已经做到了这一步,我为你鼓掌…让我们结束这篇文章吧
结论
机器学习领域瞬息万变;我的课程内容与 2018-2019 年相关。在 2020 年,我们已经看到了对机器学习其他几个领域的巨大贡献。因此,如果你参加了机器学习课程,并且正在学习我在本文中没有提到的主题或学科领域,请不要感到惊讶。
别忘了,在人工智能中,不仅仅是你创建的模型需要学习,作为机器学习实践者,你必须跟上新的研究,所以要不断学习。
我希望这篇文章对你有用。
要联系我或找到更多类似本文的内容,请执行以下操作:
- 订阅我的 YouTube 频道 即将发布的视频内容 这里
- 跟我上 中
- 在 LinkedIn 上连接并联系我
我从全职到人工智能硕士生过渡的探索。
towardsdatascience.com](/took-a-masters-in-machine-learning-and-i-was-very-unprepared-7aba95f044a8) [## 我作为计算机视觉工程师的第一天
剧透:我引起轰动
towardsdatascience.com](/my-first-day-as-a-computer-vision-engineer-8b59750c79a0)
作为数据分析师,我在第一个项目中学到了什么?
第一步通常是具有挑战性的,然而,它通常是最令人兴奋的
图片提供:www.vippng.com/
当我 22 岁开始 Enka Analytics 的时候,我刚刚毕业。我完成了统计学和数学的毕业,接着是机器学习的认证课程。机器学习似乎很有趣。它包括摆弄数据,制作合适的模型,在部署了无数合适的算法后,试图获得最高的准确性。机器学习真正让我感兴趣的是它的应用。想象一下,根据过去的行为预测未来,制定数据驱动的战略,为任何企业节省数百万美元,通过预测人体内的细胞是否会变得恶性来拯救生命,发现新的资源和技术,提高全球人民的生活水平,等等!我对这项技术的能力有了一点了解。我们在这里谈论的是范式转换技术。
凭借有限的技能和热情的创业精神,我在 22 岁生日前夕离开了第一份工作,开始对这个行业进行更多的探索。不久后,我成立了自己的分析公司,命名为 Enka(不要与土耳其建筑公司混淆)。我独自一人,没有正式的伙伴或同事一起工作。幸运的是,我马上得到了我的第一个客户,我的一个亲戚,他从事卫生巾制造业务。这是一家初创公司,对行业来说相当先进。我叔叔和他的团队从一开始就专注于创建数据基础设施来提高业务效率,到他成为我的第一个客户时,已经创建了一个大型数据库。我以无限的热情接手了这个项目。当我写这篇文章的时候,几个月过去了,我的项目已经接近尾声。在这个过程中,我学到了一些宝贵的经验,我想与读者分享:
问正确的问题
对于任何提供服务的企业来说,最重要的是理解问题陈述,即客户面临的问题,客户想要解决的问题。这是任何项目的第一步。然而,说起来容易做起来难。大多数时候,客户面临的问题是非常普通的,不可量化的。例如,一般的问题陈述是,测量组织所雇佣的销售团队的生产力。这就满足了大多数人的要求,但是当涉及到赋予它一些实质内容时,分析师可能会想知道问题陈述的关键性能指标(KPI)是什么。如何判断销售团队是否高效?生产力的基准是什么?
有大量的数据,有数百万个观察值和多个列。如果目标不明确,很容易迷失方向。这就是为什么,有一个定义明确的问题陈述是非常重要的,这只有在客户和分析师之间有更深刻的理解时才有可能。分析师的工作是提出问题,帮助他从数据中得出有意义的答案。
了解客户所属的行业
有两种类型的分析公司。一个专门从事某一特定行业,另一个处理多个行业。我的公司属于后者。作为一名数据分析师/科学家,不太可能对每个行业都有所了解。然而,知识是有帮助的。了解某个行业有助于分析师将调查结果联系起来。事情开始变得更有意义,错误很容易被发现。根据问题陈述,数据分析师/科学家对数据可能呈现的内容以及潜在的原因有一个直观的想法。更重要的是,如果发现变量之间的关系在统计上是显著的,它也有助于区分相关性和因果关系。在我看来,这是数据分析有趣的地方。在这个旅程中,你可以了解不同的行业。
在进行分析时与客户保持联系
很多时候,分析师和客户之间存在沟通障碍。这是一个比听起来更大的问题。有时,客户所属的行业变化很快。如果分析师未能理解这些变化,结果可能会产生误导。解决这个问题的一个方法是与客户保持联系。因此,在需要时,可以根据客户的需求进行分析。此外,客户被认为是她所在领域的专家。她的专业知识与分析师的技能相结合,会产生更有意义的结果。让客户尽早参与也有助于不偏离轨道,因为意图和目标经常会被讨论。
做一名优秀的数据分析师,然后做一名优秀的数据科学家
数据科学似乎比数据分析更有吸引力。但是,后者是成为一名优秀数据科学家的敲门砖。如果你不是一个好的数据分析师,你永远不可能成为一个好的数据科学家。当我开始进入这个领域时,我犯了一个很大的错误,那就是直接跳入数据科学,而没有关注太多的数据分析。我艰难地认识到数据分析的重要性。如果输入数据是垃圾,模型将永远无法高效运行。此外,数据分析提供了对数据的隐藏见解。描述性和诊断性分析可用于识别数据中的模式,然后进一步补充模型构建(预测性和规定性分析)。数据分析还有助于分析师理解数据,获得关于数据的直觉,这在更高级的分析阶段进一步帮助分析师。
以精确有效的方式传达结果
我在第一个项目中面临的主要挑战之一是传达结果。如果客户不理解调查结果,那么调查结果和所有努力都将付诸东流。因此,有必要在这最后一节花更多的心思和精力。图表要尽量用,能一口气看懂就行。客户通常没有时间通读一份 10 页的报告。因此,调查结果应该尽可能精确,有必要的背景和不言自明的图表。它应该以故事的形式来组织。制作图表时,使用合适的调色板很重要。使用不吸引眼球的颜色会对报告产生负面影响。其次,图表不能太乱。它应该简单明了,容易传达调查结果。说起来容易做起来难。所以,这一节不可掉以轻心。
这些是我作为数据分析师在第一个项目中学到的许多事情中的一部分。这是一次辉煌的经历,充满了挑战和学习。我几乎每天都学到一些东西。这有时令人沮丧,但经过几分钟或几小时的头脑风暴,我最终找到了解决办法。
我喜欢 V1 熊猫的什么
熊猫 1.0.0 更新简介
来源:维基百科
毫无疑问,Pandas 已经成为 Python 社区中数据科学的重要组成部分。几乎所有的数据操作都以熊猫为基本步骤。2020 年,熊猫发布了它的 1.0.0 版本,让我撞见了它们的Documentation Page
并发现了很酷的功能。在所有的特性中,这里是我最喜欢的
将数据帧转换为降价
假设我们有这样一个数据框架(确保您使用的是 1.0.0 版或更高版本)
我每天都在使用 markdown(和 latex)来写报告、文章或手册。和桌子是非常重要的一部分。我几乎所有的作品都包含一个表格。把一个表格剪成.png
文件并不是我真正擅长的,而且文件更大。所以我总是以访问表格生成器告终。
我发现有一个DataFrame.to_markdown
方法真的很有帮助。我可以直接从 pandas 打印我的表格到 markdown 支持的文档。这是我最喜欢的。只要做一个pd.to_markdown()
,我就可以得到它的降价形式。
注意:你需要一个tabulate
库来完成。使用$ pip install tabulate
安装
降价格式结果中的 df
新数据类型
Pandas 会自动设置数据类型。但是,string
或除其扩展类型之外的任何非基本数据类型都将被转换为object
。
在熊猫 1.0.0 中,他们为string
和boolean
发布了自己专用的数据类型(之前用的是numpy
)。而且他们还让DataFrame.convert_dtypes
自动把数据类型改成最合适的。
看看下面的区别
已转换数据帧(左)和未转换数据帧(右)的数据类型
没有什么真正影响到我,因为我不太喜欢优化数据类型的使用。相反,我通常以矢量化或类似的方式结束,并将它们作为张量进行处理。
但是,显式地使用string
而不是object
将帮助我快速判断我的数据。
现在,让我们试试另一件事如何使用一些重新索引。观察数据类型是如何变化的。
仔细检查丢失的值。Pandas 默认情况下(在撰写本文时)将缺少的值更改为np.NaN
。
然而,熊猫 1.0.0 实际上支持NaN
数据类型,称为pd.NA
。当我们convert_dtypes
时,NaN
值将被转换成pd.NA
。参见下面的例子
如果您看到了差异,向未转换的数据帧中添加一个缺失值会将数据类型更改为object
。另一方面,转换后的 datframe dtypes 支持缺失值,因此它们不会更改数据类型。这使数据帧进入一致性。这是我长久以来一直在寻找的。
熊猫。那
Pandas.Na
是缺失值的 pandas 数据类型(通常称为NaN
)。正如我们之前演示的,默认情况下,pandas 将缺失值设置为 not as pd.NA
。这是因为 pandas 数据类型是基于 numpy 构建的,所以它是一个numpy.nan
。为了改变它,我们必须手动将数据类型从numpy
改变为pandas
(您可以使用convert_dtypes
)。
当我想选择pandas
数据类型而不是numpy
时,我想向您展示一个场景。比方说,我们有缺失的值。如果我们要通过一些特定的值来使用fillna
,那么NaN
发生了变化,而且还改变了数据类型。
现在,最重要的是,pandas 数据类型(在convert_dtypes()
之后)在某种程度上不能被改变。与前面的示例不同,用 string 填充整数缺失值可能会导致错误。这种稳健性正是我们在数据中所需要的。看看下面出现的错误
结论
Pandas 新的专用数据类型带来了与以前版本的对比差异。尽管在某些情况下使用不合适,但这些新类型是一个很大的进步。
将DataFrame
转换为 markdown 格式的新方法也对作者产生了很大的影响,尤其是在处理大量数据时。
熊猫 v1 更新还有很大的使用潜力。请看一下它的文档页面
通过分析 WhatsApp 聊天,我了解到
我们在日常 WhatsApp 聊天中留下的数据轨迹如何揭示深刻的见解
确实很难想象我们生活中有一天不使用 WhatsApp 至少一次。这就是这个应用在我们日常生活中的重要性。Whatsapp 为有朋友、家人和同事的群体提供了一个共存的绝佳平台。多年来,我们已经在应用程序中发出了数千条信息,阅读了数百万条信息。因此,我觉得分析这些信息会产生非常令人惊讶的结果,并给出我们生活中许多方面的细节,而且确实如此!!
简单的谷歌搜索让我找到了一些允许人们分析 Whatsapp 聊天记录的网站。我尝试了大部分的应用程序,我想建立一个小的应用程序,它将提供比现有的应用程序更多的分析,以及用户想要看到的东西。
- 该应用程序应该能够自动检测上传的聊天是否是一个群体,或者是否是两个人之间的聊天,并相应地显示相关的可视化效果,而不必单击任何其他按钮。用户只需上传聊天。
- 从用户的角度来看,消息、表情符号、媒体等的绝对数量几乎没有任何意义。因此,我的重点是在两个人的统计数据之间或与平均值之间提供良好的比较,这样更容易理解和可视化,也增加了使用这个分析器的兴奋感。
- 在用户想要放大到某个特定时间段的情况下,可以指定要分析的聊天持续时间。有这样一个输入帮助我理解了新冠肺炎对信息的频率和影响。
- 能够下载分析和可视化的报告,可以很容易地与他人分享。
考虑到这些,我用 shiny 和 R-Markdown 创建了一个仪表板。
你可以在这里找到我创建的仪表盘:【https://reubenjoseph13.shinyapps.io/Whatsapp_Analyzer/】
通过这篇文章,我想向你展示从一次聊天中可以提取的信息的深度。请随意浏览文章中的不同图片,这些图片大多不言自明。如果你想了解这个项目技术方面的更多细节,你可以在这里阅读。但是别忘了看这篇文章的结论部分。
1.通用图和图形—个人聊天和群聊都通用
基本求和
这些只是一些非常基本的对话总结,如消息总数、表情符号等,以及一些使用这些信息计算的平均值。收到消息的天数百分比可用于了解聊天的活跃程度。如果是个人聊天,此表会稍有变化,因为活动成员数量、名称更改次数等项目不适用。
群组聊天的汇总表
个别聊天的汇总表
基本可视化
和你朋友的小组在周末或工作日有更多的消息吗?你倾向于在一天中的什么时候发送更多的信息?谁是小组中最活跃的人?下面的观想将帮助我们回答这些问题。下面的图表显示,星期六是大多数邮件发送的时间,大多数邮件在晚上 10 点发送。
在单独聊天的情况下,还会进行词汇分析,并比较一个人使用的独特单词的数量。您可以将这些数据展示给总是回复“mm”或“k”的人:)
“最常用的表情符号”和“常用词”的图表显示了在小组中最活跃的 6 个人,只是为了了解聊天中发生了什么。为特定的个人寻找最常用的单词和表情符号的选项也在后面的阶段给出。
字云 也显示在个人聊天和群聊中(既针对一般的群组,也针对群组内的特定人)。这有助于描述正在发送的文本。云这个词在不同的群体和不同的人之间有很大的不同。
2.个别聊天的具体分析
如前所述,我试图提供这两个人之间各种统计数据的大量比较。对于个人聊天,有两个表—一个用于比较琐碎的数据,另一个用于非常有见地和更具分析性的数据。
这个表格非常简单明了。绿色用于突出显示较高的值,红色用于突出显示较低的值。如果两个人的值相同,则使用黄色。现在让我们看下一个有更深入分析的表格。
回复的时间是我们希望在朋友中检查的一个主要因素。回复的时间也是两人关系水平的一个指标,不同的人和某人聊天的时间会有很大的不同。这个值可能有点偏高,因为很多时候,晚上发送的消息的回复要到第二天才收到。
我们总是想知道自己是不是那个总是先发信息开始谈话的人。聊天数据可以告诉我们谁是对话的发起者,谁是对话的结束者。为了找到这一点,我不得不思考 WhatsApp 中的对话通常是如何发生的。当有人开始对话时,我们会在接下来的两天里不停地给对方发信息。有时,对话在那一刻就结束了,只交换了几条信息。几天甚至几周后,当其中一方开始发信息时,下一次对话就开始了。因此,当两个连续消息之间的间隔超过 2 天时,将开始新的对话。这就是信息如何被分组到不同的对话中。
找到夜晚和早晨发送信息的平均时间将会模糊地给出一个人的睡眠模式的概念。这里很明显我一般比我的朋友醒得早(或者至少我早上比她早查看我的 WhatsApp!)
3.群聊的具体分析
报表生成
仪表板还可以选择将分析结果导出为 HTML 文件,以便与朋友分享。这里的可以看到导出文件的示例。
结论
整个项目只是让我自己对数据分析和可视化有了更多的了解,帮助我理解了很多错综复杂的细节。这绝对是一个伟大的学习周期。我鼓励任何开始从事数据分析的人从事这样的项目。
与你的朋友比较各种统计数据,并就谁开始发送更多的消息和发送更多的消息与他们友好地开玩笑,这很有趣。其他朋友也跟我说,看看所有的对比表,挺有意思的。
这让我意识到,仅仅一次聊天就能挖掘出很多真知灼见。在分析一个人的几次聊天时,通过检查他通常在早上和晚上发送信息的时间以及他们的睡眠模式,了解他/她是否是对话的发起者,很容易找出这个人的信息模式?了解他们在特定群体中的活跃程度,这个列表是无止境的。这些见解将有助于描绘一幅人的本质的图画。
尽管 WhatsApp 坚称自己无法“阅读”我们的信息,但他们可以轻易获得信息发送时间、发送对象、阅读时间等数据。仅仅是一个人的这些数据就足以得到这个人的完整轮廓。如果我发现 WhatsApp 会将这些数据用于某些用途,那就不足为奇了。当你有一个非常有代表性的样本的如此丰富的数据的时候,不能得到信息的内容几乎不会是一个因素。这些见解肯定会被用于产品的开发,我希望它能保持下去。其他没有吹嘘端到端消息加密的消息平台将能够获得更丰富的数据集,天知道他们会用这些做什么!
研究这些数据让我意识到,当我们使用这些公司的产品时,我们向它们提供的数据是多么有价值。
仪表盘
希望你喜欢这个小项目,如果你想了解这个项目技术方面的更多细节,你可以在这里阅读。
如果数据自己可视化会怎样?
大自然如何组织隐藏的信息层
作者图片
“在这种复杂的多维数据环境中,可视化的作用将是提供识别这些(自然)现象的涌现模式和过程的能力的关键。可视化本身将变得有机,因为它需要适应模拟来自广泛来源的信息,从微观/有机到宏观/行星状态。”[1]
在将计算和算法设计方法应用于当代设计实践的过程中,计算机已经成为一种能够将设计者的逻辑转化为计算逻辑,从而实现抽象自动化的媒介。这种应用的例子包括生成印刷系统和参数化建筑实践,其中形式由参数值的自适应和模块化范围来指定,这些变量通过输入的数据流量来定义它们自己。计算允许规则的自动化和响应这些数据的表格的实时生成,从而在许多情况下挑战了先前持有的过程和产品之间的区别。
生成的抽象允许设计师超越任意的社会形式惯例。使用模拟复杂系统的模型导致模式的产生,这些模式是超越文化和社会影响的自然发生过程的结果。生成过程帮助我们理解世界,并提醒我们宇宙本身就是一个生成系统,千变万化,千变万化。因此,从自然中寻找不仅是描述性的,也是组织性的灵感是有意义的。
在我们对熟悉的解释模型的热切渴望中,我们冒着没有注意到我们自己的倾向和自然现象中固有的可能性之间的差异的风险[2]
大自然似乎留下了它的努力的证据,我们是这些努力的见证人,却忘记了这样一个事实:每一种模式都仅仅是运动中更长时间运作的快照,一种信息交换的快照。
演职员表:利根在的免费图片
时间的流逝被记录下来,例如,树木每年都会长出一个新的保护套。树的横截面以年轮的形式揭示了这些数据层,年轮是由于四季生长速度的变化而产生的。树木年轮在有明显冷热季节的环境中更明显。典型地,一个年轮记录了树生命中一年的流逝。年轮的宽度与特定年份的降雨量成正比。因此,一棵老树的年轮可以告诉我们古代的气候,不同大陆的年轮可以进行比较,以推断不同的气候条件。在某些贝壳和珊瑚上也可以看到类似的年轮。
对于一个信息设计师来说,这种按树序的 (dendron = tree,Chronos = time,logos = the science of) 现象可以被视为一种数据可视化,因为:
1。它通过视觉或经验传达量化信息,即树龄、当地气候条件等。
2。它以某种示意形式提取信息,包括信息单元的属性或变量,即环的数量、环的宽度等。
具有再生能力的自然似乎拥有一种类似于某些生殖艺术和设计实践的智能。树木在这方面的作用是作为数据收集文化探针,通过与环境的复杂互动,不仅包含而且传达留在树木上的印记。
类似地,例如一堆西红柿或草莓,虽然形状相似,但通过其可观察到的特征来指示成熟度。它们可以放在一个可见光谱上,在这种情况下,从硬到软,或从绿色到红色。由于它们的形状相同,信息容器被忽略,而里面的内容成为焦点。以这种方式比较一个西红柿和另一个西红柿,让人想起一种可视化技术,叫做“小倍数”,由爱德华·塔夫特推广。小倍数指的是许多具有相同比例和轴的图表,这些图表彼此相邻放置,因此易于相互比较。
(左-Rod Miles at FreeImages)(右-Simone Dalmeri at Unsplash )绣球花的颜色从蓝色到粉色不等,取决于它们生长的土壤类型,直接映射到土壤的 pH 值水平。
(左图 Unsplash 的 Adam niecioruk)一些地衣品种的颜色和纹理表明了空气污染的程度(右图- 作者的图片)这些铅笔看起来非常像直方图。
这样的例子本身就是独立的系统,它为我们提供了查询信息如何在交换时自动可视化的方法,而不需要外部的干预。当我想到这个想法时,我很快发现一个类似的主题已经被 Dietmar Offenhuber】理论化了,被称为“自记”或“索引可视化”。自记可视化肯定会根据数据的物理性和物质过程对数据进行重新想象,并为此勾勒出清晰的方法。物体留下的痕迹 变成了 可视化,而不是将数据抽象成隐喻。
Autographic vis 也植根于查尔斯·桑德斯·皮尔士的符号学,它将索引定义为"*一个对象与其在现实世界中的影响之间的因果联系:培养皿中染色的细菌培养物,环境中污染物的化学特征,书页上的磨损。索引将抽象的信息领域与身体经验联系起来。**【3】*然而,它们往往是反馈回路的符号,而不是整个系统本身的符号。另一方面,我提到的例子,建议将自动签名方法引向系统框架。正如 Tufte 将“数据-墨水”的最大化理论化,这一有机过程推测了“数据-能量”的最大化。数据既不会从一个集中的位置出现,也不会被可视化,而是随着时间的推移从许多因果循环的相互作用中出现。这种关于大数据的讨论方法可能会减少少数科技巨头对信息的垄断。
国内数据串流公司是一家数据可视化工作室,将这种技术应用于他们交流信息的方式。他们的项目经常使用人类作为一种手段来产生集体和参与性的数据可视化体验,这可能采取以数字为媒介的物理环境的形式。通过将图形和图表从它们熟悉的数字环境中取出,并放置在这些独特的物理环境中,信息呈现出一种雕塑或面向对象的结构。人们也更有可能分享他们的故事,一旦他们在个人电脑的“个人领域”之外经历过,在那里他们可以更容易地比较不同的有形价值。
例如,在一个名为情绪测试的项目中,他们只建立了一套简单的规则,即数据将由个人贡献者进行物理颜色编码。新兴的可视化是一个人口统计叙事的新兴地图,可以很容易地阅读,同时仍然保持其复杂性。数据及其抽象只有在人们的参与下才会具体化。随着每一次互动,作品吸收了更多的层次,并在某一点上跨越了从过程到实际产品的门槛,这可以被称为可视化。尽管如此,即使在那之后,它也不会停止成为一个过程。
它可以被描述为空间中的数据语言,而不是图表。这种数据空间的概念仍未被探索,其中一个图可以被放置在物理或数字世界中,以便它在空间和时间上展示自己。只有当人们意识到他们希望在受控环境中处于什么位置以及如何处于受控环境中时,信息才会出现,并且可视化是特定位置和参与者部分所独有的。在不同的背景下,艺术品会以不同的方式出现,从而展示模块化和短暂性的主题。这类项目提出了一个问题——数据生成者和数据设计者的角色必须是互斥的吗?
信息研究员韦斯利·威利特想象到 2033 年,自主智能体将如何被使用,以实时捕捉和可视化复杂的模式,从而真正模仿自然。他的设想是采用“Cetonia scarabs”的形式,可以部署成无人机群。每个机械昆虫都配备了嵌入式摄像头和传感器,显然可以调查、计算和记录几乎任何事情。据说,该集群还能够进行内部协调,以形成交互式图表、图形和可视化图表来显示数据。
如果处理得当,这种分散的设计过程可以成为可视化多样性和粒度的一种方式,否则很难做到这一点。它还可以减少将复杂莫测的事物可视化的劳动,比如互联网、加密货币或其他形式的超文本。
“如果数据的视觉表示与数字表示一致,则图形不会变形。那么数据的“视觉表现”是什么呢?在图形表面进行物理测量?还是感知的视觉效果?我们怎么知道视觉图像代表了潜在的数字?”[4]
我收集的更多例子:https://in . Pinterest . com/vivek m2/self-visualizing-information/
引文:
[1]利马·曼努埃尔,视觉复杂性:信息的映射模式(纽约:普林斯顿建筑出版社,2011)
【2】凯勒(1985)于米切尔·雷斯尼克,《了解生命》(麻省理工学院媒体实验室,剑桥:发表于《人工生命》第 1 卷,第 1-2 期,1994 年春)【https://web.media.mit.edu/~mres/papers/ALife/ALife.html
【3】奥芬胡伯,迪特尔马&奥尔坎·特尔汉,索引可视化——无数据信息显示(2015)
[4]塔夫特,爱德华·r .数量信息的视觉显示(切希尔:图形出版社,1983)
其他参考:
Anderson,Mally,探索去中心化:区块链技术和复杂协调,《设计与科学杂志》(麻省理工学院出版社,2019 年 2 月)【https://jods.mitpress.mit.edu/pub/7vxemtm3】T21(2019 年 5 月 20 日访问)
格兰特·大卫·博尔默,《数字文化的理论化》(纽约:塞奇出版有限公司;1 版 2018)
本杰明·布拉顿,《堆栈:论软件和主权》(伦敦:麻省理工学院出版社,2016 年)
本杰明·布拉顿,“后人类世的一些痕迹效应:加速论地缘政治美学”,《e-flux》,46 (2013) [后人类世的 https://www.e-flux.com/journal/46/60076/some-trace-effects-——加速论地缘政治美学/](https://www.e-flux.com/journal/46/60076/some-trace-effects- of-the-postanthropocene-on-accelerationist- geopolitical-aesthetics/)(2019 年 6 月 19 日获取)
Burnett,Kathleen,《走向超文本设计理论》(后现代文化 3.2,1993 年 1 月)http://PMC . iath . Virginia . edu/text-only/issue . 193/Burnett . 193(2019 年 6 月 19 日访问)
http://www.dataphys.org/list*&伊冯·詹森《物理可视化列表》(2012 年 7 月 6 日访问)*
加兰特,菲利普&埃伦·k·列维,《复杂性》(列奥纳多,第 36 卷,第 4 期,2003)页 259–267,JSTORwww.jstor.org/stable/1577312
加兰特菲利普什么是生成艺术?作为艺术理论语境的复杂性理论(第六届生成艺术会议,2003)
汉拉汉,帕特,《自我阐释现象》(斯坦福图形,2004 年 11 月)http://www . Graphics . Stanford . edu/~汉拉汉/talks/Self diagrating/(2019 年 6 月 28 日访问)
奥芬胡伯,迪特马尔,“自动签名可视化——在谷歌剑桥/波士顿奇演讲”(2019 年 3 月)https://www.youtube.com/watch?v=4_YNpx1R8i8(2019 年 6 月 28 日访问)
塔夫特,爱德华·r·展望信息(柴郡:图形出版社,1990)
沃尔多普,米契尔,《复杂性:在秩序和混乱边缘的新兴科学》(纽约:西蒙和舒斯特,1992)
维纳·诺伯特,《人类对人类的利用:控制论与社会》(伦敦:自由协会图书,1989)
如果 2016 年有更多年轻人投票会怎样?
如果 18-24 岁的年轻人参加了更多的投票,他们能改变选举结果吗?
几十年来,投票的年轻美国人(无论如何定义年轻)远远少于年长的美国人。这导致人们猜测,年轻人仅仅通过大量投票就可以改变美国大选的结果。考虑到这一点,我开始观察 2016 年是否会出现这种情况。具体来说,如果 18-24 岁的年轻人中有更多人投票,他们会改变选举结果吗?
众所周知,美国总统选举不使用民众投票,因此仅凭全国民调结果不一定能很好地预测结果会如何变化。选举人团意味着年轻选民的地理分布和他们的地区政治偏好都是相关的,而这两者都被国家数据所忽略。因此,我决定弄清楚如果更多的年轻人投票,各州的投票总数会有怎样的变化。
如果所有 18-24 岁的人都在 2016 年投票了会怎样?
利用各州的参与率,我能够计算出每个州 18-24 岁没有投票的人数。然后,利用每个州的投票后调查数据,我计算了每个州的每个候选人会有多少新选票。结果显示,希拉里·克林顿(Hillary Clinton)将赢得六个州,而不是唐纳德·特朗普(Donald Trump):亚利桑那州、佛罗里达州、佐治亚州、密歇根州、北卡罗来纳州和宾夕法尼亚州。这将使克林顿多获得 107 张选举人票,并以令人信服的 339 票对 199 票赢得选举团的胜利。
如果 18-24 岁的选民和 65 岁及以上的选民投票率相同会怎样?
当然,期望每个 18-24 岁的人都去投票是非常不现实的——没有哪个人口统计数据的投票率达到 90%,更不用说 100%了。也许一个更好的问题应该是——如果 18-24 岁的人和 65 岁及以上的人一样投票,会发生什么?
虽然结果不太引人注目,只是改变了两个州的结果,但这足以改变选举的结果。在这种情况下,佛罗里达州和密歇根州将由希拉里·克林顿而不是唐纳德·特朗普赢得。有了 45 张新的选举人票,希拉里将获得 277 票对 261 票的选举人团胜利。
结论
我们可以看到,如果每个 18-24 岁的人都投票,希拉里·克林顿会轻松获胜。也许这并不奇怪,因为没有人 100%参与。更有趣的结论是,18 至 24 岁的选民本可以通过与 65 岁及以上选民相同的投票率来改变选举结果,这是一个更现实的投票率。
这个最终图显示了上述每个场景中的胜利幅度,以及实际的 2016 年选举人团结果。
数据来源和假设
为了进行这项分析,我收集了投票后的民意调查数据,以及选民参与率和人口统计数据,全部按年龄分类。出口民调数据来自爱迪生研究公司,该公司为包括美国广播公司、美联社、哥伦比亚广播公司、美国有线电视新闻网、福克斯和全国广播公司在内的媒体财团进行出口民调。选民参与率和人口数据取自美国人口普查。数据操作和绘图是使用 python 中的 Pandas 和 Geopandas 完成的。我的笔记本和数据集可以在 Github 这里找到。
爱迪生收集了 29 个州的人口统计投票数据,以及全国人口统计投票偏好。他们收集了三个州 18-29 岁选民的投票数据,但没有收集 18-24 岁选民的数据。在这些州,我使用了 18-29 岁的数据。对于其余的 21 个州,我使用了全国 18-24 岁的投票偏好来代替州一级的数据。然而,值得注意的是,在这些没有州级 18-24 岁出口民调的州中,没有一个州是接近的——胜利的幅度从 12%(特拉华州,克林顿获胜)到 91%,平均胜利幅度为 29%。此外,当我添加额外的年轻选民时,这些州都没有改变获胜者,所以在这里使用全国数据应该不会影响结果。
此分析中的大假设是出口投票数据是准确的,因为在出口投票情况下很难实现代表性采样。如果那些愿意回答投票后调查的人和那些不想回答调查的人投了不同的票,结果可能会有偏差。此外,不清楚爱迪生使用了什么统计方法,所以不可能知道他们做了什么假设。幸运的是,人口普查数据非常全面,包含了所有 50 个州的大量选民参与和人口统计数据。此外,已经表明,如果选民投票率信息是错误的,那么它往往会高估投票,所以如果有什么,这种分析低估了年轻选民的潜在影响。
如果使用多个感受野进行图像修复会怎样?
综述:基于生成多列卷积神经网络的图像修复
大家好。好久不见!今天,我们将讨论另一篇名为“通过生成式多列 CNN(GM CNN)进行图像修复”的修复论文。本文使用的网络架构类似于我们在之前介绍过的那些论文。本文的主要贡献是对损失函数的一些修正。
简短回忆
正如我在之前的文章中提到的,如何利用图像中剩余像素给出的信息对于高质量的图像修复至关重要。图像修复的一个非常直接的意义是直接复制图像本身中找到的最相似的图像补丁,并粘贴在缺失的区域上。有趣的是,我们应该认识到 对于实践中的缺失区域 并没有“正确”的答案。在现实中,给定一个损坏/屏蔽的图像,您无法知道原始图像(地面真相)进行比较。于是,我们就有了这么 许多答案中缺失的领域 。
简介和动机
从以前的修复论文中,我们知道感受野对于图像修复是非常重要的。对于一个 3×3 的核,我们可以通过 调整扩张率来控制它的 感受野。如果扩张率是 1,我们就有一个 3×3 的感受野。如果扩张率是 2,我们通过跳过一个相邻像素得到一个 5×5 的感受野,依此类推。你可以参考我以前的帖子来了解更多的细节。这里, 如果我们采用 3×3、5×5 和 7×7 个具有扩展卷积的内核会怎么样?本文将其定义为多栏式结构。
在我之前的关于上下文注意力层的帖子中,搜索与缺失区域最相似的图像补片的过程被嵌入到生成器网络中(即,这个过程被用在训练和测试阶段)。在这项工作中,这一过程仅通过设计一个新的损失项在训练中使用。
由于对缺失区域没有“正确”答案的事实,逐像素重建精度损失项(即 L 1 损失)似乎不适用于图像修复。作者提出 基于丢失像素的空间位置对 L1 损失项进行加权。 靠近有效(剩余)像素的空间位置对于 L 1 损失应该具有更高的权重,因为它们对于重建具有更合理的参考,反之亦然。
解决方案(简而言之)和贡献
图一。该方法给出了一些修复结果。图片来自王怡等人的论文 [1]
在我看来,这篇论文遵循了我们之前讨论过的图像修复的趋势。首先,作者采用了具有扩张卷积的多分支细胞神经网络,而不是单分支细胞神经网络。 在三个不同的分支中使用三种不同的核大小,用于实现不同的感受野和提取不同分辨率的特征。
其次, 引入两个新的损失项来训练网络 ,即置信度驱动的重建损失和隐式多样化马尔可夫随机场(ID-MRF)损失。置信度驱动的重建损失是加权的 L 1 损失,而 ID-MRF 损失与由预先训练的 VGG 网络计算的特征块比较相关。我们已经谈到了 MRF 的损失。你可以参考它来简单回忆一下。
图 1 显示了所提出的方法的一些修复结果。您可以放大以更好地查看这些高质量的结果。
方法
图二。提议的网络架构。图片来自王怡等人的论文 [1]
图 2 显示了提出的生成多列卷积神经网络(GMCNN)的网络架构。如您所见,有一个多列发生器网络、两个鉴别器(全局和局部)和一个用于计算 ID-MRF 损耗的预训练 VGG19。
发电机网络中有三列,每列使用三种不同尺寸 的滤波器,即 3×3、5×5 和 7×7。请注意,这三列的输出被连接起来,馈入另外两个卷积层,以获得完整的图像。
一维 MRF 正则化
图 3。使用不同的相似性度量搜索最近的邻居来修复结果。(a)使用余弦相似性的修补结果;( b)使用建议的相对相似性的修补结果;( c)地面真实图像(红色矩形突出显示填充区域)。图片来自王怡等人的论文 [1]
简单地说,对于 MRF 目标,我们希望 最小化生成的特征和由预训练网络 计算的地面真实值的最近邻特征之间的差异。在大多数以前的工作中,余弦相似性度量被用来搜索最近的邻居(你可以阅读我以前的帖子[ 这里 ]来回顾余弦相似性度量)。然而,这种相似性度量通常为不同的生成特征补丁提供相同的最近邻,并导致模糊的修复结果,如图 3(a)所示。
为了避免使用余弦相似性度量可能导致的模糊完整图像,作者采用了相对距离度量,修复结果如图 3(b)所示。你可以看到完成的图像具有更好的局部精细纹理。
让我们来谈谈他们是如何进行相对距离测量的。设 Y (hat)_ g 为缺失区域的生成内容,y(hat)^lg和 Y ^ L 为预训练网络第 L 层的特征。对于分别从y(hat)^lg和 Y ^ L 中提取的特征面片 v 和 s ,计算从 v 到 s 的相对相似度,
其中 mu (。, .)是余弦相似度。 r 属于 Y ^ L 不包括 v 。 h 和ε为正常数。显然,如果 v 比其他特征面片与 s 更相似,RS( v , s )就会大。你也可以考虑一下,如果 v 有两个相似的补丁 s 和 r ,那么 RS( v , s )就会小。我们鼓励在缺失区域之外找到类似的补丁。
然后,RS 归一化如下。
最后,计算出y(hat)^l_g和 Y ^ L 之间的建议 ID-MRF 损耗。
其中参数 max RS(bar)( v , s )表示 s 是 v 的最近邻,而 Z 是归一化因子。如果我们考虑所有生成的特征片都接近特定特征片 s 的极端情况,那么 max RS(bar) ( v , r )将会很小,因此 ID-MRF 损失将会很大。
另一方面,如果 Y ^ L 中的每个 r 在y(hat)^l_g中有自己的最近邻居,那么最大 RS(bar) ( v , r )将会很大,因此 ID-MRF 损失将会很大这里, 的主要思想是强制/引导生成的特征面片具有不同的最近邻,从而生成的特征具有更好的局部纹理 。
与之前的工作相同,作者使用预训练的 VGG19 来计算 ID-MRF 损耗。注意,中间层 conv 3_2 和 conv 4_2 分别代表结构和语义特征。
作者声称,这种损失与最近邻搜索有关,并且仅在训练阶段使用。这不同于在测试阶段搜索最近邻居的方法。
空间变化重建损失
所提出的空间变量重建损失实际上是加权的 L 1 损失。有许多方法来决定权重,作者使用高斯滤波器来卷积掩模以创建加权掩模,用于计算加权的 L 1 损失。感兴趣的读者可以参考的论文了解详情。加权 L 1 损失的主要思想是靠近有效像素的缺失像素比远离有效像素的缺失像素受到更高的约束。因此,位于缺失区域中心的缺失像素应该具有较低的 L 1 损失权重(即较少约束)。
对抗性损失
与之前的工作类似,作者采用了改进的 WGAN 损失以及局部和全局鉴别器。再次强烈推荐感兴趣的读者阅读论文。
最终损失函数
这是用于训练建议模型的最终损失函数。类似于大多数修复纸,加权的 L 1 损失(第一损失项)的重要性是 1。λmrf和λadv是控制局部纹理 MRF 正则化和对抗性训练的重要性的参数。
实验
作者在 5 个公共数据集上评估了他们的方法,即 Paris StreetView,Places2,ImageNet,CelebA 和 CelebA-HQ 数据集。在训练过程中,所有图像的大小都调整为 256×256,最大的中心孔大小为 128×128。供你参考,他们的发电机网络有 12.562 米的参数。在 GPU 上测试 256×256 和 512×512 大小的图像,每幅图像分别需要 49.37 ms 和 146.11 ms。
图 4。巴黎街景(上)和 ImageNet(下)的定性比较。(a)输入图像(b)上下文编码器© MSNPS (d)上下文注意(e)建议方法。图片来自王怡等人的论文
图 4 显示了巴黎街景和 ImageNet 数据集的定性比较。请放大以更好地查看修复结果。显然,所提出的方法 GMCNN 给出了具有最佳视觉质量的修复结果。如果你对更多的修复结果感兴趣,请参考论文或他们的项目网站。
表 1。五个数据集的定量结果。王怡等人的数据来自他们的论文 [1]
正如我以前的帖子和这篇帖子开头提到的, PSNR 与像素重建精度有关,可能不适合评估图像修复 。研究人员仍然报告 PSNR 和 SSIM 供读者参考,因为这些数字指标是所有图像处理任务的基础。如表 1 所示,所提出的方法在五个数据集上实现了相当甚至更好的 PSNR 和 SSIM。
消融研究
表二。巴黎街景数据集上不同网络结构的定量结果。王怡等人的数据来自他们的论文
图 5。巴黎街景数据集上不同网络结构的定性比较。(a)输入图像(b)单个编码器-解码器©粗到细(d)在所有 3 个分支中具有固定感受野的 GMCNN(e)具有变化感受野的 GM CNN。图片来自王怡等人的论文 [1]
作者评估了图像修复任务中使用的不同网络结构的性能。我们已经介绍了编码器-解码器结构和粗到细结构。对于他们实验中由粗到细的结构,没有使用上下文注意。对于在所有 3 个分支中具有固定感受野的 GMCNN,他们使用 5×5 大小的滤波器。对于具有不同感受野的 GMCNN,在 3 个分支中分别使用 3×3、5×5 和 7×7 滤波器。定量和定性结果分别见表 2 和图 5。显然,具有不同感受野的 GMCNN 提供了最好的修复结果。
除了网络结构的选择和多个感受野的使用,作者还研究了两个提出的损失项的有效性,即置信度驱动的重建损失和 ID-MRF 损失。
图 6。巴黎街景数据集上不同重建损失的定性比较。(a)输入图像(b)空间折扣损失©建议的置信度驱动的重建损失。图片来自王怡等人的论文
图 6 显示了不同重建损失的视觉比较,即空间折扣损失和建议的置信度驱动重建损失。注意,空间折扣损失基于丢失像素的空间位置来获得权重掩模,而提出的置信度驱动的重建损失通过用高斯滤波器多次卷积掩模图像来获得权重掩模。作者声称他们的信心驱动重建损失效果更好。从我自己的经历来看,两次重建损失都差不多。也许你可以试一试。
表 3。在巴黎街景数据集上使用不同 lambda_ mrf 的量化结果。王怡等人的数据来自他们的论文【1】
图 7。在巴黎街景数据集上是否使用 ID-MRF 损失的定性比较。(a)输入图像,( b)使用 ID-MRF 损失的修补结果,( c)不使用 ID-MRF 损失的修补结果。图片来自王怡等人的论文 [1]
图 8。在巴黎街景数据集上使用不同 lambda_mrf 的 ID-MRF 损失的定性比较。(a)输入图像(b)λ_ MRF = 2©λ_ MRF = 0.2(d)λ_ MRF = 0.02(e)λ_ MRF = 0.002。图片来自王怡等人的论文
更重要的是,ID-MRF 损失项是本文最有力的主张。因此,作者显示了这一损失项的重要性,定量结果列于表 3。图 7 显示了使用 ID-MRF 损失和不使用 ID-MRF 损失训练的模型之间的差异。我们可以看到,ID-MRF 的使用可以增强所生成像素的局部细节。此外,图 8 显示了使用不同的λ_MRF来控制 ID-MRF 损失的重要性的效果。您可以放大以更好地查看结果。个人觉得修复效果差不多。根据表 3,lambda_ mrf = 0.02 在 PSNR 和视觉质量之间提供了良好的平衡。
结论
总之,本文的主要创新点是 ID-MRF 损失项,以进一步增强生成内容的局部细节。这种丢失的主要思想是引导生成的特征面片在丢失区域之外寻找它们的最近邻作为参考,最近邻应该是多样的,这样可以模拟更多的局部细节。
多个感受野(多列或多分支)的使用是由于感受野的大小对于图像修补任务很重要。由于局部相邻像素缺失,我们不得不借用远处空间位置给出的信息来填充缺失的像素。我想如果你关注过我之前的帖子,你就不难理解这个想法了。
使用加权的 L 1 损失也是由于缺少区域没有“正确”答案的事实。对于那些更靠近丢失区域边界的丢失像素,它们相对地受到附近有效像素的约束,因此应该给 L 1 损失分配更高的权重。另一方面,对于位于缺失区域中心的缺失像素,它们应该受到较少的 L 1 约束。
外卖食品
参考我在上面的结论,我希望你能理解提出的 ID-MRF 损失的含义,因为这是本文的核心思想。对于另外两个观点,即多栏结构和加权的 L 1 损失。实际上,如果你关注过我以前的帖子,我想你可以很好地理解背后的原因。我会说,多重/各种感受野的概念是深度图像修复中的常见做法。
对于加权的 L 1 损失,从我自己的经验来看,我认为并不能带来修复性能的明显提升。当然,实现加权 L 1 损失的方法有很多。如果你对这个感兴趣,你可以试一试。我也会继续做这方面的实验!😃
下一步是什么?
在我的下一篇文章中,我将谈论如何处理不规则的口罩。到目前为止,我们已经介绍了几种著名的深度图像修复方法。然而,它们主要集中于规则的掩模(通常是一个大的中心矩形掩模或者有时是多个小的矩形掩模)。所以,我们来看看最近研究人员是如何处理不规则口罩的。
如果你对图像修复的深度生成模型感兴趣,我强烈推荐你浏览我以前所有的帖子。希望你们喜欢:)
参考
[1],,,齐,,沈,贾亚亚,生成多列卷积神经网络图像修复, Proc .神经信息处理系统,2018。
再次感谢你阅读我的帖子!如果您有任何问题,请随时给我发电子邮件或在这里留言。欢迎任何建议。系统学习对我们来说极其重要。非常感谢,下次再见!😃
如果只训练了批量归一化图层呢?
你可能会感到惊讶,这很有效。
卡西·乔希在 Unsplash 上的照片
拿我来说,我绝不会把我的钱押在这上面。
最近,我阅读了由 Jonathan Frankle、David J. Schwab 和 Ari S. Morcos 撰写的论文“训练 BatchNorm 和 Only BatchNorm:关于 CNN 中随机特征的表达能力”,该论文最近在 arXiv 平台上发布。这个想法立刻引起了我的注意。到目前为止,我从未将批量标准化 (BN)层视为学习过程本身的一部分,只是作为深度网络收敛和稳定的辅助手段。几个实验之后,我大错特错了。在下文中,我将介绍我在复制这篇论文的结果时所采取的措施,以及我从中学到的东西。
更详细地说,我使用 Tensorflow 2 Keras API 成功地再现了论文的主要实验,得出了类似的结论。也就是说,ResNets 可以通过仅训练批量归一化图层的伽马(γ)和贝塔(β)参数,在 CIFAR-10 数据集中获得令人满意的结果。从数字上看,我使用 ResNet-50、101 和 152 架构获得了 45%、52%和 50%的顶级精度,这远远算不上很好,但也远非随机。
在下文中,我概述了批处理规范化的概念、其好处背后的常见解释、我使用的代码以及获得的结果。最后,我对结果及其相关性进行了讨论。
最近,这项工作被刊登在了 deeplearning.ai 的 Batch 新闻简报上。
批量标准化
简而言之,批量归一化层估计其输入的均值(μ)和方差(σ)并产生标准化输出,*即,*输出具有零均值和单位方差。在实践中,这种技术有意义地提高了深度网络的收敛性和稳定性。此外,它使用两个参数(γ和β)来转换和调整输出。
作为该层的 x 输入和 z 输出, z 由以下公式给出:
图 1:批量标准化表达式
虽然μ和σ参数是根据输入数据估计的,但γ和β是可训练的。因此,反向传播算法可以利用它们来优化网络。
如前所述,这种操作可以显著提高网络训练的速度,并改善其对保留数据的性能。而且,它没有禁忌症。出于这个原因,大多数模型大量使用它,经常在所有 Conv-ReLU 操作之间,形成“Conv-BN-ReLU”三重奏(及其变体)。然而,尽管这是最常见的层之一,其好处背后的原因在文献中有很多争论。这里总结了三种主要给出的解释。
*编辑:*在某些情况下,批量定额确实有禁忌症。最近的工作提高了人们的认识,尽管提高了收敛性,批量规范严重影响训练速度。特别是,当跨多个 GPU 和设备进行训练时,在不影响并行性能的情况下计算批量统计数据是一个巨大的挑战。出于这个原因,几位作者提出了替代方案,如自归一化网络甚至无归一化网络。这些工作旨在保留批处理规范的好处,同时避免训练期间数据点之间的任何依赖。
**内部共变移位:**简单来说,如果输出具有零均值和单位方差,则下一层基于稳定输入进行训练。换句话说,它防止输出变化太大。虽然这是最初的解释,后来的著作发现与证据相矛盾,否定了这个假设。简而言之,如果你训练 VGG 网络(1)没有 BN,(2)有 BN 和(3)有 BN 加上人工协方差偏移,方法(2)和(3)仍然优于(1),尽管人工协方差偏移被添加到网络中。
输出平滑: BN 也被认为是平滑优化景观,减少损失函数的变化并限制其梯度。更平滑的目标训练更可预测,更不容易出现数字问题。
**长度方向解耦:**一些作者认为 BN 是优化问题的改进公式,因此可以扩展到更传统的优化设置。更详细地说,BN 框架允许独立地优化参数的长度和方向,从而提高收敛性。
总之,这三种解释都集中在批处理规范化的规范化方面。相比之下,我们将着眼于 BN 的移动和缩放点,由γ和β参数实现。
复制纸张
如果一个想法是好的,它应该对实现和超参数的选择有弹性。在我的代码中,我使用 Tensorflow 2 和我自己选择的超参数尽可能简单地重新创建了主实验。更详细地说,我测试了以下命题:
ResNet 型号在 CIFAR-10 上可以达到体面的结果除了批次归一化参数外所有重量都锁定。
因此,我将使用 Keras 的 CIFAR-10 和 ResNet 模块以及对 CIFAR-10 数据集的总体建议,即分类交叉熵损失和 Softmax 激活。我的代码下载数据集和随机初始化的 ResNet 模型,冻结不需要的层,并使用 1024 个图像的批量大小训练 50 个时期。您可以检查下面的代码:
在上面的代码中应该注意一些事情:
- Keras API 只有 ResNet-50、101 和 152 型号。为了简单起见,我只用过这些。如果您想深入了解,请参考本指南了解整个 ResNet 架构的定制实现。
- ResNet 模型对γ参数使用“一”初始化策略。在我们有限的训练场景中,这过于对称,无法通过梯度下降来训练。相反,如论文中所建议的,使用“he_normal”初始化。为此,我们在训练前手动重新初始化批量标准化权重。
- 作者使用 128 幅图像的批量大小和动量为 0.9 的 SGD 优化器训练了 160 个时期。学习率最初设置为 0.01,并在时期 80 和 120 预定为 0.001 和 0.0001。对于这样一个幼稚的想法,我发现这太具体了。取而代之的是,我使用了 50 个纪元、1024 的批量、普通的 Adam 和 0.01 的固定学习率。如果这个想法是好的,这应该不是一个问题。
- 作者也使用了数据扩充,而我没有。同样,如果这个想法是好的,这些改变都不会是一个大问题。
结果
以下是我使用上述代码获得的结果:
ResNet 模型的训练精度仅训练批量归一化图层
ResNet 模型的验证准确性仅训练批处理规范化图层
从数字上看,这三个模型分别达到了 50%、60%和 62%的训练精度以及 45%、52%和 50%的验证精度。
为了更好地理解模型的表现,我们应该始终考虑随机猜测的表现。CIFAR-10 数据集有十个类。因此,随机地,我们有 10%的机会是正确的。以上方法比随机猜测要好五倍左右。因此,我们可以认为他们有不错的表现。
有趣的是,验证准确性在十个时期后才开始增加,这是一个明显的迹象,即对于前十个时期,网络只是尽可能地过度拟合数据。随后,验证性能显著提高。然而,它每五个时期变化很大,这表明该模型不是很稳定。
在论文中,图 2 显示他们实现了大约 70%、大约 75%和大约 77%的验证准确性。考虑到作者做了一些调整,使用了定制的训练计划,并采用了数据扩充,这似乎很合理,与我的发现一致,证实了假设。
使用一个 866 层的 ResNet,作者达到了大约 85%的准确率,这仅比通过训练整个架构可达到的大约 91%低几个百分点。此外,他们测试了不同的初始化方案、架构,并测试了解冻最后一层和跳过连接,这导致了一些额外的性能增益。
除了准确性,作者还研究了γ和β参数的直方图,发现通过将γ设置为接近零的值,网络学会了抑制每个 BN 层中大约三分之一的所有激活。
讨论
此时,你可能会问:为什么会这样?首先,很好玩:)第二,BN 层是司空见惯的,但我们对它们的作用还是只有肤浅的了解。我们知道的是它们的好处。第三,这种调查让我们更深入地了解我们的模型是如何运作的。
我不相信这本身有实际应用。没有人会冻结他们的层,把这一切都留给 BNs。然而,这可能会激发不同的训练计划。也许像这样训练网络几个时期,然后训练所有权重可能会导致更好的性能。相反,这种技术对于微调预先训练的模型可能是有用的。我也可以看到这个想法被用来削减大型网络的权重。
这项研究最让我困惑的是,我们都忽略了这两个参数。至少我从来不介意这两者。我记得只看到一个关于它的讨论,它认为在 ResNet 块上用“零”初始化γ是好的,这样可以迫使反向传播算法在早期使用更多的跳过连接。
我的第二个问题是关于 SELU 和塞卢激活函数,它们具有自我规范化的特性。这两个函数都使批处理规范化层变得过时,因为它们在训练期间会自然地规范化它们的输出。现在,我问自己,这是否抓住了批处理规范化层的全部。
最后,假设还是有点原始。它只考虑了 CIFAR-10 数据集和非常深的网络。如果这可以扩展到其他数据集或解决不同的任务,如仅 Batchnorm 的 GAN,则它是开放的。此外,我会很有兴趣看到一篇关于γ和β在完全训练好的网络中的作用的后续文章。
如果你对这篇文章有任何问题,欢迎评论或联系我。如果你是新手,我强烈推荐订阅。对于数据和 IT 专业人员来说,中型文章是 StackOverflow 的完美组合,对于新手来说更是如此。注册时请考虑使用我的会员链接。
感谢阅读:)
考试成绩不呈正态分布怎么办?
数据转换-使用 Python Scikit 实现标准化和规范化-学习
通常,当我告诉你一个学生得了 90 分,你会认为这是一个非常好的学生。相反,如果我说分数是 75,这可能意味着这个学生可能是平均水平。然而,作为一名数据科学家/分析师,我们至少需要立即问两个问题:
- 满分是 100 吗?
- 这个班的分数分布如何?
第一个问题很重要,也许每个人都会问,因为 90/150 并不比 75/100 好。第二个问题有点微妙,可能只有“数据人”才会有这种敏感性。
事实上,为了确保考试结果在班级中呈正态分布,通常会选择如下试题:
- 基本和简单的问题— 70%
- 需要对知识有深刻理解的扩展问题— 20%
- 需要用足够的知识和一些洞察力来解决的难题——10%
如果我们有 100%容易的题或者 100%难的题呢?如果是这样的话,我们很可能在一个类中得到非正态分布的结果。
为什么我们需要标准化数据?
照片由 SamuelFrancisJohnson 在 Pixabay 上拍摄
然后,我们现在有了我们的主要话题。我在一所大学当了 5 年家教。有时不能保证考题完全符合上述比例。为了确保对所有学生都公平,换句话说,没有太多的学生不及格或太多的学生得了 A,有时我们需要将分数归一化,以确保它遵循正态分布。
此外,当我们想要比较来自不同大学的学生,或者我们想要汇总多次考试的结果时,标准化也非常重要。
为了演示的目的,让我们假设我们有 5 个不同的考试。因为我们需要随机生成期望分布,所以需要以下导入。
import numpy as np
import pandas as pd
import matplotlib.pyplot as pltfrom scipy.stats import skewnorm # used to generate skewed dist
1.满分是 100。太多基本问题
ex1 = np.array(skewnorm.rvs(a=-10, loc=95, scale=20, size=200)).astype(int)
2.满分是 100。太多难题了
ex2 = np.array(skewnorm.rvs(a=5, loc=30, scale=20, size=200)).astype(int)
3.满分是 100。正态分布
ex3 = np.random.normal(70, 15, 200).astype(int)
ex3 = ex3[ex3 <= 100]
4.满分是 50。正态分布
ex4 = np.random.normal(25, 7, 200).astype(int)
5.满分是 200。正态分布
ex5 = np.random.normal(120, 30, 200).astype(int)
让我们使用 Seaborn distplot
将它们绘制在一起。
plt.figure(figsize=(16,10))
sns.distplot(ex1)
sns.distplot(ex2)
sns.distplot(ex3)
sns.distplot(ex4)
sns.distplot(ex5)
plt.show()
这 5 种不同的考试有完全不同的分布。当我们得到这样一个数据集时,我们无法直接比较它们。
最小-最大归一化
最小-最大归一化的基本思想是将所有值归一化到区间[0,1]中。做到这一点相当容易。
from sklearn import preprocessingmin_max_scaler = preprocessing.MinMaxScaler()
ex1_norm_min_max = min_max_scaler.fit_transform(ex1.reshape(-1,1))
ex2_norm_min_max = min_max_scaler.fit_transform(ex2.reshape(-1,1))
ex3_norm_min_max = min_max_scaler.fit_transform(ex3.reshape(-1,1))
ex4_norm_min_max = min_max_scaler.fit_transform(ex4.reshape(-1,1))
ex5_norm_min_max = min_max_scaler.fit_transform(ex5.reshape(-1,1))
请注意,我们需要将 NumPy 数组转换成向量,然后才能对它们进行规范化。因此,最简单的方法是将它们重新整形为列向量reshape(-1, 1)
。
在它们被规格化后,我们不需要把它们转换回一维数组来可视化。下面是归一化后的直方图。现在更有信心把 5 个不同的考试结果放在一起。
z 分数标准化
Z-Score 是另一种常用的技术。它被称为标准化而不是规范化,因为它在两个方面“标准化”了数据:
- 对数据进行去均值处理,使所有标准化数据的均值等于零。
- 通过除以标准偏差来重新调整数据,以便数据分布根据偏离平均值的程度而“扩大”或“缩小”。
因此,我们可以这样计算。
from sklearn import preprocessingex1_scaled = preprocessing.scale(ex1)
ex2_scaled = preprocessing.scale(ex2)
ex3_scaled = preprocessing.scale(ex3)
ex4_scaled = preprocessing.scale(ex4)
ex5_scaled = preprocessing.scale(ex5)
可以看出,Z 分数标准化不仅规范了考试结果,而且重新调整了考试结果。
摘要
在本文中,考试被用作例子来解释为什么我们需要标准化或规范化数据集。事实上,我见过很多学习者和数据科学的学生是真正的算法爱好者。他们可能知道许多不同类型的数据挖掘和机器学习算法。但是,我要说的是,大多数时候数据转换比选择算法更重要。
因此,我还演示了如何使用 Python Sci-kit Learn 库来轻松地规范化/标准化数据。希望对刚刚进入数据科学和数据分析领域的人有所帮助。
本文中使用的所有代码都可以在这个 Google Colab 笔记本中找到。
最小-最大标准化和 Z 分数标准化
colab.research.google.com](https://colab.research.google.com/drive/1L9xlldqKKXPrfatlAHDfRGU4Zcmom2fq?usp=sharing) [## 通过我的推荐链接加入 Medium 克里斯托弗·陶
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@qiuyujx/membership)
如果你觉得我的文章有帮助,请考虑加入 Medium 会员来支持我和成千上万的其他作者!(点击上面的链接)
脸书新的数据电缆项目将对南部非洲产生什么影响?
南非共和国🇿🇦比勒陀利亚——照片由雷切尔·马丁在 Unsplash 上拍摄
赶上南部非洲🌍
F acebook 与合作伙伴如中国移动国际、 MTN 全球连接、 Orange 、埃及电信、沃达丰和西印度洋有线电视公司(WIOCC) 最近宣布了 2Africa 项目。2 Africa 项目有望成为世界上最大的海底电缆之一,连接西非和东非,并将连接大约 23 个国家,起点在英国,终点在西班牙。在 2Africa 登陆的国家,服务提供商将获得运营商中立数据中心的容量,并可以访问有线登陆站。
参与项目的国家— 脸书提供
在南部非洲发展共同体的国家中,该项目将连接到南非🇿🇦、坦桑尼亚🇹🇿、莫桑比克🇲🇿、刚果民主共和国🇨🇩和马达加斯加🇲🇬获得新的数据链路,对于这些经济体来说,这将是后新冠肺炎时代迫切需要的推动力。
37000 公里长的非洲将几乎等于地球的周长。该项目不仅长度令人印象深刻:它将提供几乎三倍于目前服务于非洲的所有海底电缆的总网络容量。完工后,这条新路线将为整个非洲提供急需的互联网容量、冗余和可靠性;补充中东地区快速增长的产能需求;并支持数亿人的 4G、5G 和宽带接入的进一步增长。— 脸书网络工程副总裁 Najam Ahmad
当我们开始展望后新冠肺炎时代的未来时,我们已经可以断定,能够投资远程解决方案的企业将在这个新世界中繁荣发展。对于非洲企业来说,这是一个挑战,因为员工在家里可能无法获得合适的互联网连接。通常,非洲的非正规市场并不依赖互联网。就移动货币技术而言,短信一直是王者,但随着支持网络连接的基础设施投资的增加,我们可能会开始看到互联网渗透水平的转变,以及更多政府推动数字战略的转变。电信技术是基础设施平台的明显赢家,可以引领非洲领先的新兴经济体。对于像津巴布韦这样地理位置不佳的内陆国家来说,这也创造了对电信枢纽进行更多投资的举措,这些枢纽将边境城镇与邻近的南共体国家的基础设施连接起来。世界银行研究贸易物流问题的三位经济学家说,地处内陆是世界上 31 个内陆发展中国家中有 16 个是世界上最贫穷国家的主要原因,。
数据是新的石油🛢🙆🏾♂️
通信是关键,根据联合国的数据,从现在到 2050 年,预计超过一半的全球人口增长将发生在非洲,移动网络将成为连接非洲大陆的桥梁。但随着这种连接也带来了新的数据点,但目前,非洲没有底层基础设施来支持这一点。随着津巴布韦等国家不幸获得了截至 2019 年世界上最昂贵的数据包的头衔,需要做更多的工作来确保数据可访问,这包括价格以及通过对电信基础设施的持续投资来增强信号强度。非洲人是企业家,会创新!随着我们开始适应远程提供更多服务的生活,这也将为散居者创造轻松投资非洲的机会。但不仅仅是海外侨民希望在非洲投资。
目前连接非洲和世界的海底电缆— 提供多种可能性。
根据华盛顿研究公司 TeleGeography 的数据,谷歌、微软、脸书和亚马逊现在拥有或租用了将近一半的海底带宽。仅谷歌一家就在全球支持了至少 14 条电缆。随着谷歌通过 GCP 提供云服务,亚马逊通过 AWS 提供云服务,微软通过 Azure 提供云服务,在未来 10 年,开始看到更多的数据区域出现在非洲就不足为奇了。华为等中国公司已经开始大举投资非洲的电信项目。华为在 2018 年底完成了巴西和喀麦隆之间 3750 英里的电缆,去年开始了连接欧洲、亚洲和非洲的 7500 英里电缆的工作。
这是否会增加非洲的数据中心区域?
数据中心在非洲还没有真正起飞。需要做更多的工作和投资来提供有竞争力的市场,或者至少在电力和光纤连接方面需要某种类型的多样性。这通常被视为主要的绊脚石之一。地理位置经常发挥作用,微软 Azure 在沿海城市开普敦设立了数据中心,并于 2019 年在约翰内斯堡开设了另一个数据中心。中国的华为目前也计划在南非开设两个数据中心,开普敦被认为是一个可能的地点。亚马逊的 AWS 于 2020 年 4 月开始在开普敦运营数据中心。看到脸书在完成 2Africa 项目后也采用这一战略并不奇怪。寻求采用云战略的非洲企业通常会面临更高的成本,因为跨国云产品在非洲之外拥有数据中心区域,但这种情况很快就会改变。这不仅仅是南共体地区国家的问题,宽带普及率低和延迟差仍然是许多非洲实体面临的重大挑战。
2015 年互联网用户占一国人口的比例 **非洲清楚地显示为数字鸿沟背后最大的单一地区。**来源:国际电信联盟
南非的下一步是什么?
2020 年 5 月,非洲大陆自由贸易区秘书长, Wemkele Mene 宣布推迟启动 AfCFTA 下的贸易。AfCFTA 下的交易开始日期最初定为 2020 年 7 月 1 日( AfCFTA 交易日期)。由于 AfCFTA 没有宣布新的交易日期,根据疫情和 AfCFTA 的目标,考虑延期对南部非洲意味着什么是很重要的。对基础设施的投资必须继续,通过公路连接南部非洲国家,建立贸易路线并确保适合贸易的安全边界必须仍然是南部非洲发展共同体秘书处的重点。运营商和电信公司之间的跨境合作也将有助于这一过渡,确保没有一个国家被落下。
来自脸书的新数据管道不是第一条,也绝对不会是最后一条。非洲的数字革命即将到来!
斯蒂芬·查彭达玛
QQ 剧情到底是什么?
亚历山大·安德鲁斯在 Unsplash 上拍摄的照片
了解 QQ 图的功能以及如何从头开始制作
如果你曾经使用过线性回归或者使用过要求数据(或误差)呈正态分布的统计工具,那么你可能以前遇到过 QQ 图。除了知道一个直的 QQ 图(45 度线)很好之外,你可能不太记得他们了。
但是 QQ 图实际上是一种非常漂亮和直观的方式来可视化某个东西是否是正态分布的。让我们来看看它们是如何工作的,为什么它们很酷。
如果你需要复习一下正态分布,我写了这篇文章。
正态分布
正态分布的东西很棒。知道某样东西符合正态分布(并且知道它的均值和标准差),就可以让我们对它做出各种有用的推断。例如,我们可以合理地确定它的值在 95%的情况下会落在哪里(在平均值的-1.96 和+1.96 标准偏差之间)。
但是如果我们的变量实际上不是正态分布的,那么我们的推论就会是错误的,有时是非常错误的。根据应用的不同,我们不准确的推论的后果可能从仅仅是不方便到甚至是危险。
这就是 QQ 剧情的由来。它们是评估一个变量是否正态的快速而直观的方法(我们可以使用 QQ 图来对照任何分布检查我们的数据,而不仅仅是正态分布)。
QQ 图
让我们虚构一些我们已经知道是正态分布的数据:
import numpy as np# Generate some normally distributed random numbers
random_normals = [np.random.normal() for i in range(1000)]
我们可以使用 statsmodels 库中的 QQ 绘图功能:
import statsmodels.api as sm
from matplotlib import pyplot as plt# Create QQ plot
sm.qqplot(np.array(random_normals), line='45')
plt.show()
上面的代码创建了以下情节:
正态分布随机变量的 QQ 图
看到我们的数据(蓝点)是如何清晰地落在红线上的了吗?这意味着我们的数据是正态分布的(我们已经知道了)。仅此而已。如果我们的数据坚持红色 45 度线,这是正常的或接近它,如果它不,那么它是不正常的。
让我们来看看 QQ 剧情中一些不正常的东西:
import random# Generate some uniformly distributed random variables
random_uniform = [random.random() for i in range(1000)]# Create QQ plot
sm.qqplot(np.array(random_uniform), line='45')
plt.show()
产生了这个图:
非正态分布随机变量的 QQ 图
我们的数据(蓝点)离红线很远,意味着它不是正态分布的(它是均匀分布的)。所以现在我们明白了 QQ 图是做什么的,让我们弄清楚他们是怎么做的。
QQ 图如何工作
QQ 图中的“QQ”表示分位数-分位数,即QQ 图将我们数据的分位数与期望分布的分位数进行比较(默认为正态分布,但也可以是其他分布,只要我们提供适当的分位数)。
**分位数是将我们按数字排序的数据分成相等比例的桶的断点。**例如,您可能听说过百分位数——百分位数是将我们的数据分成 100 个桶(按值排序)的分位数,每个桶包含 1%的观察值。四分位数是将我们的数据分成 4 个桶(0–25%,25–50%,50–75%,75–100%)的分位数。即使是我们的老朋友,中位数也是一个分位数——它将我们的数据分成两个桶,其中一半的观察值低于中位数,另一半高于中位数。
那么比较分位数意味着什么呢?让我们暂时离开 QQ 图,想一个比较两个分布的更简单的方法,直方图。我们如何判断两个分布是否相同?一个不错的第一步是把分布一个接一个的叠加起来,然后盯着看。但是我们应该盯着什么看呢?一个简单的测试是在 X 轴上选择一个点,看看每种分布在它的每一边占多大比例。例如,在金融领域,我们经常关注下行风险(分布的左尾),或者换句话说,当情况变坏时,我们的投资组合会发生什么。
假设我们关心的是真正可怕的事件,所以我们决定查看位于均值左侧超过 1.65 个标准差(换句话说,低于均值)的结果——我们将把这个点称为我们的阈值。如果我们的数据分布是正态的,那么大约 5%的观察值将位于阈值的左侧:
正态分布(蓝色)和-1.65 SD 阈值(红色)
但是如果我们的数据不正常呢?我们可以进行与上面相同的分析,看看有多少观察值位于阈值的左侧:
正态分布和非正态分布的直观比较
从视觉上,我们可以看到更多的非正态分布(灰色线,这是一个学生的 1 自由度 T 分布)位于阈值的左侧。因此,如果我们投资组合的分布实际上是灰线,但我们用蓝线建模,我们将大大低估一个可怕结果的频率(可怕的结果是我们阈值左边的那些,红线)。我们假设只有 5%的可能性会出现可怕的结果,而实际上 17%的灰线下区域(其累积密度函数)位于可怕结果阈值的左侧。
因此,我们将一个可怕结果的风险低估了 3 倍!
这就是为什么检查某些东西是否正常很重要。而这才是 QQ 剧情真正出彩的地方。本质上,QQ 图做了我们刚刚用重叠直方图(和阈值)做的事情,但它对我们数据中的每个观察都做了。
QQ 情节从零开始
如果你对下面的代码感兴趣,也可以从我的 GitHub 这里抓取。
让我们从头开始制作一个简化的 QQ 图,这样我们就可以从头开始了解它是如何工作的。回想一下,分位数是将我们的数据分成数字有序、大小相等的桶的断点(如百分位数)。**为了计算分位数,我们需要首先将数据从最小到最大排序。**让我们生成一些数据并进行分类:
**In:**import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from scipy.stats import normN = 10
t_dist = sorted(np.random.standard_t(1, size=10))
t_dist**Out:**[-3.078322498951745,
-0.44257926668743197,
-0.28442575572329976,
-0.08391894271348821,
0.5619567861663247,
1.0176669779384615,
1.3448162439504447,
1.874164646241363,
2.936477005326059,
5.340289177069092]
酷,我们现在有 10 个数字排序的观察值,它们来自一个随机数生成器,遵循一个学生的 1 自由度 T 分布。这和我们上面的柱状图中的分布是一样的。光是目测数字,就能看出看起来不是很正常。没有经过转换以适应经验数据的正态分布的平均值为 0,标准差为 1。如果我们从正态分布中取样,很难看到比 1 大得多或小得多的值。然而,仅仅从我们的 10 个观察样本中,我们可以看到有一个-3.08 和一个 5.34(超过预期平均值的 5 个巨大的标准偏差)。
计算实际分位数
接下来是时候计算我们观察到的数据的分位数了。因为我们有 10 个观察值,所以我们想要 9 个分位数(我们总是想要 N-1 个分位数,或者比我们的观察值少 1)。获得分位数的一个简单方法是计算我们观察值之间的中点:
t_dist_quantiles = []
quantiles_percent = []
for i, val in enumerate(t_dist[:-1]):
t_dist_quantiles.append((val + t_dist[i+1])/2)
quantiles_percent.append((i+1)/len(t_dist))
列表 t_dist_quantiles 记录我们计算的中点,列表 quantiles_percent 记录位于分位数以下的数据比例。一旦我们看到生成的数据帧,这将变得更加清楚:
**In:**qp_array = np.array(quantiles_percent).reshape(-1,1)
tq_array = np.array(t_dist_quantiles).reshape(-1,1)
qq_df = pd.DataFrame(np.concatenate((qp_array, tq_array), axis=1),
columns=['percent_below', 'quantile'])
print(qq_df)**Out:** percent_below quantile
0 0.1 -1.760451
1 0.2 -0.363503
2 0.3 -0.184172
3 0.4 0.239019
4 0.5 0.789812
5 0.6 1.181242
6 0.7 1.609490
7 0.8 2.405321
8 0.9 4.138383
请注意,第一个分位数-1.76 位于-3.07 和-0.44 之间。而 percent_below 列告诉我们,10%的数据低于-1.76。这是有意义的,因为只有一个观察值-3.07 小于-1.76。所以 10 次观察中有 1 次低于-1.76,换句话说,10%。所以对于每个分位数,我们可以通过将小于它的观察数除以观察总数来计算出它下面的百分比。
理论分位数
一旦我们有了实际的分位数,我们需要一些东西来与它们进行比较。QQ 图的基准是我们期望的分布的理论分位数。那么我们如何得到这些理论分位数呢?
实际上我们已经有了所有需要的原料。回想一下,分位数将我们的数据分解成固定的比例。因此,如果我们知道每个桶中的比例,那么对于给定的分位数,我们也知道位于其左右的数据的比例。例如,回头参考我们的数据框架 qq_df 中的 percent_below 列,我们看到对于第三个分位数,-0.184172,30%的数据位于它的左侧。
因此,为了得到我们的第三个理论分位数,我们只需要找出正态分布上曲线下 30%区域位于其左侧的点。我们可以很容易地用下面的代码行为我们的每个分位数做到这一点:
qq_df['theoretical_quantile'] = [norm.ppf(percentage) for percentage in qq_df['percent_below']]
现在,我们已经在 qq_df : 中获得了我们的 QQ 图所需的所有值,Y 轴的实际分位数和 X 轴的理论分位数**(来自正态分布)**。我已经把 qq_df 的内容打印出来如下:
percent_below quantile theoretical_quantile
0 0.1 -1.760451 -1.281552
1 0.2 -0.363503 -0.841621
2 0.3 -0.184172 -0.524401
3 0.4 0.239019 -0.253347
4 0.5 0.789812 0.000000
5 0.6 1.181242 0.253347
6 0.7 1.609490 0.524401
7 0.8 2.405321 0.841621
8 0.9 4.138383 1.281552
剩下要做的就是画出我们的 QQ 图:
plt.subplots(figsize=(9,7))
plt.scatter(x=qq_df['theoretical_quantile'],
y=qq_df['quantile'], label='Actual');
plt.scatter(x=qq_df['theoretical_quantile'],
y=qq_df['theoretical_quantile'],
c='red', label='Normal')
plt.xlabel('Theoretical Quantiles')
plt.ylabel('Actual Quantiles')
plt.legend()
plt.savefig('qq_plot', bpi=150);
plt.show()
我们的 QQ 情节
QQ 情节告诉我们什么
如果我没有解释如何阅读 QQ 情节就结束这篇文章,那将是我的失职。我们已经知道,如果我们图中的点落在 45 度线上,那么我们的数据是正态分布的(假设我们使用正态分布的理论分位数)。但是当它们没有落在直线上时,我们仍然可以了解很多关于我们的数据分布的信息。以下是阅读 QQ 情节的一些一般提示:
- 斜率告诉我们数据中的步长是太大还是太小(或者刚刚好)。记住,数据中的每一步(从一个分位数到下一个分位数的一步)遍历一个固定不变的百分比 —例如,如果我们有 N 个观测值,那么每一步遍历 1/(N-1)个数据。因此,我们看到了我们的数据和正态分布之间的步长(也称为分位数)比较。
- QQ 图的陡峭倾斜部分意味着在我们数据的这一部分,观察值比我们预期的正态分布更分散。导致这种情况的一个例子是异常大量的异常值(就像我们之前用代码画的 QQ 图)。
- 平坦的 QQ 图意味着我们的数据比我们预期的正态分布更加集中。例如,在均匀分布中,我们的数据介于 0 和 1 之间。在这个范围内,每个值都有相同的可能性。因此,该范围的极端值(如 0.01 和 0.99)与中间值(如 0.50)的可能性一样大。这与正态分布(平均值为 0,标准偏差为 1)非常不同,在正态分布中,像-3 或 4 这样的值比 0 更不可能被观察到。因此,均匀分布变量的 QQ 图(其中观察值是等间距的,因此相对于正态分布更集中)将具有非常小的斜率。
均匀分布随机变量的 QQ 图
结论
我是 QQ 图的忠实粉丝,因为它们是将我们的数据分布与期望的统计分布进行比较的一种聪明、直观和快速的方式。希望读完这篇文章后,你也会成为他们的粉丝。干杯!
更多数据科学相关帖子由我:
周二晚上在弗吉尼亚到底发生了什么?!
当你的样本有偏差时,统计数据就失效了
来源:2020 年 11 月 3 日谷歌宏作者截图。[1]
像大多数美国家庭一样,周二晚上,我和妈妈在下午 5 点左右结束工作,加热了一些剩菜,挤在电视机前,开始了漫长的一夜狂欢/“在家玩”选举结果。我们大部分的分析修正都是由 CNN 慷慨提供的(oop,只是用那个把我们自己叫了出来)。但我们不是你们这里的普通绵羊。不,不,我们是一些更精明的点击诱饵信息的消费者。我们也用谷歌!!我们(和许多其他人可能)很早就注意到,谷歌的小宏(由美联社提供支持)和 CNN 的经典美国地图仪表盘(尽管它肯定越来越花哨)之间存在差异。报告的数字是一样的,但是信息传递模式的不同在我们家引起了一点有趣的混乱。请允许我解释…
如果一个州当时有更多的共和党人投票,CNN 会将它涂成红色(或蓝色表示反对),这给人一种候选人已经赢得或至少“赢得”该州的印象。好吧,有道理。然而,谷歌更进一步。他们提供了两个“等级”的着色!浅色意味着候选人在该州的普选中领先,而深色则意味着候选人“赢得了】该州。添加了这个聪明、直观的可视化功能。
那么问题出在哪里?赢得该州普选的候选人难道不应该是分析之神不可避免地认为是该州“赢家”的那个人吗?不一定。以弗吉尼亚为例。美国东部时间晚上 8:30 左右,拜登的支持率下降了 20%。当 CNN 主播们正为拜登如何需要做出某种英雄般的努力来拯救这个“蓝色”州免于翻转(好像这就是选举之夜的工作方式)而焦躁不安时,谷歌的地图上充满了深蓝色,这表明拜登不仅赢得了弗吉尼亚州……他还赢了!!现在你可以想象这在这里引起了一点混乱,我决定调查一下。
设置场景
在美国东部时间晚上 8:30 左右,州政府官员已经统计了 33%的选票,拜登落后 20%。然而,谷歌宏已经将这个州涂成深蓝色,以表示拜登毫无疑问的胜利。好吧,管它呢?我妈妈也有这种感觉,但电视专家们对此也无济于事,他们继续用“希望拜登在弗吉尼亚州撤回”的说辞来保持游戏节目的幻觉。统计学家知道一些我们作为观众没有被告知的事情。
又是弹珠?
数学建模就是简化现实世界。在另一篇文章中,我们展示了如果你将模型简化为超几何等价物(一袋弹珠),你可以多快召集一次选举。我们假装在选举日那天,人们将特定颜色(红色或蓝色)的弹珠放入位于州首府的一个大弹珠袋中,而不是去各个投票站、邮箱等地方投票。我们表明,如果袋子混合得很好,我们只需要画几千个就可以很好地猜出袋子的成分。
然而,你可以看到这是多么的不现实,因为在现实生活中,不止有一袋弹珠。事实上,弗吉尼亚有 133 个县和 2500 多个选区。如果我们使用一个袋子模型,我们会犯一个惊人的错误,即假设我们可以从这些袋子中的任何一个中抽取,并对整个国家做出一个一般性的陈述。
为什么不呢?信息就是这样通过媒体展现给我们的?已经统计了 33%的选票的人!这远远超过了我们数学上认为足够的 10,000 个弹珠的阈值。特朗普赢得了弗吉尼亚州的乡亲们…合上书本!
因此,专业统计学家的真正工作在于:选择有代表性的样本很难。
大理石包中的大理石包…太棒了
但是假设我们需要说些什么,即使我们知道我们的样本有偏差。那么,如果我们不假设一袋选票,而是假设每个县都是那袋选票中的一个更小的袋子。没错,州大理石包其实就是一袋县大理石包(兔子洞继续!).
作者图片
但这能解释周二发生的事情吗?好吧,我们来看数据。我在 11 月 5 日的某个时候直接从弗吉尼亚州的官方选举报道网站上获取了一些数字(投票应该在那个时候)。当时的最终计票结果显示,拜登获得了 53%的选票。回想周二晚上,CNN 会让我们相信这是某种英雄式的推动,但我认为统计学家会认为这是不可避免的。让我们看看。
询问数据
好了,让我们从做一个快速思维实验开始,看看我们能否重现周二晚上 8:30 我们看到的情景,当时拜登输了 20%,但被宣布获胜。让我们假设从每个县统计 10,000 张选票(即弗吉尼亚州的大约 450 万张总选票中的大约 150 万张)。以下是弗吉尼亚州随机选择的 30 个县的地图,以及他们在计算第一批 10,000 张选票后的样子。(我在费尔法克斯县周围画了一个方框,因为它以后会变得很重要——敬请关注。)
作者图片
两个弗吉尼亚的故事
如果我把所有县的选票加起来,我们可以看到特朗普在早期阶段会遥遥领先于拜登(如下图所示)。然而,统计学家看了上面单个县的早期估计,意识到特朗普已经输了。怎么会?
他们可能会做的是,他们拿着已经统计过的选票,猜测拜登的选票在未统计的未来选票中所占的比例。事实上,如果我们认为我们知道有多少人会投票,我们可以使用贝叶斯推断来推断每个县的潜在投票范围(通过推断 p 的范围,就像我们对伊利诺伊州所做的那样)。然后对每个县重复这一过程,将低估计值和高估计值的总数相加(右图)。由此,你可以看到,即使对拜登来说是难以想象的最坏情况(下面标为“低”),他仍然远远高于 50%选票的红色“获胜线”。
作者图片
好的,对于那些一直跟踪到现在的人,你可能还会问:这是怎么回事?好吧,让我们看看 30 个人口最多的县的原始结果,我觉得答案应该是显而易见的。看看拜登在费尔法克斯县获得了多少选票。事实上,他赢得了弗吉尼亚州人口最多的 12 个县(在某些情况下以压倒性优势)。
作者图片
当然,投票实际上不是以同样的速度计算的,我在这里展示的小模型实际上不是周二晚上(8:30)的数字。但是……这表明,当公众被灌输一个关于特朗普领先 20%的故事时,统计学家已经意识到他没有赢得弗吉尼亚州的希望。
嗯,这些都很有趣,但是那些摇摆州呢?而且,这并不能完全说服我,我的投票是否算数。我认为确实如此,但是这篇文章有点长了。我试图在其他帖子中更详细地回答这些问题。
感谢阅读!感谢任何反馈!
如果你喜欢这篇文章
考虑鼓掌(或者 10?)所以 TDS 会更容易与他人分享
看看我关于选举的其他案例研究:
图像:
[1]谷歌,美国大选结果(2020),https://www.google.com/search?channel=fs&客户端= Ubuntu&q =选举+结果
网络新闻文章中隐藏了哪些信息?
网络新闻的数据分析
每个工作日在线新闻的长度和数量以及作者的时间/图片
日报在线发布的新闻是一个重要的信息来源。它们不仅包含要传播的声明,还隐含了关于出版商及其员工的其他信息。这种信息流通常不是有意的,发布者甚至没有意识到这一点。
这些不是隐藏在单个信息中的秘密信息,正如一些人认为在甲壳虫乐队的歌曲中找到的秘密信息,而是只有当大量数据被一起查看并正确组合时才显现出来的信息。在这篇文章中,我想用一些例子来说明这一点。
例如,我会在文章中发现,日报“Der Standard”的编辑喜欢在周末睡得更久,并在早上或周末早上写更长的文章。今天剩下的时间似乎都被机构报告占据了。
尤其是报纸《Kronen Zeitung》还要门户网站“oe24.at”刊登,不出意料,几乎不再有文章。这里的事实,与“标准”相反,它大约是十倍是有点令人惊讶的。
从被指名的编辑的出版物中,可以获得关于他们的休假行为或者他们可能与哪些其他编辑关系密切的信息。
数据
作为例子的数据,我选择了三家奥地利日报网络版的新闻文章:
-【sterreich】-www . oe24 . at-
-【kren Zeitung】-www . krone . at-
-【Der Standard】-www . Der Standard . at
前两篇可以分配到林荫大道,后者称为优质报纸。
在 3 个月的时间里(2020 年 8 月 11 日到 2020 年 11 月 9 日),我收集了新闻文本,以及一些元数据,如出版日期、作者等。这导致数据量:
-来自 derstandard.at 的 10,933 篇文章
-来自 krone.at 的 12,990 篇文章
-来自 oe24.at 的 29.868 篇文章
数据的第一个概述
为了对数据有一个初步的了解,我们将看看不同报纸每天发表的文章数量。
所有被考虑的三份报纸都显示了一个周周期,这在《标准报》中最为明显,在周末和假日出版的报纸要少得多。平均写 100 多篇。oe24.at 自 10 月初以来明显偏多。
每天在 derstandard.at 上的文章/作者提供的图片
文章是什么时候写的,有多长?
现在让我们看看新闻发布的时间和日期。圆点的大小描述了文章的数量。颜色代码还表示每次的平均文本长度(字数)。蓝色圆圈代表短文,红色调越深,文章越长。
每个工作日和时间的在线新闻长度和数量-der standard . at/按作者分类的图片
出版大多是白天,周末我们开始晚一点。编辑们似乎想多睡一会儿。一般来说,周末出版的比较少。
从颜色可以看出,《标准报》的编辑显然每天早上和周末都花时间写长文章,就像一个“优质媒体”所期望的那样。
主要是在当天晚些时候分发简短的代理报告吗?
每个工作日和时间的在线新闻长度和数量——oe24 . at/按作者分类的图片
下一张图显示了“sterreich — oe24.at”编辑部略有不同的图片,这里只有少量早上 6 点、午夜前不久和周五中午的较长文章。
这些是什么样的物品?
这里也一样,更多的是在工作日出版。
每个工作日和时间在线新闻的长度和数量——krone . at/Image by Author
你发表哪些主题的文章?
但我不仅想知道何时以及以何种文本长度出版,还想知道关于哪些主题。为此,我对每篇文章进行了自动主题分配。
分析是通过来自“ Aylien ”的“新闻情报平台”完成的,并使用“ IAB ”作为分类。开发这种分类是为了给在线广告分配正确的内容。在我的例子中,只使用了主要类别。
现在让我们看看三个新闻制作人在最重要的类别中发表了多少篇文章。圆圈的大小反映了所考虑期间的总数。
关于 derstandard.at / Image 的主题由作者提供
oe24.at 上的主题/作者图片
krone.at 上的话题/作者图片
现在,我们将看看在不同主题的文章发表的时间上是否有任何差异。下图显示了《标准》杂志在两个最常见的类别“政治”和“体育”上的出版物分布情况。
derstandard.at / Image 作者每小时的文章和主题
体育板块的文章数量在早上比政治板块的增长要慢得多。这是因为早上没有太多关于体育的报道,还是因为体育编辑喜欢睡懒觉?
“Krone”和“Oe24.at”文章的数据显示了相同的情况。
如果你也将每篇文章分配到一个“主题地图”,你会看到不同的文章是如何分布的。下图显示了文章的分布以及“标准”的最重要类别。
derstandard.at 的文章和主题图/按作者分类的图片
附近的点代表相似的文章,颜色反映了主题。
对于这个例子,为每篇文章的标题计算嵌入的句子,其编码标题的含义。文章中有更多关于这方面的内容:
使用伯特/罗伯塔/XLM-罗伯塔公司和 PyTorch 的多语言句子嵌入
medium.com](https://medium.com/towards-artificial-intelligence/sentence-embeddings-with-sentence-transformers-library-7420fc6e3815)
随后,使用“t-SNE”方法生成维度缩减的 2D 图。文章中有更多关于这方面的内容:
介绍
以 Python 为例 Introductiontowardsdatascience.com 的 t-SNE](/an-introduction-to-t-sne-with-python-example-5a3a293108d1)
不同媒体上关于该主题的文章长度如何?
“Kronen Zeitung”的平均文本长度几乎不随主题而变化,也明显短于标准。“Oe24.at”的图片与此类似,只是文章通常稍长,而且“汽车”部分的文章也更长。
krone.at 的文本长度/作者提供的图片
《标准报》的平均文字长度是《克朗报》的十倍。这些数据证实了小报很少提供文字的偏见。“标准”在主题领域之间的长度也有显著差异。例如,“新闻”文章就比其他文章短得多。
derstandard.at / Image 的文本长度(按作者)
我们能谈谈个别人员或部分编辑人员吗?
一些报纸在文章上标明编辑的名字或部分编辑人员的名字。例如,在 Kronenzeitung 的情况下,文章可以分配给各个联邦州的编辑部。这清楚地表明了各个州的编辑有多活跃。
每个州的文章/按作者分类的图片
可以看出,在所考虑的整个时期内,维也纳中央编辑部最为活跃,布尔根兰和福拉尔贝格等省的贡献很小。
如果有人评价显示作者姓名的文章,可以发表个人声明。在下图中,这些名称因此变得无法识别。
每个作者的文章和作者的日期/图片
从评估中可以获得一些有趣的信息,然后人们可以通过稿件的数量很容易地识别出被雇佣的编辑和自由工作者。颜色代码可用于将人员分配到主题区域,出版物中的间隙可表示假期。这样,也可以从这样的图形中收集编辑部共享假期的指示。这些是否表明这些人之间有更密切的个人关系?
诸如后者的问题和信息表明了评估的危险性。只使用了公开的免费数据。爆炸性只有通过将许多数据聚合和链接在一起并进行适当的可视化才能产生。由于人类强大的模式识别能力,人类能够在此基础上得出结论。
例如,竞争对手可以确定编辑的主题领域,以便招募他们。主管可以窥探员工的私人关系,等等。
什么是数据网格——以及如何不对其进行网格划分
实现最新行业趋势的初学者指南:数据网格。
问问数据行业的任何人,最近什么是热门话题,“数据网格”很可能会成为热门话题。但是什么是数据网格,为什么要构建数据网格呢?好奇的人想知道。
在自助式商业智能的时代,几乎每个公司都认为自己是数据第一的公司,但并不是每个公司都以应有的民主化和可扩展性水平对待他们的数据架构。
比如,贵公司将数据视为创新的驱动力。你的老板是业内最早看到雪花和 Looker 潜力的人之一。或者,您的 CDO 领导了一项跨职能计划,向团队传授数据管理最佳实践,而您的 CTO 投资了一个数据工程团队。然而,最重要的是,您的整个数据团队都希望有一种更简单的方法来管理组织不断增长的需求,从处理永无止境的即席查询到通过中央 ETL 管道处理不同的数据源。
支持这种对民主化和可伸缩性的渴望的是认识到您当前的数据架构(在许多情况下,一个孤立的数据仓库或一个具有一些有限实时流能力的数据湖)可能无法满足您的需求。
幸运的是,寻找数据新租约的团队只需要看看数据网,一种正在席卷行业的架构范式。
什么是数据网格?
就像软件工程团队从单片应用过渡到微服务架构一样,数据网格在许多方面是微服务的数据平台版本。
正如 ThoughtWorks 顾问和该术语最初的设计者 Zhamak Dehghani 首先定义的那样, 数据网格 是一种数据平台架构,它通过利用面向领域的自助式设计来接纳企业中无处不在的数据。借用 Eric Evans 的 领域驱动设计 理论,一种将代码的结构和语言与其对应的业务领域相匹配的范式,数据网格被广泛认为是数据领域的下一个重大架构转变。
与在一个中央数据湖中处理数据的消费、存储、转换和输出的传统整体数据基础设施不同,数据网格支持分布式的、特定于域的数据消费者,并将“数据视为产品”,每个域处理自己的数据管道。连接这些域及其相关数据资产的组织是一个通用的互操作性层,它应用相同的语法和数据标准。
我们将把数据网格的定义归结为几个关键概念,并强调它与传统数据架构的不同,而不是重新发明 Zhamak 精心打造的轮子。
(如果你还没有,我强烈推荐你阅读她的开创性文章如何超越单一数据湖到分布式数据网格,或者观看 Max Schulte 的技术演讲为什么 Zalando 过渡到数据网格。你不会后悔的)。
在高层次上,数据网格由三个独立的组件组成:数据源、数据基础设施和由功能所有者管理的面向领域的数据管道。数据网格架构的底层是一个通用的互操作性层,反映了与领域无关的标准,以及可观察性和治理。(图片由蒙特卡洛数据公司提供。)
面向领域的数据所有者和管道
数据网格联合了负责将数据作为产品提供的领域数据所有者之间的数据所有权,同时也促进了跨不同位置的分布式数据之间的通信。
数据基础架构负责为每个域提供处理数据的解决方案,而域的任务是管理数据的接收、清理和聚合,以生成可由商业智能应用程序使用的资产。每个域负责拥有自己的 ETL 管道,但是一组功能应用于所有域,存储、编目和维护对原始数据的访问控制。一旦数据被提供给给定的域并被其转换,域所有者就可以利用这些数据来满足他们的分析或运营需求。
自助功能
数据网格利用面向领域的设计原则来提供一个自助式数据平台,允许用户抽象技术复杂性并专注于他们各自的数据用例。
正如 Zhamak 所概述的,面向领域设计的主要关注点之一是维护每个领域中的数据管道和基础设施所需的重复工作和技能。为了解决这一问题,数据网格收集和提取与域无关的数据基础架构功能,并将其放入一个中央平台,该平台处理数据管道引擎、存储和流基础架构。同时,每个域负责利用这些组件来运行定制的 ETL 管道,为它们提供轻松提供数据所需的支持,以及真正拥有流程所需的自主权。
通信的互操作性和标准化
每个领域的基础是一组通用的数据标准,有助于在必要时促进领域之间的协作——而且通常如此。不可避免的是,一些数据(原始数据源和经过清理、转换和服务的数据集)对多个领域都有价值。为了支持跨域协作,数据网格必须在格式、治理、可发现性和元数据字段以及其他数据特性上实现标准化。此外,就像单个微服务一样,每个数据域都必须定义并同意它们将向其消费者“保证”的 SLA 和质量措施。
为什么要使用数据网格?
直到最近,许多公司还在利用连接到无数商业智能平台的单一数据仓库。这种解决方案由一小群专家维护,并且经常背负着巨大的技术债务。
在 2020 年,当今的架构是一个具有实时数据可用性和流处理的数据湖,其目标是从集中式数据平台接收、丰富、转换和提供数据。对于许多组织来说,这种类型的体系结构在几个方面存在不足:
- 中央 ETL 管道使得团队对不断增长的数据量的控制更少
- 随着每个公司都成为数据公司,不同的数据用例需要不同类型的转换,这给中央平台带来了沉重的负担
这种数据湖会导致数据生产者失去联系、数据消费者失去耐心,更糟糕的是,积压的数据团队难以跟上业务需求的步伐。相反,面向领域的数据架构,比如数据网格,给团队带来了两个世界的好处:一个集中的数据库(或者一个分布式数据湖),域(或者业务区域)负责处理他们自己的管道。正如 Zhamak 所说,数据架构可以通过分解成更小的、面向领域的组件来最容易地扩展。
数据网格为数据所有者提供了更大的自主权和灵活性,促进了更大的数据实验和创新,同时减轻了数据团队通过单一管道满足每个数据消费者需求的负担,从而为数据湖的缺点提供了解决方案。
同时,数据网格的自助式基础设施即平台为数据团队提供了一种通用的、领域无关的、通常是自动化的方法来实现数据标准化、数据产品谱系、数据产品监控、警报、日志记录和数据产品质量指标(换句话说,就是数据收集和共享)。综上所述,与传统的数据架构相比,这些优势提供了一种竞争优势,而传统的数据架构通常会因客户和消费者之间缺乏数据标准化而受阻。
啮合还是不啮合:这是一个问题
处理大量数据源并需要试验数据(换句话说,快速转换数据)的团队考虑利用数据网格是明智的。
**我们进行了一个简单的计算,以确定贵组织投资数据网格是否有意义。**请用一个数字回答下面的每个问题,并将它们加在一起,得出一个总数,换句话说,就是您的数据网格分数。
- 数据来源数量。你的公司有多少数据源?
- 数据团队的规模。您的数据团队中有多少数据分析师、数据工程师和产品经理(如果有)?
- 数据域的数量。多少职能团队(营销、销售、运营等。)依靠你的数据源来驱动决策,你的公司有多少产品,有多少数据驱动的功能正在构建?把总数加起来。
- **数据工程瓶颈。**数据工程团队成为新数据产品实施瓶颈的频率有多高(1 到 10 分,1 表示“从不”,10 表示“总是”)。
- **数据治理。**在 1 到 10 的范围内,数据治理对您的组织来说有多重要,1 表示“我不在乎”,10 表示“它让我彻夜难眠”?
数据网格分数
一般来说,您的得分越高,您公司的数据基础架构要求就越复杂和苛刻,反过来,您的组织就越有可能从数据网格中受益。如果您的得分高于 10,那么实施一些数据网格最佳实践可能对您的公司有意义。如果您的得分高于 30,那么您的组织就处于数据网格的最佳位置,加入数据革命将是明智之举。
以下是如何分解你的分数:
- 1–15:鉴于您的数据生态系统的规模和单维性,您可能不需要数据网格。
- 15–30:您的组织正在迅速成熟,甚至可能正处于真正能够利用数据的十字路口。我们强烈建议结合一些数据网格最佳实践和概念,以便以后的迁移更加容易。
- 30 岁或以上:您的数据组织是您公司的创新驱动力,数据网格将支持任何正在进行或未来的数据民主化计划,并在整个企业中提供自助式分析。
随着数据变得越来越普遍,数据消费者的需求不断多样化,我们预计数据网格对于拥有 300 多名员工的基于云的公司来说将变得越来越普遍。
图片由米姆·Generator.net 提供。
不要忘记可观察性
对于数据行业的许多人来说,使用数据网格架构的巨大潜力既令人兴奋又令人畏惧。事实上,我们的一些客户担心数据网格不可预见的自治和民主化会带来与数据发现和健康以及数据管理相关的新风险。
鉴于数据网格的相对新颖性,这是一个合理的关注,但我会鼓励有好奇心的人阅读小字。与其引入这些风险,数据网格实际上要求 可扩展的、自助式的可观察性 进入您的数据。
事实上,如果域没有可观察性,它们就不能真正拥有自己的数据。根据 Zhamak 的说法,任何良好的数据网格所固有的这种自助服务能力包括:
- 静态和动态数据加密
- 数据产品版本化
- 数据产品模式
- 数据产品发现、目录注册和发布
- 数据治理和标准化
- 数据生产谱系
- 数据产品监控、警报和记录
- 数据产品质量指标
当打包在一起时,这些功能和标准化提供了一个健壮的可观察层。数据网格范例还规定了一种标准化的、可扩展的方式,用于各个领域处理这些不同的可观察性租户,允许团队回答这些问题以及更多问题:
- 我的数据是新的吗?
- 我的数据坏了吗?
- 如何跟踪架构更改?
- 我的管道的上游和下游依赖关系是什么?
如果你能回答这些问题,你就可以放心,你的数据是完全可观察的,也是可以信任的。
有兴趣了解更多关于数据网格的信息吗?除了 Zhamak 和 Max 的资源之外,请查看一些我们最喜欢的关于这位数据工程新星的文章:
- 应用数据网格 —斯文·巴尔诺扬
- 数据网:重新思考数据整合 —凯文·佩特里
- 您的应用是否应该考虑数据网格连接?—乔·格林瑟
你的公司正在构建数据网格吗?伸出 巴尔摩西和利奥加维什 带着你的经历、提示、痛点。我们希望收到您的来信!
本文由蒙特卡洛首席执行官 巴尔·摩西 和蒙特卡洛首席技术官Lior GAVI sh撰写。
有兴趣加入数据可靠性运动吗?把手伸向 蒙特卡洛团队 !
什么是数据集?
图片来源:“Via Design Pickle”——更多关于属性。
作为一名研究人员和数据科学家,与您的同事分享您谈论数据集时的意思是富有成效的
介绍
T 他的文章以两个专业人士 Sam 和 Pam 的故事开始,他们在数据交流方面有困难,因为他们还没有共享的词汇。也许你会认同萨姆或帕姆。第一个角色 Sam 是一名研究员和数据科学家。第二个角色帕姆也是一个训练有素、技术高超的专业人士。
在这个轶事之后,本文继续定义什么是数据集。数据集的组成部分。数据集是如何构造的。以及研究人员或数据分析师如何应用分析技术生成数据摘要。本文讨论的分析技术被称为交叉列表法。
缺乏共同的词汇
研究员兼数据科学家 Sam 遇到了经验丰富的同事 Pam。Sam 和 Pam 需要讨论在几周后到期的季度报告中添加一个部分。Sam 尚未参与此报告,但已同意帮助完成部分分析。
萨姆和帕姆感到沮丧的原因是两人还没有共同的词汇。
在会议准备过程中,Sam 要求 Pam 带来一份相关原始数据集的副本。萨姆和帕姆认为他们相互理解。但是他们很快意识到他们没有。在会议上,Sam 提供了类似于下图的打印输出,并将其作为原始数据提供。
图 1:显示了三种四年制校园类型和五种机构规模类别中的机构数量。图片来源:“作者截屏”——更多关于归属。
此图(图 1)是教育机构类型和机构规模的交叉列表。它显示了每个规模类别(跨列列出)中存在的每种机构类型(在行中列出)的数量。
事实证明,交叉制表并不是原始数据集。交叉列表可以作为数据集使用。但是交叉列表并不是“原始数据”
交叉制表是一种分析技术。交叉列表产生的表格是应用分析技术的结果。因此,当然,Sam 再次要求原始数据集。当然,Pam 认为她已经提供了数据集,因此很沮丧。
萨姆和帕姆感到沮丧的原因是两人还没有共同的词汇。他们还没有有效地沟通。因为 Sam 和 Pam 没有共享的词汇表,他们不仅感到沮丧,而且他们的数据相关项目也会受到影响。
什么是数据集?
数据集大致由两部分组成。这两个组件是行和列。此外,数据集的一个关键特征是它被组织成每行包含一个观察值。
行和列
行和列就是它们听起来的样子。这张图片(图 2)是用来制作上述交叉表格的数据摘录。这些数据来自综合中学后教育数据系统。
图 2:来自 IPEDS 目录信息调查文件的数据摘录。图片鸣谢:“作者截屏”——更多关于归属。
在本例中,显示的行是机构标识号(united)、机构名称(instm)、州缩写(stabbr)、机构规模(instsize)和机构类型(sector)。研究人员和数据科学家将这些列称为变量,有时也称为维度。
观察
一个关键特征是每行对应一个观察值。观察确实与收集信息的过程有关。例如,在上表中,为了在各行之间填充信息,科学家将观察第一个机构,并询问“它的名称、州、大小和部门是什么”阿拉巴马 A & M 大学的答案是“阿尔”、“5000-9999”和“公立,4 年或以上”
对于每个机构,有一行。由于每个机构都有一行,因此该数据集适用于以高等教育机构为分析单位的分析。下一节应用一种称为交叉制表的分析技术。
运用分析技术
图 1 对图 2 所示的数据应用了一种称为交叉制表的分析技术。交叉列表引用了两个列或变量(sector 和 instsize)。
应用交叉列表技术很简单。首先,研究人员绘制了一个表格,每个机构类型占一行,每个机构规模类别占一行。然后,如图 1 所示,对于左上角的单元格,研究人员将计算并报告私立 4 年制院校和学生注册人数在 1000 人以下的院校的数量。在表格中上下移动,重复该过程,直到所有单元格都填满。
结论
在我作为一名研究人员,然后作为一名数据科学家的职业生涯中,我发现自己解释“数据集”的含义的次数多得数不清。建立对数据集等关键术语和短语的共同理解是建立数据驱动文化的一个重要方面。
本文解释并举例说明了一个数据集。具体来说,本文演示了通过观察世界上的某些事物,然后记录被观察事物的特征来填充数据集的过程。因此,数据集保存最基本的数据。
同样,本文还将数据集与交叉制表分析技术的输出进行了比较。填充数据集需要观察世界。与填充数据集相关的过程不同,不直接观察世界就可以填充交叉表格。交叉列表可以通过参考数据集来建立。
当 Sam 向 Pam 解释什么是数据集,以及为什么有必要提供 Pam 所寻求的帮助时,两个人一起学习并成长。下一次这两个人一起工作时,他们更有效地完成了他们的项目,挫折也少了很多。
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
adamrossnelson.medium.com](https://adamrossnelson.medium.com/membership)
感谢阅读
感谢阅读。把你的想法和主意发给我。你可以写信只是为了说声嗨。如果你真的需要告诉我是怎么错的,我期待着尽快和你聊天。推特:@ adamrossnelsonLinkedIn:亚当·罗斯·尼尔森在推特和脸书:亚当·罗斯·尼尔森在脸书。
什么是数据仓库:基本架构
数据仓库主要概念介绍
数据仓库是一个组件,根据组织的需求对数据进行集中、组织和结构化。它用于数据分析和 BI 流程。
数据仓库并不是一个新概念。事实上,这个概念是在 20 世纪 80 年代末发展起来的。但是,它随着时间的推移而演变。
这篇文章的目的是解释与数据仓库相关的主要概念及其用例。此外,我们将讨论数据湖以及这两个组件如何协同工作。
TL;DR — 这篇文章包含了关于数据湖和数据仓库的基本信息。所以,如果你熟悉这些主题和它们的基本架构,这篇文章可能不适合你。如果这不是你的情况,请继续享受阅读。
为什么需要数据仓库?
一开始,一片混乱。至少这是我到达一个使用旧的电子表格和一堆 CSV 文件进行数据分析的组织时的观点。没有人不知道文件会从哪里来。他们只是…在那里。
不一致的衡量标准、不可复制的流程和大量手动复制/粘贴工作在当时很常见。
甚至没有人知道他们跟踪的指标的真正价值是什么。例如,对于月活跃用户(MAU)这样的指标,答案总是取决于你问的是谁。
如果你还和我在一起,这让你想起了什么,你可能知道拥有一个单一的真相来源是很重要的。主要是因为您不想让许多业务用户根据不一致的指标做出决策。
此外,您不希望您的数据工程师/分析师做一堆可以自动化的手动工作。当然,他们可以做比复制/粘贴电子表格更有趣的事情。
如果这是您的组织每天都面临的问题,那么您可能需要一个数据仓库。
那么,现在让我来定义什么是数据仓库…
数据仓库是一个组件,根据组织的需求对数据进行集中、组织和结构化。它用于数据分析和 BI 流程。
简而言之,在以下情况下,您可能需要数据仓库:
- 有几个人在处理数据,他们需要数据保持一致,即,他们需要一个真实的来源。因此,他们可以做出更明智的决定
- 您有几个数据来源,以手动方式集成它们并不容易
- 您希望自动化需要重复的手动流程
- 您希望基于干净、有组织和结构化的数据进行数据分析
- 您拥有维护数据仓库的资源
数据仓库基本概念
现在你知道为什么你需要一个数据仓库,让我们探索一些数据仓库的基本概念。
因此,如果您想集成多个数据源,并以一种可以执行数据分析的方式组织数据,您必须将其集中化。这就是 ETL(提取、转换和加载)过程的用武之地。
基本上,ETL 过程从数据源中提取数据,以一种可用的方式转换数据,并将其加载到数据仓库中。所以,你可以做一些很酷的分析和商业智能流程。
一个经典 ETL 过程的插图——作者制作的插图
但是,的 ETL 流程被认为是 的遗留方式 。ETL 过程表现出的一些问题是:
- 没有原始数据形式的注册表,因为转换发生在数据仓库的途中。这使得转换过程难以重现。更有甚者,如果你的数据不是一成不变的,即,数据源是不断变化的
- 向转换逻辑中引入新的变化可能很困难,因为它可能需要您重新处理已经转换的过去的数据。根据您的要求,如果您没有原始形式的数据,这可能很难实现
- 维护用于支持 ETL 过程的数据架构可能会更加复杂,因为您可能需要投入额外的资源来执行它们
还有另一种类似于 ETL 过程的方法: ELT 过程。 ELT (提取、加载和转换)流程被认为是现代的方法。基本上,它们执行相同的过程,但顺序不同。这种方法的一些主要优势是:
- 数据可以以其原始形式提取,最终以提取过程中的简单逻辑结束
- 原始形式的数据可以存储在临时区域中。这样,您可以生成不可变的数据。通过这样做,你可以使转化过程容易重现
- 转换过程可以通过使用现代数据仓库的能力来执行,因此您不必花费额外的资源来执行这样的过程
- 基于 ELT 的架构可能更容易维护,这取决于您的设置
集结地
根据 Maxime Beauchemin 的说法,理想情况下,数据仓库的暂存区应该是不可变的,也就是说,它应该是一个所有数据都以其原始形式存在的区域。因此,它可以作为您的数据仓库的装载平台。
临时区域允许您获取原始形式的数据,并在其上执行转换过程,而无需实际更改数据。因此,基本上,您将原始形式的数据作为输入,生成新的数据作为输出。
这个概念很重要,因为如果您需要更改转换过程中的一些逻辑,如果您拥有原始形式的数据,那么重新处理数据应该更容易。请记住,这是一个理想的状态,所以实现它有时会很困难。
一个不可变的暂存区应该允许你从零开始重新计算仓库的状态,以防你需要。这可以通过实现功能转换过程和纯任务来实现——更多信息请参见这篇文章。此外,查看这篇文章,了解功能数据工程概念的实施示例。
我们在一个包含四十多个应用程序的项目中集成了几个数据源。这些来源由…整合
towardsdatascience.com](/implementing-the-functional-data-engineering-paradigm-in-data-load-processes-by-using-airflow-61d3bae486b0)
数据湖
数据湖可以定义为多个数据源的存储库,其中数据以其原始格式存储。
它类似于一个数据仓库的暂存区——参见这篇帖子了解更多信息。但是,它们解决了一些数据仓库没有解决的问题。例如,处理半结构化和非结构化数据— JSON 文件、XML 文件等等。
数据仓库体系结构
此时,您可能想知道数据仓库和数据湖是如何协同工作的。
因此,简单地说,您可以通过实施 ELT 流程并遵循一些架构原则,在数据湖之上构建一个数据仓库。
查看这篇文章,了解更多关于这些原则的信息。
一种简化数据仓库的方法
towardsdatascience.com](/building-a-data-warehouse-basic-architectural-principles-66bd7059ffd0)
允许实现前面解释的方法的基本架构可能如下所示:
一个数据管道体系结构的抽象——作者举例说明
这个阶段可以描述如下:
- **来源:**来自业务运营的数据。这些数据可能来自您组织的生产数据库。此外,它可能来自您组织感兴趣的其他来源,,例如,如 CRM、API 等…
- **数据湖:**应该集中所有数据源的存储库。它可以作为数据仓库的中转区。理想情况下,它应该包含不可变的数据,这样可以很容易地保证过程的再现性。
- **数据仓库:**一个根据数据分析需要构建所有数据的来源。它建立在数据湖之上。基本上,您将数据湖的数据作为输入,通过应用一些转换逻辑,在数据仓库中生成该数据的新视图。
- **可视化:**所有的工具和过程允许你通过绘制一些图表来进行酷的分析,例如,元数据库,表格等等。这些工具应该允许您可视化数据仓库中的结构化数据。所有与复杂计算相关的繁重工作都应该在数据仓库中执行。
结论
在这篇文章中,我们讨论了一些与数据仓库和数据湖相关的基本概念。
此外,我们还讨论了这两个组件如何通过组装正确的架构来实现互补。
你应该知道,关于这个话题,你应该检查更多。
例如,一旦对数据仓库进行了初始设置,就应该实施几个过程来提高其可操作性和性能。更多信息请看这篇文章
提高数据管道可操作性和性能的五个过程
towardsdatascience.com](/building-a-data-warehouse-pipeline-basic-concepts-roadmap-d14032890ab6)
如果你想更深入地了解数据仓库的理论,别忘了查看 Ralph Kimball 的数据仓库工具包。这本书是最受认可的关于数据仓库的书籍之一。
我希望这些信息对你有用。
感谢阅读到最后。
下期帖子再见!
如果你想随时更新我的作品, 请加入我的 通迅 !偶尔,我会和我的读者分享一些东西。如果你加入我会很感激:)
我已经写了几篇关于它的文章。这就是如何阅读它们!
ajhenaor.medium.com](https://ajhenaor.medium.com/interested-in-data-warehousing-424b49ec97e4)
什么是数据仓库,何时以及为什么要考虑数据仓库
“什么时候我们应该考虑获得一个数据仓库?”
术语“数据仓库”在数据分析领域被广泛使用,然而,对于数据分析新手来说,问上述问题是很常见的。
这篇文章试图帮助解释数据仓库的定义,何时以及为什么要考虑建立一个数据仓库。
Ps:这是我们团队正在编写的指南的一部分,分析设置指南。如果您有兴趣了解更多关于现代 BI 堆栈的高级或最佳实践,请随时查看链接以了解我们的进展。
什么是数据仓库?
数据仓库是一种分析数据库,它存储和处理您的数据,以便进行分析。您的数据仓库将处理您的分析的两个主要功能:存储您的分析数据&处理您的分析数据。
**你为什么需要一个?**您需要数据仓库有两个主要目的:
- 首先,如果来自多个业务功能的数据位于不同的来源,您就不能轻松地将它们组合起来。
- 其次,您的源系统不是为运行繁重的分析而设计的,这样做可能会危及您的业务运营,因为这会增加这些系统的负载。
您的数据仓库是分析管道流程每一步的核心,它有三个主要用途:
- 存储:在整合(提取&加载)步骤中,您的数据仓库将接收来自多个来源的和存储数据。
- **流程:**在流程(转换&模型)步骤中,您的数据仓库将处理从转换步骤生成的大部分(如果不是全部的话)密集处理。
- 访问:在报告(可视化&交付)步骤中,报告首先被收集到数据仓库中,然后被可视化并交付给最终用户。
目前,大多数数据仓库使用 SQL 作为他们的主要查询语言。
什么时候是获得数据仓库的合适时机?
TL;博士的回答是*看情况。*这取决于你公司所处的阶段、你拥有的数据量、你的预算等等。
在早期阶段,您可能可以在没有数据仓库的情况下,将商业智能(BI)工具直接连接到您的生产数据库(对于刚刚起步的人来说,这是一个简单的 BI 设置)。
但是,如果您仍然不确定数据仓库是否适合您的公司,请考虑以下几点:
首先,你需要分析不同来源的数据吗?
在公司生命中的某个时刻,您可能需要组合来自不同内部工具的数据,以便做出更好、更明智的业务决策。
例如,如果你是一家餐馆,想要分析订单/服务员比率效率(一周中员工最忙和最空闲的时间),你需要将你的销售数据(来自 POS 系统)和你的员工值班数据(来自 HR 系统)结合起来。
对于这些分析,如果您的数据位于一个中心位置,就容易多了。
第二,你需要把你的分析数据和交易数据分开吗?
如前所述,您的事务系统不是为分析目的而设计的。因此,如果你在应用程序中收集活动日志或其他潜在有用的信息,将这些数据存储在应用程序的数据库中并让分析师直接在生产数据库中工作可能不是一个好主意。
相反,更好的办法是购买一个数据仓库——一个为复杂查询设计的——并将分析数据转移到那里。这样,你的应用程序的性能就不会受到你的分析工作的影响。
第三,你的原始数据源是否不适合查询?
例如,绝大多数 BI 工具不能很好地与 MongoDB 这样的 NoSQL 数据存储一起工作。这意味着在后端使用 MongoDB 的应用程序需要将其分析数据转移到数据仓库,以便数据分析师能够有效地使用它。
第四,您想提高分析查询的性能吗?
如果您的事务性数据包含成千上万行,那么创建汇总表将这些数据聚合成更易查询的形式可能是个好主意。不这样做将导致查询变得非常慢——更不用说给数据库带来不必要的负担了。
如果你对以上任何一个问题的回答是肯定的,那么你很有可能会得到一个数据仓库。
也就是说,在我们看来,获得一个数据仓库通常是一个好主意,因为数据仓库在云时代并不昂贵。
我应该选择哪个数据仓库?
以下是一些常见的数据仓库,您可以从中挑选:
- 亚马逊红移
- 谷歌大查询
- 雪花
- 点击之家(自托管)
- Presto(自托管)
如果您刚刚开始,并且没有强烈的偏好,我们建议您使用 Google BigQuery,原因如下:
- BigQuery 的第一个 10GB 存储和第一个 1TB 查询是免费的。之后就是按使用付费了。
- BigQuery 是完全托管的(无服务器):没有物理(或虚拟)服务器需要启动或管理。
- 作为其架构的结果,BigQuery 自动伸缩: BigQuery 将根据查询的复杂性和您扫描的数据量,自动确定分配给每个查询的正确计算资源量,而无需您手动微调。
(注:我们与谷歌没有任何隶属关系,我们推广 BigQuery 也没有报酬)。
但是,如果您的数据量快速增长,或者您有复杂/特殊的用例,您将需要仔细评估您的选择。
下面,我们给出了一个最流行的数据仓库表。我们在这里的目的是让您对数据仓库领域中最常见的选择有一个高层次的理解。这绝不是全面的,也不足以帮助你做出明智的决定。
但我们认为这是一个好的开始:
什么使得数据仓库不同于普通的 SQL 数据库?
此时,你们中的一些人可能会问:
“嘿,数据仓库不就像关系数据库一样存储数据以供分析吗?我就不能用 MySQL、PostgreSQL、MSSQL 或者 Oracle 之类的东西作为我的数据仓库吗?”
简单的回答是:是的,你可以。
最长的答案是:视情况而定。首先,我们需要理解几个概念。
事务性工作负载与分析性工作负载
理解两种数据库工作负载之间的区别很重要:事务性工作负载和分析性工作负载。
事务性工作负载是服务于正常业务应用程序的查询工作负载。当访问者在 web 应用程序中加载产品页面时,会向数据库发送一个查询来获取该产品,并将结果返回给应用程序进行处理。
SELECT * FROM products WHERE id = 123
(上面的查询检索 ID 为 123 的单个产品的信息)
以下是事务性工作负载的几个常见属性:
- 每个查询通常检索单个记录或少量记录(例如,获取一个类别中的前 10 篇博客文章)
- 事务性工作负载通常涉及简单的查询,运行这些查询需要很短的时间(不到 1 秒)
- 任意时间点的大量并发查询,受限于应用程序的并发访问者数量。对于大网站来说,这可以达到几千或几十万。
- 通常对整个数据记录(例如产品表中的每一列)感兴趣。
另一方面,分析工作量指的是用于分析目的的工作量,也就是这本书谈到的那种工作量。运行数据报告时,将向 DB 发送一个查询来计算结果,然后显示给最终用户。
SELECT category_name, count(*) as num_products FROM products GROUP BY 1
(上面的查询扫描整个产品表,以计算每个类别中有多少产品)
另一方面,分析工作负载具有以下属性:
- 每个查询通常扫描表中的大量行。
- 每个查询都是繁重的,需要很长时间(几分钟,甚至几个小时)才能完成
- 受报告数量或使用分析系统的内部员工数量的限制,并发查询并不多。
- 通常感兴趣的只是几列的数据。
下面是事务性与分析性工作负载/数据库之间的比较表。
事务性工作负载有许多简单的查询,而分析性工作负载很少有繁重的查询。
分析数据库的后端是不同的
由于上述两种工作负载之间的巨大差异,这两种工作负载的数据库底层后端设计非常不同。事务数据库针对具有高并发量的快速、简短查询进行了优化,而分析数据库针对长时间运行的资源密集型查询进行了优化。
你问的建筑有什么不同?这将需要一个专门的部分来解释,但它的要点是分析数据库使用以下技术来保证卓越的性能:
- **列存储引擎:**分析数据库不是将数据逐行存储在磁盘上,而是将数据列组合在一起并存储。
- **列数据的压缩:**每一列中的数据被压缩,以实现更小的存储和更快的检索。
- **查询执行的并行化:**现代分析数据库通常运行在数千台机器上。因此,每个分析查询都可以分成多个较小的查询,在这些机器上并行执行(分而治之策略)
现在您可能已经猜到,MySQL、PostgreSQL、MSSQL 和 Oracle 数据库旨在处理事务性工作负载,而数据仓库旨在处理分析性工作负载。
那么,我可以使用一个普通的 SQL 数据库作为我的数据仓库吗?
就像我们之前说的,是的,你可以,但这要看情况。
如果您刚开始使用少量数据和一些分析用例,选择一个普通的 SQL 数据库作为您的数据仓库是非常好的(最流行的是 MySQL、PostgreSQL、MSSQL 或 Oracle)。如果您相对较大,拥有大量数据,您仍然可以,但是需要适当的调优和配置。
也就是说,随着 BigQuery、Redshift 等低成本数据仓库的出现,我们建议您继续使用数据仓库。
然而,如果您必须选择一个普通的基于 SQL 的数据库(例如,您的企业只允许您在自己的网络内托管它),我们推荐使用 PostgreSQL ,因为它拥有最多支持分析的特性。我们也写了一篇详细的博文讨论这个话题:为什么你应该使用 PostgreSQL 而不是 MySQL 来进行分析。
摘要
在这篇文章中,我们放大到数据仓库,讨论了:
- 数据仓库是中央分析数据库,用于存储和处理您的数据以进行分析
- 您应该获得数据仓库的 4 个触发点
- 可供选择的数据仓库技术的简单列表
- 数据仓库如何针对分析工作负载进行优化,而传统数据库如何针对事务工作负载进行优化。
最初发表于Holistics 的《分析设置指南:了解数据仓库 。
什么是甘?
左和右:甘斯和 dreamgenerator.com 的作品,中间的照片是由特拉维斯·科尔伯特在 Unsplash 上创作的原作
一个怪异的想法如何成为尖端人工智能的基础
T 上任何关于机器学习的课程,你都会不可避免地遇到生成性对抗网络(GANs)。理解它们意味着掌握让计算机与自身对抗的惊人力量。
现在大约五点钟,你刚刚完成作业。
“我不干了!”
太好了!你想玩游戏吗?
耶!今天我们要玩大富翁游戏。
啊,垄断!老实说,我讨厌其中一个玩家得到所有的财产,而另一个玩家不可能赢。
加油!“求你了!”
“那好吧,”
半小时后,你我的财产还是相当平均分配的。
看到了吗?垄断没那么糟糕。
你说得对。我之前说过,因为我正在构建的算法有问题。不知何故,一个选手比另一个选手出色是出了名的。我很难解决这个问题。
用 dreamgenerator.com 上的神经网络制作的图像——原始图片是右上方中间的那张。
啊?“算法中怎么会有玩家呢,”
当你和甘斯打交道时,你就有了对手。
什么?“什么是甘斯,”
让我解释一下。“你知道什么是神经网络吗?”
“呃,不。”
神经网络基本上是一种用来识别模式的算法。例如,面部识别非常依赖神经网络。
你给它一堆无序的数据——比方说人脸的图片——随着时间的推移,它会知道一张人脸是什么样的。我们称之为训练。
“一旦我们训练了神经网络,我们可以给它看一张随机的图像,它会以令人印象深刻的准确度决定这是不是一张人脸。”
Rajarshi Bhadra 以一种非常简单的方式描述了神经网络的功能以及它们为什么如此重要。
towardsdatascience.com](/what-is-a-neural-network-a02b3c2fe3fa)
好吧,神经网络可以告诉你一张脸是不是一张脸。“那么什么是甘?”
GAN 是指我们让两个神经网络互相竞争。就像在游戏中一样。
你让电脑和自己玩?“这多愚蠢啊,”
这并不愚蠢。真是天才,”
“你得给我解释一下……”
第一个神经网络称为生成器。它会生成虚假数据点,并将其传递给对手。那是第二个网络,鉴别器。它的工作就是分辨哪个数据点是真的,哪个是假的。
TL;dr: GANs 比你想象的要简单
medium.com](https://medium.com/@devnag/generative-adversarial-networks-gans-in-50-lines-of-code-pytorch-e81b79659e3f)
首先,我们在一组真实和虚假的数据点上训练鉴别器。鉴别者猜测什么是真的,什么是假的。之后,我们揭开了真正的解决方案。根据反馈,鉴别者知道什么是假的,什么不是。
就像在警察学院一样,学生们必须区分真钞和假钞。
没错。但是现在发电机开始发挥作用了。他是我们游戏中的伪钞制造者。我们给他真的和假的数据点来训练。基于这些点,它的工作是制造新的数据点来欺骗鉴别器。
但是只给生成器真实的数据点不是更好吗?因为如果你在假货上训练它,那么它会重复那些错误。如果你让我伪造一张 300 美元的钞票,警察会很快抓住它。
用 GAN 在上制作的图像——原图为中间的上图。
你说得对!但是我们不希望发电机变得太好太快。不然鉴别器跟不上。”
哦,就是那个垄断问题?在垄断游戏中一个玩家得到了太多的财产。然后就变得无聊了,因为另一个玩家无论如何都赢不了。
没错。我们想时不时地误导生成器。这样歧视者就有机会跟上了。
好吧,假设发电机制造了假数据。现在它可以骗过鉴别器了,对吗?
好吧,它会努力的。鉴别器将有望在区分真实数据点和虚假数据点方面做出合理的工作。然后,它会将自己的决定通知发电机。
比如警察什么时候会告诉一个罪犯他是否被判有罪?
没错。基于这个决定,发电机将再次开始工作。它会制造新的假货,但根据反馈,它会努力让假货变得更好,以便骗过鉴别者。
然后再轮到鉴别者,以此类推。最终,我们使用 GAN 生成了一堆新的数据点!”
好吧酷。“但这有什么用呢,”
你可以用它做各种事情。例如,你可以根据别人的想法,制作漂亮的新图片。
你可能听说过深度假货。这些照片是用甘斯做的。“你听说过可以辨别人脸年龄的应用吗?”
呸。噱头!”
创建一个生成现代艺术的生成对抗网络,并在 Spell 平台的 GPU 上进行训练
towardsdatascience.com](/generating-modern-arts-using-generative-adversarial-network-gan-on-spell-39f67f83c7b4)
哦,它们可能有用!例如在多年后抓捕罪犯。
甘也被用来对图片进行很好的描述。这对搜索引擎非常有用,对视力受损的人也是如此。你基本上是在教计算机如何看,以及如何解释它看到的东西!
我们还没有到达终点。有太多的应用有待探索。
如果你这么说的话……但你之前说过你的 GAN 有问题。
没错。这是垄断问题——即使我给我的发电机 evough fakes 进行训练,它也变得太好太快了。所以鉴别者一直放弃……”
一步一步地建立导致 GANs 的推理。
towardsdatascience.com](/understanding-generative-adversarial-networks-gans-cd6e4651a29)
“哦,天哪!”
这是 GANs 的一个常见问题。如何更好地平衡系统的研究仍在进行中。
好吧,那我就让你继续解决你的问题。反正这一轮大富翁我已经赢了。
等等,什么?我一定是因为想我的甘斯而分心了…该死,这一轮你赢了!
耶!我现在就让你继续你的 GAN 垄断生意。
谢谢你。“但是等着瞧吧——明天是我的复仇之轮!”
什么是 GPU,深度学习需要 GPU 吗?
穆基尔·梅农在 Unsplash 上拍摄的照片
在深度学习中,大家似乎都推荐用 GPU。它是什么,没有它你能做什么,它到底是给谁的?
任何试图大规模提高训练模型性能的数据科学家或机器学习爱好者都会在某个时候遇到上限,并开始经历不同程度的处理延迟。当数据集变大时,使用较小的训练集需要几分钟的任务现在可能需要更多的时间,在某些情况下需要几周。
但是什么是 GPU 呢?它们与 CPU 相比如何?我的深度学习项目需要一个吗?
如果你曾经问过自己这些问题,请继续读下去…
我最近开源了我的计算机视觉库,它利用 GPU 进行动态图像和视频处理。我会留下 Github 回购的链接,以防你感兴趣:)
用于高性能人工智能研究的轻量级计算机视觉库。Caer 包含强大的图像和视频处理操作…
github.com](https://github.com/jasmcaus/caer)
任何数据科学家或机器学习爱好者都会听说,深度学习需要很多硬件,至少在他们的一生中会听到一次。一些人在他们的笔记本电脑上训练简单的深度学习模型几天(通常没有 GPU),这导致了一种印象,即深度学习需要大系统来运行执行。
这创造了一个围绕深度学习的神话,为初学者制造了一个路障。
在过去的几年里,我参考的每本书的作者总是提到以下几点:
深度学习需要大量的计算能力来运行。
但是我没有数据中心可供我使用,当我在一台相当大的笔记本电脑上构建我的第一个深度学习模型时,我知道这个共识要么是错误的,要么是用一些真理描绘的。
你不必接管谷歌就能成为深度学习专家。
为什么深度学习需要更多的硬件?
对于任何神经网络来说,深度学习模型的训练阶段是资源最密集的任务
在训练过程中,神经网络接收输入,然后使用在训练过程中调整的权重在隐藏层进行处理,然后模型给出预测。调整权重以找到模式,从而做出更好的预测。
这两种操作本质上都是矩阵乘法*。简单的矩阵乘法可以用下图来表示*
来源:jeremyjordan.me
在一个神经网络中,我们可以将第一个数组的输入到神经网络,而第二个数组形成它的权重。**
很简单,对吧?
是的,如果你的神经网络有大约 10,100 甚至 100,000 个参数。计算机仍然能够在几分钟内,甚至最多几个小时内处理这个问题。
但是如果你的神经网络有超过 100 亿个参数呢?使用传统方法训练这种系统需要年*。你的电脑可能在你完成十分之一之前就放弃了。*
“一个神经网络接受搜索输入,并从 1 亿个输出或产品中进行预测,通常每个产品会有大约 2000 个参数。所以你把它们相乘,神经网络的最后一层现在是 2000 亿个参数。我没有做过任何复杂的事情。我说的是一个非常非常死简单的神经网络模型。”—莱斯大学的一名博士生
让深度学习模型训练得更快
深度学习模型可以通过简单地在同时运行所有操作而不是一个接一个地运行来更快地训练。
你可以通过使用一个 GPU 来训练你的模型来实现。
GPU(图形处理单元)是具有专用存储器的专用处理器,其通常执行渲染图形所需的浮点操作
换句话说,它是一个用于大量图形和数学计算的单芯片处理器,可以为其他任务释放 CPU 周期。
GPU 和 CPU 之间的主要区别是,与 CPU 相比,GPU 在算术逻辑单元上投入更多的晶体管,而在缓存和流控制上投入更少的晶体管。
虽然 CPU 主要适用于需要解析或解释代码中复杂逻辑的问题,但 GPU 是为计算机游戏的专用图形渲染工具而设计的,后来得到了增强,以加速其他几何计算(例如,将多边形或垂直旋转到不同的坐标系,如 3D)。
GPU 比 CPU 小,但往往比后者有更多的逻辑核心(算术逻辑单元或 alu、控制单元和内存缓存)。
来源:fast.ai
在上面的图表中,您可以看到 GPU(红色/绿色)理论上可以完成 CPU(蓝色)的 10-15 倍操作。这种加速在实践中也非常适用。
如果你把 CPU 看成一辆玛莎拉蒂,GPU 可以看成一辆大卡车。
CPU(玛莎拉蒂)可以快速读取 RAM 中的少量包(3 -4 名乘客),而 GPU(卡车)速度较慢,但可以一次读取大量内存(约 20 名乘客)。
该视频进一步概述了这一概念:
为什么选择 GPU 进行深度学习
GPU 针对训练人工智能和深度学习模型进行了优化,因为它们可以同时处理多个计算*。*
它们拥有大量内核,可以更好地计算多个并行进程。此外,深度学习中的计算需要处理大量数据——这使得 GPU 的内存带宽最合适。
有几个决定参数决定使用 CPU 还是 GPU 来训练深度学习模型:
内存带宽:
带宽是 GPU 比 CPU 计算速度更快的主要原因之一。对于大型数据集,CPU 在训练模型时会占用大量内存。
计算巨大而复杂的任务占用了 CPU 中大量的时钟周期——CPU 按顺序处理任务*,并且拥有比它的对手 GPU 更少的内核数量。*
另一方面,独立的 GPU 配备了专用的 VRAM(视频 RAM)内存。因此,CPU 的内存可以用于其他任务。
一段时间内 CPU 和 GPU 带宽的比较
数据集大小
在深度学习中训练模型需要大型数据集,因此在内存方面需要大量的计算操作。为了高效地计算数据,GPU 是最佳选择。计算量越大,GPU 相对于 CPU 的优势就越大。
最佳化
在 CPU 中优化任务要容易得多。CPU 核虽然少,但比成千上万的 GPU 核更强大。
每个 CPU 内核可以执行不同的指令(MIMD 架构),而 GPU 内核通常由 32 个内核组成,在给定时间并行执行相同的指令(SIMD 架构)。
考虑到所需要的努力,密集神经网络中的并行化是非常困难的。因此,复杂的优化技术在 GPU 中比在 CPU 中更难实现。
该不该用 GPU?
与任何数据科学项目一样,这取决于具体情况。在速度、可靠性和成本之间需要权衡考虑:
- 如果你的神经网络规模相对小,没有 GPU 也可以凑合
- 如果你的神经网络涉及成吨的计算涉及成千上万的参数,你可能要考虑投资一个 GPU
一般来说,对于快速机器学习来说,GPU 是一个更安全的赌注,因为在其核心,数据科学模型训练由简单的矩阵数学计算组成,如果并行执行计算,其速度可能会大大提高。
参见 Reddit 上关于深度学习投资的最佳 GPU 的帖子
云 GPU 实例
你也应该给云 GPU 一个思路。如果你不想买一堆昂贵的 GPU,你可以通过云托管公司按需利用 GPU。它们将使您无需配置硬件,最重要的是,它们并不昂贵,在您使用它时,成本可以低至每小时 0.25 美元。
一旦你完成了,记得关闭你的云实例。
你将租用国外的计算机/服务器,而不是自己运行。仅仅关闭你的浏览器或你的电脑是不够的,这些只会切断你的设备和这个远程服务器之间的连接,而不是关闭你为之付费的东西。否则,你将为它运行的所有时间付费,并得到一个讨厌的账单!
CPU 最擅长顺序处理单个更复杂的计算,而 GPU 更擅长并行处理多个但更简单的计算。
GPU 计算实例的成本通常是 CPU 计算实例的 2-3 倍,因此除非您在基于 GPU 的培训模型中看到 2-3 倍的性能提升,否则我会建议使用 CPU。
一如既往,非常感谢您的阅读!请告诉我你的想法或者希望我接下来在评论中写些什么。我也乐于接受批评!
下期帖子再见!😄
什么是图形数据库?
回到第一原则…
在过去的几年中,已经有很多关于图形数据库作为一种独特的数据库类型的文章,并且很容易原谅相信附带的营销材料保证了图形数据库与任何其他数据库的区别。
那么营销材料说了什么,你应该给多少信任呢?
图形数据库和图形
图形数据库被描述为在 图形 上操作的数据库,其中事物之间的关系很重要。图形是一种结构,图形数据库的底层图形映射存储在数据库中的数据的结构或模式。
下图是一个电影院座位预订数据库解决方案的图表模型。我们将使用这样的模式来预订座位,以便在电影院的特定时段观看电影。我相信可以很容易地说,图模式是一目了然的。
属性图模式
带有一个或多个箭头的每条线或边表示所谓的节点或顶点之间的关系,并形成所谓的有向图。模型本身的类型被称为属性图模式。属性图模式的属性组件将其名称用于节点和边可以具有属性的地方,例如喜欢边的等级和人节点的年龄。
NB 在数学的图论中,关系不需要用一个或多个箭头来指示,或者有一个读数(例如喜欢)所以我们在这里采取许可,在座位和预订之间有一个双向边,因为,让我们面对它,所有的关系都是双向的, 在这个模式中,我们使用双向映射让我们知道一个预订可以针对许多座位,一个座位可以在许多预订中……这种信息通常不会以这种方式在属性图模式中捕获,因为当涉及到底层模型的更好的语义时,常用的图模式就显得不够了。
带有一个大箭头和一个小箭头的边让我们知道该读数在生成该模式的软件的模式中存储有一个倒数读数。例如时段 在 影院可能有互读影院 主持 时段。
当查询数据库时,这些节点之间的关系用于在数据库中的数据上导航。例如,我们可以编写一个图形查询,如下所示:
图形查询
以图形方式查看数据库模式并以图形方式查询数据库的优势在于,查询结果也可以以图形方式查看。在我们的示例中,“大西部电影院”主持一个会话,该会话有一个座位的预订,该座位位于第 1 行……在下面显示为“1 1 ”,因为该行位于电影院 1,即我们示例数据库中的大西部电影院。类似地,那一行中有座位“A”和“B”的预订,等等。
挑战“专门建造”的格言
图形数据库的营销材料通常声称图形数据库是为图形处理而专门构建的。也许是这样,但是在这篇文章中,我们对“目的建造的说法提出质疑,并提出有效的问题,
-“所有数据库都是图形数据库吗?”;还有
——“是不是所有的数据库都可以用一种图查询语言来查询?”
也就是我们问,“什么是图形数据库?”
专用图形数据库
毫无疑问,有专门为图形处理而建立的数据库。让我们称这些为专用图形数据库。在我看来,这些是最没意思的数据库。
如果所有的数据库都可以看作一个图形数据库,为什么要把自己局限于图形处理呢?
还有哪些其他类型的数据库处理?
我们找到了这篇文章的症结所在。图形数据库的供应商经常将他们的产品与被称为“关系数据库”的数据库的主要销售类型区分开来,否则他们就只是在销售一个数据库。
什么是关系数据库?
顾名思义,关系数据库是一种关系很重要的数据库。与其写一篇关于关系数据库是什么样子的论文,不如让我们把我们例子中的相同模式看作一个实体关系图(ERD) ,这是一种用于查看关系数据库关系的模式。
下面的动画在属性图模式(PGS)和实体关系图之间来回切换,显示我们谈论的是同一个模式,只是视角不同。
NB 用数学术语来说,属性图模式和实体关系图有一个概念元模型,它带有一个接近于同构的同态。
演示属性图模式和实体关系图之间的同态/同构
图形查询及其流行原因
因为图数据库很容易为数据库模式中的每个关系存储谓词信息,所以可以用利用谓词信息的语言来查询数据库,这有助于易于阅读的查询。
以下是对我们的影院预订模式进行图形查询的示例:
用于图形数据库的图形查询
图形查询的美妙之处不仅在于它们易于阅读,而且易于编写。上面的查询是用知识语言写的(www.factengine.ai)。
这与您如何用通常用于关系数据库的结构化查询语言编写相同的查询形成对比:
选择电影院。CinemaName,Row。Cinema_Id,世界其他地区。前排,请坐。Cinema_Id,座位。前排,请坐。信,预订。Person_Id,预订。Film_Id,订票。日期时间,预订。Cinema_Id,Person。登录名
从电影院,
排,
座,
订票,
人,
场次
,订票地点
在哪排。Cinema_Id =电影院。Cinema_Id
和座位。Cinema_Id = Row。Cinema_Id
和座位。RowNr =行。RowNr
和 BookingHasSeat。Person_Id =预订。Person_Id
和 BookingHasSeat。Film_Id =预订。Film_Id
和 BookingHasSeat。日期时间=预订。日期时间
和 BookingHasSeat。CinemaId =预订。Cinema_Id
和 BookingHasSeat。RowNr =座位。RowNr
和 BookingHasSeat。Cinema_Id =座位。Cinema_Id
和 BookingHasSeat。字母=座位。信函
和预订。Person_Id =人员。Person_Id
和预订。Film_Id =会话。电影 _Id
和预订。日期时间=会话。日期时间
和预订。Cinema_Id =会话 Cinema_Id
和会话。Cinema_Id =电影院。Cinema_Id
和人。登录名= ‘彼得’
我认为这就是图数据库及其查询语言流行的原因。以图表形式查看结果集也很方便。大多数图形数据库也允许您以表格格式查看结果。
表格格式的图形查询结果
与图表相同的结果
到目前为止,一切顺利
我们讨论了图形数据库如何映射数据库的模式,以及如何查询图形数据库中的数据。我们已经看到了如何以表格或图形的方式查看对图形数据库的查询返回的数据。
那么你准备好去买一个图形数据库了吗?
也许没那么快…
事情是这样的。本文中的模式、查询和结果都涉及关系数据库。FactEngine 倡议摒弃了这样一种观念,即你需要一个专用的图形数据库来达到图形数据库的质量。事实上,研究表明许多图查询在关系数据库上执行得更快[1]。
多模型数据库
我现在可以写一篇文章,“什么是关系数据库?”,但反之亦然…每个关系数据库都是一个图形数据库。因此,如果您喜欢图形和图形查询的外观和感觉,这篇文章就足够了。
支持关系和图形处理的数据库称为多模型数据库。FactEngine 的主题是“所有的数据库都是多模型的… ”并回答问题“什么是图形数据库?”“所有的数据库都是图形数据库,除了思维不同”。
这可能会让一些人感到震惊,但不应该有争议。使用正确的工具,所有的数据库都是多模型的。也就是说,所有的数据库可以同时被视为一个图形数据库和一个关系数据库。
什么是图形数据库?
您来这里是为了了解什么是图形数据库,所以让我们现实地定义它,以避免混淆。
“图形数据库是可以在其上编写图形模式和图形查询的任何数据库”。简单。
专用的图形数据库可能不利于你的企业、商业或个人应用。关系数据库可以提供关系数据库特有的好处,而这些好处是专用图形数据库所没有的。
作为一个产品和信息的消费者,我觉得我们需要意识到大多数图形数据库的定义来自那些想要卖给我们一个专用的图形数据库的人。我的工作是让人们意识到图形数据库的定义是数据库有什么属性,而不是谁把什么卖给谁。如果您已经有了一个图表数据库,为什么还要跑出去买呢?
感谢您的阅读。如果时间允许,我会写更多关于图形数据库、关系数据库和多模型数据库的文章。我希望这有助于理解什么是图形数据库,什么是专用图形数据库。
附录:自从这篇文章发表以来,术语“关系知识图”已经浮出水面,许多图形数据库供应商正致力于提供关系数据库的特性,反之亦然。参见什么是关系知识图?
— — — — — — — — — — — — — — — — — — — — — — — — — — —
NB 本文表达的模型原始版本版权归 Clifford Heath 和 Data Constellation 所有,在 GitHub 上的 ActiveFacts 项目下共享:https://github.com/cjheath/activefacts。示例和许可证位于:https://github.com/cjheath/activefacts-examples
- Rawlani,p .等人,“关系数据库的图形分析”,麻省理工学院,https://dspace.mit.edu/handle/1721.1/100670,于 2020 年 8 月 24 日获取
**附录:**另请参见 Jindal,a .等人的“关系数据库上的图形分析”,麻省理工学院。