【 BERTopic应用 01/3】 分析卡塔尔世界杯推特数据

news2024/10/6 6:48:11

摄影: Rhett Lewis在 Unsplash上

一、说明

        卡塔尔世界杯充满了惊喜!从沙特阿拉伯通过击败阿根廷震惊世界到摩洛哥历史性地进入半决赛,你必须听到或见证那些足球热潮中的时刻。在这篇文章中,我将使用 BERTopic 来分析 2022 年世界杯期间发布的推文。让我们看看与世界杯相关的最受欢迎的话题是什么,以及我们是否可以理解这些话题。

二、准备数据

        ,我们需要从社交媒体中检索数据。这一次,我将使用从Twitter检索到的文本数据作为我们的研究对象。为了抓取推文,我们将使用snscrape,这是Facebook,Twitter和Reddit等社交网络服务的抓取工具。要安装开发版本,请执行以下操作:

pip install git+https://github.com/JustAnotherArchivist/snscrape.git

        使用此抓取工具,我们可以从 Twitter 获取属性用户、用户个人资料、主题标签、搜索(实时推文、热门推文和用户)、推文(单个或周围线程)、列表帖子、社区和趋势。要启动嗅探:

# Get tweets using SNSCRAPE 
import snscrape.modules.twitter as sntwitter
import pandas as pd

        然后,让我们获取一些用英语写的推文,其中包含搜索词:世界杯,从 20 年 18 月 2022 日到 2022 月 12 日。注意:由于我们只想要推文而不是回复,因此我们会过滤掉回复。在这里,我们需要更加小心时间框架。应使用以下方法设置时间段:直到:19–00–00_00:2022:11_AST 自:20–00–00_00:2022:12_AST。因为 till 子句中的时间会被排除在外,我们应该将其设置为 19-0-<> <> 点钟。AST 表示 阿拉伯标准时间。如果我们没有在 AST 中指定时间,时间将自动以 UTC 格式设置。

# Get 10,000 tweets containing search term: world cup within a certain period of time
query = "(world cup) lang:en until:2022-12-19_00:00:00_AST since:2022-11-20_00:00:00_AST -filter:replies"
tweets = []
limit = 10000


for tweet in sntwitter.TwitterSearchScraper(query).get_items():
    if len(tweets) == limit:
        break
    else:
        tweets.append([tweet.date, tweet.id, tweet.username, tweet.content])

# Store tweets under a data frame        
df = pd.DataFrame(tweets, columns=['Date', 'Id', 'User', 'Tweet'])

三、预处理数据

        当我们处理非结构化文本数据时,在运行任何分析之前我们需要做的一件事是预处理数据。在这里,我们将删除推文中的所有 URL、表情符号和换行符。我建议在每一轮数据清理后打印出一些样本,看看我们是否以我们想要的方式操作文本。另外,当您完成所有数据清理后,我建议使用pickle保存最终版本。如果我们需要使用数据集执行不同的任务,我们可以简单地加载腌制的数据,而不是再次从头开始抓取。

# Round1: Remove URL
df['Tweet']=df['Tweet'].str.replace('http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', ' ')
# df.head()

# Round2: Remove emoji
df['Tweet']=df['Tweet'].str.replace('[^\w\s#@/:%.,_-]', '', flags=re.UNICODE)
# df.head()

# Round3: Remove newlines:\n
df['Tweet_processed'] = df['Tweet'].replace('\n','', regex=True)
# df.head()

# Store the filtered tweets in a new data frame
df_new=df.drop('Tweet',axis=1)
# df_new.head()

df_new.to_pickle('world_cup_tweets.pkl')

四、使用 BERTopic

BERTopic 是一种主题建模技术,它利用转换器和基于自定义类的 TF-IDF 来创建密集的集群,允许易于解释的主题,同时在主题描述中保留重要单词。要安装 BERTopic:

pip install bertopic

        然后我们将推文存储在列表中,并使用以下代码实例化 BERTopic。请耐心等待,因为此过程可能需要一段时间,具体取决于您正在抓取的推文数量以及您使用的是 CPU(较慢)还是 GPU(较快)。

