美文网首页数据科学与R语言R语言与统计分析
数据分析小项目(使用rvest、ggplot2)——豆瓣图书 T

数据分析小项目(使用rvest、ggplot2)——豆瓣图书 T

作者: 74f7cef6685c | 来源:发表于2018-12-25 18:12 被阅读1次

    前言:用rvest包爬取豆瓣图书Top250榜单数据,然后做简单的数据分析,练习一下用ggplot2包画图。

    豆瓣读书官网上有个豆瓣图书Top250,依次展示了250本图书,根据豆瓣网的介绍:

    豆瓣用户每天都在对“读过”的书进行“很差”到“力荐”的评价,豆瓣根据每本书读过的人数以及该书所得的评价等综合数据,通过算法分析产生了豆瓣图书 Top 250。

    打开榜单,页面是这样的:

    基本上都是大家很熟悉的书,很多书就算你没看过,多少也听说过书名。

    为了更好地了解上榜图书,我用RStudio写了代码,爬下了榜单图书的数据。

    先观察一下页面,发现一共10个页面,每一页上25本书, 第二页网址为:https://book.douban.com/top250?start=25,每个页面的网址只有最后的数字不同。

    爬数据的代码如下:

    library("rvest")

    library("xml2")          #加载用到的包

    book <-data.frame()           #先建立一个空的数据框

    for (i in 1:10){                  #写一个循环,批量爬取10个页面的数据

      url <- paste0("https://book.douban.com/top250?start=",(i-1)*25) #paste0()用来连接字符串

      web <- read_html(url,encoding="UTF-8")

      name <- web %>% html_nodes("tr>td:nth-child(2)>div.pl2>a") %>% html_text() #爬取书名

      info <-web %>% html_nodes("tr>td:nth-child(2)>p.pl") %>% html_text()    #爬取图书具体信息,包括作者、出版社、出版时间等

      point<-web %>% html_nodes("div.star.clearfix>span.rating_nums") %>% html_text() %>% as.numeric()  #爬取评分

      value<-web %>% html_nodes("div.star.clearfix>span.pl") %>% html_text() %>% as.character()    #爬取评分人数

      bookinfo <-data.frame(name,info,point,value)

      book <-rbind(book,bookinfo)

    }

    write.csv(book,file="E:/douban_book.csv")    #保存数据

    csv文件打开是这样的:

    直接在excel里面对数据进行清洗,数据分列、去除冗余字符等,再将清洗完成的数据保存为csv格式。

    接下来就可以用ggplot2包来画图分析。

    library("sqldf")

    library("ggplot2") #加载所用到的包

    book <- read.csv("E:/doubanbook250.csv") #打开文件

    head(book,10)#查看数据前10行

    数据一共包含八个属性,书名(name)、作者国籍(nation)、作者(author)、译者(translator)、出版社(press)、评分(rating)、评价人数(comments)、出版年份(year)。

    1

    看一下这些书作者的国籍分布。

    ggplot(book,aes(x=nation)) + geom_bar() #画频数分布条形图

    超过一半的书作者都是中国人,将国籍为“中”的数据筛选出去,看一下榜单上外国图书情况。

    用subset()筛选出作者不是中国人的图书,然后画一个频数分布条形图。

    foreign_book <- subset(book,nation !="中")   

    ggplot(foreign_book,aes(x=nation)) + geom_bar()

    美国、英国、日本和法国比较瞩目。

    2

    画箱型图,看一下榜单上不同国家图书的评分情况。

    ggplot(sqldf("select*from book where nation in ('中','英' ,'美' ,'日','法')")

           ,aes(x=factor(nation),y=rating)) + geom_boxplot()

    榜单上英国图书的平均评分是最高的,其次是中国、美国。

    3

    rating_order <- sqldf("select * from book order by rating desc")

    head(rating_order,10)$name  #查看评分最高的十本书

    按照评分对数据做降序处理,显示出评分最高的十本书,分别是《红楼梦》、《海贼王》、《活着》、《三体Ⅱ: 黑暗森林 》、《飘》、《1984》、《 一九八四·动物农场》、《 冰与火之歌: 权力的游戏》、《百年孤独》、《三体Ⅲ: 死神永生》。  

    4

    comments_order <- sqldf("select * from book order by comments desc")

    head(comments_order,10)$name  #查看评价人数最高的十本书

    评价人数一定程度上也能说明图书目前的火热程度,筛选出评价人数最多的十本书,分别是《追风筝的人 》、《 解忧杂货店 》、《小王子 》、《白夜行》、《围城 》、《挪威的森林》、《三体: “地球往事”三部曲之一》、《嫌疑人X的献身》、《百年孤独》、《 看见 》。

    5

    ggplot(book,aes(x=year)) + geom_freqpoly(binwidth = 1) 

     #出版年份频数多边形

    TOP榜单上的图书大多都是在2000年到2015年之间出版的。

    6

    press_group <- sqldf("select press,count(*) as press_num from book group by press ")

    press_group_top <- sqldf("select * from press_group where press_num > 9")

    press_group_top

    结果如下:

                         press press_num

    1          上海译文出版社         23

    2          人民文学出版社         36

    3            南海出版公司         15

    4  生活·读书·新知三联书店         12

    TOP榜单中的“明星出版社”分别是人民文学出版社、上海译文出版社、南海出版公司 和生活·读书·新知三联书店。榜单中超过10%的书都是由人民文学出版社出版的。

    7

    author_top <- sqldf("select author,count(*) as author_num from book group by author")

    sqldf("select * from author_top  where author_num > 3 order by author_num desc")

    结果如下:

                  author author_num

    1          村上春树           9

    2        J. K. 罗琳           7

    3            王小波           7

    4              金庸           6

    5          东野圭吾           5

    6              三毛           5

    7   阿加莎·克里斯蒂           4

    8            刘慈欣           4

    9              幾米           4

    10           张爱玲           4

    11             鲁迅           4

    12           龙应台           4

    看一下哪些作者上榜的图书数量比较多,结果表明这250本书,村上春树一人就贡献了9本

    其次是J. K. 罗琳,上榜了7本,王小波是7本。其他如金庸、东野圭吾、 三毛、阿加莎·克里斯蒂 、刘慈欣,都是大家耳熟能详的名字。

    总结:用rvest包爬取豆瓣图书Top250榜单的数据,并做了简单的分析,主要练习了ggplot2画图,还使用了sqldf。在使用R语言分析数据时,可以借助sqldf的帮助直接编写sql语句来处理数据,十分方便快捷。

    相关文章

      网友评论

        本文标题:数据分析小项目(使用rvest、ggplot2)——豆瓣图书 T

        本文链接:https://www.haomeiwen.com/subject/psfqlqtx.html