Python_Venn_1.0 / app.py
amitbehura's picture
Update app.py
cf42baa verified
import gradio as gr
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib_venn import venn2, venn3
def make_venn(file):
try:
# Load CSV
df = pd.read_csv(file.name)
# Drop primary key (first column)
categories = df.columns[1:]
if len(categories) < 2:
return "Error: Need at least 2 category columns!"
if len(categories) > 3:
return "Error: Only up to 3 categories supported!"
# Convert each category column into a set of IDs
sets = [set(df[df[col] == 1].index) for col in categories]
# Plot Venn
plt.figure(figsize=(6,6))
if len(sets) == 2:
venn2(sets, set_labels=categories)
elif len(sets) == 3:
venn3(sets, set_labels=categories)
out_file = "venn.png"
plt.savefig(out_file)
plt.close()
return out_file
except Exception as e:
return f"Error: {e}"
demo = gr.Interface(
fn=make_venn,
inputs=gr.File(file_types=[".csv"], label="Upload CSV"),
outputs=gr.Image(type="filepath", label="Venn Diagram"),
title="Venn Diagram Generator",
description="Upload a CSV with a primary key column + up to 3 category columns (binary flags: 0/1)."
)
if __name__ == "__main__":
demo.launch()