SQL必知必会
陈旸
清华大学计算机博士
立即订阅
10179 人已学习
课程目录
已完结 49 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词丨SQL可能是你掌握的最有用的技能
免费
第一章:SQL语法基础篇 (19讲)
01丨了解SQL:一门半衰期很长的语言
02丨DBMS的前世今生
03丨学会用数据库的方式思考SQL是如何执行的
04丨使用DDL创建数据库&数据表时需要注意什么?
05丨检索数据:你还在SELECT * 么?
06丨数据过滤:SQL数据过滤都有哪些方法?
07丨什么是SQL函数?为什么使用SQL函数可能会带来问题?
08丨什么是SQL的聚集函数,如何利用它们汇总表的数据?
09丨子查询:子查询的种类都有哪些,如何提高子查询的性能?
10丨常用的SQL标准有哪些,在SQL92中是如何使用连接的?
11丨SQL99是如何使用连接的,与SQL92的区别是什么?
12丨视图在SQL中的作用是什么,它是怎样工作的?
13丨什么是存储过程,在实际项目中用得多么?
14丨什么是事务处理,如何使用COMMIT和ROLLBACK进行操作?
15丨初识事务隔离:隔离的级别有哪些,它们都解决了哪些异常问题?
16丨游标:当我们需要逐条处理数据时,该怎么做?
17丨如何使用Python操作MySQL?
18丨SQLAlchemy:如何使用Python ORM框架来操作MySQL?
19丨基础篇总结:如何理解查询优化、通配符以及存储过程?
第二章:SQL性能优化篇 (18讲)
20丨当我们思考数据库调优的时候,都有哪些维度可以选择?
21丨范式设计:数据表的范式有哪些,3NF指的是什么?
22丨反范式设计:3NF有什么不足,为什么有时候需要反范式设计?
23丨索引的概览:用还是不用索引,这是一个问题
24丨索引的原理:我们为什么用B+树来做索引?
25丨Hash索引的底层原理是什么?
26丨索引的使用原则:如何通过索引让SQL查询效率最大化?
27丨从数据页的角度理解B+树查询
28丨从磁盘I/O的角度理解SQL查询的成本
29丨为什么没有理想的索引?
30丨锁:悲观锁和乐观锁是什么?
31丨为什么大部分RDBMS都会支持MVCC?
32丨查询优化器是如何工作的?
33丨如何使用性能分析工具定位SQL执行慢的原因?
34丨答疑篇:关于索引以及缓冲池的一些解惑
35丨数据库主从同步的作用是什么,如何解决数据不一致问题?
36丨数据库没有备份,没有使用Binlog的情况下,如何恢复数据?
37丨SQL注入:你的SQL是如何被注入的?
第三章:认识DBMS (7讲)
38丨如何在Excel中使用SQL语言?
39丨WebSQL:如何在H5中存储一个本地数据库?
40丨SQLite:为什么微信用SQLite存储聊天记录?
41丨初识Redis:Redis为什么会这么快?
42丨如何使用Redis来实现多用户抢票问题
43丨如何使用Redis搭建玩家排行榜?
44丨DBMS篇总结和答疑:用SQLite做词云
第四章:SQL项目实战 (3讲)
45丨数据清洗:如何使用SQL对数据进行清洗?
46丨数据集成:如何对各种数据库进行集成和转换?
47丨如何利用SQL对零售数据进行分析?
结束语 (1讲)
结束语 | 互联网的下半场是数据驱动的时代
SQL必知必会
登录|注册

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

陈旸 2019-09-27
我们通过 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/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《SQL必知必会》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(8)

  • 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
    7
  • ttttt
    遇到错误: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
    1
  • ttttt
    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
  • Destroy、
    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 = [] 里面的元素,不应该是每个订单所有的商品集合吗? 但是上述代码不是实现这个需求
    2019-09-27
  • ttttt

    # 一行代码数据集格式转换
    # 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}]
    2019-09-27
    1
  • mickey
    支持度
    牛奶 0.8
    面包 0.8
    尿布 1
    可乐 0.4
    啤酒 0.6
    鸡蛋 0.2

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

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

    作者回复: 正确

    2019-09-27
收起评论
8
返回
顶部