日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

豆瓣读书数据分析实战

發(fā)布時(shí)間:2023/12/16 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 豆瓣读书数据分析实战 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

數(shù)據(jù)爬取請參考:
Python分布式爬蟲實(shí)戰(zhàn) - 豆瓣讀書

本次分析內(nèi)容:

  • 分析所有書籍評分情況
  • 熱門書籍TOP20
  • 書名高頻詞匯
  • 作者出版書數(shù)量TOP20
  • 每年出版書籍?dāng)?shù)量分布
  • 熱評作者TOP20
  • 每年出版最受歡迎的類別
  • 書籍最多的分類TOP20
  • 熱評分類TOP20
  • 為了每段代碼都可復(fù)制直接使用,所以每段代碼都重復(fù)導(dǎo)入一次pyecharts 模塊…

    # 首先導(dǎo)入需要用到的模塊 import pandas as pd import numpy as np import pymysql,re import matplotlib.pyplot as plt %matplotlib inline
    • 讀取數(shù)據(jù)庫數(shù)據(jù)
    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.分析所有書籍評分情況

    • 對評分進(jìn)行分組,并對評分進(jìn)行統(tǒng)計(jì)
    score_count = douban_data.groupby("score")["score"].count()
    • 散點(diǎn)圖
    from pyecharts.charts import Scatter from pyecharts import options as opts from pyecharts.globals import ThemeType # 對評分進(jìn)行分組,并對評分進(jìn)行統(tǒng)計(jì) score_count = douban_data.groupby("score")["score"].count() # 創(chuàng)建散點(diǎn)圖對象,并設(shè)置主題模式為ESSOS scatter = Scatter(init_opts=opts.InitOpts(theme=ThemeType.ESSOS)) # 添加x軸數(shù)據(jù),要求類型為python列表類型 scatter.add_xaxis(score_count.index.tolist()) # 添加標(biāo)簽名和y軸數(shù)據(jù)類型同上 scatter.add_yaxis("score rating",score_count.values.tolist()) # 全局配置 scatter.set_global_opts(# 配置x軸為數(shù)值軸(默認(rèn)為cate類型軸)xaxis_opts=opts.AxisOpts(type_="value"),# 添加可拖動滾動條datazoom_opts=opts.DataZoomOpts(is_show=True) )# 系列配置 scatter.set_series_opts(# 設(shè)置不顯示每個(gè)點(diǎn)上的數(shù)字label_opts=opts.LabelOpts(is_show=False),# 設(shè)置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軸數(shù)據(jù) bar.add_xaxis(score_count.index.tolist()) # 添加y軸數(shù)據(jù)(同樣是列表類型) bar.add_yaxis("score rating",score_count.values.tolist()) bar.set_global_opts(# 不多作解釋了,就是開啟圖片最底下可以拖動的那個(gè)滾動條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.MarkLineItem(type_="min",name="最小值"),opts.MarkLineItem(type_="average",name="平均值") ]) ) bar.render_notebook()

    可以看出評分大部分集中在8.0-8.9之間

    2.熱門書籍TOP20

    • 柱狀圖展示,按熱門評論排行
    # 準(zhǔn)備數(shù)據(jù) datum = douban_data.loc[:,["name","score","rating_count","comment_count"]] temp = datum.sort_values("rating_count",ascending=False)[:20].sort_values("rating_count",ascending=True) # 熱評TOP20的評分 柱狀圖 from pyecharts.charts import Bar,Parallel,Grid from pyecharts import options as opts from pyecharts.globals import ThemeType bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.PURPLE_PASSION)) bar.add_xaxis(temp.name.tolist()) bar.add_yaxis("Score",temp.score.tolist()) bar.set_global_opts(title_opts=opts.TitleOpts(title="評分Top20"),legend_opts=opts.LegendOpts(pos_left="20%") ) bar.set_series_opts(label_opts=opts.LabelOpts(position="right") ) bar.reversal_axis() bar.render_notebook()

    • 平行多維曲線圖
    from pyecharts.charts import Parallel from pyecharts import options as opts import random # 準(zhǔn)備數(shù)據(jù) data = [i.tolist() for i in temp.iloc[:,1:].values] schemas = [{"dim":i,"name":name} for i,name in enumerate(temp.columns[1:])] # 創(chuàng)建多維曲線對象 parallel = Parallel(init_opts=opts.InitOpts(theme=ThemeType.CHALK)) parallel.add_schema(schema=schemas) parallel.add(series_name="name",data=data) parallel.set_global_opts(title_opts=opts.TitleOpts(title="Hot 20") ) parallel.render_notebook()

    3.書名高頻詞匯

    import jieba,re from wordcloud import WordCloud from PIL import Image from collections import Counter # 所有書名合并成一條字符串 names = "".join(datum.name) # 按非字符分割字符串,目的是去除字符以外的標(biāo)點(diǎn)符號 names = "".join(re.split("\W",names)) # 分詞 split_name = jieba.lcut(names) # 為了更好的展示效果,這里把長度為1的詞過濾掉 split_name = [i for i in split_name if len(i) > 1] # 用空格分隔開每個(gè)詞語 words = " ".join(split_name) # 加載圖片 img = np.array(Image.open(r"e:/files/11.jpg")) w = WordCloud(# 注意中文需要配置字體font_path=r"e:/files/PingFang.otf",# 指定生成圖片形狀mask=img ) # 生成詞云 w.generate(words) # 配置圖像大小 plt.figure(figsize=(15,15),dpi=80) # 關(guān)閉軸顯示 plt.axis("off") # 在 jupyter notebook中展示 plt.imshow(w)
    • 最總效果
    • 柱狀圖展示高頻詞TOP20
    count_name = Counter(split_name) word_top20 = count_name.most_common(20) # 柱狀圖 x = [x[0] for x in word_top20] y = [y[1] for y in word_top20] top_word_bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.CHALK)) top_word_bar.add_xaxis(x) top_word_bar.add_yaxis("top20",y) top_word_bar.render_notebook()

    4.作者出版書數(shù)量TOP20

    # 復(fù)制數(shù)據(jù) datum = douban_data.loc[:,["author","name"]] # 刪除空值 datum = datum.loc[datum["author"].notnull()] # 按作者名稱分組,統(tǒng)計(jì)數(shù)量,倒序排序,取前20名 temp = datum.groupby("author").count().sort_values("name",ascending=False)[:20] # 這里再進(jìn)行排序是為了圖片展示時(shí)最大值排第一個(gè),最小值排最后一個(gè),實(shí)屬為了展示效果 temp.sort_values("name",inplace=True) # 柱狀圖(除了要更換數(shù)據(jù),基本繪圖代碼沒什么變化) publish_bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK)) publish_bar.add_xaxis(temp.index.tolist()) publish_bar.add_yaxis("publish",temp.name.values.tolist()) publish_bar.reversal_axis() publish_bar.set_series_opts(# 每條柱子顯示數(shù)值配置# 位置可選# top,left,right,bottom,inside,insideLeft,insideRight# insideTop,insideBottom, insideTopLeft,insideBottomLeft# insideTopRight,insideBottomRightlabel_opts=opts.LabelOpts(position="right") ) publish_bar.render_notebook()

    5.每年出版書籍?dāng)?shù)量分布

    # 老規(guī)矩,先復(fù)制需要的數(shù)據(jù) datum = douban_data.loc[:,["name","date"]] # 刪除空值數(shù)據(jù) datum = datum.loc[datum["date"].notnull()] # 按年份分組,排序,取前50個(gè)數(shù)據(jù) temp = datum.groupby("date").count().sort_values("name",ascending=False)[:50] # 按年份排序 temp.sort_values("date",inplace=True) # 繪制曲線圖 from pyecharts.charts import Line publish_book_line = Line(init_opts=opts.InitOpts(theme=ThemeType.ESSOS)) publish_book_line.add_xaxis(temp.index.tolist()) publish_book_line.add_yaxis("Quantity for every year",temp.name.values.tolist()) publish_book_line.set_global_opts(title_opts=opts.TitleOpts(title="Publish books of year"),datazoom_opts=opts.DataZoomOpts(is_show=True), ) publish_book_line.set_series_opts(markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="max",name="最大值"),opts.MarkLineItem(type_="min",name="最小值"),opts.MarkLineItem(type_="average",name="平均值") ]) ) publish_book_line.render_notebook()

    6.熱評作者TOP20

    # 復(fù)制數(shù)據(jù) datum = douban_data.loc[:,["score","author","rating_count"]] # 刪除作者為空的數(shù)據(jù) datum = datum.loc[datum["author"].notnull()] # 刪除評分為空的數(shù)據(jù) datum = datum.loc[datum["score"].notnull()] # 按作者名稱分組取評分均值 temp = datum.groupby("author").mean() # 刪除評分均值為空的行 temp = temp.loc[temp.score.notnull()] top20 = temp.sort_values("rating_count",ascending=False)[:20] top20.sort_values("rating_count",ascending=False) # 柱狀圖 hot_rating_bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.PURPLE_PASSION)) hot_rating_bar.add_xaxis(top20.index.tolist()) hot_rating_bar.add_yaxis("Rating agerage",top20.rating_count.round().tolist())hot_rating_bar.set_series_opts(# 標(biāo)簽的位置。可選# top,left,right,bottom,inside,insideLeft,insideRight# insideTop,insideBottom, insideTopLeft,insideBottomLeft# insideTopRight,insideBottomRightlabel_opts=opts.LabelOpts(position="insideRight") ) hot_rating_bar.reversal_axis() hot_rating_bar.render_notebook()

    7.每年出版最受歡迎的類別

    # 復(fù)制數(shù)據(jù) datum = douban_data.loc[:,["date","rating_count","type","name"]] # 刪除年份和總評論空值 datum.dropna(axis=0,inplace=True) temp = datum.groupby("date").max().sort_values("rating_count",ascending=False)[:20] temp.sort_values("date",ascending=False)

    8.書籍最多的分類TOP20

    # 復(fù)制資料 datum = douban_data.loc[:,["type","name"]] temp = datum.groupby("type").count().sort_values("name",ascending=False)[:20] # 柱狀圖 from pyecharts.charts import Bar from pyecharts import options as opts from pyecharts.globals import ThemeType type_top20_bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK)) type_top20_bar.add_xaxis(temp.index.tolist()) type_top20_bar.add_yaxis("Most books categories",temp.name.values.tolist()) type_top20_bar.set_global_opts(datazoom_opts=opts.DataZoomOpts(is_show=True) ) type_top20_bar.set_series_opts(# 關(guān)閉標(biāo)簽顯示label_opts=opts.LabelOpts(is_show=False),# 設(shè)置標(biāo)記選項(xiàng)markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max",name="最大值"),opts.MarkPointItem(type_="min",name="最小值"),opts.MarkPointItem(type_="average",name="平均值")]) ) type_top20_bar.render_notebook()

    9.熱評分類TOP20

    # 復(fù)制資料 datum = douban_data.loc[:,["type","rating_count"]] # 刪除空值 datum.dropna(inplace=True) temp = datum.groupby("type").mean().round(2).sort_values("rating_count",ascending=False)[:20] # 制圖 from pyecharts.charts import Bar from pyecharts import options as opts from pyecharts.globals import ThemeType rating_top20_bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.ESSOS)) rating_top20_bar.add_xaxis(temp.index.tolist()) rating_top20_bar.add_yaxis("Hot type top 20",temp.rating_count.tolist()) rating_top20_bar.set_global_opts(title_opts=opts.TitleOpts(title="熱評分類TOP20"),datazoom_opts=opts.DataZoomOpts(is_show=True) ) rating_top20_bar.set_series_opts(markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="max",name="最大值"),opts.MarkLineItem(type_="min",name="最小值"),opts.MarkLineItem(type_="average",name="平均值")]) ) rating_top20_bar.render_notebook()

    最后總結(jié):
    1.大部分書籍評分都在8.0-8.9之間
    2.評論最多的書包括追風(fēng)箏人、解憂的雜貨店、白夜行等,評分都在8.1分以上
    3.書名中高頻熱詞前3甲中國、世界、藝術(shù)
    4.出書前3甲第一名是加拿大人士亦舒先生,出書243本(可能還不止),五體投地啊!
    5.可以看出每年出書量都在穩(wěn)步上漲
    6.作者熱評前3甲:[清]曹雪芹著/高鶚續(xù)、柴靜、[美]卡勒德·胡賽尼
    7.最多書籍的分類前3:建筑,詩歌,數(shù)學(xué)
    8.評論最高實(shí)屬中國文學(xué)類
    最后附上數(shù)據(jù)庫文件
    鏈接:https://pan.baidu.com/s/19VNdu7n8F7JpuqXQYPbPDg
    提取碼:nlv5

    總結(jié)

    以上是生活随笔為你收集整理的豆瓣读书数据分析实战的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。