Skip to content
Permalink
main
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
 
 
Cannot retrieve contributors at this time
##########
## SQL Data Visualation designed for the 4005 CEM Module for
## the Database Systems module for Computer Science at Coventry University
##
## Utilises a variety of libraries to parse and represent the data
## from a prepriatory format. In this regard, I am parsing the
## information accumulated from a .csv file which was
## created from my SQL Database
##
## (C) SQL and it's subsidiaries:
## https://www.mysql.com/downloads/
##
## (C) SQL and it's documentation
## https://learn.microsoft.com/en-us/sql/?view=sql-server-ver16
##
## Copyright (C) 2023 Harry Clark - Student No. 12340530
##
##########
import matplotlib.pyplot as PLT # import just the plotting schema of the library
import pandas as PD # import the pandas api so we can scrape the contents of the csv file
import numpy
## ASSIGN DIFFERENT COLUMNS RELATIVE TO THE DATA SET
## THROUGH THIS, WE CAN USE THE PANDAS LIBRARY FOR SEAMLESS AND
## FLEXIBLE DATA PARSING AND ANAlYSIS
## I AM USING PANDAS AS OPPOSED TO PYTHON PREPRIATORY
## CSV LIBRARY IS BECAUSE I WANT TO BE ABLE TO SEAMLESSLY
## INTERGRATE THE PARSED DATA INTO THE OTHER LIBRARIES SUCH
## AS MATPLOTLIB
## CREATE A MAIN FUNCTION TO HOUSE THE BASIC NESSESSITIES
## FOR THE GRAPH'S CREATION
class PLOT_DATA:
def __init__(self):
DATA = PD.read_csv('DOG.csv')
## INCLUDE ALL OF THE DATA PRESENTED IN THE
## NORMALISED SET FROM SQLSTUDIO
## THERE IS PROBABLY A GREATER ALTERNATIVE TO THIS
## BUT WE WILL CROSS THAT BRIDGE WHEN WE COME TO IT
## IN THE MEAN TIME, USING THE SELF DIRECTIVE
## WE CAN INITIALISE VARIABLE TYPES TO A SPECIFIC TYPE
self.OwnerID = DATA['ID']
self.Name = DATA['NAME']
self.PhoneNo = DATA['PHONE']
self.Email = DATA['EMAIL']
self.GroomID = DATA['GROOM_ID']
self.GroomDescription = DATA['GROOM_DESC']
self.DogName = DATA['DOG_NAME']
self.TotalCost = DATA['TOTAL_COST']
## PARSE THE ABOVE INFORMATION WITH THE SELF DIRECTIVE
## TO REFERENCE TO THE VARIABLES TO MAKE THE BAR CHART
## WE CAN MAKE THIS A LOT EASIER COMPARED
## TO MY PREVIOUS COMMITS TO MY REPO
## BY USING MATPLOTLIB PREPRIATORY
## LABELLING CONVENTIONS AS OPPOSED
## TO CREATING CONFUSION WITH USING THE
## SELF DIRECTIVE FOR X AND Y
## SOURCES
## https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.bar.html
def BAR_GRAPH(self):
PLT.xlabel('NAME')
PLT.ylabel('TOTAL COST')
PLT.bar(self.Name, self.TotalCost, range(len(DATA)))
PLT.title('The Mutz Nutz Client by Total Cost')
PLT.show()
## CREATE AN INDEX VARIABLE TO DECHIPHER THE
## PRECENTILE RANGES OF THE FLOATING POINT NUMBER
## COMPARED TO MY PREVIOUS ATTEMPTS, THIS MAKES
## IT A LOT EASIER FOR THE PIE FUNCTION TO PLOT
## THE POINTS AS IT IS TRIES TO CONVERT A FLOAT TO
## A STRING
## SOURCES
## https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.pie.html
def PIE_GRAPH(self):
self.GROOM = self.GroomDescription.value_counts()
PLT.pie(self.GROOM, labels=self.GROOM.index, autopct='%1.1f%%')
PLT.title('The Mutz Nutz Grooming Option by Owner', loc="center")
PLT.show()
## USING PYTHON BUILT IN SORTING TUPLE
## I AM ABLE TO SORT THIS LINE GRAPH IN ASCENDING ORDER
## THIS IS TO HIGHLIGHT THE EXPONENTIAL TREND BETWEEN OWNERS
## AND HOW MUCH THEY SPEND ON THEIR ANIMAL
def LINE_GRAPH(self):
SORTED_DATA = sorted(zip(self.Name, self.TotalCost), key=lambda x: x[1])
SORTED_NAME, SORTED_COST = zip(*SORTED_DATA)
PLT.xlabel('NAME')
PLT.ylabel('TOTAL_COST')
PLT.plot(SORTED_NAME, SORTED_COST)
PLT.title('The Mutz Nutz Client by Total Cost (exponetial)')
PLT.show()
## USING MATPLOT SUBPLOTS FUNCTION
## I CAN CREATE SUB-SECTIONS OF THE GRAPH TO HANDLE CERTAIN
## SCHEMA'S SUCH AS THE FIGURE OF THE DONUT AS WELL AS IT'S PROPERTIES
## BOTH OF WHICH ACT AS INDEPENDANT VARIABLES THAT CAN BE USED TO ACCESS
## OTHER METHODS RELATED TO THE API
## SOURCES
## https://matplotlib.org/stable/api/figure_api.html
## https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.gca.html
## https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.gcf.html
##
def DONUT_GRAPH(self):
DONUT_FIGURE, DONUT_PROPERTIES = PLT.subplots()
self.GROOM = self.GroomDescription.value_counts()
DONUT_PROPERTIES.pie(self.GROOM, labels=self.GROOM.index, autopct='%1.1f%%', radius=1.5, wedgeprops=dict(width=0.5, edgecolor='w'))
DONUT_CENTRE = PLT.Circle((0,0),0.0,color='BLACK', fc='WHITE',linewidth=1.25)
DONUT_FIGURE = PLT.gcf()
DONUT_FIGURE.gca().add_artist(DONUT_CENTRE)
PLT.title('The Mutz Nutz Grooming Option by Owner')
PLT.show()
## GENERIC PYTHON INITIALISER SCHEMA
## USED FOR INVOKING THE MAIN METHOD OF THIS ONE SCRIPT SO THAT
## IF THERE ARE ANY OTHER SCRIPS THAT ARE CODEPENDANT ON MAIN
## THEN THERE WON'T BE ANY CONFLICTS WITH RUNTIME EXECUTION
if __name__ == '__main__':
DATA_PLOT = PLOT_DATA()
DATA_PLOT.DONUT_GRAPH()