texts=df_new['Tweet_processed']

# Set the language to English. There is other language models as well. 
from bertopic import BERTopic
topic_model = BERTopic(language="english", calculate_probabilities=True, verbose=True)
topics, probs = topic_model.fit_transform(texts)

五、提取主题

        拟合模型后,我们可以看到一些结果。首先,我们可以检查 10 个最常见的主题:

freq = topic_model.get_topic_info(); freq.head(11)
十大主题

-1 表示所有异常值,应忽略。接下来,让我们看一下生成的一个常见主题:

topic_model.get_topic(0)  # Select the most frequent topic, which is topic 0
# Result 
[('qatar', 0.03543929861004061),
 ('hosting', 0.01386799885558573),
 ('best', 0.012979749598061752),
 ('qatar2022', 0.011693988492318397),
 ('thank', 0.01145218957158738),
 ('ever', 0.011044699651033682),
 ('tournament', 0.008304478567760317),
 ('hosted', 0.007997848070012806),
 ('you', 0.007665018845225487),
 ('the', 0.007350426929036396)]

        正如我们所看到的,这个话题指的是足球迷对东道国卡塔尔表示感谢。尽管卡塔尔世界杯从头到尾都有争议,但最终球迷们还是赞赏东道主为这项赛事所做的努力。我们也可以看看主题0下的三条有代表性的推文:

topic_model.get_representative_docs(0)
# Result
['Critics sceptical of Qatars carbon neutrality claim at #WorldCup  ',
 'Apart from Messi being the highlight of the WC, this tournament has been a huge success for Qatar itself. From the stunning venues to the welcoming and hospitable atmosphere, the tournament has truly shone, making this World Cup truly one to remember. Congratulations Qatar  ',
 'With the World Cup over, that means no more Tracey Holmes doing Qatar propaganda']

六、可视化前 10 个主题

        我们可以使用以下方法更清楚地了解最常见的 10 个主题:

topic_model.visualize_barchart(top_n_topics=10)
可视化的前 10 个主题

七、加载数据

        在第 1 部分教程中,我将数据保存在名为“world_cup_tweets.pkl”下。现在我们可以解腌它,使用:

import pandas as pd
import pickle
with open('world_cup_tweets.pkl', 'rb') as f:
    data = pickle.load(f)

八、动态主题建模

“动态主题建模(DTM)是一组技术,旨在分析主题随时间的变化。这些方法可以让你了解一个主题在不同时间是如何表示的。

        为了表示不同的时间段,我们可以创建一个推文列表及其相应的发布时间。然后我们需要创建和训练一个 BERTopic 模型,就像我们在第 1 部分中所做的那样:

timestamps = data.Date.to_list()
tweets = data.Tweet_processed.to_list()

from bertopic import BERTopic
topic_model = BERTopic(language="english", calculate_probabilities=True, verbose=True)
topics, probs = topic_model.fit_transform(tweets)

        现在我们应该打电话给topics_over_time并传递推文和时间戳。请注意,箱表示用于对图表中的值进行分组的连续值的单个范围。如果一个箱宽太大,我们将得不到足够的区分;如果太小,则无法正确分组数据。在这里,我们将箱的数量设置为 20。并可视化前 10 个主题。

topics_over_time = topic_model.topics_over_time(tweets, timestamps, nr_bins=20)
topic_model.visualize_topics_over_time(topics_over_time, top_n_topics=10)

九、结果:

随时间推移的前 10 个主题

        从这张图中,我们可以很容易地掌握不同主题如何随着时间的推移而出现。这不是很方便吗!

十、总结

        在这篇文章中,我们学习了如何使用snscrape抓取推文,以及如何使用BERTopic通过卡塔尔世界杯案例研究对主题进行建模。结果显示,球迷们普遍认可卡塔尔所做的努力,并对阿根廷和法国之间激动人心的决赛感到惊讶。

        BERTopic具有更多惊人的功能,例如动态主题建模(DTM)。我将很快向您展示如何实现它。暂时再见,敬请期待!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/880532.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ubuntu配置Android编译环境

