内容


在 Data Science Experience 中通过 Watson 和 Spark 从社交媒体帖子中提取洞察

Comments

根据来自 Excelacom 的统计,互联网上每分钟产生 2,080 万条 WhatsApp 消息,240 万次 Google 搜索和 347,222 条推文(截至 2016 年 4 月)。在生成和使用的海量数据中,很大一部分是文本、语音、图像和视频格式的非结构化数据。要管理和使用此数据,需要有一种新的计算模式,一种有助于从大数据中提取洞察的认知计算模式。

认知计算系统定义为向人类学习并与人类自然交流,帮助他们分析、理解并从大数据中提取洞察的系统。IBM Watson Developer Cloud 是一个提供了各种认知服务的平台,这些服务旨在从所有可能格式(文本、语音和图像等)的非结构化数据中提取知识。一些认知解决方案使用 Watson Developer Cloud 服务来解决各种各样的业务问题,比如:

  • 提供虚拟助理(或聊天机器人)
  • 社交媒体倾听
  • 市场营销活动分析
  • 受众细分和匹配
  • 从大量数据中发现洞察

在一些认知解决方案中,我们发现只有结合使用 Watson Developer Cloud 服务和针对大数据进行了优化的分析解决方案,才能获得最有影响力的结果。在本教程中,我们将解释如何使用 IBM Data Science Experience (DSX),开发一个结合使用了 Watson Developer Cloud 服务和自定义机器学习解决方案的认知解决方案。本教程会引用 Python TwitterInsightsWatsonDSX notebook,该 notebook 将上传到 DSX 并在其中运行。

前提条件

要能完成本教程,您将需要:

  • 一个 Bluemix 帐户,您将在其中配置 Watson 服务、数据库服务,以及包括 DSX 在内的其他分析服务。在 DSX 中,您将逐步创建一个 Python notebook,用它来获取数据;整理、摄取和扩充获取的数据;并在数据上运行各种分析和机器学习技术
  • 一个 Twitter 帐户,用于收集将用作该 notebook 的数据源的推文

获取 Twitter 凭证

您需要以下 Twitter 凭证才能完成本教程。

  • 用户密钥(API 密钥)
  • 用户秘密密钥(API 秘密密钥)
  • 访问令牌
  • 访问令牌密钥

如果已有这些 Twitter 凭证,可以跳过本节。如果没有,下面给出了获取这些凭证的快速说明。首先,必须有一个 Twitter 帐户。如果没有帐户,可以在 https://twitter.com/signup 上注册一个。拥有 Twitter 帐户后,请运行以下步骤:

  1. 在浏览器中访问 https://apps.twitter.com/
  2. 使用您的 Twitter 帐户用户名和密码进行登录。
  3. 单击 Create New App
  4. 提供您的应用程序的详细信息,比如名称、说明和网站。确认您已阅读并同意 Twitter 开发人员协议。单击 Create your Twitter application

    这会创建一个应用程序。

  5. 在应用程序页面上,导航到 Keys and Access Tokens 选项卡。在此页面上,复制用户密钥(API 密钥)用户秘密密钥(API 秘密密钥),因为本教程中将需要它们。
  6. 要获取访问令牌,请单击 Create my access token。这会生成访问令牌和访问令牌密钥凭证。复制这些凭证。

现在,您应该已拥有连接到 Twitter 的 API 所需的凭证。

创建 Bluemix 帐户

要完成本教程,必须有一个 Bluemix 帐户,以便可以配置 Watson 和数据库云服务。要创建 Bluemix 帐户,请执行以下操作:

  • 在浏览器中访问 https://bluemix.net
  • 单击 Create a free account,按照步骤提供所需的信息,比如电子邮件、姓名和密码。

