爬取百合网的数据链接: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(),@income varchar())
  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(),@housing varchar())
  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. def db(sql):
  7. """
  8. 数据库相关操作
  9. :param sql: sql语句
  10. :return: 查询的结果集,list封装
  11. """
  12. conn = pymssql.connect(host='localhost', user='sa', password='123456c', database='Baihe', charset="utf8")
  13. cur = conn.cursor()
  14. cur.execute(sql)
  15. row = cur.fetchone() # 指向结果集的第一行,
  16. data = [] # 返回的list
  17. while row:
  18. rows = list(row)
  19. for i in range(len(rows)): # 针对rows的每项编码
  20. try:
  21. rows[i] = rows[i].encode('latin-1').decode('gbk')
  22. except AttributeError:pass
  23. data.append(rows) # 向data加数据
  24. row = cur.fetchone() #
  25. print(data)
  26. cur.close()
  27. conn.close()
  28. return data
  1. 生成各工资段人数占总人数比图:
  1. def builder_income_ratio():
  2. """
  3. 生成各工资段人数占总人数比图
  4. :return: 无
  5. """
  6. data_list = db("select income,count(id) from users group by income")
  7. income_data_list = [] # 数据
  8. income_labels_list = [] # 图例
  9. for data in data_list:
  10. income_data_list.append(data[1])
  11. income_labels_list.append(data[0])
  12. income_data_list.remove(income_data_list[6]) # 删掉不要的数据
  13. income_labels_list.remove(income_labels_list[6]) # 删掉不要的数据
  14. # 画饼图
  15. plt.pie(income_data_list,labels=income_labels_list,colors=['c','m','r','g'],startangle=30,
  16. shadow=True,explode=(0, 0, 0.1, 0, 0, 0, 0.1, 0, 0.1, 0, 0, 0),autopct='%.1f%%')
  17. plt.title('各工资段人数占总人数比') # 标题
  18. plt.show() # 显示

执行效果如下:

生成各工资段男,女人数图:

  1. def builder_sex_ratio():
  2. """
  3. 生成各工资段男,女人数图
  4. :return: 无
  5. """
  6. data_list = db("select income,dbo.getSexNumber('男',income) as 男 ,dbo.getSexNumber('女',income) as 女 "
  7. "from users group by income")
  8. men = [] # 男
  9. women = [] # 女
  10. labels =[] # 图例
  11. for data in data_list:
  12. labels.append(data[0])
  13. men.append(data[1])
  14. women.append(data[2])
  15. men.remove(men[6]) # 删掉不要的数据
  16. women.remove(women[6]) # 删掉不要的数据
  17. labels.remove(labels[6]) # 删掉不要的数据
  18. max_line = 12 # 12个
  19. fig,ax = plt.subplots()
  20. line = np.arange(max_line) # [0,1,2,3,4,5,6,7,8,9,10,11]
  21. bar_width = 0.4 # 条形之间的宽度
  22. # 画条形图
  23. ax.bar(line, men, bar_width,alpha=0.3, color='b',label='男')
  24. ax.bar(line+bar_width, women, bar_width,alpha=0.3, color='r',label='女')
  25. ax.set_xlabel('工资段')
  26. ax.set_ylabel('人数')
  27. ax.set_title('各工资段男,女人数图')
  28. ax.set_xticks(line + bar_width / 2) # 保证条形居中
  29. ax.set_xticklabels(labels)
  30. # 画两条线
  31. 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='男')
  32. 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='女')
  33. ax.legend()
  34. fig.tight_layout()
  35. # fig.savefig("1.png") # 生成图片
  36. plt.show()

执行效果如下:

生成男,女平均身高图:

  1. def builder_age_ratio():
  2. """
  3. 生成男,女平均身高图
  4. :return:
  5. """
  6. data_list = db("select sex,avg(height) as 平均升高 from users group by sex")
  7. sex = [] # 性别
  8. number = [] # 人数
  9. for data in data_list:
  10. sex.append(data[0])
  11. number.append(data[1])
  12. # 画条形图
  13. plt.bar(sex[0], number[0], label="男", color='g',width=0.03)
  14. plt.bar(sex[1], number[1], label="女", color='r',width=0.03)
  15. plt.legend()
  16. plt.xlabel('性别')
  17. plt.ylabel('身高')
  18. plt.title('男女平均身高图')
  19. plt.show()

执行效果如下:

生成有房与无房的人数比例图:

  1. def builder_housing_sum_ratio():
  2. """
  3. 生成有房与无房的人数比例图
  4. :return:
  5. """
  6. data_list = db("select housing,count(id) from users group by housing")
  7. housing_data_list = []
  8. housing_labels_list = []
  9. for data in data_list:
  10. housing_data_list.append(data[1])
  11. housing_labels_list.append(data[0])
  12. # 画饼图
  13. plt.pie(housing_data_list, labels=housing_labels_list, colors=['g', 'r'], startangle=30,
  14. shadow=True, explode=(0, 0), autopct='%.0f%%')
  15. plt.title('有房与无房的人数比例图')
  16. plt.show()

执行效果如下:

生成有无房男女人数图:

  1. def builder_housing_ratio():
  2. """
  3. 生成有无房男女人数图
  4. :return:
  5. """
  6. data_list = db("select dbo.gethousing('女',housing),dbo.gethousing('男',housing) from users group by housing")
  7. homey = [] # 有房
  8. homem = [] # 无房
  9. for data in data_list:
  10. homey.append(data[0])
  11. homem.append(data[1])
  12. max_line = 2 # 两个
  13. fig, ax = plt.subplots()
  14. line = np.arange(max_line) # [0,1]
  15. bar_width = 0.1 # 条形之间的宽度
  16. # 画条形
  17. ax.bar(line,homey , bar_width, alpha=0.3,color='b',label='女')
  18. ax.bar(line+bar_width, homem, bar_width,alpha=0.3,color='r',label='男')
  19. ax.set_xlabel('有无房')
  20. ax.set_ylabel('人数')
  21. ax.set_title('有无房男女人数图')
  22. ax.set_xticks(line + bar_width / 2) # 保持居中
  23. ax.set_xticklabels(['有房','无房'])
  24. ax.legend()
  25. fig.tight_layout()
  26. plt.show()

