数据分析:当当网书籍数据可视化分析

news2025/1/18 4:44:31

在这里插入图片描述

当当网书籍数据可视化分析

作者:i阿极

作者简介:Python领域新星作者、多项比赛获奖者:博主个人首页

😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!👍👍👍

📜📜📜如果有小伙伴需要数据集和学习交流,文章下方有交流学习区!一起学习进步!💪


专栏案例:《数据可视化分析》
数据分析:某电商优惠卷数据分析
数据分析:旅游景点销售门票和消费情况分析
数据分析:消费者数据分析
数据分析:餐厅订单数据分析
数据分析:基于随机森林(RFC)对酒店预订分析预测
数据分析:基于K-近邻(KNN)对Pima人糖尿病预测分析
数据分析:麦当劳食品营养数据探索并可视化

文章目录

  • 当当网书籍数据可视化分析
  • 1、前言
  • 2、导入模块
  • 3、导入数据
  • 4、数据预处理
    • 4.1、数据处理
    • 4.2、提取评论数
    • 4.3、原价、售价、电子书价格 数值化
    • 4.4、选择需要用到的列
    • 4.5、缺失值
    • 4.6、电子书价格列额外处理
    • 4.7、重复值
  • 5、数据可视化
    • 5.1、书籍总体价格区间
    • 5.2、各个出版社书籍数量柱状图
    • 5.3、电子书版本占比
    • 5.4、书籍评论数最高Top20
  • 总结


1、前言

随着互联网的快速发展,电子商务行业在中国经历了爆炸式的增长。作为国内知名的在线购物平台,当当网在其中发挥了举足轻重的作用。为了更好地满足消费者的需求,优化用户体验,提高运营效率,数据分析成为了当当网运营过程中不可或缺的一环。

数据分析在电子商务中扮演着至关重要的角色。通过对大量数据的挖掘和分析,企业可以洞察市场趋势,了解用户行为,优化产品布局,制定营销策略等。当当网的数据分析流程旨在从海量数据中提取有价值的信息,为公司的决策提供数据支持。

2、导入模块

import pandas as pd
from pyecharts.charts import *
from pyecharts.globals import ThemeType
from pyecharts.commons.utils import JsCode
import pyecharts.options as opts

import pandas as pd: 导入pandas库,并给它一个简短的别名pd。pandas是一个用于数据处理和分析的强大库。
from pyecharts.charts import *: 从pyecharts库的charts模块导入所有内容。pyecharts是一个用于生成Echarts图表的Python库。
from pyecharts.globals import ThemeType: 从pyecharts库的globals模块导入ThemeType。这可能用于设置图表的默认主题。
from pyecharts.commons.utils import JsCode: 从pyecharts库的commons.utils模块导入JsCode。这可能是一个用于与JavaScript代码交互的工具。
import pyecharts.options as opts: 从pyecharts库导入其选项模块,并给它一个简短的别名opts。这可能用于配置图表的选项和参数。
这段代码主要用于数据分析和可视化的目的,特别是使用Echarts图表库来生成和配置图表。

3、导入数据

df = pd.read_csv('.\书籍信息.csv')
df.head()

在这里插入图片描述

4、数据预处理

4.1、数据处理

从DataFrame的’标题’列中提取书名(不包括括号及其内容),并将结果存储在新列’书名’中,然后显示这个处理过的DataFrame的前五行。

df['书名'] = df['标题'].apply(lambda x:x.split('(')[0])
df.head()

在这里插入图片描述

从DataFrame的’标题’列中提取书籍简介(括号及其内容),并将结果存储在新列’书籍简介’中,然后将缺失的值替换为’无’,最后显示这个处理过的DataFrame的第一行。

df['书籍简介'] = df['标题'].str.extract('.*?((.*?))')
df['书籍简介'].fillna('无', inplace=True)
df.head(1)

在这里插入图片描述

4.2、提取评论数

从DataFrame的’评价’列中提取评论数(去掉’条评论’),并将结果存储在新列’评论数’中,然后显示这个处理过的DataFrame的第一行。

