脱欧话题走势

​ 2013年1月23日,英国首相卡梅伦首次提及脱欧公投。在2016年2月欧盟峰会后,确定宣布英国于2016年6月23日举行,脱欧阵营以51.9%对留欧阵营48.1%的微弱优势取胜,脱欧拉锯战也自此开始。2019年1月,英国议会下院投票否决了此前英国政府与欧盟达成的脱欧协议。3月,修改后的脱欧协议仍然没有通过。4月,欧盟各国达成一致,同意将脱欧日期延迟至2019年10月31日。

​ 同样的,在过去三年中,脱欧也是社交网络上被频繁讨论的话题之一。在推特上,不同立场的讨论者会使用不同的hashtag(类似于微博的话题,后文以话题表示)来表明自己的阵营,或者以话题标签来表明所讨论的主题事件等。因此,本文以推特中脱欧相关的话题作为研究对象,来作为对脱欧事件民众意见及热点事件分析的切入点。

​ 下图为脱欧话题动态,横轴为话题的讨论量(包含特定话题的推文数量),纵轴为话题的支持量(包含特定话题的推文转发数量)。图中显示的是2016年6月的各类话题的讨论量与支持量。

脱欧话题走势 (截自动画)

​ 我们一共统计2016年1月至2019年5月,共计41个月的话题走势。具体的可视化动态呈现在该网页,代码可于该仓库获取。其中,红色的话题代表支持脱欧话题,灰色为中立话题,蓝色为支持留欧的话题,该倾向值的计算方式可参考该文章

​ 下面将结合代码详细介绍话题数据如何使用Python 3获取数据,清理,并进一步分析获取结果。

数据来源

  • 201601 至201905 包含特定hashtag的推特 Top 分类推文,以月为单位

    Top分类是指网页版推特在检索时的该页面

分析工具

  • Python 3.6.5
  • 使用到的库:NumPy, Re, BeautifulSoup, selenium

数据获取及分析过程

安装chrome及chromedriver

  1. 在官网下载chromedriver,需要与已安装的chrome的版本对应,下载地址为: http://chromedriver.storage.googleapis.com/index.html

  2. 将chromedriver的安装路径粘贴到系统变量中(参考python的环境变量配置)

  3. 在终端中输入 chromedriver —version检查是否配置成功

    检查 chromedriver 配置是否完成

安装需要的Python包

  • 如果本机已安装pip( Python 3.4+ 以上版本都自带 pip 工具),则直接在终端运行以下两条命令安装BeautifulSoup 和 selenium包。

    pip install beautifulsoup4

    pip install selenium

  • 若本机未安装pip,可参考该教程安装pip并了解如何使用pip进行包管理。另外,easy_install 等包管理工具也可用于安装所需的包。

获取github代码

  • 在终端中执行

    git clone https://github.com/BrexitProject/TweetsMining.git

    git 的详细命令可参考该教程

  • 也可以在网页中直接选择download zip, 获得代码压缩包。

执行代码获取相关数据

​ 相关代码在 TweetsMining/collect/ 中获取。

  1. 在view.py文件中设置起始月份(start变量)与结束月份(stop变量),格式为YYYYMM。

    日期设置

  2. 在tag文件中按行添加需要进行统计的话题,如:

    hashtag添加

  3. 获取包含推文和转推量信息的html文件。执行view.py,会弹出chrome浏览器,则表明程序正在执行。使用者可以看到chrome网页正在自动下拉加载新的推特,直至网页底部。

    • 在网页加载完毕后,需人工确认网页是否加载完毕,确认后程序继续执行,加载新网页。这是由于国内连接推特需翻墙,若连接不稳定,可能旧网页未加载完毕时就会开始加载新网页。

      若有需要,可在view.py中删去该行,则无需人工确认网页是否加载完毕:

      1
      tkinter.messagebox.showinfo('提示', '确认网页加载完成?')

    执行完毕后,将得到一个新文件夹crawl,文件夹中有多个以话题命名的子文件夹,子文件夹中有多个以月份命名的html文件。这些html文件中包含了推文的文本内容,发推者,发推时间,推文转发量,推文点赞量等信息。

    保存的html文件

  1. 执行function.py,程序执行完毕后将获得两个csv文件,分别为tweet_data,retweet_data。其格式及内容如图:

    tweet_data示例

    之后的可视化步骤所使用的就是此处得到的数据。

  2. 若有需要,执行getTweets.py可获取每个html文件中的推文文本。

文中涉及的所有代码都可以在该 github 仓库 中获取。