作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.
费德里科·阿尔巴尼斯的头像

费德里科•阿尔巴内塞

Federico是一名Python开发专家和数据科学家,曾在Facebook工作, 实现深度学习模型. 他是一位大学讲师, 他的博士研究重点是自然语言处理和机器学习.

以前在

Facebook
Share

全球渗透率为 58.4%,社交媒体提供了丰富的意见、想法和每天分享的讨论. 这些数据为用户之间最重要和最受欢迎的对话主题提供了丰富的见解.

在市场营销中,社交媒体分析可以帮助企业了解和利用消费者的行为. 两种常见的实用方法是:

  • 主题建模,它回答了“用户谈论什么话题”这个问题?”
  • 情绪分析,它回答了“用户对一个话题的评论是积极的还是消极的”这个问题?”

在本文中,我们使用 Python 对于社交媒体 数据分析 并演示如何收集重要的市场信息, 提取可操作的反馈, 确定对客户最重要的产品特性.

社交媒体分析案例研究:Reddit上的智能手表

证明…的效用 社交媒体分析,让我们使用Reddit数据和Python对各种智能手表进行产品分析. Python是数据科学项目的强大选择, 它提供了许多库来促进机器学习(ML)和 自然语言处理 我们将使用的NLP模型.

这个分析使用了Reddit的数据(而不是Twitter的数据), Facebook, 因为Reddit是第二大最受信任的新闻和信息社交媒体平台, 根据美国新闻研究所. 除了, Reddit's subforum organization produces “subreddits” where users recommend and criticize specific products; its structure is ideal for product-centered 数据分析.

首先,我们使用情感分析来比较用户对流行智能手表品牌的看法,以发现哪些产品被认为是最积极的. Then, 我们使用主题建模来缩小用户经常讨论的特定智能手表属性的范围. 虽然我们的示例是特定的,但您可以将相同的分析应用于任何其他产品或服务.

准备Reddit样本数据

本例的数据集包含文章的标题, 文章的正文, 以及reddit r/ smarwatch版块中最近100篇帖子的所有评论. 我们的数据集包含该产品最近的100个完整讨论, 包括用户体验, 产品推荐, 以及它们的利弊.

为了从Reddit收集这些信息,我们将使用 PRAW, Python Reddit API包装器. 首先,在Reddit上创建客户端ID和秘密令牌 OAuth2指南. 接下来,跟随官方的PRAW教程 下载留言 and 获取发布url.

情感分析:识别主导产品

确定主导产品, 我们可以通过对文本语料库应用情感分析来检查用户对某些品牌的正面和负面评论. 情感分析模型 are NLP 根据单词和短语将文本分类为积极或消极的工具. 有各种各样可能的模式, 从简单的肯定和否定词的计数到 深度神经网络.

我们将使用 VADER 对于我们的例子, 因为它的设计是通过使用词典和基于规则的算法来优化来自社交网络的短文本的结果. 换句话说,VADER在我们正在分析的数据集上表现良好.

使用您选择的Python ML笔记本(例如,Jupyter)来分析该数据集. 我们使用pip安装VADER:

pip安装vaderSentiment 

First, 我们在数据集中添加了三个新列:帖子标题的复合情感值, 帖子文本, 以及注释文本. 要做到这一点,迭代每个文本并应用维达的 polarity_scores method, 它接受一个字符串作为输入,并返回一个带有四个分数的字典:positive, 消极, 中立, 和复合.

为了我们的目的, 我们将只使用复合分数——基于前三个分数的整体情绪, 按-1到1的标准评分, 其中-1是最负的,1是最正的,为了用一个单一的数值来表征文本的情感:

#导入维达和熊猫
从vaderSentiment.导入SentimentIntensityAnalyzer 
以pd方式导入熊猫

analyzer = SentimentIntensityAnalyzer()

#加载数据
数据= pd.read_json(“./ sample_data /数据.json”,行= True)

