V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Hlianbobo
V2EX  ›  Python

pandas 和 sql 数据库的定位有哪些差别?

  •  
  •   Hlianbobo · 2020-10-16 18:16:22 +08:00 · 3576 次点击
    这是一个创建于 1281 天前的主题,其中的信息可能已经有所发展或是发生改变。
    https://mp.weixin.qq.com/s/CrhyIA3hgZtQGJL1EtCOhw
    大致看了一下上面的文章。主要说了一下两者的交集。我猜检索数据 pandas 肯定没有数据库快。有以下几个问题请教一下各位达人

    1 、做数据分析的所谓大数据,应该都存在数据库中吧。即便时爬下来的数据应该也时放在数据库中吧?各位平时工作取数据难道时从一些 python 支持的文件当中读取数据?而不是从数据库中取数据?

    2 、如果日常大多数场景都是从数据库里 select,那么 pandas 检索数据主要应用在什么工作场景中?操作时主要针对什么文件进行?( excel 除外。)

    3 、除了增删查改以外,平时用 pandas 最多的功能是什么?
    29 条回复    2020-10-19 18:16:09 +08:00
    wuwukai007
        1
    wuwukai007  
       2020-10-16 18:57:47 +08:00 via Android
    一个二维数据,pandas 可以反复计算反复拼接,sql 确实可以实现很多分组聚合,但是只能查一次。当数据量大的时候更是这样,一次读完反复计算
    zhangysh1995
        2
    zhangysh1995  
       2020-10-16 18:58:52 +08:00
    sql 是关系型数据库的语音,主要是用来维护数据的。pandas 是一个分析框架,面向应用。
    数据库主要就是增删查改,分析可能跑不动的。。如果是分析的数据库,可能类似 timescale db 这种?
    一般大数据分析应该都不用数据库的吧?
    Hlianbobo
        3
    Hlianbobo  
    OP
       2020-10-16 21:06:05 +08:00
    @zhangysh1995 “分析可能跑不动的”请问关于分析的含义,可否举个例子来说明一下数据库跑不动分析。
    gefranks
        4
    gefranks  
       2020-10-16 21:20:41 +08:00 via iPhone
    当 OLAP 都是弱鸡?
    突然觉得朋友说公司里新来的年轻开发不会写 sql 也不是奇谈了
    imn1
        5
    imn1  
       2020-10-16 21:22:39 +08:00
    数据分析最多是数学计算,不是单纯从一堆数据里面提取这、提取那就能有结果的

    先答 3,最多是计算

    2.例如计算一支股票的移动平均,SQL 干不了这事

    1.图片每个点的 RGB 值,这个就不是从数据库读的,当然这个场景多数是 numpy,不是 pandas
    raymanr
        6
    raymanr  
       2020-10-16 21:49:54 +08:00
    几百万行的数据的话反正我这里是 pandas 比 mysql 这**要快不少的, 而且 where 条件的指定更加方便

    而且 pandas 也能读取各种 csv 和 excel 和数据库中的数据同时使用,
    非常便利的时间函数,
    方便的透视表,
    和其他 python 库无缝衔接,
    数据可以随时 copy 清洗
    还有一点是 pandas 的数据集是有序的, sql 默认是无序的集合, 这就又平添了很多事情, 即使开窗函数也不能很好解决

    我觉得 SQL 还是勉强说得过去, 然而用了 pandas 后, 现在看到 sql 就想吐

    我恨 sql, 去死吧 sql
    raymanr
        7
    raymanr  
       2020-10-16 21:51:42 +08:00
    再补一句去死吧 mysql (和用 mysql 做 olap 的憨逼)
    hooopo
        8
    hooopo  
       2020-10-16 22:39:27 +08:00 via Android
    @zhangysh1995 扯 pandas 才不适合大数据 bigquery 和 snkowflake 了解一下
    hooopo
        9
    hooopo  
       2020-10-16 22:40:21 +08:00 via Android
    @raymanr 死不了 sql 会成为数据统一接口的
    hooopo
        10
    hooopo  
       2020-10-16 22:41:26 +08:00 via Android
    @imn1 移动平均干不了?不会就说不会
    raymanr
        11
    raymanr  
       2020-10-16 23:01:15 +08:00
    @hooopo
    干得了和很方便干不一样, pandas 一个函数修改修改参数就出来了的东西

    sql 写得累死累活的

    不过数据量太大 pandas 确实不适合
    hooopo
        12
    hooopo  
       2020-10-16 23:02:10 +08:00 via Android
    @raymanr 难道 sql 要两个函数?
    raymanr
        13
    raymanr  
       2020-10-16 23:05:37 +08:00
    @hooopo 比如透视表, pd.pivot_table(data, values, index, columns) 就完事, sql 你懂的, 各家还不一样
    hooopo
        14
    hooopo  
       2020-10-16 23:12:40 +08:00 via Android
    @raymanr 好吧 有点道理
    wangyzj
        15
    wangyzj  
       2020-10-16 23:25:19 +08:00
    pandas 处理训练数据样本,量没那么大,快速方便,科学计算封装的好
    超大的数据有 spark ml 和 MapReduce
    但在处理超大数据之前得用 pandas 做样本分析
    locoz
        16
    locoz  
       2020-10-17 00:26:49 +08:00 via Android
    其实你搞清楚它们两个的核心定位就不会有这种奇怪的问题了…一个是主要做数据分析的上层工具,一个是主要做数据长期存储的底层工具,这两个核心定位不同自然会导致性能、用法、方便程度等各方面的不同,都是根据具体用途而定的。
    说白了,数据库在经过外部工具扩展后,也一样可以变成主要做数据分析的工具的组成部分;但主要做数据分析的工具即使扩展了,也不会变成主要做数据长期存储的工具,因为不是同一个层面的东西。
    所以像你后面的问题,存哪真不重要,还是得看具体要怎么用…大数据如果只是临时使用并且以后也不会用的话,一样可以存在内存里用 pandas 做分析、一样可以直接先存到文本文件里…
    liprais
        17
    liprais  
       2020-10-17 00:29:05 +08:00 via iPhone
    @raymanr 移动平均你用 mysql 当然累死累活了
    Hlianbobo
        18
    Hlianbobo  
    OP
       2020-10-17 01:07:54 +08:00
    @raymanr 几百万行的数据一般存在什么文件中?
    user8341
        19
    user8341  
       2020-10-17 02:35:49 +08:00
    这不是奇怪的问题。完全是很合理的问题。用过 pandas 的人都应该思考一下,为什么不用数据库做。两种方法的优缺点在哪里。
    imn1
        20
    imn1  
       2020-10-17 05:11:10 +08:00   ❤️ 1
    @hooopo #10
    我就猜到有人会较真这个,果然

    你对
    笔算也能算啊,SQL 怎么做不了呢?
    我错了
    cmdOptionKana
        21
    cmdOptionKana  
       2020-10-17 08:18:59 +08:00
    比起计算,数据库更重要的功能是储存。pandas 能并发写入并且确保及时持久化吗,有事务吗,有访问权限管理吗?
    siriussilen
        22
    siriussilen  
       2020-10-17 08:44:37 +08:00 via iPhone
    pandas 最垃圾的地方在于不支持并行化
    zhangysh1995
        23
    zhangysh1995  
       2020-10-17 13:57:08 +08:00
    @hooopo 我可没有说 pandas 适合大数据。从我的了解来说,如果现在工具能解决时序分析的问题,Timescale DB 为什么会出现?我是从关系数据库使用的角度来回答问题的。不知道你说话为什么这么咄咄逼人的。
    zhangysh1995
        24
    zhangysh1995  
       2020-10-17 14:09:30 +08:00
    @Hlianbobo 不是所有都不可以,新的数据库要解决问题的。可以看 Percona 的报告,https://www.percona.com/sites/default/files/presentations/Accelerate-MySQL-for-Demanding-OLAP-and-OLTP-Use%20Cases.pdf
    nuistzhou
        25
    nuistzhou  
       2020-10-17 14:54:35 +08:00 via iPhone
    很简单啊,他俩定位就不一样的,数据库是用来存数据的,当然 OLAP 可以进行基本的查询计算啥的很方便,但更高级灵活的分析还是用 pandas 从数据库或者文件里读出来做好一些。
    Hlianbobo
        26
    Hlianbobo  
    OP
       2020-10-17 15:44:46 +08:00
    @nuistzhou 关于高级灵活的分析可否举个常见例子。pandas 做的好,sql 做不到或做起来不方便。
    wuwukai007
        27
    wuwukai007  
       2020-10-17 17:09:03 +08:00
    @Hlianbobo 均方误差、平方差、方差、均方差、协方差,在加上计算移动窗口内的 (均方误差、平方差、方差、均方差、协方差)
    volvo007
        28
    volvo007  
       2020-10-17 20:09:58 +08:00
    一个工具解决所有问题怎么可能,互相取长补短就完了

    问题 1
    有个 py 库叫 sqlalchemy,可以连接各种类型的数据库。连上,用这个类型 sql 的语法读想要的部分,传递给 pandas

    问题 2
    sql 的应用场景远比单一个 pandas 应用广泛。即使只用 select,有一些工具软件可以让这些 sql 命令模块化、可视化,方便开发和迁移(比如 Alteryx )。对应的 python 目前这一块还比较弱,很多时候还是要手写代码

    问题 3
    pands 用来做数据分析的,是“用数据”而不是“维护 /存取数据”
    princelai
        29
    princelai  
       2020-10-19 18:16:09 +08:00
    @Hlianbobo #26 我 SQL 只会简单,但我说说我常用的 pandas 高级操作,你看看 SQL 好实现吗,pivot_table,透视表。melt 和 explode 操作,相当与 wide to long,rolling(window).apply(func),这个可以自定义周期,自定义函数。resample 、asfreq 、to_period 等时间操作,比如将一段有序但不连续的时间序列更换周期或者将该序列插值为固定周期的数据,然后将内部新时间点填充新数据。cut 、qcut 配合 categories 分组数据。pandas 观望上每个 API 都有例子可以查看。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1706 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 16:38 · PVG 00:38 · LAX 09:38 · JFK 12:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.