1. 数据集显示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


2. 代码结构分析

1. 文件头部与模块引入
from lxml import etree
import pandas as pd
import os
import jieba
from collections import Counter
from wordcloud import WordCloud
import matplotlib.pyplot as plt
  • 模块功能

    • lxml.etree:解析 HTML 文件。
    • pandas:存储和操作表格数据。
    • os:处理文件路径。
    • jieba:中文分词工具。
    • collections.Counter:统计词频。
    • wordcloud:生成词云。
    • matplotlib.pyplot:可视化工具。
  • 全局配置

    plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
    plt.rcParams['axes.unicode_minus'] = False
    
    • 设置字体和负号显示,确保在生成图表时支持中文和符号。

2. HTML 文件解析与评论提取
combined_df = pd.DataFrame()
  • 目标文件:指定了多个 HTML 文件作为数据源,文件路径存储在 file_paths 列表中。
  • 数据合并表:使用 pandas.DataFrame() 初始化一个空表,用于存储解析结果。
2.1 文件读取与解析
with open(file_path, 'r', encoding='utf-8') as file:
    html_content = file.read()
tree = etree.HTML(html_content)
  • 逐一读取文件内容,使用 lxml.etree.HTML 解析 HTML 结构。
2.2 信息提取
song_name = tree.xpath('//h1[@class="data__name_txt"]/text()')[0].strip()
language = tree.xpath('//*[@id="app"]//ul/li[@class="data_info__item_song"][2]/text()')[1].split(":")[-1].strip()
...
comments = tree.xpath('//p[@class="comment__text "]/span/text()')
  • 使用 XPath 表达式提取特定信息:
    • 歌曲详情:如歌曲名称、语种、流派、唱片公司、发行时间等。
    • 评论内容:所有评论存储在 comments 列表中。
2.3 数据组织与合并
data = {
    "歌曲名称": [song_name] * len(comments),
    ...
    "评论": comments,
    "文件名": [os.path.basename(file_path)] * len(comments)
}
df = pd.DataFrame(data)
combined_df = pd.concat([combined_df, df], ignore_index=True)
  • 将提取的数据组织成字典后转为 DataFrame
  • 通过 pd.concat 将每个文件的解析结果合并到 combined_df 中。
2.4 数据保存
output_file = "合并_comments.xlsx"
combined_df.to_excel(output_file, index=False, encoding='utf-8')
  • 将合并后的数据存储为 Excel 文件 合并_comments.xlsx,便于后续分析。

3. 数据分析与可视化
3.1 数据读取
df = pd.read_excel(file_path)
  • 从保存的 Excel 文件中读取评论数据和歌曲信息。
3.2 基本信息统计
song_info = df[["歌曲名称", "语种", "流派", "唱片公司", "发行时间"]].drop_duplicates()
print(song_info)
  • 显示每首歌曲的基本信息(去重)。
3.3 评论词频统计
comments = " ".join(df["评论"].dropna())
words = jieba.lcut(comments)
stop_words = {"的", "了", "是", ...}
filtered_words = [word for word in words if word not in stop_words and len(word) > 1]
word_counts = Counter(filtered_words)
print(word_counts.most_common(20))
  • 合并所有评论并使用 jieba.lcut 进行中文分词。
  • 去除停用词(常用无意义词)和长度为1的词,保留高频词并统计出现次数。
3.4 生成词云
wc = WordCloud(
    font_path='simhei.ttf',
    width=800,
    height=400,
    background_color="white"
)
wc.generate_from_frequencies(word_counts)
wc.to_file("周杰伦词云.png")
  • 通过 WordCloud 将词频数据可视化。
  • 保存生成的词云图片为 周杰伦词云.png
3.5 词云展示
plt.figure(figsize=(10, 6))
plt.imshow(wc, interpolation="bilinear")
plt.axis("off")
plt.title("青花瓷 评论词云")
plt.show()
  • 使用 matplotlib 展示生成的词云。

在这里插入图片描述
词频统计如下:

[('我们', 75), ('喜欢', 56), ('周杰伦', 50), ('首歌', 48), ('一个', 39), ('周董', 39), ('一路', 39), ('青春', 37), ('向北', 37), ('晴天', 36), ('青花瓷', 34), ('自己', 31), ('没有', 29), ('什么', 28), ('好听', 26), ('杰伦', 25), ('现在', 25), ('知道', 25), ('真的', 24), ('旋律', 24)]

在这里插入图片描述
在这里插入图片描述

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