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

news2025/2/27 0:24:17

在数据驱动的时代,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_num
    FROM transactions
)
DELETE FROM transactions
WHERE transaction_id IN (
    SELECT transaction_id
    FROM CTE
    WHERE 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.coloradmin.cn/o/2306613.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【算法系列】归并排序详解

文章目录 归并排序详解1. 基本原理1.1 分治法策略1.2 归并排序步骤1.3 图解示例 2. 时间复杂度与空间复杂度2.1 时间复杂度2.2 空间复杂度 3. 稳定性4. Java 实现示例5. 归并排序的优点与缺点5.1 优点5.2 缺点 6. 总结 归并排序详解 归并排序(Merge Sort&#xff0…

Vue的项目创建以及项目目录与组合式API

一.创建Vue 1.Vue-CLI:创建Vue的脚手架工具 2.Create-vue:是Vue官方提供的脚手架之一,底层采用官方自主研发的vite,快捷,开发方便。 3.准备工作:系统中需要安装nodejs环境,在该环境中提供npm包管理器 4.创建Vue项目的命令:npm init vuela…

【学习笔记】计算机网络(四)

第4章 网络层 文章目录 第4章 网络层4.1 网络层的几个重要概念4.1.1 网络层提供的两种服务虚电路服务(Virtual Circuit Service)数据报服务(Datagram Service) 4.1.2 网络层的两个层面 4.2 网际协议 IP - IPv44.2.1 虚拟互连网络4…

DeepSeek-R1:通过强化学习激励大语言模型的推理能力

摘要 本文介绍了我们的第一代推理模型,DeepSeek-R1-Zero 和 DeepSeek-R1。DeepSeek-R1-Zero 是通过大规 模强化学习(RL)训练的模型,在没有使用监督微调(SFT)这个前置步骤的情况下,展示了卓越的推…

洛谷 P8705:[蓝桥杯 2020 省 B1] 填空题之“试题 E :矩阵” ← 卡特兰数

【题目来源】 https://www.luogu.com.cn/problem/P8705 【题目描述】 把 1∼2020 放在 21010 的矩阵里。要求同一行中右边的比左边大,同一列中下边的比上边的大。一共有多少种方案? 答案很大,你只需要给出方案数除以 2020 的余数即可。 【答案提交】 …

【无标题】网络安全公钥密码体制

第一节 网络安全 概述 一、基本概念 网络安全通信所需要的基本属性“ 机密性;消息完整性;可访问性与可用性;身份认证。 二、网络安全威胁 窃听;插入;假冒;劫持;拒绝服务Dos和分布式拒绝服务…

【含开题报告+文档+PPT+源码】基于SpringBoot的进销存管理系统的设计与实现

开题报告 本文提出并研发了一款基于Spring Boot框架构建的进销存管理系统,该系统集成了全方位的企业运营管理功能,涵盖了用户登录验证、系统公告管理、员工信息与权限管理、物料全流程(采购入库、销售出库、退货处理)控制、部门组…

Linux-SaltStack配置

文章目录 SaltStack配置 🏡作者主页:点击! 🤖Linux专栏:点击! ⏰️创作时间:2025年02月24日20点51分 SaltStack配置 SaltStack 中既支持SSH协议也支持我们的一个客户端 #获取公钥(…

事务的4个特性和4个隔离级别

事务的4个特性和4个隔离级别 1. 什么是事务2. 事务的ACID特性2.1 原子性2.2 一致性2.3 持久性2.4 隔离性 3. 事务的创建4. 事务并发时出现的问题4.1 DIRTY READ 脏读4.2 NON - REPEATABLR READ 不可重复读4.3 PHANTOM READ 幻读 5. 事务的隔离级别5.1 READ UNCOMMITTED 读未提交…

对计算机中缓存的理解和使用Redis作为缓存

使用Redis作为缓存缓存例子缓存的引入 Redis缓存的实现 使用Redis作为缓存 缓存 ​什么是缓存,第一次接触这个东西是在考研学习408的时候,计算机组成原理里面学习到Cache缓存,用于降低由于内存和CPU的速度的差异带来的延迟。它是在CPU和内存…

SOME/IP-SD -- 协议英文原文讲解5

前言 SOME/IP协议越来越多的用于汽车电子行业中,关于协议详细完全的中文资料却没有,所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块: 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 5.1.2.5 S…

lowagie(itext)老版本手绘PDF,包含页码、水印、图片、复选框、复杂行列合并等。

入口类:exportPdf ​ package xcsy.qms.webapi.service;import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.common.utils.StringUtils; import com.ibm.icu.text.RuleBasedNumberFormat; import com.lowa…

达梦有没有类似oerr的功能

在oracle 23ai的sqlplus中&#xff0c;直接看异常信息说明&#xff1a; 达梦没有此功能&#xff0c;但是可以造一个 cd /home/dmdba cat >err.sql<<eof set echo off set ver off set timing off set lineshow off set feedback off select * from V\$ERR_INFO wher…

实战-网安

面试感受:网安公司前端实习 今天我有幸面试了一家网络安全公司的前端开发实习岗位,整个过程让我受益匪浅,也让我对未来的职业发展有了更清晰的认识。 首先,面试官非常专业且友好,整个面试氛围轻松但不失严谨。面试一开始,面试官简单介绍了公司背景和团队文化,让我对公…

MybatisPlus-扩展功能-枚举处理器

在Mybatis里有一个叫TypeHandler的类型处理器&#xff0c;我们常见的PO当中的这些成员变量的数据类型&#xff0c;它都有对应的处理器&#xff0c;因此它就能自动实现这些Java数据类型与数据库类型的相互转换。 它里面还有一个叫EnumOrdinalTypeHandler的枚举处理器&#xff0…

力扣2454. 下一个更大元素 IV

力扣2454. 下一个更大元素 IV 题目 题目解析及思路 题目要求对于每个数&#xff0c;找到右边比它大的第二个数&#xff0c;并记录在ans数组中 如果是右边第一个大的&#xff0c;就用一个递减栈即可&#xff0c;栈顶元素如果<当前元素则弹出 第二个大数就要利用弹出的栈顶…

unity学习51:所有UI的父物体:canvas画布

目录 1 下载资源 1.1 在window / Asset store下下载一套免费的UI资源 1.2 下载&#xff0c;导入import 1.3 导入后在 project / Asset下面可以看到 2 画布canvas&#xff0c;UI的父物体 2.1 创建canvas 2.1.1 画布的下面是 event system是UI相关的事件系统 2.2 canvas…

Ollama部署与常用命令

Ollama是一款开源工具&#xff0c;其目标是简化大语言模型在本地环境的部署和使用。它支持多种流行的开源大语言模型&#xff0c;如 Llama 2、Qwen2.5等。 通过Ollama&#xff0c;用户无需具备深厚的技术背景&#xff0c;就能在普通的消费级硬件上快速搭建一个强大的语言处理环…

Visual Studio Code 远程开发方法

方法1 共享屏幕远程控制&#xff0c;如 to desk, 向日葵 &#xff0c;像素太差&#xff0c;放弃 方法2 内网穿透 ssh 第二个方法又很麻烦&#xff0c;尤其是对于 windows 电脑&#xff0c;要使用 ssh 还需要额外安装杂七杂八的东西&#xff1b;并且内网穿透服务提供商提供的…

C语言预编译

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 本文目录 引言正文一、预处理的作用与流程&#xf…