最近总是有人问我有什么书好推荐看看,特烦。但是看到那么多人问,看来挺多人有这个需求,便想了一下,如何通过数据分析找到值得看的书。通过爬取某个标签例如产品,运营获取对应已经打了标签的书,获取书对应的评分以及评价的用户数,通过获取评分最高的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的数据,说明偏主观的书的综合评分的可信度比技术类的书差一些。