大数据可视化技术-实验八:文本数据可视化

实验通过Matplotlib和pyecharts实现词云图、主题河流图和关系图,以展示文本数据的特性与分析。
摘要由CSDN通过智能技术生成

大数据可视化技术

实验八:文本数据可视化

一、实验名称 

文本数据可视化

二、实验目的

通过该实验的实践,要求学生可以理解文本数据与常规数据不同的特性,掌握Matplotlib和pyecharts的使用过程,能够熟练绘制常见的适合展示文本数据的图表。

三、实验原理

文本数据不同于传统数据库中的数据,它具有自己的特点。

半结构化:文本数据既不是完全无结构的也不是完全结构化的。例如文本可能包含结构字段,如标题、作者、出版日期、长度、分类等,也可能包含大量的非结构化的数据,如摘要和内容。

高维:文本向量的维数一般都可以高达上万维,一般的数据挖掘、数据检索的方法由于计算量过大或代价高昂而不具有可行性。

高数据量:一般的文本库中都会存在最少数千个文本样本,对这些文本进行预处理、编码、挖掘等处理的工作量是非常庞大的,因而手工方法一般是不可行的。

语义性:文本数据中存在着一词多义、多词一义,在时间和空间上的上下文相关等情况。

四、实验步骤

1 词云图

输入以下代码:

from pyecharts import WordCloud
#引入词云库
import pandas as pd

"""
name = [
    'Sam S Club', 'Macys', 'Amy Schumer', 'Jurassic World', 'Charter Communications',
    'Chick Fil A', 'Planet Fitness', 'Pitch Perfect', 'Express', 'Home', 'Johnny Depp',
    'Lena Dunham', 'Lewis Hamilton', 'KXAN', 'Mary Ellen Mark', 'Farrah Abraham',
    'Rita Ora', 'Serena Williams', 'NCAA baseball tournament', 'Point Break']
value = [
    10000, 6181, 4386, 4055, 2467, 2244, 1898, 1484, 1112,
    965, 847, 582, 555, 550, 462, 366, 360, 282, 273, 265]
"""
#上面代码是示例数据,在注释中,对程序没有影响
post_data = pd.read_csv('/home/ubuntu/post_data.csv') #读取数据
wordcloud = WordCloud(width=1300, height=620) #设置词云图片的宽高
#wordcloud.add("", name, value, word_size_range=[20, 100]) #设置词显示的大小范围
post_data2=post_data.groupby(by=['category']).agg({'views':sum}).reset_index() #数据分类,聚合,然后重新排序
#print(post_data2.info())
wordcloud.add("", post_data2['category'], post_data2['views'], word_size_range=[20, 100]) #创建词云
wordcloud.render(path="./1.html")#生成html文件,在该python同级目录下

输出结果:

2 主题河流

输入以下代码:

from pyecharts import ThemeRiver
#引入主题河流图