本来以为把AndroidSDK下载到对应的位置上&#xff0c;直接用就行了&#xff0c;没想到编译的时候提示 说明自己下载的build-tools不行&#xff0c;没有同意过授权&#xff0c;还不能用。 正确的方式是怎样的呢&#xff0c;首先下载linux系统上运行的commandlinetools&#xff…

ROS2 学习(二)工作空间,节点

工作空间介绍 workspace 是存放整个项目的大目录。 其中包含&#xff1a; src&#xff1a;源码。 build&#xff1a;编译文件。 install&#xff1a;安装空间&#xff0c;存放编译成功后的目标文件。 log&#xff1a;日志。 我们新建一个工作空间目录&#xff0c;其中包…

Python自动化小技巧16——分类汇总写入excel不同sheet表

案例背景 上了两个月班的社畜博主最近终于有空来总结一下最近写的代码了。 因为上班都是文职工作&#xff0c;天天不是word就是excel就是PPT和pdf....这和什么机器学习还有数据科学不一样&#xff0c;任务更多的是处理实在的文字和表格等格式&#xff0c;按照领导要求来完成&…

【vue.js】手把手教你做一个会躲避鼠标指针的登录按钮

效果 背景 在登录的时候&#xff0c;我们都会做账号密码不可为空的验证&#xff0c;如何做出一个会躲避鼠标指针的登录按钮呢。废话不多说&#xff0c;3、2、1&#xff0c;上代码~ 代码 <!DOCTYPE html> <html lang"en" style"overflow: hidden;&qu…

ad+硬件每日学习十个知识点(34)23.8.14 (DCDC详细设计,续流二极管的选择,COMP引脚的环路设计)

文章目录 1.二极管的rrm电压和rms电压有什么不同2.DCDC续流二极管的选择3.充电电容4.COMP引脚的环路设计5.DCDC设计总结6.多路并联7.相位匹配8.工作模式9.低温输出偏离10.电源负载与效率11.降压升压模块 1.二极管的rrm电压和rms电压有什么不同 答&#xff1a; 二极管的 RRM &a…

JS_围绕圆形滑动

需求&#xff1a;滑动手势最大不能超过一个半径为50的圆形&#xff0c;超出围绕圆形边线滑动 这里只提供一个思路&#xff0c;下面代码可以运行&#xff0c;但是要使用需要改成自己的参数 <div style"width: 100%;height: 100vh;display: flex;justify-content: cente…

从雷军代码再上热搜给程序员们的启示

不久前&#xff0c;小米的一则关于雷军的宣传广告火了&#xff0c;这个宣传广告里隐藏了菜单&#xff0c;那些密密麻麻的字母就是雷军曾经写的代码&#xff0c;据小米公关部负责人王化表示&#xff0c;这张海报上的代码来自30年前&#xff0c;雷军在DOS环境下采用汇编语言亲自编…

Java鹰眼轨迹服务 轻骑小程序 运动健康与社交案例

Java地图专题课 基本API BMapGLLib 地图找房案例 MongoDB 百度地图鹰眼轨迹服务 鹰眼轨迹服务概述 鹰眼是一套轨迹管理服务&#xff0c;提供各端SDK和API供开发者便捷接入&#xff0c;追踪所管理的车辆/人员等运动物体。 基于鹰眼提供的接口和云端服务&#xff0c;开发者可以迅…

【 BERTopic应用 02/3】 分析卡塔尔世界杯推特数据

摄影&#xff1a;Fauzan Saari on Unsplash 一、说明 这是我们对世界杯推特数据分析的第3部分&#xff0c;我们放弃了。我们将对我们的数据进行情绪分析&#xff0c;以了解人们对卡塔尔世界杯的感受。我将在这里介绍的一个功能强大的工具包是Hugging Face&#xff0c;您可以在…

Mac鼠标增强工具Smooze Pro

Smooze Pro是一款Mac上的鼠标手势增强工具&#xff0c;可以让用户使用鼠标手势来控制应用程序和系统功能。 它支持多种手势操作&#xff0c;包括单指、双指、三指和四指手势&#xff0c;并且可以自定义每种手势的功能。例如&#xff0c;您可以使用单指向下滑动手势来启动Expos视…

