目的

  1. 掌握文本与文档可视化:使用特定软件或编程语言(如Python, R等)来实现文本和文档的可视化。
  2. 能够进行日志数据可视化操作:日志数据通常包含大量的时间戳信息,对其进行可视化有助于发现系统运行的趋势和异常。
  3. 了解社交网络可视化:社交网络数据通常表现为用户之间的关系网络,通过可视化可以清晰地展示用户间的交互模式和社区结构。常用的工具有Gephi、NetworkX等。

原理详解

  1. 关键词可视化

    • 标签云:是一种流行的关键词展示方式,通过字体大小和颜色的变化来反映关键词的重要性。
    • 文档散:不同于简单的标签云,文档散考虑了词汇之间的关系,使得关键词的布局更有意义。
  2. 时序文本可视化

    • 这种类型的可视化特别适合于展示随时间变化的文本数据,如新闻报道、社交媒体帖子等。
    • 主题河流图文本流图都是用来表示随着时间推移,话题或情绪变化的有效方法。
  3. 基于图的文本关系可视化

    • 词语树短语网络可以帮助我们理解文本中词汇之间的关系,例如同义词、反义词、上下位关系等。
    • 在短语网络中,节点代表词汇或短语,而带有方向的连线则表示这些词汇或短语之间的关系。
  4. 文档间关系可视化

    • 星系视图是一种有效的展示大量文档之间相似度的方法,通过将文档投影到二维空间中,可以直观地看到文档群组的形成。

建议

  • 实践操作:选择合适的工具(如D3.js、Tableau、Gephi等)进行实际操作,尝试对给定的数据集(如新闻文章、微博帖子等)进行上述各种类型的可视化。
  • 案例分析:挑选几个典型的案例,比如分析某个热门话题在社交媒体上的传播路径,或者研究一段时期内公众对某一事件的态度变化。
  • 反思总结:在完成每个可视化任务后,思考其背后的设计理念和技术实现,以及这种表现形式的优点和局限性。

标签云:用于汇总生成的标签,一般是独立词汇

运行前的准备

  • 安装依赖库:如果您还没有安装pytagcloud库,可以通过pip安装:pip install pytagcloud

国内阿里云镜像
安装pygame:



pip install pygame -i https://mirrors.aliyun.com/pypi/simple/

安装pytagcloud:


pip install pytagcloud -i https://mirrors.aliyun.com/pypi/simple/
  • 字体文件:确保您的系统中安装了msyh(微软雅黑)字体,否则可能需要指定其他可用的字体。

代码示例

为了确保代码的可读性和健壮性,以下是稍微调整后的版本:

from pytagcloud import create_tag_image, make_tags
import re
import time
from collections import Counter

# 去除内容中的非法字符
def validate_content(content):
    rstr = r"[\/\\\:\*\?\"\<\>\|\.\*\+\-\(\)\"\'\(\)\!\?\“\”\,\。\;\:\{\}\=\%\*\~\·]"
    new_content = re.sub(rstr, "", content)
    return new_content

if __name__ == '__main__':
    # 文件路径
    file_path = 'D:/edge/shuju/Lib/site-packages/pytagcloud/fonts/guzhai_tag.txt'
    
    # 读取文件内容
    with open(file_path, 'r', encoding='UTF-8') as file:
        data = file.read().split('\r\n')
    
    # 处理内容,生成关键词列表
    words = []
    for line in data:
        cleaned_line = validate_content(line)
        words.extend(cleaned_line.split())
    
    # 统计关键词频次
    word_counts = Counter(words).most_common()
    
    # 生成标签云
    tags = make_tags(word_counts, maxsize=65)
    current_time = time.strftime('%Y%m%d%H%M%S', time.localtime())
    image_filename = f'tagcloud_{current_time}.png'
    
    # 创建标签云图片
    create_tag_image(tags, image_filename, size=(1000, 800), fontname='msyh', background=(255, 255, 255))
    
    print(f'标签云已保存至 {image_filename}')
  1. 文件路径:确保文件路径正确无误,特别是当您的工作目录不是/Users/teacher/Jupyter/时,需要调整文件路径以匹配实际的文件位置。

  2. 编码:您的代码中指定了encoding='UTF-8',这是正确的做法,因为很多中文文本文件都使用UTF-8编码。如果遇到乱码问题,请检查文本文件的实际编码。

  3. 正则表达式:您使用的正则表达式rstr = r"[\/\\\:\*\?\"\<\>\|\.\*\+\-\(\)\"\'\(\)\!\?\“\”\,\。\;\:\{\}\{\}\=\%\*\~\·]"用于去除一些特殊字符,这对于生成标签云来说是有必要的,但请确保没有删除掉重要的词汇部分。

  4. Counter对象Counter对象会自动统计列表中元素出现的次数,这里用于计算每个单词的频率。

  5. make_tags函数:这个函数将关键词及其出现次数转换成pytagcloud所需的格式,同时可以设置最大字体大小。

  6. create_tag_image函数:此函数负责生成标签云图片,您可以指定图片的尺寸、字体名称、背景颜色等参数。