df['评论数'] = df['评价'].str.replace('条评论','').astype('int64')
df.head(1)

在这里插入图片描述

4.3、原价、售价、电子书价格 数值化

从DataFrame的’原价’、'售价’和’电子书价格’列中删除所有的’¥’字符,然后显示这个处理过的DataFrame的第一行。

df['原价'] = df['原价'].str.replace('¥', '')
df['售价'] = df['售价'].str.replace('¥', '')
df['电子书价格'] = df['电子书价格'].str.replace('¥', '')
df.head(1)

在这里插入图片描述

df.info()

在这里插入图片描述

从DataFrame的’原价’和’售价’列中删除所有的’,'字符,并将这两列从字符串转换为浮点数

df['原价'] = df['原价'].str.replace(',', '').astype('float64')
df['售价'] = df['售价'].str.replace(',', '').astype('float64')

4.4、选择需要用到的列

df = df[['书名','书籍简介','评论数','作者','出版日期','出版社','原价','售价','电子书价格']]
df.head(1)

在这里插入图片描述

4.5、缺失值

df.isnull().sum()

在这里插入图片描述

df['作者'].fillna('未知', inplace=True)
df['出版社'].fillna('未知', inplace=True)
df.isnull().sum()

在这里插入图片描述

4.6、电子书价格列额外处理

df['电子书价格'] = df['电子书价格'].str.replace(',', '').astype('float64')
df['电子书价格'].fillna('无电子书版本', inplace=True)

4.7、重复值

计算DataFrame df中的重复行数。

df.duplicated().sum()

输出:

0
df.info()

在这里插入图片描述

生成描述性统计信息

df.describe()

在这里插入图片描述

5、数据可视化

5.1、书籍总体价格区间

这个函数tranform_price根据输入的价格值,返回一个描述价格范围的字符串。如果价格小于或等于50元,返回’050元’;如果价格在50到100元之间,返回’51100元’;以此类推,如果价格大于1000元,返回’1000以上’。

def tranform_price(x):
    if x <= 50.0:
        return '0~50元'
    elif x <= 100.0:
        return '51~100元'
    elif x <= 500.0:
        return '101~500元'
    elif x <= 1000.0:
        return '501~1000元'
    else:
        return '1000以上'

将DataFrame df中的’原价’列转换为’价格分级’列,并统计每个价格分级的出现次数。

df['价格分级'] = df['原价'].apply(lambda x:tranform_price(x))
price_1 = df['价格分级'].value_counts()
datas_pair_1 = [(i, int(j)) for i, j in zip(price_1.index, price_1.values)]

这段代码将DataFrame df中的’售价’列转换为’售价价格分级’列,并统计每个售价价格分级的出现次数。结果存储在price_2和datas_pair_2中。

df['售价价格分级'] = df['售价'].apply(lambda x:tranform_price(x))
price_2 = df['售价价格分级'].value_counts()
datas_pair_2 = [(i, int(j)) for i, j in zip(price_2.index, price_2.values)]
pie1 = (
    Pie(init_opts=opts.InitOpts(theme='dark',width='1000px',height='600px'))
    
    .add('', datas_pair_1, radius=['35%', '60%'])
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{d}%"))
    .set_global_opts(
        title_opts=opts.TitleOpts(
            title="当当网书籍\n\n原价价格区间", 
            pos_left='center', 
            pos_top='center',
            title_textstyle_opts=opts.TextStyleOpts(
                color='#F0F8FF', 
                font_size=20, 
                font_weight='bold'
            ),
        )
    )
    .set_colors(['#EF9050', '#3B7BA9', '#6FB27C', '#FFAF34', '#D8BFD8', '#00BFFF', '#7FFFAA'])
)
pie1.render_notebook() 

在这里插入图片描述

5.2、各个出版社书籍数量柱状图

找出拥有最多书籍的20家出版社

