读取数据:

df = pd.read_csv('./data/当当网畅销图书榜单数据.csv')
# 查看前十条数据
df.head(10)

在这里插入图片描述


数据预处理:

  • 查看数据信息
# 查看数据信息
df.info()

在这里插入图片描述

  • 去除重复值
# 去除重复值
df = df.drop_duplicates(subset=['书名', '出版日期'])
  • 对年份时间处理,提取年份时间
# 处理年份时间格式
df['出版日期_year'] = pd.to_datetime(df['出版日期']).dt.year

在这里插入图片描述

  • 再检查数据
# 查看数据信息
df.info()

在这里插入图片描述

  • 保存处理好后的数据
# 保存数据  
df.to_csv('./data/当当网畅销图书榜单数据处理后.csv', index=False)

数据可视化:

  • 读取处理后的数据
# 读取处理后的数据
df = pd.read_csv('./data/当当网畅销图书榜单数据处理后.csv')
  • 作者图书数量分布图(前20位)—漏斗图
# 1.作者图书数量分布图---漏斗图
new_data = []
data = df['作者'].value_counts()
data = data.sort_values(
    ascending=False # 降序排列
    ).head(20)
for index, value in data.items():
    new_data.append((index, value))
chart = Funnel(init_opts=opts.InitOpts(width="1200px", height="600px"))
chart.add(series_name="数量",
          data_pair=new_data, 
          label_opts=opts.LabelOpts(
             font_size=10, # 标签字体大小
              is_show=True, # 显示标签
              position="inside", # 标签位置
              formatter="{b} : {c}本" # 显示数据内容
          ),
          tooltip_opts=opts.TooltipOpts(
              trigger='item', # 鼠标悬停显示数据
          )
          )
chart.set_global_opts(
    title_opts=opts.TitleOpts(
        title='作者图书数量分布图', # 标题
        pos_left='center' # 标题位置
    ),
    legend_opts=opts.LegendOpts(
        is_show=False # 隐藏图例
    )
)
chart.render('./charts/作者图书数量分布图.html')

在这里插入图片描述
陈磊・半小时漫画团队的书籍最多,东野圭吾、曹文轩、余华、毛姆位列2-5名

  • 图书出版年份分布图—折线面积图
# 2.图书出版年份分布图---折线图
data_x = []
data_y = []
data = df['出版日期_year'].value_counts()
data.index = data.index.astype(str)
data = data.sort_index(
    ascending=True # 升序排列
    )
for index, value in data.items():
    data_x.append(index)
    data_y.append(value)

chart = Line(init_opts=opts.InitOpts(width="1200px", height="600px"))
chart.add_xaxis(data_x)
chart.add_yaxis(
    series_name="数量",
    y_axis=data_y,
    label_opts=opts.LabelOpts(
        is_show=False # 隐藏标签
    ),
    areastyle_opts=opts.AreaStyleOpts(opacity=0.5),
    is_smooth=True # 平滑曲线
)
chart.set_global_opts(
    title_opts=opts.TitleOpts(
        title='图书出版年份分布图', # 标题
        pos_left='center' # 标题位置
    ),
    legend_opts=opts.LegendOpts(
        is_show=False # 隐藏图例
    )
)
chart.render('./charts/图书出版年份分布图.html')

在这里插入图片描述
2017年-2022年的出版的图书上榜次数与其他年份相比更高,其中2019年、2020年出版的图书上榜次数均超过150次

  • 图书原价分布图—散点图
# 图书原价分布图---散点图
data_x = []
data_y = []
data = df['原价'].value_counts()
data.index = data.index.astype(int)
data = data.sort_index(
    ascending=True # 升序排列
    )
data.index = data.index.astype(str)
for index, value in data.items():
    data_x.append(index)
    data_y.append(value)


chart = Scatter(init_opts=opts.InitOpts(width="1200px", height="600px"))
# 散点图
chart.add_xaxis(data_x)
chart.add_yaxis(
    series_name="数量",
    y_axis=data_y,
    label_opts=opts.LabelOpts(
        is_show=False # 隐藏标签
    ),
    )
chart.set_global_opts(
    title_opts=opts.TitleOpts(
        title='图书原价分布图', # 标题
        pos_left='center' # 标题位置
    ),
    legend_opts=opts.LegendOpts(
        is_show=False # 隐藏图例
    )
)

