import%20marimo%0A%0A__generated_with%20%3D%20%220.14.5%22%0Aapp%20%3D%20marimo.App(width%3D%22medium%22%2C%20app_title%3D%22BEV%20Sedan%20Comparison%22)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20DATA_FILE%20%3D%20mo.ui.text(%0A%20%20%20%20%20%20%20%20label%3D%22Dataframe%3A%22%2C%0A%20%20%20%20%20%20%20%20value%3D%22SedanCompareData.xlsx%22%2C%0A%20%20%20%20%20%20%20%20full_width%3DFalse%2C%0A%20%20%20%20)%0A%20%20%20%20mo.vstack(%5Bmo.md(%22%22%22%23%23Input%20.xlsx%20file%3A%22%22%22)%2C%20DATA_FILE%5D)%0A%20%20%20%20return%20(DATA_FILE%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(DATA_FILE%2C%20mo%2C%20pd)%3A%0A%20%20%20%20%23%20%E5%AE%9A%E4%B9%89%E6%95%B0%E6%8D%AE%E5%8A%A0%E8%BD%BD%E5%87%BD%E6%95%B0%0A%20%20%20%20def%20load_data()%3A%0A%20%20%20%20%20%20%20%20file_path%20%3D%20mo.notebook_location()%20%2F%20%22public%22%20%2F%20DATA_FILE.value%0A%20%20%20%20%20%20%20%20vehicle_data%20%3D%20pd.read_excel(str(file_path)).T%0A%20%20%20%20%20%20%20%20vehicle_data.columns%20%3D%20vehicle_data.iloc%5B0%5D%20%20%23%20%E4%BD%BF%E7%94%A8%E7%AC%AC%E4%B8%80%E8%A1%8C%E4%BD%9C%E4%B8%BA%E5%88%97%E5%90%8D%0A%20%20%20%20%20%20%20%20vehicle_data%20%3D%20vehicle_data%5B1%3A%5D%0A%20%20%20%20%20%20%20%20vehicle_data%20%3D%20vehicle_data.reset_index().rename(%0A%20%20%20%20%20%20%20%20%20%20%20%20columns%3D%7B%22index%22%3A%20%22Car%20Model%22%7D%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20vehicle_data%5B%22Range-per-kWh(km%2FkWh)%22%5D%20%3D%20(%0A%20%20%20%20%20%20%20%20%20%20%20%20vehicle_data%5B%22CLTC%20Range%20(km)%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%20vehicle_data%5B%22Battery%20Capacity%20(kWh)%22%5D%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20%20%20%20%20return%20vehicle_data%0A%0A%0A%20%20%20%20loaded_data%20%3D%20load_data()%0A%20%20%20%20%23%20%E5%88%9B%E5%BB%BA%E8%A1%A8%E6%A0%BCUI%E7%BB%84%E4%BB%B6%0A%20%20%20%20selected_data%20%3D%20mo.ui.table(%0A%20%20%20%20%20%20%20%20load_data()%2C%0A%20%20%20%20%20%20%20%20initial_selection%3Dlist(range(len(load_data())))%2C%20%20%23%20%E5%85%A8%E9%80%89%0A%20%20%20%20%20%20%20%20freeze_columns_left%3D%5B%22Car%20Model%22%2C%22Drivetrain%22%5D%2C%0A%20%20%20%20)%0A%20%20%20%20mo.vstack(%5Bmo.md(%22%22%22%23%23%20Vehicle%20Models%20of%20Interest%3A%20%22%22%22)%2C%20selected_data%5D)%0A%20%20%20%20return%20loaded_data%2C%20selected_data%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(alt%2C%20np%2C%20pd%2C%20selected_data)%3A%0A%20%20%20%20%23%20Acceleration%20vs%20Energy%20Consumption%20Scatter%20Plot%0A%20%20%20%20def%20_()%3A%0A%20%20%20%20%20%20%20%20%23%20%E8%BE%93%E5%85%A5%E6%89%80%E9%9C%80%E6%A0%87%E5%87%86%E5%B7%AE%E5%80%8D%E6%95%B0%0A%20%20%20%20%20%20%20%20sigma%20%3D%201.684%0A%0A%20%20%20%20%20%20%20%20%23%20%E5%88%9B%E5%BB%BA%E6%95%A3%E7%82%B9%E5%9B%BE%0A%20%20%20%20%20%20%20%20scatter%20%3D%20(%0A%20%20%20%20%20%20%20%20%20%20%20%20alt.Chart(selected_data.value)%0A%20%20%20%20%20%20%20%20%20%20%20%20.mark_circle(size%3D40%2C%20color%3D%22blue%22%2C%20opacity%3D0.7%2C%20stroke%3D%22green%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20.encode(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20x%3Dalt.X(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Battery%20Capacity%20(kWh)%3AQ%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20title%3D%22Battery%20Capacity%20(kWh)%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20scale%3Dalt.Scale(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20zero%3DFalse%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20padding%3D0%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20y%3Dalt.Y(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22CLTC%20Range%20(km)%3AQ%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20title%3D%22CLTC%20Range%20(km)%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20scale%3Dalt.Scale(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20zero%3DFalse%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20padding%3D0%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tooltip%3D%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22Car%20Model%3AN%22%2C%20title%3D%22Car%20Model%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22Battery%20Capacity%20(kWh)%3AQ%22%2C%20format%3D%22.1f%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22CLTC%20Range%20(km)%3AQ%22%2C%20format%3D%22.1f%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22Range-per-kWh(km%2FkWh)%3AQ%22%2C%20format%3D%22.2f%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20%20%20%20%20%23%20%E6%B7%BB%E5%8A%A0%E6%96%87%E6%9C%AC%E6%A0%87%E7%AD%BE%E5%B1%82%0A%20%20%20%20%20%20%20%20text%20%3D%20scatter.mark_text(%0A%20%20%20%20%20%20%20%20%20%20%20%20align%3D%22left%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20baseline%3D%22middle%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20dx%3D5%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20fontSize%3D9%2C%0A%20%20%20%20%20%20%20%20).encode(%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3D%22Car%20Model%3AN%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20color%3Dalt.value(%22grey%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20tooltip%3Dalt.value(None)%2C%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20%20%20%20%20%23%20%E8%AE%A1%E7%AE%97%E5%9B%9E%E5%BD%92%E7%BA%BF%E5%92%8C%E7%BD%AE%E4%BF%A1%E5%B8%A6%0A%20%20%20%20%20%20%20%20x_data%20%3D%20selected_data.value%5B%22Battery%20Capacity%20(kWh)%22%5D.astype(float)%0A%20%20%20%20%20%20%20%20y_data%20%3D%20selected_data.value%5B%22CLTC%20Range%20(km)%22%5D.astype(float)%0A%0A%20%20%20%20%20%20%20%20%23%20%E8%AE%A1%E7%AE%97%E7%BA%BF%E6%80%A7%E5%9B%9E%E5%BD%92%E7%B3%BB%E6%95%B0%0A%20%20%20%20%20%20%20%20coefficients%20%3D%20np.polyfit(x_data%2C%20y_data%2C%201)%0A%20%20%20%20%20%20%20%20a%2C%20b%20%3D%20coefficients%0A%0A%20%20%20%20%20%20%20%20%23%20%E8%AE%A1%E7%AE%97%E7%82%B9%E5%88%B0%E5%9B%9E%E5%BD%92%E7%BA%BF%E7%9A%84%E5%9E%82%E7%9B%B4%E8%B7%9D%E7%A6%BB%0A%20%20%20%20%20%20%20%20def%20perpendicular_distance(x%2C%20y)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20np.abs(a%20*%20x%20-%20y%20%2B%20b)%20%2F%20np.sqrt(a**2%20%2B%201)%0A%0A%20%20%20%20%20%20%20%20distances%20%3D%20perpendicular_distance(x_data%2C%20y_data)%0A%20%20%20%20%20%20%20%20std_dev%20%3D%20np.std(distances)%0A%0A%20%20%20%20%20%20%20%20std_dev%20%3D%20std_dev%20*%20sigma%0A%20%20%20%20%20%20%20%20%23%20%E6%89%A9%E5%B1%95x%E8%BD%B4%E8%8C%83%E5%9B%B4%E7%94%A8%E4%BA%8E%E7%BB%98%E5%88%B6%E5%9B%9E%E5%BD%92%E7%BA%BF%0A%20%20%20%20%20%20%20%20x_min%20%3D%20x_data.min()%0A%20%20%20%20%20%20%20%20x_max%20%3D%20x_data.max()%0A%20%20%20%20%20%20%20%20x_range%20%3D%20x_max%20-%20x_min%0A%20%20%20%20%20%20%20%20x_extended%20%3D%20np.linspace(x_min%20-%200.1%20*%20x_range%2C%20x_max%20%2B%200.1%20*%20x_range%2C%20100)%0A%0A%20%20%20%20%20%20%20%20%23%20%E8%AE%A1%E7%AE%97%E7%BD%AE%E4%BF%A1%E5%B8%A6%E8%8C%83%E5%9B%B4%0A%20%20%20%20%20%20%20%20def%20confidence_band(x)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20y_line%20%3D%20a%20*%20x%20%2B%20b%0A%20%20%20%20%20%20%20%20%20%20%20%20offset%20%3D%20std_dev%20*%20np.sqrt(1%20%2B%20a**2)%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20%7B%22upper%22%3A%20y_line%20%2B%20offset%2C%20%22lower%22%3A%20y_line%20-%20offset%7D%0A%0A%20%20%20%20%20%20%20%20%23%20%E5%88%9B%E5%BB%BA%E5%9B%9E%E5%BD%92%E7%BA%BF%E6%95%B0%E6%8D%AE%E6%A1%86%0A%20%20%20%20%20%20%20%20regression_df%20%3D%20pd.DataFrame(%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Battery%20Capacity%20(kWh)%22%3A%20x_extended%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22CLTC%20Range%20(km)%22%3A%20a%20*%20x_extended%20%2B%20b%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20**%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20k%3A%20%5Bconfidence_band(x)%5Bk%5D%20for%20x%20in%20x_extended%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20for%20k%20in%20%5B%22upper%22%2C%20%22lower%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20%20%20%20%20%23%20%E7%BB%98%E5%88%B6%E5%9B%9E%E5%BD%92%E7%BA%BF%0A%20%20%20%20%20%20%20%20regression_line%20%3D%20(%0A%20%20%20%20%20%20%20%20%20%20%20%20alt.Chart(regression_df)%0A%20%20%20%20%20%20%20%20%20%20%20%20.mark_line(color%3D%22orange%22%2C%20strokeDash%3D%5B3%2C%203%5D)%0A%20%20%20%20%20%20%20%20%20%20%20%20.encode(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20x%3D%22Battery%20Capacity%20(kWh)%3AQ%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20y%3D%22CLTC%20Range%20(km)%3AQ%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tooltip%3Dalt.value(None)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20%20%20%20%20%23%20%E7%BB%98%E5%88%B6%E7%BD%AE%E4%BF%A1%E5%B8%A6%0A%20%20%20%20%20%20%20%20confidence_band%20%3D%20(%0A%20%20%20%20%20%20%20%20%20%20%20%20alt.Chart(regression_df)%0A%20%20%20%20%20%20%20%20%20%20%20%20.mark_area(color%3D%22lightgreen%22%2C%20opacity%3D0.2)%0A%20%20%20%20%20%20%20%20%20%20%20%20.encode(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20x%3D%22Battery%20Capacity%20(kWh)%3AQ%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20y%3D%22upper%3AQ%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20y2%3D%22lower%3AQ%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tooltip%3Dalt.value(None)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20%20%20%20%20%23%20%E7%BB%84%E5%90%88%E6%89%80%E6%9C%89%E5%9B%BE%E8%A1%A8%E5%85%83%E7%B4%A0%0A%20%20%20%20%20%20%20%20_chart%20%3D%20(%0A%20%20%20%20%20%20%20%20%20%20%20%20(confidence_band%20%2B%20regression_line%20%2B%20scatter%20%2B%20text)%0A%20%20%20%20%20%20%20%20%20%20%20%20.properties(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20title%3D%22CLTC%20Range%20VS%20Battery%20Capacity%20(%7B%7D%CF%83%20Confidence%20Band)%22.format(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20sigma%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20width%3D800%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20height%3D500%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20%20%20%20%20.configure_axis(labelFontSize%3D12%2C%20titleFontSize%3D14)%0A%20%20%20%20%20%20%20%20%20%20%20%20.configure_view(strokeWidth%3D0)%0A%20%20%20%20%20%20%20%20%20%20%20%20.configure_title(fontSize%3D16)%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20%20%20%20%20return%20_chart%0A%0A%0A%20%20%20%20_()%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(alt%2C%20np%2C%20pd%2C%20selected_data)%3A%0A%20%20%20%20%23%20Acceleration%20vs%20Energy%20Consumption%20Scatter%20Plot%0A%20%20%20%20def%20_()%3A%0A%20%20%20%20%20%20%20%20%23%20%E8%BE%93%E5%85%A5%E6%89%80%E9%9C%80%E6%A0%87%E5%87%86%E5%B7%AE%E5%80%8D%E6%95%B0%0A%20%20%20%20%20%20%20%20sigma%20%3D%201.684%0A%0A%20%20%20%20%20%20%20%20%23%20%E5%88%9B%E5%BB%BA%E6%95%A3%E7%82%B9%E5%9B%BE%0A%20%20%20%20%20%20%20%20scatter%20%3D%20(%0A%20%20%20%20%20%20%20%20%20%20%20%20alt.Chart(selected_data.value)%0A%20%20%20%20%20%20%20%20%20%20%20%20.mark_circle(size%3D40%2C%20color%3D%22blue%22%2C%20opacity%3D0.7%2C%20stroke%3D%22green%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20.encode(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20x%3Dalt.X(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%220-100%20km%2Fh%20(s)%3AQ%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20title%3D%220-100%20km%2Fh%20(s)%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20scale%3Dalt.Scale(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20zero%3DFalse%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20reverse%3DFalse%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20padding%3D0%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20y%3Dalt.Y(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Energy%20Consumption%20(kWh%2F100km)%3AQ%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20title%3D%22Energy%20Consumption(kWh%2F100km)%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20scale%3Dalt.Scale(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20zero%3DFalse%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20reverse%3DTrue%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20padding%3D0%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tooltip%3D%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22Car%20Model%3AN%22%2C%20title%3D%22Car%20Model%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%220-100%20km%2Fh%20(s)%3AQ%22%2C%20format%3D%22.1f%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22Energy%20Consumption%20(kWh%2F100km)%3AQ%22%2C%20format%3D%22.1f%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20%20%20%20%20%23%20%E6%B7%BB%E5%8A%A0%E6%96%87%E6%9C%AC%E6%A0%87%E7%AD%BE%E5%B1%82%0A%20%20%20%20%20%20%20%20text%20%3D%20scatter.mark_text(%0A%20%20%20%20%20%20%20%20%20%20%20%20align%3D%22left%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20baseline%3D%22middle%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20dx%3D5%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20fontSize%3D9%2C%0A%20%20%20%20%20%20%20%20).encode(%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3D%22Car%20Model%3AN%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20color%3Dalt.value(%22grey%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20tooltip%3Dalt.value(None)%2C%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20%20%20%20%20%23%20%E8%AE%A1%E7%AE%97%E5%9B%9E%E5%BD%92%E7%BA%BF%E5%92%8C%E7%BD%AE%E4%BF%A1%E5%B8%A6%0A%20%20%20%20%20%20%20%20x_data%20%3D%20selected_data.value%5B%220-100%20km%2Fh%20(s)%22%5D.astype(float)%0A%20%20%20%20%20%20%20%20y_data%20%3D%20selected_data.value%5B%22Energy%20Consumption%20(kWh%2F100km)%22%5D.astype(%0A%20%20%20%20%20%20%20%20%20%20%20%20float%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20%20%20%20%20%23%20%E8%AE%A1%E7%AE%97%E7%BA%BF%E6%80%A7%E5%9B%9E%E5%BD%92%E7%B3%BB%E6%95%B0%0A%20%20%20%20%20%20%20%20coefficients%20%3D%20np.polyfit(x_data%2C%20y_data%2C%201)%0A%20%20%20%20%20%20%20%20a%2C%20b%20%3D%20coefficients%0A%0A%20%20%20%20%20%20%20%20%23%20%E8%AE%A1%E7%AE%97%E7%82%B9%E5%88%B0%E5%9B%9E%E5%BD%92%E7%BA%BF%E7%9A%84%E5%9E%82%E7%9B%B4%E8%B7%9D%E7%A6%BB%0A%20%20%20%20%20%20%20%20def%20perpendicular_distance(x%2C%20y)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20np.abs(a%20*%20x%20-%20y%20%2B%20b)%20%2F%20np.sqrt(a**2%20%2B%201)%0A%0A%20%20%20%20%20%20%20%20distances%20%3D%20perpendicular_distance(x_data%2C%20y_data)%0A%20%20%20%20%20%20%20%20std_dev%20%3D%20np.std(distances)%0A%0A%20%20%20%20%20%20%20%20std_dev%20%3D%20std_dev%20*%20sigma%0A%20%20%20%20%20%20%20%20%23%20%E6%89%A9%E5%B1%95x%E8%BD%B4%E8%8C%83%E5%9B%B4%E7%94%A8%E4%BA%8E%E7%BB%98%E5%88%B6%E5%9B%9E%E5%BD%92%E7%BA%BF%0A%20%20%20%20%20%20%20%20x_min%20%3D%20x_data.min()%0A%20%20%20%20%20%20%20%20x_max%20%3D%20x_data.max()%0A%20%20%20%20%20%20%20%20x_range%20%3D%20x_max%20-%20x_min%0A%20%20%20%20%20%20%20%20x_extended%20%3D%20np.linspace(x_min%20-%200.1%20*%20x_range%2C%20x_max%20%2B%200.1%20*%20x_range%2C%20100)%0A%0A%20%20%20%20%20%20%20%20%23%20%E8%AE%A1%E7%AE%97%E7%BD%AE%E4%BF%A1%E5%B8%A6%E8%8C%83%E5%9B%B4%0A%20%20%20%20%20%20%20%20def%20confidence_band(x)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20y_line%20%3D%20a%20*%20x%20%2B%20b%0A%20%20%20%20%20%20%20%20%20%20%20%20offset%20%3D%20std_dev%20*%20np.sqrt(1%20%2B%20a**2)%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20%7B%22upper%22%3A%20y_line%20%2B%20offset%2C%20%22lower%22%3A%20y_line%20-%20offset%7D%0A%0A%20%20%20%20%20%20%20%20%23%20%E5%88%9B%E5%BB%BA%E5%9B%9E%E5%BD%92%E7%BA%BF%E6%95%B0%E6%8D%AE%E6%A1%86%0A%20%20%20%20%20%20%20%20regression_df%20%3D%20pd.DataFrame(%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%220-100%20km%2Fh%20(s)%22%3A%20x_extended%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Energy%20Consumption%20(kWh%2F100km)%22%3A%20a%20*%20x_extended%20%2B%20b%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20**%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20k%3A%20%5Bconfidence_band(x)%5Bk%5D%20for%20x%20in%20x_extended%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20for%20k%20in%20%5B%22upper%22%2C%20%22lower%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20%20%20%20%20%23%20%E7%BB%98%E5%88%B6%E5%9B%9E%E5%BD%92%E7%BA%BF%0A%20%20%20%20%20%20%20%20regression_line%20%3D%20(%0A%20%20%20%20%20%20%20%20%20%20%20%20alt.Chart(regression_df)%0A%20%20%20%20%20%20%20%20%20%20%20%20.mark_line(color%3D%22orange%22%2C%20strokeDash%3D%5B3%2C%203%5D)%0A%20%20%20%20%20%20%20%20%20%20%20%20.encode(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20x%3D%220-100%20km%2Fh%20(s)%3AQ%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20y%3D%22Energy%20Consumption%20(kWh%2F100km)%3AQ%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tooltip%3Dalt.value(None)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20%20%20%20%20%23%20%E7%BB%98%E5%88%B6%E7%BD%AE%E4%BF%A1%E5%B8%A6%0A%20%20%20%20%20%20%20%20confidence_band%20%3D%20(%0A%20%20%20%20%20%20%20%20%20%20%20%20alt.Chart(regression_df)%0A%20%20%20%20%20%20%20%20%20%20%20%20.mark_area(color%3D%22lightgreen%22%2C%20opacity%3D0.2)%0A%20%20%20%20%20%20%20%20%20%20%20%20.encode(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20x%3D%220-100%20km%2Fh%20(s)%3AQ%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20y%3D%22upper%3AQ%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20y2%3D%22lower%3AQ%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tooltip%3Dalt.value(None)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20%20%20%20%20%23%20%E7%BB%84%E5%90%88%E6%89%80%E6%9C%89%E5%9B%BE%E8%A1%A8%E5%85%83%E7%B4%A0%0A%20%20%20%20%20%20%20%20_chart%20%3D%20(%0A%20%20%20%20%20%20%20%20%20%20%20%20(confidence_band%20%2B%20regression_line%20%2B%20scatter%20%2B%20text)%0A%20%20%20%20%20%20%20%20%20%20%20%20.properties(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20title%3D%22Energy%20Consumption%20VS%200-100km%2Fh%20Accel.%20Time%20(%7B%7D%CF%83%20Confidence%20Band)%22.format(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20sigma%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20width%3D800%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20height%3D500%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20%20%20%20%20.configure_axis(labelFontSize%3D12%2C%20titleFontSize%3D14)%0A%20%20%20%20%20%20%20%20%20%20%20%20.configure_view(strokeWidth%3D0)%0A%20%20%20%20%20%20%20%20%20%20%20%20.configure_title(fontSize%3D16)%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20%20%20%20%20return%20_chart%0A%0A%0A%20%20%20%20_()%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(alt%2C%20np%2C%20pd%2C%20selected_data)%3A%0A%20%20%20%20%23%20Acceleration%20vs%20Energy%20Consumption%20Scatter%20Plot%0A%20%20%20%20def%20_()%3A%0A%20%20%20%20%20%20%20%20%23%20%E8%BE%93%E5%85%A5%E6%89%80%E9%9C%80%E6%A0%87%E5%87%86%E5%B7%AE%E5%80%8D%E6%95%B0%0A%20%20%20%20%20%20%20%20sigma%20%3D%201.684%0A%20%20%20%20%20%20%20%20%23%20%E5%88%9B%E5%BB%BA%E6%95%A3%E7%82%B9%E5%9B%BE%0A%20%20%20%20%20%20%20%20scatter%20%3D%20(%0A%20%20%20%20%20%20%20%20%20%20%20%20alt.Chart(selected_data.value)%0A%20%20%20%20%20%20%20%20%20%20%20%20.mark_circle(size%3D40%2C%20color%3D%22blue%22%2C%20opacity%3D0.7%2C%20stroke%3D%22green%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20.encode(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20x%3Dalt.X(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%220-100%20km%2Fh%20(s)%3AQ%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20title%3D%220-100km%2Fh%20Accel%20Time(s)%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20scale%3Dalt.Scale(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20zero%3DFalse%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20reverse%3DFalse%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20padding%3D0%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20y%3Dalt.Y(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Power-to-Weight%20Ratio%20(Ps%2F100kg)%3AQ%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20title%3D%22Power-to-Weight%20Ratio%20(Ps%2F100kg)%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20scale%3Dalt.Scale(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20zero%3DFalse%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20reverse%3DTrue%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20padding%3D0%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tooltip%3D%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22Car%20Model%3AN%22%2C%20title%3D%22Car%20Model%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%220-100%20km%2Fh%20(s)%3AQ%22%2C%20format%3D%22.1f%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Power-to-Weight%20Ratio%20(Ps%2F100kg)%3AQ%22%2C%20format%3D%22.1f%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20%20%20%20%20%23%20%E6%B7%BB%E5%8A%A0%E6%96%87%E6%9C%AC%E6%A0%87%E7%AD%BE%E5%B1%82%0A%20%20%20%20%20%20%20%20text%20%3D%20scatter.mark_text(%0A%20%20%20%20%20%20%20%20%20%20%20%20align%3D%22left%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20baseline%3D%22middle%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20dx%3D5%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20fontSize%3D9%2C%0A%20%20%20%20%20%20%20%20).encode(%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3D%22Car%20Model%3AN%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20color%3Dalt.value(%22grey%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20tooltip%3Dalt.value(None)%2C%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20%20%20%20%20%23%20%E8%AE%A1%E7%AE%97%E5%9B%9E%E5%BD%92%E7%BA%BF%E5%92%8C%E7%BD%AE%E4%BF%A1%E5%B8%A6%0A%20%20%20%20%20%20%20%20x_data%20%3D%20selected_data.value%5B%220-100%20km%2Fh%20(s)%22%5D.astype(float)%0A%20%20%20%20%20%20%20%20y_data%20%3D%20selected_data.value%5B%22Power-to-Weight%20Ratio%20(Ps%2F100kg)%22%5D.astype(%0A%20%20%20%20%20%20%20%20%20%20%20%20float%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20%20%20%20%20%23%20%E8%AE%A1%E7%AE%97%E7%BA%BF%E6%80%A7%E5%9B%9E%E5%BD%92%E7%B3%BB%E6%95%B0%0A%20%20%20%20%20%20%20%20coefficients%20%3D%20np.polyfit(x_data%2C%20y_data%2C%201)%0A%20%20%20%20%20%20%20%20a%2C%20b%20%3D%20coefficients%0A%0A%20%20%20%20%20%20%20%20%23%20%E8%AE%A1%E7%AE%97%E7%82%B9%E5%88%B0%E5%9B%9E%E5%BD%92%E7%BA%BF%E7%9A%84%E5%9E%82%E7%9B%B4%E8%B7%9D%E7%A6%BB%0A%20%20%20%20%20%20%20%20def%20perpendicular_distance(x%2C%20y)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20np.abs(a%20*%20x%20-%20y%20%2B%20b)%20%2F%20np.sqrt(a**2%20%2B%201)%0A%0A%20%20%20%20%20%20%20%20distances%20%3D%20perpendicular_distance(x_data%2C%20y_data)%0A%20%20%20%20%20%20%20%20std_dev%20%3D%20np.std(distances)%0A%0A%20%20%20%20%20%20%20%20std_dev%20%3D%20std_dev%20*%20sigma%0A%20%20%20%20%20%20%20%20%23%20%E6%89%A9%E5%B1%95x%E8%BD%B4%E8%8C%83%E5%9B%B4%E7%94%A8%E4%BA%8E%E7%BB%98%E5%88%B6%E5%9B%9E%E5%BD%92%E7%BA%BF%0A%20%20%20%20%20%20%20%20x_min%20%3D%20x_data.min()%0A%20%20%20%20%20%20%20%20x_max%20%3D%20x_data.max()%0A%20%20%20%20%20%20%20%20x_range%20%3D%20x_max%20-%20x_min%0A%20%20%20%20%20%20%20%20x_extended%20%3D%20np.linspace(x_min%20-%200.1%20*%20x_range%2C%20x_max%20%2B%200.1%20*%20x_range%2C%20100)%0A%0A%20%20%20%20%20%20%20%20%23%20%E8%AE%A1%E7%AE%97%E7%BD%AE%E4%BF%A1%E5%B8%A6%E8%8C%83%E5%9B%B4%0A%20%20%20%20%20%20%20%20def%20confidence_band(x)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20y_line%20%3D%20a%20*%20x%20%2B%20b%0A%20%20%20%20%20%20%20%20%20%20%20%20offset%20%3D%20std_dev%20*%20np.sqrt(1%20%2B%20a**2)%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20%7B%22upper%22%3A%20y_line%20%2B%20offset%2C%20%22lower%22%3A%20y_line%20-%20offset%7D%0A%0A%20%20%20%20%20%20%20%20%23%20%E5%88%9B%E5%BB%BA%E5%9B%9E%E5%BD%92%E7%BA%BF%E6%95%B0%E6%8D%AE%E6%A1%86%0A%20%20%20%20%20%20%20%20regression_df%20%3D%20pd.DataFrame(%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%220-100%20km%2Fh%20(s)%22%3A%20x_extended%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Power-to-Weight%20Ratio%20(Ps%2F100kg)%22%3A%20a%20*%20x_extended%20%2B%20b%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20**%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20k%3A%20%5Bconfidence_band(x)%5Bk%5D%20for%20x%20in%20x_extended%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20for%20k%20in%20%5B%22upper%22%2C%20%22lower%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20%20%20%20%20%23%20%E7%BB%98%E5%88%B6%E5%9B%9E%E5%BD%92%E7%BA%BF%0A%20%20%20%20%20%20%20%20regression_line%20%3D%20(%0A%20%20%20%20%20%20%20%20%20%20%20%20alt.Chart(regression_df)%0A%20%20%20%20%20%20%20%20%20%20%20%20.mark_line(color%3D%22orange%22%2C%20strokeDash%3D%5B3%2C%203%5D)%0A%20%20%20%20%20%20%20%20%20%20%20%20.encode(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20x%3D%220-100%20km%2Fh%20(s)%3AQ%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20y%3D%22Power-to-Weight%20Ratio%20(Ps%2F100kg)%3AQ%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tooltip%3Dalt.value(None)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20%20%20%20%20%23%20%E7%BB%98%E5%88%B6%E7%BD%AE%E4%BF%A1%E5%B8%A6%0A%20%20%20%20%20%20%20%20confidence_band%20%3D%20(%0A%20%20%20%20%20%20%20%20%20%20%20%20alt.Chart(regression_df)%0A%20%20%20%20%20%20%20%20%20%20%20%20.mark_area(color%3D%22lightgreen%22%2C%20opacity%3D0.2)%0A%20%20%20%20%20%20%20%20%20%20%20%20.encode(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20x%3D%220-100%20km%2Fh%20(s)%3AQ%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20y%3D%22upper%3AQ%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20y2%3D%22lower%3AQ%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tooltip%3Dalt.value(None)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20%20%20%20%20%23%20%E7%BB%84%E5%90%88%E6%89%80%E6%9C%89%E5%9B%BE%E8%A1%A8%E5%85%83%E7%B4%A0%0A%20%20%20%20%20%20%20%20_chart%20%3D%20(%0A%20%20%20%20%20%20%20%20%20%20%20%20(confidence_band%20%2B%20regression_line%20%2B%20scatter%20%2B%20text)%0A%20%20%20%20%20%20%20%20%20%20%20%20.properties(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20title%3D%22Power-to-Weight%20Ratio%20VS%200-100km%2Fh%20Accel.%20Time%20(%7B%7D%CF%83%20Confidence%20Band)%22.format(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20sigma%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20width%3D800%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20height%3D500%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20%20%20%20%20.configure_axis(labelFontSize%3D12%2C%20titleFontSize%3D14)%0A%20%20%20%20%20%20%20%20%20%20%20%20.configure_view(strokeWidth%3D0)%0A%20%20%20%20%20%20%20%20%20%20%20%20.configure_title(fontSize%3D16)%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20%20%20%20%20return%20_chart%0A%0A%0A%20%20%20%20_()%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(go%2C%20loaded_data%2C%20mo%2C%20np%2C%20px)%3A%0A%20%20%20%20def%20_()%3A%0A%20%20%20%20%20%20%20%20mo.stop(True)%0A%20%20%20%20%20%20%20%20%23%20%E5%88%9B%E5%BB%BA3D%E6%95%A3%E7%82%B9%E5%9B%BE%0A%0A%20%20%20%20%20%20%20%20_chart_3d%20%3D%20px.scatter_3d(%0A%20%20%20%20%20%20%20%20%20%20%20%20loaded_data%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20x%3D%220-100%20km%2Fh%20(s)%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20y%3D%22Power-to-Weight%20Ratio%20(Ps%2F100kg)%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20z%3D%22Energy%20Consumption%20(kWh%2F100km)%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20color%3D%22Car%20Model%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20size_max%3D18%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20opacity%3D0.9%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20title%3D%22Accel%20Time%20vs%20Power-to-Weight%20Ratio%20vs%20Energy%20Consumption%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hover_data%3D%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Car%20Model%22%3A%20True%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Power-to-Weight%20Ratio%20(Ps%2F100kg)%22%3A%20%22%3A.1f%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%220-100%20km%2Fh%20(s)%22%3A%20%22%3A.1f%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Horsepower%20(Ps)%22%3A%20%22%3A.1f%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Energy%20Consumption%20(kWh%2F100km)%22%3A%20%22%3A.1f%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20color_discrete_sequence%3Dpx.colors.qualitative.Alphabet%2C%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20%20%20%20%20%23%20%E6%9B%B4%E6%96%B0%E5%9B%BE%E8%A1%A8%E5%B8%83%E5%B1%80%0A%20%20%20%20%20%20%20%20_chart_3d.update_layout(%0A%20%20%20%20%20%20%20%20%20%20%20%20scene%3Ddict(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20xaxis%3Ddict(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20title%3D%220-100km%2Fh%20Accel.%20Time(s)%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20backgroundcolor%3Dpx.colors.qualitative.Pastel2%5B0%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20gridcolor%3D%22white%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20showbackground%3DTrue%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20zerolinecolor%3D%22white%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20yaxis%3Ddict(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20title%3D%22Power%20to%20Weight%20Ratio(Ps%2F100kg)%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20backgroundcolor%3Dpx.colors.qualitative.Pastel2%5B4%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20gridcolor%3D%22white%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20showbackground%3DTrue%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20zerolinecolor%3D%22white%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20zaxis%3Ddict(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20title%3D%22Energy%20Consumption(kWh%2F100km)%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20backgroundcolor%3Dpx.colors.qualitative.Pastel2%5B2%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20gridcolor%3D%22white%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20showbackground%3DTrue%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20zerolinecolor%3D%22white%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20autorange%3D%22reversed%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20aspectmode%3D%22auto%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20title_font_size%3D18%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20legend_title_text%3D%22%E8%BD%A6%E5%9E%8B%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20legend%3Ddict(font%3Ddict(size%3D12)%2C%20itemsizing%3D%22constant%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hoverlabel%3Ddict(font_size%3D12)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20margin%3Ddict(l%3D10%2C%20r%3D10%2C%20b%3D0%2C%20t%3D40)%2C%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20%20%20%20%20%23%20---%20%E7%BA%BF%E6%80%A7%E5%9B%9E%E5%BD%92%E8%AE%A1%E7%AE%97%20---%0A%20%20%20%20%20%20%20%20%23%20%E8%8E%B7%E5%8F%96x%E8%BD%B4%E5%92%8Cy%E8%BD%B4%E6%95%B0%E6%8D%AE%0A%20%20%20%20%20%20%20%20x_data%20%3D%20loaded_data%5B%220-100%20km%2Fh%20(s)%22%5D.astype(float)%0A%20%20%20%20%20%20%20%20y_data%20%3D%20loaded_data%5B%22Power-to-Weight%20Ratio%20(Ps%2F100kg)%22%5D.astype(float)%0A%0A%20%20%20%20%20%20%20%20%23%20%E8%AE%A1%E7%AE%97%E5%9B%9E%E5%BD%92%E7%B3%BB%E6%95%B0%0A%20%20%20%20%20%20%20%20coefficients%20%3D%20np.polyfit(x_data%2C%20y_data%2C%201)%0A%20%20%20%20%20%20%20%20a%2C%20b%20%3D%20coefficients%20%20%23%20%E5%9B%9E%E5%BD%92%E7%BA%BF%E6%96%B9%E7%A8%8B%3A%20y%20%3D%20ax%20%2B%20b%0A%0A%20%20%20%20%20%20%20%20%23%20%E7%94%9F%E6%88%90%E6%8B%9F%E5%90%88%E7%BA%BF%E6%95%B0%E6%8D%AE%E7%82%B9%0A%20%20%20%20%20%20%20%20x_fit%20%3D%20np.linspace(x_data.min()%2C%20x_data.max()%2C%20100)%0A%20%20%20%20%20%20%20%20y_fit%20%3D%20a%20*%20x_fit%20%2B%20b%0A%20%20%20%20%20%20%20%20z_fit%20%3D%20np.full(%0A%20%20%20%20%20%20%20%20%20%20%20%20100%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20loaded_data%5B%22Energy%20Consumption%20(kWh%2F100km)%22%5D.astype(float).mean()%2C%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20%20%20%20%20%23%20%E6%B7%BB%E5%8A%A0%E6%8B%9F%E5%90%88%E7%BA%BF%E5%88%B0%E5%9B%BE%E8%A1%A8%0A%20%20%20%20%20%20%20%20fit_line%20%3D%20go.Scatter3d(%0A%20%20%20%20%20%20%20%20%20%20%20%20x%3Dx_fit%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20y%3Dy_fit%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20z%3Dz_fit%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20mode%3D%22lines%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20line%3Ddict(color%3D%22orange%22%2C%20width%3D3)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20name%3D%22Power-to-Weight%20vs%20Accel%20Time%20Fit%20Line%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hoverinfo%3D%22none%22%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20_chart_3d.add_trace(fit_line)%0A%0A%20%20%20%20%20%20%20%20%23%20---%20%E8%AE%A1%E7%AE%97%E7%BD%AE%E4%BF%A1%E5%8C%BA%E9%97%B4%20---%0A%20%20%20%20%20%20%20%20%23%20%E8%AE%A1%E7%AE%97%E7%82%B9%E5%88%B0%E6%8B%9F%E5%90%88%E7%BA%BF%E7%9A%84%E5%9E%82%E7%9B%B4%E8%B7%9D%E7%A6%BB%0A%20%20%20%20%20%20%20%20perpendicular_distances%20%3D%20np.abs(a%20*%20x_data%20-%20y_data%20%2B%20b)%20%2F%20np.sqrt(%0A%20%20%20%20%20%20%20%20%20%20%20%20a**2%20%2B%201%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20std_dev_perpendicular%20%3D%20np.std(perpendicular_distances)%0A%0A%20%20%20%20%20%20%20%20%23%20%E6%89%93%E5%8D%B0%E5%9B%9E%E5%BD%92%E7%BB%93%E6%9E%9C%0A%20%20%20%20%20%20%20%20print(f%22Regression%20equation%3A%20y%20%3D%20%7Ba%3A.2f%7Dx%20%2B%20%7Bb%3A.2f%7D%22)%0A%20%20%20%20%20%20%20%20print(%0A%20%20%20%20%20%20%20%20%20%20%20%20f%22Standard%20deviation%20of%20perpendicular%20distances%3A%20%7Bstd_dev_perpendicular%3A.2f%7D%22%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20%20%20%20%20%23%20%E8%AE%A1%E7%AE%97%E7%BD%AE%E4%BF%A1%E5%8C%BA%E9%97%B4%E8%BE%B9%E7%95%8C%E5%81%8F%E7%A7%BB%E9%87%8F%0A%20%20%20%20%20%20%20%20delta_b_offset%20%3D%20std_dev_perpendicular%20*%20np.sqrt(a**2%20%2B%201)%0A%0A%20%20%20%20%20%20%20%20%23%20%E8%AE%A1%E7%AE%97%E8%BE%B9%E7%95%8C%E7%BA%BF%E7%AB%AF%E7%82%B9%E5%9D%90%E6%A0%87%0A%20%20%20%20%20%20%20%20x_min%2C%20x_max%20%3D%20x_data.min()%2C%20x_data.max()%0A%20%20%20%20%20%20%20%20y_min_upper%20%3D%20a%20*%20x_min%20%2B%20(b%20%2B%20delta_b_offset)%0A%20%20%20%20%20%20%20%20y_min_lower%20%3D%20a%20*%20x_min%20%2B%20(b%20-%20delta_b_offset)%0A%20%20%20%20%20%20%20%20y_max_upper%20%3D%20a%20*%20x_max%20%2B%20(b%20%2B%20delta_b_offset)%0A%20%20%20%20%20%20%20%20y_max_lower%20%3D%20a%20*%20x_max%20%2B%20(b%20-%20delta_b_offset)%0A%0A%20%20%20%20%20%20%20%20%23%20%E8%8E%B7%E5%8F%96z%E8%BD%B4%E8%8C%83%E5%9B%B4%0A%20%20%20%20%20%20%20%20z_min%20%3D%20loaded_data%5B%22Energy%20Consumption%20(kWh%2F100km)%22%5D.astype(float).min()%0A%20%20%20%20%20%20%20%20z_max%20%3D%20loaded_data%5B%22Energy%20Consumption%20(kWh%2F100km)%22%5D.astype(float).max()%0A%0A%20%20%20%20%20%20%20%20%23%20%E5%AE%9A%E4%B9%89%E7%BD%AE%E4%BF%A1%E5%8C%BA%E9%97%B4%E7%AB%8B%E6%96%B9%E4%BD%93%E7%9A%848%E4%B8%AA%E9%A1%B6%E7%82%B9%0A%20%20%20%20%20%20%20%20vertices%20%3D%20np.array(%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Bx_min%2C%20y_min_upper%2C%20z_min%5D%2C%20%20%23%200%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Bx_min%2C%20y_min_upper%2C%20z_max%5D%2C%20%20%23%201%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Bx_min%2C%20y_min_lower%2C%20z_min%5D%2C%20%20%23%202%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Bx_min%2C%20y_min_lower%2C%20z_max%5D%2C%20%20%23%203%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Bx_max%2C%20y_max_upper%2C%20z_min%5D%2C%20%20%23%204%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Bx_max%2C%20y_max_upper%2C%20z_max%5D%2C%20%20%23%205%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Bx_max%2C%20y_max_lower%2C%20z_min%5D%2C%20%20%23%206%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Bx_max%2C%20y_max_lower%2C%20z_max%5D%2C%20%20%23%207%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20%20%20%20%20%23%20%E6%9E%84%E5%BB%BA%E7%BA%BF%E6%A1%86%E6%95%B0%E6%8D%AE%0A%20%20%20%20%20%20%20%20x_lines%2C%20y_lines%2C%20z_lines%20%3D%20%5B%5D%2C%20%5B%5D%2C%20%5B%5D%0A%20%20%20%20%20%20%20%20edges_at_xmin%20%3D%20%5B(0%2C%201)%2C%20(2%2C%203)%2C%20(0%2C%202)%2C%20(1%2C%203)%5D%0A%20%20%20%20%20%20%20%20edges_at_xmax%20%3D%20%5B(4%2C%205)%2C%20(6%2C%207)%2C%20(4%2C%206)%2C%20(5%2C%207)%5D%0A%20%20%20%20%20%20%20%20connecting_edges%20%3D%20%5B(0%2C%204)%2C%20(1%2C%205)%2C%20(2%2C%206)%2C%20(3%2C%207)%5D%0A%0A%20%20%20%20%20%20%20%20%23%20%E8%BF%9E%E6%8E%A5%E6%89%80%E6%9C%89%E8%BE%B9%0A%20%20%20%20%20%20%20%20for%20start_idx%2C%20end_idx%20in%20edges_at_xmin%20%2B%20edges_at_xmax%20%2B%20connecting_edges%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20v_start%20%3D%20vertices%5Bstart_idx%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20v_end%20%3D%20vertices%5Bend_idx%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20x_lines.extend(%5Bv_start%5B0%5D%2C%20v_end%5B0%5D%2C%20None%5D)%0A%20%20%20%20%20%20%20%20%20%20%20%20y_lines.extend(%5Bv_start%5B1%5D%2C%20v_end%5B1%5D%2C%20None%5D)%0A%20%20%20%20%20%20%20%20%20%20%20%20z_lines.extend(%5Bv_start%5B2%5D%2C%20v_end%5B2%5D%2C%20None%5D)%0A%0A%20%20%20%20%20%20%20%20%23%20%E6%B7%BB%E5%8A%A0%E7%BD%AE%E4%BF%A1%E5%8C%BA%E9%97%B4%E7%BA%BF%E6%A1%86%E5%88%B0%E5%9B%BE%E8%A1%A8%0A%20%20%20%20%20%20%20%20confidence_wireframe%20%3D%20go.Scatter3d(%0A%20%20%20%20%20%20%20%20%20%20%20%20opacity%3D0.3%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20x%3Dx_lines%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20y%3Dy_lines%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20z%3Dz_lines%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20mode%3D%22lines%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20line%3Ddict(color%3D%22lightseagreen%22%2C%20width%3D4)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20name%3D%22%C2%B11%CF%83%20Confidence%20Band%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20showlegend%3DTrue%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hoverinfo%3D%22none%22%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20_chart_3d.add_trace(confidence_wireframe)%0A%0A%20%20%20%20%20%20%20%20%23%20%E8%B0%83%E6%95%B4%E7%9B%B8%E6%9C%BA%E8%A7%86%E8%A7%92%0A%20%20%20%20%20%20%20%20_chart_3d.update_layout(%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%20scene%3Ddict(camera%3Ddict(eye%3Ddict(x%3D-0.1%2C%20y%3D0%2C%20z%3D2)))%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20%20%20%20%20%23%20%E8%BF%94%E5%9B%9E%E5%9B%BE%E8%A1%A8%E5%AF%B9%E8%B1%A1%0A%20%20%20%20%20%20%20%20chart_3d%20%3D%20mo.ui.plotly(_chart_3d)%0A%20%20%20%20%20%20%20%20return%20chart_3d%0A%0A%0A%20%20%20%20_()%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20import%20marimo%20as%20mo%0A%20%20%20%20import%20altair%20as%20alt%0A%20%20%20%20import%20pandas%20as%20pd%0A%20%20%20%20import%20numpy%20as%20np%0A%20%20%20%20import%20plotly.express%20as%20px%0A%20%20%20%20import%20plotly.graph_objects%20as%20go%0A%20%20%20%20import%20plotly.io%20as%20pio%0A%20%20%20%20import%20openpyxl%20as%20pxl%0A%20%20%20%20return%20alt%2C%20go%2C%20mo%2C%20np%2C%20pd%2C%20px%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
1a6dd864b988114001e52fcb2fb59c8c019350eea669f3cdd1fd908ca2b4b50b