统计类别数量并且使用pyplot画出柱状图
从数据库中读取数据,具体操作为:
# -*- coding: utf-8 -*-from numpy import *import numpy as npimport pandas as pdfrom sqlalchemy import create_engineengine = create_engine('mysql+pymysql://root:123456@127.0.0.1:3306/db_websiterecommend?charset=utf8')sql = pd.read_sql('t_url_classify', engine, chunksize = 110000)output='C:\\Users\\lenovo\\Desktop\\count_.xls''''z用create_engine建立连接,连接地址的意思依次为“数据库格式(mysql)+程序名(pymysql)+账号密码@地址端口/数据库名(test)”,最后指定编码为utf8;all_gzdata是表名,engine是连接数据的引擎,chunksize指定每次读取1万条记录。这时候sql是一个容器,未真正读取数据。'''counts = [ i['classify'].value_counts() for i in sql] #逐块统计counts = pd.concat(counts).groupby(level=0).sum() #合并统计结果,把相同的统计项合并(即按index分组并求和)counts = counts.reset_index() #重新设置index,将原来的index作为counts的一列。counts.columns = ['type', 'num']counts=pd.DataFrame(counts)print(counts)import matplotlib.pyplot as pltplt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=Falseprint(counts.type)print(counts.num)#plt.style.use('mystyle')x=np.arange(counts.type.size)plt.bar(x,counts.num,color='red')ax=plt.gca()ax.set_xticklabels(counts.type)plt.show()
然后对于统计出来的数据是列表的,所以要进行整合成两个类别,所以就要将其转换成pandas,然后进行赋给其值列名,然后才方便后面的操作
否则不进行上面的操作的话,就得出以下的结果,这样子的话就达不到目的:
画图的代码为:
import matplotlib.pyplot as pltplt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=Falseprint(counts.type)print(counts.num)#plt.style.use('mystyle')x=np.arange(counts.type.size)plt.bar(x,counts.num,color='red')ax=plt.gca()ax.set_xticklabels(counts.type)plt.show()
使用plt.bar()去画图
首先是数据是dataframe格式的。
也就是两个变量,即两列
例如:
type num
0 优秀作品 11120
1 创新与合作 823
2 教学资源 24914
3 新闻动态 3177
4 竞赛与评奖 14114
5 竞赛组织 9645
6 视频教学 98
7 项目与招聘 4734
接下来:使用bar()绘制图形:
由于plot只接受数值类型,所以我们首先要:
输入:x = np.arange(data.category.size)
就是转换为其有多少个数据
画出来的图为:

接下来要设置x轴标识为类别:
ax=plt.gca()ax.set_xticklabels(counts.type)
然后画出来的图为:

注意:

红色部分不能定义为index,否则输不出来,因为其默认就是有index
或者对于使用D.plot()的方式的话,就是可以这样子:
counts.plot(kind='bar',color='red')ax=plt.gca()ax.set_xticklabels(counts.type)plt.show()
保存图片:
plt.savefig("bar.jpg"
作者:你若精彩,蝴蝶自来
来源链接:https://www.cnblogs.com/caicaihong/p/5887845.html
版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。
2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。