执行效果如下:

基于爬取百合网的数据,用matplotlib生成图表的更多相关文章

  1. 爬虫入门(四)——Scrapy框架入门:使用Scrapy框架爬取全书网小说数据

    为了入门scrapy框架,昨天写了一个爬取静态小说网站的小程序 下面我们尝试爬取全书网中网游动漫类小说的书籍信息. 一.准备阶段 明确一下爬虫页面分析的思路: 对于书籍列表页:我们需要知道打开单本书籍 ...

  2. 使用python抓取婚恋网用户数据并用决策树生成自己择偶观

    最近在看<机器学习实战>的时候萌生了一个想法,自己去网上爬一些数据按照书上的方法处理一下,不仅可以加深自己对书本的理解,顺便还可以在github拉拉人气.刚好在看决策树这一章,书里面的理论 ...

  3. python3 爬取百合网的女人们和男人们

    学Python也有段时间了,目前学到了Python的类.个人感觉Python的类不应称之为类,而应称之为数据类型,只是数据类型而已!只是数据类型而已!只是数据类型而已!重要的事情说三篇. 据书上说一个 ...

  4. Python爬虫 爬取百合网的女人们和男人们

    学Python也有段时间了,目前学到了Python的类.个人感觉Python的类不应称之为类,而应称之为数据类型,只是数据类型而已!只是数据类型而已!只是数据类型而已!重要的事情说三篇. 据书上说一个 ...

  5. 实例学习——爬取豆瓣网TOP250数据

    开发环境:(Windows)eclipse+pydev 网址:https://book.douban.com/top250?start=0 from lxml import etree #解析提取数据 ...

  6. 使用python爬取东方财富网机构调研数据

    最近有一个需求,需要爬取东方财富网的机构调研数据.数据所在的网页地址为: 机构调研 网页如下所示: 可见数据共有8464页,此处不能直接使用scrapy爬虫进行爬取,因为点击下一页时,浏览器只是发起了 ...

  7. 八爪鱼采集器︱爬取外网数据(twitter、facebook)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 要想采集海外数据有两种方式:云采集+单机采集. ...

  8. [转]使用python爬取东方财富网机构调研数据

    最近有一个需求,需要爬取东方财富网的机构调研数据.数据所在的网页地址为: 机构调研 网页如下所示: 可见数据共有8464页,此处不能直接使用scrapy爬虫进行爬取,因为点击下一页时,浏览器只是发起了 ...

  9. Python爬虫之爬取慕课网课程评分

    BS是什么? BeautifulSoup是一个基于标签的文本解析工具.可以根据标签提取想要的内容,很适合处理html和xml这类语言文本.如果你希望了解更多关于BS的介绍和用法,请看Beautiful ...

随机推荐

  1. 解决sql和beans中名字不一致问题

    第二图使用别名 tid为sql中的名字,id为beans中的名字,推荐此方式

  2. 【Zigbee技术入门教程-01】Zigbee无线组网技术入门的学习路线

    [Zigbee技术入门教程-01]Zigbee无线组网技术入门的学习路线 广东职业技术学院  欧浩源 一.引言    在物联网技术应用的知识体系中,Zigbee无线组网技术是非常重要的一环,也是大家感 ...

  3. 《JavaScript设计模式与开发实践》知识点笔记

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px "PingFang SC" } p.p2 { margin: 0.0px ...

  4. 狗书无敌,天下第一(flask基础)

    为什么选择使用flask? 和其他框架相比, Flask 之所以能脱颖而出,原因在于它让开发者做主,使其能对程序具有全面的创意控制. 在 Flask 中,你可以自主选择程序的组件,如果找不到合适的,还 ...

  5. Spark算子--union、intersection、subtract

    转载请标明出处http://www.cnblogs.com/haozhengfei/p/252bcc1d1ab30c430d347279d5827615.html union.intersection ...

  6. 如何把本地项目上传到Github

    作为一个有追求的程序员,需要撸点自己的开源项目,虽然我现在只是在学着造轮子,但这并不影响我成为大神的心. Github是基于git实现的代码托管,很多程序员在上面托管自己的开源项目,我使用Github ...

  7. DedeCMS实现自定义表单提交后发送指定QQ邮箱法

    https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=monline_3_dg&wd=dedecms 邮箱&oq=d ...

  8. OKMX6Q在ltib生成的rootfs基础上制作带QT库的根文件系统

    ltib每次执行后会在其目录下生成rootfs目录,并以其为基础生成rootfs.ext2.gz文件,而litb自带的QT库又太老,所以想到按照飞凌的<OKMX6X-S2-Qt4.8.5移植手册 ...

  9. Android之MaterialDesign应用技术

    PS:纵观现在大大小小软件的界面都变的比较漂亮,还有一些系统了,比如小米的MIUI,华为的EMUI等,虽然底层都是安卓,但他们的界面多多少少都会不同,谷歌对这个UI也是非常重视的,MaterialDe ...

  10. Appium移动自动化测试之—基于java的iOS环境搭建

    本文仅供参考,同时感谢帮助我搭建环境的同事 操作系统的名称:Mac OS X操作系统的版本:10.12.6 接下来我们开始踏上搭建Appium+java+ios之路,本文只说个大概,毕竟本机已经装过了 ...