当前位置: 首页 > news >正文

数据可视化的Python实现

一、GDELT介绍

GDELT ( www.gdeltproject.org ) 每时每刻监控着每个国家的几乎每个角落的 100 多种语言的新闻媒体 -- 印刷的、广播的和web 形式的,识别人员、位置、组织、数量、主题、数据源、情绪、报价、图片和每秒都在推动全球社会的事件,GDELT 为全球提供了一个自由开放的计算平台。

GDELT 主要包含两大数据集: Event Database (事件数据库) 、 Global Knowledge Graph (GKG, 全球知识图谱),记录了从1969 年至今的新闻,并于每十五分钟更新一次数据。

二、研究内容

本次研究数据来自 gdelt 数据库,爬取 2022.01.01-2022.07.20 所有 export 和 mentions 表,从中提取俄乌 冲突相关数据,由此进行分析。主要分析内容如下:

  1. 基于BERT实现GDELT新闻事件数据中事件正文文本的情感分析
  2. 基于MySQL的本地数据库导入、查询和存储
  3. 基于JavaScript和echarts的数据可视化图表库对新闻事件数据进行多方面可视化
  4. 将可视化界面部署到服务器上以供其他用户通过网址查看
  5. 其他算法进行情感分析

三、项目实施方法设计

1、使用语言

前段静态页面: html 、 css 、 JavaScript 、 echarts

连接数据库页面:增加 php 连接 MySQL

数据处理: Pycharm+Python , Jupyter+Python

2、项目流程


 四、具体实现与测试

1、数据集下载

def get_data(url):# 获取urlfile_name = url.split("gdeltv2/")[1].split(".zip")[0]r = requests.get(url)temp_file=open("./temp.zip", "wb")temp_file.write(r.content)temp_file.close()try:my_zip=zipfile.ZipFile('./temp.zip','r')my_zip.extract(file_name,path="./data")my_zip.close()except Exception:print("%s not exist" % file_name)return None
def get_data_df(): #日期读取f=open("date.txt")date=[]time=[]for i in f.readlines():date.append(i.strip("\n"))f.close()f=open("time.txt")for i in f.readlines():time.append(i.strip("\n"))f.close()#地址整合url1 = "http://data.gdeltproject.org/gdeltv2/%s.export.CSV.zip"url2 = "http://data.gdeltproject.org/gdeltv2/%s.mentions.CSV.zip"for i in date:for j in time:str_real_time=i+jget_data(url1%str_real_time)get_data(url2%str_real_time)print("%s-complete"%i)

下载 2022.01.01-2022.07.20 的数据, 数据量大约 20GB ,下载完成后, export 表和 mentions 表混合放置,因此需要将表按月分类放置,代码如下:

import os
import shutil
for i in range(1,8):src_folder="./totaldata/20220"+str(i)tar_folder="./totaldata/20220"+str(i)files=os.listdir(src_folder)for file in files:src_path=src_folder+'/'+filefor file in files:# 将每个文件的完整路径拼接出来src_path = src_folder + '/' + fileif os.path.isfile(src_path):tar_path = tar_folder + '/' + file.split('.')[-2]print(tar_path)# 如果文件夹不存在则创建if not os.path.exists(tar_path):os.mkdir(tar_path)# 移动文件shutil.move(src_path, tar_path)

为了更方便处理,我们将 export 表的数据合并, mentions 表的数据合并,代码如下:

os.chdir(Folder_Path)
file_list=os.listdir()
for i in range(1,len(file_list)):df=pd.read_csv(file_list[i],sep='\t')df.to_csv(SaveFile_Path+"/"+SaveFile_Name,encoding="utf_8_sig",index=False,header=None,mode='a+')sys.stdout.write("\r已合并:%.2f%%"%float((i/len(file_list))*100))sys.stdout.flush()

2、数据集处理

(1)查看空字段数量并排序

is_null=df_01.isnull().sum().sort_values(ascending=False)
is_null[is_null>row*0.85]#筛选出空值数量大于85%的数据

(2)删除缺失率大于85%字段

drop_columns=['Actor2Type3Code','Actor1Type3Code','Actor2Religion2Code',
'Actor1Religion2Code','Actor2EthnicCode','Actor1EthnicCode',
'Actor2Religion1Code','Actor2KnownGroupCode','Actor1Religion1Code',
'Actor1KnownGroupCode','Actor2Type2Code','Actor1Type2Code']
df_01.drop(drop_columns,axis=1,inplace=True)

得到结果如下:

3、数据导入MySQL与分析 

(1)创建数据库