有了 Bluemix 帐户后,可以从终端运行以下步骤来创建本教程所需的服务,即 Natural Language Understanding 和 Personality Insights。

  1. 打开终端窗口。
  2. 下载并安装 Cloud Foundry CLI
  3. 在终端窗口中运行以下命令。
    cf login
    cf create-service natural-language-understanding free dsxnlu
    cf create-service-key dsxnlu svcKey
    cf service-key dsxnlu svcKey
    cf create-service personality_insights lite dsxpi
    cf create-service-key dsxpi svcKey
    cf service-key dsxpi svcKey

    这些命令会将您连接到您的 Bluemix 帐户,创建采用免费计划的 Natural Language Understanding 服务和 Personality Insights 服务,将二者命名为 dsxnlu 和 dsxpi,然后返回这些服务的用户名和密码。

  4. 复制这些凭证,因为 notebook 中需要使用它们来访问这些服务。

创建 Data Science Experience (DSX) 服务

要创建 DSX 服务,请执行以下操作:

  1. 登录到您的 Bluemix 帐户。
  2. 单击右上角的 Catalog 选项卡(已在下图中通过箭头突出显示)。
  3. 在左侧导航中选择 Data & Analytics 类别。
  4. 选择 Data Science Experience 服务(已在下图中通过椭圆形突出显示)。 Bluemix 类别屏幕
    Bluemix 类别屏幕
  5. 命名您的服务(可选),选择免费计划并单击 CreateBluemix 类别屏幕
    Bluemix 类别屏幕
  6. 单击 Get Started 启动 Data Science Experience。 Bluemix 类别屏幕
    Bluemix 类别屏幕

也可以通过以下方式启动 DSX:在浏览器中访问 https://datascience.ibm.com,选择 Sign In(右上角),使用您的 Bluemix 用户名和密码进行登录。

问题陈述

本教程将查看品牌分析、用户细分和个性化消息传递方面的问题。我的解决方案包括收集引用了某个品牌的社交媒体帖子,理解对该品牌的情绪,基于粉丝数量、帖子数量、情绪和个性概况等参数对客户进行细分。有了更加精细的划分,品牌经理和市场营销团队就能以更加个性化的方式,对用户开展针对性的宣传和市场营销。

因为希望让本教程更为通用,所以我们不会引用任何具体品牌。我将收集 3 位流行音乐家的数据,并对该数据运行我的分析。

工具和服务概述

在深入介绍解决方案的细节之前,我将介绍一下将使用的各种工具和服务。具体来讲,我们将使用 Twitter、Watson Developer Cloud、Db2 Warehouse on Cloud 和 Data Science Experience。在本节中,我将分别介绍每个工具和服务。

Twitter

社交媒体是以计算机为中介的技术,它使得通过虚拟社区和网络创建和分享信息、想法和思想变得更容易。一些流行的社交媒体平台包括 Facebook、Twitter、领英、Pinterest 和 Snapchat。

它成为了各个品牌与其用户联系,通过倾听社交媒体上的声音来更好地理解这些用户的品牌认知的通用做法。社交媒体倾听指的是从各种平台收集社交媒体帖子,并通过分析它们来了解用户的整体认知情况。

在本教程中,我们将收集 3 位流行音乐家(@katyperry、@justinbieber 和 @taylorswift13)的 Twitter 数据。值得一提的是,对于用户用来共享对品牌、事件或关注实体的观点的其他社交媒体平台或其他数据源,我的方法也适用。

Watson Developer Cloud

IBM Watson Developer Cloud 是一个认知服务平台,支持您构建认知解决方案来从大数据中提取洞察。Watson Developer Cloud 服务提供了大量的功能来理解非结构化数据并从中提取洞察,这些数据包括文本、语音和图像。在本教程中,我们使用 Natural Language Understanding 执行情绪分析和关键词提取。还使用 Personality Insights 提取推文中表达的情绪和关键词,以及分享推文的用户的个性概况。

Db2 Warehouse on Cloud

IBM Db2 Warehouse on Cloud 是一个数据库,专为性能和规模化而设计,而且与许多工具兼容。大规模并行处理 (MPP) 选项通过向集群添加更多服务器,实现了更高的性能和更大的规模。动态内存中列式存储技术最大限度减少了 I/O,而且速度与行式存储数据库相比提升了一个数量级。

Data Science Experience

IBM Data Science Experience (DSX) 是一个基于云的社交工作区,能帮助您通过 R、Python 和 Scala 等多种开源工具创建、整合和协同构建解决方案,以便从数据中捕获洞察。IBM DSX 帮助数据浏览者使用丰富的开源功能来分析大型数据集,并在数据驱动的社交协作环境中与同事进行协作。

