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

粗看 numpy 和 pandas 后的一点困惑

  •  1
     
  •   Hlianbobo · 2020-12-07 15:20:03 +08:00 · 5614 次点击
    这是一个创建于 1448 天前的主题,其中的信息可能已经有所发展或是发生改变。
    本人没做过数据分析。粗看了一下《 Python 数据科学手册》《利用 Python 进行数据分析》这两本书中关于 numpy 和 pandas 的介绍。主要想了解一下这两个库能做些什么工作。看过以后形成了如下印象,想听听各位高手的看法。

    看起来这两个库就是对矩阵(或表格)数据进行排序,索引,切片,特殊值批量替换(如 NaN,null ),格式转换(如字符串类型的时间数据,转换成时间类型的数据)然后可以根据日期数据进行各种遍历操作。如提取特殊时间段的数据。求指定时间段数据的和,平均值,标准差,各分位数……。数据的转置。批量运算。

    总的印象就是我们日常在 excel 里做的工作通过代码加以实现。是这样么??????

    当然我不否认通过代码实现在处理批量数据时比如 100 行整数。每行数据都要乘以指定的整数。或者有 100 个 excel 文件要做同样的批处理用代码实现肯定的提高效率。但是这些功能似乎用 sql 或 excel 自带的 vba 应该也可以实现吧(也许不如 python 代码简洁。但是也应该可以实现吧?)

    以上是 numpy 和 pandas 的主要作用么?如果是,那么实现的数据处理功能感觉很初级吧,距离“数据科学”似乎还有点远?如果我对 numpy 和 pandas 的印象是错的。那么请各位高手举例指出。例如哪些数据处理是 excel 实现不了或者哪些海量数据的批量处理是 sql 或 vba 实现不了的?
    56 条回复    2020-12-14 19:11:33 +08:00
    czfy
        1
    czfy  
       2020-12-07 15:27:12 +08:00
    pandas 其中还有一个作用是各种 GLM 及变种的模型检验,类似的还有 R 以及各类统计软件( SPSS/STATA/SAS )也能做,这类基本上是统计的事情,研发是很少涉及的,当然你要说 excel 能不能做?也不是完全不能 ,但肯定没有 pandas 这类工具方便
    numpy 用来做机器学习,我就没听说过 excel 可以用来做机器学习了
    murmur
        2
    murmur  
       2020-12-07 15:27:19 +08:00   ❤️ 2
    大体上结论没错,但是你有点看低 excel,excel 在一些人手里是当 BI 用得,excel 本身也有一堆数据处理功能,power pivot,不只是你看得那些个函数

    真要说为什么不用 excel,大概一是要付费,二是总归要依靠 excel,没法拆出来部署,深度开发还是独立组件方便
    zscself
        3
    zscself  
       2020-12-07 15:28:02 +08:00
    我觉得你自己实践一下立马就明白了
    liprais
        4
    liprais  
       2020-12-07 15:35:45 +08:00 via iPhone
    站在岸边看是学不会游泳的
    necomancer
        5
    necomancer  
       2020-12-07 15:41:39 +08:00
    例如哪些数据处理是 excel 实现不了或者哪些海量数据的批量处理是 sql 或 vba 实现不了的?

    完全没有,毕竟 python 和 excel+vba 都是图灵完备的。
    echowuhao
        6
    echowuhao  
       2020-12-07 15:43:00 +08:00 via Android
    假如你又几个 G 的数据 要做各种运算 Excel 咋办

    楼主用过 spss 之类的软件理论上 Excel 也都能做
    Hlianbobo
        7
    Hlianbobo  
    OP
       2020-12-07 15:59:27 +08:00
    @murmur 谢谢回复。如果 numpy 和 pandas 真的就是主要实现那些初级数据处理功能。那这些功能距离数据科学或数据分析还很远呢。
    真要找出数据中的规律,并找出数据规律所反映出的问题,进而对未来数据进行预测,并给出业务建议。光会数据清洗,排序,转置,求和,算标准差,中位数,或者做个简单的线性回归是不足以实现上述四个目标的吧。
    那么真正做“数据科学”“数据分析”相关工作的人,实现上述四个目标过程中真正发挥核心作用的库是什么库呢?
    imn1
        8
    imn1  
       2020-12-07 15:59:47 +08:00   ❤️ 1
    你看到的是浅层用法

    1.质不同,浅层用法如提取等等当然和其他工具不相伯仲,深度计算呢,例如图片每个像素
    2.量不同,10 万条数据试试?现在 10 万条还只能叫小数据呢

    sql 你算算行列式?例如两个行列式相乘

    数据分析最简单的是交叉分析,基本就是 sql 的用法,但进一步的数学模型,例如神经网络,sql 不能做吧
    简单讲,部分数据参与计算的,例如行或列,sql 等是足够的,但全体数据一起参与计算的,例如图片的行列像素,每个 cell 都是平等的,这种计算就需要在内存划出一块进行,自然就需要一个相关的处理模块

    隔壁有一帖:数据结构重要还是算法重要
    做业务、数据结构,没有 numpy 等等也能做,但做算法,尤其是核心算法,如果没有这种科学计算类型的模块,基本就是小刀砍大树,不知何年何月可以完成
    Hlianbobo
        9
    Hlianbobo  
    OP
       2020-12-07 16:01:28 +08:00
    @echowuhao 几个 G 的数据用数据库+sql 语言是不是也可以实现 pandas 和 numpy 的那些功能?另外,pandas 和 numpy 处理几个 G 的数据跑起来是不是也会很慢?
    都没用过。想听听你的评价。
    echowuhao
        10
    echowuhao  
       2020-12-07 16:04:09 +08:00 via Android
    @Hlianbobo 可以 简单的 sql 能做 复杂不行

    几个 G 没压力 再往上几个 T 就是大数据的那套 你也可以说 Excel 都可以做
    Hlianbobo
        11
    Hlianbobo  
    OP
       2020-12-07 16:07:27 +08:00
    @imn1 谢谢回复。你提到的一些 sql 做不了的例如:神经网络行列式相乘。numpy 和 pandas 是可以单独完成上述工作?还是需要其他库配合才能完成?
    确实如你所说,我翻那两本书有大量篇幅是介绍 numpy 和 pandas 的浅层用法的。不知道有没有关于这两个库深层用法的书推荐?
    echowuhao
        12
    echowuhao  
       2020-12-07 16:12:39 +08:00 via Android
    @Hlianbobo sql 也可以做机器学习 有相关的库 图灵完备的语言都可以

    主要是那种工具最适合的问题 我见过有人把 Excel 当数据库用的
    imn1
        13
    imn1  
       2020-12-07 16:18:07 +08:00
    @Hlianbobo #11
    你看的书里面的是基础,还是要懂的,高级计算技巧也是在这些基础上扩展出来的
    深层用法没必要先看书,搜一些文章看看用途,有个感知就好哦,实际用到再去找文献,因为算法决定怎么用

    就像学武功,一招一式可以看书学,但没有书教你实战怎么打的,因为实战是招式组合出来的,可能有些技巧,例如对付对手的某个招式怎么破拆,但不会有书写着对付另一个武功是怎么破解的
    tfdetang
        14
    tfdetang  
       2020-12-07 16:22:26 +08:00
    先说 numpy, 算是 python 数据科学的基石了。除了上文中说到的切片,索引等,还可以高效执行各种矩阵运算。理论上你可以只用 numpy 实现一个简单的深度学习框架。实际上现有的机器学习框架数据类型也都兼容 numpy 数据类型。

    pandas 也是基于 numpy 的一个应用。 你确认你说的那些用 sql 和 excel 很容易实现吗?基于日期序列进行数据统计、聚合(按周,按工作日,按季度)。 更何况你可以自己写各种 python 函数直接 apply 到数据表上。开发时间起码比 sql 什么的少一倍。
    yzbythesea
        15
    yzbythesea  
       2020-12-07 16:29:55 +08:00
    @Hlianbobo

    numpy 和 pandas 主要都是做 data/feature engineering,所以和 excel 有很多类似的地方

    但是我们选这两个,更多的是因为 python 有很好的机器学习大环境啊。比如很多机器学习模型的库 python 都可以调( sklearn,scipy ); 代码共享和审阅完美和 git 融合;代码的 CI/CD 也可以走一般代码的流程;你模型用 python 写好,程序员也看得懂,可以很快改成生产环境的代码。这些都是 excel 不具备的。当然性能也是一个需求,毕竟工业界机器学习的数据量都是特别大的,100G,1TB 都遇到过。
    la2la
        16
    la2la  
       2020-12-07 16:31:43 +08:00   ❤️ 1
    抛开场景谈技术,感觉没有什么意义。
    Hlianbobo
        17
    Hlianbobo  
    OP
       2020-12-07 16:33:21 +08:00
    @yzbythesea 谢谢回复。可以这样理解么?numpy 和 pandas 只是对数据做粗加工。真正做数据分析的是 sklearn,scipy 。
    yy77
        18
    yy77  
       2020-12-07 16:35:51 +08:00
    这二个都是其他库要依赖的基础库。比如 numpy 的 array 和 pandas 的 dataframe 。不懂这 2 个的用法,在学习其他的框架时设计到这 2 个的知识就会觉得有点不理解。
    yalin
        19
    yalin  
       2020-12-07 16:35:52 +08:00
    数据入库前处理
    yzbythesea
        20
    yzbythesea  
       2020-12-07 16:47:11 +08:00
    @Hlianbobo 其实 numpy 和 pandas 也做到了数据分析( excel 也做到了),比如他们都挖掘出了海量数据背后的特征,然后这些清理好的特征,可以用来做进一步数据分析或者机器学习。
    crclz
        21
    crclz  
       2020-12-07 16:48:31 +08:00
    @murmur 确实。上世纪有用 excel 当库存管理系统的。
    princelai
        22
    princelai  
       2020-12-07 16:55:26 +08:00   ❤️ 3
    你说的基本都是对的但是有点狭隘,知道为什么现在机器学习、科学计算和数据分析大部分都用 python 这种比较慢的脚本语言当接口吗,因为生态好,除了 np 和 pd,scipy,sklearn,statsmodels,matplotlib,seaborn 都基于 numpy,pytorch 的 tensor 也和 np.array 基本一致,以上这些,excel,SQL,R,julia 目前甚至未来都是做不到的。
    wuwukai007
        23
    wuwukai007  
       2020-12-07 17:06:16 +08:00
    pandas 计算移动平均线
    df.rolling(15).mean()
    sql 卒,
    numpy 计算数组拟合函数
    np.polyfit(x, y, 1)。
    excel 卒,
    pandas 计算 后 N 天减前 N 天值
    df.diff(N)
    sql,卒
    pandachow
        24
    pandachow  
       2020-12-07 17:16:23 +08:00
    这就是数据科学啊…
    Zait
        25
    Zait  
       2020-12-07 17:34:48 +08:00
    excel 可不可以? 当然可以,excel 用到飞起一样很值钱。其实用纸和笔一样能算
    为什么不用 excel ? 量变引起质变。另外生产环境总不能部署个 excel 吧。。。
    Tony042
        26
    Tony042  
       2020-12-07 17:45:28 +08:00
    @imn1 额,提一个层主说的不太准确的地方,两个行列式相乘,我估计层主想说的是两个矩阵相乘吧,行列式是一个标量,计算行列式本身还算复杂,两个行列式相乘就只是两个数相乘。然后补充一下,我个人觉得,numpy 主要是用来做科学计算吧,底层做了大量优化,比如把大矩阵相乘优化到了 N^2.7 复杂度。
    liprais
        27
    liprais  
       2020-12-07 17:46:16 +08:00   ❤️ 1
    zxyangyu
        28
    zxyangyu  
       2020-12-07 17:53:06 +08:00
    虽然确实只是 pandas 、numpy 浅显的部分,不过看了一圈回答,我还是想聊聊关于数据科学。
    算标准差,中位数,或者做个简单的线性回归这些方法只是工具,况且这种工作完全是机械化的,已经有库实现了比如 pandas_profiling,甚至于自动建模工具 H2O,把这些机械的工作当成数据科学就太想当然了。
    我认为数据科学重要的是分析,是挖掘数据价值。交易量突然下跌的原因,业务适合什么预测模型,目标客户和实际用户是否一致,对这些问题给出有数据理论支撑有说服力的答案才是体现你价值的关键。
    你可以把 pandas 、numpy 理解成各种各样的 web 框架,只是将你从繁琐的底层协议里解放出来的工具,你总不能说我用了一个旧一点,性能差点的框架满足了业务,我就不是 web 开发了吧,excel 同理。
    binxin
        29
    binxin  
       2020-12-07 18:19:35 +08:00
    就我遇到实际情况而言:
    1. 假如某个数据我只整理分析一次,pandas 效率被 excel 吊打。
    2. 假如老是要做重复 /类似的整理分析,花点时间写脚本就有收益。
    liuzhaowei55
        30
    liuzhaowei55  
       2020-12-07 18:24:30 +08:00 via Android
    毕竟只是个工具,你没有感受到他的魅力可能是因为还没有遇到合适的场景。
    shm7
        31
    shm7  
       2020-12-07 18:32:18 +08:00 via iPhone
    这两本书你可能没认真看。否则里面会有解释书干嘛的。有个词语叫 EDA 。
    574402766
        32
    574402766  
       2020-12-07 18:37:11 +08:00
    我觉得有一点:numpy 和 pandas 能直接在 python 里用,而 excel 不能。
    jccg90
        33
    jccg90  
       2020-12-07 18:39:57 +08:00
    numpy 和 pandas 和 excle 或者 sql 的区别,主要是性能

    各种矩阵操作很复杂,但是使用矩阵操作,可以更好的利用 cpu 或者 gpu,并行化程度更高

    这对于大数据来说是非常重要的。。。数据的量级一上去,有些事情 excel 就搞不定了
    IgniteWhite
        34
    IgniteWhite  
       2020-12-07 18:44:21 +08:00 via iPhone
    我的应用场景:科研作图,每天有一堆同样类型的数据,同样的拟合过程,同样的作图需求。

    用 origin pro (别提 excel 了,非线性拟合缺很多东西),我已经弄好模版了,但还是要手动导入数据,手动去掉数据文件头部的仪器参数行,再点一堆按钮做拟合,虽然也有模版可以创建但还是很麻烦,作出来的图要调线的粗细,图例位置等等。

    用 numpy 加 matplotlib,用 jupyter 做 IDE:用任意一台电脑,打开网页版的 jupyterlab 上传数据文件。你只需要把数据文件按照自己的规则命名,我写好的 python 代码就会 parse 文件名来决定曲线簇的图例,用 regex 自动去掉参数行,作出来的图很精美。这一切,只需要点个运行的快捷键,不到半分钟就自动搞定了。
    IgniteWhite
        35
    IgniteWhite  
       2020-12-07 18:47:21 +08:00 via iPhone   ❤️ 1
    @IgniteWhite 补充一下非线性回归这个事,强大的非线性回归性能,或者说矩阵处理性能是机器学习的基石。你不用就不说了,但凡是用机器学习,如果用 VBA 脚本在 excel 里搞,怕是不方便吧
    shm7
        36
    shm7  
       2020-12-07 18:47:51 +08:00 via iPhone
    @jccg90 是不是不懂装懂了。pandas 以及其底层 numpy 都是 cpu 的。并行计算… 我服
    IgniteWhite
        37
    IgniteWhite  
       2020-12-07 18:51:03 +08:00 via iPhone
    英国用 excel 做 covid19 数据分析,怎么着,算错人了。原因是 excel 里存的数据太多,文件太大,出问题了。于是他们分开成几个小点的文件解决了问题。你说 excel 这不是惹笑话嘛。
    tairan2006
        38
    tairan2006  
       2020-12-07 18:51:31 +08:00
    excel 能处理的数据量有限。。不然玩啥大数据
    hello2060
        39
    hello2060  
       2020-12-07 18:55:35 +08:00
    我没有实际经验,我只在 dataquest 上过一个月的课,学了 numpy pandas 的一些基本,我的想发和你差不多。基本上输入就是格式化好的 csv, 用 python 来操作。

    具体的数据科学该怎么做,我想你是不是该去 kaggle 看看。
    IgniteWhite
        40
    IgniteWhite  
       2020-12-07 19:06:37 +08:00 via iPhone   ❤️ 1
    @jccg90
    @shm7
    GPU 依靠的是 CUDA,或者基于 CUDA 的 ROCm,或者 Intel 的 PlaidML 。基于 numpy 的库,比如 pytorch 和 tensorflow 会负责和 CUDA 通讯,numpy 本身不管这事。不过 numpy 提供的 tensor 数据结构的确是扔到 CUDA 那边,在 GPU 一堆核里面计算的,你可以说 GPU 的多核计算本来就是个并行架构。
    Hlianbobo
        41
    Hlianbobo  
    OP
       2020-12-07 19:56:29 +08:00
    @IgniteWhite 请教一下:PyTorch 和 CUDA 之间是怎样一种关系?
    foveal
        42
    foveal  
       2020-12-07 20:54:58 +08:00   ❤️ 1
    一般 EDA 画图或者建模的最后一步是使用 python 来做,最后一步之前,就希望有 python 包来做数据转换

    这个 python 包需要有类似 excel 的功能,还需要能调用很复杂的函数,能快速的运算,pandas 就是应对这样的需求

    一个常见的 pandas 操作:groupby().apply()如果用 excel 的话就很复杂
    上 G 的数据 excel 处理起来会慢,pandas 就比较快
    IgniteWhite
        43
    IgniteWhite  
       2020-12-07 22:32:56 +08:00   ❤️ 1
    @Hlianbobo 想了解的话知乎上好多专栏都有讲这些

    [CUDA 教程] 一、认识 cuda
    https://zhuanlan.zhihu.com/p/146431357
    以及他的后续介绍

    PyTorch 1.7 发布,支持 CUDA 11 、Windows 分布式训练
    https://zhuanlan.zhihu.com/p/269885921
    机器之心有很多类似的新闻和科普。量子位也是一个不错的账号
    jc89898
        44
    jc89898  
       2020-12-07 22:47:54 +08:00
    @Hlianbobo 我就是这行的,这么跟你说吧,“真要找出数据中的规律,并找出数据规律所反映出的问题,进而对未来数据进行预测,并给出业务建议。光会数据清洗,排序,转置,求和,算标准差,中位数,或者做个简单的线性回归是不足以实现上述四个目标的吧。”,任何 pytorch,tensorflow 能做的事,numpy 都能做,只是 cpu 速度慢。而且 mu, sigma, regression 中的学问是很大的,不要小瞧。
    jc89898
        45
    jc89898  
       2020-12-07 22:50:57 +08:00
    numpy, pandas 之类的用熟了,效率远超 excel 啥的,而且不用学啥就能掌握 pytorch
    tikazyq
        46
    tikazyq  
       2020-12-07 23:12:10 +08:00
    vba 效率太低开发难度大,sql 灵活度低且开发难度大,py 啥都可以做而且开发效率高,为啥不用?
    tikazyq
        47
    tikazyq  
       2020-12-07 23:15:56 +08:00
    其实 numpy 、scipy 、pandas 、matplotlib 、seaborn 、statsmodels 、sklearn 、tensorflow 、pytorch 这些模块只是工具,抛开应用场景只讨论技术等于纸上谈兵。或许楼主的工作经验不多,应该工作没几年,还需要多积累实战经验
    futou
        48
    futou  
       2020-12-07 23:34:25 +08:00
    思而不学则殆...
    你好像认为 numpy 等需要有可以直接复杂数据处理和分析的函数?
    实际上,numpy 最常用在数据处理和分析的基础环节
    另外,excel+vba 很强,然而我想数据处理后接个网络怎么办,再回到 python ?
    GrayXu
        49
    GrayXu  
       2020-12-07 23:46:19 +08:00
    没毛病,是有交集的。不过 numpy 更像是个矩阵科学计算库,而 excel 虽然提供这些功能,但更类似于 Pandas 在发挥数据预处理功能。
    抛开效率等不谈,你要真用 Excel 做一个 NN 也可以。但没有意义,numpy 之所以被用的多,也就是因为在这个生态中,承担了数据格式这一个任务,你没办法用 torch 、tf 来快速调用 excel 的数据。
    另外这和深层用法浅层用法没关系,深度学习、数据科学都不在于会多少 API 。怎么理解和使用算法才是关键的。
    dayeye2006199
        50
    dayeye2006199  
       2020-12-08 07:06:08 +08:00   ❤️ 1
    LZ 的理解是对的,这些工具的用途确实出发点都很简单和单一。

    numpy 就是个矩阵操作和预算的库。
    pandas 是搞金融的人,写出来专门处理时序类数据变形加工的工具。

    但是这个理解不完全,再复杂的东西,也都是基于简单的概念和工具搭建起来的。例如所谓的深度学习,拆解到最底层,就是一堆线性代数里面的矩阵运算。

    但不能说,我掌握了矩阵运算,我就掌握了深度学习。我学会了 numpy,我就学会了数据科学。工具取决于使用的方法和人。例如,如果我明白深度学习的原理,完全可以用 excel 作为矩阵运算工具,来搭建一个简单的神经网络。
    zone10
        51
    zone10  
       2020-12-08 10:25:00 +08:00
    Numpy 和 Pandas 能做的 excel 和 vba 确实能做, 但为什么还是有必要用 Python 做数据分析?
    首先你如果用 excel 做数据分析, 那么数据源会受限, 而实际工作有很多其他的数据源, 比如 csv, json 等等, 使用 Pandas 可以就处理各种不同的数据源. 同样道理, 你用某个数据库直接处理数据, 那面临多个数据库和换库情况怎么办?而且那些存储过程又臭又长也不好维护. 说回 Numpy 和 Pandas, Numpy 是 Pandas 的底层数据结构, 现在已经成为 Python 的一部分了, 跟其他的库不可同日而语, 前段时间我还看新闻说 Numpy 上了 Nature, 人家顶级的研究都能用, 自己那点业务逻辑有啥不能用的. 不过日常使用应该是用 Pandas 比较多, Pandas 就是在 Numpy 的基础在做一些方便的功能, 我敢说 Pandas 对大部分中小企业都够用了, 哪有那么多大数据, 都是吹水吹出来的.
    volvo007
        52
    volvo007  
       2020-12-08 12:20:41 +08:00
    @futou 有海量的 win 自带 api 供调用…… 我真心觉得能掌握这些的是真有时间和毅力……
    不过我是不想记那么多 api,而且补全功能又弱,还是投向了 py
    zealinux
        53
    zealinux  
       2020-12-08 13:03:07 +08:00
    Excel 全能,Excel 还可以用来画画。
    但是只能自己玩,
    如果全公司团队依赖这一个 excel 文件,真是要疯掉的。
    ttys001
        54
    ttys001  
       2020-12-08 17:07:39 +08:00   ❤️ 1
    尽管都是和数据处理相关,但 numpy 和 pandas 还是有侧重点的,pd 重心在于导入、清洗、整理,np 是为更后面的机器学习库准备 ndarray,最主要的就是矩阵运算。更后面的 scikit/tensorflow/pytorch 等都是使用的 np 的数据结构。个人使用顺序是 pd->np->matplt->scikit/tf 。
    tisswb
        55
    tisswb  
       2020-12-11 18:07:50 +08:00
    计算机视觉方向,numpy 简直不能再香了。
    xyjincan
        56
    xyjincan  
       2020-12-14 19:11:33 +08:00 via Android
    这个数据处理跟数据库内部处理比又有啥优缺点呢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2777 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 08:07 · PVG 16:07 · LAX 00:07 · JFK 03:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.