#初始化列表来存储情感值 
Title_compound = []
Text_compound = []
Comment_Text_compound = []

对于zip(data . zip)中的标题、文本、comment_text.标题、数据.文本、数据.Comment_text):
    title_compound.追加(分析仪.polarity_scores(标题)(“复合”))
    
    text_compound.追加(分析仪.polarity_scores(文本)(“复合”))

    comment_text_compound.追加(分析仪.polarity_scores (comment_text["复合"])

添加带有情感的新列    
Data ["title_compound"] = title_compound . Data
Data ["text_compound"] = text_compound . Data
Data ["comment_text_compound"] = comment_text_compound . Data 

Next, we want to catalog the texts by product and brand; this allows us to determine the sentiment scores associated with specific smartwatches. 要做到这一点, 我们指定了一个要分析的产品线列表, 然后我们验证每个文本中提到了哪些产品:

List_of_products = ["samsung", "apple", "xiaomi", "huawei", "amazfit", "oneplus"]

对于["Title","Text","Comment_text"]中的列:
    对于list_of_products中的product:
        l = []
        对于data[column]中的文本:
            l.在文本中添加产品.lower())
        数据(“{}_{}”.Format (column,product)] = l

某些文本可能会提到多个产品(例如, 一条评论可以比较两块智能手表。). 我们可以用以下两种方式进行:

  • 我们可以抛弃这些文本.
  • 我们可以用 NLP技巧. (在这种情况下,我们将为每个产品分配一部分文本.)

为了代码的清晰和简单,我们的分析抛弃了这些文本.

情感分析结果

现在我们能够检查我们的数据,并确定与各种智能手表品牌相关的平均情绪, 用户表示:

对于list_of_products中的product:
    均值= pd.concat([[数据(“Title_{}”.格式(产品)]].title_compound,
                      数据(数据(“Text_{}”.格式(产品)]].text_compound,
                      数据(数据(“Comment_text_{}”.格式(产品)]].comment_text_compound]).mean()
    打印 ("{}: {})".格式(产品、意思))

我们观察到以下结果:

Smartwatch

Samsung

Apple

Xiaomi

Huawei

Amazfit

OnePlus

情绪复合得分.)

0.4939

0.5349

0.6462

0.4304

0.3978

0.8413

我们的分析揭示了有价值的市场信息. 例如, 我们数据集中的用户对一加智能手表的看法比其他智能手表更积极.

不考虑一般情绪, 企业还应该考虑影响这些分数的因素:用户喜欢或讨厌每个品牌的什么? 我们可以使用主题建模来更深入地研究现有的分析,并对产品和服务产生可操作的反馈.

主题建模:寻找重要的产品属性

主题建模是NLP的一个分支,它使用ML模型以数学方式描述文本的内容. 我们将把讨论的范围限制在经典的NLP主题建模方法上, 尽管最近在使用变压器方面取得了进展, such as BERTopic.

有许多主题建模算法, 包括非负矩阵分解(NMF), 稀疏主成分分析, 潜狄利克雷分配(LDA). 这些ML模型使用矩阵作为输入,然后降低数据的维数. 输入矩阵的结构如下:

  • 每一列代表一个单词.
  • 每行代表一个文本.
  • 每个单元格表示每个文本中每个单词的频率.

这些都是可用于主题分解的无监督模型. NMF模型通常用于社交媒体分析, 我们将用它来做例子, 因为它能让我们得到容易解释的结果. 它产生如下的输出矩阵:

  • 每一列代表一个主题.
  • 每行代表一个文本.
  • 每个单元格表示文本讨论特定主题的程度.

我们的工作流程如下:

标记为“开始主题建模分析”的绿色框指向深蓝色框:“识别并导入依赖项”.这个方框指向第二个深蓝色方框:“创建文本语料库。.这个方框指向第三个深蓝色方框:“应用NMF模型。.这个方框指向第四个深蓝色方框:“分析结果。.这个方框指向一个绿色方框,上面写着“将结果整合到营销中”,,剩下两个浅蓝色的方框:“一般分析”和“详细(基于情绪的)分析”.”
主题建模过程

