【Python】数据分析与可视化——文本数据分析

发布于:2024-07-05 ⋅ 阅读:(18) ⋅ 点赞:(0)

文本数据分析是指对文本数据进行收集、清理、加工和分析的过程,旨在从大量的文本信息中抽取有用的信息和知识

1. 数据收集

使用如Python中的BeautifulSoup库进行网络爬虫,寻找并下载网页上的文本内容

2. 数据清洗

在收集到文本数据后,通常需要进行数据清洗,以去除文本中的噪声数据,如去除特殊字符、标点符号、HTML标签等

3. 数据处理

分词

将文本分割成一个个独立的词语

 # 文本预处理:分词、去除标点和停用词
 seg_list = jieba.cut(text, cut_all=False)
 filtered_words = [word for word in seg_list if word not in stopword_list an 
 word.strip().isalnum()]
 filtered_text = ' '.join(filtered_words)

去除停用词

# 加载停用词列表
with open("./stopwords.txt", encoding='gb18030') as f:
    stopword_list = set(line.strip() for line in f.readlines())

常见的停用词列表如下:

中文停用词表; 哈工大停用词表; 百度停用词表; 机器智能实验室停用词库

链接:https://pan.baidu.com/s/1wb3CdvL-OOWsveKzfkG8og?pwd=0oq7 提取码:0oq7

词向量转化

将文本中的词语转换成数值向量表示,常见的方法有词袋模型、TF-IDF和Word2Vec等。

TF-IDF:
from sklearn.feature_extraction.text import TfidfVectorizer
# 初始化TfidfVectorizer  
vectorizer = TfidfVectorizer()  
  
# 使用fit_transform方法将文本数据转换为TF-IDF矩阵  
X = vectorizer.fit_transform(documents) 

# 输出TF-IDF矩阵
print("TF-IDF矩阵:\n", X.toarray())
词袋模型
from sklearn.feature_extraction.text import CountVectorizer
# 初始化CountVectorizer  
vectorizer = CountVectorizer()  
  
# 使用fit_transform方法将文本数据转换为词频矩阵  
X = vectorizer.fit_transform(documents) 

# 输出词频矩阵  
print("词频矩阵:\n", X.toarray())  
Word2Vec
  • 提出者:由Google公司于2013年提出。
  • 架构
    • CBOW(Continuous Bag of Words):通过上下文预测目标词语。
    • Skip-gram:通过目标词语预测上下文。
  • 特点:能够生成高维稠密的词向量,更好地保留词语的语义信息

文本特征提取

从文本中提取出有用的特征,例如提取关键词词频,绘制词云,生成面板数据,计算余弦相似度等

文本挖掘统计词频完整代码如下所示:

import os
import jieba
import collections
import pandas as pd
import re

# 设置文件夹路径
base_dir = 'processed_data'

# 用于存储所有文件的词频
word_freq = collections.Counter()

def is_valid_word(word):
    # 排除空格、单个字符、数字等
    if len(word) == 1 or word.isdigit() or not re.match(r'[\u4e00-\u9fa5]+', word):  # 只保留中文字符
        return False
    return True

# 遍历文件夹和文件
for root, dirs, files in os.walk(base_dir):
    for file in files:
        if file.endswith('.txt'):
            file_path = os.path.join(root, file)
            with open(file_path, 'r', encoding='utf-8') as f:
                content = f.read()
                # 使用jieba进行分词
                words = jieba.cut(content, cut_all=False)
                # 筛选有效的词语并更新全局词频计数器
                for word in words:
                    if is_valid_word(word):
                        word_freq.update([word])

                    # 对词频进行排序,这里选择前1000个高频词
top_words = word_freq.most_common(1000)

# 将高频词及其词频转换为DataFrame
df = pd.DataFrame(top_words, columns=['Word', 'Frequency'])

# 写入Excel文件
df.to_excel('words.xlsx', index=False)


网站公告

今日签到

点亮在社区的每一天
去签到