-
python怎么数据分范围统计-Python 快速统计数据的去重数和去重数据
2020-11-11 14:48:25之前用 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 快速统计数据的去重数和去重数据
2020-12-09 02:05:04之前用 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 pandas 分组统计的方法
2020-12-08 15:39:40首先,看看本文所面向的应用场景:我们有一个数据集df,现在想统计数据中某一列每个元素的出现次数。这个在我们前面文章《如何画直方图》中已经介绍了方法,利用value_counts()就可以实现(具体回看文章)但是,现在,...首先,看看本文所面向的应用场景:我们有一个数据集df,现在想统计数据中某一列每个元素的出现次数。这个在我们前面文章《如何画直方图》中已经介绍了方法,利用value_counts()就可以实现(具体回看文章)
但是,现在,我们考虑另外一个场景,我们假如要想统计其中两列元素出现次数呢?举个栗子:
在df数据集中,如果我们想统计A、B两列的元素的出现情况,也就是说,得到如下表。
从上面的最后一列可以看到,在A、B两列中,1 2 出现了2次,1 4 出现1次 ,1 6出现1次,2 3出现了2次, 2 4 出现1次, 3 1出现了1次
具体实现的代码:
import pandas as pd
df=pd.DataFrame([[1,2,2],[1,4,5],[1,2,4],[1,6,3],[2,3,1],[2,4,1],[2,3,5],[3,1,1]],columns=['A','B','C'])
gp=df.groupby(by=['A','B'])
gp.size()
所以,如果想统计更多列,只要在groupby()中的by参数添加就可以,例如统计3列。
gp=df.groupby(by=['A','B','C'])
由gp.size()得到的是可以mulitiindex Series。
下面,要转化成DataFrame的结构。
newdf=gp.size()
newdf.reset_index(name='times')
其中name中参数就是我们可以为最后一列添加新的名字,例如这里的“times”
这个时候newdf已经是DataFrame的类型了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
本文标题: 详解python pandas 分组统计的方法
本文地址: http://www.cppcns.com/jiaoben/python/267054.html
-
python微信群机器人统计群数据_python-itchat 统计微信群、好友数量的实例
2021-01-12 07:01:01PythonPython开发Python语言python-itchat 统计微信群、好友数量的实例 今天小编就为大家分享一篇python-itchat 统计微信群、好友数量,及原始消息数据的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编...Python
Python开发
Python语言
python-itchat 统计微信群、好友数量的实例
今天小编就为大家分享一篇python-itchat 统计微信群、好友数量,及原始消息数据的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
效果:
好友:
# 获取自己的用户信息,返回自己的属性字典
itchat.search_friends()
# 获取特定UserName的用户信息
itchat.search_friends(userName='@abcdefg1234567')
# 获取任何一项等于name键值的用户
itchat.search_friends(name='wxceshi')
# 获取分别对应相应键值的用户
itchat.search_friends(wechatAccount='wceshi')
# 三、四项功能可以一同使用
itchat.search_friends(name='wxceshi', wechatAccount='wcceshi')
公众号:
公众号的获取方法为get_mps,将会返回完整的公众号列表。
其中每个公众号为一个字典
传入update键为True将可以更新公众号列表并返回
公众号的搜索方法为search_mps,有两种搜索方法:
1.获取特定UserName的公众号
2.获取名字中含有特定字符的公众号
如果两项都做了特定,将会仅返回特定UserName的公众号,下面是示例程序:
# 获取特定UserName的公众号,返回值为一个字典
itchat.search_mps(userName='@abcdefg1234567')
# 获取名字中含有特定字符的公众号,返回值为一个字典的列表
itchat.search_mps(name='gzh')
# 以下方法相当于仅特定了UserName
itchat.search_mps(userName='@abcdefg1234567', name='gzh')
群聊:
群聊的获取方法为get_chatrooms,将会返回完整的群聊列表。
其中每个群聊为一个字典
传入update键为True将可以更新群聊列表并返回通讯录中保存的群聊列表
群聊列表为后台自动更新,如果中途意外退出存在极小的概率产生本地群聊消息与后台不同步
为了保证群聊信息在热启动中可以被正确的加载,即使不需要持续在线的程序也需要运行itchat.run()
如果不想要运行上述命令,请在退出程序前调用-itchat.dump_login_status(),更新热拔插需要的信息
群聊的搜索方法为search_chatrooms,有两种搜索方法:
1.获取特定UserName的群聊
2.获取名字中含有特定字符的群聊
如果两项都做了特定,将会仅返回特定UserName的群聊,下面是示例程序:
群聊用户列表的获取方法为update_chatroom。
群聊在首次获取中不会获取群聊的用户列表,所以需要调用该命令才能获取群聊的成员
该方法需要传入群聊的UserName,返回特定群聊的用户列表
memberList =itchat.update_chatroom('bcdefg67')
创建群聊、增加、删除群聊用户的方法如下所示:
由于之前通过群聊检测是否被好友拉黑的程序,目前这三个方法都被严格限制了使用频率
删除群聊需要本账号为群管理员,否则会失败
将用户加入群聊有直接加入与发送邀请,通过useInvitation设置
超过40人的群聊无法使用直接加入的加入方式,特别注意
memberList =itchat.get_friends()[1:]
# 创建群聊,topic键值为群聊名
chatroomUserName =itchat.create_chatroom(memberList, 'test chatroom')
# 删除群聊内的用户
itchat.delete_member_from_chatroom(chatroomUserName, memberList[0])
# 增加用户进入群聊
itchat.add_member_into_chatroom(chatroomUserName, memberList[0], useInvitation=False)
内容来源于网络,如有侵权请联系客服删除
-
pythonmysql数据分析统计服_Python实现Mysql数据统计及numpy统计函数
2020-12-17 04:48:26Python实现Mysql数据统计的实例代码如下所示:import pymysqlimport xlwtexcel=xlwt.Workbook(encoding='utf-8')sheet=excel.add_sheet('Mysql数据库')sheet.write(0,0,'库名')sheet.write(0,1,'表名')sheet.write(0... -
用python怎么做数据统计-python数据统计分析
2020-10-29 22:50:111. 常用函数库scipy包中的stats模块和statsmodels包是python常用的数据分析工具,scipy.stats以前有一个models子模块,后来被移除了。这个模块被重写并成为了现在独立的statsmodels包。scipy的stats包含一些比较基本... -
Python中的统计数据展示
2019-12-26 16:27:11Python中的统计数据展示 1、数据可以分为“分类型”或“数值型”,如果变量是数值型的,我们就采用某些特定的统计方法,相反,如果数据是定性分类的,那么我们可以采用另外的办法, 1.1、分类数据 ①布尔数据 ②... -
python区间分布统计_Python统计数据的区间分布,pytho
2021-01-29 14:17:10def distribution(path):'''统计数据分布''''''载入数据'''relation=np.loadtxt(path, dtype=float, delimiter=" ")total_list=relation'''求取最大值与最小值的差值'''base=math.ceil(max(total_list))-int(min... -
python画统计图-Python数据可视化实战
2020-11-11 14:30:00Python数据可视化实战数据可视化是数据分析当中重要的组成部分,数据可视化主要旨在借助于图形化手段,清晰有效地传达与沟通信息,在大数据时代,数据可视化成为了一项必不可缺的技能,熟练运用数据可视化来进行数据... -
六大数据统计图——Python的数据可视化
2018-10-22 12:48:54一直以来,数据可视化就是一个处于不断演变之中的概念,其边界在不断地扩大;因而,最好是对其加以宽泛的定义。数据可视化指的是技术上较为高级的技术方法,而这些技术方法允许利用图形、图像处理、计算机视觉以及... -
python数据统计分析
2019-02-17 09:08:25scipy包中的stats模块和statsmodels包是python常用的数据分析工具,scipy.stats以前有一个models子模块,后来被移除了。这个模块被重写并成为了现在独立的statsmodels包。 scipy的stats包含一些比较基本的工具... -
python在人力资源数据分析统计服_Python数据分析之双色球高频数据统计
2021-01-03 22:29:47Step1:基础数据准备(通过爬虫获取到),以下是从第一期03年双色球开奖号到今天的所有数据整理,截止目前一共2549期,balls.txt 文件内容如下 :每行的前6列数据是红球 每行的最后1列数据是篮球Step2:分析数据特征和... -
Python统计数据的频率
2017-06-23 15:59:002019独角兽企业重金招聘Python工程师标准>>> ... -
python可以做哪些数据分析统计服_Python统计分析时代已经来临
2021-01-13 22:15:04Python可以直接处理上G的数据;R不行,R分析数据时需要先通过数据库把大数据转化为小数据(通过groupby)才能交给R做分析,因此R不可能直接分析行为详单,只能分析统计结果。所以有人说:Python=R SQL/Hive,并不是... -
python统计人的视角pdf_Python——统计人的视角(统计数据分析与应用丛书)
2020-12-17 08:45:51目录第1 章引言1.1 下载及安装Python1.2 Anaconda 的几种界面第2 章Python 基础知识2.1 一些基本常识2.2 文件及输入输出2.3 numpy 模块2.4 pandas 模块2.5 matplotlib 模块2.6 scipy 模块第3 章传统初等统计中的... -
python中describe_数据的描述性统计以及用Python代码实现
2021-01-29 03:47:25一、数据的描述性统计对数据的描述性统计主要是指对结构化数据的描述分析,可从三个维度进行分析:数据的集中趋势、数据的离散程度和数据的分布形态。描述数据集中趋势的指标有:众数、中位数、平均数(包含算数平均... -
Python 数据的累加与统计的示例代码
2020-09-16 10:56:33主要介绍了Python 数据的累加与统计的示例代码,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下 -
python怎么分组统计_python 数据统计,分组的一些小技巧
2020-12-24 13:28:15(点击上方公众号,可快速关注)html来源:KillerManA前端连接:http://www.jianshu.com/p/e792eea5056cjava最近在用python作数据统计,这里总结了一些最近使用时查找和总结的一些小技巧,但愿能帮助在作这方面时的... -
python分组统计数据_数据分组统计
2020-12-08 15:39:42统计分析数据的时候,经常需要进行分组统计。分组操作在python里的实现方式就是groupby语句。惯例,咱们先造一个DataFrame表。import pandas as pddic={'class':['a','a','b','b'],'id':[1,2,3,3],'math':[88,66,55,... -
python分组统计数据_【Python 数据分析】groupby分组统计
2020-12-08 15:39:411.简介(1)根据某些条件将数据拆分成组(2)对每个组独立应用函数(3)将结果合并到一个数据结构中Dataframe在行(axis=0)或列(axis=1)上进行分组,将一个函数应用到各个分组并产生一个新值,然后函数执行结果被合并到最终... -
Python统计数据的区间分布
2020-07-28 21:55:58通过itertools中的groupby进行统计,区间可以自定义,我定义的是10. from itertools import groupby lst=[] with open(path,'r',encoding='utf-8') as f: lines=f.readlines() for i,line in enumerate(lines)... -
python中分组频率统计功能_python pandas 数据分组计数统计
2020-12-24 13:29:20上面这个是他的原始数据,是一个逗号分隔的TXT。他希望能完成这样的:而他在ACCESS里用SQL是这样完成的:今天下午刚好有时间,就帮这位朋友写了一个Python的脚本,主要是用到pandas库,思路是确定“地市”里的惟一值... -
python哪个模块用于数据分析统计服_python哪个模块用于数据分析_Python中常用的数据分析工具(模块)有哪些...
2020-12-29 07:59:38Python本身的数据分析功能并不强,需要安装一些第三方的扩展库来增强它的能力。我们常用到的库包括NumPy、Pandas、Matplotlib、Seaborn、NLTK等,接下来将针对相关库做一个简单的介绍,方便学习。在Python中,常用的... -
Python 快速统计数据的去重数和去重数据
2019-01-28 13:39:00之前用 Python 写过一个脚本,用来处理上千万用户的一些数据,其中有一个需求是统计用户的某一数据的去重数量。为了加快程序的速度,我启用了多进程。但不幸的是,程序跑了近一个星期,还没处理完。这时,我感觉到了... -
怎么用python统计数据
2020-02-06 18:28:56这是原始数据, 然后怎么通过python把上面的数据统计成这样的结果求解!!最好附代码 -
数据的描述性统计与python实现
2019-07-29 17:55:22数据的描述性统计与python实现 使用pandas导入数据 导入需要的包 import pandas as pd import numpy as np import matplotlib.pyplot as plt import matplotlib from scipy.stats import mode import seaborn as ... -
python统计数据指标的常见方法
2019-04-15 20:34:39文章目录实验环境读取csv文件删除数据中我们不需要的列(假设我不需要...在对数据进行挖掘之前,我们得到的数据往往是不太理想的,数据缺失值太严重导致统计数据指标不太容易,这篇文章记录下如何在含有缺失值的情况... -
Python-Office: Python统计Excel里面的数据
2019-02-22 13:39:46统计每个关键字的总数目。 譬如ab 是12+1, cd是13+2, ef是0。 XlsxWriter的安装 pip install XlsxWriter之后,python仍然可能提示找不到XlsxWriter。这个时候可以尝试下面的方法安装: $ git clone ... -
基于python的气象数据分析统计服_基于Python的风向风速数据分析的设计与实现
2020-12-20 15:28:02基于Python的风向风速数据分析的设计与实现李...本文以江苏省气象数据为例,运用Python语言的科学计算包、图像处理数据包实现气象数据的风向风速分析,给出了风向风速的玫瑰图,根据玫瑰图预测了气象的未来走势,完成了...
-
Amoeba 实现 MySQL 高可用、负载均衡和读写分离
-
SQLServer2008R2 英文版,使用Job向远程数据库推送数据中文乱码解决办法
-
用Go语言来写区块链(一)
-
docker容器打包成镜像
-
朱老师鸿蒙系列课程第1期-3.鸿蒙系统Harmonyos源码配置和管理
-
2020年最新省市区mysql数据表.zip
-
网易云音乐源码.zip
-
MaxScale 实现 MySQL 读写分离与负载均衡
-
Kafka版本演进
-
2021最新去水印小程序源码
-
access应用的3个开发实例
-
sql 建表提取excel文件数据插入
-
设计响应式导航菜单的五大法则
-
Mycat 实现 MySQL的分库分表、读写分离、主从切换
-
jq过渡收缩动画用js实现
-
Kotlin基础 属性(四)
-
cuda:为CUDA和框架组合预先构建docker映像-源码
-
Component series.wordCloud not exists. Load it first.
-
2021-03-02
-
夜晚整层大气透过率与水汽总量同步测量