First, 我们将应用NMF模型来分析感兴趣的一般主题, 然后我们会把范围缩小到积极和消极的话题上.

分析一般感兴趣的话题

我们来看看一加智能手表的话题,因为它的复合情绪得分最高. 让我们导入提供NMF功能和公共功能的所需包 停止词 从我们的文本中过滤:

从sklearn.feature_extraction.文本导入CountVectorizer
从sklearn.feature_extraction.文本导入TfidfTransformer
从sklearn.分解导入NMF

进口nltk
nltk.下载(“stopwords”)
从nltk.语料库导入停词

现在,让我们用将要使用的文本语料库创建一个列表. 我们使用scikit-learn ML库 CountVectorizer and TfidfTransformer 生成输入矩阵的函数:

Product = "oneplus"
语料= pd.concat([[数据(“Title_{}”.格式(产品)]].Title,
                      数据(数据(“Text_{}”.格式(产品)]].Text,
                      数据(数据(“Comment_text_{}”.格式(产品)]].Comment_text]).tolist()

count_vect = count_ectorizer (stop_words=stopwords.词(英语)、小写= True)
X_counts = count_vect.fit_transform(主体)

Feature_names = count_vect.get_feature_names_out ()
tfidf_transformer = TfidfTransformer()
X_tfidf = tfidf_transformer.fit_transform (x_counts)

(注意处理细节 n-grams—i.e.如“one plus”的其他拼写和用法,可以在我之前的文章中找到 主题建模.)

我们已经准备好应用NMF模型,并在我们的数据中找到潜在的主题. 和其他降维方法一样, NMF需要将主题总数设置为参数(). Here, 为了简单起见,我们选择了10个主题的降维, 但你可以测试不同的值,看看有多少主题可以产生最佳的无监督学习结果. 尝试设置 最大化度量标准,例如 轮廓系数 or the 弯头的方法. 我们还设置了 随机状态 再现性:

导入numpy为np

尺寸= 10
nmf = nmf (n_components = 维, random_state = 42)
Nmf_array = NMF.fit_transform (x_tfidf)

组件= [nmf ..Components_ [i] for i in range(len(nmf).components_)))
特征= count_vect.get_feature_names_out ()
Important_words = [sorted(features, key = lambda) x: components][j].where(features==x)], reverse = True) for j in range(len(components))]

important_words 包含单词列表, 每个列表代表一个主题,单词在主题中按重要性排序. It includes a combination of meaningful and “garbage” topics; this is a common result in 主题建模 because it is difficult for the algorithm to successfully cluster all texts into just a few topics.

检查 important_words output, 我们会注意到一些有意义的话题,比如“预算”或“收费”, 它指出了用户在讨论一加智能手表时关心的功能:

[“充电”,“电池”,“看”,“最好”,“范围”,“天”,“生活”,“android”,“押注”,“连接”)
[“预算”,“价格”,“欧元”,‘购买’,‘购买’,‘质量’,‘标签’,‘价值’,‘smartwatch’,‘100’)

因为我们的情感分析为一加提供了很高的复合得分, 我们可能会认为这意味着与其他品牌相比,它的成本更低,电池寿命更长. However, 此时此刻, 我们不知道用户对这些因素是积极的还是消极的, 因此,让我们进行深入的分析,以获得切实的答案.

分析正面和负面话题

我们更详细的分析使用与一般分析相同的概念, 分别适用于积极和消极文本. 我们将揭示用户在谈论产品的正面或负面评价时所指的因素.

让我们为三星智能手表做这件事. 我们将使用相同的管道,但语料库不同:

  • 我们创建一个复合分数大于0的积极文本列表.8.
  • 我们创建一个复合分数小于0的否定文本列表.

