diff --git a/ChatGPT b/ChatGPT new file mode 100644 index 0000000..c3beff5 --- /dev/null +++ b/ChatGPT @@ -0,0 +1,146 @@ +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()