Add ChatGPT
parent
f6158fc07b
commit
66bd612335
|
@ -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()
|
Loading…
Reference in New Issue