精华内容
下载资源
问答
  • 之前用 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 写过一个脚本,用来处理上千万用户的一些数据,其中有一个需求是统计用户的某一数据的去重数量。为了加快程序的速度,我启用了多进程。但不幸的是,程序跑了近一个星期,还没处理完。这时,我感觉到了不对,于是开始查看程序的性能瓶颈。

    对于统计去重数,我是将用户的数据放到一个列表中,然后用 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 倍以上。

    展开全文
  • 首先,看看本文所面向应用场景:我们有一个数据集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

    展开全文
  • PythonPython开发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)

    内容来源于网络,如有侵权请联系客服删除

    展开全文
  • Python实现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...
  • 1. 常用函数库scipy包中stats模块和statsmodels包是python常用的数据分析工具,scipy.stats以前有一个models子模块,后来被移除了。这个模块被重写并成为了现在独立statsmodels包。scipystats包含一些比较基本...
  • Python的统计数据展示 1、数据可以分为“分类型”或“数值型”,如果变量是数值型,我们就采用某些特定统计方法,相反,如果数据是定性分类,那么我们可以采用另外办法, 1.1、分类数据 ①布尔数据 ②...
  • def distribution(path):'''统计数据分布''''''载入数据'''relation=np.loadtxt(path, dtype=float, delimiter=" ")total_list=relation'''求取最大值与最小值差值'''base=math.ceil(max(total_list))-int(min...
  • Python数据可视化实战数据可视化是数据分析当中重要的组成部分,数据可视化主要旨在借助于图形化手段,清晰有效地传达与沟通信息,在大数据时代,数据可视化成为了一项必不可缺的技能,熟练运用数据可视化来进行数据...
  • 一直以来,数据可视化就是一个处于不断演变之中概念,其边界在不断地扩大;因而,最好是对其加以宽泛定义。数据可视化指是技术上较为高级技术方法,而这些技术方法允许利用图形、图像处理、计算机视觉以及...
  • python数据统计分析

    万次阅读 多人点赞 2019-02-17 09:08:25
      scipy包中stats模块和statsmodels包是python常用的数据分析工具,scipy.stats以前有一个models子模块,后来被移除了。这个模块被重写并成为了现在独立statsmodels包。  scipystats包含一些比较基本工具...
  • Step1:基础数据准备(通过爬虫获取到),以下是从第一期03年双色球开奖号到今天所有数据整理,截止目前一共2549期,balls.txt 文件内容如下 :每行前6列数据是红球 每行最后1列数据是篮球Step2:分析数据特征和...
  • Python统计数据的频率

    2017-06-23 15:59:00
    2019独角兽企业重金招聘Python工程师标准>>> ...
  • Python可以直接处理上G的数据;R不行,R分析数据时需要先通过数据库把大数据转化为小数据(通过groupby)才能交给R做分析,因此R不可能直接分析行为详单,只能分析统计结果。所以有人说:Python=R SQL/Hive,并不是...
  • 目录第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 数据的累加与统计的示例代码,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
  • (点击上方公众号,可快速关注)html来源:KillerManA前端连接:http://www.jianshu.com/p/e792eea5056cjava最近在用python数据统计,这里总结了一些最近使用时查找和总结一些小技巧,但愿能帮助在作这方面时...
  • 统计分析数据的时候,经常需要进行分组统计。分组操作在python里的实现方式就是groupby语句。惯例,咱们先造一个DataFrame表。import pandas as pddic={'class':['a','a','b','b'],'id':[1,2,3,3],'math':[88,66,55,...
  • 1.简介(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)...
  • 上面这个是他原始数据,是一个逗号分隔TXT。他希望能完成这样:而他在ACCESS里用SQL是这样完成:今天下午刚好有时间,就帮这位朋友写了一个Python的脚本,主要是用到pandas库,思路是确定“地市”里惟一值...
  • Python本身的数据分析功能并不强,需要安装一些第三方扩展库来增强它能力。我们常用到库包括NumPy、Pandas、Matplotlib、Seaborn、NLTK等,接下来将针对相关库做一个简单介绍,方便学习。在Python中,常用...
  • 之前用 Python 写过一个脚本,用来处理上千万用户的一些数据,其中有一个需求是统计用户的某一数据的去重数量。为了加快程序的速度,我启用了多进程。但不幸的是,程序跑了近一个星期,还没处理完。这时,我感觉到了...
  • 怎么用python统计数据

    2020-02-06 18:28:56
    这是原始数据, 然后怎么通过python把上面的数据统计成这样结果求解!!最好附代码
  • 数据的描述性统计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语言的科学计算包、图像处理数据包实现气象数据的风向风速分析,给出了风向风速的玫瑰图,根据玫瑰图预测了气象的未来走势,完成了...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,420
精华内容 4,568
关键字:

统计数据的python

python 订阅