# -*- coding: utf-8 -*- """ Created on Sun Sep 16 21:51:07 2018 @author: iwuno """ import pandas as pd from pandas import Series, DataFrame import matplotlib.pyplot as plt from datetime import datetime import numpy as np from bokeh.plotting import figure, output_file, show, save from bokeh.models import ColumnDataSource, LabelSet from bokeh.palettes import PuBu6 from bokeh.layouts import gridplot df = pd.read_excel("Incident_ticket.xlsx", index_col = 0) df['Department'] = df['Title'].astype(str).str[0:4] df['Department'] = df['Department'].str.replace(r'[^A-Za-z0-9]+', '') df.rename(columns={'Fault Level(Create TT)(Create TT)': 'fault_level', 'Ticket Status': 'ticket_status', 'Zone(Create TT)(Create TT)': 'zone'}, inplace=True) output_file('by_fault_level2.html', title="TICKET DASHBOARD") #Bokeh plot for fault_level grouped_fault = df.groupby('fault_level').size().reset_index(name="count") source_fault = ColumnDataSource(grouped_fault) fault_levels = source_fault.data['fault_level'].tolist() p = figure(plot_width = 500, x_range=fault_levels, tools = '', logo = None) p.vbar(x='fault_level', top='count', source=source_fault, width=0.70, color= "cornflowerblue") p.title.text ='Tickets Per Fault Level' p.xaxis.axis_label = 'Fault Level' p.yaxis.axis_label = 'No of Incident Tickets' p.yaxis.minor_tick_line_color = None p.title.text_color = "Navy" p.title.text_font_size = "15px" p.title.text_font = "Times" labels = LabelSet(x='fault_level', y='count', text='count',text_font_style='bold', level='glyph', x_offset=-13, y_offset=-16.3, source=source_fault, render_mode='canvas') p.add_layout(labels) # plot for zones grouped_zone = df.groupby('zone').size().reset_index(name="count") source_zone = ColumnDataSource(grouped_zone) zones = source_zone.data['zone'].tolist() p2 = figure(plot_width = 500, x_range=zones, tools = '', logo = None) p2.vbar(x='zone', top='count', source=source_zone, width=0.70, color="cornflowerblue") p2.title.text ='Tickets Per Zones' p2.xaxis.axis_label = 'Zones' p2.yaxis.axis_label = 'No of Incident Tickets' p2.yaxis.minor_tick_line_color = None p2.title.text_color = "Navy" p2.title.text_font_size = "15px" p2.title.text_font = "Times" labels = LabelSet(x='zone', y='count', text='count',text_font_style='bold', level='glyph', x_offset=-13, y_offset=-16.3, source=source_zone, render_mode='canvas') p2.add_layout(labels) #Bokeh plot for department grouped_dept = df.groupby('Department').size().reset_index(name="count") #Select nd groupby the column source_dept = ColumnDataSource(grouped_dept) dept_list = source_dept.data['Department'].tolist() #convert values in the column to list p3 = figure(plot_width = 500, x_range=dept_list , tools = '', logo = None) p3.vbar(x='Department', top='count', source=source_dept, width=0.70, color="cornflowerblue") p3.title.text ='Tickets Per Department' p3.xaxis.axis_label = 'Department' p3.yaxis.axis_label = 'No of Incident Tickets' p3.yaxis.minor_tick_line_color = None p3.title.text_color = "Navy" p3.title.text_font_size = "15px" p3.title.text_font = "Times" labels = LabelSet(x='Department', y='count', text='count',text_font_style='bold', level='glyph', x_offset=-13, y_offset=-16.3, source=source_dept, render_mode='canvas') p3.add_layout(labels) #plot for tickets grouped_tkt = df.groupby('ticket_status').size().reset_index(name="count") #Select nd groupby the column source_tkt = ColumnDataSource(grouped_tkt) tkt_status_list = source_tkt.data['ticket_status'].tolist() #convert values in the column to list p4 = figure(plot_width = 500, x_range=tkt_status_list, tools = '', logo = None) p4.vbar(x='ticket_status', top='count', source=source_tkt, width=0.70, color="cornflowerblue") p4.title.text ='Tickets by Status' p4.xaxis.axis_label = 'Ticket Status' p4.yaxis.axis_label = 'No of Incident Tickets' p4.yaxis.minor_tick_line_color = None p4.title.text_color = "Navy" p4.title.text_font_size = "15px" p4.title.text_font = "Times" labels = LabelSet(x='ticket_status', y='count', text='count',text_font_style='bold', level='glyph', x_offset=-13, y_offset=-16.3, source=source_tkt, render_mode='canvas') p4.add_layout(labels) grid = gridplot([p, p2, p3, p4], ncols=2, sizing_mode='stretch_both', merge_tools = False) show(grid)