基于爬取百合网的数据,用matplotlib生成图表
爬取百合网的数据链接:http://www.cnblogs.com/YuWeiXiF/p/8439552.html
总共爬了22779条数据。第一次接触matplotlib库,以下代码参考了matplotlib官方文档:https://matplotlib.org/users/index.html。
数据查询用到了两个方法:getSexNumber(@sex varchar(2),@income varchar(30))、gethousingNumber(@sex varchar(2),@housing varchar(6))来简化查询语句的长度,代码如下:
1 go 2 create function getSexNumber(@sex varchar(2),@income varchar(30)) 3 returns int 4 as 5 begin 6 return(select count(id) from users where sex = @sex and income = @income) 7 end 8 go 9 go 10 create function gethousingNumber(@sex varchar(2),@housing varchar(6)) 11 returns int 12 as 13 begin 14 return(select count(id) from users where sex = @sex and housing = @housing) 15 end 16 go
以下代码为SQL Server 数据库操作:
1 #__author: "YuWei" 2 #__date: 2018/2/11 3 import numpy as np 4 import matplotlib.pyplot as plt 5 import pymssql 6 7 def db(sql): 8 """ 9 数据库相关操作 10 11 :param sql: sql语句 12 :return: 查询的结果集,list封装 13 """ 14 conn = pymssql.connect(host='localhost', user='sa', password='123456c', database='Baihe', charset="utf8") 15 cur = conn.cursor() 16 cur.execute(sql) 17 row = cur.fetchone() # 指向结果集的第一行, 18 data = [] # 返回的list 19 while row: 20 rows = list(row) 21 for i in range(len(rows)): # 针对rows的每项编码 22 try: 23 rows[i] = rows[i].encode('latin-1').decode('gbk') 24 except AttributeError:pass 25 data.append(rows) # 向data加数据 26 row = cur.fetchone() # 27 print(data) 28 cur.close() 29 conn.close() 30 return data
生成各工资段人数占总人数比图:
1 def builder_income_ratio(): 2 """ 3 生成各工资段人数占总人数比图 4 5 :return: 无 6 """ 7 data_list = db("select income,count(id) from users group by income") 8 income_data_list = [] # 数据 9 income_labels_list = [] # 图例 10 for data in data_list: 11 income_data_list.append(data[1]) 12 income_labels_list.append(data[0]) 13 income_data_list.remove(income_data_list[6]) # 删掉不要的数据 14 income_labels_list.remove(income_labels_list[6]) # 删掉不要的数据 15 # 画饼图 16 plt.pie(income_data_list,labels=income_labels_list,colors=['c','m','r','g'],startangle=30, 17 shadow=True,explode=(0, 0, 0.1, 0, 0, 0, 0.1, 0, 0.1, 0, 0, 0),autopct='%.1f%%') 18 plt.title('各工资段人数占总人数比') # 标题 19 plt.show() # 显示
执行效果如下:
生成各工资段男,女人数图:
1 def builder_sex_ratio(): 2 """ 3 生成各工资段男,女人数图 4 5 :return: 无 6 """ 7 data_list = db("select income,dbo.getSexNumber('男',income) as 男 ,dbo.getSexNumber('女',income) as 女 " 8 "from users group by income") 9 men = [] # 男 10 women = [] # 女 11 labels =[] # 图例 12 for data in data_list: 13 labels.append(data[0]) 14 men.append(data[1]) 15 women.append(data[2]) 16 men.remove(men[6]) # 删掉不要的数据 17 women.remove(women[6]) # 删掉不要的数据 18 labels.remove(labels[6]) # 删掉不要的数据 19 max_line = 12 # 12个 20 fig,ax = plt.subplots() 21 line = np.arange(max_line) # [0,1,2,3,4,5,6,7,8,9,10,11] 22 bar_width = 0.4 # 条形之间的宽度 23 # 画条形图 24 ax.bar(line, men, bar_width,alpha=0.3, color='b',label='男') 25 ax.bar(line+bar_width, women, bar_width,alpha=0.3, color='r',label='女') 26 ax.set_xlabel('工资段') 27 ax.set_ylabel('人数') 28 ax.set_title('各工资段男,女人数图') 29 ax.set_xticks(line + bar_width / 2) # 保证条形居中 30 ax.set_xticklabels(labels) 31 # 画两条线 32 plt.plot([0.04, 1.04, 2.04, 3.04, 4.04, 5.04, 6.04, 7.04, 8.04, 9.04, 10.04, 11.04], men, label='男') 33 plt.plot([0.4, 1.4, 2.4, 3.4, 4.4, 5.4, 6.4, 7.4, 8.4, 9.4, 10.4, 11.4], women, label='女') 34 ax.legend() 35 fig.tight_layout() 36 # fig.savefig("1.png") # 生成图片 37 plt.show()
执行效果如下:
生成男,女平均身高图:
1 def builder_age_ratio(): 2 """ 3 生成男,女平均身高图 4 5 :return: 6 """ 7 data_list = db("select sex,avg(height) as 平均升高 from users group by sex") 8 sex = [] # 性别 9 number = [] # 人数 10 for data in data_list: 11 sex.append(data[0]) 12 number.append(data[1]) 13 # 画条形图 14 plt.bar(sex[0], number[0], label="男", color='g',width=0.03) 15 plt.bar(sex[1], number[1], label="女", color='r',width=0.03) 16 plt.legend() 17 plt.xlabel('性别') 18 plt.ylabel('身高') 19 plt.title('男女平均身高图') 20 plt.show()
执行效果如下:
生成有房与无房的人数比例图:
1 def builder_housing_sum_ratio(): 2 """ 3 生成有房与无房的人数比例图 4 5 :return: 6 """ 7 data_list = db("select housing,count(id) from users group by housing") 8 housing_data_list = [] 9 housing_labels_list = [] 10 for data in data_list: 11 housing_data_list.append(data[1]) 12 housing_labels_list.append(data[0]) 13 # 画饼图 14 plt.pie(housing_data_list, labels=housing_labels_list, colors=['g', 'r'], startangle=30, 15 shadow=True, explode=(0, 0), autopct='%.0f%%') 16 plt.title('有房与无房的人数比例图') 17 plt.show()
执行效果如下:
生成有无房男女人数图:
1 def builder_housing_ratio(): 2 """ 3 生成有无房男女人数图 4 5 :return: 6 """ 7 data_list = db("select dbo.gethousing('女',housing),dbo.gethousing('男',housing) from users group by housing") 8 homey = [] # 有房 9 homem = [] # 无房 10 for data in data_list: 11 homey.append(data[0]) 12 homem.append(data[1]) 13 max_line = 2 # 两个 14 fig, ax = plt.subplots() 15 line = np.arange(max_line) # [0,1] 16 bar_width = 0.1 # 条形之间的宽度 17 # 画条形 18 ax.bar(line,homey , bar_width, alpha=0.3,color='b',label='女') 19 ax.bar(line+bar_width, homem, bar_width,alpha=0.3,color='r',label='男') 20 ax.set_xlabel('有无房') 21 ax.set_ylabel('人数') 22 ax.set_title('有无房男女人数图') 23 ax.set_xticks(line + bar_width / 2) # 保持居中 24 ax.set_xticklabels(['有房','无房']) 25 ax.legend() 26 fig.tight_layout() 27 plt.show()
执行效果如下:
转载于:https://www.cnblogs.com/YuWeiXiF/p/8445749.html
基于爬取百合网的数据,用matplotlib生成图表相关推荐
- 用python爬取基金网信息数据,保存到表格,并做成四种简单可视化。(爬虫之路,永无止境!)
用python爬取基金网信息数据,保存到表格,并做成四种简单可视化.(爬虫之路,永无止境!) 上次 2021-07-07写的用python爬取腾讯招聘网岗位信息保存到表格,并做成简单可视化. 有的人留 ...
- python爬取东方财富网资金流向数据(在本地生成csv文件)
今天我们来试着用python爬取东方财富网资金流向的表格数据. 第一步:程序及应用的准备 首先我们需要安装selenium库,使用命令pip install selenium;然后我们需要下载对应的c ...
- 爬虫入门(四)——Scrapy框架入门:使用Scrapy框架爬取全书网小说数据
为了入门scrapy框架,昨天写了一个爬取静态小说网站的小程序 下面我们尝试爬取全书网中网游动漫类小说的书籍信息. 一.准备阶段 明确一下爬虫页面分析的思路: 对于书籍列表页:我们需要知道打开单本书籍 ...
- python决策树预测用户等级_使用python抓取婚恋网用户数据并用决策树生成自己择偶观...
最近在看<机器学习实战>的时候萌生了一个想法,自己去网上爬一些数据按照书上的方法处理一下,不仅可以加深自己对书本的理解,顺便还可以在github拉拉人气.刚好在看决策树这一章,书里面的理论 ...
- 在当当买了python怎么下载源代码-Python爬取当当网APP数据
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于AirPython ,作者星安果 目标 场景:有时候通过传统的方法去 ...
- 爬虫实战 | 爬取东方财富网股票数据
本文转载来自:公众号 志斌的python笔记 今天有个朋友说,他想做个关于股票的可视化网页,但是缺乏股票的数据,想让志斌帮他做个爬虫来每天获取数据.所以我将它写成一个实战案例,供大家一起参考学习! 1 ...
- Python爬取当当网APP数据
目标 场景:有时候通过传统的方法去爬一些 Web 网页或者 APP,受限于对方的反爬方案,很难爬到想要的数据,这个时候可以考虑使用「Appium」结合「mitmproxy」的方式去爬取数据. 其中,A ...
- Python实战案例分享:爬取当当网商品数据
作者:韦玮 转载请注明出处 目前,网络爬虫应用领域非常广,在搜索引擎.大数据分析.客户挖掘中均可以用到.在本篇博文中,韦玮老师会以当当网爬虫为例,为大家讲解如何编写一个自动爬虫将当当网的商品数据都 ...
- python+selenium爬取某网专利数据
记录一下爬某网专利数据经历~~ 新的这个某网页面,检索数据是在主页面嵌套了一个iframe页面,直接通过页面爬的话,还不能直接拿到数据,本次经历主要有以下几个麻烦点: 1.搜索的结果,最多只有300页 ...
- 【Python】手把手教你用Python爬取某网小说数据,并进行可视化分析
网络文学是以互联网为展示平台和传播媒介,借助相关互联网手段来表现文学作品及含有一部分文字作品的网络技术产品,在当前成为一种新兴的文学现象,并快速兴起,各种网络小说也是层出不穷,今天我们使用seleni ...
最新文章
- “重构”黑洞:26岁MIT研究生的新算法 | 人物志
- Android实例开发中如何创建第一个项目(android studio)
- (已解决)Jupyter Notebook使用argparse报错:An exception has occurred, use %tb to see the full traceback.
- java gui 颜色从html_Java GUI显示网页并返回HTML
- Java 经典问题 for 基础知识
- 《告别失控:软件开发团队管理必读》一一第1章 程序员为何难以管理
- MySQL 一般操作语句
- 【干货】产品经理的需求管理
- OpenCV形态学变换函数morphologyEx()闭运算的使用
- 腾讯用微信、QQ 把微视送上了 App Store 第一 | 畅言
- 1119 九九乘法表的值(%-4d等 的含义)
- 系统学习机器学习之随机场(二)--MEMM
- Oracle数据库REDO损坏ora-00333修复手札
- C#中调用PDFCreator生成PDF文件
- 计算机掌握录音机的使用方法,如何使用2种方法从计算机录制音频
- Matplotlib中显示汉字,Times New Roman字体,公式的相关设置(1)
- ReactOS 代码更新后的编译安装
- vue中使用antv/g6 绘制关系图、结构图
- DirectX修复工具使用
- 课程实训-校园导游系统