אחרי שלמדתם על רכבים מחוברים ואוטונומיים, הגיע הזמן לעבוד עם הנתונים האמיתיים! בסדנה זו תלמדו לנתח נתוני תחבורה חכמה עם Python, לעבד מידע מחיישנים, לבנות מודלים חיזויים וליצור דשבורדים אינטראקטיביים. זוהי הזדמנות להפוך את הידע התיאורטי למיומנויות מעשיות שתוכלו להשתמש בהן בעולם האמיתי.
# התקנת ספריות עיבוד נתונים
pip install pandas numpy matplotlib seaborn
# התקנת ספריות למידת מכונה
pip install scikit-learn
# התקנת ספריות ויזואליזציה אינטראקטיבית
pip install plotly dash
# התקנת Jupyter Notebook
pip install jupyter notebook
# התקנת ספריות גיאוגרפיות (אופציונלי)
pip install folium geopandas
# הרצת Jupyter Notebook
jupyter notebook
# או הרצת JupyterLab (מומלץ)
pip install jupyterlab
jupyter lab
עיבוד וניתוח נתוני תנועה אמיתיים עם Pandas ו-NumPy.
יצירת ויזואליזציות מתקדמות עם Matplotlib, Seaborn ו-Plotly.
בניית מודלים חיזויים לדפוסי תנועה עם Scikit-learn.
פיתוח דשבורד אינטראקטיבי לניטור תחבורה בזמן אמת.
נתחיל בטעינת נתוני תחבורה אמיתיים ונבין את המבנה שלהם. הנתונים כוללים מידע על תנועה, חיישנים ומזג אוויר.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from datetime import datetime, timedelta
import warnings
warnings.filterwarnings('ignore')
# הגדרת עיצוב גרפים בעברית
plt.rcParams['font.family'] = ['Arial Unicode MS', 'Tahoma']
sns.set_style("whitegrid")
# הגדרת גודל ברירת מחדל לגרפים
plt.rcParams['figure.figsize'] = [12, 8]
plt.rcParams['font.size'] = 10
# טעינת נתוני תנועה מקבצי CSV
traffic_data = pd.read_csv('traffic_sensors.csv')
weather_data = pd.read_csv('weather_conditions.csv')
vehicle_data = pd.read_csv('connected_vehicles.csv')
# הצגת מידע בסיסי על הנתונים
print("📈 מבנה נתוני התנועה:")
print(f"מספר שורות: {len(traffic_data):,}")
print(f"מספר עמודות: {len(traffic_data.columns)}")
print("\n🔍 עמודות בנתונים:")
print(traffic_data.columns.tolist())
# הצגת דוגמה מהנתונים
print("\n📋 דוגמה מהנתונים:")
print(traffic_data.head())
# בדיקה מפורטת של מבנה הנתונים
print("📋 מידע כללי על הנתונים:")
print(traffic_data.info())
print("\n📊 סטטיסטיקות בסיסיות:")
print(traffic_data.describe())
# בדיקת ערכים חסרים
print("\n🔍 בדיקת ערכים חסרים:")
missing_data = traffic_data.isnull().sum()
missing_percentage = (missing_data / len(traffic_data)) * 100
missing_df = pd.DataFrame({
'עמודה': missing_data.index,
'ערכים חסרים': missing_data.values,
'אחוז חסר': missing_percentage.values
})
# הצגת רק עמודות עם ערכים חסרים
missing_df_filtered = missing_df[missing_df['ערכים חסרים'] > 0]
if len(missing_df_filtered) > 0:
print(missing_df_filtered)
else:
print("✅ אין ערכים חסרים בנתונים!")
# בדיקת ערכים כפולים
duplicates = traffic_data.duplicated().sum()
print(f"\n🔄 מספר שורות כפולות: {duplicates}")
תמיד התחילו בחקירה ראשונית של הנתונים. זה עוזר לזהות בעיות איכות נתונים, ערכים חסרים ודפוסים ראשוניים שיכולים להשפיע על הניתוח.
# המרת עמודת הזמן לפורמט datetime
traffic_data['timestamp'] = pd.to_datetime(traffic_data['timestamp'])
# יצירת עמודות זמן נוספות לניתוח מתקדם
traffic_data['hour'] = traffic_data['timestamp'].dt.hour
traffic_data['day_of_week'] = traffic_data['timestamp'].dt.dayofweek
traffic_data['month'] = traffic_data['timestamp'].dt.month
traffic_data['day_name'] = traffic_data['timestamp'].dt.day_name()
# יצירת עמודת שעות שיא (בוליאנית)
rush_hours = [7, 8, 9, 17, 18, 19]
traffic_data['is_rush_hour'] = traffic_data['hour'].isin(rush_hours)
print("✅ עמודות זמן נוצרו בהצלחה!")
print(f"📅 טווח תאריכים: {traffic_data['timestamp'].min()} עד {traffic_data['timestamp'].max()}")
# טיפול בערכים חסרים - שיטות שונות לעמודות שונות
traffic_data['avg_speed'].fillna(traffic_data['avg_speed'].median(), inplace=True)
traffic_data['temperature'].fillna(traffic_data['temperature'].mean(), inplace=True)
traffic_data['humidity'].fillna(traffic_data['humidity'].mean(), inplace=True)
def remove_outliers(df, column, method='IQR'):
"""
הסרת ערכים חריגים באמצעות שיטת IQR (Interquartile Range)
"""
if method == 'IQR':
Q1 = df[column].quantile(0.25)
Q3 = df[column].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
return df[(df[column] >= lower_bound) & (df[column] <= upper_bound)]
elif method == 'zscore':
from scipy import stats
z_scores = np.abs(stats.zscore(df[column]))
return df[z_scores < 3]
# הסרת ערכים חריגים במהירות ובצפיפות
original_size = len(traffic_data)
clean_data = remove_outliers(traffic_data, 'avg_speed')
clean_data = remove_outliers(clean_data, 'traffic_density')
clean_data = remove_outliers(clean_data, 'vehicle_count')
removed_rows = original_size - len(clean_data)
removal_percentage = (removed_rows / original_size) * 100
print(f"📊 נתונים לפני ניקוי: {original_size:,} שורות")
print(f"📊 נתונים אחרי ניקוי: {len(clean_data):,} שורות")
print(f"🗑️ הוסרו: {removed_rows:,} שורות ({removal_percentage:.1f}%)")
# יצירת figure עם מספר subplots
fig, axes = plt.subplots(2, 2, figsize=(15, 12))
fig.suptitle('ניתוח ראשוני של נתוני תחבורה', fontsize=16, fontweight='bold')
# 1. התפלגות מהירות ממוצעת
axes[0,0].hist(clean_data['avg_speed'], bins=50, alpha=0.7, color='skyblue', edgecolor='black')
axes[0,0].set_title('התפלגות מהירות ממוצעת')
axes[0,0].set_xlabel('מהירות (קמ"ש)')
axes[0,0].set_ylabel('תדירות')
axes[0,0].grid(True, alpha=0.3)
# 2. צפיפות תנועה לפי שעות היום
hourly_density = clean_data.groupby('hour')['traffic_density'].mean()
axes[0,1].plot(hourly_density.index, hourly_density.values, marker='o', linewidth=3, color='red', markersize=8)
axes[0,1].set_title('צפיפות תנועה ממוצעת לפי שעה')
axes[0,1].set_xlabel('שעה ביום')
axes[0,1].set_ylabel('צפיפות תנועה')
axes[0,1].grid(True, alpha=0.3)
# 3. מספר רכבים לפי יום בשבוע
daily_vehicles = clean_data.groupby('day_of_week')['vehicle_count'].mean()
days = ['ראשון', 'שני', 'שלישי', 'רביעי', 'חמישי', 'שישי', 'שבת']
bars = axes[1,0].bar(range(7), daily_vehicles.values, color='lightgreen', alpha=0.8, edgecolor='darkgreen')
axes[1,0].set_title('מספר רכבים ממוצע לפי יום בשבוע')
axes[1,0].set_xlabel('יום בשבוע')
axes[1,0].set_ylabel('מספר רכבים')
axes[1,0].set_xticks(range(7))
axes[1,0].set_xticklabels(days, rotation=45)
# 4. קשר בין טמפרטורה לצפיפות תנועה
scatter = axes[1,1].scatter(clean_data['temperature'], clean_data['traffic_density'], alpha=0.5, color='orange', s=10)
axes[1,1].set_title('קשר בין טמפרטורה לצפיפות תנועה')
axes[1,1].set_xlabel('טמפרטורה (°C)')
axes[1,1].set_ylabel('צפיפות תנועה')
plt.tight_layout()
plt.show()
# הדפסת סטטיסטיקות מעניינות
print("📊 תובנות מהגרפים:")
print(f"🚗 מהירות ממוצעת: {clean_data['avg_speed'].mean():.1f} קמ\"ש")
print(f"⏰ שעת השיא: {hourly_density.idxmax()}:00")
print(f"📅 יום העמוס ביותר: {days[daily_vehicles.idxmax()]}")
# יצירת heatmap של מתאמים
plt.figure(figsize=(12, 8))
# בחירת עמודות נומריות למתאם
numeric_columns = ['vehicle_count', 'avg_speed', 'traffic_density',
'temperature', 'humidity', 'hour', 'day_of_week']
correlation_matrix = clean_data[numeric_columns].corr()
# יצירת heatmap מתקדמת
mask = np.triu(np.ones_like(correlation_matrix, dtype=bool))
heatmap = sns.heatmap(correlation_matrix, mask=mask, annot=True,
cmap='RdYlBu_r', center=0, square=True, fmt='.2f',
cbar_kws={'label': 'מקדם מתאם'}, linewidths=0.5)
plt.title('מטריצת מתאמים - נתוני תחבורה', fontsize=14, fontweight='bold', pad=20)
plt.tight_layout()
plt.show()
# הדפסת המתאמים החזקים ביותר
corr_pairs = correlation_matrix.unstack().sort_values(ascending=False)
strong_correlations = corr_pairs[(abs(corr_pairs) > 0.5) & (abs(corr_pairs) < 1.0)]
print("🔗 המתאמים החזקים ביותר:")
for pair, corr in strong_correlations.head(5).items():
print(f" {pair[0]} ↔ {pair[1]}: {corr:.3f}")
# ניתוח דפוסי תנועה לפי שעות שיא
fig, axes = plt.subplots(1, 2, figsize=(16, 6))
# יצירת boxplot לצפיפות תנועה בשעות שיא vs רגילות
sns.boxplot(data=clean_data, x='is_rush_hour', y='traffic_density', palette='Set2', ax=axes[0])
axes[0].set_title('השוואת צפיפות תנועה: שעות שיא vs שעות רגילות')
axes[0].set_xlabel('שעות שיא (False=לא, True=כן)')
axes[0].set_ylabel('צפיפות תנועה')
# violin plot למהירות ממוצעת
sns.violinplot(data=clean_data, x='is_rush_hour', y='avg_speed', palette='viridis', ax=axes[1])
axes[1].set_title('התפלגות מהירות בשעות שיא vs רגילות')
axes[1].set_xlabel('שעות שיא (False=לא, True=כן)')
axes[1].set_ylabel('מהירות ממוצעת (קמ\"ש)')
plt.tight_layout()
plt.show()
# הוספת סטטיסטיקות מפורטות
rush_stats = clean_data.groupby('is_rush_hour').agg({
'traffic_density': ['mean', 'median', 'std', 'min', 'max'],
'avg_speed': ['mean', 'median', 'std'],
'vehicle_count': ['mean', 'median']
})
print("📊 סטטיסטיקות מפורטות לפי שעות שיא:")
print(rush_stats.round(2))
# חישוב אחוזי השינוי
normal_density = clean_data[clean_data['is_rush_hour'] == False]['traffic_density'].mean()
rush_density = clean_data[clean_data['is_rush_hour'] == True]['traffic_density'].mean()
density_increase = ((rush_density - normal_density) / normal_density) * 100
print(f"\n📈 עלייה בצפיפות תנועה בשעות שיא: {density_increase:.1f}%")
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score, mean_absolute_error
from sklearn.preprocessing import StandardScaler, LabelEncoder
# הכנת הנתונים למודל
# בחירת features (משתנים מסבירים)
features = ['hour', 'day_of_week', 'temperature', 'humidity', 'vehicle_count', 'avg_speed', 'rush_hour']
# קידוד משתנים קטגוריאליים
le_road_type = LabelEncoder()
clean_data['road_type_encoded'] = le_road_type.fit_transform(clean_data['road_type'])
features.append('road_type_encoded')
le_weather = LabelEncoder()
clean_data['weather_encoded'] = le_weather.fit_transform(clean_data['weather_condition'])
features.append('weather_encoded')
# הגדרת X (features) ו-y (target)
X = clean_data[features]
y = clean_data['traffic_density']
# חלוקה לסטי אימון ובדיקה
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
print(f"📊 גודל סט אימון: {len(X_train):,} דוגמאות")
print(f"📊 גודל סט בדיקה: {len(X_test):,} דוגמאות")
# נרמול הנתונים
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# בניית מודלים
models = {
'Linear Regression': LinearRegression(),
'Random Forest': RandomForestRegressor(n_estimators=100, random_state=42)
}
results = {}
for name, model in models.items():
print(f"\n🔄 אימון מודל: {name}")
# אימון המודל
if name == 'Linear Regression':
model.fit(X_train_scaled, y_train)
y_pred = model.predict(X_test_scaled)
else:
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
# הערכת ביצועים
mse = mean_squared_error(y_test, y_pred)
rmse = np.sqrt(mse)
mae = mean_absolute_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
results[name] = {
'RMSE': rmse,
'MAE': mae,
'R²': r2,
'predictions': y_pred
}
print(f"📈 RMSE: {rmse:.3f}")
print(f"📈 MAE: {mae:.3f}")
print(f"📈 R² Score: {r2:.3f}")
# ויזואליזציה של תוצאות המודלים
fig, axes = plt.subplots(1, 2, figsize=(15, 6))
for i, (name, result) in enumerate(results.items()):
# גרף actual vs predicted
axes[i].scatter(y_test, result['predictions'], alpha=0.5, s=10)
axes[i].plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], 'r--', lw=2)
axes[i].set_xlabel('צפיפות תנועה אמיתית')
axes[i].set_ylabel('צפיפות תנועה חזויה')
axes[i].set_title(f'{name}\nR² = {result["R²"]:.3f}')
axes[i].grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
# ניתוח חשיבות features ב-Random Forest
if 'Random Forest' in models:
rf_model = models['Random Forest']
feature_importance = pd.DataFrame({
'feature': features,
'importance': rf_model.feature_importances_
}).sort_values('importance', ascending=False)
plt.figure(figsize=(10, 6))
sns.barplot(data=feature_importance, x='importance', y='feature', palette='viridis')
plt.title('חשיבות משתנים במודל Random Forest')
plt.xlabel('חשיבות')
plt.ylabel('משתנה')
plt.tight_layout()
plt.show()
print("🎯 חשיבות משתנים:")
print(feature_importance)
import plotly.graph_objects as go
import plotly.express as px
from plotly.subplots import make_subplots
import dash
from dash import dcc, html, Input, Output
import plotly.figure_factory as ff
# יצירת דשבורד אינטראקטיבי
def create_traffic_dashboard():
"""יצירת דשבורד מקיף לניתוח תחבורה"""
app = dash.Dash(__name__)
# עיצוב CSS
app.layout = html.Div([
html.H1("🚦 דשבורד ניתוח תחבורה חכמה",
style={'textAlign': 'center', 'color': '#2c3e50', 'marginBottom': 30}),
# בקרות
html.Div([
html.Div([
html.Label("בחר יום בשבוע:"),
dcc.Dropdown(
id='day-dropdown',
options=[
{'label': 'ראשון', 'value': 0},
{'label': 'שני', 'value': 1},
{'label': 'שלישי', 'value': 2},
{'label': 'רביעי', 'value': 3},
{'label': 'חמישי', 'value': 4},
{'label': 'שישי', 'value': 5},
{'label': 'שבת', 'value': 6}
],
value=0,
style={'width': '100%'}
)
], style={'width': '30%', 'display': 'inline-block', 'marginRight': '5%'}),
html.Div([
html.Label("טווח שעות:"),
dcc.RangeSlider(
id='hour-slider',
min=0, max=23, step=1,
marks={i: f'{i}:00' for i in range(0, 24, 4)},
value=[6, 22]
)
], style={'width': '60%', 'display': 'inline-block'})
], style={'marginBottom': 30}),
# גרפים
html.Div([
dcc.Graph(id='traffic-timeline'),
dcc.Graph(id='speed-density-scatter'),
dcc.Graph(id='weather-impact'),
dcc.Graph(id='prediction-comparison')
])
])
# Callbacks לעדכון גרפים
@app.callback(
[Output('traffic-timeline', 'figure'),
Output('speed-density-scatter', 'figure'),
Output('weather-impact', 'figure'),
Output('prediction-comparison', 'figure')],
[Input('day-dropdown', 'value'),
Input('hour-slider', 'value')]
)
def update_graphs(selected_day, hour_range):
# סינון נתונים
filtered_data = clean_data[
(clean_data['day_of_week'] == selected_day) &
(clean_data['hour'] >= hour_range[0]) &
(clean_data['hour'] <= hour_range[1])
]
# גרף 1: ציר זמן של תנועה
hourly_traffic = filtered_data.groupby('hour').agg({
'vehicle_count': 'mean',
'traffic_density': 'mean',
'avg_speed': 'mean'
}).reset_index()
fig1 = make_subplots(specs=[[{"secondary_y": True}]])
fig1.add_trace(
go.Scatter(x=hourly_traffic['hour'], y=hourly_traffic['vehicle_count'],
name='מספר רכבים', line=dict(color='blue')),
secondary_y=False
)
fig1.add_trace(
go.Scatter(x=hourly_traffic['hour'], y=hourly_traffic['avg_speed'],
name='מהירות ממוצעת', line=dict(color='red')),
secondary_y=True
)
fig1.update_xaxes(title_text="שעה")
fig1.update_yaxes(title_text="מספר רכבים", secondary_y=False)
fig1.update_yaxes(title_text="מהירות (קמ\"ש)", secondary_y=True)
fig1.update_layout(title_text="דפוסי תנועה לאורך היום")
# גרף 2: קשר מהירות-צפיפות
fig2 = px.scatter(filtered_data, x='avg_speed', y='traffic_density',
color='rush_hour', size='vehicle_count',
title='קשר בין מהירות לצפיפות תנועה',
labels={'avg_speed': 'מהירות ממוצעת (קמ"ש)', 'traffic_density': 'צפיפות תנועה'})
# גרף 3: השפעת מזג האוויר
weather_impact = filtered_data.groupby('weather_condition')['traffic_density'].mean().reset_index()
fig3 = px.bar(weather_impact, x='weather_condition', y='traffic_density',
title='השפעת מזג האוויר על צפיפות התנועה',
labels={'weather_condition': 'מזג אוויר', 'traffic_density': 'צפיפות תנועה ממוצעת'})
# גרף 4: השוואת חיזויים
sample_data = filtered_data.sample(min(1000, len(filtered_data)))
if len(sample_data) > 0:
sample_features = sample_data[features]
predictions = models['Random Forest'].predict(sample_features)
fig4 = go.Figure()
fig4.add_trace(go.Scatter(y=sample_data['traffic_density'], mode='markers', name='אמיתי'))
fig4.add_trace(go.Scatter(y=predictions, mode='markers', name='חזוי'))
fig4.update_layout(title='השוואת חיזויים (מדגם של 1000 נקודות)')
else:
fig4 = go.Figure()
return fig1, fig2, fig3, fig4
return app
if __name__ == '__main__':
app = create_traffic_dashboard()
print("🚀 הדשבורד רץ על: http://localhost:8050")
# app.run_server(debug=True)
כאן תוכלו לראות דוגמה של הדשבורד האינטראקטיבי שבניתם. בפועל, הדשבורד יכלול:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor, GradientBoostingRegressor
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
import os
import json
class SmartTrafficAnalyzer:
"""מחלקה מקיפה לניתוח נתוני תחבורה חכמה"""
def __init__(self, data_path):
"""אתחול המערכת"""
self.data_path = data_path
self.raw_data = None
self.clean_data = None
self.models = {}
self.results = {}
def load_and_clean_data(self):
"""טעינה וניקוי נתונים"""
print("📊 טוען נתונים...")
try:
self.raw_data = pd.read_csv(self.data_path)
print(f"✅ נטענו {len(self.raw_data):,} שורות")
# ניקוי בסיסי
self.clean_data = self.raw_data.dropna()
print(f"🧹 אחרי ניקוי: {len(self.clean_data):,} שורות")
except Exception as e:
print(f"❌ שגיאה בטעינת נתונים: {e}")
def exploratory_analysis(self):
"""ניתוח חקרני מקיף"""
print("🔍 מבצע ניתוח חקרני...")
if self.clean_data is None:
print("❌ אין נתונים לניתוח. הריצו load_and_clean_data() קודם")
return
# סטטיסטיקות בסיסיות
print("\n📈 סטטיסטיקות בסיסיות:")
print(self.clean_data.describe())
def build_prediction_models(self):
"""בניית מודלים חיזויים"""
print("🤖 בונה מודלים חיזויים...")
if self.clean_data is None:
print("❌ אין נתונים למודלים. הריצו load_and_clean_data() קודם")
return
self.models['Linear Regression'] = LinearRegression()
self.models['Random Forest'] = RandomForestRegressor(n_estimators=100)
self.models['Gradient Boosting'] = GradientBoostingRegressor()
print(f"✅ נבנו {len(self.models)} מודלים")
def evaluate_models(self):
"""הערכת ביצועי המודלים"""
print("📈 מעריך ביצועי מודלים...")
if not self.models:
print("❌ אין מודלים להערכה. הריצו build_prediction_models() קודם")
return
# כאן מוסיפים לוגיקת אימון והערכה
for name, model in self.models.items():
print(f"🔄 מעריך מודל: {name}")
def create_dashboard(self):
"""יצירת דשבורד אינטראקטיבי"""
print("📊 יוצר דשבורד...")
# כאן מוסיפים לוגיקת דשבורד
def generate_insights(self):
"""יצירת תובנות ומסקנות"""
print("💡 מפיק תובנות...")
insights = {
'peak_hours': "שעות השיא הן 7-9 ו-17-19",
'weather_impact': "גשם מקטין מהירות ב-15% בממוצע",
'best_model': "Random Forest עם R² של 0.823",
'recommendations': [
"הוספת נתיבי תחבורה ציבורית בשעות השיא",
"מערכת התרעה מוקדמת למזג אוויר קשה",
"אופטימיזציה של רמזורים לפי דפוסי תנועה"
]
}
return insights
def export_results(self, output_path='results'):
"""ייצוא תוצאות לקבצים"""
print(f"💾 מייצא תוצאות ל-{output_path}/")
os.makedirs(output_path, exist_ok=True)
if self.clean_data is not None:
self.clean_data.to_csv(f'{output_path}/clean_data.csv', index=False)
if self.results:
with open(f'{output_path}/model_results.json', 'w', encoding='utf-8') as f:
json.dump(self.results, f, ensure_ascii=False, indent=2)
def run_full_analysis(self):
"""הרצת ניתוח מלא"""
print("🚀 מתחיל ניתוח מקיף...")
self.load_and_clean_data()
self.exploratory_analysis()
self.build_prediction_models()
self.evaluate_models()
self.create_dashboard()
insights = self.generate_insights()
self.export_results()
print("✅ ניתוח הושלם בהצלחה!")
return insights
if __name__ == "__main__":
analyzer = SmartTrafficAnalyzer('traffic_data.csv')
results = analyzer.run_full_analysis()
print("\n🎯 תובנות עיקריות:")
for key, value in results.items():
print(f" {key}: {value}")
שבוע 1: טעינה, ניקוי וחקירה ראשונית
שבוע 2: ויזואליזציות מתקדמות
שבוע 3: בניית מודלים חיזויים
שבוע 4: דשבורד ודוח סופי
נתחו את הנתונים וזהו את 3 הדפוסים המעניינים ביותר בתנועה. השתמשו בגרפים מתקדמים להמחשה.
שפרו את מודל Random Forest באמצעות Grid Search ו-Cross Validation. השיגו R² של 0.85 לפחות.
צרו מפת חום המציגה את צפיפות התנועה במיקומים שונים באמצעות Folium או Plotly.
פתחו מערכת התרעה שמזהה פקקי תנועה חריגים ושולחת התרעות בזמן אמת.
1. איזה מודל למידת מכונה הכי מתאים לחיזוי צפיפות תנועה?
2. מה הפונקציה הנכונה להסרת ערכים חריגים ב-Pandas?
3. איזה ספרייה הכי מתאימה ליצירת דשבורד אינטראקטיבי?
4. מה המטריקה הטובה ביותר להערכת מודל רגרסיה?
5. מה הדרך הנכונה לטיפול בנתונים קטגוריאליים?
© 2024 EduManage. כל הזכויות שמורות. | מדיניות פרטיות | תנאי שימוש
עוצב ופותח עם ❤️ לקהילת הלומדים הישראלית