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

HH python每日PV-Pandas-Python数据分析(3)已关闭评论10,6564字数 1642阅读5分28秒阅读模式

1.1. 前言

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

1.2. 对Pandas的好评

其实个人对Pandas这个模块是颇有好感。本人用Pandas完成可许多的日常实用的小工具,如生产excel报表,简单数据迁移等等。文章源自运维生存时间-https://www.ttlsa.com/python/python-big-data-every-day-pv-pandas/

对我来说Pandas就是一个内存的MySQL,我通常叫他为 程序式SQL。文章源自运维生存时间-https://www.ttlsa.com/python/python-big-data-every-day-pv-pandas/

1.3. Pandas分析步骤

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

1.4. 代码

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.ttmark.com.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()

运行统计和输出结果文章源自运维生存时间-https://www.ttlsa.com/python/python-big-data-every-day-pv-pandas/

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]

有兴趣的可以在运行程序的时候使用top命令查看一些MRJob 和 Pandas 资源情况,不难发现MRJob他基本上没有什么内存的消耗,而Pandas使用的内存明星增加很多。文章源自运维生存时间-https://www.ttlsa.com/python/python-big-data-every-day-pv-pandas/

 文章源自运维生存时间-https://www.ttlsa.com/python/python-big-data-every-day-pv-pandas/

昵称: HH文章源自运维生存时间-https://www.ttlsa.com/python/python-big-data-every-day-pv-pandas/

QQ: 275258836文章源自运维生存时间-https://www.ttlsa.com/python/python-big-data-every-day-pv-pandas/

ttlsa群交流沟通(QQ群②: 6690706 QQ群③: 168085569 QQ群④: 415230207(新) 微信公众号: ttlsacom)文章源自运维生存时间-https://www.ttlsa.com/python/python-big-data-every-day-pv-pandas/

感觉本文内容不错,读后有收获?文章源自运维生存时间-https://www.ttlsa.com/python/python-big-data-every-day-pv-pandas/

逛逛衣服店,鼓励作者写出更好文章。文章源自运维生存时间-https://www.ttlsa.com/python/python-big-data-every-day-pv-pandas/ 文章源自运维生存时间-https://www.ttlsa.com/python/python-big-data-every-day-pv-pandas/

weinxin
我的微信
微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~
HH
  • 本文由 发表于 28/10/2016 00:50:10
  • 转载请务必保留本文链接:https://www.ttlsa.com/python/python-big-data-every-day-pv-pandas/