集团网站设计开发,赣州人才网最新招聘信息网,开发财务软件需要多少钱,搜索引擎营销一、项目概述
本项目利用 Python 对 Bilibili #xff08;哔哩哔哩#xff09;平台上的视频评论数据进行爬取、清洗和分析#xff0c;并通过可视化展示数据的主要特征。我们通过以下几个步骤实现了这一过程#xff1a;
数据爬取#xff1a;使用 Bilibili 提供的 API 获取…一、项目概述
本项目利用 Python 对 Bilibili 哔哩哔哩平台上的视频评论数据进行爬取、清洗和分析并通过可视化展示数据的主要特征。我们通过以下几个步骤实现了这一过程
数据爬取使用 Bilibili 提供的 API 获取指定视频的评论数据。数据清洗对评论内容进行文本预处理清除无关信息并对 IP 地址进行地区解析。数据分析对评论内容、点赞数等信息进行统计分析挖掘出有意义的趋势。数据可视化使用 pyecharts 库生成词云图、柱状图、折线图等多种图表展示评论的分布与趋势。
本文将详细介绍每一步的实现过程以及如何利用 Python 工具处理和分析海量的网络评论数据。
二、数据爬取
首先我们使用 Bilibili 提供的 API 接口来获取视频的评论数据。Bilibili 的 API 支持根据视频 IDoid、页码pn等参数获取评论信息。我们通过构造请求 URL 发送 HTTP 请求来抓取数据。
以下是爬虫代码的核心部分
import requests
import csv
import time
import random
from tqdm import tqdm# 设置请求头
header {Cookie: 你的 Cookie 值,User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36
}# 视频 ID 列表
list_id [898762590]# 数据爬取过程
for i in tqdm(list_id):rows []for p in tqdm(range(342, 801)):try:html requests.get(url, headersheader)data html.json()# 提取评论数据for reply in data[data][replies]:username reply[member][uname]comment reply[content][message]ctime trans_date(reply[ctime])# 保存数据到 CSVwith open(fbilibili_comments_{i}.csv, a, newline, encodingutf-8) as file:writer csv.writer(file)if file.tell() 0:writer.writerow([Username, Comment, Timestamp, Like Count, IP Location])writer.writerows(rows)在此代码中我们指定了视频的 ID 和页码范围342 到 801并通过循环逐页爬取评论。每一条评论数据包括用户名、评论内容、时间戳、点赞数和 IP 地址。
三、数据清洗
数据爬取完成后我们对获取的评论数据进行清洗。主要的清洗任务包括
去除无关内容移除 URL、标点符号、特殊字符等。分词与停用词过滤使用 jieba 对中文评论进行分词并过滤掉无意义的停用词。IP 地址地区解析对 IP 地址中的地理位置进行解析将其统一成省份、市区等格式。时间格式转换将评论时间戳转换为标准的时间格式便于后续的时间序列分析。
数据清洗的核心代码如下
import re
import jieba
from zhon.hanzi import punctuation as zh_punctuationdef clean_text(text):# 去除 URL 和特殊字符text re.sub(rhttp\S, , text)text re.sub(f[{zh_punctuation}], , text) # 去除中文标点text re.sub(r[.,!?], , text) # 去除英文标点text re.sub(r[^a-zA-Z0-9\u4e00-\u9fa5\s], , text) # 保留字母、数字和中文text .join(text.split()) # 去除多余的空格return text# 停用词处理
def load_stopwords(filepath):with open(filepath, r, encodinggbk) as f:stopwords f.read().splitlines()return stopwords# 文本预处理
def preprocess_text(text, stopwords):words jieba.cut(text)return [word for word in words if word not in stopwords and len(word) 1]df[Comment] df[Comment].apply(clean_text)
stopwords load_stopwords(./stop_word.txt)
df[Cleaned_Comment] df[Comment].apply(lambda x: preprocess_text(x, stopwords))四、数据分析与可视化
1. 准备工作
在开始之前确保你已经安装了所需的 Python 库并且有一个包含 Bilibili 评论数据的 CSV 文件。我们将使用以下库
pandas用于数据处理和分析。pyecharts用于生成图表和大屏展示。
首先安装这些库
pip install pandas pyecharts2. 数据准备
假设我们已经获取到 Bilibili 的评论数据并将其保存为 data2.csv。数据的主要字段包括
Timestamp评论的时间戳。Cleaned_Comment清洗后的评论内容存储为 Python 列表格式。Like Count评论的点赞数。IP Location评论者的 IP 地址用于分析地理分布。
数据格式如下所示
TimestampCleaned_CommentLike CountIP Location2022-01-01 12:00:00[‘word1’, ‘word2’, ‘word3’]5北京市2022-01-01 12:05:00[‘word4’, ‘word5’, ‘word2’]10上海市…………
3. 数据处理与分析
3.1 处理评论文本与词频分析
为了从评论中提取出有用的信息我们将清洗后的评论文本展开并统计每个词语的出现频率以便生成词云和柱状图。
import pandas as pd
from collections import Counter# 读取 CSV 文件
df pd.read_csv(data2.csv)# 将 Cleaned_Comment 列转换为 Python 列表
df[Cleaned_Comment] df[Cleaned_Comment].apply(eval)# 展平所有评论词语
all_words [word for comment in df[Cleaned_Comment] for word in comment]# 统计词频
word_counts Counter(all_words)# 转换为词云输入格式
wordcloud_data [(word, count) for word, count in word_counts.items()]3.2 时间处理与按时间间隔统计
我们将时间戳转换为 datetime 格式并按天或按15天的时间间隔统计评论数量和点赞数的变化。
# 转换时间戳为 datetime 格式
df[Timestamp] pd.to_datetime(df[Timestamp])# 筛选出2022年数据
df_2022 df[(df[Timestamp] 2022-01-01) (df[Timestamp] 2023-01-01)]# 按15天的时间间隔统计评论数量
comment_count_by_15days df_2022.resample(15D, onTimestamp).size().reset_index(nameComment Count)
x_data_comment comment_count_by_15days[Timestamp].dt.strftime(%Y-%m-%d).tolist()
y_data_comment comment_count_by_15days[Comment Count].tolist()# 按15天的时间间隔统计点赞数量
like_count_by_15days df_2022.resample(15D, onTimestamp).sum().reset_index()
x_data_like like_count_by_15days[Timestamp].dt.strftime(%Y-%m-%d).tolist()
y_data_like like_count_by_15days[Like Count].tolist()3.3 统计 IP 地理分布
我们还可以统计评论的 IP 地址分布了解用户的地理位置。
# 统计各省份的 IP 地址数量
province_ip_count df[IP Location].value_counts().reset_index()
province_ip_count.columns [province, ip_count]4. 使用 pyecharts 创建图表
接下来我们将使用 pyecharts 库来生成各种类型的图表包括词云图、柱状图、折线图和地图。
4.1 生成词云图
词云图展示了评论中最常出现的词语直观地呈现了评论内容的主要话题。
from pyecharts.charts import WordCloud
from pyecharts import options as optswordcloud WordCloud(init_optsopts.InitOpts(width800px, height600px))
wordcloud.add(, wordcloud_data, word_size_range[20, 100])
wordcloud.set_global_opts(title_optsopts.TitleOpts(title评论词云图))
wordcloud.render(wordcloud.html)4.2 生成评论和点赞量变化折线图
折线图可以帮助我们观察评论和点赞数量的时间变化趋势。
from pyecharts.charts import Lineline_comment (Line().add_xaxis(x_data_comment).add_yaxis(2022年评论量每15天变化, y_data_comment).set_global_opts(title_optsopts.TitleOpts(title2022年评论量变化))
)line_like (Line().add_xaxis(x_data_like).add_yaxis(2022年点赞量每15天变化, y_data_like).set_global_opts(title_optsopts.TitleOpts(title2022年点赞量变化))
)line_comment.render(comment_change.html)
line_like.render(like_change.html)4.3 生成地理分布地图
我们使用地图展示 IP 地址的地理分布了解用户的分布情况。
from pyecharts.charts import Mapmap_chart (Map().add(IP 数量, [list(z) for z in zip(province_ip_count[province], province_ip_count[ip_count])], china).set_global_opts(title_optsopts.TitleOpts(titleIP 地址分布))
)
map_chart.render(ip_location_map.html)4.4 创建时间轮播图
时间轮播图可以展示不同年份和月份的评论和点赞数据。通过设置 pyecharts 中的 Timeline可以制作动态展示的效果。
from pyecharts.charts import Timeline, Bartimeline Timeline()for year in df[Year].unique():df_year df[df[Year] year]bar (Bar().add_xaxis(df_year[Month].astype(str).tolist()).add_yaxis(每月评论数, df_year[Comment Count].tolist()).set_global_opts(title_optsopts.TitleOpts(titlef{year}年每月评论数)))timeline.add(bar, f{year}年)timeline.render(timeline.html)5. 构建大屏展示
最后我们将这些图表整合到一个交互式的大屏页面中。通过 pyecharts 的 Page 类可以将多个图表组合到一个页面生成一个动态大屏。
from pyecharts.components import Table
from pyecharts.charts import Page# 创建表格
table Table()
headers [基于 Python 的 Bilibili 评论分析大屏]
rows []
table.add(headersheaders, rowsrows)# 创建页面
page Page(layoutPage.DraggablePageLayout)page.add(table,wordcloud,line_comment,line_like,map_chart,timeline
)# 渲染大屏页面
page.render(bilibili_comment_analysis.html)
print(大屏生成完毕bilibili_comment_analysis.html)6. 结果展示
执行完上述代码后你将得到一个包含以下内容的交互式大屏
评论词云图展示评论中最常见的词汇。时间折线图展示评论和点赞数的时间变化。地理分布图展示评论者的地理位置分布。时间轮播图展示不同年份和月份的评论和点赞数据。 五、总结
本项目展示了如何利用 Python 从 Bilibili 获取评论数据经过清洗和处理后通过多种图表形式展示数据分析结果。通过对评论内容和点赞数的分析我们可以揭示视频的互动情况了解用户的情感倾向与话题趋势。数据可视化部分使得这些分析结果更加直观、易懂。
对于未来的改进我们可以进一步优化爬虫性能增加对评论的情感分析或者将数据存储到数据库中进行更加复杂的查询与分析。
六、参考资料
Bilibili API文档 Bilibili Open APIpandas 官方文档https://pandas.pydata.orgjieba 官方文档https://github.com/fxsjy/jiebapyecharts 官方文档https://pyecharts.org
希望通过这篇博客大家能对如何通过 Python 进行 Bilibili 评论数据分析和可视化有一个清晰的了解也希望能启发大家在实际项目中应用这些技术。
源代码添加