《零基础学会!如何用 sql+Python 绘制柱状图和折线图,数据可视化一看就懂》

在数据驱动的时代,MySQL 是最常用的关系型数据库管理系统之一,广泛应用于各类数据存储和处理场景。数据分析的过程不仅仅是收集数据,还包括数据的清洗、转换、查询以及最终的报告和可视化。在本文中,我们将通过实际案例来介绍如何使用 MySQL 进行数据分析,并结合 Python 绘制柱状图和折线图,帮助你快速掌握数据分析和可视化技巧。

MySQL 数据分析实战

1. 数据准备与清洗

数据分析的第一步是准备好需要分析的数据。通常,数据的来源可能是业务系统生成的日志、交易记录、用户行为数据等。

1.1 导入数据

假设我们有一个包含用户交易记录的数据集,格式如下:

user_id, transaction_id, amount, transaction_date
1, 10001, 150, 2024-01-01
2, 10002, 200, 2024-01-02
...

可以通过以下 SQL 语句将其导入 MySQL:

INSERT INTO transactions (transaction_id, user_id, amount, transaction_date) VALUES
(10005, 1, 250, '2024-01-05'),
(10006, 2, 300, '2024-01-07'),
(10007, 3, 150, '2024-01-10'),
(10008, 4, 400, '2024-01-12'),
(10009, 5, 500, '2024-01-14'),
(10010, 1, 320, '2024-01-16'),
(10011, 2, 220, '2024-01-18'),
(10012, 3, 180, '2024-01-20'),
(10013, 4, 550, '2024-01-22'),
(10014, 5, 600, '2024-01-25'),
(10015, 1, 280, '2024-01-28'),
(10016, 2, 170, '2024-01-30'),
(10017, 3, 400, '2024-02-02'),
(10018, 4, 350, '2024-02-04'),
(10019, 5, 450, '2024-02-06'),
(10020, 1, 270, '2024-02-08'),
(10021, 2, 320, '2024-02-10'),
(10022, 3, 500, '2024-02-12'),
(10023, 4, 330, '2024-02-15'),
(10024, 5, 520, '2024-02-17'),
(10025, 1, 400, '2024-02-19'),
(10026, 2, 280, '2024-02-21'),
(10027, 3, 460, '2024-02-23'),
(10028, 4, 310, '2024-02-26'),
(10029, 5, 380, '2024-02-28'),
(10030, 1, 290, '2024-03-02'),
(10031, 2, 320, '2024-03-05'),
(10032, 3, 520, '2024-03-08'),
(10033, 4, 390, '2024-03-11'),
(10034, 5, 500, '2024-03-13'),
(10035, 1, 250, '2024-03-15'),
(10036, 2, 380, '2024-03-18'),
(10037, 3, 470, '2024-03-21'),
(10038, 4, 310, '2024-03-24'),
(10039, 5, 440, '2024-03-26'),
(10040, 1, 210, '2024-03-28'),
(10041, 2, 270, '2024-03-31'),
(10042, 3, 330, '2024-04-02'),
(10043, 4, 310, '2024-04-04'),
(10044, 5, 370, '2024-04-06'),
(10045, 1, 400, '2024-04-08'),
(10046, 2, 450, '2024-04-10'),
(10047, 3, 490, '2024-04-13'),
(10048, 4, 520, '2024-04-15'),
(10049, 5, 450, '2024-04-17'),
(10050, 1, 460, '2024-04-19'),
(10051, 2, 230, '2024-04-22'),
(10052, 3, 350, '2024-04-24'),
(10053, 4, 470, '2024-04-26'),
(10054, 5, 490, '2024-04-29'),
(10055, 1, 500, '2024-05-02'),
(10056, 2, 320, '2024-05-04'),
(10057, 3, 450, '2024-05-06'),
(10058, 4, 370, '2024-05-09'),
(10059, 5, 500, '2024-05-11'),
(10060, 1, 330, '2024-05-13'),
(10061, 2, 410, '2024-05-16'),
(10062, 3, 490, '2024-05-18'),
(10063, 4, 520, '2024-05-21'),
(10064, 5, 300, '2024-05-23'),
(10065, 1, 280, '2024-05-25'),
(10066, 2, 360, '2024-05-28'),
(10067, 3, 470, '2024-05-30'),
(10068, 4, 450, '2024-06-02'),
(10069, 5, 320, '2024-06-04'),
(10070, 1, 400, '2024-06-06'),
(10071, 2, 220, '2024-06-09'),
(10072, 3, 340, '2024-06-11'),
(10073, 4, 430, '2024-06-14'),
(10074, 5, 550, '2024-06-16'),
(10075, 1, 250, '2024-06-18'),
(10076, 2, 320, '2024-06-20'),
(10077, 3, 430, '2024-06-23'),
(10078, 4, 470, '2024-06-25'),
(10079, 5, 360, '2024-06-27'),
(10080, 1, 290, '2024-06-30'),
(10081, 2, 410, '2024-07-02'),
(10082, 3, 500, '2024-07-05')
1.2 清洗数据

