龙空技术网

用Python生成器处理大数据

AiMath 1672

前言:

当前你们对“python怎么处理大数据”大约比较重视,我们都需要剖析一些“python怎么处理大数据”的相关文章。那么小编在网上网罗了一些有关“python怎么处理大数据””的相关内容,希望看官们能喜欢,同学们快快来了解一下吧!

不是每个人都拥有一台超级计算机,那么如何利用一台普通计算机处理大数据?当数据大小超过你计算机的内存,这时不能一次性把大数据写入内存里,否则会产生内存溢出。大多数机器学习算法都是基于内存,即原始数据以及过程数据都保存在内存,这给普通计算机处理大数据造成困难。通过本文的学习,你将学会如何利用普通计算机处理大数据。本文主要讨论如何用Python生成器处理大数据。

普通计算机处理大数据思想是:将大数据分为几批,依次处理每一批数据,最后综合各个批次的处理结果。有关Python生成器的概念请参考我的文章《如何理解Python中的生成器?》。生成器的特点是依次不重复地生成数据,符合大数据处理思想,因此利用Python生成器处理大数据是一种很自然的想法。

利用生成器,在普通计算机里也可以进行深度学习,比如要训练一个深度神经网络,可以采取批次训练方法,对每一个批次,利用生成器从硬盘里提取一个批次的数据,并不需要把所有数据加载到内存里,对于训练过程以及结果,相应地也可以采取批次方法将结果保存到硬盘里,唯一要做的是重写代码。

本文提供一个简单案例,统计自然常数e的41万位小数点的数字0-9出现的次数,展示Python生成器,在不需要将数据写入内存的情况下,如何批次处理大数据。处理思想就是把41万位小数点依次划分为41批次,每个批次的长度10000位,统计每个批次的数字0-9出现的次数,然后汇总统计所有批次的次数。(读者可以尝试用1000万位小数点在一个内存为1G的普通计算机里处理,比较一下普通方法(参考文章《机器学习实战:用Python分析自然常数e的小数点数字出现规律》)和本文方法的效果)

1.数据

原始数据共4100行数据,每行有100位小数点,共41万位小数点,其中第1列数据为标注,需要去掉。数据文件名为e.txt,保存在Python项目目录下。

原始数据

2.构造生成器

构造一个生成器gen,用于每次从原始文件e.txt中读取一行数据。目前该生成器并没有真正读取文件,是一个机器,没启动它之前(使用内置方法next()启动它),在Python中只是一个符号,占用内存微不足道。另外优点是,该生成器并没有打开文件对象。

构造生成器gen

3.定义批处理函数

利用生成器gen一次性从原始文件读取bat_number行数据(一个批次),然后将bat_number行数据转化为列表e,接着是数据预处理,比如去掉符号“\n”和空格,最后将处理后的数据转化为Pandas的序列数据结构。即通过批处理函数batch(),能一批次从原始文件读取bat_number行数据,并最终转化为Pandas的序列数据。值得注意的是,由于生成器的特点,运行批处理函数batch()两次,就得到两批次的数据,而且第2批次的数据是接着第1批次的数据依次产生,因此不重复。

批处理函数

4.定义统计函数

利用批处理函数batch()获取一个批次的数据,并统计数字的出现次数,然后遍历所有批次,得到数字出现次数的列表。

统计函数

5.运行结果及可视化展示

作为例子,运行主程序,汇总统计数字“9”的出现次数,并绘制每个批次出现次数的曲线图。代码如下:

主程序代码

可视化:

各个批次的次数曲线图

运行结果如下:

运行结果

6.总结

本文展示了如何利用Python生成器处理大数据的全过程。所使用的方法是通用的,可以应用于机器学习、深度学习等领域。即使你没有超级计算机,也没有分布式大数据处理系统,只要你选择合适的算法、合适的数据结构和合适的工具(Python生成器),你只有一台普通计算机也可以处理大数据。

(作者:头条号/AiMath)

标签: #python怎么处理大数据