基于留学生实地调研的词频统计分析与词云可视化

Hi,大家好,我是半亩花海。本项目旨在通过解析 PDF 文档《留学生实地调研.pdf》,提取文本内容并进行词频统计和分析,生成热词柱状图词云图,以便直观展示调研报告中的关键词及其出现频率。


目录

一、项目准备

1. PDF 文本数据选择

2. 遮罩底图选择

3. 环境配置

4. 每次生成可能需要更改的部分

三、项目内容

1. PDF 文档解析和文本提取

2. 文本分词和词频统计

3. 词频分析与可视化

4. 生成词云图

三、结果展示

1. 热词统计分析柱状图

2. 留学生词云统计图

四、完整代码


一、项目准备

1. PDF 文本数据选择

我选择的 PDF 文档由 Excel 文档转换而来,包含 100 条被调研的留学生的访谈记录,如下所示:

初始的Excel文档部分文本数据如下: 

注意:

数据处理的重要性:在生成词云图和热词统计分析过程中,数据的清洗和处理非常重要,尤其是中文文本处理中的分词和停用词过滤。

2. 遮罩底图选择

以下 tjzy.png 是我使用 PPT 绘制的摩天轮“天津之眼”的大致轮廓图,以此作为后续使用的遮罩图。

3. 环境配置

本项目使用的主要工具和库包括:

  • pdfplumber用于解析 PDF 文档。
  • jieba用于中文文本分词。
  • WordCloud用于生成词云图。
  • numpymatplotlib用于数据处理和可视化。
  • PIL (即 Pillow):用于处理图像。

4. 每次生成可能需要更改的部分

每次需要基于同一个 PDF 文档再次生成词云图的时候,需要统一更改以下四个部分:


三、项目内容

1. PDF 文档解析和文本提取

使用 pdfplumber 库读取 PDF 文档,并逐页提取文本,保存到一个 txt 文件中。

import pdfplumber

# 用pdf文件解析器读取文件
with pdfplumber.open('留学生实地调研.pdf') as f:
    # 用for循环读取文件中的每一页
    for page in f.pages:
        text = page.extract_text()  # 提取每一页的文本
        txt_f = open(r'留学生实地调研3.txt', mode='a', encoding='utf-8')  # 创建txt文件
        txt_f.write(text)  # 写入txt文件

2. 文本分词和词频统计

使用 jieba 库对提取的文本进行分词,并统计各词语的出现频率。

import jieba

file = open('留学生实地调研3.txt', encoding='utf-8')
file = file.read()
# 使用jieba分词将文本切割成词语列表
txtlist = jieba.lcut(file)
# 将分词后的词语列表用空格连接成字符串
string = " ".join(txtlist)

# 初始化停用词字典和词频统计字典
stop_words = {}
counts = {}
total_words = len(txtlist)  # 计算总词数

# 统计词频和单字词频(作为停用词)
for txt in txtlist:
    if len(txt) == 1:
        stop_words[txt] = stop_words.get(txt, 0) + 1
    else:
        counts[txt] = counts.get(txt, 0) + 1

3. 词频分析与可视化

对词频数据进行排序,并输出前 10 个词语及其出现次数和频率。同时,使用 matplotlib 绘制热词柱状图。

import numpy as np
import matplotlib.pyplot as plt

# 对词频统计结果按出现次数排序
items = list(counts.items())
items.sort(key=lambda x: x[1], reverse=True)

# 输出前20个词语及其出现次数和出现频率
print("词语\t\t出现次数\t\t出现频率")
total_frequency = sum(count for word, count in items[:10])  # 前10个词语的总频率
for i in range(10):
    word, count = items[i]
    frequency = count / total_words * 100  # 计算词语出现频率
    relative_frequency = count / total_frequency * 100  # 计算词语相对频率
    print(f"{word}\t\t{count}\t\t{frequency:.2f}%\t\t{relative_frequency:.2f}%")

# 准备绘制柱状图的数据
y1 = []
labels = []
for i in range(1, 11):
    y1.append(items[i][1])  # 前10个词语的出现次数
    labels.append(items[i][0])  # 前10个词语的标签

# 绘制柱状图
width = 0.3
x = np.arange(len(y1))
a = [i for i in range(0, 10)]

