CSV_file / app.py
mehdi364's picture
Update app.py
ea00b79 verified
import streamlit as st
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# تنظیمات اولیه استریم لیت
st.set_page_config(page_title="مرکز آموزش", page_icon="🎓", layout="wide")
st.title("📊 مرکز آموزش")
st.write("""
این برنامه به شما کمک می‌کند تا داده‌های ثبت‌نام هنرجو و کلاس‌های آموزش را تجزیه و تحلیل کرده و داشبوردی برای نمایش آن‌ها ارائه دهید.
لطفا فایل CSV داده‌های خود را آپلود کنید.
""")
# آپلود فایل CSV
uploaded_file = st.file_uploader("انتخاب فایل CSV", type=["csv"])
if uploaded_file:
# خواندن داده‌های CSV
df = pd.read_csv(uploaded_file, delimiter='؛')
# تغییر نام ستون‌ها به نام‌های معنی‌دار
df.rename(columns={
'Table1_Cell1': 'تاریخ کلاس',
'Table1_Cell2': 'شهریه',
'Table1_Cell3': 'تعداد جلسات',
'Table1_Cell4': 'استاد',
'Table1_Cell5': 'نام کلاس',
'Table1_Cell6': 'تحصیلات',
'Table1_Cell7': 'جنسیت',
'Table1_Cell8': 'کد ملی',
'Table1_Cell9': 'نام پدر',
'Table1_Cell10': 'نام خانوادگی',
'Table1_Cell11': 'نام هنرجو'
}, inplace=True)
# پاکسازی نام ستون‌ها از فضاهای اضافی
df.columns = df.columns.str.strip()
# نمایش داده‌ها
st.subheader("نمایش داده‌ها")
st.write("پیش‌نمایش داده‌های آپلود شده:")
st.dataframe(df.head())
st.write("نام ستون‌های موجود در فایل:")
st.write(df.columns)
# نمودار تعداد هنرجویان بر اساس نام کلاس
st.subheader("تعداد هنرجویان بر اساس کلاس")
student_count_per_class = df.groupby('نام کلاس')['نام هنرجو'].count().reset_index()
plt.figure(figsize=(10, 6))
sns.barplot(x='نام کلاس', y='نام هنرجو', data=student_count_per_class)
plt.xticks(rotation=45)
plt.title('تعداد هنرجویان بر اساس کلاس')
plt.xlabel('نام کلاس')
plt.ylabel('تعداد هنرجویان')
st.pyplot(plt)
# نمودار توزیع جنسیت
st.subheader("توزیع جنسیت")
gender_distribution = df['جنسیت'].value_counts().reset_index()
gender_distribution.columns = ['جنسیت', 'تعداد']
plt.figure(figsize=(8, 5))
sns.barplot(x='جنسیت', y='تعداد', data=gender_distribution)
plt.title('توزیع جنسیت')
st.pyplot(plt)
# نمودار شهریه بر اساس تعداد جلسات
st.subheader("نمودار شهریه بر اساس تعداد جلسات")
plt.figure(figsize=(10, 6))
sns.scatterplot(data=df, x='تعداد جلسات', y='شهریه')
plt.title('توزیع شهریه بر اساس تعداد جلسات')
plt.xlabel('تعداد جلسات')
plt.ylabel('شهریه')
st.pyplot(plt)
else:
st.info("لطفا یک فایل CSV برای ادامه آپلود کنید.")