• 与pandas初相识


      前一阵子有个同事说,他看不懂从kibana上拉下来的日志,但是又想分析一些数据,感觉很头痛,每次都找开发给他整理一下,但是开发也很忙,要数据的频率也略高,那时候正好我跟这位需求方的项目,负责测试工作。然后,我晚上加班的时候就帮他写了一个很小的程序,帮助这位需求方同事可以随时查看数据。也不会占用任何人太多时间。

      解决思路:

      一、读取原始报表

        这里的config.ini中放的是原始报表名称 

    [filenames]
    file_name=XXXXXX.csv

      二、拆分数据

      三、按照既定规则计算符合flag的数据

      四、拼接数据,形成新的报表输出

      

    '''
    @create on : 20190311
    @Update : 20190311
    @description: 该模块可以直接获取最直观的报表
    
    '''
    
    import pandas as pd
    import configparser
    import os
    import json
    
    
    # 获取项目根目录
    dirpath = os.path.dirname(os.path.realpath(__file__))
    
    # 拼接时候注意一下,会从第一个带有斜杠的地址开始拼接
    sencondpath = os.path.join(dirpath, "log_file")
    config = configparser.ConfigParser()
    config.read("config.ini")
    filename = config.get("filenames", "file_name")
    
    # 改config.ini中的文件名自动拼接
    finalpath = os.path.join(sencondpath, filename)
    
    # 读入的CSV数据对象
    log_df = pd.read_csv(finalpath, encoding="utf-8")
    print(log_df)
    
    
    # 半成品矩阵
    def mergedf():
        df_right = log_df['message']
        df_left = log_df['@timestamp']
        result_df = pd.concat([df_left, df_right], axis=1)
        return result_df
    
    
    def oprate_df():
        # 计算有多少符合数据旗标
        flag = 0
    
        df_size = log_df.__len__()
        urlParams, jrtt_reports, convert_ids = [], [], []
    
        try:
            goal_df = mergedf()
            for line in range(df_size):
                data_row = json.loads(log_df.loc[line, 'message'])
                print(log_df.loc[line, '@timestamp'])
                if data_row["data"]["jrtt_report"] is not None and data_row["data"]["convert_id"] is not None:
                    flag = flag + 1
                line = line + 1
    
                urlParams.append(data_row["data"]["urlparams"])
                jrtt_reports.append(data_row["data"]["jrtt_report"])
                convert_ids.append(data_row["data"]["convert_id"])
            print(flag)
        except Exception as e:
            print("日志文件解析出错" + str(e))
    
        try:
            goal_df.insert(0, 'uelParmas', urlParams)
            goal_df.insert(0, 'jrtt_repot', jrtt_reports)
            goal_df.insert(0, 'convert_id', convert_ids)
    
        except Exception as e:
            print("矩阵组合出错!"+str(e))
        #print(goal_df)
        return goal_df
    
    
    if __name__ == '__main__':
    
        total_df = oprate_df()
        excelFile = "D:/anylysis/dataResult/workResult.xlsx"
        writer = pd.ExcelWriter(excelFile)
        total_df.to_excel(writer, 'FinalResult')
        writer.save()
    

      

  • 相关阅读:
    分治
    递归
    java三大特性之封装
    Java基础知识
    puk2367 拓扑排序
    puk1251 最小生成树
    puk1521 赫夫曼树编码
    DOSbox简单运行操作
    Mybatis初学经验----------------(2)
    mysql存储引擎MyISAM和InnoDB的区别
  • 原文地址:https://www.cnblogs.com/yuki-nana/p/10803116.html
Copyright © 2020-2023  润新知