import tkinter as tk
from tkinter import filedialog, messagebox , scrolledtext
import pandas as pd
df = None # Global
root = tk.Tk()
root.title("Data Analysis using Python Tkinter")
root.geometry("600x600")
file upload dialog and button
def upload_file():
global df
filepath = filedialog.askopenfilename(
title="Select a file",
filetypes = (
("Excel files " , "*.xlsx; *.xls"),
("CSV Files", "*.csv") ## to accept only excel and csv files
,)
)
if filepath:
try:
if filepath.endswith(".csv"):
df=pd.read_csv(filepath)
else:
df=pd.read_excel(filepath)
label.configure(text=f"Selected file successfully : \n{filepath}\n Rows: {df.shape[0]}|Columns: {df.shape[1]}")
btn_check_missing.configure(state="normal")
btn_fill_null.configure(state="normal")
btn_drop_null.configure(state="normal")
btn_RD.configure(state="normal")
btn_RC.configure(state="normal")
except Exception as e:
messagebox.showerror("Error",f"Could not Load file: \n{e}")
else:
label.configure(text="No file selected")
def check_missing():
if df is not None:
result = df.isnull().sum().to_string()
text_box.delete(1.0, tk.END)
text_box.insert(tk.END , "Missing Values \n")
text_box.insert(tk.END,result)
else:
messagebox.showwarning("warning","Please Upload a file first")
def fn():
global df
if df is not None:
df = df.fillna(0)
text_box.delete(1.0, tk.END)
text_box.insert(tk.END , "all Missing Values have been replaced \n")
text_box.insert(tk.END,f"Rows: {df.shape[0]} | Columns {df.shape[1]}")
else:
messagebox.showwarning("warning","Please Upload a file first")
def dn():
global df
if df is not None:
before = df.shape
df = df.dropna()
after = df.shape
text_box.delete(1.0, tk.END)
text_box.insert(tk.END , "all Missing Values have been Removed \n")
text_box.insert(tk.END,f"Before Rows: {before[0]} | Columns {before[1]}\n")
text_box.insert(tk.END,f"After Rows: {after[0]} | Columns {after[1]}")
else:
messagebox.showwarning("warning","Please Upload a file first")
def RD():
global df
if df is not None:
before = df.shape
df = df.drop_duplicates()
after = df.shape
text_box.delete(1.0, tk.END)
text_box.insert(tk.END , "all Duplicate Values have been Removed \n")
text_box.insert(tk.END,f"Before Rows: {before[0]} | Columns {before[1]}\n")
text_box.insert(tk.END,f"After Rows: {after[0]} | Columns {after[1]}")
else:
messagebox.showwarning("warning","Please Upload a file first")
def RC():
global df
if df is not None:
before = list(df.columns)
df.columns = df.columns.str.strip().str.lower()
after = list(df.columns)
text_box.delete(1.0, tk.END)
text_box.insert(tk.END , "Column Names reformed \n")
text_box.insert(tk.END,f"Before {before}\n")
text_box.insert(tk.END,f"After {after} \n")
else:
messagebox.showwarning("warning","Please Upload a file first")
btn = tk.Button(root, text = "Upload file" , command=upload_file,padx=10,pady=10)
btn.pack(pady=20)
label = tk.Label(root,text="No file selected", wraplength=350,justify="center")
label.pack(pady =10)
Oframe = tk.Frame()
Oframe.pack()
OLabel = tk.Label (Oframe , text = "Operations").grid(row=0,column=0)
btn_check_missing = tk.Button(Oframe , text = "Check Missing Values" , command=check_missing , state="disabled")
btn_check_missing.grid(row=1,column=0)
btn_fill_null = tk.Button(Oframe , text = "Fill null Values" , command=fn , state="disabled")
btn_fill_null.grid(row=1,column=1)
btn_drop_null = tk.Button(Oframe , text = "drop null Values" , command=dn , state="disabled")
btn_drop_null.grid(row=1,column=2)
btn_RD = tk.Button(Oframe , text = "Remove Duplicates" , command=RD , state="disabled")
btn_RD.grid(row=1,column=3)
btn_RC = tk.Button(Oframe , text = "Rename columns" , command=RC , state="disabled")
btn_RC.grid(row=1,column=4)
Aframe = tk.Frame()
Aframe.pack()
ALabel = tk.Label (Aframe , text = "Analysis").grid(row=0,column=0)
Dframe = tk.Frame()
Dframe.pack()
DLabel = tk.Label (Dframe , text = "Data Visualization").grid(row=0,column=0)
text_box = scrolledtext.ScrolledText(root, width=70 , height=15, wrap=tk.WORD)
text_box.pack(pady=10)
root.mainloop()
Информация по комментариям в разработке