数据清洗主要包括去除重复数据、处理缺失值、格式转换等操作。可以使用以下 SQL 查询来检查并清理数据。

去除重复数据:

WITH CTE AS (SELECT transaction_id,user_id,ROW_NUMBER() OVER (PARTITION BY transaction_id ORDER BY transaction_date) AS row_numFROM transactions
)
DELETE FROM transactions
WHERE transaction_id IN (SELECT transaction_idFROM CTEWHERE row_num > 1
);

处理缺失值:

UPDATE transactions
SET amount = 0
WHERE amount IS NULL;

2. 数据分析

清洗后的数据可以进行各种分析。以下是几个常见的数据分析任务:

2.1 销售总额分析

我们可以通过以下 SQL 查询来计算某个时间段内的总销售额:

SELECT SUM(amount) AS total_sales
FROM transactions
WHERE transaction_date BETWEEN '2024-01-01' AND '2024-01-31';

图片

2.2 用户活跃度分析

分析每个用户在某段时间内的交易次数,可以使用以下查询:

SELECT user_id, COUNT(transaction_id) AS transaction_count
FROM transactions
WHERE transaction_date BETWEEN '2024-01-01' AND '2024-01-31'
GROUP BY user_id
ORDER BY transaction_count DESC;

图片

2.3 平均交易金额分析

计算每笔交易的平均金额,可以通过以下查询:

SELECT AVG(amount) AS average_transaction_amount
FROM transactions
WHERE transaction_date BETWEEN '2024-01-01' AND '2024-01-31';

图片

3. 数据可视化

虽然 MySQL 可以进行强大的数据查询,但其本身并不支持复杂的可视化功能。在实际应用中,通常会将 MySQL 中的查询结果导出并与其他工具(如 Excel、Tableau、Power BI 等)结合,进行数据可视化。

在本篇教程中,我将展示如何使用 Python 中的 matplotlib 绘制柱状图和折线图。

3.1 绘制柱状图和折线图

首先,我们需要从 MySQL 中提取数据。假设我们已经得到了每个用户在 2024 年 1 月份的交易次数。接下来,我们将绘制一个包含柱状图和折线图的图表,柱状图展示每个用户的交易次数,折线图展示交易次数的变化趋势。

以下是实现的完整代码:

import pymysql
import pandas as pd
import matplotlib.pyplot as plt# 连接 MySQL 数据库
conn = pymysql.Connect(user='root', password='root', host='localhost', database='demo')# 执行查询
query = """
SELECT user_id, COUNT(transaction_id) AS transaction_count 
FROM transactions 
WHERE transaction_date BETWEEN '2024-01-01' AND '2024-01-31' 
GROUP BY user_id 
ORDER BY transaction_count DESC;
"""
df = pd.read_sql(query, conn)# 创建一个图形
fig, ax1 = plt.subplots()# 绘制柱状图
bars = ax1.bar(df['user_id'], df['transaction_count'], color='b', alpha=0.6)
ax1.set_xlabel('User ID')
ax1.set_ylabel('Transaction Count', color='b')
ax1.tick_params(axis='y', labelcolor='b')# 在柱状图上添加数值
for bar in bars:yval = bar.get_height()ax1.text(bar.get_x() + bar.get_width()/2, yval + 20, str(int(yval)), ha='center', color='b', fontsize=10)# 创建第二个 Y 轴
ax2 = ax1.twinx()# 绘制折线图
line, = ax2.plot(df['user_id'], df['transaction_count'], color='r', marker='o', linestyle='-', label='Transaction Count (Line)')
ax2.set_ylabel('Transaction Count (Line)', color='r')
ax2.tick_params(axis='y', labelcolor='r')# 在折线图上添加数值
for i, txt in enumerate(df['transaction_count']):ax2.text(df['user_id'][i], txt + 20, str(txt), ha='center', color='r', fontsize=10)# 标题
plt.title('User Activity in January 2024')# 调整布局,以避免数值重叠
plt.tight_layout()# 显示图表
plt.show()
3.2 图表效果

