【爬虫+数据清洗+可视化】用Python分析“淄博烧烤”的评论数据

一、背景介绍

您好,我是@马哥python说 ,一枚10年程序猿。

自从2023.3月以来,"淄博烧烤"现象持续占领热搜流量,体现了后疫情时代众多网友对人间烟火气的美好向往,本现象级事件存在一定的数据分析实践意义。

我用Python爬取并分析了众多网友的评论,并得出一系列分析结论。

二、爬虫代码

2.1 展示爬取结果

首先,看下部分爬取数据:
爬取结果
爬取字段含:视频链接、评论页码、评论作者、评论时间、IP属地、点赞数、评论内容

2.2 爬虫代码讲解

爬虫部分不作讲解。

三、可视化代码

为了方便看效果,以下代码采用jupyter notebook进行演示。

3.1 读取数据

用read_csv读取刚才爬取的评论数据:

df = pd.read_csv('淄博烧烤_评论数据.csv')

查看前3行及数据形状:

print(df.head(3))
print(df.shape)

3.2 数据清洗

处理空值及重复值:
数据清洗

3.3 可视化

3.3.1 IP属地分析-柱形图

柱形图

结论:从柱形图来看,山东位居首位,说明淄博烧烤也受到本地人大力支持,其次是四川、广东等地讨论热度最高。

3.3.2 评论时间分析-折线图

折线图
结论:从折线图来看,4月26日左右达到讨论热度顶峰,其次是5月1号即五一劳动节假期第一天,大量网友的"进淄赶烤"也制造了新的讨论热度。

3.3.3、点赞数分布-箱线图

由于点赞数大部分为0或个位数情况,个别点赞数到达成千上万,箱线图展示效果不佳,因此,仅提取点赞数<10的数据绘制箱线图。
箱线图
结论:从箱线图来看,去除超过10个点赞数评论数据之后,大部分评论集中在0-3个点赞之间,也就是只有少量评论引起网友的点赞共鸣和认可。

3.3.4 评论内容-情感分布饼图

针对中文评论数据,采用snownlp开发情感判定函数:
情感判定
情感分布饼图,如下:
饼图

结论:从饼图来看,积极和消极分别占比不到一半,说明广大网友在认可淄博烧烤现象的同时,也有大量负面讨论存在,比如讨论烧烤的价格略高、住宿条件欠佳、环境污染等负面话题。

3.3.5 评论内容-词云图

由于评论内容中存在很多"啊"、“的”、"了"等无意义的干扰词,影响高频词的提取,因此,采用哈工大停用词表作为停用词词典,对干扰词进行屏蔽:
停用词
然后,绘制词云图:
词云图
结论:从词云图来看,“淄博”、“烧烤”、“山东”、“好吃”、“城市”、“好”、"物价"等正面词汇字体较大,体现出众多网友对以「淄博烧烤」为代表的后疫情时代人间烟火的美好向往。

四、技术总结

淄博烧烤」案例完整开发流程:

  1. requests爬虫
  2. json解析
  3. pandas保存csv
  4. pandas数据清洗
  5. snownlp情感分析
  6. matplotlib可视化,含:

1)IP属地分析-柱形图Bar
2)评论时间分析-折线图Line
3)点赞数分布-箱线图Boxplot
4)评论内容-情感分布饼图Pie
5)评论内容-词云图WordCloud

五、演示视频

代码演示视频:【爬虫+数据清洗+可视化】Python爬取并分析"淄博烧烤"评论

六、获取源码

完整源码:【爬虫+数据清洗+可视化分析】舆情分析"淄博烧烤"的评论


我是马哥,全网累计粉丝上万,欢迎一起交流python技术。

各平台搜索“马哥python说”:知乎、哔哩哔哩、小红书、新浪微博、博客园。

  • 8
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
要用Python进行文本分类,你需要先爬取一些文本数据,并对其进行预处理。一般来说,文本数据的预处理包括以下步骤: 1. 读取文本数据 2. 分词 3. 去除停用词 4. 提取特征 5. 训练模型 6. 对新数据进行分类 下面是一个简单的示例,演示如何用Python爬取文本数据并进行分类: ```python import requests from bs4 import BeautifulSoup import jieba from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.naive_bayes import MultinomialNB # 网页爬取 url = "https://news.sina.com.cn/china/" response = requests.get(url) html = response.content.decode("utf-8") soup = BeautifulSoup(html, "html.parser") # 获取新闻标题 news_list = soup.find_all("a", href=True) titles = [] for news in news_list: title = news.text.strip() if title: titles.append(title) # 分词和去除停用词 stop_words = ["的", "了", "和", "是"] corpus = [] for title in titles: words = jieba.cut(title) words = [word for word in words if word not in stop_words] corpus.append(" ".join(words)) # 特征提取和模型训练 vectorizer = TfidfVectorizer() X = vectorizer.fit_transform(corpus) y = ["china"] * len(titles) clf = MultinomialNB() clf.fit(X, y) # 预测新标题的类别 new_title = "新冠病毒疫苗开始接种" new_words = jieba.cut(new_title) new_words = [word for word in new_words if word not in stop_words] new_corpus = [" ".join(new_words)] new_X = vectorizer.transform(new_corpus) predicted = clf.predict(new_X) print(predicted[0]) ``` 在这个例子中,我们首先使用requests和BeautifulSoup库爬取了新浪网的中国新闻页面。然后我们对每个新闻标题进行了分词和去除停用词的处理。接着,我们使用TfidfVectorizer进行特征提取,并用MultinomialNB训练了一个朴素贝叶斯分类器。最后,我们使用这个分类器对一个新的标题进行了分类,输出了它属于“china”类别。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

马哥python说

打赏多少不重要,表达认可最重要

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值