#准备数据
data = [
    ['2015/11/08', 10, '分支1'], ['2015/11/09', 15, '分支1'], ['2015/11/10', 35, '分支1'],
    ['2015/11/14', 7, '分支1'], ['2015/11/15', 2, '分支1'], ['2015/11/16', 17, '分支1'],
    ['2015/11/17', 33, '分支1'], ['2015/11/18', 40, '分支1'], ['2015/11/19', 32, '分支1'],
    ['2015/11/20', 26, '分支1'], ['2015/11/21', 35, '分支1'], ['2015/11/22', 40, '分支1'],
    ['2015/11/23', 32, '分支1'], ['2015/11/24', 26, '分支1'], ['2015/11/25', 22, '分支1'],
    ['2015/11/08', 35, '分支2'], ['2015/11/09', 36, '分支2'], ['2015/11/10', 37, '分支2'],
    ['2015/11/11', 22, '分支2'], ['2015/11/12', 24, '分支2'], ['2015/11/13', 26, '分支2'],
    ['2015/11/14', 34, '分支2'], ['2015/11/15', 21, '分支2'], ['2015/11/16', 18, '分支2'],
    ['2015/11/17', 45, '分支2'], ['2015/11/18', 32, '分支2'], ['2015/11/19', 35, '分支2'],
    ['2015/11/20', 30, '分支2'], ['2015/11/21', 28, '分支2'], ['2015/11/22', 27, '分支2'],
    ['2015/11/23', 26, '分支2'], ['2015/11/24', 15, '分支2'], ['2015/11/25', 30, '分支2'],
    ['2015/11/26', 35, '分支2'], ['2015/11/27', 42, '分支2'], ['2015/11/28', 42, '分支2'],
    ['2015/11/08', 21, '分支3'], ['2015/11/09', 25, '分支3'], ['2015/11/10', 27, '分支3'],
    ['2015/11/11', 23, '分支3'], ['2015/11/12', 24, '分支3'], ['2015/11/13', 21, '分支3'],
    ['2015/11/14', 35, '分支3'], ['2015/11/15', 39, '分支3'], ['2015/11/16', 40, '分支3'],
    ['2015/11/17', 36, '分支3'], ['2015/11/18', 33, '分支3'], ['2015/11/19', 43, '分支3'],
    ['2015/11/20', 40, '分支3'], ['2015/11/21', 34, '分支3'], ['2015/11/22', 28, '分支3'],
    ['2015/11/14', 7, '分支4'], ['2015/11/15', 2, '分支4'], ['2015/11/16', 17, '分支4'],
    ['2015/11/17', 33, '分支4'], ['2015/11/18', 40, '分支4'], ['2015/11/19', 32, '分支4'],
    ['2015/11/20', 26, '分支4'], ['2015/11/21', 35, '分支4'], ['2015/11/22', 40, '分支4'],
    ['2015/11/23', 32, '分支4'], ['2015/11/24', 26, '分支4'], ['2015/11/25', 22, '分支4'],
    ['2015/11/26', 16, '分支4'], ['2015/11/27', 22, '分支4'], ['2015/11/28', 10, '分支4'],
    ['2015/11/08', 10, '分支5'], ['2015/11/09', 15, '分支5'], ['2015/11/10', 35, '分支5'],
    ['2015/11/11', 38, '分支5'], ['2015/11/12', 22, '分支5'], ['2015/11/13', 16, '分支5'],
    ['2015/11/14', 7, '分支5'], ['2015/11/15', 2, '分支5'], ['2015/11/16', 17, '分支5'],
    ['2015/11/17', 33, '分支5'], ['2015/11/18', 40, '分支5'], ['2015/11/19', 32, '分支5'],
    ['2015/11/20', 26, '分支5'], ['2015/11/21', 35, '分支5'], ['2015/11/22', 4, '分支5'],
    ['2015/11/23', 32, '分支5'], ['2015/11/24', 26, '分支5'], ['2015/11/25', 22, '分支5'],
    ['2015/11/26', 16, '分支5'], ['2015/11/27', 22, '分支5'], ['2015/11/28', 10, '分支5'],
    ['2015/11/08', 10, '分支6'], ['2015/11/09', 15, '分支6'], ['2015/11/10', 35, '分支6'],
    ['2015/11/11', 38, '分支6'], ['2015/11/12', 22, '分支6'], ['2015/11/13', 16, '分支6'],
    ['2015/11/14', 7, '分支6'], ['2015/11/15', 2, '分支6'], ['2015/11/16', 17, '分支6'],
    ['2015/11/17', 33, '分支6'], ['2015/11/18', 4, '分支6'], ['2015/11/19', 32, '分支6'],
    ['2015/11/20', 26, '分支6'], ['2015/11/21', 35, '分支6'], ['2015/11/22', 40, '分支6'],
    ['2015/11/23', 32, '分支6'], ['2015/11/24', 26, '分支6'], ['2015/11/25', 22, '分支6']
]
colors_list=['#FFA07A','#32CD32','#4169E1','#FAA460','#F0E68C','#8c564b','#e377c2','#7f7f7f','#bcbd22','#17becf']#备用颜色列表
tr = ThemeRiver("主题河流图示例图") #创建主题河流图
tr.add(['分支1', '分支2', '分支3', '分支4', '分支5', '分支6'], data, is_label_show=False,label_color=colors_list) #添加数据
tr.render(path="./2.html")#生成html,在该python文件的同级目录下

输出结果:

3 关系图

输入以下代码:

from pyecharts import Graph
import os
#引入json处理库
import json

#读取weibo-2.json,以utf-8的形式
with open(os.path.join("/home/ubuntu", "weibo-2.json"), "r", encoding="utf-8") as f:
    j = json.load(f) #解析json文件
    #print(j)
    nodes, links, categories, cont, mid, userl = j #将json数据解压赋值给左边的便利
    #print(mid)
graph = Graph("微博转发关系图", width=1200, height=600) #创建图,设置宽高
graph.add(
    "",
    nodes,
    links,
    categories,
    label_pos="right",#标签位置
    graph_repulsion=50,#节点之间的斥力因子。默认为 50,值越大则斥力越大
    is_legend_show=False,#不展示图例
    line_curve=0.2,#线的曲度
    label_text_color=None,#不设置标签字体颜色
)
graph.render(path="./3.html")#生成html,在该python文件同级目录下

输出结果:

五、实验总结

在实验中,通过实践练习,提高学生使用Matplotlib和pyecharts进行文本数据可视化的熟练程度,总结适合展示文本数据的图表,能够解释文本数据所包含的实际意义。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值