plt.xticks(a, labels, rotation=30)
plt.bar(x=x, height=y1, width=width)
plt.title('留学生热词统计分析')
plt.savefig("留学生热词统计分析3.png")  # 保存柱状图
plt.show()
print("-------热词统计分析完成!-------")

4. 生成词云图

使用 WordCloud 库生成词云图,并导出为图像文件。在生成词云图时采用了特定的遮罩图像 tjzy.png遮罩图像的作用是控制词云图的形状,使其符合特定的视觉效果。使用 PIL 库加载遮罩图像,并将其传递给 WordCloud 对象,使生成的词云图在指定形状内填充。

from wordcloud import WordCloud
from PIL import Image

# 准备停用词列表
stoplist = []
item = list(stop_words.items())
for i in range(len(item)):
    txt, count = item[i]
    stoplist.append(txt)  # 将单字词语添加到停用词列表
setlist = set(stoplist)  # 转换为集合

# 加载所需的遮罩图像
mask = np.array(Image.open("tjzy.png"))

# 生成词云
wcd = WordCloud(width=1000, height=700, background_color='white', font_path='msyh.ttc', scale=15, stopwords=setlist, mask=mask)
wcd.generate(string)  # 根据文本生成词云
wcd.to_image()  # 转换为图像
print("-------热词词云生成完成!-------")

# 导出词云图像
wcd.to_file('留学生词云统计图3.png')

三、结果展示

1. 热词统计分析柱状图

此柱状图展示了前 10 个高频词语及其出现次数,便于直观了解调研报告中的重点词语。

2. 留学生词云统计图

此词云图展示了调研报告中的词语,以词语出现频率大小为依据,词频越高,词语显示越大。


四、完整代码

