zoukankan      html  css  js  c++  java
  • Python分类统计数据

    在数据的常见分布中,有一种是一对多存储的数据,即一个是key,其他改key对应的多个value。例如气象数据等,每天有很多组,又或者是一个球员,他每天得多少分等等。我做这个东西有三种方法,即:常规编程法,数据库查询法以及pandas包提供的group方法。第一种方法我自己写出的代码比较繁琐,这里不做介绍。

      示例数据如下,统计每天对应的level的均值及方差等。
    Date level
    2014/6/10 8.11
    2014/6/10 8.02
    2014/6/11 8.04
    2014/6/11 8.04
    2014/6/11 8.13
    2014/6/11 8.12
    2014/6/11 8.13
    2014/6/12 8.02
    2014/6/12 8.03
    2014/6/12 8.04
    2014/6/12 8.05
    2014/6/13 7.97
    2014/6/13 7.96
    2014/6/13 7.97
    2014/6/13 7.96
    2014/6/13 7.98
    2014/6/13 7.95
    2014/6/13 7.94
    2014/6/13 7.95
    2014/6/13 7.97
    2014/6/13 7.96
    2014/6/13 7.93

     

    方法1:
      利用SQL查询语句,将上面的数据存储到数据库中(可以用access存储)的表中(level),然后利用下面的sql语句即可输出:
      SELECT DATE as 'Date',AVG(LEVEL) as 'Mean Level' FROM LEVEL GROUP BY DATE
      这样即可输入结果。
    方法2:Python的pandas包提供一种group格式,即dict(字典格式),然后利用describe方法输出统计结果。
      pandas是pypi提供的众多包之一,其中提供了大量的统计方法。一般推荐安装这个包,可以在命令行管理器中使用:pip install pandas安装。
      代码:
    # -*- coding: utf-8 -*-
    """
    Created on Mon Aug 10 21:20:29 2015
     
    @author: zhigang
    """
     
    '''
    Stats data by date
    '''
    import pandas as pd
     
    data = pd.read_excel('waterLevel.xls',sheetname = 'zx')#zx是sheet名字
    print(data.head(5))
    #print(data.T)
    grouped = data.groupby("Date")
    print(grouped.describe())
     
    然后输出结果:
                          level
    Date                       
    2014-06-10 count   2.000000
               mean    8.065000
               std     0.063640
               min     8.020000
               25%     8.042500
               50%     8.065000
               75%     8.087500
               max     8.110000
    2014-06-11 count   5.000000
               mean    8.092000
               std     0.047645
               min     8.040000
               25%     8.040000
               50%     8.120000
               75%     8.130000
               max     8.130000
    2014-06-12 count   4.000000
               mean    8.035000
               std     0.012910
               min     8.020000
               25%     8.027500
               50%     8.035000
               75%     8.042500
               max     8.050000
    2014-06-13 count  11.000000
               mean    7.958182
               std     0.014709
               min     7.930000
               25%     7.950000
               50%     7.960000
               75%     7.970000
               max     7.980000
      上述的结果可以直接写入到exlce中,可将上述代码进行改动如下即可:
      description = grouped.describe()
      description.to_excel('stats_total.xls',sheet_name = 'stats')
    效果:


      如果只需要提取mean,那么修改以下代码,将结果输出到excel中:
      escription = grouped.describe()
      index = [i for i in range(1,len(description),8)]
      #print(description.iloc[index].name,descrption.iloc[index].level)
      description.iloc[index].to_excel('stats.xls',sheet_name = 'stats')
    代码文件见:https://github.com/zgcao/stats.git中的d2_pandas_stats_waterlevel.py
  • 相关阅读:
    span设置宽和高当没有内容的时候也可撑开
    span设置宽和高当没有内容的时候也可以撑开
    块级元素以及内联元素大总结
    内存泄露问题
    Sqlcompletefree
    运用SET ANSI_PADDING OFF创建某个字段为自增列的表,以及插入数据
    Sql Server中通配符
    sql server 2008查询窗口怎么显示行数
    sql server 2008语句中的go有什么用?
    SQL Server 2008 R2[ALTER]列属性修改
  • 原文地址:https://www.cnblogs.com/ahnucao/p/4938722.html
Copyright © 2011-2022 走看看