SQL 必知必会
陈旸
清华大学计算机博士
73338 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 50 讲
第一章:SQL语法基础篇 (19讲)
SQL 必知必会
15
15
1.0x
00:00/00:00
登录|注册

47丨如何利用SQL对零售数据进行分析?

支持度计算
参数设定
什么是置信度?
什么是频繁项集?
SQL+Python
蚂蚁金服的SQLFlow
Google的BigQuery ML
PostgreSQL和Madlib项目
SQL Server提供的BI分析工具
交流和分享
购物篮分析的例子
业务增长依赖于SQL引擎+AI引擎
数据分析是Python的擅长
SQL工具作为数据查询和分析的入口
运行结果
使用Apriori工具包进行关联分析
数据预处理
数据加载
案例:挖掘零售数据中的频繁项集与关联规则
使用SQL进行数据分析的5种姿势
总结
使用SQL+Python完成零售数据的关联分析
如何利用SQL对零售数据进行分析?

该思维导图由 AI 生成,仅供参考

我们通过 OLTP 系统实时捕捉到了用户的数据,还需要在 OLAP 系统中对它们进行分析。之前我们讲解了如何对数据进行清洗,以及如何对分散在不同地方的数据进行集成,今天我们来看下如何使用 SQL 分析这些数据。
关于这部分内容,今天我们一起来学习下:
使用 SQL 进行数据分析都有哪几种姿势?
如何通过关联规则挖掘零售数据中的频繁项集?
如何使用 SQL+Python 完成零售数据的关联分析?

使用 SQL 进行数据分析的 5 种姿势

