图灵联邦编辑部出品

“在笔记本电脑上分析100GB数据”,看似是天方夜谭,但使用Python就可以做到!

近日,Jovan Veljanoski发表了一篇名为《How to analyse 100 GB of data on your laptop with Python》的文章。该文展示了一种快捷、安全的数据处理方法——Vaex

Jovan Veljanoski是XebiaLabs的一名数据科学家,热衷于用数据驱动的方法解决复杂的问题。

他表示,目前人们都在尝试收集和运用数据,以改善其业务运作方式、增加收入或影响世界。因此,处理50GB甚至500GB大小的数据集变得越来越普遍。

然而,这些数据集有使用起来有点不太舒服。它们小到可以装进你日常使用的笔记本电脑的硬盘,但对于笔记本的内存来说,这些数据集太大了。因此,它们已经很难打开和检查,更不用说探索或分析了。

处理较大的数据集时,通常采用3种策略。

首先是对数据进行抽样。其缺点是显而易见的:如果不看相关部分,可能会错过重要的见解,或者更糟的是,如果不看所有的数据,就会误解它所讲述的事实。

第二个策略是使用分布式计算。虽然在某些情况下这是一种有效的方法,但是它带来了管理和维护集群的巨大开销。

第三个策略是,可以租用一个强大的云实例,该实例具有处理相关数据所需的足够大的内存。例如,AWS提供了tb级RAM的实例。

在这种情况下,仍然需要管理云数据存储桶,每次实例启动时都要等待从存储桶到实例的数据传输,还要处理在数据存储到云中时遇到的合规性问题,并解决在远程计算机上工作带来的所有不便。

尽管开始的时候成本很低,但随着时间的推移,成本往往会增加。

本文展示的数据处理方法Vaex,是一种更快速、安全、全面和便捷的方法,可以使用几乎任意大小的数据进行数据科学研究,只要把它放在笔记本电脑、台式机或服务器的硬盘上即可。

Vaex

Vaex是一个开放源代码的数据流模型库,可以在与硬盘一样大的数据集上进行可视化、探索、分析甚至机器学习。

为了做到这一点,Vaex采用了一些概念,如内存映射、高效的out-of-core算法和延迟计算。所有这些都在一个类似pandas的API中,因此任何人都可以立即开始。

十亿出租车数据分析

为了说明这一概念,研究者对一个数据集进行简单的探索性数据分析,该数据集远不适合典型笔记本电脑的内存。

在本文中,将使用纽约市(NYC)出租车数据集,其中包含2009年至2015年之间的超过10亿次的出租车出行信息。

数据可以从该网站下载,并且为CSV格式。完整的分析可以在此Jupyter笔记本中单独查看。

Cleaning the streets

第一步是将数据转换为内存可映射文件格式,例如Apache Arrow,Apache Parquet或HDF5。

此处提供了如何将CSV数据转换为HDF5的示例。数据以内存可映射格式后,立即使用Vaex打开数据(0.052秒!),尽管磁盘上的数据量超过100GB:

为什么这么快?当使用Vaex打开内存映射文件时,实际上没有读取任何数据。Vaex仅读取文件元数据,例如磁盘上数据的位置,数据结构(行数,列数,列名和类型),文件描述等。

那么,如要检查数据或与数据交互怎么办?打开数据集会生成一个标准的DataFrame并对其进行快速检查:

再次注意,单元执行时间非常短。这是因为显示Vaex DataFrame或列只需要读取前5行和后5行。

这将引向另一个重要点:Vaex只会在需要时遍历整个数据集,并且会尝试通过尽可能少的数据传递来做到这一点。

无论如何,从极端异常值或错误的数据输入中清理数据集开始。一个很好的方法是使用describe方法获得数据的高级概览,该方法显示样本数,缺失值数和每一列的数据类型。

如果列的数据类型为数字,则还将显示平均值,标准偏差以及最小值和最大值。所有这些统计信息都是通过对数据的一次传递来计算的。

describe方法很好地说明了Vaex的功能和效率:所有这些统计数据都是在MacBook Pro上不到3分钟的时间内计算出来的。

其他库或方法都需要分布式 计算或具有超过100GB的云实例来执行相同的计算。使用Vaex,你只需要数据和只有几GB内存的笔记本电脑。

查看describe的输出,很容易注意到数据包含一些严重的异常值。首先,让我们开始检查pick-up locations。

消除异常值的最简单方法是绘制出pick-up和drop-off locations,并直观地定义要集中分析的NYC区域。

