使用Python对战争进行Twitter情绪分析
在这篇文章中,我们将看到如何使用Python对战争进行Twitter情感分析。
自从社交媒体开始受到关注以来,它在公共舆论中的作用是深刻而明显的。社交媒体让我们能够以巨大的能力和规模分享信息。就在俄乌可能开战的消息传出后,全球各地的网民开始涌向这个平台,发表他们的意见。对这些意见的分析可以帮助我们了解公众对战前和战时不同事件的想法。我们从2022年1月到3月的第一周,在推特上搜索与俄罗斯入侵乌克兰有关的关键词,如#乌克兰战争#俄罗斯入侵#与乌克兰站在一起#乌克兰北约等,目的是了解世界各地的人在这些事件中的情绪。
首先,为了分析情感和处理数据,我们需要导入以下依赖关系。
导入依赖
首先,我们将需要导入以下依赖关系。
数据集加载
战争65天的推文数据集可在此获得(kaggle数据集下载-d foklacu/ukrain-war-tweets-dataset-65-days)。它有从2022年1月1日至2022年3月6日的推文。这条时间线包括入侵前和入侵高峰期。这个数据集包含每天最多5000条推文,搜索关键词为 “乌克兰战争”、”乌克兰军队”、”乌克兰边境”、”乌克兰北约”、”StandwithUkraine”、”俄罗斯军队”、”俄罗斯边境乌克兰”、”俄罗斯入侵”。数据集根据搜索关键词被分为8个逗号分隔的数值(CSV)文件。这些文件使用Pandas Dataframe进行提取和加载。加载数据集的代码将是。
所以,在这里,我们已经将所有的8个CSV文件加载到一个Pandas数据框架中。
删除重复的内容
然后,最重要的是要从数据集中删除任何重复的推文。下面的代码可以帮助我们做到这一点。
预处理
存在于数据集中的日期列同时具有日期和时间。对于接下来的处理步骤,去除时间部分是有帮助的。下面的代码将有助于做到这一点。
现在,我们有61种不同语言的推文,共65天。为了检查这一点,我们可以使用以下代码 –
输出:
现在我们将只取英文推文,并删除所有非英文推文。下面的代码片段将帮助我们做到这一点。
输出:
在这里,我们可以发现早些时候我们有1313818条推文,在去除非英语推文后,我们有1204218条推文。
接下来,标点符号、标签和注释被删除,所有文本被转换为小写字母,以避免相同词语的重复。
这种操作前后的文本比较——。
情绪分析
情感分析程序包括收集数据、分析数据、预处理数据,然后进行情感识别、特征选择、情感分类,以及去除其中的极性和主观性。TextBlob库被用来分析推文的情绪。一条推文的负面分数大于正面分数,如果相反则标记为正面,否则标记为负面,否则为中性。移除样本数据集中每一个独特日子的推文数量,然后计算该日有正面、负面和中性推文的数量,找出它们的百分比。这有助于我们了解人们在一天中的反应。以下是相关的代码片段
现在,如果我们想看到上述操作的结果,那么我们可以使用以下代码片段。
输出:
现在,为了计算正面、负面和中立推文的总百分比,我们将使用以下代码片段。
输出:
如果我们想用饼状图来显示这个结果,那么我们可以借助下面的代码段来实现 —
输出:
现在,如果我们想看到65天的情绪,那么我们可以借助下面的代码段来实现。
输出:
推文的情感以图表形式呈现
使用N-gram的词汇流行度
我们使用Scikit-Learn的特征提取模块来找出最流行的词和一组相邻的词。在这里,我们得到了一个经过标记化、去除停顿词和对先前清理过的文本进行词根处理的词袋模型。下面是相同的代码片段—-。
输出:
为了从中找出最常用的词,我们首先需要一个词袋。词袋是一个矩阵,每一行代表一个特定的文本,每一列代表词汇中的一个词。然后生成一个包含所有文本中每个词出现次数之和的向量。换句话说,”词袋 “矩阵每一列的元素都要加起来。最后,对带有单词和其出现次数的列表进行排序。以下是代码片段
输出:
使用最多的词
现在,为了找出相邻单词的组别,我们将借助Unigram和Bigram的帮助。以下是相关的代码片段。
输出: