response_error_analysis.py 2.1 KB
Newer Older
李明杰's avatar
李明杰 committed
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 50 51 52 53 54 55 56 57 58 59 60 61 62 63
# -*- coding: utf-8 -*-
# author:Li Mingjie time:2019/2/28
# Brief:Response Error Analysis

import pandas as pd
import matplotlib.pyplot as plt
import sys
import bottom_function.data_read as dr
import cgi


def error_data_statistics_plot(datatype, starttime, endtime, graphtype):
    csv_data = pd.DataFrame()
    csv_data = dr.read_data(datatype=datatype, starttime=starttime, endtime=endtime)
    csv_data.drop_duplicates(subset='query', keep='first', inplace=True)
    error_dict = {}
    for i in range(len(csv_data)):
        error_code = "error " + str(csv_data.ix[i]['code'])
        if error_code in error_dict.keys():
            error_dict[error_code] += 1
        else:
            error_dict.update({error_code: 1})

    fig = plt.figure(figsize=(10, 6))
    if graphtype == 'pie':
        e = []
        code_other = 0
        for j in error_dict.keys():
            if j != "error 501":
                e.append(0.1)
                code_other += error_dict[j]
            else:
                e.append(0)

        labels = ["error 501", "others"]
        fracs = [error_dict["error 501"], code_other]

        v_sum = sum(fracs)
        v_data = fracs
        for fx in range(0, len(fracs)):
            v_data[fx] = fracs[fx] / v_sum * 100
        fracs = v_data
        explode = e[:(len(fracs))]
        if sum(e[len(fracs):]) > 0:
            explode[-1] = 0.1
        plt.pie(x=fracs, labels=labels, explode=explode, autopct='%3.2f%%', shadow=True, startangle=90)

    if graphtype == 'bar':
        name_list = list(error_dict.keys())
        num_list = list(error_dict.values())
        plt.bar(range(len(num_list)), num_list)
        plt.xticks(range(len(name_list)), name_list)
        plt.ylabel('Number', fontsize=12, labelpad=5)
        for x, y in zip(range(len(num_list)), num_list):
            plt.text(x, y, '%d' % y, ha='center', va='bottom', fontsize=9)

    plt.title(str(starttime) + ' to ' + str(endtime) + ' semantic domain analysis of ' + graphtype + ' graph',
              fontsize=12)
    plt.tight_layout(5)
    path = '/roobo/soft/phpmyadmin/response_error.jpg'
    plt.savefig(path)
    return path