运行上述代码后,你将看到一个包含柱状图和折线图的图表:

  • 柱状图:展示每个用户的交易次数。

  • 折线图:展示交易次数的趋势变化。

每个柱状图的顶部和折线图的数据点上方都会显示数值标签,帮助更直观地查看数据。

图片

报告中可以包含每个用户的总消费金额、每月的销售趋势、各类产品的销量等。

4. 性能优化

在进行大规模数据分析时,查询性能非常重要。以下是一些常见的优化方法:

4.1 索引优化

为经常查询的字段(如 user_idtransaction_date 等)创建索引,可以大大提高查询性能:

CREATE INDEX idx_user_id ON transactions(user_id);
CREATE INDEX idx_transaction_date ON transactions(transaction_date);
4.2 分区表

对于非常大的表,使用分区表可以提高查询效率。例如,可以按月份将交易数据进行分区:

CREATE TABLE transactions (transaction_id INT,user_id INT,amount DECIMAL(10, 2),transaction_date DATE
)
PARTITION BY RANGE (YEAR(transaction_date)) (PARTITION p2024 VALUES LESS THAN (2025),PARTITION p2025 VALUES LESS THAN (2026)
);

MySQL 是一个强大的数据库管理工具,它可以支持从数据清洗、查询到分析和报告的全过程。在进行数据分析时,我们可以通过 SQL 语句来进行数据提取和处理,通过其他工具进行可视化,最终为决策提供数据支持。在处理大规模数据时,我们还需要关注性能优化,确保查询速度。

通过这些步骤,我们可以使用 MySQL 在实际的业务场景中进行高效的数据分析,并通过 Python 的数据可视化库,如 matplotlib,将分析结果呈现为易于理解的图表。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/24445.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【博资考2】网安学院-北航网安基础部分(简洁版)