您的 DSX 帐户默认情况下包含一个 Apache Spark 服务(已在 Bluemix 上配置)。Apache Spark 是一个快速的开源集群计算引擎,用于高效地执行大规模数据处理。与 Hadoop MapReduce 相比,Apache Spark 技术使程序在内存中的运行速度提高了 100 倍,或者使磁盘上的运行速度提高了 10 倍。Spark 包含多个组件:

  • Spark Core 是底层计算引擎,具有称为弹性分布式数据集 (RDD) 的基础编程抽象。
  • Spark SQL 提供了一种称为 DataFrames 的新数据抽象,用于通过 SQL 和特定于领域的语言实现结构化数据处理。
  • MLlib 是一个可扩展的机器学习框架,它提供了用于挖掘大数据的分布式算法。
  • Streaming 利用 Spark 的调度能力在新数据流上执行实时分析。
  • GraphX 是一个图形处理框架,用于分析图形结构化数据。

在 Data Science Experience 中,可以将 Spark 用于 Python、Scala 或 R notebook。

DSX 包含社区贡献的丰富资源,比如数据科学文章、样本 notebook、公共数据集,以及各种帮助轻松使用 DSX 和 Apache Spark 的教程。

此外,您的 DSX 帐户还包含一个 Object Storage 服务,该服务在 Bluemix 上根据免费计划进行配置,包含一个具有 5 GB 存储限制的服务实例。(Object Storage 计划可以无中断地进行升级。)Object Storage 服务提供了一种非结构化的云数据存储,可以在其中存储文件,包括图像、文档等。

总体来讲,DSX 提供了一个社交协作环境,在该环境中,可以将大型数据集上传到 Object Storage 服务中,使用快速 Apache Spark 计算引擎高效地探索、分析、可视化大型结构化和非结构化数据集,并从中提取洞察。它还能轻松且无缝地连接到 GitHub,您可以在这里上传和共享 notebook。DSX 的社区特性使分享和探索所有 DSX 社区成员构建的各种 notebook、数据集和教程变得非常容易。

在本教程中,我们将重点介绍如何使用 DSX 构建 Python notebook 来分析 Twitter 数据,并将该数据与 Watson Developer Cloud 服务集成。

下面两个 notebook 将帮助您快速开始使用 Python 和 Apache Spark:

https://apsportal.ibm.com/exchange/public/entry/view/972c1d5333a2d12ccdbd2437298e8567

https://apsportal.ibm.com/exchange/public/entry/view/07db16e78e1722931e27c074ebdd5be7

作为参考,Jupyter notebook 是一个基于 Web 的交互式计算环境。您可以交互式地运行代码和查看计算结果。这些 notebook 包括处理数据所需的所有构建块,包括数据、处理数据的代码、结果的可视化表示,以及用于记录您的解决方案和加强您的理解的文本和富媒体。

解决方案架构

下图显示了解决方案架构,在该架构中,将从 Twitter 收集推文并保存到 Cloudant 数据库中。将 Cloudant 数据库保存到一个 Db2 Warehouse on Cloud 仓库中,然后将该仓库导入 Object Storage 中。DSX 中的 notebook 从 Object Storage 摄入数据,并使用 Spark 执行数据整理、分析和可视化。此外,该 notebook 还会连接到 Watson 服务(Natural Language Understanding 和 Personality Insights),以扩充推文并提取情绪、关键词和用户个性特征。最后,该 notebook 根据包括个性特征在内的多种特性使用 Spark MLlib 对用户进行聚类。

鉴于这些用户集群,应用程序可以识别要发送给用户的正确消息。

数据摄取和探索

数据摄取

第一步始终是获取相关数据,理解它,并将它处理为正确的格式。之前已经提到过,对于本教程中收集的社交媒体数据,我们专门收集了提及 3 位音乐家的 Twitter 数据:@katyperry、@justinbieber 和 @taylorswift13。接下来,我们将探索数据,以更好地理解它表示的含义。我们将查看模式并可视化数据,以便更好地理解它。在这之后,将会执行预处理,以便生成具有适当格式的数据供进一步处理。

