在数据分析师的分析中豆瓣的书那些值得读

最近总是有人问我有什么书好推荐看看,特烦。但是看到那么多人问,看来挺多人有这个需求,便想了一下,如何通过数据分析找到值得看的书。通过爬取某个标签例如产品,运营获取对应已经打了标签的书,获取书对应的评分以及评价的用户数,通过获取评分最高的30本书和评价人数最多的30本书进行交集的处理,获取出来的综合指数比较高,得到的结果就是评价人数比较多且评分高的书。小编只是对产品,运营,心理学,python,数据分析,算法 这6个方面感兴趣,分享一下这六个方面的值得读的书,想知道其他方面的,也可以在评论下面发一下。

1. 处理过程

爬虫主要用到python的scrapy爬虫框架,下面是爬取数据的处理逻辑

class doubanSpider(scrapy.Spider):
    name = "douban"
    #要爬取的链接
    start_urls = [
        u"https://book.douban.com/tag/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90"
    ]

    def parse(self, response):
        #获取列表的结构
        list=response.xpath('//*[@id="subject_list"]/ul/li')
        for info in list:
            book_name=info.xpath('div[2]/h2/a/text()').extract_first()
            url=info.xpath('div[2]/h2/a/@href').extract_first()
            score=info.xpath('div[2]/div[2]/span[2]/text()').extract_first()
            count=info.xpath('div[2]/div[2]/span[3]/text()').extract_first()
            l=JobItemLoad(JobItem())
            if score is not None:
                l.add_value('score', score.strip())
            if count is not None:
                l.add_value('count', count.strip())
            l.add_value('book_name', book_name.strip())
            l.add_value('url', url.strip())
            yield l.load_item()
        #获取下一页的链接
        next_url=response.css('#subject_list > div.paginator > span.next > a::attr(href)').extract_first();
        if next_url:
            yield scrapy.Request('https://book.douban.com'+next_url,callback=self.parse)

爬取后的格式如下:


部分结果

对爬取后的数据进行处理:

import pandas as pd

def fromCsv(fileName):
    data = pd.read_csv(fileName,encoding = "ISO-8859-1")
    return data
def toCsv(data,file_name):
    data.to_csv(file_name, encoding="ISO-8859-1")
if __name__ == '__main__':
    #要处理的文件的名称
    csv_names=[u'douban_analysis',u'douban_arithmetic',u'douban_psychology',u'douban_operate',u'douban_prod',u'douban_python']
    for name in csv_names:
        #从csv文件读取数据
        data=fromCsv(f"{name}.csv")
        #分别按评分,数量进行排序后,获取前30个数据
        count_df=data.sort_values('count', ascending=False).iloc[0:30]
        score_df=data.sort_values('score', ascending=False).iloc[0:30]
        #对两个数据进行交集的处理获取结果
        result_df=count_df[count_df["book_name"].isin(score_df['book_name'].tolist())]
        toCsv(result_df.sort_values('score', ascending=False), f"{name}_result.csv")

2. 结果

2.1 产品

书名 评价人数 评分
浪潮之巅 19783 9.1

2.2 运营

书名 评价人数 评分
孵化皮克斯 336 8.9
我看电商 1058 8.3
SEO实战密码 764 8.3
数据化管理 411 8.3
精益数据分析 563 8.2
运营之光 1939 8.1
你凭什么做好互联网 617 8.1

2.3 心理学

书名 评价人数 评分
对伪心理学说不 3297 9.2
社会性动物 5564 9.1
灯塔 4526 9.1
社会心理学 11765 9

2.4 python

书名 评价人数 评分
流畅的Python 291 9.4
Hands-On Machine Learning with Scikit-Learn and TensorFlow 237 9.3
Python编程:从入门到实践 1000 9.1
Python编程快速上手 359 9
A Byte of Python 1104 8.7
Python源码剖析 708 8.7
Flask Web开发:基于Python的Web应用开发实战 478 8.7
Python Tutorial 193 8.7
Python Cookbook 341 8.6
Dive Into Python 3 175 8.6
Think Python 218 8.3

2.5 数据分析

书名 评价人数 评分
The Elements of Statistical Learning 509 9.5
概率论与数理统计 569 9.4
行为科学统计 454 9.4

2.6 算法

书名 评价人数 评分
具体数学(英文版第2版) 813 9.5
算法(第4版) 846 9.4
计算机程序设计艺术(第1卷) 449 9.4
算法导论(原书第2版) 4788 9.3
数据结构 1235 7.1

3. 结论

其中产品,心理学 在评分前30,评价人数前30的交集为0,产品是调整为前50的数据,心理学是调整为前100的数据,说明偏主观的书的综合评分的可信度比技术类的书差一些。

你可能感兴趣的:(在数据分析师的分析中豆瓣的书那些值得读)