【博资考2】网安学院-北航网安基础部分 写在最前面北航网安学院考纲(二)知识要点(三)快速梳理1. **单钥密码体制**2. **双钥密码体制**3. **消息认证与杂凑函数**4. **数字签名**5. **密码协议**6. **数字证书与公钥基础设施 (PKI…

【Transformer模型学习】第二篇:多头注意力机制

文章目录 0. 前言1. 注意力机制(Attention)概述2. Q、K、V矩阵是怎么来的?3. 缩放点积注意力(Scaled Dot-Product Attention)4. 多头注意力(Multi-Head Attention)5. 多头注意力的好处6. 总结 0…

网络运维学习笔记(DeepSeek优化版)002网工初级(HCIA-Datacom与CCNA-EI)子网划分与协议解析

文章目录 子网划分与协议解析1. VLSM与CIDR技术解析1.1 VLSM(Variable Length Subnetwork Mask,可变长子网掩码)1.2 CIDR(Classless Inter-Domain Routing,无类域间路由) 2. 子网划分方法与计算2.1 常规划分…

将VsCode变得顺手好用(1

目录 设置中文 配置调试功能 提效和增强相关插件 主题和图标相关插件 创建js文件 设置中文 打开【拓展】 输入【Chinese】 下载完成后重启Vs即可变为中文 配置调试功能 在随便一个位置新建一个文件夹,用于放置调试文件以及你未来写的代码,随便命名但…

在线疫苗预约小程序(论文源码调试讲解)

第4章 系统设计 用户对着浏览器操作,肯定会出现某些不可预料的问题,但是不代表着系统对于用户在浏览器上的操作不进行处理,所以说,要提前考虑可能会出现的问题。 4.1 系统设计思想 系统设计,肯定要把设计的思想进行统…

MySql数据库运维学习笔记

数据库运维常识 DQL、DML、DCL 和 DDL 是 SQL(结构化查询语言)中的四个重要类别,它们分别用于不同类型的数据库操作,下面为你简单明了地解释这四类语句: 1. DQL(数据查询语言,Data Query Langu…

Redis 集群的三种模式:一主一从、一主多从和多主多从

本文记述了博主在学习 Redis 在大型项目下的使用方式,包括如何设置Redis主从节点,应对突发状况如何处理。在了解了Redis的集群搭建和相关的主从复制以及哨兵模式的知识以后,进而想要了解 Redis 集群如何使用,如何正确使用&#xf…

LangChain大模型应用开发:基于RAG实现文档问答

介绍 大家好,博主又来给大家分享知识了。随着大模型应用的不断发展,很多开发者都在探索如何更好地利用相关工具进行开发。那么这次给大家分享的内容是使用LangChain进行大模型应用开发中的基于RAG实现文档问答的功能。 好了,我们直接进入正…

零样本学习 zero-shot

1 是什么 2 如何利用零样本学习进行跨模态迁移? demo代码 安装clip pip install ftfy regex tqdm pip install githttps://github.com/openai/CLIP.git import torch import clip from PIL import Image# 加载 CLIP 模型 device "cuda" if torch.cuda.i…

防火墙双机热备---VRRP,VGMP,HRP(超详细)

双机热备技术-----VRRP,VGMP,HRP三个组成 注:与路由器VRRP有所不同,路由器是通过控制开销值控制数据包流通方向 防火墙双机热备: 1.主备备份模式 双机热备最大的特点就是防火墙提供了一条专门的备份通道(心…

面试八股文--数据库基础知识总结(1)

1、数据库的定义 数据库(DataBase,DB)简单来说就是数据的集合数据库管理系统(Database Management System,DBMS)是一种操纵和管理数据库的大型软件,通常用于建立、使用和维护数据库。数据库系统…

怎么在Github上readme文件里面怎么插入图片?

环境: Github 问题描述: 怎么在Github上readme文件里面怎么插入图片? https://github.com/latiaoge/AI-Sphere-Butler/tree/master 解决方案: 1.相对路径引用 上传图片到仓库 将图片文件(如 .png/.jpg&#xff…

Unity自定义树(Tree)

一、创建自定义树 右键——3D Object——Tree 树的大致形态: 二、主干树的整体设置 Distribution Tree Seed:树种子,调节此参数就可获得不同形态的树桩 Area Spread:区域的大小 Ground Offset:树距离初始地面的偏移…

Debezium日常分享系列之:Debezium 3.1.0.Alpha2发布

Debezium日常分享系列之:Debezium 3.1.0.Alpha2发布 模式历史配置默认值的变更可能的 Vitess 数据丢失Oracle 的 ReselectColumnsPostProcessor 行为变更Reselect 列后处理器的错误处理模式TinyGo WASM 数据类型改进Debezium 平台转换 UI 中的谓词支持Debezium 平台…

STM32MP157A-FSMP1A单片机移植Linux系统I2C总线驱动

由于I2C总线驱动为Linux内核自带的总线驱动,在一个新的板子上可能由于不同的定义与芯片原厂定义的I2C管脚有所不同,这时就需要开发人员对设备树信息及内核驱动进行更新。 原理图可知,I2C的SCL对应PF14,SDA对应PF15 在Linux内核中…

My first Android application

界面元素组成&#xff1a; 功能代码&#xff1a; /*实现功能&#xff1a;当输入内容后&#xff0c;欢迎文本发生相应改变&#xff0c;并清除掉文本域内容当未输入任何内容时&#xff0c;弹出提示文本以警告用户*/val greetingText findViewById<TextView>(R.id.printer)…

深度学习基础--ResNet网络的讲解,ResNet50的复现(pytorch)以及用复现的ResNet50做鸟类图像分类

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 前言 如果说最经典的神经网络&#xff0c;ResNet肯定是一个&#xff0c;这篇文章是本人学习ResNet的学习笔记&#xff0c;并且用pytorch复现了ResNet50&…

【DeepSeek】【GPT-Academic】:DeepSeek集成到GPT-Academic(官方+第三方)

目录 1 官方deepseek 1.1 拉取学术GPT项目 1.2 安装依赖 1.3 修改配置文件中的DEEPSEEK_API_KEY 2 第三方API 2.1 修改DEEPSEEK_API_KEY 2.2 修改CUSTOM_API_KEY_PATTERM 2.3 地址重定向 2.4 修改模型参数 2.5 成功调用 2.6 尝试添加一个deepseek-r1参数 3 使用千帆…

用Golang与WebAssembly构建高性能Web应用:详解`syscall/js`包

用Golang与WebAssembly构建高性能Web应用&#xff1a;详解syscall/js包 引言为什么选择syscall/js包&#xff1f;适用场景 syscall/js包概述syscall/js包的核心概念1. js.Global2. js.Value3. js.Func4. js.Null 和 js.Undefined syscall/js包在WebAssembly中的位置 环境配置与…

本地部署轻量级web开发框架Flask并实现无公网ip远程访问开发界面

文章目录 1. 安装部署Flask2. 安装Cpolar内网穿透3. 配置Flask的web界面公网访问地址4. 公网远程访问Flask的web界面 本篇文章主要讲解如何在本地安装Flask&#xff0c;以及如何将其web界面发布到公网进行远程访问。 Flask是目前十分流行的web框架&#xff0c;采用Python编程…