Excel / app.py
ec7719's picture
Update app.py
ccd1071
import streamlit as st
import pandas as pd
import math
import matplotlib.pyplot as plt
# Function to read different file types
def read_file(file):
file_extension = file.name.split(".")[-1]
if file_extension == "csv":
data = pd.read_csv(file)
elif file_extension == "xlsx":
data = pd.read_excel(file, engine="openpyxl")
else:
st.error("Unsupported file format. Please upload a CSV or Excel file.")
return None
return data
# Function to display the uploaded data
def display_data(data):
st.write("### Data Preview")
st.dataframe(data.head())
# Function to perform mathematical calculations and store results as separate columns
def perform_calculations(data):
st.write("### Calculations")
# Get column names
columns = data.columns
# Iterate over each column and perform calculations
for column in columns:
st.write("Calculations for column:", column)
# Example calculations: sum, mean, median
column_sum = data[column].sum()
column_mean = data[column].mean()
column_median = data[column].median()
# Create new column names
sum_column_name = f"{column}_sum"
mean_column_name = f"{column}_mean"
median_column_name = f"{column}_median"
# Add the calculated values as new columns
data[sum_column_name] = column_sum
data[mean_column_name] = column_mean
data[median_column_name] = column_median
# Display the calculated values
st.write("Sum:", column_sum)
st.write("Mean:", column_mean)
st.write("Median:", column_median)
# Display the updated data with calculated columns
st.write("### Updated Data")
st.dataframe(data)
# Function to perform mathematical calculations
def perform_math(df, selected_columns, operation):
result = None
if operation == "sqrt":
result = df[selected_columns].applymap(math.sqrt)
elif operation == "log":
result = df[selected_columns].applymap(math.log)
elif operation == "exp":
result = df[selected_columns].applymap(math.exp)
elif operation == "sin":
result = df[selected_columns].applymap(math.sin)
elif operation == "cos":
result = df[selected_columns].applymap(math.cos)
elif operation == "tan":
result = df[selected_columns].applymap(math.tan)
elif operation == "multiply":
result = df[selected_columns].prod(axis=1)
elif operation == "add":
result = df[selected_columns].sum(axis=1)
elif operation == "subtract":
result = df[selected_columns[0]] - df[selected_columns[1]]
if result is not None:
df[f"{operation}_result"] = result
return df
def plot_graph(data, graph_type, x_variables, y_variables):
plt.figure(figsize=(8, 6))
for x_var in x_variables:
for y_var in y_variables:
if graph_type == "Scatter":
plt.scatter(data[x_var], data[y_var], label=f"{x_var} vs {y_var}")
elif graph_type == "Line":
plt.plot(data[x_var], data[y_var], label=f"{x_var} vs {y_var}")
st.pyplot()
elif graph_type == "Bar":
x = range(len(data))
plt.bar(x, data[y_var], label=y_var)
plt.xlabel("X Values")
plt.ylabel("Y Values")
plt.title(f"{graph_type} Plot")
plt.legend()
st.pyplot()
def main():
st.title("Excel-like Data Visualization and Calculations")
st.write("Upload a CSV or Excel file and visualize the data")
file = st.file_uploader("Upload file", type=["csv", "xlsx"])
if file is not None:
data = read_file(file)
if data is not None:
display_data(data)
perform_calculations(data)
st.write("### Graph Visualizer")
st.write("Select variables for visualization:")
graph_type = st.selectbox("Graph Type", options=["Scatter", "Line", "Bar"])
x_variables = st.multiselect("X Variables", options=data.columns)
y_variables = st.multiselect("Y Variables", options=data.columns)
selected_columns = st.multiselect("Select columns:", options=data.columns)
operation = st.selectbox("Select an operation:", ["sqrt", "log", "exp", "sin", "cos", "tan", "multiply", "add", "subtract"])
if st.button("Calculate"):
data = perform_math(data, selected_columns, operation)
st.write(data)
if st.button("Plot"):
plot_graph(data, graph_type, x_variables, y_variables)
if __name__ == "__main__":
st.set_page_config(page_title="My Analytics App")
main()