Python处理大数据的技巧, 2022-06-21

Python053

Python处理大数据的技巧, 2022-06-21,第1张

(2022.06.21 Tues)

收集整理了Python处理大量数据方法,基于Pandas,Numpy等数据处理工具。

用df的 info 方法并指定 memory_usage='deep' 参数,或使用df的 memory_usage 方法,并指定 deep=True 参数。

在读取数据文件的方法中加入 nrows 参数选择前n行数据读取。

也可以跳过m行之后,读取从m行开始的n行

当然也可以在 skiprows 选项中指定范围,保留headers,即保留列名

可以指定 skiprows 中需要忽略的行,用list或array导入即可。下面是随机

如果在这个指令中忽略 nrows=10 指令,则读取跳过100行之后的所有数据。

预先指定读入的列,缩小加载范围

不同的数据类型占用了不同大小的空间,对于尚未读取的数据,可以提前指定类型( dtype );对于已经读入的数据,通过 astype 方法修改成占空间更小的数据类型。

在读入数据之前,通过字典指定每列对应的数据类型,读入之后按照此类型显示数据。

通过改变数据类型减少空间的案例。修改DataFrame d 中的一列 Sctcd ,注意到该列的数据都是1、2、0,而保存类型是object,果断改成 uint8 ,通过 df.info(memory_usage='deep') 方法对比内存的使用情况。仅仅修改了一个列的类型,数据大小减小3MB。

一个特殊而高效的案例是当某一列的值只有有限个,不管是int还是string格式,且该列unque值远小于列的长度,可以将该列转变为 category 类,将节省大量空间。这么做当然也有代价,比如转换成 category 类的数据将无法做max/min等运算,由数字转换成的 category 也不能进行数值运算。这种转换对内存的节省效果显著,下面是对比。 dcol 只有两列, Stkcd 和 Stknme ,查看unique的个数与总长度,显示unique远小于总长度,分别转换为 category 类型,内存节省超过90%!

通过Pandas的 read_csv 方法中的 chunksize 选项指定读取的块大小,并迭代地对读取的块做运算。

1 https冒号//www点dataquest点io/blog/pandas-big-data/

2 CSDN - python 处理大量数据_如何用python处理大量数据

2 How to Work with BIG Datasets on 16G RAM (+Dask), on kaggle

百万级别数据是小数据,python处理起来不成问题,但python处理数据还是有些问题的Python处理大数据的劣势:1、python线程有gil,通俗说就是多线程的时候只能在一个核上跑,浪费了多核服务器。在一种常见的场景下是要命的:并发单元之间有巨大的数据共享或者共用(例如大dict),多进程会导致内存吃紧,多线程则解决不了数据共享的问题,单独的写一个进程之间负责维护读写这个数据不仅效率不高而且麻烦2、python执行效率不高,在处理大数据的时候,效率不高,这是真的,pypy(一个jit的python解释器,可以理解成脚本语言加速执行的东西)能够提高很大的速度,但是pypy不支持很多python经典的包,例如numpy(顺便给pypy做做广告,土豪可以捐赠一下PyPy-Callfordonations)3、绝大部分的大公司,用java处理大数据不管是环境也好,积累也好,都会好很多Python处理数据的优势(不是处理大数据):1、异常快捷的开发速度,代码量巨少2、丰富的数据处理包,不管正则也好,html解析啦,xml解析啦,用起来非常方便3、内部类型使用成本巨低,不需要额外怎么操作(java,c++用个map都很费劲)4、公司中,很大量的数据处理工作工作是不需要面对非常大的数据的5、巨大的数据不是语言所能解决的,需要处理数据的框架(hadoop,mpi。。。。)虽然小众,但是python还是有处理大数据的框架的,或者一些框架也支持python6、编码问题处理起来太太太方便了综上所述:1、python可以处理大数据2、python处理大数据不一定是最优的选择3.python和其他语言(公司主推的方式)并行使用是非常不错的选择4.因为开发速度,你如果经常处理数据,而且喜欢linux终端,而且经常处理不大的数据(100m一下),最好还是学一下python

最重要的是你老师的数据集究竟有多大,以及你的电脑的配置。

8g左右或以下的,用个配置稍好电脑python,r都带得动。

数据量再往上走,就该考虑设计一下算法,主动管理内存,甚至动用硬盘管理数据(比如把中间数据存到硬盘上,下次使用再加载到内存)。

数据量上tb了,就可以考虑集群了。

考虑到你的老师在用SAS,那我猜测数据量是单机可以搞定的。因此python也是能解决问题的,但是你需要主动设计一下算法并主动管理内存空间。