大量的情感故事和强大的故事隐藏在大量的数据中,等待被发现。

讲完这些故事后,他们就有能力改变职业,企业和整个人群。

以惠而浦为例。他们发现了一个社会经济问题,可以通过品牌来利用。

他们挖掘了数据以找到与之相适应的社会原因,并发现每天有4000名学生因为负担不起衣服的清洁而辍学。

惠而浦向有高危儿童的学校捐赠了洗衣机和干衣机,并跟踪了出勤情况。

该品牌发现,这些学生中有90%的出勤率有所提高,几乎相同数量的孩子的课堂参与度有所提高。该活动非常有效,赢得了许多奖项,包括戛纳国际创意节创意数据收集和研究大奖赛。

大品牌可以负担得起屡获殊荣的创意机构,这些机构可以开展像这样的活动,但对于大多数小型企业而言,这是不可能的。

引起关注的一种方法是找到有力的故事,由于营销人员和数据科学家之间存在鸿沟,因此尚未被发现。

我介绍了一个简单的框架来实现此目的,它围绕着重新定义已经流行的可视化。存在重组的机会是因为营销人员和开发人员在孤岛中运作。

作为营销人员,当您将数据项目移交给开发人员时,他们要做的第一件事就是删除上下文。

开发人员的工作是概括。但是,当返回其结果时,您需要添加上下文,以便进行个性化设置。

没有用户上下文,开发人员将无法提出正确的问题,从而导致建立牢固的情感联系。

在本文中,我将向您介绍一个示例,向您展示如何通过ing带流行的内容来提出强大的可视化和数据故事。

这是我们的行动计划。

  • 我们将从subreddit重建流行的数据可视化 数据美丽。
  • 我们将从公共网页上收集数据(包括从移动图表中收集的一些数据)。
  • 我们将通过询问与原始作者不同的问题来重新构建可视化。

重新设计的可视化

这就是我们重新构图的可视化外观。它显示了迪士尼最佳游乐设施,按照其在不同年龄段的娱乐程度来排名。

这是原始的 在Reddit上分享。它显示了迪士尼最佳游乐设施与它们持续多长时间以及您需要排队等候多长时间的比较。

我们重建的可视化

我们的第一步是重建在subreddit中共享的原始可视化。数据科学家共享了他使用的数据源,但没有共享代码。

这给了我们一个很好的机会来学习如何在Python中抓取数据并将其可视化。

我将像往常一样分享一些代码段,但是您可以在此找到所有代码 Google Colab笔记本。

提取我们的源数据

原始可视化包含两个数据集,一个包含行驶时间,另一个包含其平均等待时间。

首先,从此页面收集乘车时间 https://touringplans.com/disneyland/attractions/duration。

我们将完成以下步骤以提取乘车时间:

  1. 使用Google Chrome浏览器获取带有行驶持续时间的HTML DOM元素选择器。
  2. 使用requests-html从源页面中提取元素。
  3. 对持续时间数字使用简单的正则表达式。

接下来,我们需要从该页面收集平均等待时间 https://touringplans.com/disneyland/wait-times。

这是更具挑战性的提取,因为我们想要的数据在移动图表中。

我们将完成以下步骤以提取平均等待时间:

  1. 使用request-html从源页面提取JavaScript代码段。
  2. 使用正则表达式从JavaScript代码中提取数据行以及图表的游乐设施名称/标题。
  3. 使用Jinja2模板将自定义JavaScript函数拼凑在一起,该函数返回我们在步骤2中提取的值。
  4. 使用Py_mini_racer执行自定义JavaScript函数并以Python格式获取数据。

为了将图表中嵌入的JavaScript数据转换为Python,我们将执行一个巧妙的技巧。

我们将使用要抓取的代码片段将JavaScript函数拼接在一起。

我们将使用定界符来定义要提取的片段,并使用Jinja2模板在正常运行的JavaScript函数中将它们一起使用。该函数将返回包含骑行时间的字典。

我们将使用一个晦涩的库执行这些功能, Py_mini_racer。该库从Python运行JavaScript代码,并返回我们可以使用的Python对象。

我尝试使用 PyV8引擎 来自Google,但无法正常运行。看来该项目已被放弃。

现在,我们有了生成图表所需的两个数据集,但是首先需要进行一些处理。

