| import streamlit as st | |
| import pandas as pd | |
| import matplotlib.pyplot as plt | |
| import seaborn as sns | |
| import plotly.express as px | |
| def visualize_data(): | |
| st.title("Data Visualization") | |
| if "data" in st.session_state: | |
| df = st.session_state["data"] | |
| chart_type = st.selectbox("Choose Chart Type", [ | |
| "Bar Chart", "Histogram", "Boxplot", "Doughnut Chart", "Pie Chart"]) | |
| columns = df.select_dtypes(include=['number']).columns.tolist() | |
| selected_column = st.selectbox("Select Column", columns) | |
| value_counts = df[selected_column].value_counts() | |
| if chart_type == "Bar Chart": | |
| if len(value_counts) > 20: | |
| st.warning( | |
| "Bar Chart is not suitable for more than 20 unique values. Please select a column with 20 or fewer unique values.") | |
| else: | |
| st.subheader(f"Bar Chart for {selected_column}") | |
| fig, ax = plt.subplots() | |
| df[selected_column].value_counts().plot(kind='bar', ax=ax) | |
| st.pyplot(fig) | |
| elif chart_type == "Histogram": | |
| if len(value_counts) < 10: | |
| st.warning( | |
| "Histogram requires at least 10 unique values to be meaningful. Please select a column with more than 10 unique values.") | |
| else: | |
| st.subheader(f"Histogram for {selected_column}") | |
| fig, ax = plt.subplots() | |
| ax.hist(df[selected_column], bins=20, edgecolor="black") | |
| ax.set_xlabel(selected_column) | |
| ax.set_ylabel('Frequency') | |
| st.pyplot(fig) | |
| elif chart_type == "Boxplot": | |
| if len(value_counts) < 5: | |
| st.warning( | |
| "Boxplot requires at least 5 unique values to show distribution. Please select a column with more than 5 unique values.") | |
| else: | |
| st.subheader(f"Boxplot for {selected_column}") | |
| fig = plt.figure(figsize=(6, 4)) | |
| sns.boxplot(x=df[selected_column]) | |
| st.pyplot(fig) | |
| elif chart_type == "Doughnut Chart": | |
| if len(value_counts) > 5: | |
| st.warning( | |
| "Doughnut Chart is not suitable for more than 5 unique values. Please select a column with 5 or fewer unique values.") | |
| else: | |
| st.subheader(f"Doughnut Chart for {selected_column}") | |
| fig = px.pie(value_counts, names=value_counts.index, | |
| values=value_counts.values, hole=0.3) | |
| st.plotly_chart(fig) | |
| elif chart_type == "Pie Chart": | |
| if len(value_counts) > 5: | |
| st.warning( | |
| "Pie Chart is not suitable for more than 5 unique values. Please select a column with 5 or fewer unique values.") | |
| else: | |
| st.subheader(f"Pie Chart for {selected_column}") | |
| fig = px.pie(value_counts, names=value_counts.index, | |
| values=value_counts.values) | |
| st.plotly_chart(fig) | |
| else: | |
| st.warning("Please upload a dataset first.") | |