这里值得注意的是,很多字段在后续分析中没有用到,但还是导入进去了,为了和元数据保持一致性。

CREATE TABLE `export` (
`GLOBALEVENTID` int NOT NULL,
`SQLDATE` bigint,
`MonthYear` bigint,
`Year` bigint,
`FractionDate` bigint,
`Actor1Code` varchar(255),
`Actor1Name` varchar(255),
`Actor1CountryCode` varchar(255),
`Actor1Type1Code` varchar(255),
`Actor2Code` varchar(255),
`Actor2Name` varchar(255),
`Actor2CountryCode` varchar(255),
`Actor2Type1Code` varchar(255),
`IsRootEvent` varchar(255),
`EventCode` varchar(255),
`EventBaseCode` varchar(255),
`EventRootCode` varchar(255),
`QuadClass` int,
`GoldsteinScale` double,
`NumMentions` int,
`NumSources` int,
`NumArticles` int,
`AvgTone` double,
`Actor1Geo_Type` varchar(255),
`Actor1Geo_FullName` varchar(255),
`Actor1Geo_CountryCode` varchar(255),
`Actor1Geo_ADM1Code` varchar(255),
`Actor1Geo_ADM2Code` varchar(255),
`Actor1Geo_Lat` double,
`Actor1Geo_Long` double,
`Actor1Geo_FeatureID` varchar(255),
`Actor2Geo_Type` varchar(255),
`Actor2Geo_FullName` varchar(255),
`Actor2Geo_CountryCode` varchar(255),
`Actor2Geo_ADM1Code` varchar(255),
`Actor2Geo_ADM2Code` varchar(255),
`Actor2Geo_Lat` double,
`Actor2Geo_Long` double,
`Actor2Geo_FeatureID` varchar(255),
`ActionGeo_Type` varchar(255),
`ActionGeo_FullName` varchar(255),
`ActionGeo_CountryCode` varchar(255),
`ActionGeo_ADM1Code` varchar(255),
`ActionGeo_ADM2Code` varchar(255),
`ActionGeo_Lat` double,
`ActionGeo_Long` double,
`ActionGeo_FeatureID` varchar(255),
`DATEADDED` bigint,
`SOURCEURL` text,
PRIMARY KEY (`GLOBALEVENTID`)
);

(2)导入数据

LOAD DATA INFILE 'E:/term/code/mergedata/export/export_202201.csv' INTO TABLE
`export`
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n'
IGNORE 1 ROWS;

(3)年份处理和简单查询

DELETE
FROM rus_and_ukr
WHERE `MonthYear`<202201
SELECT COUNT(GLOBALEVENTID) FROM export -- 21504131
http://www.lryc.cn/news/503087.html

相关文章:

  • 【Linux系列】Linux 系统配置文件详解:`/etc/profile`、`~/.bashrc` 和 `~/.bash_profile`
  • uni-app实现小程序、H5图片轮播预览、双指缩放、双击放大、单击还原、滑动切换功能
  • 游戏引擎学习第45天
  • electron常用方法
  • 【Spark】Spark Join类型及Join实现方式
  • meta llama 大模型一个基础语言模型的集合
  • JAVA爬虫获取1688关键词接口
  • 操作系统——内存管理
  • android studio 模拟器不能联网?
  • CTF-WEB: 目录穿越与模板注入 [第一届国城杯 Ez_Gallery ] 赛后学习笔记
  • 数据结构6.4——归并排序
  • 【html 常用MIME类型列表】
  • Linux之vim编辑器
  • 【工具介绍】可以批量查看LableMe标注的图像文件信息~
  • 2024年山西省第十八届职业院校技能大赛 (高职组)“信息安全管理与评估”赛项规程
  • STM32完全学习——STemWin的移植小插曲
  • Java——IO流(下)
  • avue-crud 同时使用 column 与 group 的问题
  • 深入解析 Pytest 中的 conftest.py:测试配置与复用的利器
  • JAVA |日常开发中Websocket详解
  • Typora教程
  • 泛微E9常见API保姆级详解!!!!
  • UniApp配置使用原子化tailwindcss
  • 02. Docker:安装和操作
  • 【MySQL中多表查询和函数】
  • 加速科技精彩亮相ICCAD 2024
  • 免费下载 | 2024算网融合技术与产业白皮书
  • Ubuntu系统下部署大语言模型:Ollama和OpenWebUI实现各大模型的人工智能自由
  • 基于Mybatis,MybatisPlus实现数据库查询分页功能
  • 【razor】echo搭配relay功能分析