counts = df.groupby('出版社')['书名'].count().sort_values(ascending=False).head(20)
bar=(
    Bar(init_opts=opts.InitOpts(height='500px',width='1000px',theme='dark'))
    .add_xaxis(counts.index.tolist())
    .add_yaxis(
        '出版社书籍数量',
        counts.values.tolist(),
        label_opts=opts.LabelOpts(is_show=True,position='top'),
        itemstyle_opts=opts.ItemStyleOpts(
            color=JsCode("""new echarts.graphic.LinearGradient(
            0, 0, 0, 1,[{offset: 0,color: 'rgb(255,99,71)'}, {offset: 1,color: 'rgb(32,178,170)'}])
            """
            )
        )
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(
            title='各个出版社书籍数量柱状图'),
            xaxis_opts=opts.AxisOpts(name='书籍名称',
            type_='category',                                           
            axislabel_opts=opts.LabelOpts(rotate=90),
        ),
        yaxis_opts=opts.AxisOpts(
            name='数量',
            min_=0,
            max_=29.0,
            splitline_opts=opts.SplitLineOpts(is_show=True,linestyle_opts=opts.LineStyleOpts(type_='dash'))
        ),
        tooltip_opts=opts.TooltipOpts(trigger='axis',axis_pointer_type='cross')
    )

    .set_series_opts(
        markline_opts=opts.MarkLineOpts(
            data=[
                opts.MarkLineItem(type_='average',name='均值'),
                opts.MarkLineItem(type_='max',name='最大值'),
                opts.MarkLineItem(type_='min',name='最小值'),
            ]
        )
    )
)
bar.render_notebook()

在这里插入图片描述

5.3、电子书版本占比

计算在DataFrame df中没有电子书版本的书所占的百分比,并将这个百分比值赋给变量per。

per = df['电子书价格'].value_counts()['无电子书版本']/len(df)
c = (
    Liquid()
    .add("lq", [1-per], is_outline_show=False)
    .set_global_opts(title_opts=opts.TitleOpts(title="电子书版本占比"))
)
c.render_notebook()

在这里插入图片描述

5.4、书籍评论数最高Top20

price_top = df.groupby('书名')['原价'].sum().sort_values(ascending=False).head(20)
price_top

在这里插入图片描述

bar=(
    Bar(init_opts=opts.InitOpts(height='500px',width='1000px',theme='dark'))
    .add_xaxis(price_top.index.tolist())
    .add_yaxis(
        '书籍单价',
        price_top.values.tolist(),
        label_opts=opts.LabelOpts(is_show=True,position='top'),
        itemstyle_opts=opts.ItemStyleOpts(
            color=JsCode("""new echarts.graphic.LinearGradient(
            0, 0, 0, 1,[{offset: 0,color: 'rgb(255,99,71)'}, {offset: 1,color: 'rgb(32,178,170)'}])
            """
            )
        )
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(
            title='单价最高的书籍详细柱状图'),
            xaxis_opts=opts.AxisOpts(name='书籍名称',
            type_='category',                                           
            axislabel_opts=opts.LabelOpts(rotate=90),
        ),
        yaxis_opts=opts.AxisOpts(
            name='单价/元',
            min_=0,
            max_=1080.0,
            splitline_opts=opts.SplitLineOpts(is_show=True,linestyle_opts=opts.LineStyleOpts(type_='dash'))
        ),
        tooltip_opts=opts.TooltipOpts(trigger='axis',axis_pointer_type='cross')
    )

    .set_series_opts(
        markline_opts=opts.MarkLineOpts(
            data=[
                opts.MarkLineItem(type_='average',name='均值'),
                opts.MarkLineItem(type_='max',name='最大值'),
                opts.MarkLineItem(type_='min',name='最小值'),
            ]
        )
    )
)
bar.render_notebook()

在这里插入图片描述


总结

本次数据分析为当当网提供了有价值的洞察和建议。通过深入挖掘和分析销售数据,我们可以更好地了解用户需求和市场趋势,优化库存管理、营销策略和推荐系统。同时,这些发现也为企业决策提供了依据,有助于促进图书市场的可持续发展。

📢文章下方有交流学习区!一起学习进步!💪💪💪
📢首发CSDN博客,创作不易,如果觉得文章不错,可以点赞👍收藏📁评论📒
📢你的支持和鼓励是我创作的动力❗❗❗

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1432325.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