chart.render('./charts/图书原价分布图.html')

在这里插入图片描述
图书原价在33至72区间内的数量较多,其中图书原价为45的图书数量最多,共有57本
图书原价超过140以上的数量均在10以下

  • 图书售价区间分布图—柱状图
# 图书售价区间分布图---柱状图
data_x = ['20元以下', '20-30元', '30-40元', '40-50元', '50-60元', '60以上']
data_y = []
price = [0, 0, 0, 0, 0, 0]
data = df['售价']
for value in data:
    data_y.append(float(value))
for d in data_y:
    if d<20:
        price[0] += 1
    elif d<30:
        price[1] += 1
    elif d<40:
        price[2] += 1
    elif d<50:
        price[3] += 1
    elif d<60:
        price[4] += 1
    else:
        price[5] += 1
print(price)
        
chart = Bar(init_opts=opts.InitOpts(width="1200px", height="600px"))
chart.add_xaxis(data_x)
chart.add_yaxis(
    series_name="数量",
    y_axis=price,
    label_opts=opts.LabelOpts(
        is_show=True, # 显示标签
        position="inside", # 标签位置
        formatter="{c}本" # 显示数据内容
    ),
)
chart.set_global_opts(
    title_opts=opts.TitleOpts(
        title='图书售价区间分布图', # 标题
        pos_left='center' # 标题位置
    ),
    legend_opts=opts.LegendOpts(
        is_show=False # 隐藏图例
    ),
)
chart.render('./charts/图书售价区间分布图.html')

在这里插入图片描述
从售价区间分布上来看:20元以下的图书接近400本,20-30元之间的300本左右,也就是30元以内的图书数量接近总量的60%。

  • 电子书价格区间占比—环形图

观察数据我们发现很多书籍没有电子书价格,电子书价格为空,为此我们需要去除电子书价格一栏的空值

# 去除空值
df = df.dropna(subset=['电子书价格'])
pie = Pie(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))
pie.add(
    "",
    [list(z) for z in zip(data_x, price)],
    radius=["40%", "70%"],  # 内半径为40%,外半径为70%
    label_opts=opts.LabelOpts(formatter="{b}: {c} ({d}%)"),
)
pie.set_global_opts(
    title_opts=opts.TitleOpts(title="电子书价格区间占比"),
    legend_opts=opts.LegendOpts(orient="vertical",
                                pos_left="left",
                                pos_top="20%"
                                ),
)
pie.render('./charts/电子书价格区间占比.html')

在这里插入图片描述
电子书的价格普遍较低,比较成本很少,数量占比分布趋势基本和售价一致。

  • 折扣比例分布图—柱状图
chart = Bar(init_opts=opts.InitOpts(width="1200px", height="600px"))
chart.add_xaxis(data_x)
chart.add_yaxis(
    series_name="数量",
    y_axis=data_y,
    label_opts=opts.LabelOpts(
        is_show=True, # 显示标签
        position="top", # 标签位置
    ),
)
chart.set_global_opts(
    title_opts=opts.TitleOpts(
        title='折扣比例分布图', # 标题
        pos_left='center' # 标题位置
    ),
    legend_opts=opts.LegendOpts(
        is_show=False # 隐藏图例
    ),
)
chart.render('./charts/折扣比例分布图.html')

在这里插入图片描述
5折图书的数量要明显高于其他折扣,促销的时候可以参考打半折,同时也要考虑促销图书的质量和爱好人群,并不是折扣越低越好

  • 图书评论数词云图—词云图
df = pd.read_csv('./data/当当网畅销图书榜单数据处理后.csv')
data_x = df['书名']
data_y = df['评论数']
words = []
for word in zip(data_x, data_y):
    words.append(word)
wordcloud = WordCloud(init_opts=opts.InitOpts(width="1200px", height="600px"))
wordcloud.add("",
              words,
              word_size_range=[20, 100]
              )
wordcloud.set_global_opts(
    title_opts=opts.TitleOpts(
        title='图书评论数词云图',
        pos_left='center'
    ),
    legend_opts=opts.LegendOpts(
        is_show=False
    ),
)
wordcloud.render('./charts/图书评论数词云图.html')

在这里插入图片描述

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