数据爬取请参考:
Python分布式爬虫实战 - 豆瓣读书
本次分析内容:
- 分析所有书籍评分情况
- 热门书籍TOP20
- 书名高频词汇
- 作者出版书数量TOP20
- 每年出版书籍数量分布
- 热评作者TOP20
- 每年出版最受欢迎的类别
- 书籍最多的分类TOP20
- 热评分类TOP20
为了每段代码都可复制直接使用,所以每段代码都重复导入一次pyecharts 模块…
# 首先导入需要用到的模块
import pandas as pd
import numpy as np
import pymysql,re
import matplotlib.pyplot as plt
%matplotlib inline
- 读取数据库数据
conn = pymysql.connect("localhost","root","123456","douban")
douban_data = pd.read_sql("select * from information",conn)
- 去重
douban_data.drop_duplicates("name",keep="first",inplace=True)
1.分析所有书籍评分情况
- 对评分进行分组,并对评分进行统计
score_count = douban_data.groupby("score")["score"].count()
- 散点图
from pyecharts.charts import Scatter
from pyecharts import options as opts
from pyecharts.globals import ThemeType
# 对评分进行分组,并对评分进行统计
score_count = douban_data.groupby("score")["score"].count()
# 创建散点图对象,并设置主题模式为ESSOS
scatter = Scatter(init_opts=opts.InitOpts(theme=ThemeType.ESSOS))
# 添加x轴数据,要求类型为python列表类型
scatter.add_xaxis(score_count.index.tolist())
# 添加标签名和y轴数据类型同上
scatter.add_yaxis("score rating",score_count.values.tolist())
# 全局配置
scatter.set_global_opts(
# 配置x轴为数值轴(默认为cate类型轴)
xaxis_opts=opts.AxisOpts(type_="value"),
# 添加可拖动滚动条
datazoom_opts=opts.DataZoomOpts(is_show=True)
)
# 系列配置
scatter.set_series_opts(
# 设置不显示每个点上的数字
label_opts=opts.LabelOpts(is_show=False),
# 设置3条虚线 分别是最大值,最小值,平均值
markline_opts=opts.MarkLineOpts(data=[
opts.MarkLineItem(type_="max",name="最大值"),
opts.MarkLineItem(type_="min",name="最小值"),
opts.MarkLineItem(type_="average",name="平均值")
])
)
# 生成图像,可以使用render(patch="c:\123.html") 生成HTML文件
scatter.render_notebook()
- 使用柱状图展示更为清晰
from pyecharts.charts import Bar
from pyecharts import options as opts
from pyecharts.globals import ThemeType
# 这次配置不一样的主题
bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.CHALK))
# 添加x轴数据
bar.add_xaxis(score_count.index.tolist())
# 添加y轴数据(同样是列表类型)
bar.add_yaxis("score rating",score_count.values.tolist())
bar.set_global_opts(
# 不多作解释了,就是开启图片最底下可以拖动的那个滚动条
datazoom_opts=opts.DataZoomOpts(is_show=True)
)
bar.set_series_opts(
label_opts=opts.LabelOpts(is_show=False),
markline_opts=opts.MarkLineOpts(data=[
opts.MarkLineItem(type_="max",name="最大值"),
opts