面试经典150题——文本左右对齐(困难)

​"It always seems impossible until it’s done." - Nelson Mandela 1. 题目描述&#xff1a; 这个题目标为困难题目&#xff0c;但是如果我们静下心来把题目读懂了&#xff0c;其实无非就是不同情况下不同考虑而已&#xff0c;也没什么思维上的复杂&#xff0c;还…

Ainx框架实现 一

&#x1f4d5;作者简介&#xff1a; 过去日记&#xff0c;致力于Java、GoLang,Rust等多种编程语言&#xff0c;热爱技术&#xff0c;喜欢游戏的博主。 &#x1f4d7;本文收录于Ainx系列&#xff0c;大家有兴趣的可以看一看 &#x1f4d8;相关专栏Rust初阶教程、go语言基础系列…

对话 Zeitgeist|巧借波卡生态优势,开启去中心化预测市场新篇章

在纷繁芜杂的信息世界里&#xff0c;真相和事实往往是稀缺品&#xff0c;利用预测市场的激励方式往往能够带领我们前瞻未来发展的趋势&#xff0c;走向获得真理和进步的 Web3 新世界。—— Zeitgeist 团队 试想下&#xff0c;如果有一天&#xff0c;你可以自由地在感兴趣的行业…

【经典项目】Java小游戏 —— 会说话的汤姆猫

一、游戏回顾 【预期效果】 【玩法介绍】 1、 和它说话&#xff0c;它将用有趣的声音重复你的话。 2、打它的头&#xff0c;它会装成被打的样子&#xff0c;连续打还会晕倒&#xff1b;抚摸肚子&#xff0c;它会打呼噜&#xff1b;打肚子&#xff0c;它会装肚子疼&#xff1b…

QUIC with CUBIC or BBR

拥塞控制 拥塞控制算法是 TCP/QUIC 协议的一个基础部分&#xff0c;多年来经过一个个版本的迭代&#xff08;如 Tahoe、Reno、Vegas 等&#xff09;&#xff0c;拥塞控制算法得到了持续的提升。由于篇幅有限&#xff0c;本文就目前比较流行的两种拥塞控制算法&#xff08;CUBI…

[AIGC] 21世纪Java与Go的相爱相杀

在21世纪的软件开发领域中&#xff0c;Java和Go这两门编程语言可谓是相爱相杀的存在。它们各自拥有着强大的特点和独特的优势&#xff0c;同时也存在着一些明显的竞争和冲突。让我们来看看这两门语言的故事&#xff0c;以及它们之间的深远意义。 文章目录 Java的魅力Go的魅力相…

以小猪o2o生活通v17.1为例简要分析SWOOLE加密破解,swoole_loader加密破解swoole加密逆向后的代码修复流程(个人见解高手掠过)

现在用Php加密五花八门除了组件就是混淆&#xff0c;在组件里面响当当的还属swoole&#xff0c;SWOOLEC是不错的国产加密&#xff0c;值得推荐官方宣称是永远无法破解的加密算法&#xff0c;针对swoole compiler的代码修复我谈谈我的看法&#xff0c;以小猪o2o生活通&#xff0…

一、Redis之NoSQL

1.1 什么是NoSQL NoSQL&#xff08;Not Only SQL&#xff09;即不仅仅是SQL&#xff0c;泛指非关系型的数据库&#xff0c;它可以作为关系型数据库的良好补充。随着互联网web2.0网站的兴起&#xff0c;非关系型的数据库现在成了一个极其热门的新领域&#xff0c;非关系数据库产…

Scrapy:Python中强大的网络爬虫框架

Scrapy&#xff1a;Python中强大的网络爬虫框架 在当今信息爆炸的时代&#xff0c;从互联网上获取数据已经成为许多应用程序的核心需求。Scrapy是一款基于Python的强大网络爬虫框架&#xff0c;它提供了一种灵活且高效的方式来提取、处理和存储互联网上的数据。本文将介绍Scrap…

fastjson 导致的OOM

