zoukankan      html  css  js  c++  java
  • 统计类别数量并且使用pyplot画出柱状图

    从数据库中读取数据,具体操作为:

    # -*- coding: utf-8 -*-
    from numpy import *
    import numpy as np
    import pandas as pd
    from sqlalchemy import create_engine
    engine = 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 plt
    plt.rcParams['font.sans-serif']=['SimHei']
    plt.rcParams['axes.unicode_minus']=False
    print(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 plt
    plt.rcParams['font.sans-serif']=['SimHei']
    plt.rcParams['axes.unicode_minus']=False
    print(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"
  • 相关阅读:
    协议
    创建属性、属性标签、对象序列化
    JS中generater和箭头函数
    前端forEach在Array、map、set中的使用,weakset,weakmap
    更新最大内码,金蝶开发
    ERP,还需要WEB开发吗
    可读性太低的SQL语句
    事务,视图和索引
    简单子查询
    创建表并添加约束
  • 原文地址:https://www.cnblogs.com/caicaihong/p/5887845.html
Copyright © 2011-2022 走看看