These numbers were chosen to select the top 20% of positive texts scores (>0.8) and top 20% of negative texts scores (<0), 并为我们的智能手表情感分析得出最有力的结果:

首先是负面短信.
产品= "samsung"
Corpus_negative = pd.concat([[数据(数据(“Title_{}”.格式(产品)]) & (data.title_compound < 0)].Title,
                      数据((数据(“Text_{}”.格式(产品)]) & (data.text_compound < 0)].Text,
                      数据((数据(“Comment_text_{}”.格式(产品)]) & (data.comment_text_compound < 0)].Comment_text]).tolist()


#现在是积极的文本.
Corpus_positive = pd.concat([[数据(数据(“Title_{}”.格式(产品)]) & (data.title_compound > 0.8)].Title,
                      数据((数据(“Text_{}”.格式(产品)]) & (data.text_compound > 0.8)].Text,
                      数据((数据(“Comment_text_{}”.格式(产品)]) & (data.comment_text_compound > 0.8)].Comment_text]).tolist()

打印(corpus_negative)
打印(corpus_positive)

我们可以重复用于一般感兴趣的主题的相同主题建模方法,以揭示积极和消极主题. 我们的结果现在提供了更具体的营销信息:例如, 我们的模型的负语料库输出包括一个关于燃烧卡路里准确性的主题, 而积极的输出是关于导航/GPS和健康指标,如脉搏率和血氧水平. Finally, 我们对用户喜爱的智能手表的各个方面以及产品有待改进的地方都有可操作的反馈.

由各种各样的词组成的词云, 从大到小:健康, pulse, screen, sensor, fitness, exercise, miles, feature, heart, active.
一个三星正面话题的词云,用 wordcloud Library

为了放大您的数据发现,我建议创建一个 词云 或者我们教程中确定的重要主题的另一个类似的可视化.

无限的产品洞察与社会媒体分析

通过我们的分析, 我们了解用户对目标产品及其竞争对手的看法, 用户喜爱顶级品牌的原因, 以及为了更好的产品设计而需要改进的地方. 公共社交媒体数据分析使您能够就业务优先级做出明智的决策,并提高整体用户满意度. 将社会媒体分析纳入你的下一个产品周期,以改进营销活动和产品设计——因为倾听就是一切.

Toptal工程博客的编辑团队向 丹尼尔·卢比奥 查看本文中提供的代码示例和其他技术内容.

了解基本知识

  • Python可以用于数据分析吗?

    是的,Python是一种流行的数据分析语言. Python开发人员社区非常强大, 还有许多Python库可用于机器学习和自然语言处理.

  • 为什么分析社交媒体很重要?

    社交媒体上的帖子提供了大量可以用于营销和产品设计目的的见解. 分析用户对产品的意见为公司提供了可操作的, 数据驱动的反馈可以使品牌超越竞争对手.

  • 为什么要使用主题建模?

    主题建模使用无监督机器学习来识别文本中的主题. 例如, 在本文中,我们使用主题建模从用户的社交媒体帖子(文本)中确定产品的重要特性(主题)。.

  • Python适合情感分析吗?

    是的,Python是情感分析的强大选择,因为它有许多相关的库. VADER库为特定于社交媒体的情感分析提供了资源, NLTK库提供了诸如停止词列表之类的文本工具.

聘请Toptal这方面的专家.
Hire Now
费德里科·阿尔巴尼斯的头像
费德里科•阿尔巴内塞

位于 布宜诺斯艾利斯,阿根廷

成员自 2019年1月9日

作者简介

Federico是一名Python开发专家和数据科学家,曾在Facebook工作, 实现深度学习模型. 他是一位大学讲师, 他的博士研究重点是自然语言处理和机器学习.

Toptal作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.

以前在

Facebook

世界级的文章,每周发一次.

订阅意味着同意我们的 隐私政策

世界级的文章,每周发一次.

订阅意味着同意我们的 隐私政策

Toptal开发者

加入总冠军® 社区.