在 DBMS 中,有些数据库管理系统很好地集成了 BI 工具,可以方便我们对收集的数据进行商业分析。
SQL Server 提供了 BI 分析工具,我们可以通过使用 SQL Server 中的 Analysis Services 完成数据挖掘任务。SQL Server 内置了多种数据挖掘算法,比如常用的 EM、K-Means 聚类算法、决策树、朴素贝叶斯和逻辑回归等分类算法,以及神经网络等模型。我们还可以对这些算法模型进行可视化效果呈现,帮我们优化和评估算法模型的好坏。
PostgreSQL 是免费开源的对象 - 关系数据库(ORDBMS),它的稳定性非常强,功能强大,在 OLTP 和 OLAP 系统上表现都非常出色。同时在机器学习上,配合 Madlib 项目可以让 PostgreSQL 如虎添翼。Madlib 包括了多种机器学习算法,比如分类、聚类、文本分析、回归分析、关联规则挖掘和验证分析等功能。这样我们可以通过使用 SQL,在 PostgreSQL 中使用各种机器学习算法模型,帮我们进行数据挖掘和分析。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了如何利用SQL对零售数据进行分析的方法。作者列举了在不同数据库管理系统中使用SQL进行数据分析的五种姿势,包括使用SQL Server的BI分析工具、PostgreSQL配合Madlib项目、Google的BigQuery ML、蚂蚁金服的SQLFlow工具以及SQL+Python的方法。通过一个购物篮问题的案例,详细介绍了如何使用Apriori算法进行关联分析,解释了频繁项集和置信度的概念。最后,作者以SQL+Python完成零售数据的关联分析为例,展示了如何通过SQLAlchemy进行SQL查询,使用efficient_apriori工具包的Apriori算法进行关联分析。整个过程包括数据加载、数据预处理和关联分析三个部分。通过这些方法,读者可以快速了解如何利用SQL进行零售数据分析,以及如何应用关联分析算法挖掘零售数据中的规律。文章强调了采用SQL工具作为数据查询和分析的入口是一种数据全栈的思路,对于开发人员来说降低了数据分析的技术门槛。如果读者想要对机器学习或者数据分析算法有更深入的理解,可以参考作者的《数据分析实战45讲》专栏。整体而言,本文为读者提供了利用SQL进行零售数据分析的实用方法,并展示了如何结合Python进行关联分析,为读者提供了一种全面的数据分析思路。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《SQL 必知必会》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(10)

  • 最新
  • 精选
  • mickey
    import numpy as np import pandas as pd title = ['牛奶', '面包', '尿布', '可乐', '啤酒', '鸡蛋']; x = [[1, 1, 1, 0, 0, 0], [0, 1, 1, 1, 1, 0], [1, 0, 1, 0, 1, 1], [1, 1, 1, 0, 1, 0], [1, 1, 1, 1, 0, 0]] df = pd.DataFrame(x, columns=title) # 创建两个表 分别作为支持度和置信度的准备表 df1 = pd.DataFrame(np.zeros([1, 6]), index=['支持度'], columns=title) df2 = pd.DataFrame(np.zeros([6, 6]), index=title, columns=title) df3 = pd.DataFrame(np.zeros([6, 6]), index=title, columns=title) # 计算支持度 for i in x: for j in range(1): for k in range(j, 6): if not i[k] : continue df1.iloc[j,k] += 1 support = df1.apply(lambda x: x /5) # 返回支持度的结果 print(support) # 计算置信度 for i in x: for j in range(5): # 如果为0 就跳过 if not i[j] : continue # 如果不0,继续遍历,如果有购买,便+1 for k in range(j+1,5): if not i[k] : continue df2.iloc[j,k] += 1 df2.iloc[k,j] += 1 for j in range(6): df3.iloc[j] = df2.iloc[j] / df.sum()[j] confidence = df3.round(2) # 以3位小数返回置信度表 # 返回置信度的结果 print(confidence) 牛奶 面包 尿布 可乐 啤酒 鸡蛋 支持度 0.8 0.8 1.0 0.4 0.6 0.2 牛奶 面包 尿布 可乐 啤酒 鸡蛋 牛奶 0.00 0.75 1.0 0.25 0.5 0.0 面包 0.75 0.00 1.0 0.50 0.5 0.0 尿布 0.80 0.80 0.0 0.40 0.6 0.0 可乐 0.50 1.00 1.0 0.00 0.5 0.0 啤酒 0.67 0.67 1.0 0.33 0.0 0.0 鸡蛋 0.00 0.00 0.0 0.00 0.0 0.0

    作者回复: 赞一下,除了自己写,你还可以使用efficient_apriori或者mlxtend工具包 from mlxtend.frequent_patterns import apriori 使用起来很方便

    2019-09-27
    2
    19
  • 学习
    牛奶,面包,尿布同时出现是3,支持度是3/5=0.6

    作者回复: 正确

    2019-09-27
    2
  • mickey
    支持度 牛奶 0.8 面包 0.8 尿布 1 可乐 0.4 啤酒 0.6 鸡蛋 0.2

    作者回复: 正确,同时(牛奶、面包、尿布)的支持度应该是3/5=0.6

    2019-09-27
    1
  • JustDoDT
    efficient-apriori官方文档 https://efficient-apriori.readthedocs.io/en/stable/

    作者回复: 感谢分享文档,除了使用efficient-apriori,还可以使用mlxtend.frequent_patterns 这个工具

    2019-09-27
    1
  • 骑行的掌柜J
    评论里朋友ttttt说” 遇到错误:mysql.connector.errors.NotSupportedError) Authentication plugin 'caching_sha2_password' is not supported “ 换pymysql就可以,不过我这里有另一种解法,可以到我的博客看看,希望对你有帮助!谢谢 https://blog.csdn.net/weixin_41013322/article/details/103427293

    作者回复: 整理的很好

    2019-12-06
  • TKbook
    transactions = [] temp_index = 0 for i, v in orders_series.items(): if i != temp_index: temp_set = set() temp_index = i temp_set.add(v) transactions.append(temp_set) print(transactions) else: temp_set.add(v) 老师,这里的transactions = [] 里面的元素,不应该是每个订单所有的商品集合吗? 但是上述代码不是实现这个需求

    作者回复: transactions里面是每个订单的商品集合,你可以运行下是work的

    2019-09-27
  • JustDoDT
    # 一行代码数据集格式转换 # transactions = list(data.groupby('Transaction').agg(lambda x: set(x.Item.values))['Item']) # 完整代码 from efficient_apriori import apriori import sqlalchemy as sql import pandas as pd # 数据加载 engine = sql.create_engine('mysql+pymysql://root:passwd@localhost/wucai') query = 'SELECT * FROM bread_basket' data = pd.read_sql_query(query, engine) # 统一小写 data['Item'] = data['Item'].str.lower() # 去掉none项 data = data.drop(data[data.Item == 'none'].index) # 得到一维数组orders_series,并且将Transaction作为index, value为Item取值 orders_series = data.set_index('Transaction')['Item'] # 将数据集进行格式转换 transactions = transactions = list(data.groupby('Transaction').agg(lambda x: set(x.Item.values))['Item']) # 挖掘频繁项集和频繁规则 itemsets, rules = apriori(transactions, min_support=0.02, min_confidence=0.5) print('频繁项集:', itemsets) print('关联规则:', rules) # ----------输出结果------------------ # 频繁项集: {1: {('alfajores',): 344, ('bread',): 3096, ('brownie',): 379, ('cake',): 983, ('coffee',): 4528, ('cookies',): 515, ('farm house',): 371, ('hot chocolate',): 552, ('juice',): 365, ('medialuna',): 585, ('muffin',): 364, ('pastry',): 815, ('sandwich',): 680, ('scandinavian',): 275, ('scone',): 327, ('soup',): 326, ('tea',): 1350, ('toast',): 318, ('truffles',): 192}, 2: {('bread', 'cake'): 221, ('bread', 'coffee'): 852, ('bread', 'pastry'): 276, ('bread', 'tea'): 266, ('cake', 'coffee'): 518, ('cake', 'tea'): 225, ('coffee', 'cookies'): 267, ('coffee', 'hot chocolate'): 280, ('coffee', 'juice'): 195, ('coffee', 'medialuna'): 333, ('coffee', 'pastry'): 450, ('coffee', 'sandwich'): 362, ('coffee', 'tea'): 472, ('coffee', 'toast'): 224}} 关联规则: [{cake} -> {coffee}, {cookies} -> {coffee}, {hot chocolate} -> {coffee}, {juice} -> {coffee}, {medialuna} -> {coffee}, {pastry} -> {coffee}, {sandwich} -> {coffee}, {toast} -> {coffee}]

    作者回复: Good Job

    2019-09-27
    2
  • JustDoDT
    遇到错误:NotSupportedError: (mysql.connector.errors.NotSupportedError) Authentication plugin 'caching_sha2_password' is not supported (Background on this error at: http://sqlalche.me/e/tw8g) 解决方法 engine = sql.create_engine( 'mysql+pymysql://{}:{}@{}/{}'.format(user, passwd, host, database)) mysql+mysqlconnector 改成 mysql+pymysql 就行了
    2019-09-27
    2
  • 邵家伟
    C# string[] item = { "牛奶", "面包", "尿布", "鸡蛋", "啤酒", "可乐" }; int[,] Record = { { 1, 1, 1, 0, 0, 0 }, { 0, 1, 1, 0, 1, 0 }, { 1, 0, 1, 1, 1, 0 }, { 1, 1, 1, 0, 1, 0 }, { 1, 1, 1, 0, 0, 1 } }; double SupportRate; for (int a = 0; a < 6; a++)//列遍历 { int Count = 0;int total = 0; for (int b = 0; b < 5; b++)//行遍历 { total += 1; if (Record[b, a] == 1) Count += 1; } SupportRate = Convert.ToDouble(Count) / Convert.ToDouble(total); Context.Response.Write(item[a] + "支持度为" + SupportRate+"</br>"); } double[,] BelieveRate = new double[6, 6]; for (int a = 0; a < 6; a++)//行 { for (int b = 0; b < 6; b++) //列 { if (a == b) BelieveRate[a, b] = 0; else { int total = 0; int count = 0; for (int c = 0; c < 5; c++) { if(Record[c,a]==1) { total += 1; if (Record[c, b] == 1) count += 1; } } BelieveRate[a,b]=Convert.ToDouble(count)/Convert.ToDouble(total); } } } for (int a = 0; a < 7; a++) { for (int b = 0; b < 7; b++) { if (a == 0 && b == 0) Context.Response.Write("置信度"); if(a==0&&b>0) Context.Response.Write("&nbsp; &nbsp; " + item[b-1]+ "&nbsp; &nbsp;&nbsp; "); if (a > 0 && b == 0) Context.Response.Write("&nbsp; &nbsp;" + item[a-1]+ "&nbsp; &nbsp; &nbsp;"); if (a > 0 && b > 0) Context.Response.Write(BelieveRate[a - 1, b - 1].ToString("0.00") + " &nbsp; &nbsp; &nbsp; &nbsp; "); } Context.Response.Write("</br>"); }
    2021-07-07
    1
  • 邵家伟
    结果: 牛奶支持度为0.8 面包支持度为0.8 尿布支持度为1 鸡蛋支持度为0.2 啤酒支持度为0.6 可乐支持度为0.2 置信度 牛奶 面包 尿布 鸡蛋 啤酒 可乐 牛奶 0.00 0.75 1.00 0.25 0.50 0.25 面包 0.75 0.00 1.00 0.00 0.50 0.25 尿布 0.80 0.80 0.00 0.20 0.60 0.20 鸡蛋 1.00 0.00 1.00 0.00 1.00 0.00 啤酒 0.67 0.67 1.00 0.33 0.00 0.00 可乐 1.00 1.00 1.00 0.00 0.00 0.00
    2021-07-07
收起评论
显示
设置
留言
10
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部