想成为数据驱动的产品经理,那么SQL+Python是必备技能!
以前要手动拉取数据、整理 Excel、做图,如果你懂 Python,你可以写个简单的自动化脚本,每天自动拉取数据,减少手动工作量,大大提升效率!
在数据分析时,我们经常需要对数据进行条件筛选,本文将介绍如何使用python和MySQL直接获取和分析数据,pandas是python中常用的数据分析库,可以帮助我们进行SQL语句的处理和分析,并附带代码示例。
1.建立MySQL数据库
首先,假设我们的目标是通过python将数据库中的数据计算出交易总额、总数量和退单率。同时我们已经将所有收集的数据,将其交易额、笔数、成交量和退单率作为列属性生成了SQL数据库:
create database economy; -- 创建数据库
use `economy`; -- 使用数据库
create table `transactions`(
`transaction_id` varchar(20) primary key,
`amount` decimal(10,2) ,
`quantity` int default null,
`is_refunded` boolean not null default 0
); -- 创建表格,增加列属性
insert into `transactions`values(001,34000,12,1);
insert into `transactions`values(002,46000,10,0);
insert into `transactions`values(003,34000,11,0);
insert into `transactions`values(004,12400,3,1);
insert into `transactions`values(005,54000,15,0);
insert into `transactions`values(006,23000,9,0); -- 导入数据
select *from `transactions`; -- 查看整个表格
2.接入pandas库
完成SQL的数据导入之后,我们将pandas库接入python,在终端(Windows 命令提示符 cmd、PowerShell 或 macOS/Linux 终端)中输入以下命令:
pip install pandas
如果你的python的版本比较旧,可以升级之后再安装pandas库:
python -m pip install --upgrade pip
pip install pandas
3.连接数据库并查询数据
接下来,我们在python使用借助MySQL.connector 库来连接到 MySQL 数据库。
import mysql.connector # 连接 MySQL
import pandas as pd # 处理数据
设置一个字典(这里是config 字典)用于配置 MySQL 数据库连接的参数。
#config字典主要是用来配置 MySQL 数据库连接的参数
config = {
'user': "root", # MySQL 的用户名
'password': "数据库密码", # MySQL 数据库的密码(请替换成你的实际密码)
'host': "your_host", # 数据库服务器IP地址,如'127.0.0.1' 表示本地服务器
'database': "economy", # 需要连接的数据库名称
'raise_on_warnings': True # 当发生警告时,是否抛出异常(True 表示抛出异常)
}
try 是 Python 中用于异常处理的关键字。若try代码块中的代码执行期间出现异常,程序会跳转到对应的except 块来处理该异常。
try:
# 连接数据库
connection = mysql.connector.connect(**config)
cursor = connection.cursor() #创建游标对象,用于执行 SQL 查询和获取查询结果
这里补充说明一下创建游标对象的基本流程:
-
连接数据库:使用connect()方法连接数据库,获取数据库连接对象。
-
创建游标对象:调用cursor()方法,从数据库连接对象创建游标对象。
-
执行 SQL 语句:使用execute()方法在游标对象上执行 SQL 语句。
-
获取查询结果(如果是
SELECT查询):使用fetchall()、fetchone()获取数据。 -
关闭游标和连接:分别调用close()方法关闭游标和数据库连接。
那么接下来我们就按照这个流程,进行查询MySQL中的数据:
query = "SELECT amount, quantity, is_refunded FROM transactions"
cursor.execute(query) # 查询数据
# fetchall()获取所需的查询数据
query = "SELECT amount, quantity, is_refunded FROM transactions"
cursor.execute(query)
results = cursor.fetchall()
except mysql.connector.Error as err:
print(f"数据库连接错误: {err}")
connection = None # except 避免未定义的情况出现,导致程序报错
if connection and connection.is_connected(): #检查数据库连接是否成功是否
print("数据库连接成功!")
pass
在上方的代码中,我们使用execute()方法在游标对象上执行 SQL 语句,并使用fetchall()获取数据。为了避免try代码块中的代码执行出错,导致的程序报错,使用except处理异常情况,确保程序可以进行下去。
4.数据分析
现在,我们已经把 MySQL 里的数据加载到 python 的 Pandas 中,那么接下来计算交易总额、总数量和退单率:
total_amount = 0 #总交易额(初始值为0)
total_quantity = 0 #总成交额(初始值为0)
total_transactions = len(results) # 总交易笔数(results 的长度)
refund_count = 0 # 退单数(初始化为0)
# 遍历 results 结果集,并进行数据处理
for amount, quantity, is_refunded in results:
total_amount += amount # 累加订单金额
total_quantity += quantity # 累加购买的商品数量
if is_refunded: # 如果该订单被退款
refund_count += 1 # 退款笔数 +1
pass
# 计算退单率(退款订单数占比)
if total_transactions > 0:
refund_rate = (refund_count / total_transactions) * 100
else:
refund_rate=0
pass
# 打印汇总统计信息
print(f"总交易额: {total_amount}")
print(f"总笔数: {total_transactions}")
print(f"总成交量: {total_quantity}")
print(f"退单率: {refund_rate:.2f}%")
pass
5.完整代码示例:
import pandas as pd
print(pd.__version__)
import mysql.connector
config ={
'user':"root",
'password':"数据库密码",
'host':"127.0.0.1",
'database':"economy",
'raise_on_warnings': True
}
try:
connection = mysql.connector.connect(**config)
cursor= connection.cursor()
query = "SELECT amount, quantity, is_refunded FROM transactions"
cursor.execute(query)
results = cursor.fetchall()
except mysql.connector.Error as err:
print(f"数据库连接错误: {err}")
connection = None # 避免未定义的情况
if connection and connection.is_connected(): # 后续数据库操作代码
print("数据库连接成功!")
pass
total_amount = 0
total_quantity = 0
total_transactions = len(results)
refund_count = 0
for amount, quantity, is_refunded in results:
total_amount += amount
total_quantity += quantity
if is_refunded:
refund_count += 1
pass
if total_transactions > 0:
refund_rate = (refund_count / total_transactions) * 100
else:
refund_rate=0
pass
print(f"总交易额: {total_amount}")
print(f"总笔数: {total_transactions}")
print(f"总成交量: {total_quantity}")
print(f"退单率: {refund_rate:.2f}%")
pass
print("数据库连接已关闭")
运行之后的结果是:

6.总结:
本文介绍了如何使用python和MySQL进行数据分析,首先我们学习了安装pandas库,使用connect()将 Python 与MySQL进行连接 ,然后使用execute()、fetchall()执行和查询数据结果,最后我们使用for循环计算交易数据(总交易额、退单率等)。
希望本文能够帮助你理解如何使用python对数据库进行数据分析,并在实际数据处理中得到应用。

762





