来数据趴,打开百老汇大数据的舞台大门!

点击上方关注,All in AI中国

作者:Yaakov Bressler

剧院是一个令人兴奋的行业,其形式和产品仍然是一种亲身体验,尽管技术迅速发展。与这种坚定立场相反,百老汇的商业环境已经变得高度现代化,其中数字营销、社交媒体、电子票务和动态定价处于娱乐领域技术进步的前沿。

来数据趴,打开百老汇大数据的舞台大门!

然而,与娱乐中的大多数派别一样,百老汇还没有发展成为大数据分析的领域。百老汇的数据存储站点:百老汇联盟、IBDB、Playbill、PlaybillPro、百老汇世界、戏剧索引证明了这一点,这些站点提供了广泛的生产相关数据,但是没有提供API。

获得此类数据的简化方法对于剧院迈向未来的下一步是必要的。本文介绍了我在百老汇打开大数据"舞台大门"的方法和实现。本文中提到的所有代码都可以通过谷歌驱动的Colaboratory记事本获得,该记事本可在此处找到。

Colaboratory是一款免费的Jupyter记事本环境,无需设置即可完全在云中运行:https://research.google.com/colaboratory/faq.html

来数据趴,打开百老汇大数据的舞台大门!

汉密尔顿的粉丝们在舞台大门排队,在这儿有机会见到演员。同样,分析师和数据书呆子也在等待百老汇的大数据之门开放。

步骤1:可用数据

剧院自然是面向未来的,因此大多数与消费者体验相关的数据都是公开的,这并不足为奇。这些数据有三个一般类别:

  • 制作信息,如演员时间、演员表、演出类型、奖项提名和获奖次数等。
  • 财务信息,包括每周总收入、容量、每张票价等。
  • 运营信息

*以包装报告(此处说明)、座位卡、动态定价计划以及社交媒体和网站流量的形式。

*请注意,鉴于其专有性质,此数据不公开。

可用数据位于以下网站:

  • 百老汇联赛 - 财务信息。
  • IBDB - 生产信息+财务信息。
  • 节目单 - 财务信息。
  • PlaybillPro - 生产信息+财务信息。
  • 百老汇世界 - 生产信息+财务信息。

如上所述,这些网站数据没有提供API或大量下载选项,使这些网站所有者拥有超过分析师的巨大权力并抑制大数据分析。

要访问这些数据,我需要开发一个网站抓取程序。从初步分析开始,我决定采用敏捷的开发方法。我估计,这个分析的结果将为我的抓取技术提供信息。

对于那些不熟悉的人来说,网络抓取是利用软件大量自动下载、格式化和组织网络数据。

为了更好地利用这种方法,我需要一个现有的大型数据集。通过网络浏览后,我偶然发现了CORGIS数据库,该数据库提供了1990年至2016年百老汇收入的公开数据集。该数据集的维度是9个非冗余字段和31,300行,具有足够的统计意义。那么现在可以进行下一步了。

来数据趴,打开百老汇大数据的舞台大门!

广告牌在时代广场播放百老汇节目。就像这些广告牌一样,百老汇的大部分数据都是前瞻性的。

步骤2:探索和分析

由于CORGIS数据集是完全结构化的,没有任何重大错误(少于0.01%的数据是错误的),我选择继续进行探索性分析。我选择的编程语言是R,因为它具有代数功能,大量高级统计软件包以及高级数据可视化的简单性。

在不深入研究分析中使用的方法的情况下,我从下面的分析中突出显示了3个选择输出。值得注意的是,未提供用于这些分析的脚本。

来数据趴,打开百老汇大数据的舞台大门!

每个季度随时间推移的平均票价

  • 每个季度平均票价的周期性是明显的。
  • 门票通常在秋季以最高价出售,是春季最低价。
  • 门票价格大幅上涨,在过去二十年中价格几乎翻了一番。

来数据趴,打开百老汇大数据的舞台大门!

每个季节的总面积(收入)随时间的堆积区域时间序列。

  • 每季度总消费的周期性是明显的。
  • 与票价相似,总票房数量随着时间的推移而大幅增长,在过去二十年中增幅超过三倍。
  • 值得注意的是,毛利率已超过票面价格中位数,这表明百老汇制作的收入增加是因为销售的票数低于中位数价格,而不是抬高整体价格。