有各种各样的第三方服务可用来获取 Twitter 数据,比如 Twitter GNIP

在本教程中,我们按照 https://github.com/joe4k/twitterstreams notebook 中的描述,使用 Twitter Streaming API 收集提及“@katyperry”、“@justinbieber”或“@taylorswift13”的推文并处理它们,以捕获感兴趣的元数据,然后将它们保存到一个 Cloudant 数据库中。

有关使用 Node-RED、Cloudant 和 Db2 Warehouse on Cloud 收集和存储 Twitter 数据的一般方法,请观看这个视频

将数据存储到 Cloudant 数据库中后,按照前面的视频中提及的操作说明为该 Cloudant 数据库创建一个 Db2 Warehouse on Cloud 仓库。要继续学习本教程,必须有一个 Db2 Warehouse on Cloud 服务实例,而且其中填充了您收集的提及“@katyperry”、“@justinbieber”或“@taylorswift13”的推文。

一定要记下 Db2 Warehouse on Cloud 服务实例的名称,您将使用该实例作为 Cloudant 数据库的仓库来托管所有推文。

数据探索

假设已将推文收集到一个 Db2 Warehouse on Cloud 数据库中,您可以继续运行以下步骤:

  1. 登录到 DSX 或从 Bluemix 启动 DSX。
  2. 单击 Data Services 并选择 Connections
  3. 单击 + 符号创建一个新连接。
  4. 提供一个连接名称 (dashdbsingers) 并选择 Data Service 作为服务类别:
    • Data Service 会连接到您在自己的帐户下配置的任何 Bluemix 数据服务。
    • External 会连接到外部数据服务,比如 Amazon S3、Microsoft SQL Server、MySQL、Netezza 等。请注意,也可以使用 External 类别连接到其他 IBM 数据库,比如 Cloudant、DB2 或 Db2 Warehouse on Cloud,只要这些数据库已在其他人的 Bluemix 帐户下配置。
  5. 选择之前创建的 Db2 Warehouse on Cloud 服务实例作为 Cloudant 仓库(在“数据摄取”部分)。
  6. 选择 BLUDB 数据库并单击 Create。
  7. 单击 Projects 选项卡并导航到 View All Projects。
  8. 创建一个新项目。
  9. 将该项目命名为 dsxwdc。也可以提供一段可选的说明。
  10. 选择与该项目相关的 Spark 服务和存储类型。下拉菜单提供了在您的 Bluemix 帐户下配置的 Spark 服务列表。
  11. 导航到 Overview 页面并单击您的项目名称。

    这会加载与该项目相关的所有 notebook、数据资产和书签。因为这是一个新项目,所以它会是空的。

  12. 单击右上角的 Find and add data 图标展开可用的文件和连接。
  13. 单击 Connections 并找到您的 dashdbsingers 连接。选择它并单击 Apply

    这使存储在该 Db2 Warehouse on Cloud 数据库中的数据可用在该项目下的 notebook 中。

  14. 单击 add notebooks 添加一个 notebook。
  15. 将 notebook 命名为 twitter_insights_watson_dsx。也可以添加一段可选的说明。
  16. 选择 From URL,以指定复制 notebook 的源 URL。

    对于 notebook URL,请指定 https://github.com/joe4k/dsxwdc/blob/master/twitter_insights_watson_dsx.ipynb

目前为止,您已在 DSX 中创建了一个新项目,并与一个 Db2 Warehouse on Cloud 服务实例建立了连接,该实例包含约 200,000 条在 2017 年 7 月 5 - 12 日之间提及“@katyperry”、“@justinbieber”或“@taylorswift13”的推文。在本教程中,我限制了推文数量。实际上,可以收集数百万条推文并对其执行分析。

