# -*- 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