项目简介
中国新闻地图是一个以可视化的方式反映中国新闻在时间与空间分布的差异性的网页应用,利用gdelt已有历史数据作为数据源,通过多样化的统计图表对中国新闻进行展示。
目前项目处于测试阶段,将继续迭代,之后会对现有数据进行多维度深入分析,新增关键词查询等功能。
前端可视化部分介绍
新闻地图前端页面的统计信息展示所利用的主要技术有echarts,highcharts,cartogram.js ,d3.js 和 colorbrewer。
ECharts,缩写来自Enterprise Charts,商业级数据图表,一个纯Javascript的图表库,可以流畅的运行在PC和移动设备上,兼容当前绝大部分浏览器(IE6/7/8/9/10/11,chrome,firefox,Safari等),底层依赖轻量级的Canvas类库ZRender,提供直观,生动,可交互,可高度个性化定制的数据可视化图表。创新的拖拽重计算、数据视图、值域漫游等特性大大增强了用户体验,赋予了用户对数据进行挖掘、整合的能力。
支持折线图(区域图)、柱状图(条状图)、散点图(气泡图)、K线图、饼图(环形图)、雷达图(填充雷达图)、和弦图、力导向布局图、地图、仪表盘、漏斗图、事件河流图等12类图表,同时提供标题,详情气泡、图例、值域、数据区域、时间轴、工具箱等7个可交互组件,支持多图表、组件的联动和混搭展现。
Highcharts 是一个用纯 JavaScript编写的一个图表库, 能够很简单便捷的在web网站或是 web 应用程序添加有交互性的图表,并且免费提供给个人学习、个人网站和非商业用途使用。
Highcharts 支持的图表类型有直线图、曲线图、区域图、柱状图、饼状图、散状点图、仪表图、气泡图、瀑布流图等多达 20 种图表,其中很多图表可以集成在同一个图形中形成综合图。
通常情况下,Highcharts包含标题(Title)、坐标轴(Axis)、数据列(Series)、数据提示框(Tooltip)、图例(Legend)、版权信息(Credits)等,高级的还包括导出功能按钮(Exporting)、标示线(PlotLines)、标示区域(PlotBands)等。
Highcharts基本组成部分如下图所示
Echarts与Highcharts均是由纯JavaScript编写,使用方式类似。详细的使用方式可参考官方文档与使用教程:
Echarts官方文档
Highcharts使用教程
Highcharts中文API
数据介绍
数据来源
The GDELT Project is the largest, most comprehensive, and highest resolution open database of human society ever created. Its Event Database archives contain nearly 400M latitude/longitude geographic coordinates spanning over 12,900 days, additionally making it one of the largest open-access spatio-temporal datasets in existance. It truly pushes the boundaries of “big data,” weighing in at over a quarter-billion rows with 59 fields for each record, spanning the geography of the entire planet, and covering a time horizon of more than 35 years. Its Global Knowledge Graph connects the world’s people, organizations, locations, themes, counts, and emotions into a single holistic network over the entire planet.
GDELT项目涵盖了1979年至今的所有新闻数据,它每日对全球新闻报道进行自动抓取,并通过文本分析从不同维度提取信息。 GDELT的所有数据均可免费获得,链接为:http://data.gdeltproject.org/events/index.html
数据组成
通过上文链接可下载zip类型的gdelt数据压缩包,解压后为csv格式,每个csv文件内的数据均有58个字段(2013年3月以前的数据仅有57个字段,后文会详细说明),这58个字段分为EVENTID AND DATE ATTRIBUTES,ACTOR ATTRIBUTES,EVENT ACTION ATTRIBUTES,EVENT GEOGRAPHY,DATA MANAGEMENT FIELDS这五部分。
- EVENT AND DATE ATTRIBUTES
这一部分的字段记录了捕捉事件的全局唯一标识符号码,事件发生的日期和日期的不同版本格式,这有助于信息被记录在可能有特定的日期格式要求的不同的分析程序中。所包含的字段有:
GlobalEventID:数据类型为整数型,它是一条记录的唯一标识符,通常它是递增标识的。
Day:记录事件发生的日期,格式为YYYYMMDD
MonthYear:记录事件发生的年月,格式为YYYYMM
Year:记录事件发生的年份,格式为YYYY
FractionDate:记录事件发生的日期,格式为YYYY.FFFF,其中FFFF为到该日期为止在当前年份所占的百分比,通过公式(MONTH * 30 + DAY) / 365进行近似计算。
- ACTOR ATTRIBUTES
这一部分字段描述了事件的两个参与者的CAMEO码、名称和特征属性。在复杂事件或仅有一个参与者的事件中另一个参与者的属性值可能为空,在gdelt系统无法识别参与者时参与者属性也可能为空。每个参与者的各项属性在缺省的情况下也会为空值。所包含的字段有:
Actor1Code:参与者1的CAMEO码。CAMEO包含一组编码属性指示参与者的地理、阶级、民族和宗教信仰和他的角色信息(政治精英、军官、反对派等)。每个属性均为3个字母的缩写,以任何可能的顺序排列组成CAMEO码。
Actor1Name:参与者1的名称。对于政治领袖或组织,这将是领导人的正式名称(如乔治·W·布什、联合国);地理比赛将是该国或首都/主要城市名称。
Actor1CountryCode:参与者1国家信息的CAMEO码(3字母缩写),它可能为Actor1Code中的CAMEO码,也可能为空。它标识了受到该事件影响的地理区域。
Actor1KnownGroupCode:如果参与者1是一个已知的组织/非政府组织/反叛组织(如联合国、世界银行、基地组织等),该字段将包含其CAMEO码。
Actor1EthnicCode:如果系统能识别出参与者1的民族信息并且该民族具有CAMEO码,该字段将包含其CAMEO码。 注意:该新增字段仍处于实验阶段。
Actor1Religion1Code:如果系统能识别出参与者1的宗教信息并且该宗教具有CAMEO码,该字段将包含其CAMEO码。 注意:该新增字段仍处于实验阶段。
Actor1Religion2Code:如果参与者1包含多重宗教信息,该字段将包含其二级代码。一些宗教将自动使用两个代码,如Catholic将调用Christianity作为第一个代码,Catholicism作为第二个。
Actor1Type1Code:此处的三位CAMEO代码将指代参与者1的类型或角色信息。这可能是一个特定的角色,如警察、政府、军队、政治反对派,反对派等,或是如教育、精英、媒体、难民这样的广泛的角色类型,或是有组织的团体,例如民间运动。特殊的代码如“温和的”和“激进的”可能指一组的操作策略。
Actor1Type2Code:如果参与者1具有多重角色,此处将包含其CAMEO码。
Actor1Type3Code:如果参与者1具有多重角色,此处将包含其CAMEO码。
参与者2将重复以上所有属性。
- EVENT ACTION ATTRIBUTES
这部分字段将包含事件行为(即参与者1对参与者2所做的事)的各类属性,并将提供几种机制来评估事件的重要性和其造成的短期影响。
IsRootEvent:此字段标识了该事件在事件流中是否处于根节点位置。
EventCode:此字段通过CAMEO码描述了事件参与者1对参与者2的行为。
EventBaseCode:这里是一个三级分类法标识的CAMEO码。对于第三级的事件,此处包含其二级事件的叶节点。例如编码“0251”(“Appeal for easing of administrative sanctions”) ,此处即为“025” (“Appeal to yield”)。对于二级事件和一级事件,此处即为其EventCode。
EventRootCode:与上面类似,此处标识了事件的根节点。 如“0251” (“Appeal for easing of administrative sanctions”) ,此处即为“02” (“Appeal”)。
QuadClass:这个字段指定事件类型主要分类,所有事件将被划分为以下四个分类之一:1=口头合作,2=物质合作,3=口头冲突,4=物质冲突。
GoldsteinScale:每个事件将被分配一个在-10到+10之间的数值,用以衡量理论上该事件对国家产生的潜在影响。注意:这个分数的判定是基于事件类型而非事件的细节,因此一个10人参与的暴乱与一个1000人参与的暴乱都将获得同样的分数。
NumMentions:该属性值为数据库内所有文章提及该事件的次数。这可以用作评估事件的重要性的方法:讨论该事件越多,越有可能是重要的。如果新闻文章发表之后这个事件引发了讨论,该字段数值会进行更新(例如,一个事件在几周后的可能引发一个舆论热潮,会有无数的新闻文章发表提到原始新闻;在新的发展背景下,某一事件在一周年时可能会有进一步的报道)。
NumSources:该属性值为所有提及该事件的数据源数值。同上一个属性一样,这也可以用作评估事件的重要性的方法。该属性值也会在上文相同的情况下进行更新。
NumArticles:该属性值为所有提及该事件的文章数。同上一个属性一样,这也可以用作评估事件的重要性的方法。该属性值也会在上文相同的情况下进行更新。
AvgTone:该属性值为所有文章提及该事件时“语气”的平均值。分数范围从-100(极其消极的)到+100(极积极的)。共同的价值观分数范围在-10和+10之间,0表示中立。这可以用作过滤事件的“上下文”的方法,从而衡量一个事件的重要性和其影响。例如,轻微负面语气的暴乱事件很可能是一个小事件,而如果是极其负面的语气,这表明可能是一个更严重的事件。而具有积极分数的暴乱事件则可能表明上下文中正在描述一个积极的事(如每天攻击的数量已经大大减少了)。
- EVENT GEOGRAPHY
这一部分属性值描述了事件参与者与事件的地理位置信息,包含如下字段:
Actor1Geo_Type:该字段取值如下:1=COUNTRY (match was at the country level), 2=USSTATE (match was to a US state), 3=USCITY (match was to a US city or landmark), 4=WORLDCITY (match was to a city or landmark outside the US), 5=WORLDSTATE (match was to an Administrative Division 1 outside the US – roughly equivalent to a US state)
Actor1Geo_Fullname:此处为参与者1的完整地理名称,格式为“城市/地标,州,国家”。 注意:同一地点可能具有不同拼写或名称,所以该属性无法用来确定唯一的地理信息。利用下面的FeatureID属性可确定两个不同名字的位置指的是同一个地方。
Actor1Geo_CountryCode:标识参与者1国家地理信息的FIPS10-4国家编码。
Actor1Geo_ADM1Code:此处为2位FIPS10-4国家编码和2位FIPS10-4行政区划1(ADM1)编码,标识了参与者1的行政区划地理信息。
Actor1Geo_Lat:参与者1所处地理位置的纬度。
Actor1Geo_Long:参与者1所处地理位置的经度。 Actor1Geo_FeatureID.:参与者1地理位置的GNS或GNIS标识,详细信息请参考Leetaru(2012)
参与者2与事件的地理信息将重复以上所有属性。
- DATA MANAGEMENT FIELDS
最后一组字段提供数据管理信息记录的事件记录。2013年4月1日之前的事件在这部分中只具有DATEADDED属性。
DATEADDED:因为今天发布的新闻报道可以报道过去的事件,这将导致此字段和其他事件日期字段不一致。此字段记录的是该条数据被添加入数据库的日期,而第一部分的日期信息记录的是事件发生的时间。
SOURCEURL:这个字段只存在2013年4月1日以后的文件中。通常记录事件的新闻文章的URL列表。如果事件是从BBC监测服务的文章中获得的,这个字段将包含“BBC Monitoring”。如果一个事件在多篇文章中被提及,只提供一个url。
附录
CAMEO Code Reference CAMEO Actor Code Lookups
CAMEO Event Code Lookups
数据库构建
中国新闻地图所使用的数据为gdelt历史数据中事件地理信息为中国的所有数据。数据表设计与gdelt一致,包含以上所有属性值。
项目迭代
新闻地图本次迭代主要对图表的内容进行增加以及视觉设计进行修改。
可视化部分新增内容:矩形树图
矩形树图(treemap)简介
treemap由马里兰大学教授Ben Shneiderman于上世纪90年代提出,起初是为了找到一种有效了解磁盘空间使用情况的方法。 教授首先想到的是用树状结构来表示,但是这样图表会太占空间。那么如何在受限空间内展示树状数据结构呢?Ben教授想利用面积来表示文件大小,但是用矩形、三角形还是圆形都有一定的问题。 正当Ben教授在休息室中思考时,突然“Aha”,想到了将屏幕交替切分为水平和垂直方向的矩形,用递归来实现层级关系。教授花了几天时间验证这个想法,并完成了只有六行的算法。算法和最初的设计发表在1992年1月的《ACM Transactions on Graphics》上。 作者:Xhinking 链接:http://zhuanlan.zhihu.com/datavis/19894525 来源:知乎
在矩形树图中,每个节点都有名字和相应的大小。如果用矩形树图表示我们熟悉的文件目录列表,那么叶子节点的大小就能表示各个文件的体积,父节点就能表示文件夹的体积也就是它包含的文件体积之和 矩形树图的应用 很多磁盘管理App使用Treemap帮助用户可视化磁盘状况。如Mac平台上的Disk Map for Mac,windows的spacesniffer。
使用echarts实现treemap
- 引入echarts
ECharts 3 开始不再强制使用 AMD 的方式按需引入,代码里也不再内置 AMD 加载器。因此引入方式简单了很多,只需要像普通的 JavaScript 库一样用 script 标签引入。
<!DOCTYPE html>
<html>
<header>
<meta charset="utf-8">
<!-- 引入 ECharts 文件 -->
<script src="echarts.min.js"></script>
</header>
</html>
- 动态加载所需图表
在绘图前我们需要为 ECharts 准备一个具备高宽的 dom 容器。
<body>
<!-- 为 ECharts 准备一个具备大小(宽高)的Dom -->
<div id="main" style="width: 600px;height:400px;"></div>
</body>
然后就可以通过 echarts.init 方法初始化一个 echarts 实例并通过 setOption 方法生成相应类型的图表。
网站布局设计
新版新闻地图使用了基于bootstrap3的 AdminLTE前端框架,它完全响应式的特点使得基于其构建的网站适合从小型移动设备到大型台式机很多的屏幕分辨率,且AdminLTE高度可定制的,易于使用。 通过对新闻数据数量、区域、事件类型、影响力的属性,我们将分析图标安排在不同的页面,比之前一次迭代的版本更加有条理性,直观性。
- 数量分析页面
通过扇形图统计上个月热点省市的新闻数量以及2015年全年主要省份的新闻数量。
- 事件分析页面
gdelt数据的新闻类型有几种分类方法。其中一种将所有事件分为四类:口头合作、物质合作、口头冲突、物质冲突,我们通过堆叠区域图将去年全年每个月各类事件发生的情况进行统计。 另外还有一种更为详细的分类规则,在这个规则下,事件被分为20大类,每个大类下又有若干类别。 详细说明链接: http://gdeltproject.org/data/lookups/CAMEO.eventcodes.txt?plg_nld=1&plg_uin=1&plg_auth=1&plg_nld=1&plg_usr=1&plg_vkey=1&plg_dev=1 我们通过桑基图(sankey diagram)向用户展现分类之间的关系,通过矩阵图(matrix diagram/treemap)向用户展现各种分类下新闻事件的数量比较。
- 影响力分析页面
每个事件都有一个影响力大小的值,根据事件的地理坐标我们可以通过计算得出某一个地区在一段时间内所有新闻产生的影响力大小的总和,记作该地区的影响力,通过热力图可以看出中国各地区该数值的分布。另外我们还分析了热点城市新闻发生的数量与影响力的关系,通过一张多元化的表格加以呈现。
- 全球分析页面
gdelt提供了全球数据,我们为了扩充新闻地图网的实用性,对这些数据也加以分析利用。通过地图和柱状图两种形式统计了去年全年内各国和几大洲的新闻发生情况,可以较为直观的看出大体的趋势。 以上是新闻地图此次迭代的主要内容。
Leave a Comment