fastjson 导致的OOM 示例代码 public static void main(String[] args) throws Exception {try {List<Integer> list JSONObject.parseArray("[2023,2024", Integer.class);}catch (Exception e){System.err.println("error");}System.out.println…

Linux 驱动开发基础知识——设备树的语法驱动开发基础知识(九)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;Vir2021GKBS &#x1f43c;本文由…

Vue3_基础使用_1

这节主要介绍&#xff1a; vue2与vue3的区别&#xff0c;创建响应式的数据&#xff0c;setup语法糖的使用&#xff0c;watch监听&#xff0c;及vue3创建项目。 vue2的选项式与vue3的组合式区别&#xff1a; 选项式&#xff1a;vue2中数据与方法计算属性等等&#xff0c;针对…

《Python 网络爬虫简易速速上手小册》第4章:Python 网络爬虫数据抓取技术(2024 最新版)

文章目录 4.1 解析 HTML 与 CSS4.1.1 重点基础知识讲解4.1.2 重点案例&#xff1a;使用 BeautifulSoup 解析博客文章4.1.3 拓展案例 1&#xff1a;使用 lxml 和 XPath 解析产品信息4.1.4 拓展案例 2&#xff1a;动态加载内容的抓取挑战 4.2 动态内容抓取技术4.2.1 重点基础知识…

时间序列预测——GRU模型

时间序列预测——GRU模型 在深度学习领域&#xff0c;循环神经网络&#xff08;RNN&#xff09;是处理时间序列数据的一种常见选择。上期已介绍了LSTM的单步和多步预测。本文将深入介绍一种LSTM变体——门控循环单元&#xff08;GRU&#xff09;模型&#xff0c;包括其理论基础…

ArcGIS Pro 按照字段进行融合或拆分

ArcGIS Pro 按字段融合 在ArcGIS Pro中&#xff0c;通过使用“融合”工具可以轻松地合并具有相同字段的图层。 步骤一&#xff1a;打开ArcGIS Pro 启动ArcGIS Pro应用程序&#xff0c;确保您已经登录并打开您的项目。 步骤二&#xff1a;添加图层 将包含相同字段的图层添加到…

【C++】C++入门 — 类和对象初步介绍

类和对象 1 类的作用域2 类的实例化3 类对象模型4 this指针介绍&#xff1a;特性&#xff1a; Thanks♪(&#xff65;ω&#xff65;)&#xff89;谢谢阅读&#xff01;下一篇文章见&#xff01;&#xff01;&#xff01; 1 类的作用域 类定义了一个新的作用域&#xff0c;类的…

项目安全问题及解决方法-----xss处理

XSS 问题的根源在于&#xff0c;原本是让用户传入或输入正常数据的地方&#xff0c;被黑客替换为了 JavaScript 脚本&#xff0c;页面没有经过转义直接显示了这个数据&#xff0c;然后脚本就被 执行了。更严重的是&#xff0c;脚本没有经过转义就保存到了数据库中&#xff0c;随…

Redis之基础篇

Redis简介 Redis是一种基于键值对&#xff08;Key-Value&#xff09;的NoSQL数据库&#xff0c;它支持string&#xff08;字符串&#xff09;、hash&#xff08;哈希&#xff09;、list&#xff08;列表&#xff09;、set&#xff08;集合&#xff09;、zset&#xff08;有序集…

matplotlib-中文乱码问题解决方案

前言 本文主要解决matplotlib在画图时&#xff0c;出现的中文乱码问题&#xff0c;具体问题示意如下&#xff1a; 下面将针对这个问题直接给出具体的解决步骤。 具体步骤 1、首先去网上下载并安装SimHei字体&#xff0c;其它字体也行&#xff0c;如下 并将它安装在此目录下…

面试150 位1的个数 位运算

Problem: 191. 位1的个数 文章目录 思路复杂度Code 思路 &#x1f468;‍&#x1f3eb; 参考 复杂度 Code public class Solution {// you need to treat n as an unsigned valuepublic int hammingWeight(int n){int res 0;while (n ! 0){res 1;n & n - 1;// 把最后…