python去重计数_Python 快速统计数据的去重数和去重数据
之前用 Python 写过一个脚本,用来处理上千万用户的一些数据,其中有一个需求是统计用户的某一数据的去重数量。为了加快程序的速度,我启用了多进程。但不幸的是,程序跑了近一个星期,还没处理完。这时,我感觉到了不对,于是开始查看程序的性能瓶颈。
对于统计去重数,我是将用户的数据放到一个列表中,然后用 len(set(data)) 去统计去重数量。刚开始我以为这的数据量并不大,每个用户的数据不会过百,我并没有注意到有的用户会有上万条的数据,因此消耗了大量的时间(其实我的脚本消耗时间最大的地方是因为从远程 redis 中取大量数据时发生长时间的阻塞,甚至连接超时,最后我采用的方式分而治之,每次取少量的数据,这样大大的提高了性能)。
为了做优化,我开始寻求高效的方法。我发现,有大量的人认为采用字典效率会更高,即:
data_unique = {}.fromkeys(data).keys()
len(data_unique)
于是,我做了下测试:
In [1]: import random
In [2]: data = [random.randint(0, 1000) for _ in xrange(1000000)]
In [3]: %timeit len(set(data))
10 loops, best of 3: 39.7 ms per loop
In [4]: %timeit len({}.fromkeys(data).keys())
10 loops, best of 3: 43.5 ms per loop
由此可见,采用字典和采用集合的性能是差不多的,甚至可能还要慢些。
在 Python 中其实有很多高效的库,例如用 numpy、pandas 来处理数据,其性能接近于 C 语言。那么,我们就用 numpy 和 pandas 来解决这个问题,这里我还比较了获取去重数据的性能,代码如下:
import collections
import random as py_random
import timeit
import numpy.random as np_random
import pandas as pd
DATA_SIZE = 10000000
def py_cal_len():
data = [py_random.randint(0, 1000) for _ in xrange(DATA_SIZE)]
len(set(data))
def pd_cal_len():
data = np_random.randint(1000, size=DATA_SIZE)
data = pd.Series(data)
data_unique = data.value_counts()
data_unique.size
def py_count():
data = [py_random.randint(0, 1000) for _ in xrange(DATA_SIZE)]
collections.Counter(data)
def pd_count():
data = np_random.randint(1000, size=DATA_SIZE)
data = pd.Series(data)
data.value_counts()
# Script starts from here
if __name__ == "__main__":
t1 = timeit.Timer("py_cal_len()", setup="from __main__ import py_cal_len")
t2 = timeit.Timer("pd_cal_len()", setup="from __main__ import pd_cal_len")
t3 = timeit.Timer("py_count()", setup="from __main__ import py_count")
t4 = timeit.Timer("pd_count()", setup="from __main__ import pd_count")
print t1.timeit(number=1)
print t2.timeit(number=1)
print t3.timeit(number=1)
print t4.timeit(number=1)
运行结果:
12.438587904
0.435907125473
14.6431810856
0.258564949036
利用 pandas 统计数据的去重数和去重数据,其性能是 Python 原生函数的 10 倍以上。
python去重计数_Python 快速统计数据的去重数和去重数据相关推荐
- elasticsearch 条件去重_elasticsearch 笔记四 之聚合查询之去重计数、基础统计、百分位、字符串统计...
这一节笔记还是聚合查询,以下是本节目录:去重统计 cardinality 基础统计 stats 百分位 percentiles 字符串统计 string_stats 1.去重统计 cardinalit ...
- python对二维数组统计某一行的去重计数_Python数据分析笔记——Numpy、Pandas库
利用Python进行数据分析中有两个重要的库是Numpy和Pandas,本章将围绕这两个库进行展开介绍. Numpy库 Numpy最重要的一个特点是就是其N维数组对象,即ndarray,ndarray ...
- python去重计数_Python list去重及找出,统计重复项
http://bbs.chinaunix.net/thread-1680208-1-1.html http://www.cnblogs.com/feisky/archive/2012/12/06/28 ...
- python中计数_Python中的统计计数
关闭.此问题不符合堆栈溢出准则.它当前不接受答案. 想改善这个问题吗?更新问题,使其成为Stack Overflow的主题. 6年前关闭. 我有一组五个字母A..E.我想将它们分成3个一组,不重复字母 ...
- python 去重 字典_python按照list中字典的某key去重的示例代码
一.需求说明 当我们写爬虫的时候,经常会遇到json格式的数据,它通常是如下结构: data = [{'name':'小K','score':100}, {'name':'小J','score':98 ...
- python r转义_Python快速入门系列之二:还学不会我直播跪搓衣板
Python作为一个,目前最火的编程语言之一,已经渗透到了各行各业.它易学好懂,拥有着丰富的库,功能齐全.人生苦短,就用Python. 这个快速入门系列分为六篇,包含了Python大部分基础知识,每篇 ...
- python 字典计数_python怎么用字典计数
python用字典计数的方法:1.利用第三方库random生成随机数列表:2.利用字典的get方法取值,如果已存在就加一,不存在就默认值为0:3.得到的字典即为所有数据计数后的字典数据. 首先利用ra ...
- python 财务报表 建模_Python进行统计建模
前言 大家好,在之前的文章中我们已经讲解了很多Python数据处理的方法比如读取数据.缺失值处理.数据降维等,也介绍了一些数据可视化的方法如Matplotlib.pyecharts等,那么在掌握了这些 ...
- python docs 举例_Python 快速入门
Python 快速入门 04/20/2019 本文内容 此快速入门旨在帮助你在 Python 3 中进行第一个 API 调用. 必须具有PlayFab 开发人员帐户,才能调用任何 PlayFab AP ...
最新文章
- Google和Baidu常用的搜索技巧--转
- python中使用中文字符,文件首行添加# -*- coding: utf-8 -*-后仍然报错(unicode error) ‘utf-8‘ codec can‘t decode byte 0xc4
- [总结] 网络流最大流算法反向边的作用
- Windows下卸载Oracle
- 嵌入式里如何给内存做压力测试?不妨试试memtester
- Python3,selenium动态下载某库PPT文档,省下的钱可以撸串了!!!
- Android 将签名布局旋转90度,Android签名生成和互转(示例代码)
- 蒙特卡洛 光 matlab,用蒙特卡罗法模拟光散射问题
- 软件架构设计---产品线及系统演化
- 8款能让打工人效率原地飞起的神仙软件,含泪公开
- web前端开发免费教程
- 开业两月有余的转转二手集市怎么没有声音了?
- 下载Gazebo模型
- js 判断两个时间相差多少月_js对日期操作 获取两个日期的相差是否在几月之内...
- 免费的股票成交额查询接口要到哪里找?
- 手机上流行的各类谜语(大揭密)
- 缓存就是万金油,哪里有问题哪里抹一下 。那他的本质是什么呢?
- word中不能设置首字下沉的一个原因
- Python本地安装第三方库步骤
- 软件测试入职2个月想辞职了