接下来,我将执行一些分析来评估和探索这些推文数据。

  1. 在您的 notebook 中,运行第 1 步,安装运行该 notebook 所需的库。
  2. 运行第 2 步,从 Db2 Warehouse on Cloud 加载数据。为此,单击 Find and Add Data 图标。

    这会打开 Files and Connections 窗口。单击 Connections,它会显示 Db2 Warehouse on Cloud 连接 (dashdbsingers)。

    1. 单击 Insert to code 并选择 Insert SparkSession DataFrame
    2. 将表指定为 DSX_CLOUDANT_SINGERS_TWEETS。

      这会创建连接到 Db2 Warehouse on Cloud 服务所需的 Python 代码,并使用 spark.read.jdbc 函数将 DSX_CLOUDANT_SINGERS_TWEETS 表载入名为 data_df_1(名称可能有所不同)的 Spark Dataframe 中。

    3. 将创建的 Spark Dataframe data_df_1 复制到一个新的 Dataframe brandTweetsDF 中。
  3. 运行第 3 步,探索并整理该数据。一些常见命令包括:
    • brandTweetsDF.limit(2).toPandas()
      输出 Spark DataFrame 中的最前面两行,以了解您使用的 Twitter 数据。toPandas 以表格格式提供美观的数据输出结果。
    • brandTweetsDF.printSchema()
      输出 Spark DataFrame 的模式,确保您拥有想要的所有字段。
    • brandTweetsDF =brandTweetsDF.drop('_ID','_REV')
      丢弃不需要的列。

    也可以创建函数来处理数据并向 Spark DataFrame 添加字段,比如从 CREATED_AT 字段提取“day”信息来描绘推文随时间变化的趋势。

  4. 提取要处理的数据的随机样本。实际上,您可能希望跳过这一步,在所有数据上应用 notebook 的剩余操作。我们获取样本的目的是为了能应用 Watson 服务的免费计划进行扩充。

数据扩充

我们现在已收集了相关推文并将它们摄入到一个 Spark DataFrame 中,接下来将重点介绍如何使用 Watson Developer Cloud 服务扩充该数据。

使用 Natural Language Understanding 进行情绪和关键词扩充

具体来讲,我们将使用 Watson Natural Language Understanding 服务提取推文中的情绪和关键词。我们还将使用 Watson Personality Insights 提取分享这些推文的用户的个性概况。

  1. 运行 notebook 的第 5 步,读取 Twitter 与 Natural Language Understanding 和 Personality Insights 服务的凭证。该 notebook 假设这些凭证保存在一个具有以下格式的 JSON 文件 (sample_creds.json) 中。

    第 5 步给出了将 sample_creds.json 文件上传和读取到 Object Storage 中并解析这些凭证的指令。

  2. 运行 notebook 中的第 6 步,调用 Natural Language Understanding 服务从推文中提取情绪和关键词。为此,我们将使用用于 Watson Developer Cloud 服务的 Python SDK 和 Natural Language Understanding 的凭证。
    nlu = watson_developer_cloud.NaturalLanguageUnderstandingV1(version=nlu_version,
                                  username=nlu_username,
                                  password=nlu_password)

要获取 Natural Language Understanding 凭证,必须按照前面的解释在 Bluemix 上配置一个 Watson Natural Language Understanding 服务。作为参考,可以在 Natural Language Understanding 入门页面上找到详细的操作说明。

数据可视化(情绪和关键词)

从非结构化数据(推文)提取情绪和关键词后,可以使用这些扩充内容来可视化推文趋势、情绪和关键词。我们可以对每个品牌分别执行此操作,以便向品牌经理和市场营销团队提供关于用户对该品牌的认知的洞察。也可以比较和对比各个品牌的结果。

运行 notebook 的第 7 步,描绘推文的情绪和随时间变化的趋势。

我们按品牌划分推文,以便可以分别描绘针对每个品牌的情绪和趋势,因为这对比较和对比 3 位音乐家的趋势、情绪和关键词很有用。

以下是我们在使用 Watson 服务进行扩充后,可利用该数据生成的一些可视化结果。

下图显示了针对 3 位音乐家的推文的总体情绪分布(正面、负面、中性)。

下列饼图显示了所有音乐家推文之间的情绪比较
下列饼图显示了所有音乐家推文之间的情绪比较

下面的时间线图显示了针对所有 3 个品牌(音乐家)的趋势(推文数量)。它还显示了针对每个品牌的正面、负面推文数量和推文总数。

