首页域名资讯 正文

每日PV-Pandas-Python数据分析(3)

2024-12-10 4 0条评论

1.1. 前言

这边我们使用内存分析框架Pandas来分析每日PV。

1.2. 对Pandas的好评

其实个人对Pandas这个模块是颇有好感。本人用Pandas完成可许多的日常实用的小工具,如生产excel报表,简单数据迁移等等。

对我来说Pandas就是一个内存的MySQL,我通常叫他为 程序式SQL。

1.3. Pandas分析步骤

  1. 载入数据
  2. 将 access_time 的日期进行 COUNT。类似如下SQL:
1 SELECT DATE_FORMAT ( access_time , ‘%Y-%m-%d’ ) , count ( * ) FROM log GROUP BY DATE_FORMAT ( access_time , ‘%Y-%m-%d’ ) ;

1.4. 代码

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 cat pd_ng_log_stat . py #!/usr/bin/env python #-*- coding: utf-8 -*- from ng_line_parser import NgLineParser import pandas as pd import socket import struct class PDNgLogStat ( object ) :      def __init__ ( self ) :          self . ng_line_parser = NgLineParser ( )      def _log_line_iter ( self , pathes ) :          “” “解析文件中的每一行并生成一个迭代器” “”          for path in pathes :              with open ( path , ‘r’ ) as f :                  for index , line in enumerate ( f ) :                      self . ng_line_parser . parse ( line )                      yield self . ng_line_parser . to_dict ( )      def load_data ( self , path ) :          “” “通过给的文件路径加载数据生成 DataFrame” “”          self . df = pd . DataFrame ( self . _log_line_iter ( path ) )      def pv_day ( self ) :          “” “计算每一天的 PV” “”          group_by_cols = [ ‘access_time’ ] # 需要分组的列,只计算和显示该列                   # 下面我们是按 yyyy-mm-dd 形式来分组的, 所以需要定义分组策略:          # 分组策略为: self.df[‘access_time’].map(lambda x: x.split()[0])          pv_day_grp = self . df [ group_by_cols ] . groupby (                        self . df [ ‘access_time’ ] . map ( lambda x : x . split ( ) [ 0 ] ) )          return pv_day_grp . agg ( [ ‘count’ ] ) def main ( ) :      file_pathes = [ ‘www.trustauth.cn.access.log’ ]      pd_ng_log_stat = PDNgLogStat ( )      pd_ng_log_stat . load_data ( file_pathes )      # 统计每日 pv      print pd_ng_log_stat . pv_day ( ) if __name__ == ‘__main__’ :      main ( )

运行统计和输出结果

1 2 3 4 5 6 7 8 9 10 11 12 13 14 python pd_ng_log_stat . py              access_time                    count access _time              2016 06 13          4149 2016 06 14          10234 2016 06 15          9825 . . . . . . 2016 09 16          11076 2016 09 17          10231 2016 09 18          6739 [ 98 rows x 1 columns ]

 

 

 

文章转载来自:trustauth.cn

文章版权及转载声明

本文作者:亿网 网址:https://edns.com/ask/post/150852.html 发布于 2024-12-10
文章转载或复制请以超链接形式并注明出处。