الكود ده تطبيق **R Shiny** اسمه "Food Delivery Dashboard". بيرفع ملف (CSV أو Excel) فيه بيانات توصيل طلبات أكل، وبيعمل عليه تحليل ورسومات ونموذج تنبؤ وتجميع (clustering) في أربع تابات. قصدك على التابات اللي في الـ sidebar، فده شرح كل واحدة:
## 1. My Data
بتعرض جدول تفاعلي (DT) فيه البيانات بعد التنضيف. الصفوف اللي فيها `distance_km` سالبة، أو `preparation_time_min` أو `delivery_time_min` صفر أو أقل، بتتشال. وبيتحسب عمود جديد اسمه `Speed` (المسافة ÷ زمن التوصيل)، وبتتحول الأعمدة النصية لـ factors، وبيتعمل `rating_factor` بالنجوم. الجدول فيه scroll وعمود أول ثابت وهيدر ثابت.
## 2. Visualizations
دي أكبر تاب، فيها 12 رسمة:
- **Plot 1:** توزيع زمن التوصيل (histogram).
- **Plot 2:** زمن التوصيل حسب نوع المركبة (boxplot، والنقطة الحمراء هي المتوسط).
- **Plot 3:** زمن التوصيل مقابل تقييم العميل.
- **Plot 4:** توزيع المسافة وزمن التحضير.
- **Plots 5–7:** تحليل السرعة، والمسافة، ومتغيرات تانية (التحضير، خبرة الكوريير، توزيع التقييمات) حسب الطقس والمركبة والزحمة ووقت اليوم.
- **Plot 8:** علاقات بين المتغيرات (scatter plots).
- **Plot 9:** التقييمات حسب الطقس والمركبة ووقت اليوم.
- **Plot 10:** عدد الطلبات حسب الطقس ومستوى الزحمة.
- **Plot 11:** علاقة المسافة بزمن التوصيل مع معامل الارتباط (correlation) وخط الانحدار.
- **Plot 12:** متوسط زمن التوصيل خلال اليوم.
## 3. Decision Tree
- بيعرّف عمود `Late_Delivery`: لو زمن التوصيل أكتر من 50 دقيقة يبقى "Late"، غير كده "On Time".
- بيقسم الداتا 70% تدريب و30% اختبار، وبيدرب شجرة قرار (`rpart`) على المسافة وزمن التحضير والسرعة.
- بيعرض الشجرة نفسها، ودقة النموذج (Accuracy) على بيانات الاختبار، وجدول بأهم الـ features.
- فيه قسم **Test Your Own Predictions**: بتدخل مسافة وزمن تحضير، والتطبيق بيتوقع هل التوصيل هيتأخر ولا لأ. السرعة هنا بتتقدر بافتراض إن زمن السفر = المسافة × 3 دقايق.
## 4. Clustering
- بيستخدم K-means على أربع متغيرات بعد عمل scaling: المسافة وزمن التحضير وزمن التوصيل والسرعة.
- **Elbow Method:** رسمة بتساعدك تختار عدد الـ clusters المناسب.
- **Cluster Visualization:** رسم الـ clusters (هنا ثابتة على 4 clusters).
- **Cluster Statistics:** جدول فيه متوسط المسافة والتحضير والتوصيل والسرعة وعدد الطلبات في كل cluster.
## ملاحظة صغيرة
الشجرة بتتدرب على `Speed`، و`Speed` محسوبة من `delivery_time_min`، وده نفسه اللي بيحدد `Late_Delivery`. يعني فيه نوع من تسريب المعلومة (data leakage) ممكن يخلي الدقة أعلى من الحقيقي. لو عايز، أقدر أساعدك تعدلها.