python#数据分析#当当网畅销图书榜单
pandas+pyecharts当当网畅销图书榜单数据可视化分析
·
读取数据:
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')
更多推荐
已为社区贡献3条内容
所有评论(0)