el-table分页后序号连续的两种方法

实现效果&#xff1a; 第一页排序到10&#xff0c;第二页的排序应从11开始 实现方法一&#xff1a; 在el-table的序号列中使用template定义 <el-table><el-table-columnmin-width"10%"label"序号"><template slot-scope"scope"…

使用pymupdf实现PDF内容搜索并显示功能

简介&#xff1a; 在日常工作和学习中&#xff0c;我们可能需要查找和提取PDF文件中的特定内容。本文将介绍如何使用Python编程语言和wxPython图形用户界面库来实现一个简单的PDF内容搜索工具。我们将使用PyMuPDF模块来处理PDF文件&#xff0c;并结合wxPython构建一个用户友好的…

比例电磁铁控制放大器

GP63系列比例电磁铁应用于电液比例控制系统中&#xff0c;与比例控制放大器配套使用共同控制力士(REXROTH)型十通径螺纹比例阀。在额定行程及额定电流范围内&#xff0c;其输出力与输入电流成比例&#xff0c;通过内置反力弹簧&#xff0c;改变了输出力的特性&#xff0c;使系统…

能源存储蓄电池管理,0基础也能快速上手!

随着能源储存需求的不断增加&#xff0c;蓄电池作为关键的能量储存装置&#xff0c;其稳定性和性能的监测变得尤为重要。 蓄电池监控有助于提高能源系统的可靠性&#xff0c;确保连续供电&#xff0c;同时为维护人员提供及时的故障信息&#xff0c;以便他们能够迅速采取适当的措…

百望云联合华为发布票财税链一体化数智解决方案 赋能企业数字化升级

随着数据跃升为数字经济关键生产要素&#xff0c;数据安全成为整个数字化建设的重中之重。为更好地帮助企业发展&#xff0c;中央及全国和地方政府相继出台了多部与数据相关的政策法规&#xff0c;鼓励各领域服务商提供具有自主创新的软件产品与服务&#xff0c;帮助企业在合规…

【AutoLayout案例03-设置底部按钮之间相同间距 Objective-C语言】

一、好,咱们继续啊 1.咱们继续把autoLayout介绍一下 咱们的自动布局 给大家介绍一下 那么,自动布局呢 继续咱们给大家做的案例 做几个例子 把这几个例子做完以后 我们再给它 我们再给大家说一下,如何通过代码,来实现自动布局 虽然说,通过代码来实现自动布局,并不推荐 但…

AIF360入门教学

1、AIF360简介 AI Fairness 360 工具包(AIF360)是一个开源软件工具包&#xff0c;可以帮助检测和缓解整个AI应用程序生命周期中机器学习模型中的偏见。在整个机器学习的过程中&#xff0c;偏见可能存在于初始训练数据、创建分类器的算法或分类器所做的预测中。AI Fairness 360…

UI自动化测试(下拉框(select类),多窗口,属性,类的方法实战)

一、下拉框&#xff08;select类实现的&#xff09; 在UI的自动化测试实战中&#xff0c;如果遇到下拉框的选择&#xff0c;我们可以使用Select类里面的方法来具体进行定位和解决。下面我们使用HTML的代码来写一个下拉框的页面交互&#xff0c;让大家从直观上知道下拉框的交互…

Node工程的依赖包管理方式

在前端工程化中&#xff0c;JavaScript 依赖包管理是非常重要的一环。依赖包通常是项目所依赖的第三方库、工具和框架等资源&#xff0c;它们能够帮助我们减少重复开发、提高效率并且确保项目可以正确的运行。 目前比较常见的前端包管理器有 npm 和 Yarn&#xff0c;npm 是 No…

16.3.2 【Linux】程序的管理

程序之间是可以互相控制的。举例来说&#xff0c;你可以关闭、重新启动服务器软件&#xff0c;服务器软件本身是个程序&#xff0c; 你既然可以让她关闭或启动&#xff0c;当然就是可以控制该程序。 使用kill-l或者是man 7 signal可以查询到有多少个signal。主要的讯号代号与名…