import%20marimo%0A%0A__generated_with%20%3D%20%220.13.7%22%0Aapp%20%3D%20marimo.App()%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20marimo%20as%20mo%0A%0A%20%20%20%20return%20(mo%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%20Polars%20vs.%20Pandas%3A%20A%20Fast%2C%20Multi-Core%20Alternative%20for%20DataFrames%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%23%20Setup%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20numpy%20as%20np%0A%20%20%20%20import%20pandas%20as%20pd%0A%0A%20%20%20%20%23%20Create%20a%20large%20dataset%0A%20%20%20%20n_rows%20%3D%2010_000_000%0A%20%20%20%20data%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%22category%22%3A%20np.random.choice(%5B%22A%22%2C%20%22B%22%2C%20%22C%22%2C%20%22D%22%5D%2C%20size%3Dn_rows)%2C%0A%20%20%20%20%20%20%20%20%22value%22%3A%20np.random.rand(n_rows)%20*%201000%2C%0A%20%20%20%20%7D%0A%20%20%20%20df%20%3D%20pd.DataFrame(data)%0A%20%20%20%20df.head(10)%0A%20%20%20%20return%20df%2C%20pd%0A%0A%0A%40app.cell%0Adef%20_(df)%3A%0A%20%20%20%20df.to_csv(%22large_file.csv%22%2C%20index%3DFalse)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%23%20Multi-Core%20Performance%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20time%0A%20%20%20%20from%20functools%20import%20wraps%0A%0A%20%20%20%20def%20timeit(operation_name)%3A%0A%20%20%20%20%20%20%20%20def%20decorator(func)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%40wraps(func)%0A%20%20%20%20%20%20%20%20%20%20%20%20def%20wrapper(*args%2C%20**kwargs)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20start_time%20%3D%20time.time()%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20result%20%3D%20func(*args%2C%20**kwargs)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20end_time%20%3D%20time.time()%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20execution_time%20%3D%20end_time%20-%20start_time%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20print(f%22%7Boperation_name%7D%20took%20%7Bexecution_time%3A.2f%7D%20seconds%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20result%2C%20execution_time%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20wrapper%0A%0A%20%20%20%20%20%20%20%20return%20decorator%0A%0A%20%20%20%20return%20(timeit%2C)%0A%0A%0A%40app.cell%0Adef%20create_comparison_plot()%3A%0A%20%20%20%20import%20matplotlib.pyplot%20as%20plt%0A%20%20%20%20import%20seaborn%20as%20sns%0A%0A%20%20%20%20def%20create_comparison_plot(pandas_time%2C%20polars_time%2C%20title)%3A%0A%20%20%20%20%20%20%20%20%23%20Set%20style%20for%20this%20plot%0A%20%20%20%20%20%20%20%20sns.set(style%3D%22whitegrid%22)%0A%20%20%20%20%20%20%20%20plt.style.use(%22dark_background%22)%0A%20%20%20%20%20%20%20%20plt.rcParams.update(%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%22axes.facecolor%22%3A%20%22%232F2D2E%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22figure.facecolor%22%3A%20%22%232F2D2E%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22axes.labelcolor%22%3A%20%22white%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22xtick.color%22%3A%20%22white%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22ytick.color%22%3A%20%22white%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22text.color%22%3A%20%22white%22%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%20Create%20the%20plot%0A%20%20%20%20%20%20%20%20sns.barplot(%0A%20%20%20%20%20%20%20%20%20%20%20%20hue%3D%5B%22Pandas%22%2C%20%22Polars%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20y%3D%5Bpandas_time%2C%20polars_time%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20palette%3D%5B%22%23E583B6%22%2C%20%22%2372BEFA%22%5D%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20plt.title(f%22%7Btitle%7D%20(seconds)%22)%0A%20%20%20%20%20%20%20%20plt.ylabel(%22Time%20(s)%22)%0A%20%20%20%20%20%20%20%20plt.show()%0A%0A%20%20%20%20return%20(create_comparison_plot%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%23%23%20Reading%20Data%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(pd%2C%20timeit)%3A%0A%20%20%20%20%40timeit(%22Pandas%20read_csv%22)%0A%20%20%20%20def%20read_pandas()%3A%0A%20%20%20%20%20%20%20%20return%20pd.read_csv(%22large_file.csv%22)%0A%0A%20%20%20%20pandas_df%2C%20pandas_read_time%20%3D%20read_pandas()%0A%20%20%20%20return%20pandas_df%2C%20pandas_read_time%0A%0A%0A%40app.cell%0Adef%20_(timeit)%3A%0A%20%20%20%20import%20polars%20as%20pl%0A%0A%20%20%20%20%40timeit(%22Polars%20read_csv%22)%0A%20%20%20%20def%20read_polars()%3A%0A%20%20%20%20%20%20%20%20return%20pl.read_csv(%22large_file.csv%22)%0A%0A%20%20%20%20polars_df%2C%20polars_read_time%20%3D%20read_polars()%0A%20%20%20%20return%20pl%2C%20polars_df%2C%20polars_read_time%0A%0A%0A%40app.cell%0Adef%20_(create_comparison_plot%2C%20pandas_read_time%2C%20polars_read_time)%3A%0A%20%20%20%20create_comparison_plot(pandas_read_time%2C%20polars_read_time%2C%20%22CSV%20Read%20Time%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%23%23%20Groupby%20Mean%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(pandas_df%2C%20timeit)%3A%0A%20%20%20%20%40timeit(%22Pandas%20groupby%22)%0A%20%20%20%20def%20pandas_groupby(df)%3A%0A%20%20%20%20%20%20%20%20return%20df.groupby(%22category%22)%5B%22value%22%5D.mean()%0A%0A%20%20%20%20pandas_result%2C%20pandas_groupby_time%20%3D%20pandas_groupby(pandas_df)%0A%20%20%20%20return%20(pandas_groupby_time%2C)%0A%0A%0A%40app.cell%0Adef%20_(pl%2C%20polars_df%2C%20timeit)%3A%0A%20%20%20%20%40timeit(%22Polars%20groupby%22)%0A%20%20%20%20def%20polars_groupby(df)%3A%0A%20%20%20%20%20%20%20%20return%20df.group_by(%22category%22).agg(pl.col(%22value%22).mean())%0A%0A%20%20%20%20polars_result%2C%20polars_groupby_time%20%3D%20polars_groupby(polars_df)%0A%20%20%20%20return%20(polars_groupby_time%2C)%0A%0A%0A%40app.cell%0Adef%20_(create_comparison_plot%2C%20pandas_groupby_time%2C%20polars_groupby_time)%3A%0A%20%20%20%20create_comparison_plot(%0A%20%20%20%20%20%20%20%20pandas_groupby_time%2C%20polars_groupby_time%2C%20%22Groupby%20Mean%20Time%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%23%23%20Filter%20Rows%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(pandas_df%2C%20timeit)%3A%0A%20%20%20%20%40timeit(%22Pandas%20filter%22)%0A%20%20%20%20def%20pandas_filter(df)%3A%0A%20%20%20%20%20%20%20%20return%20df%5Bdf%5B%22value%22%5D%20%3E%20500%5D%0A%0A%20%20%20%20pandas_filtered%2C%20pandas_filter_time%20%3D%20pandas_filter(pandas_df)%0A%20%20%20%20return%20(pandas_filter_time%2C)%0A%0A%0A%40app.cell%0Adef%20_(pl%2C%20polars_df%2C%20timeit)%3A%0A%20%20%20%20%40timeit(%22Polars%20filter%22)%0A%20%20%20%20def%20polars_filter(df)%3A%0A%20%20%20%20%20%20%20%20return%20df.filter(pl.col(%22value%22)%20%3E%20500)%0A%0A%20%20%20%20polars_filtered%2C%20polars_filter_time%20%3D%20polars_filter(polars_df)%0A%20%20%20%20return%20(polars_filter_time%2C)%0A%0A%0A%40app.cell%0Adef%20_(create_comparison_plot%2C%20pandas_filter_time%2C%20polars_filter_time)%3A%0A%20%20%20%20create_comparison_plot(pandas_filter_time%2C%20polars_filter_time%2C%20%22Filter%20Rows%20Time%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%23%23%20Sort%20by%20Column%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(pandas_df%2C%20timeit)%3A%0A%20%20%20%20%40timeit(%22Pandas%20sort%22)%0A%20%20%20%20def%20pandas_sort(df)%3A%0A%20%20%20%20%20%20%20%20return%20df.sort_values(%22value%22)%0A%0A%20%20%20%20pandas_sorted%2C%20pandas_sort_time%20%3D%20pandas_sort(pandas_df)%0A%20%20%20%20return%20(pandas_sort_time%2C)%0A%0A%0A%40app.cell%0Adef%20_(polars_df%2C%20timeit)%3A%0A%20%20%20%20%40timeit(%22Polars%20sort%22)%0A%20%20%20%20def%20polars_sort(df)%3A%0A%20%20%20%20%20%20%20%20return%20df.sort(%22value%22)%0A%0A%20%20%20%20polars_sorted%2C%20polars_sort_time%20%3D%20polars_sort(polars_df)%0A%20%20%20%20return%20(polars_sort_time%2C)%0A%0A%0A%40app.cell%0Adef%20_(create_comparison_plot%2C%20pandas_sort_time%2C%20polars_sort_time)%3A%0A%20%20%20%20create_comparison_plot(pandas_sort_time%2C%20polars_sort_time%2C%20%22Sort%20Time%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%23%20Lazy%20Evaluation%20(Only%20in%20Polars)%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(pl)%3A%0A%20%20%20%20query%20%3D%20(%0A%20%20%20%20%20%20%20%20pl.read_csv(%22large_file.csv%22).lazy()%0A%20%20%20%20%20%20%20%20.group_by(%22category%22)%0A%20%20%20%20%20%20%20%20.agg(pl.col(%22value%22).mean().alias(%22avg_value%22))%0A%20%20%20%20%20%20%20%20.filter(pl.col(%22avg_value%22)%20%3E%20100)%0A%20%20%20%20)%0A%0A%20%20%20%20print(query.explain())%0A%20%20%20%20return%20(query%2C)%0A%0A%0A%40app.cell%0Adef%20_(query)%3A%0A%20%20%20%20result%20%3D%20query.collect()%0A%20%20%20%20print(result.head())%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%23%20Syntax%20Comparison%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%23%23%20Filtering%20rows%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(pandas_df)%3A%0A%20%20%20%20pandas_filtered_rows_df%20%3D%20pandas_df%5Bpandas_df%5B%22value%22%5D%20%3E%20100%5D%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(pl%2C%20polars_df)%3A%0A%20%20%20%20polars_filtered_rows_df%20%3D%20polars_df.filter(pl.col(%22value%22)%20%3E%20100)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%23%23%20Selecting%20columns%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(pandas_df)%3A%0A%20%20%20%20pandas_selected_columns_df%20%3D%20pandas_df%5B%5B%22category%22%2C%20%22value%22%5D%5D%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(polars_df)%3A%0A%20%20%20%20polars_selected_columns_df%20%3D%20polars_df.select(%5B%22category%22%2C%20%22value%22%5D)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%23%23%20Chained%20operations%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(pandas_df)%3A%0A%20%20%20%20pandas_chained_operations_df%20%3D%20pandas_df%5Bpandas_df%5B%22value%22%5D%20%3E%201000%5D%0A%20%20%20%20pandas_chained_operations_df%20%3D%20(%0A%20%20%20%20%20%20%20%20pandas_chained_operations_df.groupby(%22category%22)%5B%22value%22%5D.mean().reset_index()%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(pl%2C%20polars_df)%3A%0A%20%20%20%20polars_chained_operations_df%20%3D%20polars_df.filter(pl.col(%22value%22)%20%3E%201000)%0A%20%20%20%20polars_chained_operations_df%20%3D%20polars_chained_operations_df.group_by(%0A%20%20%20%20%20%20%20%20%22category%22%0A%20%20%20%20).agg(pl.col(%22value%22).mean().alias(%22avg_value%22))%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%23%23%20Memory%20Efficiency%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(pandas_df%2C%20polars_df)%3A%0A%20%20%20%20pandas_memory%20%3D%20pandas_df.memory_usage(deep%3DTrue).sum()%20%2F%201000000.0%0A%20%20%20%20polars_memory%20%3D%20polars_df.estimated_size()%20%2F%201000000.0%0A%0A%20%20%20%20print(f%22Pandas%20DataFrame%20memory%20usage%3A%20%7Bpandas_memory%3A.2f%7D%20MB%22)%0A%20%20%20%20print(f%22Polars%20DataFrame%20estimated%20size%3A%20%7Bpolars_memory%3A.2f%7D%20MB%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20return%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
24b12ca56478f6e1c95ddb35e813125aa28562878c96f6d9d8db2cf2b01bfd0e