1
wuwukai007 2020-10-16 18:57:47 +08:00 via Android
一个二维数据,pandas 可以反复计算反复拼接,sql 确实可以实现很多分组聚合,但是只能查一次。当数据量大的时候更是这样,一次读完反复计算
|
2
zhangysh1995 2020-10-16 18:58:52 +08:00
sql 是关系型数据库的语音,主要是用来维护数据的。pandas 是一个分析框架,面向应用。
数据库主要就是增删查改,分析可能跑不动的。。如果是分析的数据库,可能类似 timescale db 这种? 一般大数据分析应该都不用数据库的吧? |
3
Hlianbobo OP @zhangysh1995 “分析可能跑不动的”请问关于分析的含义,可否举个例子来说明一下数据库跑不动分析。
|
4
gefranks 2020-10-16 21:20:41 +08:00 via iPhone
当 OLAP 都是弱鸡?
突然觉得朋友说公司里新来的年轻开发不会写 sql 也不是奇谈了 |
5
imn1 2020-10-16 21:22:39 +08:00
数据分析最多是数学计算,不是单纯从一堆数据里面提取这、提取那就能有结果的
先答 3,最多是计算 2.例如计算一支股票的移动平均,SQL 干不了这事 1.图片每个点的 RGB 值,这个就不是从数据库读的,当然这个场景多数是 numpy,不是 pandas |
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 |
7
raymanr 2020-10-16 21:51:42 +08:00
再补一句去死吧 mysql (和用 mysql 做 olap 的憨逼)
|
8
hooopo 2020-10-16 22:39:27 +08:00 via Android
@zhangysh1995 扯 pandas 才不适合大数据 bigquery 和 snkowflake 了解一下
|
11
raymanr 2020-10-16 23:01:15 +08:00
|
13
raymanr 2020-10-16 23:05:37 +08:00
@hooopo 比如透视表, pd.pivot_table(data, values, index, columns) 就完事, sql 你懂的, 各家还不一样
|
15
wangyzj 2020-10-16 23:25:19 +08:00
pandas 处理训练数据样本,量没那么大,快速方便,科学计算封装的好
超大的数据有 spark ml 和 MapReduce 但在处理超大数据之前得用 pandas 做样本分析 |
16
locoz 2020-10-17 00:26:49 +08:00 via Android
其实你搞清楚它们两个的核心定位就不会有这种奇怪的问题了…一个是主要做数据分析的上层工具,一个是主要做数据长期存储的底层工具,这两个核心定位不同自然会导致性能、用法、方便程度等各方面的不同,都是根据具体用途而定的。
说白了,数据库在经过外部工具扩展后,也一样可以变成主要做数据分析的工具的组成部分;但主要做数据分析的工具即使扩展了,也不会变成主要做数据长期存储的工具,因为不是同一个层面的东西。 所以像你后面的问题,存哪真不重要,还是得看具体要怎么用…大数据如果只是临时使用并且以后也不会用的话,一样可以存在内存里用 pandas 做分析、一样可以直接先存到文本文件里… |
19
user8341 2020-10-17 02:35:49 +08:00
这不是奇怪的问题。完全是很合理的问题。用过 pandas 的人都应该思考一下,为什么不用数据库做。两种方法的优缺点在哪里。
|
21
cmdOptionKana 2020-10-17 08:18:59 +08:00
比起计算,数据库更重要的功能是储存。pandas 能并发写入并且确保及时持久化吗,有事务吗,有访问权限管理吗?
|
22
siriussilen 2020-10-17 08:44:37 +08:00 via iPhone
pandas 最垃圾的地方在于不支持并行化
|
23
zhangysh1995 2020-10-17 13:57:08 +08:00
@hooopo 我可没有说 pandas 适合大数据。从我的了解来说,如果现在工具能解决时序分析的问题,Timescale DB 为什么会出现?我是从关系数据库使用的角度来回答问题的。不知道你说话为什么这么咄咄逼人的。
|
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
|
25
nuistzhou 2020-10-17 14:54:35 +08:00 via iPhone
很简单啊,他俩定位就不一样的,数据库是用来存数据的,当然 OLAP 可以进行基本的查询计算啥的很方便,但更高级灵活的分析还是用 pandas 从数据库或者文件里读出来做好一些。
|
27
wuwukai007 2020-10-17 17:09:03 +08:00
@Hlianbobo 均方误差、平方差、方差、均方差、协方差,在加上计算移动窗口内的 (均方误差、平方差、方差、均方差、协方差)
|
28
volvo007 2020-10-17 20:09:58 +08:00
一个工具解决所有问题怎么可能,互相取长补短就完了
问题 1 有个 py 库叫 sqlalchemy,可以连接各种类型的数据库。连上,用这个类型 sql 的语法读想要的部分,传递给 pandas 问题 2 sql 的应用场景远比单一个 pandas 应用广泛。即使只用 select,有一些工具软件可以让这些 sql 命令模块化、可视化,方便开发和迁移(比如 Alteryx )。对应的 python 目前这一块还比较弱,很多时候还是要手写代码 问题 3 pands 用来做数据分析的,是“用数据”而不是“维护 /存取数据” |
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 都有例子可以查看。
|