K-Means聚类"热门节目"

来数据趴,打开百老汇大数据的舞台大门!

K表示根据容量(capacity),总量(gross)、演出类型和演出次数对"热门"和"非热门"制作进行聚类。

  • 根据%Capacity和Gross Potential($)绘制容量。
  • 大小表示表演的数量。
  • 形状('M'与'P')表示显示类型。
  • 热门作品的特点是2个焦点中心,由R集群包的轮廓功能决定。
  • K-means计算超过3个变量:容量、总量和演出数量。
  • 大多数热门作品都是音乐剧。
  • 所有表现最佳的热门剧目都是音乐剧。

步骤3:反思初步分析

我的初步分析产生了一些关于周期性、出勤率和价格变化的有趣结果。

然而,我的数据集的时间在2016年8月结束,这并未包括来自热门音乐剧汉密尔顿(2015年8月开幕)和《亲爱的埃文·汉森》(2016年12月上映)。这些音乐剧的到来可以说改变了百老汇剧院的经济、人口统计和创作风格。因此,排除这些产品的到来的数据集可以被认为是过时的和不可推广的。

来数据趴,打开百老汇大数据的舞台大门!

此外,我的数据集没有包含制作的创意信息。因此,任何汇总的结果都可能被错误地分类得过于宽泛,使得我的结果不可推广。简单地说,一个演员级别为30,演出时间为2.5小时,且中场休息的音乐剧可以被认为与一个演员阵容为5的音乐剧完全不同,运行时间为90分钟,没有中场休息。

因此,除了包含节目创意信息的数据集之外,我还需要更新的总收入数据集,然后才能将我的分析推广到当前的百老汇市场。

步骤4A:获得更好的数据 – 网络抓取

使用我的初步分析作为需要数据的指标,我访问了前面描述的数据存储网站,以确定哪种网站最适合网络抓取。

我选择抓取由静态html页面组成的百老汇世界,因为我对html代码非常满意。其他百老汇数据站点通过JavaScript显示动态页面的数据。

我的网页抓取选择的编程语言是Python,因为它具有大数据集的速度,复杂的机器学习功能和巧妙的网络抓取包。我选择的包是网页抓取的标志:scraping、beautiful soup、urllib、request。

步骤4B:抓取百老汇票房收入

