import csv import matplotlib.pyplot as plt from datetime import datetime import tkinter as tk from tkinter import filedialog, ttk, messagebox # Глобальная переменная для хранения данных data = [] # Функция для загрузки CSV файла def load_csv(): global data filepath = filedialog.askopenfilename(filetypes=[("CSV files", "*.csv")]) if filepath: data = [] try: with open(filepath, newline='', encoding='utf-8') as csvfile: reader = csv.DictReader(csvfile) for row in reader: row['Datums'] = datetime.strptime(row['Datums'], '%Y-%m-%d') row['Ieņēmumi'] = float(row['Ieņēmumi']) row['Izdevumi'] = float(row['Izdevumi']) data.append(row) display_data() except Exception as e: messagebox.showerror("Kļūda", f"Nevar nolasīt failu: {e}") else: messagebox.showerror("Kļūda", "Netika izvēlēts fails.") # Функция для отображения данных в таблице и обновления выпадающего списка def display_data(): # Очистка таблицы и выпадающего списка for row in table.get_children(): table.delete(row) categories = set() # Добавление данных в таблицу for row in data: table.insert("", "end", values=(row["Datums"].strftime('%Y-%m-%d'), row["Kategorija"], row["Ieņēmumi"], row["Izdevumi"], row["Komentārs"])) categories.add(row["Kategorija"]) # Обновление выпадающего списка категорий category_combo["values"] = list(categories) if categories: category_combo.current(0) # Функция для анализа данных по выбранной категории def analyze_data(): selected_category = category_combo.get() category_data = [row for row in data if row["Kategorija"] == selected_category] if not category_data: messagebox.showinfo("Rezultāti", "Nav datu šai kategorijai.") return # Анализ данных avg_income = sum(row["Ieņēmumi"] for row in category_data) / len(category_data) avg_expense = sum(row["Izdevumi"] for row in category_data) / len(category_data) max_income = max(row["Ieņēmumi"] for row in category_data) min_income = min(row["Ieņēmumi"] for row in category_data) max_expense = max(row["Izdevumi"] for row in category_data) min_expense = min(row["Izdevumi"] for row in category_data) total_income = sum(row["Ieņēmumi"] for row in category_data) total_expense = sum(row["Izdevumi"] for row in category_data) # Отображение результатов analysis_result = ( f"Vidējie ieņēmumi: {avg_income:.2f}\n" f"Vidējie izdevumi: {avg_expense:.2f}\n" f"Maksimālie ieņēmumi: {max_income}\n" f"Minimālie ieņēmumi: {min_income}\n" f"Maksimālie izdevumi: {max_expense}\n" f"Minimālie izdevumi: {min_expense}\n" f"Kopējie ieņēmumi: {total_income}\n" f"Kopējie izdevumi: {total_expense}" ) messagebox.showinfo("Analīzes rezultāti", analysis_result) # Функция для построения графика по выбранной категории def plot_data(): selected_category = category_combo.get() category_data = [row for row in data if row["Kategorija"] == selected_category] if not category_data: messagebox.showinfo("Grafiks", "Nav datu šai kategorijai.") return # Группировка данных по годам yearly_data = {} for row in category_data: year = row["Datums"].year if year not in yearly_data: yearly_data[year] = {"Ieņēmumi": 0, "Izdevumi": 0} yearly_data[year]["Ieņēmumi"] += row["Ieņēmumi"] yearly_data[year]["Izdevumi"] += row["Izdevumi"] # Подготовка данных для графика years = sorted(yearly_data.keys()) income = [yearly_data[year]["Ieņēmumi"] for year in years] expense = [yearly_data[year]["Izdevumi"] for year in years] # Построение графика plt.figure(figsize=(10, 6)) plt.plot(years, income, label="Ieņēmumi", color="green", marker="o") plt.plot(years, expense, label="Izdevumi", color="red", marker="o") plt.title(f"{selected_category} - Ieņēmumi un izdevumi pa gadiem") plt.xlabel("Gads") plt.ylabel("Summa") plt.legend() plt.grid(True) plt.show() # Создание интерфейса root = tk.Tk() root.title("Finanšu datu analīze pēc kategorijām") # Таблица для отображения данных table = ttk.Treeview(root, columns=("Datums", "Kategorija", "Ieņēmumi", "Izdevumi", "Komentārs"), show="headings") table.heading("Datums", text="Datums") table.heading("Kategorija", text="Kategorija") table.heading("Ieņēmumi", text="Ieņēmumi") table.heading("Izdevumi", text="Izdevumi") table.heading("Komentārs", text="Komentārs") table.pack() # Кнопка для загрузки файла load_button = tk.Button(root, text="Ielādēt failu", command=load_csv) load_button.pack() # Метка и выпадающий список для выбора категории category_label = tk.Label(root, text="Izvēlieties kategoriju:") category_label.pack() category_combo = ttk.Combobox(root) category_combo.pack() # Кнопка для анализа данных analyze_button = tk.Button(root, text="Analizēt", command=analyze_data) analyze_button.pack() # Кнопка для построения графика plot_button = tk.Button(root, text="Zīmēt grafiku", command=plot_data) plot_button.pack() # Запуск главного цикла root.mainloop()