震惊!我用Python分析了天蚕土豆的玄幻三部曲竟然发现...

今天在偶然网络上又看到了这个神梗:

恐怖如斯恐怖如斯恐怖如斯恐怖如斯

印象深刻啊…又回到了2015年,我清晰地记得入坑晚的我我中考前一晚追完了《斗破苍穹》,才安心睡觉…

但是后来由于多方原因,《武动乾坤》和《大主宰》我都没有从头到尾系统地看,都是零零散散地看一点望一点…

所以今天我们就来分析分析当年天蚕土豆的三本霸榜之作:

《斗破苍穹》

《武动乾坤》

《大主宰》

不过呢想要分析数据,首先要获取数据,因为这三本书已经出来很久了,所以网上资源遍地都是,利用爬虫也很好爬,如果你们想要自己上手抓取数据,可以看看:pyquery爬取天蚕土豆经典玄幻三部曲;如果你们懒得自己获取数据,我这里也有现成的(https://pan.baidu.com/s/1PWOs8iEkBZDYSmBgB13RDQ提取码:j7ua

然后我们来看看这些小说吧:

先来看看这些小说所有内容的词云吧:

import threading
import jieba
from wordcloud import WordCloud
import os


# 获取目录下所有小说名称
def file_name(file_dir):
    for folder, _, files in os.walk(file_dir):
        return [(folder + "/" + _) for _ in files]


# 创建停用词
def stopwordslist(filepath):
    stopwords = [line.strip() for line in open(filepath, 'r', encoding='utf-8').readlines()]
    return stopwords


# 对句子进行去除停用词
def seg_sentence(sentence):
    stopwords = stopwordslist('stop.txt')  # 这里加载停用词的路径
    outer = ''
    for word in jieba.cut(sentence.strip()):
        if word not in stopwords:
            if word != '\t':
                outer += word
    return outer


def draw(name):
    lists = file_name(name)
    word = ""
    for item in lists:
        with open(item, "r", encoding="utf-8")as f:
            word += f.read()
    wc = WordCloud(scale=5,
                   font_path="SimHei.ttf",
                   background_color="white",
                   max_words=200000,
                   ).generate(text=" ".join(jieba.cut(seg_sentence(word))))
    wc.to_file(name + ".png")


if __name__ == '__main__':
    threading.Thread(target=draw("DouPoCangQiong")).start()
    threading.Thread(target=draw("WuDongQianKun")).start()
    threading.Thread(target=draw("DaZhuZai")).start()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这三张词云图分别是指哪部小说我应该不用讲了,毕竟最大的两个字就是主句名字嘛~ ~ 另外呢,除了那些常见的名词动词形容词介词修饰词等等,(因为太大了,我筛选清楚实在是清不完…程序里面用到的stop.txt链接我也放出来,你们可以继续完善… https://pan.baidu.com/s/10Kzv9XysBsOto6wmRl7qlw 提取码:kcue

然后我们再来看看这些小说中的关键词看看:

import os
import matplotlib.pyplot as plt


# 获取当前路径下所有子文件
def file_name(file_dir):
    for _, _, files in os.walk(file_dir):
        return files


# 获得词频
def get_word_frequency(name):
    dicts = {
        "灰衣老者": 0, "黑衣老者": 0, "负手而立": 0, "你算什么东西": 0, "的存在": 0,
        "如同鬼魅一般": 0, "眼神微微一凝": 0, "微微一凝": 0, "瞳孔微微一缩": 0, "眼神闪烁": 0,
        "倒吸一口凉气": 0, "旋即": 0, "是吗": 0, "哼": 0, "小瞧你": 0, "不是省油的灯": 0,
        "此子": 0, "大患": 0, "桀": 0, "戾气": 0, "恐怖如斯": 0,
        "放眼": 0, "凤毛麟角": 0, "足以把": 0, "沉了下来": 0, "你的对手是我": 0,
        "残影": 0, "暴涨": 0, "暴怒": 0, "暴喝": 0, "暴退": 0, "喉咙一甜": 0,
        "窃窃私语": 0, "摧枯拉朽": 0, "苦笑": 0, "软柿子": 0,
        "娇嗔": 0, "贝齿": 0, "俏脸": 0, "玉手": 0, "红唇": 0,
    }
    for item in file_name(name):
        with open(name + '/' + item, "r", encoding="utf-8")as f:
            word = f.read()
            for i in dicts:
                dicts[i] += word.count(i)
    return dicts


# 实现两个字典相加
def add_dicts(dict1, dict2):
    dic = dict1
    for key in dict1:
        dic[key] += dict2.get(key, 0)
    return dic


# 对字典按值进行排序
def sort_dict(dicts):
    dic = {}
    for item in sorted(dicts, key=dicts.get, reverse=True):
        dic[item] = dicts[item]
    return dic


# 保存为图片
def save_to_img(dicts, name):
    plt.rcParams['font.sans-serif'] = ["SimHei"]
    fig, ax = plt.subplots(2, 5, figsize=(21, 9))

    fig.suptitle(name)
    plt.subplot2grid((2, 5), (0, 0), colspan=1, rowspan=2)
    plt.bar([".", list(dicts.keys())[0], " ", "."], [0, list(dicts.values())[0], 0, 0], color="#419876")

    plt.subplot2grid((2, 5), (0, 1), colspan=4, rowspan=1)
    plt.bar(list(dicts.keys())[1:int((len(list(dicts.keys())) - 1) / 2)],
            list(dicts.values())[1:int((len(list(dicts.values())) - 1) / 2)],
            color="#FF5646")
    plt.xticks(rotation=30)

    plt.subplot2grid((2, 5), (1, 1), colspan=4, rowspan=1)
    plt.bar(list(dicts.keys())[int((len(list(dicts.keys())) - 1) / 2):],
            list(dicts.values())[int((len(list(dicts.values())) - 1) / 2):],
            color="#675980")
    plt.xticks(rotation=30)

    plt.savefig(name + ".png", dpi=800)


def main():
    dict1 = sort_dict(get_word_frequency("DouPoCangQiong"))
    save_to_img(dict1, "斗破苍穹")
    print(dict1)

    dict2 = sort_dict(get_word_frequency("WuDongQianKun"))
    save_to_img(dict2, "武动乾坤")
    print(dict2)

    dict3 = sort_dict(get_word_frequency("DaZhuZai"))
    save_to_img(dict3, "大主宰")
    print(dict3)

    dict4 = add_dicts(add_dicts(dict1, dict2), dict3)
    save_to_img(sort_dict(dict4), "ALL")
    print(sort_dict(dict4))


if __name__ == '__main__':
    main()


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

在这里插入图片描述

在这里插入图片描述
最后一组数据是天蚕土豆这三部小说所有的,我们来看看:

排在第一名的是旋即:一般来讲应该是xx和xx打架时,旋即身形飞速前进/后退 or 出招 or 摆出防御姿态…
第二名是:一般来讲有两种情况:
第一种:反派:“,不自量力”
第二种:与主角关系近的女性角色:“,讨厌”
我觉得第一种应该比较多…
第三名是玉手:这个其实有点出乎我的预料…说实话我对这个词还真的印象不多…

后面还有:

苦笑:男主苦笑一声:哎,现在太菜了,还是打不过那个反派老儿
俏脸:主角老婆的俏脸啊…
的存在:xx强者,可是这片天地间恐怖/强大/无人能敌的存在
桀:反派的笑声:桀桀桀
暴涨,暴退,暴怒,暴喝:那肯定是打架时候土豆最喜欢用的词啦
红唇:主角老婆的红唇💋啊…
残影:也是打架时一个很nb的人,哇,好快!竟然只剩下了残影?!
窃窃私语:一般也是打架时,一边的吃瓜群众在那窃窃私语
放眼:放眼这块地方,xx也是数一数二的强者…

其他的我就不一一列举了,大家可以自行脑补,比如三部小说中出现的273位灰衣老者、104位黑衣老者往往出场后就是负手而立…等等hahaha ~ ~ ~

不过令我比较奇怪的是,恐怖如斯这个词竟然只出现了26次???也没有网上传的几千次啊…
在这里插入图片描述
难道我的统计有误?大家可以试试…

大家没事也可以分析分析别的或者画画别的图之类的看看…

呼应一下标题:

震惊!我用Python分析了天蚕土豆的玄幻三部曲竟然发现…

恐怖如斯的数量竟然没有那么多!真是恐怖如斯

🤫

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值