因为使用了比较大的数据集,因此直方图是最有效的可视化效果。用Vaex创建和显示柱状图和热图的速度很快,而且这样的图可以是交互式的!

一旦互式决定了要关注的NYC区域,就可以简单地创建一个过滤的DataFrame:

关于上面的代码块,最厉害的是它只需要很少的内存来执行!过滤Vaex DataFrame时,不会复制数据。而是仅创建对原始对象的引用,在该引用上应用了二进制掩码。

掩码选择要显示的行,并将其用于将来的计算。像今天许多标准数据科学工具一样,如果要复制数据,这将节省100GB的内存。

现在检查passenger_count列。单次出租车旅行记录的最大乘客数为255,这似乎有些极端。通过value_counts方法以轻松计算每位乘客的旅行次数。

从上图可以看出,载客超过6人的行程是罕见的异常值,或者仅仅是错误的数据输入。还有大量的载有0位乘客行程。由于目前尚不了解这些行程是否合法,因此也将其过滤掉。

从上图可以看出,随着距离的增加行程次数减少。在约100英里的距离数据处,行程次数分布曲线有很大的下降。目前,以此为起点,根据行程距离消除极端离群值:

在出行距离列中存在极端异常值,可以作为调查出租车出行时长和平均速度的动机。这些特性在数据集中不易获得,但计算起来却很简单:

上面的代码块需要零内存,不需要执行时间! 这是因为代码会创建虚拟列。 这些列只包含数学表达式,仅在需要时才计算它们。

否则,虚列的行为与任何其他常规列一样。注意,其他标准库需要10s的GB内存来完成相同的操作。

看一下行程持续时间的分布图:

从上面的图中可以看出,尽管有一些行程可能需要花费4至5个小时以上的时间,但95%的出租车行程只需要不到30分钟即可到达目的地。

你能想象在纽约市被困在出租车中超过3个小时吗?无论如何,要保持开放的态度,并考虑所有出行时间少于3小时的出行:

接下来,分析出租车的平均速度,同时也为数据限制选择一个合理的范围:

根据分布趋平的地方,可以推断出合理的出租车平均速度在每小时1到60英里之间,因此可以更新过滤后的数据DataFrame:

把焦点转移到出租车旅行的费用上。从describe方法的输出中,可以看到fare_amount、total_amount和tip_amount列中有一些异常值。

对于初学者来说,这些列中的任何值都不应该是负数。与之相反的是,这些数字表明,一些幸运的司机仅开一次出租车就差点成为百万富翁。但是这些数量的分布又在一个相对合理的范围内:

上面的三个分布都有相当长的尾部。尾部的一些值可能是正确的,而其他值可能是错误的数据输入。在任何情况下,只考虑票价为fare_amount、total_amount和tip_amount低于200美元的骑行。还要求fare_amount、total_amount的值大于$0。

最后,在初步清除所有数据之后,看看还有多少出租车需要进行分析:

研究者有超过11亿次的行程数据!这些数据足以对出租车行程产生一些有价值的见解。

数据下载:

https://www1.nyc.gov/site/tlc/about/tlc-trip-record-data.page

完整分析:

https://nbviewer.jupyter.org/github/vaexio/vaex-examples/blob/master/medium-nyc-taxi-data-eda/vaex-taxi-article.ipynb

原文链接:

https://towardsdatascience.com/how-to-analyse-100s-of-gbs-of-data-on-your-laptop-with-python-f83363dda94?source=user_profile---------0-----------------------

荐:

【中国风动漫】除了《哪吒》,这些良心国产动画也应该被更多人知道!

声明

来源:图灵联邦,RAD极客会(ID:RAD_Geek_Club)推荐阅读,不代表RAD极客会立场,转载请注明,如涉及作品版权问题,请联系我们删除或做相关处理!