我在抓取百老汇的十字架上的第一步是为百老汇世界的索引中的每个百老汇节目编制一份网址列表:show_urls。为了构建这个列表,我构建了另一个URL列表,其中包含每个节目的名称链接(a-z,#),总共有27个页面:list_loop_az。在迭代第二个列表(list_loop_az)时进行抓取,得到所有显示链接的列表,长度为13,568个URL。

下面是一段代码,我在其中获取所有百老汇演出的网址列表:

来数据趴,打开百老汇大数据的舞台大门!

来数据趴,打开百老汇大数据的舞台大门!

使用pandas的read_html函数解析此列表的总数据非常简单。我对每个页面中的表格进行了表征,选择了包含粗略信息的表格,编写了一个清洁、验证和代表数据的流畅的整洁脚本。把它们放在一起,我有一个简洁的脚本,返回所有百老汇的gsses csv(这里有文件)。

这个数据集包含1984年6月至今的节目。它的维度是14个非冗余字段和14,874(CORGIS集的垂直大小的一半,原因我还没有调查过)。

来数据趴,打开百老汇大数据的舞台大门!

来自音乐剧《海绵宝宝》的Krabs先生(Bryan Ray Norris)会对我的代码感到非常满意,我的代码检索了百老汇演出的所有财务信息。

步骤4C:抓取百老汇创意信息

我在抓取创意信息方面的方法与上述方法类似。我通过类似的方法编制了所有节目的URL列表,从每年的静态页面列表链接开始,回到1750年。抓取此页面为我提供了一个年份列表,抓取该列表给了所有节目的列表URL,长度为13,568个URL(与之前相同)。

我将pandas read_html函数插入到我的列表中......错误!我尝试通过使用beautiful soup重写我的代码并解析页面的<td>来进行调试。错误!迭代后迭代,我的代码在任何时候尝试运行超过2或3个URL时都会出现问题。在调查我正在使用的URL样本的网页和html代码时,我意识到每个页面将他们的数据映射到不同的位置,并且许多页面的编码方式不同。这种网络抓取方法不起作用。

来数据趴,打开百老汇大数据的舞台大门!

我的方法是试图抓取超出其范围的东西。就像剧中的托尼·沙鲁布(L)一样试图抓住卡特丽娜·伦克(R)。

我的选择是将我的网络抓取方法切换到动态网站,如IBDB或PlaybillPro,或坚持通过百老汇世界的笨拙的静态页面。我选择坚持不懈地开发文本挖掘算法,因为我看到了将纯文本数据转换为有组织的结构化形式的长期好处。

因为我无法识别或预测我的13,000多个URL中的每一个是如何编码的,所以我的程序需要一个复杂的决策过程来确定如何定位、识别、组织和验证每个页面的数据。我将通过利用机器学习来实现这种复杂性,机器学习是人工智能的一个分支,我的程序可以识别模式,并以更高的效率做出决策。

来数据趴,打开百老汇大数据的舞台大门!

我使用机器学习方法的另一种方法就像最近Carousel复兴的帆船一样。

快进245小时(每周70小时3.5周),我的算法完成并调试完毕!方法如下。(如果你愿意,请按照我的脚本。)

  • 我为每个节目生成了一个URL列表。
  • 我将每个页面解释为纯文本,没有HTML语言或格式。
  • 我在html上选择了纯文本,因为我对英语的使用比html更流利,因为我会编写算法来推断每个页面的结构,我想我会使用流利的语言。
  • 通过Python的数据包传递Python的本机拆分函数和正则表达式函数,我能够识别描述每个页面中数据的存在、结构、位置和有效性的模式。
  • 我使用Python的原生激活函数将上述模式识别技术映射到我的算法中。
  • 将变换算法传递到我的主算法中,使我能够将有组织的扁平化字符串转换为结构化数字或浮点数据。
  • 迭代数据被放入字典中,然后附加到字典列表中。之后,我使用pandas的DataFrame函数将我的列表转换为DataFrame。
  • 我生成的算法及其所有嵌套函数的长度为447行Python代码。我的主要算法,不包括嵌套函数,长度为173行Python代码。

输出摘要:

  • 我的算法逻辑准确度为99.999%,仅针对具有多个部分的节目显示不正确的数据(例如,美国的哈利波特和天使)。
  • 我的算法确定492个URL(3.6%的数据集)不符合分析条件。也许这些数据点确实是空的,或许我的算法还可以改进?
  • 我的结果数据集包含从1750年到现在的节目。
  • 数据集的维度是13个非冗余字段,包含13,073行。可以在这里找到Csv文件。

值得注意的是,大约50%的时间用于调试我的主算法,另外15%的时间用于调试嵌套函数。

来数据趴,打开百老汇大数据的舞台大门!

我的算法完成了!现在,我可以了解到杰克曼在"最伟大的表演者"中的表演。

步骤5:打开舞台大门!

最后!我可以通过大数据分析百老汇剧院!为了验证我的数据集,我在R中组合了一些快速可视化.3下面分享了选择输出:

来数据趴,打开百老汇大数据的舞台大门!

随时间显示运行时间的时间序列,每个显示类型与移动平均值。

  • 移动平均值从5年期间汇总,因此缺少图表的头部。
  • 戏剧和音乐剧的所有节目的运行时间都在减少。
  • 音乐剧的播放时间比戏剧时间长。
  • 在过去20年中,百老汇的平均运行时间下降了15分钟,从1995年的150分降至2018年的135分。

每种类型的生产数量,从1750年到现在每种类型

来数据趴,打开百老汇大数据的舞台大门!

随时间显示类型的堆积面积图。

  • 戏剧是绿色的,音乐剧是红色的,小歌剧是棕色的,短剧是蓝色的,特技是紫色的。
  • 有趣的是,无论是历史上还是现在,每年的音乐剧都比戏剧更多。
  • 1900年,即纽约市开设第一条地铁的同一时期,戏剧总产量不断上升。
  • 这种上升一直持续攀升至1950年,被称为百老汇的黄金时代。
  • 在1950年代之后不久,戏剧的数量急剧下降并持续下降,这可能与好莱坞的出现有关。
  • 在这个时代,音乐剧似乎更受欢迎,自黄金时代以来每年制作的音乐剧比例增加。

来数据趴,打开百老汇大数据的舞台大门!

随时间显示类型的100%堆积面积图。

  • 颜色和上面一样——戏剧是绿色的,音乐剧是红色的,小歌剧是棕色的,短剧是蓝色的,特技是紫色的。
  • 此区域图表描绘与上一个区域图表相同的数据,除了不是堆叠每个节目类型的值,它将每个节目类型显示为每年上演的作品的比例。
  • 如图所示,早期戏剧以及"黄金时代百老汇"以戏剧为主。
  • 自1950年代以来,音乐剧每年都在不断增加。

反思我的机器学习方法(步骤5):

回顾过去,我的网页抓取方法很笨拙,我已经将每个结构化网页转换为非结构化文本。但是,这种方法是彻底的、功能性的,并且可以广泛适应。此外,我意识到我的算法的最大特点是它允许较少词汇量的百老汇程序员用英语测试先进的机器学习技术。

也许面向javascript的网络抓取方法可以被带到像IBDB或PlaybillPro这样的网站,并产生类似的数据,但是,除了基于javascript的网站之外,我的代码在充足基于html的网站方面具有显者的优势。此外,我的代码可以适用于读取纯文本文件,这些文件存在于所有行业的企业和机构中。

这种方法(以及我的代码的各种不完善之处)与下面所示的漫画的幽默相似。

来数据趴,打开百老汇大数据的舞台大门!

程序员构建一个非常笨拙但功能强大的家庭。

结论

复杂的无组织文本数据,例如我在收集百老汇数据时遇到的网页,可以使用机器学习技术收集到数据库中。算法(如本文中所述的算法)使企业能够将其基于文本的数据转换为有意义的结构化数据库,以供分析使用。

个人总结

数据分析,尤其是娱乐行业,可能是令人兴奋的工作。但数据聚合和清理可能是乏味的。结构化和算法调试可能是艰巨的,并且可能妨碍分析工作。

该项目成功地帮助面向百老汇的分析师提供了一种无需请求或手动下载文件即可收集大数据的方法。

我发现手动下载这些数据只需要150个小时(2个13,500个URL,每个20秒),不到我编写和调试自动代码所花费的300个小时的一半,这是可笑的。这是否意味着我的项目效率低下?如果我的唯一目标是获取一个大数据集,那么也许是,尽管手动下载文件150小时的想法令人不寒而栗。但是我的目标是创建一个开源的全功能算法,该算法从数据库所有者那里获得收益。在这方面,我的项目效率无法与手工方法相比。

超越百老汇的启示

对于百老汇以外的任何人考虑过渡到大数据分析,我会强调数据的可访问性而不是它在收集状态下的存在。可以共享数据库,但可以改进和自动化开放式访问。此外,手动下载仅在数据以某种统一和结构化的方式显示时才有效。相比之下,利用机器学习技术的自动化过程可以从包含无限数据类型的无限数据结构的海量数据集中提取数据。这些程序一旦完成,就可以以自动方式无限制地生成结构化数据,从而允许极其高效的访问而不考虑数据库所有者。

下一步

1.改进此代码并提供对百老汇数据的更多访问。

2.以广泛的数学公式的形式访问私有包报告(具有权限)和抽象的消费者行为模式。这将产生准确的合成消费者基础,百老汇的定价科学家可以测试他们的模型。

尽管如此,我现在可以充满信心地宣称,百老汇大数据的舞台大门已被打开!来吧,让我们开始一个数据派对!

来数据趴,打开百老汇大数据的舞台大门!

Leo Bloom在音乐剧"制片人"中庆祝

来数据趴,打开百老汇大数据的舞台大门!