处理我们的源数据

我们需要合并我们抓取的数据集,清理它们,计算平均值等。

我们将完成以下步骤:

  1. 将提取的数据集拆分为两个Python字典。一种带有时间戳,另一种带有每次骑行的等待时间。
  2. 筛选少于64个数据点的游乐设施,以使每次游乐设施保持相同的数据行数。
  3. 计算每次骑行的平均等待时间。
  4. 将每次乘车的平均等待时间和乘车时间合并为一个数据帧。
  5. 用空列消除行。

这是最终数据帧的外观。

可视化我们的数据

我们快要完成了。在这一步中,我们要做有趣的部分!可视化我们创建的数据框。

我们将完成以下步骤:

  1. 将pandas数据框转换为面向行的字典。 X轴是平均等待时间,Y轴是骑行持续时间。标签是“乘车”名称。
  2. 采用 密谋 生成标记的散点图。

您需要手动拖动标签以使其更清晰。

最终,我们获得了与Reddit上的原始图像非常相似的可视化图像。

在最后一步,我们将根据为该数据收集的相同数据生成原始可视化文件。

重新整理我们的数据

重建原始的可视化文件需要认真的工作,我们没有生产任何新产品。我们将在最后一节中解决这个问题。

原始的可视化效果缺乏情感上的吸引力。如果游乐设施对我来说不好玩怎么办?

我们将提取一个附加数据集:不同年龄段的每次骑行收视率。这将帮助我们将不确定的等待时间缩短的最佳游乐设施形象化,并且对于特定年龄段的人来说,哪个游乐设施会更有趣。

我们将完成以下步骤以重新构造原始可视化文件:

  1. 我们想知道哪个年龄段的人每次骑行都会最有趣。
  2. 我们将从中获取每个年龄段的平均骑行等级 https://touringplans.com/disneyland/attractions。
  3. 我们将计算每个乘车和年龄组的“娱乐分数”,即每次乘车的分钟数除以平均等待时间。
  4. 我们将使用Plotly来显示带有结果的条形图。

这是包含我们额外数据的页面。

就像我们拉长了骑行时间一样,我们刮擦它。

让我们使用一个新指标来总结原始数据框架:享受得分。 ?

我们将其定义为等待时间的平均持续时间。这个数字越大,我们就应该越有趣,因为我们排队的等待时间更少。

这就是我们新的“享受得分”指标所更新的数据框的外观。

现在,让我们对其进行可视化。

最后,我们获得了这种美丽而又有价值的可视化效果。

资源与社区项目

去年1月,我收到了一封电子邮件,启动了我的“ Python十字军东征”。 Braintree拒绝了RankSense的商家帐户申请,因为他们将SEO视为高风险类别。

紧挨算命先生,邮购新娘和“快速致富”计划!

我们已经进行了三周的整合。我感到非常生气和尴尬。

去年,我在数据科学和AI社区中度过了愉快的时光。我学到了很多很酷的东西,玩得很开心。

我进入SEO领域的时间可能太长了。可悲的是,我们这一代人犯了一个大错误,那就是让炒作和魔术欺骗人们对SEO的理解。

结果,太多的企业沦为熟人。

我可以选择离开SEO社区,也可以尝试鼓励新一代人推动变革,以便我们的社区成为一个有趣而自豪的地方。

我决定留下,但我担心试图以最小的社会影响力自己推动变革将是不可能的。

幸运的是,我看着这个 强大的视频,写了这样的 宣言,并全力以赴每月写一些实用的Python文章。

我很高兴看到不到六个月的时间,Python在SEO社区中无处不在,并且势头还在不断增长。

我对我们的社区和未来的辉煌感到非常兴奋。

现在,让我继续介绍我们每个月都会继续开展的出色项目。因此,很高兴看到更多人加入Python潮流。 ?

泰勒(Tyler)共享了一个使用文本排名摘要程序自动生成元描述的项目。

雨果分享了他的第一个脚本,该脚本可以自动导出SEMrush报告。

杰弗里(Jeffrey)正在研究一种AI工具,以打破作者的障碍,并开源他的Python后端。

Charly正在研究URL转换器和分类器。

图片积分

作者截取的所有屏幕截图,2019年10月
后期图片:由作者提供