Skip to content

Commit

Permalink
added horizontal keyword bar chart for job report
Browse files Browse the repository at this point in the history
  • Loading branch information
BAndresen committed Mar 21, 2024
1 parent fb2feb4 commit b5de0e3
Show file tree
Hide file tree
Showing 4 changed files with 72 additions and 12 deletions.
13 changes: 8 additions & 5 deletions toja/controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -170,13 +170,16 @@ def open_report(self):
pie_data = dict(pie_list)
logger.debug(f'pie_dict:{pie_data}')
report.pie_graph.show_pie_chart(report.event_pie_frame, pie_data)
keyword_results = self.keyword_report(start_date.strftime('%Y-%m-%d'), end_date.strftime('%Y-%m-%d'))
report.keyword_graph.show_keyword_chart(report.keyword_graph_frame, keyword_results )

def keyword_report(self):
list_of_jobs = self.model.get_filenames(self.user_id)
def keyword_report(self, start_date: str, end_date: str) -> list:
list_of_jobs = self.model.get_active_filenames_date_range(start_date, end_date, self.user_id)
text = utils.load_job_file(list_of_jobs, self.model.config.job_description_parent)
self.keywords_reports = KeywordExtractor()
self.keywords_reports = self.keywords_reports.extract_keywords(text, num_keywords=10)
self.job_description.keywords = self.extracted_keywords
keywords_reports = KeywordExtractor()
keywords_text = keywords_reports.extract_keywords(text, num_keywords=10)
keywords_reports.keywords = keywords_text
return keywords_text

def set_user(self):
points = 0
Expand Down
20 changes: 17 additions & 3 deletions toja/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -605,9 +605,23 @@ def get_event_total(self, start_date: str, end_date: str, user_id: int) -> list[
GROUP BY status_id
'''
self.cursor.execute(query, (start_date, end_date, user_id))
print(f'start_date: {start_date}')
print(f'end_date: {end_date}')
results = self.cursor.fetchall()
if results:
print(f'results: {results}')
return results

def get_active_filenames_date_range(self, start_date: str, end_date: str, user_id: int) -> list[tuple]:
"""Return list of active filenames.txt for jobs with the last event within date range
Used to generate a text from a range to input into the keyword extractor"""

query = '''
SELECT
job.job_description_file
FROM event
JOIN job USING(job_id)
WHERE event.date >= ? AND event.date <= ?
AND event.user_id = ?
AND event.status_id NOT IN (1, 11, 12)
GROUP BY event.job_id, job.job_description_file;
'''
self.cursor.execute(query, (start_date, end_date, user_id,))
return self.cursor.fetchall()
17 changes: 14 additions & 3 deletions toja/views/report.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import customtkinter
from .theme import Theme
from .visualizations import DayEvent, PieEvent
from .visualizations import DayEvent, PieEvent, KeywordBar


class Report:
Expand All @@ -20,7 +20,7 @@ def __init__(self, root, theme: Theme):
self.main_frame.grid_rowconfigure(0, weight=1)

self.days_vs_event_frame = customtkinter.CTkFrame(self.main_frame, fg_color=self.theme.main_frame)
self.days_vs_event_frame.grid(row=1, column=0, padx=10, pady=10, sticky="nsew")
self.days_vs_event_frame.grid(row=1, column=0, columnspan=2, padx=10, pady=10, sticky="nsew")

self.de_graph = DayEvent()
self.de_graph.bg_color = self.theme.home_frame_background
Expand All @@ -29,10 +29,21 @@ def __init__(self, root, theme: Theme):
self.de_graph.event_colors = self.theme.event_data

self.event_pie_frame = customtkinter.CTkFrame(self.main_frame, fg_color=self.theme.main_frame)
self.event_pie_frame.grid(row=0, column=0, padx=10, pady=10, sticky="nsew")
self.event_pie_frame.grid(row=0, column=1, padx=10, pady=10, sticky="nsew")

self.pie_graph = PieEvent()
self.pie_graph.bg_color = self.theme.home_frame_background
self.pie_graph.face_color = self.theme.listbox_bg
self.pie_graph.text_color = self.theme.text_color
self.pie_graph.event_colors = self.theme.event_data

self.keyword_graph_frame = customtkinter.CTkFrame(self.main_frame, fg_color=self.theme.main_frame)
self.keyword_graph_frame.grid(row=0, column=0, padx=10, pady=10, sticky="nsew")
self.keyword_graph_frame.grid_columnconfigure(0,weight=1)
self.keyword_graph_frame.grid_rowconfigure(0,weight=1)

self.keyword_graph = KeywordBar()
self.keyword_graph.bg_color = self.theme.home_frame_background
self.keyword_graph.face_color = self.theme.listbox_bg
self.keyword_graph.text_color = self.theme.text_color
# self.keyword_graph.event_colors = self.theme.event_data
34 changes: 33 additions & 1 deletion toja/views/visualizations.py
Original file line number Diff line number Diff line change
Expand Up @@ -133,4 +133,36 @@ def label_format(count, pct):

canvas = FigureCanvasTkAgg(fig, master=frame)
canvas.draw()
canvas.get_tk_widget().pack(fill=tk.BOTH, expand=True)
canvas.get_tk_widget().pack(fill=tk.BOTH, expand=True)


class KeywordBar:
def __init__(self):
self.bg_color = ''
self.face_color = ''
self.text_color = ''

def show_keyword_chart(self, frame: customtkinter.CTkFrame, data: list):
fig, ax = plt.subplots(figsize=(4, 3), facecolor=self.bg_color)
ax.set_facecolor(self.face_color)

labels = [item[0] for item in data]
values = [item[1] for item in data]

# Create horizontal bar chart
ax.barh(labels, values, color='skyblue')

# Set axis labels and title
ax.set_title('Top Keywords')

# Invert y-axis to display categories from top to bottom
ax.invert_yaxis()
ax.tick_params(axis='both', which='major', labelsize=10)

# Adjust layout
plt.subplots_adjust(left=0.15, right=0.9)

# Draw canvas on tkinter frame
canvas = FigureCanvasTkAgg(fig, master=frame)
canvas.draw()
canvas.get_tk_widget().pack(fill=tk.BOTH, expand=True)

0 comments on commit b5de0e3

Please sign in to comment.