vccs
Vue 3용 차트 컴포넌트 모음, Recharts에서 포팅
데이터 정제·EDA·인사이트·ML 예측·BigQuery SQL·대시보드까지 포함한 종합 영업 분석 프로젝트
End-to-end sales analytics project: data cleaning, EDA, insights, ML forecast, BigQuery SQL and an interactive dashboard that also analyzes your own CSV or Excel file in the browser.
데이터JavaScript · PythonGitHub @Maram-Almutairi온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Sales analytics project: data cleaning, EDA, insights, ML forecast, BigQuery SQL and an in-browser dashboard that analyzes your own CSV/Excel files
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗مشروع تحليل بيانات كامل لملف مبيعات Kafaat.csv:
تنظيف ← تحليل استكشافي ← رسوم بيانية ← نموذج توقع ← لوحة تفاعلية ← نسخة سحابية على BigQuery و Looker Studio.
| المؤشر | القيمة |
|---|---|
| الفترة | 2004-06-17 → 2006-06-16 |
| الصفقات (بعد التنظيف) | 1,992 من 1,998 |
| إجمالي المبيعات | 10,035,789 ريال |
| إجمالي الربح | 3,766,212 ريال |
| هامش الربح | 37.5% |
الرؤى والتوصيات الكاملة في output/insights.md.
🔗 maram-almutairi.github.io/kafaat-sales-analytics
صفحة المشروع باللغة الإنجليزية وبنفس تصميم البورتفوليو، وفيها:
01_clean.py ويظهر تقرير بالصفوف المحذوفة.الصفحة ملف ثابت (index.html + site/)، بدون مكتبات خارجية: الرسوم مكتوبة بـ JavaScript، ومكتبة قراءة Excel (SheetJS 0.20.3) محفوظة داخل الـ repo.
| # | المرحلة | الملف | المخرجات |
|---|---|---|---|
| 1 | تنظيف البيانات | scripts/01_clean.py | data/Kafaat_Cleaned.csv, output/cleaning_report.md |
| 2 | التحليل الاستكشافي | scripts/02_eda.py | output/*_summary.csv, monthly_trend.csv, margin_tiers.csv |
| 3 | الرسوم البيانية | scripts/03_visualization.py | output/figures/*.png |
| 4 | نموذج التوقع | scripts/04_ml_model.py | output/ml_*.csv, 07_feature_importance.png |
| 5 | لوحة المعلومات | dashboard/app.py | تطبيق Streamlit |
| 6 | السحابة | sql/*.sql | جداول BigQuery + Looker Studio |
Kafaat_Cleaned.csv "بدون إضافة أعمدة"، والمتطلبات تطلب إضافة Profit و Margin_% و Year و Month و Weekday.
⇐ الملف النظيف يحتفظ بالأعمدة السبعة الأصلية فقط، والأعمدة المشتقة تُحسب في scripts/utils.py → load_clean() (وفي BigQuery عبر view v_sales) حتى يحسبها الجميع بنفس الطريقة.Mjeeed ⇐ Mjeed و Lulu Hyper ⇐ Lulu (صُححت ولم تُحذف).scripts/utils.py (دوال مشتركة)، store_summary.csv، margin_tiers.csv، city_product_matrix.csv، ورسم مستويات الهامش، لأن مستويات الهامش الثابتة هي أهم اكتشاف في البيانات.kafaat/
├── data/
│ ├── Kafaat.csv الملف الأصلي
│ └── Kafaat_Cleaned.csv الملف النظيف (7 أعمدة، التاريخ بصيغة YYYY-MM-DD)
├── scripts/
│ ├── utils.py قواعد التنظيف clean_raw() + load_clean() + summarize()
│ ├── 01_clean.py التنظيف + تقرير الصفوف المحذوفة (القواعد في utils.clean_raw)
│ ├── 02_eda.py التحليل الاستكشافي + الجداول الملخصة
│ ├── 03_visualization.py 6 رسوم بيانية
│ └── 04_ml_model.py Linear Regression + Random Forest
├── sql/
│ ├── 01_create_table.sql الجدول الخام + الجدول النظيف + view التحليل
│ ├── 02_eda_queries.sql استعلامات التحليل
│ └── 03_advanced_queries.sql Window Functions + BigQuery ML
├── dashboard/
│ └── app.py Streamlit Dashboard (نسخة Python محلية)
├── output/
│ ├── city_summary.csv rep_summary.csv store_summary.csv product_summary.csv
│ ├── monthly_trend.csv margin_tiers.csv city_product_matrix.csv
│ ├── ml_metrics.csv ml_feature_importance.csv ml_forecast.csv
│ ├── cleaning_report.md eda_log.txt
│ ├── insights.md الرؤى والتوصيات
│ └── figures/ 01..07 *.png
├── index.html صفحة GitHub Pages
├── site/ style.css + app.js + vendor/xlsx.full.min.js + logo.png
├── README.md
└── requirements.txt
python -m venv .venv
.venv\Scripts\activate # Windows (Linux/Mac: source .venv/bin/activate)
pip install -r requirements.txt
python scripts/01_clean.py
python scripts/02_eda.py
python scripts/03_visualization.py
python scripts/04_ml_model.py
streamlit run dashboard/app.py # http://localhost:8501
الترتيب مهم، لأن كل خطوة تقرأ مخرجات الخطوة التي قبلها.
| الخطوة | المحذوف | السبب |
|---|---|---|
| Cost أو Sale فارغ | 2 | قيمة فارغة / مسافات فقط |
| قيم شاذة | 1 | Cost = 50,000,000 (خارج Q3 + 3×IQR) |
| تواريخ شاذة | 3 | 2014–2015 بعيدة 8 سنوات عن باقي البيانات |
| مكررات | 0 | — |
| المجموع | 6 (0.3%) |
Excel serial → 1899-12-30 + n يوم.output/cleaning_report.md.| البُعد | الأعلى مبيعاً | الأعلى ربحاً / هامشاً | الأضعف |
|---|---|---|---|
| المدينة | الدمام 1.86M | الرياض 709K (39.6%) | حائل 1.47M |
| المندوب | Yahia 2.17M | Ghalia هامش 38.6% | Abdul 1.82M (36.5%) |
| المتجر | كارفور 2.62M | بنده هامش 38.4% | كارفور أقل هامش 36.8% |
| المنتج | Food 2.68M | Office هامش 38.1% | Home 2.30M |
أنشئ مشروعاً في Google Cloud Console وفعّل BigQuery API.
ثبّت Google Cloud CLI ثم:
gcloud auth login
gcloud config set project <PROJECT_ID>
أنشئ الـ dataset والجدول الخام (أول جزأين من sql/01_create_table.sql):
bq mk --location=US kafaat
ارفع الملف الأصلي كما هو (كل الأعمدة STRING، والتنظيف يتم داخل BigQuery):
bq load --source_format=CSV --skip_leading_rows=1 --replace \
kafaat.sales_raw data/Kafaat.csv \
Date:STRING,City:STRING,Rep:STRING,Store:STRING,Prod:STRING,Cost:STRING,Sale:STRING
نفّذ باقي sql/01_create_table.sql في BigQuery Console. ينتج عنه:
kafaat.sales_clean: جدول نظيف مقسّم (partitioned) بالشهر ومجمّع (clustered) بالمدينة والمنتجkafaat.v_sales: view فيه Profit و Margin_Pct و Year و Month و Weekdayاستعلام التدقيق في آخر الملف يجب أن يعطي rows_clean = 1992.
نفّذ sql/02_eda_queries.sql و sql/03_advanced_queries.sql. الاستعلام 9 في الملف الأخير يدرّب نموذج BigQuery ML ARIMA_PLUS للتوقع داخل السحابة.
kafaat ← v_sales.Margin % = SUM(Profit) / SUM(Sale) (النوع Percent)Low-margin deals % = SUM(CASE WHEN Margin_Pct < 15 THEN 1 ELSE 0 END) / COUNT(Sale)sales_raw ثم أعد إنشاء sales_clean عبر Scheduled query في BigQuery (مثلاً يومياً).| الطريقة | الوصف |
|---|---|
| GitHub Pages (المستخدَم حالياً) | Settings ← Pages ← Source = Deploy from a branch، Branch = main / (root). أي git push جديد يحدّث الموقع خلال دقيقة. |
| Streamlit (محلياً) | streamlit run dashboard/app.py: نسخة Python من اللوحة بنفس قواعد التنظيف. |
| Looker Studio | القسم 6 أعلاه: بدون كود، ويُشارك برابط. |
pandas, numpy, matplotlib, seaborn, scikit-learn, streamlit, plotly. التفاصيل في requirements.txt (تم الاختبار على Python 3.12).