豆瓣读书top250的书籍数据可视化分析Python全代码实现

本文通过Python实现对豆瓣Top250书籍的全方位数据可视化,包括评价数分布柱形图、评论情感分布饼图、书籍名称词云图、Top10书籍数据表格、年份评分涟漪图和评论数TOP10条形图。借助PyEcharts库,创建了大屏展示,展示书籍的评分、评论数、情感分布等关键信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、条件

1.根据上一条文章中提取的数据(BookDouban250.csv

2.必要的库

import pandas as pd

import numpy as np
from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.globals import ThemeType
from snownlp import SnowNLP
from pyecharts.charts import Pie,WordCloud, Page
from pyecharts.components import Table
from pyecharts.charts import EffectScatter

二、实现的目标

1.评价数分布柱形图

        根据评价人数的最小值和最大值来均匀分布。按分段离散化数据。通过np.linspace计算评价人数的边界,将其分为10个区间。使用pd.cut进行分段离散化,统计每个区间的图书数量,并使用渐变颜色增强可视效果。

def comment_cnt_bar() -> Bar:
    bar = Bar(
        init_opts=opts.InitOpts(theme=ThemeType.CHALK, width="800px", height="400px", chart_id='bar_cmt'))
    bar.add_xaxis(labels)
    bar.add_yaxis(
        "评价数",
        counts,
        itemstyle_opts=opts.ItemStyleOpts(
            color=color_range,
            opacity=0.8  # 设置透明度
        )
    )
    bar.set_global_opts(
        legend_opts=opts.LegendOpts(pos_left='right'),
        title_opts=opts.TitleOpts(title="评价数量区间分布-柱形图", pos_left='center'),
        toolbox_opts=opts.ToolboxOpts(is_show=False),
        xaxis_opts=opts.AxisOpts(name="评论数", axislabel_opts=opts.LabelOpts(font_size=8)),
        yaxis_opts=opts.AxisOpts(
            name="图书数量",
            axislabel_opts={"rotate": 0},
            splitline_opts=opts.SplitLineOpts(is_show=True, linestyle_opts=opts.LineStyleOpts(type_='solid')),
        ),
    )
    bar.set_series_opts(
        markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max", name="最大值")], symbol_size=35)
    )
    return bar

2.评论情感分布饼图

        使用SnowNLP库对评论进行情感分析,根据情感分数将评论划分为积极、中性和消极三类,并通过PyEcharts的Pie类生成饼图展示评论情感的分布。在图表中,展示了积极、中性、消极三类评论的占比情况。

def emotion_pie() -> Pie:
    # 画饼图
    pie = (
        Pie(init_opts=opts.InitOpts(theme=ThemeType.CHALK, width="450px", height="350px", chart_id='pie1'))
        .add(
            series_name="评价情感分布",  # 系列名称
            data_pair=[
                ['积极', pos_count],
                ['中性', mid_count],
                ['消极', neg_count]
            ],
            rosetype="radius",  # 是否展示成南丁格尔图
            radius=["30%", "55%"],  # 扇区圆心角展现数据的百分比,半径展现数据的大小
            label_opts=opts.LabelOpts(formatter="{b}: {d}%"),  # 标签格式化,显示百分比
            itemstyle_opts=opts.ItemStyleOpts(border_width=2, border_color='white'),  # 扇形样式,增加边框
        )  # 加入数据
        .set_global_opts(  # 全局设置项
            title_opts=opts.TitleOpts(title="短评情感分布-饼图", pos_left='center'),  # 标题
            legend_opts=opts.LegendOpts(pos_left='right', orient='vertical')  # 图例设置项,靠右,竖向排列
        )
    )

    return pie

3.书籍名称词云图

        通过PyEcharts的WordCloud类生成词云图,展示书籍名称的词云分布。词云图中,文字大小表示出现频率,通过视觉效果形成图案,直观呈现了书籍名称的特征。

def book_name_wordcloud() -> WordCloud:
    wc = (
        WordCloud(init_opts=opts.InitOpts(width="450px", height="350px",
                                          theme=ThemeType.CHALK, chart_id='wc1'))
        .add(series_name="书籍名称",
             data_pair=[(word, 1) for word in text.split()],
             word_size_range=[15, 20],
             width='400px',  # 宽度
             height='300px',  # 高度
             word_gap=5  # 单词间隔
             )
        .set_global_opts(
            title_opts=opts.TitleOpts(pos_left='center',
                                      title="书籍名称分析-词云图",
                                      title_textstyle_opts=opts.TextStyleOpts(font_size=20)  # 设置标题
                           
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值