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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM