基于Pandas和PyEcharts的当当网图书信息可视化分析
1 绘制python图书封面的照片墙
import math
import os
from PIL import Imagedef makePicturesWall(picdir):picslist = os.listdir(picdir)num_pics = len(picslist)size = 64line_numpics = int(math.sqrt(num_pics))picwall = Image.new('RGBA', (line_numpics * size, line_numpics * size))x = 0y = 0for pic in picslist:img = Image.open(os.path.join(picdir, pic))img = img.resize((size, size), Image.ANTIALIAS)picwall.paste(img, (x * size, y * size))x += 1if x == line_numpics:x = 0y += 1print('[INFO]: Generate pictures wall successfully......')picwall.save('picwall.png')if __name__ == '__main__':imgDir = '/home/kiosk/PycharmProjects/Spider/mySpider/img/full'makePicturesWall(imgDir)
- 照片墙效果显示如下:
2 图书的价格分布南丁格尔图
import pandas as pd
from pyecharts import Piedef load_data(filename):""":param filename: 加载数据的文件名:return:prices: 书籍的价格null_price_count: 空数据的个数"""# 1). 读取csv文件;df = pd.read_csv(filename)# 2). 删除缺失值;# axis=0:----表示轴向。默认为0,表示删除所有含有空值的行# how='any'----表示删除的方式。默认为any。为any的时候,表示只要存在缺失值就删除。# 为all的时候,表示全部是缺失值才能删除。all_count = df.shape[0]prices = df.price.dropna(axis=0, how='any')data_count = prices.shape[0]null_price_count = all_count - data_countprint("缺失值数量为:", null_price_count)# 3). 对书籍的价格数据进行预处理, 转换成float类型;prices = [float(price.strip('¥')) for price in prices]return prices, null_price_countdef data_cut(prices):"""根据书籍价格的区域进行切分, 返回切分后的统计数据;:param prices::return:"""# 设置切分区域priceBins = [0, 50, 100, 150, 200, 10000]# 设置切分后对应标签priceLabels = ['50元以下', '50-100', '100-150', '150-200', '200以上']# 利用pd.cut进行数据离散化切分# pd.cut(price, bins=5, right=True, labels=None, retbins=False, precision=3, include_lowest=False)cut_prices = pd.cut(prices, bins=priceBins, labels=priceLabels, include_lowest=True).value_counts()return cut_pricesdef show_picture(cut_prices):pie = Pie("python书籍价格分布")pie.add("", cut_prices.keys(), cut_prices.values(),# center为调整饼图圆心坐标center=[50, 50],# is_random是否随即排列颜色列表(bool)is_random=False,# radius为半径,第一个为内半径,第二个是外半径radius=[30, 75],# rosetype为是否展示成南丁格尔图# 'radius' 圆心角展现数据半分比,半径展现数据大小# 'area' 圆心角相同,为通过半径展现数据大小rosetype='area',is_legend_show=False,# is_label_show为是否显示标签(各个属性的数据信息)is_label_show=True,# label_text_size为调整标签字体大小label_text_size=18)pie.render()if __name__ == '__main__':filename = 'items.csv'prices, null_price_count = load_data(filename)cut_prices = dict(data_cut(prices))cut_prices['缺失值'] = null_price_countshow_picture(cut_prices)
- 效果显示如下:
3 评论数量TOP10的图书条形图
import pandas as pddef load_data(filename):"""加载并处理数据, 返回根据评论数排序好的数据变量df;:param filename: 文件名:return:"""df = pd.read_csv(filename)# 根据评论数量进行排序;sorted_df = df.sort_values(by='comment_num')return sorted_dfdef show_picture(df):"""绘制条形图:param df: 根据评论排序好的数据:return:"""# 1). 获取评论量排前10的书籍名称和评论数量;commentTop10 = df.tail(10)[['title', 'comment_num']][::-1]# 2). 绘制条形图from pyecharts import Barbar = Bar("Python相关图书评论数量分布TOP10", title_text_size=24)bar.add("",# x轴commentTop10.title,# y轴commentTop10.comment_num,# 显示label信息is_label_show=True,# bar_category_gap调整的是柱形间距bar_category_gap='70%',# 标记虚线: 此处标出最大值最小值的虚线。mark_line=["min", "max"],# 标记点: 此处标出平均值的地方。mark_point=["average"],# 横、纵坐标值偏转的角度,当坐标值过于密集时,可采用此方法。xaxis_rotate=30,yaxis_rotate=30,# 绘图为竖向条形图的设置;# is_convert=True)bar.render()if __name__ == '__main__':filename = 'items.csv'sorted_df = load_data(filename)show_picture(sorted_df)
- 条形图效果展示:
注意:
此处的图书名称太长, 显示不好看, 可以对标题进一步处理,只提取书名的前6个字符即可.
3 书籍简介词云可视化分析
import re
from collections import Counter
import pandas as pd
import jieba
from pyecharts import WordClouddef load_data(filename):"""加载与预处理数据:param filename::return:"""# 1). 读取当当网数据信息;df = pd.read_csv(filename)before_drop_count = df.shape[0]# 2). 删除书籍简介的缺失值descs = df.introduction.dropna()after_drop_count = descs.shape[0]null_num = before_drop_count - after_drop_countprint('缺失值数量', null_num)# 3). 拼接所有的书籍简介为一个字符串并清洗数据(删除所有的空格并将大写字母全部转换为小写字母;)all_descs = "".join(descs)# 将所有的空格和非字母数字下划线的字符串替换为空;all_descs = re.sub(r'[\s\W]', '', all_descs).lower()# 4). 中文分词切割与统计;cut_descs = list(jieba.cut(descs))counter_descs = Counter(cut_descs)counter_descs = {key: value for key, value in counter_descs.items() if len(key) != 1}return counter_descsdef show_picture(counter_descs):""":param counter_descs: 切割并统计好的书籍简介数据(类似字典格式):return: """wordcloud = WordCloud("python书籍评论词云统计", width=1300, height=1000)wordcloud.add("",# word数据,词云图中显示的词语;counter_descs.keys(),# 词语权重,相当于词频;counter_descs.values(),# 生成的词云图轮廓, 有'circle', 'cardioid', 'diamond', 'triangle-forward', 'triangle', 'pentagon', 'star'可选shape='star',# 单词间隔,默认为20word_gap=50,# 单词字体大小范围,默认为[12,60]word_size_range=None,# 旋转单词角度,默认为45; 仅当 shape 为默认的'circle'时 rotate_step 参数才生效# rotate_step=60)wordcloud.render()if __name__ == '__main__':filename = 'items.csv'descs = load_data(filename)show_picture(descs)
- 效果展示如下:
基于Pandas和PyEcharts的当当网图书信息可视化分析相关推荐
- scrapy框架的简单使用——爬取当当网图书信息
** Scrapy爬取当当网图书信息实例 --以警察局办案为类比 ** 使用Scrapy进行信息爬取的过程看起来十分的复杂,但是他的操作方式与警局办案十分的相似,那么接下来我们就以故事的形式开始Scr ...
- Python爬虫实战+Scrapy框架 爬取当当网图书信息
1.环境准备 1.在python虚拟环境终端使用 pip install scrapy下载scrapy依赖库 2.使用scrapy startproject book创建scrapy心目工程 3.使用 ...
- python 爬虫 爬取当当网图书信息
初次系统的学习python,在学习完基本语法后,对爬虫进行学习,现在对当当网进行爬取,爬取了基本图书信息,包括图书名.作者等 import requests from time import slee ...
- 爬虫入门经典(二十四) | 爬取当当网图书信息并进行数据清洗
大家好,我是不温卜火,是一名计算机学院大数据专业大三的学生,昵称来源于成语-不温不火,本意是希望自己性情温和.作为一名互联网行业的小白,博主写博客一方面是为了记录自己的学习过程,另一方面是总结自己 ...
- Python基于Matplotlib实现双Y轴绘图——图书销售数据可视化分析
今天遇上一个小的需求就是需要绘制双轴的图,这个之前使用excel的话是可以很快绘制出来的,但是基于代码实现的话好像还么怎么用过,所以这里研究了下,绘制好后,分享记录一下,首先看下数据: 主要是不同种类 ...
- Redis-Scrapy分布式爬虫:当当网图书为例
Scrapy-Redis分布式策略: Scrapy_redis在scrapy的基础上实现了更多,更强大的功能,具体体现在: reqeust去重,爬虫持久化,和轻松实现分布式 假设有四台电脑:Windo ...
- python爬虫之静态网页(以当当网图书畅销榜榜为例)
在编写爬虫代码时,将网页分为静态网页和动态网页两种,不同类型的网页数据有着不同的处理办法,这篇文章简述爬取静态网页的方法,以当当网的图书销量为例,使用爬虫技术可以获得网页的页面数据并且自动生成exce ...
- 使用selenium爬取当当网图书
1.目标 利用Selenium抓取当当网图书并用正则表达式获取到得到商品的图片.名称.价格.评论人数信息. 2.开发环境 python2.7 +windows10 +pycharm 3.页面分析 如图 ...
- Scrapy爬取当当网图书销售前100
scrapy爬取当当网图书畅销榜 一.采集任务 爬取当当网图书畅销榜信息,获取热销图书前500相关数据. 二.网页解析 1. 打开当当网,按照图书榜>图书畅销榜 进入当当网图书畅销榜[http: ...
最新文章
- mongDB的常用操作总结
- 辞九门回忆用计算机,辞九门回忆(单轨,曲速70,适合UTAU调教;midishow首发)...
- mysql 删除重复数据_MySQL查找和删除重复数据
- 7、Flask实战第7天:Jinjia2模板
- leetcode-python-优先级队列与时间复杂度
- 适用于python机器学习与实践的twenty_newsgroups.py文件内容
- [Java基础]反射概述
- maven 结合idea入门
- 【资源下载】DeepMindUCL深度学习与强化学习进阶课程
- android 编译宏,android 添加全局变量宏开关的三种方式
- 浅析计算机应用管理及前景,论计算机应用技术的现状及前景
- Python 数据可视化之matpotlib画图
- bleeding edge是什么意思
- 库存明细帐处理示例(包含结存数).sql
- 汉高2020财年第三季度实现强劲的有机销售额增长,增幅达3.9%
- 我制作了python脚本自动抢购淘宝秒杀产品,学会优先享受双十一福利
- 华为机试真题 C++ 实现【最短木板长度】【100%通过率】【2022.11 Q4 新题】
- java.lang.RuntimeException:Unable to start activity ComponentInfo{com.meizu.beautify/com.my.viewc.Ma
- cxf webservice接口
- debian之网易云音乐的安装