报错

错误表明pytagcloud库无法识别您指定的字体名称。pytagcloud支持的字体名称是有限的,您需要确保使用的是受支持的字体之一。

解决方法
在这里面修改Lib\site-packages\pytagcloud\fonts

D:\edge\shuju\Lib\site-packages\pytagcloud\fonts
将下载字体拷贝魅力标签云,奇幻词云图 —— 数据可视化新境界-LMLPHP
在fonts.json添加

{
"name": "msyh",
"ttf":"msyh.ttf",
"web":"none"
},

在这里插入图片描述

在上一级可以看到,http://localhost:8888/view/tagcloud_20241107102044.png
魅力标签云,奇幻词云图 —— 数据可视化新境界-LMLPHP
国内镜像
pip install jieba -i https://mirrors.aliyun.com/pypi/simple/
pip install wordcloud -i https://mirrors.aliyun.com/pypi/simple/

词云:对本文中出现频率较高的词,视觉上突出显示

import jieba
import matplotlib.pyplot as plt
from wordcloud import WordCloud
import os

# 设置字体路径
fontpath = 'D:/edge/shuju/Lib/site-packages/pytagcloud/fonts/msyh.ttf'

# 验证字体文件路径
if not os.path.exists(fontpath):
    print(f"字体文件不存在: {fontpath}")
    fontpath = None  # 使用默认字体
else:
    print(f"字体文件存在: {fontpath}")

# 读取文本文件
file_path = 'D:/edge/shuju/Lib/site-packages/pytagcloud/fonts/guzhai_word.txt'
with open(file_path, 'r', encoding='UTF-8') as f:
    text = f.read()

# 过滤词汇
removes = ['这里', '那里', '有着', '一般', '就是', '可以', '想要', '人们', '看着', '不要', '更是', '千户']

# 分词
words = jieba.lcut(text)
filtered_words = [word for word in words if word not in removes]
cuted = ' '.join(filtered_words)

# 绘制词云
wc = WordCloud(
    font_path=fontpath,  # 设置字体
    background_color="white",  # 背景颜色
    max_words=1000,  # 词云显示的最大词数
    max_font_size=500,  # 字体最大值
    min_font_size=20,  # 字体最小值
    random_state=42,  # 随机数
    collocations=False,  # 避免重复单词
    width=1600,  # 图像宽度
    height=1200,  # 图像高度
    margin=10  # 字间距
)
wc.generate(cuted)  # 生成词云

# 显示词云
plt.figure(figsize=(15, 9))  # 通过这里可以放大或缩小
plt.imshow(wc, interpolation='bilinear', vmax=1000)  # 插值模式,双线性插值
plt.axis("off")  # 隐藏坐标
plt.savefig("WordCloud.jpg")  # 保存词云图片
plt.show()  # 显示词云

版本错误借鉴
魅力标签云,奇幻词云图 —— 数据可视化新境界-LMLPHP

总结

向前冲!!!关键词可视化主要分为两大类:标签云和文档散。标签云通过汇总生成的独立词汇来展示关键词,而文档散则利用词汇库中的结构关系布局关键词,采用具有上下语义关系的词语来展示。

11-10 16:11