#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
@File    : 词云图.py
@IDE     : PyCharm
@Author  : 半亩花海
@Date    : 2024/05/21 16:31
"""
import pdfplumber
import jieba
from wordcloud import WordCloud
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 用pdf文件解析器读取文件
with pdfplumber.open('留学生实地调研.pdf') as f:
    # 用for循环读取文件中的每一页
    for page in f.pages:
        text = page.extract_text()  # 提取每一页的文本
        txt_f = open(r'留学生实地调研3.txt', mode='a', encoding='utf-8')  # 创建txt文件
        txt_f.write(text)  # 写入txt文件

# 打开并读取txt文件
file = open('留学生实地调研3.txt', encoding='utf-8')
file = file.read()
# 使用jieba分词将文本切割成词语列表
txtlist = jieba.lcut(file)
# 将分词后的词语列表用空格连接成字符串
string = " ".join(txtlist)

# 初始化停用词字典和词频统计字典
stop_words = {}
counts = {}
total_words = len(txtlist)  # 计算总词数

# 统计词频和单字词频(作为停用词)
for txt in txtlist:
    if len(txt) == 1:
        stop_words[txt] = stop_words.get(txt, 0) + 1
    else:
        counts[txt] = counts.get(txt, 0) + 1

# 对词频统计结果按出现次数排序
items = list(counts.items())
items.sort(key=lambda x: x[1], reverse=True)

# 输出前20个词语及其出现次数和出现频率
print("词语\t\t出现次数\t\t出现频率")
total_frequency = sum(count for word, count in items[:10])  # 前10个词语的总频率
for i in range(10):
    word, count = items[i]
    frequency = count / total_words * 100  # 计算词语出现频率
    relative_frequency = count / total_frequency * 100  # 计算词语相对频率
    print(f"{word}\t\t{count}\t\t{frequency:.2f}%\t\t{relative_frequency:.2f}%")

# 准备绘制柱状图的数据
y1 = []
labels = []
for i in range(1, 11):
    y1.append(items[i][1])  # 前10个词语的出现次数
    labels.append(items[i][0])  # 前10个词语的标签

# 绘制柱状图
width = 0.3
x = np.arange(len(y1))
a = [i for i in range(0, 10)]

plt.xticks(a, labels, rotation=30)
plt.bar(x=x, height=y1, width=width)
plt.title('留学生热词统计分析')
plt.savefig("留学生热词统计分析3.png")  # 保存柱状图
plt.show()
print("-------热词统计分析完成!-------")

# 准备停用词列表
stoplist = []
item = list(stop_words.items())
for i in range(len(item)):
    txt, count = item[i]
    stoplist.append(txt)  # 将单字词语添加到停用词列表
setlist = set(stoplist)  # 转换为集合

# 加载所需的遮罩图像
mask = np.array(Image.open("tjzy.png"))

# 生成词云
wcd = WordCloud(width=1000, height=700, background_color='white', font_path='msyh.ttc', scale=15, stopwords=setlist, mask=mask)
wcd.generate(string)  # 根据文本生成词云
wcd.to_image()  # 转换为图像
print("-------热词词云生成完成!-------")

# 导出词云图像
wcd.to_file('留学生词云统计图3.png')
  • 18
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 中文词频统计是指对一段中文文本中出现的词语进行计数,以了解文本中哪些词语出现频率较高。而利用词云图进行数据可视化,则是将词频统计结果以图形化的方式呈现,使得数据更加直观易懂。 词云图是一种基于词频统计结果的可视化方式,它将出现频率较高的词语以较大的字体大小呈现,而出现频率较低的词语则以较小的字体大小呈现。通过词云图,我们可以一目了然地看出文本中哪些词语出现频率较高,从而更好地理解文本的主题和内容。 中文词频统计和词云图的应用非常广泛,可以用于文本分析、舆情监测、市场调研等领域。在实际应用中,我们可以利用Python等编程语言来实现中文词频统计和词云图的生成,从而更加高效地处理大量文本数据。 ### 回答2: 中文词频统计是指对中文文本进行分析,统计出每个词在文本中出现的次数,并通过这些数据,对文本内容进行分析、总结和简化。这种技术可用于对中文文本中的特定文本信息进行挖掘,同时也可以作为一种帮助部署自然语言处理技术的方法。 在进行中文词频统计的同时,可利用词云图对统计出的数据进行可视化词云图是通过对文本中的高频词汇进行可视展示的一种方法,它将不同的词汇按照出现的频率大小进行排列,并根据其出现的频率大小和重要性来调整不同单词的大小、颜色等属性。 利用词云图进行数据可视化能够帮助用户更直观地理解文本数据,理清数据之间的关系和分析出数据的重点。通过数据可视化,用户可以更容易地捕捉到数据的趋势、优势和劣势等重要信息,从而拥有更客观、全面的数据视角。 在中文词频统计和利用词云图进行数据可视化的过程中,需要注意选择合适的分析工具和方法,并根据具体需求和目的进行数据清洗、处理和优化,以提高数据分析的准确性和有效性。 总的来说,中文词频统计和利用词云图进行数据可视化是一种有效的数据分析和展示方法,能够为用户提供直观、清晰和全面的数据分析结果,同时也是现代企业和研究机构进行数据分析和决策制定的重要工具之一。 ### 回答3: 随着信息技术的发展,数据可视化在日常生活和商业应用中变得越来越重要。其中,数据可视化的一种形式是词云图词云图是通过计算每个词汇出现的频率,并将其映射到图形中的字体大小来呈现数据的可视化形式。中文词频统计并利用词云图进行数据可视化是一种有效的方式,能够快速、直观地了解文本的特征和重点。 首先要做的是获取要进行词频统计的文本。可以使用Python等程序语言完成文本处理过程。接着,通过利用程序语言中的相关工具进行分词处理,得到一个个单独的词汇。然后,通过统计每个词汇出现的频率,得到词频数据。最后,利用词云生成器将数据进行可视化呈现,得到一个独特的词云图。 在中文词频统计过程中,需要注意的是中文分词的问题。中文分词可以使用很多开源的分词器,例如jieba分词器。此外,在数据可视化时,还需要考虑词云图的字体、颜色、背景色等方面的调整,来使得生成的图形更加合适和美观。 中文词云图在许多领域都有广泛的应用。例如,在媒体方面,可以使用词云图来分析新闻报道的重点和关键词;在市场分析方面,可以利用词云图来了解顾客体验和市场需求;在学术研究方面,可以使用词云图来分析论文关键词和学科研究热点等。 总之,中文词频统计并利用词云图进行数据可视化是一种很有价值的数据分析手段。只要对数据的特征进行合理的统计和可视化,可以从中获得很多有用的信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值