求SQL语句:统计2022年客户月度交易频次分布
获取2022年客户月度交易频次分布的解决方案
以下提供SQL和Python(Pandas)两种常用实现方式,适合数据分析新手操作:
SQL实现
1. 先统计每个客户2022年各月的交易次数
用CTE临时表存储中间结果:
WITH customer_monthly_trans AS ( SELECT customer_id, DATE_FORMAT(transaction_date, '%Y-%m') AS transaction_month, COUNT(transaction_id) AS monthly_trans_count FROM transactions WHERE YEAR(transaction_date) = 2022 GROUP BY customer_id, transaction_month )
2. 统计各交易频次对应的客户数量(即分布情况)
基于临时表分组统计:
SELECT monthly_trans_count, COUNT(DISTINCT customer_id) AS customer_num FROM customer_monthly_trans GROUP BY monthly_trans_count ORDER BY monthly_trans_count;
注:不同数据库的日期函数可能有差异,比如PostgreSQL用TO_CHAR(transaction_date, 'YYYY-MM'),MySQL用上述DATE_FORMAT,需根据你的数据库类型调整。
Python(Pandas)实现
1. 导入并预处理数据
import pandas as pd # 读取交易数据(根据实际数据源调整,比如从数据库读取、Excel等) df = pd.read_csv('transactions.csv') # 转换交易日期为datetime类型 df['transaction_date'] = pd.to_datetime(df['transaction_date']) # 筛选2022年的交易记录 df_2022 = df[df['transaction_date'].dt.year == 2022]
2. 计算每个客户各月的交易次数
# 按客户和月份分组,统计交易次数 df_monthly = df_2022.groupby( ['customer_id', df_2022['transaction_date'].dt.to_period('M')] )['transaction_id'].count().reset_index(name='monthly_trans_count')
3. 生成交易频次分布
# 按交易频次分组,统计对应客户数 freq_dist = df_monthly.groupby('monthly_trans_count')['customer_id'].nunique().reset_index(name='customer_num') # 按频次排序,便于查看 freq_dist = freq_dist.sort_values('monthly_trans_count') # 输出结果 print(freq_dist)
内容的提问来源于stack exchange,提问作者Bommu
相关产品推荐
相关产品推荐