total是什么牌子的电脑_干货!如何用Python在笔记本电脑上分析100GB数据(上)...相关推荐

  1. python 备份交换机_干货 | 如何用python实现每天定时备份交换机配置文件? 真香~...

    网 工 圈 关注 当交换机配置发生变化,如何自动备份配置到FTP上?2条命令搞定! 上期分享了交换机配置发生变化时,自动备份配置到FTP上的文章,后面有网友私信来问,龙哥,龙哥能不能教一下每天自动备份 ...

  2. python爬网页数据用什么_初学者如何用“python爬虫”技术抓取网页数据?

    原标题:初学者如何用"python爬虫"技术抓取网页数据? 在当今社会,互联网上充斥着许多有用的数据.我们只需要耐心观察并添加一些技术手段即可获得大量有价值的数据.而这里的&quo ...

  3. dataframe 如何选中某列的一行_如何用 Python 在笔记本上分析 100GB 数据?

    许多组织都想尽可能多地收集和利用数据,从而改进业务.增加收入和提升影响力.因此,数据科学家们要面对 50GB,甚至 500GB 数据集的场景变得越来越普遍. 目前,这些数据集处理起来有点麻烦.就大小而 ...

  4. 5u以太网用交换机连接电脑_干货丨如何用自己的电脑直接连接NUS打印机

    期末考试又来啦,有好多同学在后台问小助手怎么把复习资料打印下来. 有同学会抢答了:这题我会!拿着U盘去图书馆就可以打印了呀! 没错,用U盘打印是大家最常用的方式.但小小的U盘不仅容易弄丢,还容易发生各 ...

  5. python怎么模拟浏览器交互_干货分享:python爬虫模拟浏览器的两种方法实例分析(赶紧收藏)...

    今天为大家带来的内容是:干货分享:python爬虫模拟浏览器的两种方法实例分析(赶紧收藏) 文章主要介绍了python爬虫模拟浏览器的两种方法,结合实例形式分析了Python爬虫模拟浏览器的两种常见操 ...

  6. python缺少标准库_干货分享:Python如何自动导入缺失的库

    很多同学在写Python项目时会遇到导入模块失败的情况:ImportError: No module named 'xxx'或者ModuleNotFoundError: No module named ...

  7. python定期自动运行_干货分享 | 适合 Python 入门的 8 款强大工具,不会就你还不知道吧!...

    点击上方"人工智能Corner","星标或置顶公众号" 干货分享,第一时间送达 Python是一种开源的编程语言,可用于Web编程.数据科学.人工智能以及许多科 ...

  8. python远程控制电脑_只需一个python脚本就可远程控制电脑,打开微信即可远程遥控操作...

    原标题:只需一个python脚本就可远程控制电脑,打开微信即可远程遥控操作 今天带给大家一个非常有意思的 python 程序,基于 itchat 实现微信控制电脑.你可以通过在微信发送命令,来拍摄当前 ...

  9. python编写数据库连接工具_详解使用Python写一个向数据库填充数据的小工具(推荐)...

    一. 背景 公司又要做一个新项目,是一个合作型项目,我们公司出web展示服务,合作伙伴线下提供展示数据. 而且本次项目是数据统计展示为主要功能,并没有研发对应的数据接入接口,所有展示数据源均来自数据库 ...

最新文章

  1. 故事篇:数据库架构演变之路
  2. Mirosoft Office自动化问题
  3. 产品中心和用户中心的视角摘抄
  4. GPU(CUDA)学习日记(九)------ CUDA存储器模型
  5. 函数的嵌套,名称空间和作用域
  6. java源代码1000_Java源代码
  7. 88. [ExtJS2.1教程-5]ToolBar(工具栏)
  8. jquery 动画总结(主要指效果函数)
  9. 零基础学python-Python入门教程完整版(懂中文就能学会)
  10. win7 IIS服务启动和停止
  11. 世界杯:左撇子在体育方面大有前途
  12. Zotero IEEE trans期刊cls格式调整
  13. Matlab|基于粒子群优化算法及鲁棒MPPT控制器提高光伏并网的效率
  14. 雷达干扰技术(四)雷达信号处理
  15. 信息系统项目管理师-软考-B站自学
  16. 第3章 使用masm
  17. 微信html下拉刷新页面,微信公众号内的页面的下拉刷新,兼容手机端和PC端
  18. sklearn.neighbors_Nearest Neighbors
  19. Unity引擎源代码开源地址
  20. 联想 M4400 升级无线网卡 -- 根据白名单升级网卡

热门文章

  1. 剖析SQL Server2005 SQLCLR代码安全性
  2. vs studio2015导入本地项目_Visual Studio2019自定义项目模板
  3. Synchronized的使用详解与区别(干货满满!!!)
  4. matlab矩阵处理实验报告,matlab实验报告一二三
  5. mysql8.0.11创建用户报错_mysql8.0创建用户授予权限报错解决方法
  6. 超300程序员受益入职的面试经验
  7. 在libevent中使用线程池
  8. 在html中控制自动换行
  9. D-News|英特尔首推融合现实,亚马逊云服务市场占比超3成
  10. jquery获取表格中特定列