tweetfeels, 在 python 中使用 Twitter api进行实时情感分析

分享于 

11分钟阅读

GitHub

  繁體 雙語
Real-time sentiment analysis in Python using twitter's streaming api
  • 源代码名称:tweetfeels
  • 源代码网址:http://www.github.com/uclatommy/tweetfeels
  • tweetfeels源代码文档
  • tweetfeels源代码下载
  • Git URL:
    git://www.github.com/uclatommy/tweetfeels.git
    Git Clone代码到本地:
    git clone http://www.github.com/uclatommy/tweetfeels
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/uclatommy/tweetfeels
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    

    简介

    Tweetfeels依赖 VADER情感分析为用户定义的主题提供情感得分。 它通过利用 Twitter API流来监听围绕特定主题的实时 tweet。 一些可能的应用程序包括:

    • 计算特定政治数字或者问题的社会情绪,并分析地理区域的得分。
    • 计算品牌的情绪得分。
    • 利用情感评分作为学习算法的训练特征确定股票买卖触发器。
    • 等等 !
    安装方法

    最简单的方法是从PyPI安装:

    
    > pip3 install tweetfeels
    
    
    
    

    如果你已经从PyPI安装并想要升级:

    
    > pip3 install --upgrade tweetfeels
    
    
    
    

    你还可以通过克隆这里 repo 来安装:

    
    > git clone https://github.com/uclatommy/tweetfeels.git
    
    
    > cd tweetfeels
    
    
    > python3 setup.py install
    
    
    
    

    附加要求

    你需要获得 Twitter OAuth密钥并提供给 tweetfeels,以便连接 Twitter API的流。 到这里去,这里是关于如何获取你的钥匙的说明。

    最低 python 版本 3.6

    如果由于某些原因,pip没有安装vader词典:

    
    > python3 -m nltk.downloader vader_lexicon
    
    
    
    
    示例

    注意:示例中的授权密钥是隐私的掩码。

    对于所有示例,我们使用一些常用样板行:

    from tweetfeels import TweetFeels
    consumer_key ='*************************'consumer_secret ='**************************************************'access_token ='**************************************************'access_token_secret ='*********************************************'login = [consumer_key, consumer_secret, access_token, access_token_secret]
    在 10秒内,与关键字"trump"相关的流 tweet,然后计算last秒的情绪得分。
    >>> trump_feels = TweetFeels(login, tracking=['trump'])>>> trump_feels.start(10)
    Timer completed. Disconnecting now...>>> trump_feels.sentiment.value-0.0073007430343252711
    流 tweet,每 10秒打印一次当前的情绪得分
    >>>from threading import Thread>>>import time>>>>>>defprint_feels(seconds=10):...while go_on:... time.sleep(seconds)...print(f'[{time.ctime()}] Sentiment Score: {trump_feels.sentiment.value}')...>>> go_on =True>>> t = Thread(target=print_feels)>>> trump_feels.start()>>> t.start()
    [Mon Feb 2023:42:022017] Sentiment Score: -0.010528112416665309[Mon Feb 2023:42:132017] Sentiment Score: -0.007496043169013409[Mon Feb 2023:42:252017] Sentiment Score: -0.015294713038619036[Mon Feb 2023:42:362017] Sentiment Score: -0.030362951884842962[Mon Feb 2023:42:482017] Sentiment Score: -0.042087318872206333[Mon Feb 2023:42:592017] Sentiment Score: -0.041308681936680865[Mon Feb 2023:43:102017] Sentiment Score: -0.056203371039128994[Mon Feb 2023:43:222017] Sentiment Score: -0.07374769163753854[Mon Feb 2023:43:342017] Sentiment Score: -0.09549338153348486[Mon Feb 2023:43:462017] Sentiment Score: -0.10943157911799692[Mon Feb 2023:43:572017] Sentiment Score: -0.1406756546353098[Mon Feb 2023:44:082017] Sentiment Score: -0.12366467180485821[Mon Feb 2023:44:202017] Sentiment Score: -0.14460675229624026[Mon Feb 2023:44:322017] Sentiment Score: -0.13149386547613803[Mon Feb 2023:44:432017] Sentiment Score: -0.14568801433828418[Mon Feb 2023:44:552017] Sentiment Score: -0.14505295656838593[Mon Feb 2023:45:062017] Sentiment Score: -0.12853750933261338[Mon Feb 2023:45:172017] Sentiment Score: -0.11649611157554504[Mon Feb 2023:45:292017] Sentiment Score: -0.11382260762980569[Mon Feb 2023:45:402017] Sentiment Score: -0.11121839471955856[Mon Feb 2023:45:522017] Sentiment Score: -0.11083390577340985[Mon Feb 2023:46:032017] Sentiment Score: -0.10879727669948112[Mon Feb 2023:46:152017] Sentiment Score: -0.10137079133168492[Mon Feb 2023:46:262017] Sentiment Score: -0.10075971619875508[Mon Feb 2023:46:382017] Sentiment Score: -0.1194907722483259[Mon Feb 2023:46:492017] Sentiment Score: -0.1328795394197093[Mon Feb 2023:47:012017] Sentiment Score: -0.13734346200202507[Mon Feb 2023:47:122017] Sentiment Score: -0.1157629833027525[Mon Feb 2023:47:242017] Sentiment Score: -0.11030256885649424[Mon Feb 2023:47:352017] Sentiment Score: -0.12185876174059834[Mon Feb 2023:47:472017] Sentiment Score: -0.11323251979604802[Mon Feb 2023:47:582017] Sentiment Score: -0.11307793897469191>>> trump_feels.stop()

    注意:Trump是一个非常高的主题。 我们运行了大约 6分钟,收集了几乎 15,000个 tweet ! 对于较低的卷主题,你可能希望比每 10秒更频繁地轮询情绪值。

    流tweet连续用于另一个主题,并保存到另一个数据库。
    >>> tesla_feels = TweetFeels(login, tracking=['tesla', 'tsla', 'gigafactory', 'elonmusk'], db='tesla.sqlite')>>> t = Thread(target=print_feels, args=(tesla_feels, 120))>>> tesla_feels.start()>>> t.start()
    [Mon Feb 2017:39:152017] Sentiment Score: 0.03347735418362685[Mon Feb 2017:41:152017] Sentiment Score: 0.09408120307200825[Mon Feb 2017:43:152017] Sentiment Score: 0.12554072120979093[Mon Feb 2017:45:162017] Sentiment Score: 0.12381491277579157[Mon Feb 2017:47:162017] Sentiment Score: 0.17121666657137832[Mon Feb 2017:49:162017] Sentiment Score: 0.22588283902409384[Mon Feb 2017:51:162017] Sentiment Score: 0.23587583668725887[Mon Feb 2017:53:162017] Sentiment Score: 0.2485916177213093
    使用情绪生成器重播捕获的数据和 plot
    import pandas as pdfrom datetime import timedelta, datetimeimport matplotlib.pyplot as pltimport matplotlib.dates as mdates
    data1 = {s.end: s.value for s in tesla_feels.sentiments(delta_time=timedelta(minutes=15), nans=True)}
    data2 = {s.end: s.volume for s in tesla_feels.sentiments(delta_time=timedelta(minutes=15), nans=True)}
    df1 = pd.DataFrame.from_dict(data1, orient='index')
    df2 = pd.DataFrame.from_dict(data2, orient='index')
    fig, axes = plt.subplots(nrows=2, ncols=1)
    fig.set_size_inches(15, 5)
    plt.subplot(211).axes.get_xaxis().set_visible(False)
    df1[0].plot(kind='line', title='Tesla Sentiment')
    plt.subplot(212)
    df2[0].plot(kind='area', title='Volume')

    方法

    为了计算单个情感分数,你可以在时间上组合数百个或者上千个微博。 一个简单的方法可能是将tweet放入离散时间框中。 例如,你可以能每 10秒将个人情感分数平均值,以便当前情感是最后 10秒的平均值。 在这种方法中,你选择离散长度是任意的,会影响得分的感知方差。 它也忽略了过去的情感计算。

    为了更正这些效果,我们每分钟都会有时间框,不要放弃以前计算的情感。 相反,在添加新推文时,我们将逐步淘汰旧的tweet感情:

    f1

    其中 f2 是时间t的聚合情绪,f3 是当前时间框的情绪得分,以及 f5 是 0和 1之间的掉掉因子。 我们用开始计算f4 这就是为什么你会看到情绪得分远离零,直到它稳定在自然价值。 在每个时间框中,我们都使用了加权平均值。 对于每个微博,我们利用用户和朋友计数的关联追随者作为影响的度量。

    一些tweet也会有一个中性分数( 0.0 )。 在这些情况下,我们将它从聚合中排除。

    以下是实时特斯拉情绪的不同模型参数化示例:

    警告

    本文针对 vaderSentiment的训练数据集进行了优化,使它的能够识别新词。互联网。甚至表情的情感,从而提高了学习效率。 然而,它只能衡量一个句子或者一组词的聚合情绪值。 它不测量一个微博是否与某个特定的思想。政治图形或者方法同意或者不同意。 虽然通常是 true的说法不一致,但却倾向于有负面的情绪。 作为一个例子,请看一下ace数据集中的一些情感分数:

    情感微博
    1-0.5106RT @TEN_GOP: 中断:目前瑞典发生大量骚乱。 Stockholm在火焰中Trump是对的 !
    2-0.8744RT @kurteichenwald: 英特尔显示我们的盟友瑞典没有犯罪。 福克斯在Fox上看到的。 所以他忽略了情报攻击了我们的盟友。 呃。
    30.7003RT @NoBoomGaming: 我是glass的玻璃。 现在王赢了,想想下四年我们将拥有的所有新模式 !
    40.6249RT @SandraTXAS: Haley在美国踢 a$$

    API  str  时间  Twitter  实时  情感分析  
    相关文章