该图显示了针对所有 3 位音乐家的推文
该图显示了针对所有 3 位音乐家的推文
该图显示了针对所有 3 位音乐家的推文
该图显示了针对所有 3 位音乐家的推文

下图中的关键词云图显示了针对这些品牌的推文中提及的最相关的关键词。

针对品牌的最相关关键词的云图
针对品牌的最相关关键词的云图

使用 Personality Insights 扩充用户个性

接下来,我们将关注分享这些推文的用户。传统细分方法可能专注于根据用户发表的推文数量和他们拥有的粉丝数量来创建用户集群。在这个 notebook 中,我们将展示如何使用个性概况扩充用户的信息,从而使您能创建考虑了用户个性概况的更精细分类。

为此,我们首先将识别所有向我们收集的推文列表贡献了帖子的唯一用户。我们使用 Watson Personality Insights 根据用户的推文来为他们创建个性概况。本教程将解释如何根据 USER_SCREEN_NAME 提取唯一用户。然后,对于每个用户,展示如何使用 Twitter 收集该用户的足够多的推文,然后将这些推文传递给 Personality Insights 来获取个性概况。我们将分析范围限制到 100 个用户来演示该方法。实际上,您可能希望为所有用户(或者可能所有拥有一定数量的粉丝或帖子的用户)创建个性概况。此外,根据 Personality Insights 文档中的解释,对于每个用户,您希望收集足够大的推文样本,以便获得准确的 Personality Insights 结果。在本教程中,我们限制为每个用户 100 篇推文。

运行 notebook 中的第 8 步,提取用户的有用信息,比如给定推文数据集中的唯一用户数量,以及哪些用户表达了负面情绪与正面情绪。一些有用的命令包括:

  • df.groupBy('FIELD_NAME'):此命令对按特定的 FIELD_NAME 记录分组很有用。
  • df.orderBy('FIELD_NAME'):此命令对按特定的 FIELD_NAME 记录排序很有用。
  • df.where(col('SENTIMENT_LABEL')=="negative"):可使用此命令提取具有负面情绪的记录。
  • df.where(col('SENTIMENT_LABEL')=="positive"):可使用此命令提取具有正面情绪的记录。
  • df.sample(False, fraction, seed):此命令从数据中提取一个随机样本。

notebook 中的第 8 步还会提取您使用的用户样本中每个唯一用户的 5 大个性特征(也称为 OCEAN)。这些个性特征(开放、严谨、外向、随和和神经质)对更好地理解和接触用户很有用。

使用机器学习进行用户细分和个性化消息传递

收集和扩充与品牌相关的社交媒体帖子后,可以使用 Spark MLlib 中提供的丰富的机器学习算法来实现用户细分。

数据准备和 Kmeans 聚类

具体来讲,我们使用 Kmeans 聚类算法,根据用户的个性概况、粉丝数量和帖子数量对用户进行分组。为了演示区别,我们使用两个不同特性集实际运行 Kmeans 聚类,两个特性集中一个不含个性特征,一个包含个性特征:

  • 特性集 1:(SENTIMENT, USER_FOLLOWERS_COUNT, USER_STATUSES_COUNT)
  • 特性集 2:(SENTIMENT, USER_FOLLOWERS_COUNT, USER_STATUSES_COUNT, OPENNESS, CONSCIENTIOUSNESS, EXTRAVERSION, AGREEABLENESS, NEUROTICISM)

运行 notebook 中的第 9 步,将数据转换为正确的格式,然后运行 Kmeans 算法对用户进行聚类。一些有用的命令包括:

将列转换为矢量:

assembler_field = VectorAssembler( inputCols=["FIELD_NAME"], outputCol="vector_field_name")
assembled_field = assembler_field.transform(df)
assembled_field = assembled_field.select("FIELD_NAME_1","FIELD_NAME","vector_field_name")

使用 MinMaxScaler 扩展字段:

