IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> kettle+mysql+Python(Pandas,Patplotlip)实现大数据预处理(饼图,柱状图) -> 正文阅读

[大数据]kettle+mysql+Python(Pandas,Patplotlip)实现大数据预处理(饼图,柱状图)

环境准备

kettle
mysql数据库
Python环境

要求

  1. 使用预处理工具(kettle)将提供的文本数据进行清理,并导入到数据库;
  2. 对清洗完成的数据进行分析统计,统计各个城市的用户在流量与语音的平均支出,并使用Python绘制成图表,保存结果;
  3. 统计各个年龄阶段的用户在流量与语音的平均支出,并使用Python绘制成图表,保存结果

提前看结果

在这里插入图片描述
在这里插入图片描述

获取数据

数据为两个不同csv文件
在这里插入图片描述
获取百度网盘
链接:https://pan.baidu.com/s/1ocLrIhY5rHAzwdKdvZr13g
提取码:klyo

处理数据

1.打开kettle 工具

  1. 新建转换
    在这里插入图片描述
  2. 突出如下图步骤
    在这里插入图片描述
  3. 进行步骤配置
    3.1 、CSV文件输入sim卡客户信息表
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    3.2 CSV文件输入2 (和上面操作一样,选择sim卡客户消费记录.csv即可)
    在这里插入图片描述
    在这里插入图片描述
    3.3 排序记录
    在这里插入图片描述
    3.4 排序记录2
    在这里插入图片描述
    3.5记录连接2
    在这里插入图片描述
    在这里插入图片描述
    3.6 字段选择
    在这里插入图片描述
    在这里插入图片描述
    3.7 表输出(我这里用的是Navicat管理工具,其他方法相同)
    3.7.1 创建一个kettle数据库以及qimozy表
    在这里插入图片描述
    不想手动创建直接给给一个sql吧!
    直接运行下面sql语句即可创建出表和字段

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE IF EXISTS qimozy;
CREATE TABLE qimozy (
用户id varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
性别 varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
年龄 bigint(0) NULL DEFAULT NULL,
归属地 varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
在网时长 bigint(0) NULL DEFAULT NULL,
状态 char(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
总收入 varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
增值收入 varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
流量收入 varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
短信收入 varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
彩信收入 varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
语音收入 double(100, 0) NULL DEFAULT NULL,
付费模式(预付费/后付费) varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
是否欠费 char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

  3.7.2  回到配置表输出
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/09bdce39908647be83127f981bf8f4d4.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQ3JhenlIYWNraW5n5pyb,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/7e3b2626a1b84cc482de819623bf8899.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQ3JhenlIYWNraW5n5pyb,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/831bdbca9a854b1dbf9912115f47fc52.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQ3JhenlIYWNraW5n5pyb,size_20,color_FFFFFF,t_70,g_se,x_16)
注意:如果这里连接不上可能是没有mysql驱动,将mysql驱动复制到kettle的lib目录下重启kettle即可连接
驱动下载:
链接:https://pan.baidu.com/s/1hYHRXuOu1bEA5fnLbZ9rBw 
提取码:wrvf
![在这里插入图片描述](https://img-blog.csdnimg.cn/ce7ddac6c536459693e91884b471d788.png)
  3.7.3 查看字段是否对应
  ![在这里插入图片描述](https://img-blog.csdnimg.cn/07e8d03fd17c48d2b9e6299cb86640cd.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQ3JhenlIYWNraW5n5pyb,size_20,color_FFFFFF,t_70,g_se,x_16)
3.8 运行

![在这里插入图片描述](https://img-blog.csdnimg.cn/a1acdda3b99e4e80bc98b014b17d156d.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/9fb431872baa4839804238c05c4ea0cb.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQ3JhenlIYWNraW5n5pyb,size_17,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/f2dbefe7db7a4ce4a81c22c3713272c9.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQ3JhenlIYWNraW5n5pyb,size_20,color_FFFFFF,t_70,g_se,x_16)
可点击 Preview data 查看每个步骤的数据
![在这里插入图片描述](https://img-blog.csdnimg.cn/8b315a03b2954152b54aaa41bbe9a212.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQ3JhenlIYWNraW5n5pyb,size_20,color_FFFFFF,t_70,g_se,x_16)
可看到我们数据已经导入到mysql数据库
![在这里插入图片描述](https://img-blog.csdnimg.cn/e9de28467e624e4ab0bc36625dc2f11d.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQ3JhenlIYWNraW5n5pyb,size_20,color_FFFFFF,t_70,g_se,x_16)


## 操控数据库
附上sql语句

饼图所需
```sql
select 归属地,avg(流量收入) from qimozy group by 归属地

在这里插入图片描述

柱状图所需

SELECT CASE 
            WHEN 年龄<=10 THEN 'A10' 
            WHEN 年龄>= 11 AND 年龄<=20 THEN 'A20' 
            WHEN 年龄>= 21 AND 年龄<=30 THEN 'A30'
            WHEN 年龄>= 31 AND 年龄<=40 THEN 'A40' 
            WHEN 年龄>= 41 AND 年龄<=50 THEN 'A50' 
            WHEN 年龄>= 51 AND 年龄<=60 THEN 'A60' 
            WHEN 年龄>= 61 AND 年龄<=70 THEN 'A70'
            ELSE 'other' END AS '年龄段', 
            AVG(流量收入) AS '平均流量', 
            AVG(语音收入) AS '平均语音',
            AVG(短信收入) AS '平均短信',
            AVG(彩信收入) AS '平均彩信'
            FROM qimozy 
            GROUP BY 年龄段  
            order by 年龄段 

在这里插入图片描述

Python绘图

这里直接附上全部代码吧

import pymysql
from matplotlib import  pyplot as plt
from pandas import Series,DataFrame
import numpy as np
#添加图形对象
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
PlaceOfOwnership = []  #归属地列表
FlowAvg = [] #流量平均值
age = [] #年龄
avg_flow = [] #平均流量
avg_voice = [] #平均语音
avg_sms = [] #平均短信
avg_mms = [] #平均彩信
try:
    conn = pymysql.connect(host= '127.0.0.1',port=3307,user = "root",passwd = "123456",db="kettle",charset="utf8")  #数据库连接
    if (conn):
        print("数据库连接成功")
    cur = conn.cursor()  #指针游标
    # sql = "select * from qimozy"
    sql_grup = "select 归属地,avg(流量收入) from qimozy group by 归属地" #查询每个归属地的平均流量
    cur.execute(sql_grup)  #执行sql语句
    alldata = cur.fetchall()  #接收语句
    for data in alldata:    #遍历数据
        # print(data)
        #将数据加入到列表中
        PlaceOfOwnership.append(data[0])
        FlowAvg.append(int(data[1]))
        #查询每个年龄段的各个平均值
    sql_age = "SELECT CASE \
            WHEN 年龄<=10 THEN 'A10' \
            WHEN 年龄>= 11 AND 年龄<=20 THEN 'A20' \
            WHEN 年龄>= 21 AND 年龄<=30 THEN 'A30'\
            WHEN 年龄>= 31 AND 年龄<=40 THEN 'A40' \
            WHEN 年龄>= 41 AND 年龄<=50 THEN 'A50' \
            WHEN 年龄>= 51 AND 年龄<=60 THEN 'A60' \
            WHEN 年龄>= 61 AND 年龄<=70 THEN 'A70'\
            ELSE 'other' END AS '年龄段', \
            AVG(流量收入) AS '平均流量', \
            AVG(语音收入) AS '平均语音',\
            AVG(短信收入) AS '平均短信',\
            AVG(彩信收入) AS '平均彩信'\
            FROM qimozy \
            GROUP BY 年龄段  \
            order by 年龄段 "

    cur.execute(sql_age) #执行语句
    alldata2 = cur.fetchall() #获取值
    for data2 in alldata2:  #遍历值
        #将值加入到数组中
        age.append(data2[0])
        avg_flow.append(int(data2[1]))
        avg_voice.append(int(data2[2]))
        avg_sms.append(int(data2[3]))
        avg_mms.append(int(data2[4]))
except Exception as e: #异常处理
    print("Error"+e)
finally:
    cur.close() #关闭游标
    conn.close() #关闭数据库连接

# print(PlaceOfOwnership)
# print(FlowAvg)
print(age)
print(avg_flow)
print(avg_voice)
print(avg_sms)
print(avg_mms)

#一、绘制饼状图
#使得X/Y轴的间距相
ax.axis('equal')
#设置字体不然不会中文显示错误
plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签
plt.rcParams['axes.unicode_minus']=False
#准备数据
langs = PlaceOfOwnership
students = FlowAvg
#绘制饼状图
plt.title("各个地区用户流量平均支出占比")
ax.pie(students,labels=langs,autopct='%1.2f%%')
plt.show()

# 二、绘制柱状图
width = 0.2
index = np.arange(len(age))

r1 = plt.bar(age,avg_flow,width,color='r',label='流量')
r2 = plt.bar(index+width,avg_voice,width,color='b',label='语音')
r3 = plt.bar(index+width+width,avg_sms,width,color='c',label='短息')
r4 = plt.bar(index+width+width+width,avg_mms,width,color='g',label='彩信')
plt.title('各个年龄阶段用户平均支出情况')
plt.xlabel('年龄段')
plt.ylabel('平均值')
#显示图像
plt.legend()
plt.show()

如果包没有安装的打开终端运行下面命令

pip install pymysql
pip install matplotlib
pip install pandas
pip install numpy

没有安装谁,如果安装不上在后面加入清华源

注意更该自己的数据库连接
在这里插入图片描述

6.运行Python代码

得到结果:
在这里插入图片描述
在这里插入图片描述

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-12-16 17:44:46  更:2021-12-16 17:46:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:55:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码