Python入门买哪本书?分析6000本Python书籍告诉你答案!
(图片来源于网络)
大家好,我是辰哥~
上面这张图是今年9月TIOBE 统计编程语言排行榜,
可以看到Python已经跃居第二,
一旦超越c语言排名第一,将会成为编程语言发展史的一个重要时刻
现在也越来越多的人在开始学习Python
相信大家在学习Pythond的时候都会面临一个这样的问题
应该买哪本python书?
辰哥通过采集6000本网上在售的Python书籍
包括(书名-价格-出版社-出版时间-销量)
通过可视化分析看看哪本书籍是适合你的?是销量?还是书名?还是值得信赖的出版社?还是价格区间?
采集数据
共有100页,每页60条
一共6000条数据(本书)
分析网页
每一页的60本书籍信息都在一个个的li标签中
比如这里本书籍,查看网页源代码可以对应的书名存在哪个网页标签等
大图
url="http://search.dangdang.com/?key=python&act=input&page_index="+str(page)
res = requests.get(url,headers=headers)
text = res.text
selector = etree.HTML(text)
li_list = selector.xpath('//*[@id="component_59"]/li')
print("page="+str(page),len(li_list))
for i in li_list:
title = i.xpath('.//p[@class="name"]/a/@title')[0]
price = i.xpath('.//p[@class="price"]/span/text()')[0].replace("¥","")
date = i.xpath('.//p[@class="search_book_author"]/span[2]/text()')
out = i.xpath('.//p[@class="search_book_author"]/span[3]/a/text()')
sale = i.xpath('.//p[@class="search_star_line"]/a/text()')
其中page分别1,2,3,4...,表示第几页
最终采集了6000本书
可视化分析
A.书名词云图
从csv中提取出书名一列,进行绘制词云图
可以看到大部分书名都含有入门以及编程这两个关键词
辰哥猜测是这类命名对于小白来说可能更加有吸引力
此外,目前python在机器学习(人工智能)领域非常热门,相关书籍也随之增加
接着是爬虫、书籍分析、自动化办公等
B.每年出版python书籍数量
从csv中读取出出版时间一列
统计每一本书的出版年份
绘制折线图
time = df["出版时间"].tolist()
dict = {}
for j in [str(i)[0:4] for i in time]:
if(j!="nan"):
try:
dict[str(j)] = dict[str(j)] + 1
except:
dict[str(j)] = 1
dict = sorted(Counter(dict).items(), key=lambda x: x[0], reverse=False)
key = [i[0] for i in dict]
value = [i[1] for i in dict]
c = (
Line()
.add_xaxis(key)
.add_yaxis("每年出版Python书籍数量", value, is_smooth=True)
.set_global_opts(title_opts=opts.TitleOpts(title="数量(Python研究者)"))
.render("line_smooth.html")
)
可以看到在09年之前,每年出版的Python书籍只有十几到几十本只有
在2010年突发猛增到311本。
辰哥查了一下原因:
2010是python第二次火遍全球,是因为OpenStack是一以Python编程语言编写的项目,Python在2010再次火了起来
(OpenStack具体是什么,大家都搜索了解一下)
随后有开始沉默了下去,到2016年至现在,Python的热度就一直不下,迅速猛增~~~
可以看到通过每年出版的Python书籍数量来看,python一直以来的火热程度及增长趋势
C.出版社出版python书籍数量排名
从csv中读取出出版社一列
统计每一本书的属于哪家出版社并累计
out = df["出版社"].tolist()
dict = {}
for j in [str(i) for i in out]:
if(j!="nan"):
try:
dict[str(j)] = dict[str(j)] + 1
except:
dict[str(j)] = 1
dict = sorted(Counter(dict).items(), key=lambda x: x[1], reverse=True)
出版Python书籍的出版社太多了
这里辰哥只取前10名的出版进行绘制柱状图
D.Python书籍售价区间
从csv中读取出价格一列
统计价格区间
30以下/[30-50)/[50-70)
[70-100)/[100-120)/[120-150)
[150以上)
out = df["价格"].tolist()
dict = {"30以下":0,"[30-50)":0,"[50-70)":0,
"[70-100)":0,"[100-120)":0,"[120-150)":0,
"[150以上":0}
for j in out:
if(j!="nan"):
if(int(j)<30):
dict['30以下'] = dict['30以下']+1
elif((int(j)<50)):
dict['[30-50)'] = dict['[30-50)'] + 1
elif ((int(j) < 70)):
dict['[50-70)'] = dict['[50-70)'] + 1
elif ((int(j) < 100)):
dict['[70-100)'] = dict['[70-100)'] + 1
elif ((int(j) < 120)):
dict['[100-120)'] = dict['[100-120)'] + 1
elif ((int(j) < 150)):
dict['[120-150)'] = dict['[120-150)'] + 1
else:
dict['[150以上'] = dict['[150以上'] + 1
dict = sorted(Counter(dict).items(), key=lambda x: x[1], reverse=True)
key = [i[0] for i in dict]
value = [i[1] for i in dict]
从图上也可以看到,价格区间越往后,销量也低(30元以下除外)
价格在50-70左右正合适,因此销量相对较佳
最后
1.本文分享了如何进行采集数据,以及对采集的数据进行可视化分析
2.针对6000本Python书籍销量等情况进行分析,分析结果仅出自个人观点,仅供参考
3. 本文仅供学习参考,不做它用。
4.点击【在看】,即可找辰哥领取本文数据集和完整源码
2021-09-28
2021-09-27
2021-09-26