scaler_field = MinMaxScaler(inputCol="vector_field_name", outputCol="scaled_field_name")
scalerModel_field = scaler_field.fit(assembled_field)
scaledData_field = scalerModel_field.transform(assembled_field)
df_scaled=scaledData_field.select(("FIELD_NAME_1","scaled_field_name)

选择用于聚类的特定特性并映射到一个矢量:

df _noPI = df_scaled.select('SENTIMENT','SCALED_USER_FOLLOWERS_COUNT','SCALED_USER_STATUSES_COUNT')
df _wPI = df_scaled.select('SENTIMENT','SCALED_USER_FOLLOWERS_COUNT', 'SCALED_USER_STATUSES_COUNT', \
		            'OPENNESS', 'CONSCIENTIOUSNESS','EXTRAVERSION', 'AGREEABLENESS','NEUROTICISM')
from pyspark.mllib.linalg import Vectors
df_noPI = df_noPI.rdd.map(lambda x: Vectors.dense([c for c in x]))
df_wPI = df_wPI.rdd.map(lambda x: Vectors.dense([c for c in x]))

Kmeans 聚类(基础特征和 PI_ENRICHED):

从 pyspark.ml.clustering 导入 KMeans。

## Define model parameters and set the seed

baseKMeans = KMeans(featuresCol = "BASE_FEATURES", predictionCol = "BASE_PREDICTIONS").setK(5).setSeed(206)
piKMeans = KMeans(featuresCol = "PI_ENRICHED_FEATURES", predictionCol = "PI_PREDICTIONS").setK(5).setSeed(206)

## Fit model on the feature vectors

baseClustersFit = baseKMeans.fit(userPersonalityDF.select("BASE_FEATURES"))
enrichedClustersFit = piKMeans.fit(userPersonalityDF.select("PI_ENRICHED_FEATURES"))

## Get the cluster IDs for each user

userPersonalityDF = baseClustersFit.transform(userPersonalityDF)
userPersonalityDF = enrichedClustersFit.transform(userPersonalityDF)

数据可视化(包含和不含个性特征的用户集群)

基于结构化元数据(比如粉丝数量和帖子数量)和从非结构化数据(比如推文的情绪和用户的个性特征)提取的扩充元数据创建用户集群后,我们可以运行一些可视化操作来理解细分解决方案之间的区别。

简言之,为了演示结果的不同,我们可以绘制一个饼图,显示在包含和不含个性特征的两种场景中,每个集群中的用户数量。

运行 notebook 中的第 10 步,显示 Kmeans 聚类解决方案在针对不含和包含从 Personality Insights 提取的个性特征的两种场景中的可视化表示。

下图中的饼图显示了在包含和不含个性特征的情况下,每个集群中的用户数量。这是一种非常简单的可视化形式,目的是展示包含个性特征时的聚类解决方案是不同的。

包含和不含个性特征的集群分组
包含和不含个性特征的集群分组

通常,可以通过描绘数据的一些聚合度量指标,然后基于集群 ID 使用不同颜色来完善数据点,从而可视化聚类。但是,缺少聚合指标时,可以使用主成份分析将数据集压缩为二维形式。执行 PCA 后,可以在 X 和 Y 轴上描绘两个成分的值,以形成一个散点图。下图显示了仅包含基础特性的聚类结果(图 1),以及同时包含基础特性和个性特征的聚类结果(图 2)。请注意,您运行的聚类结果可能有所不同。

仅使用基础特性的聚类结果
仅使用基础特性的聚类结果
使用基础特性和个性特性的聚类结果
使用基础特性和个性特性的聚类结果

给定这些用户集群,品牌经理和市场营销团队能制定要发送给这些用户的个性化消息。然后他们可以不断跟踪这些用户集群,了解用户如何响应各种指标,比如购买历史、单击模式或对不同广告活动的响应。

结束语

在本教程中,我们解释了如何完成获取数据,整理和清理数据,分析和可视化数据,以及扩充数据来获取价值的完整过程。在我的示例场景中,价值体现在通过理解用户的个性和他们在社交媒体上的表达,向他们提供更加个性化的消息传递。尽管我们在此分析中使用了小数据样本,但可以扩展所引用的技术(DSX、Spark、Object Storage)来高效地处理大数据。


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=认知计算, Big data and analytics
ArticleID=1049100
ArticleTitle=在 Data Science Experience 中通过 Watson 和 Spark 从社交媒体帖子中提取洞察
publish-date=08302017