python爬取知乎回答并进行舆情分析:舆情分析部分

背景

在上一节中,利用爬虫爬取了问题下的所有回答,原文链接如下:
python爬取知乎回答并进行舆情分析:爬取数据部分
本节中利用jieba工具对回答分词,统计词频生成词云,并利用折线图统计每日回答数,做一个简单的舆情分析。

生成词云

文本预处理(使用停用词、自定义分词)

jieba分词支持停用词自定义分词。停用词能够过滤掉与语义无关的单词,自定义分词能够防止指定词汇被切分,例如某些不被一般词典收纳的新潮词汇。

引包:

import pandas as pd
import jieba
import re
import matplotlib
import matplotlib.pyplot as plt

加载词典:

# 加载自定义词典  
newdict_path = "./source/newdict.txt"
jieba.load_userdict(newdict_path)       

# 加载停用词词典
stop_list = []
stopdict_path = './source/stopdict.txt'
with open(stopdict_path, 'r', encoding='utf-8') as f:
    for line in f.readlines():
        stop_list.append(line[:-1])

数据预处理:

data = pd.read_csv('./test.csv')
data['回答'] = data['回答'].apply(lambda x : x.replace('\n', '')) 
data['回答'] = data['回答'].apply(lambda x : x.replace(' ', '')) 
data['分词'] = data['回答'].apply(lambda x : [i for i in jieba.cut(x) if i not in stop_list])
data['创建时间'] = data['创建时间'].apply(lambda x : x[:10])

统计词频

all_words = data['分词'].to_list()

word_dict = {}
for words in all_words:
    for word in words:
        if word in word_dict:
            word_dict[word] += 1
        else:
            word_dict[word] = 1

生成词云

利用wordcloud绘制词云:

from wordcloud import WordCloud
# 生成词云
def create_word_cloud(word_dict):
    # 支持中文, SimHei.ttf可从以下地址下载:https://github.com/cystanford/word_cloud
    wc = WordCloud(
        font_path="./source/SimHei.ttf",
        background_color='white',
        max_words=25,
        width=1800,
        height=1200,
    )
    word_cloud = wc.generate_from_frequencies(word_dict)
    # 写词云图片
    word_cloud.to_file("wordcloud2.jpg")
    # 显示词云文件
    plt.imshow(word_cloud)
    plt.axis("off")
    plt.show()

# 根据词频生成词云
create_word_cloud(word_dict)

结果如下:
在这里插入图片描述

折线图

统计每日回答数

利用字典统计每日回答的数量。:

# 修正回答时间格式:年-月-日 
data['创建时间'] = data['创建时间'].apply(lambda x : x[:10])

date_dict = {}

all_dates = data['创建时间'].to_list()
for date in all_dates:
    if date not in date_dict:
        date_dict[date] = 1
    else:
        date_dict[date] += 1

x = []
y = []
for key,value in date_dict.items():
    x.append(key)
    y.append(value)

生成折线图

%matplotlib inline

#通用设置,背景颜色、图片大小、是否
matplotlib.rc('axes', facecolor = 'white')
matplotlib.rc('figure', figsize = (6, 4))
matplotlib.rc('axes', grid = True)
#数据及线属性
plt.plot(x, y,'.-')
#标题设置
plt.title('test')
plt.xlabel('date')
plt.ylabel('amount')

结果如下:
在这里插入图片描述

展望

除了回答创建时间两个字段以外,爬取结果的其他字段也可以进行数据分析;也可以尝试利用user_token做一个用户画像分析。

  • 11
    点赞
  • 164
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值