python数据处理怎么做,python数据处理的3种方法?

营销圈公众号引导关注

作为一名数据科学家,我发现自己处理“大数据”的情况越来越多。我叫做大数据的是那些虽然不是很大,但是却足够让我的电脑处理到崩溃并且拖慢其他程序。

python数据处理怎么做,python数据处理的3种方法?

图片来自 Mika Baumeister UNsplash

这个问题并不新鲜,且对于所有问题而言,从来没有一劳永逸的万能公式。最好的方法依赖于你的数据以及你应用的目的。然而,最流行的解决方法通常在以下描述的分类之中。

1. 通过优化数据类型来减少内存使用

当使用Pandas从文件里加载数据的时候,如果不提前设定,通常会自动推断数据类型。

多数情况下这没什么问题,但是推断的数据类型并不一定是最优的。甚至,如果数值型列数据包括了缺失值,推断数据类型就会自动填充为浮点型。

在我处理大部分表征年、月或日的整型数据的时候,我最近通常会使用这种方法进行分析:

python数据处理怎么做,python数据处理的3种方法?

使用Pandas加载文件并明确数据类型(图片来自作者)

对于特定的案例,明确数据类型会让使用内存大大减少。请注意上述例子中用到的pandas类型pandas.Int16Dtype来使包含缺失值的列数据强制转换成整型数据。当在处理大型数据集时,需要你拥有对拟处理数据集的一些先验知识,因而会通过在内部使用pandas.NA而非numpy.nan来实现缺失值的最优数据类型。在纯粹探索未知数据集的时候该方法可能并不适用。

2. 将数据分块

当数据太大以至于与内存不相符,你可以使用Pandas的chunksize选项来将数据集分块,而非处理一大整块数据。使用该选项创造迭代器对象用于浏览不同块,并像加载整个数据集时进行过滤或分析。

以下是使用该选项浏览Yelp reviews 数据集的例子,提取每个块里评论日期的最小值和最大值,然后重建评论的完整时间跨度:

reader = pd.read_json(reviews_path, lines=True, orient = "records", chunksize = 100000)    
 # go through the chunks and extract min/max date    
 date_limits = []  
for chunk in reader:   
 date_limits.append(max(chunk.date))        
 date_limits.append(min(chunk.date))   
  print("Reviews span from {} to {}". format(min(date_limits).strftime('%d-%m-%Y'),   
  max(date_limits).strftime('%d-%m-%Y')))    

分块可用于最初的探索性分析到模型训练,仅需极少的额外启动即可实现。

3. 利用惰性计算

惰性计算指的是仅仅在真正需要执行的时候才计算的表达式。惰性计算是一个重要的概念(尤其在功能编程当中使用),如果你想阅读更多关于它在python中的不同用法,你可以从这里开始

(https://towardsdatascience.com/what-is-

lazy-evaluation-in-python-9efb1d3bfed0)。

惰性计算是像Spark或者Dask这样的分配计算框架建立的基础。虽然他们设计用于聚类,你仍然可利用它们在你的个人电脑上处理大型数据集。

与Pandas主要的差异是它们不会直接在内存加载数据。相反,在读取命令的时候会扫描数据,推断数据类型并将其分成独立的部分(到目前为止没有新建)。仅仅在需要时独立为这些部分创建计算图形(因此叫做惰性)。

在之前的文章(
https://towardsdatascience.com/a-pyspark-example-for-dealing-with-larger-than-memory-datasets-70dbc82b0e98)里,我提供了一个Pyspark的例子,对一个大于内存的数据集做探索性分析。Dask也很流行,并且例子也不难找(你可以查看两者比较
https://docs.dask.org/en/latest/spark.html)。Dask语法仿照Pandas的语法,所以看起来很相似,然而Dask仅限于Python使用,但Spark可以在Java或Scala中使用。

其他库例如Vaex或Modin也提供了相似的功能,但是我本人还没有尝试过。

原文标题:

3 ways to deal with large datasets in Python

原文链接:

https://towardsdatascience.com/5-ways-to-deal-with-large-datasets-in-python-9a80786c4182

好了,这篇文章的内容营销圈就和大家分享到这里,如果大家对网络推广引流和网络创业项目感兴趣,可以添加微信:Sum8338 备注:营销圈引流学习,我拉你进直播课程学习群,每周135晚上都是有实战的推广引流技术和网络创业项目课程分享,当然是免费学!

版权声明:本站部分文章来源互联网用户自发投稿,主要目的在于分享信息,版权归原作者所有,不承担相关法律责任。如有侵权请联系我们反馈邮箱yingxiaoo@foxmail.com,我们将在7个工作日内进行处理,如若转载,请注明本文地址:https://www.yingxiaoo.com/103598.html