利用Python读取MySQL数据表(信息消费情况表)根据各年龄段求各类支出平均值并绘制柱形图

MySQL数据表结构如下

利用Python读取MySQL数据表(信息消费情况表)根据各年龄段求各类支出平均值并绘制柱形图_第1张图片

MySQL数据表部分数据如下

利用Python读取MySQL数据表(信息消费情况表)根据各年龄段求各类支出平均值并绘制柱形图_第2张图片

Python代码如下

import pymysql
from matplotlib import pyplot as plt
import numpy as np
#连接数据库
db = pymysql.connect(host='localhost',user='root',passwd='123456',port=3306,db='kettle')
cur = db.cursor()
sql = "SELECT CASE \
       WHEN 年龄>= 10 AND 年龄<20 THEN 'A10' \
       WHEN 年龄>= 20 AND 年龄<30 THEN 'A20' \
       WHEN 年龄>= 30 AND 年龄<40 THEN 'A30' \
       WHEN 年龄>= 10 AND 年龄<50 THEN 'A40' \
       WHEN 年龄>= 50 AND 年龄<60 THEN 'A50' \
       WHEN 年龄>= 60 AND 年龄<70 THEN 'A60' \
       WHEN 年龄>= 70 AND 年龄<80 THEN 'A70' \
       ELSE 'other' END AS '年龄段',\
       AVG(流量收入) AS '平均流量', \
       AVG(语音收入) AS '平均语音',\
       AVG(短信收入) AS '平均短信', \
       AVG(彩信收入) AS '平均彩信' FROM qimo GROUP BY 年龄段 HAVING avg(流量收入)"
cur.execute(sql)
result = cur.fetchall()

#定义空数据数组将数据库数据附上去
年龄段 = []
平均流量 = []
平均语音 = []
平均短信 = []
平均彩信 = []
for data in result:
    年龄段.append(data[0])
    平均流量.append(data[1])
    平均语音.append(data[2])
    平均短信.append(data[3])
    平均彩信.append(data[4])
#关闭游标与数据库
cur.close()
db.close()

# 显示中文标签
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
width = 0.2
index = np.arange(len(年龄段))

r1 = plt.bar(年龄段,平均流量,width,color='r',label='平均流量')
r2 = plt.bar(index+width,平均语音,width,color='b',label='平均语音')
r3 = plt.bar(index+width+width,平均短信,width,color='c',label='平均短信')
r4 = plt.bar(index+width+width+width,平均彩信,width,color='g',label='平均彩信')
#显示图表
plt.legend()
plt.title("各个年龄阶段的用户平均支出表")
plt.show()

运行结果如下

利用Python读取MySQL数据表(信息消费情况表)根据各年龄段求各类支出平均值并绘制柱形图_第3张图片

 

你可能感兴趣的:(kettle,数据处理,mysql,python,数据库)