diff --git a/index.html b/index.html
new file mode 100644
index 0000000..415d232
--- /dev/null
+++ b/index.html
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ polars_intro.py
+
+
+
+
+
+ Polars intro
+
+
+
+
+
+
+
+
+
+ import%20marimo%0A%0A__generated_with%20%3D%20%220.9.4%22%0Aapp%20%3D%20marimo.App(%0A%20%20%20%20app_title%3D%22Polars%20intro%22%2C%0A%20%20%20%20layout_file%3D%22layouts%2Fpolars_intro.slides.json%22%2C%0A%20%20%20%20css_file%3D%22custom.css%22%2C%0A)%0A%0A%0A%40app.cell%0Adef%20__(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20%23%20Intro%20to%20%5Bpolars%5D(https%3A%2F%2Fpola.rs)%0A%0A%20%20%20%20%20%20%20%20A%20brief%20introduction%20to%20the%20incredible%20%60polars%60%20dataframe%20library.%0A%0A%20%20%20%20%20%20%20%20!%5Bpolars%20logo%5D(https%3A%2F%2Fraw.githubusercontent.com%2Fpola-rs%2Fpolars-static%2Fmaster%2Fbanner%2Fpolars_github_banner.svg)%0A%0A%20%20%20%20%20%20%20%20Created%20by%3A%20%5BRyan%20Parker%5D(https%3A%2F%2Fgithub.com%2Frparkr)%2C%20August%202024.%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Aasync%20def%20__(mo)%3A%0A%20%20%20%20from%20pathlib%20import%20Path%0A%0A%20%20%20%20import%20polars%20as%20pl%0A%20%20%20%20import%20download_data%0A%0A%20%20%20%20%23%20Download%20data%0A%20%20%20%20if%20not%20Path(%22data%2F%22).exists%3A%0A%20%20%20%20%20%20%20%20mo.callout(kind%3D%22info%22%2C%20value%3D%22Downloading%20NYC%20Taxi%20and%20weather%20data%22)%0A%20%20%20%20%20%20%20%20await%20download_data.download_data()%0A%20%20%20%20%20%20%20%20download_data.download_weather_data()%0A%20%20%20%20return%20Path%2C%20download_data%2C%20pl%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20__(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20%23%20Data%20analysis%20in%20Python%0A%20%20%20%20%20%20%20%20As%20an%20interpreted%20language%20with%20an%20easy-to-read%20syntax%2C%20Python%20is%20fantastic%20for%20data%20analysis%2C%20where%20rapid%20iteration%20enables%20exploration%20and%20accelerates%20development.%0A%0A%20%20%20%20%20%20%20%20Since%20its%20first%20release%20in%202008%2C%20%5Bpandas%5D(https%3A%2F%2Fpandas.pydata.org%2Fdocs%2F)%20has%20been%20the%20de-facto%20standard%20for%20data%20analysis%20in%20Python%2C%20but%20in%20recent%20years%20other%20libraries%20have%20been%20created%20which%20offer%20distinct%20advantages.%20Some%20of%20those%20include%3A%0A%0A%20%20%20%20%20%20%20%20-%20%5BcuDF%5D(https%3A%2F%2Fdocs.rapids.ai%2Fapi%2Fcudf%2Fstable%2F)%3A%20GPU-accelerated%20dataframe%20operations%20with%20pandas%20API%20support%0A%20%20%20%20%20%20%20%20-%20%5Bmodin%5D(https%3A%2F%2Fmodin.readthedocs.io%2Fen%2Fstable%2F)%3A%20pandas%20API%20running%20on%20distributed%20compute%20using%20%5BRay%5D(https%3A%2F%2Fwww.ray.io%2F)%20or%20%5BDask%5D(https%3A%2F%2Fwww.dask.org%2F)%20as%20a%20backend%0A%20%20%20%20%20%20%20%20-%20%5Bibis%5D(https%3A%2F%2Fibis-project.org%2F)%3A%20dataframe%20library%20supporting%20dozens%20of%20backends%20(including%20pandas%2C%20polars%2C%20DuckDB%2C%20and%20many%20SQL%20databases)%0A%20%20%20%20%20%20%20%20-%20%5BDuckDB%5D(https%3A%2F%2Fduckdb.org%2F)%3A%20in-process%20database%20engine%20for%20running%20SQL%20queries%20on%20local%20or%20remote%20data%0A%20%20%20%20%20%20%20%20-%20%5Btemporian%5D(https%3A%2F%2Ftemporian.readthedocs.io%2Fen%2Fstable%2F)%3A%20efficient%20data%20processing%20for%20timeseries%20data%0A%20%20%20%20%20%20%20%20-%20%5Bpolars%5D(https%3A%2F%2Fpola.rs%2F)%3A%20ultra-fast%20dataframe%20library%20written%20in%20Rust%0A%20%20%20%20%20%20%20%20-%20and%20others...%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20%23%20Polars%20advantages%0A%20%20%20%20%20%20%20%20-%20Easy%20to%20use%0A%20%20%20%20%20%20%20%20-%20Parallelized%20across%20all%20CPU%20cores%0A%20%20%20%20%20%20%20%20-%20Zero%20dependencies%0A%20%20%20%20%20%20%20%20-%20Built%20on%20the%20Apache%20Arrow%20in-memory%20data%20format%3A%20enables%20zero-copy%20interoperability%20with%20other%20libraries%20(e.g.%2C%20DuckDB%2C%20Snowflake)%0A%20%20%20%20%20%20%20%20-%20Handles%20datasets%20larger%20than%20RAM%0A%20%20%20%20%20%20%20%20-%20Powerful%20query%20optimizer%0A%20%20%20%20%20%20%20%20-%20Fully%20compatible%20with%20scikit-learn%20and%20a%20growing%20ecosystem%20of%20other%20libraries%2C%20thanks%20to%20the%20%5BDataframe%20Interchange%20Protocol%5D(https%3A%2F%2Fdata-apis.org%2Fdataframe-protocol%2Flatest%2F)%20and%20%5Bnarwhals%5D(https%3A%2F%2Fgithub.com%2Fnarwhals-dev%2Fnarwhals)%0A%0A%20%20%20%20%20%20%20%20-%20%3Cimg%20src%3D%22https%3A%2F%2Fwww.rust-lang.org%2Fstatic%2Fimages%2Frust-logo-blk.svg%22%20width%3D30%20style%3D%22display%3A%20inline%3B%20vertical-align%3A%20middle%3B%22%3E%20written%20in%20%5BRust%5D(https%3A%2F%2Frust-lang.org)%2C%20a%20compiled%20language%20that%20has%20experienced%20rapid%20adoption%20since%20its%20first%20stable%20release%20in%202015%20thanks%20to%20its%20C%2FC%2B%2B%20performance%2C%20concurrency%2C%20and%20memory%20safety%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20%23%20Key%20concepts%0A%0A%20%20%20%20%20%20%20%20Polars%20uses%20the%20Apache%20Arrow%20in-memory%20data%20format%2C%20which%20is%20column-oriented.%20The%20primary%20data%20structures%20for%20polars%20are%20Series%20and%20DataFrames%2C%20similar%20to%20pandas.%0A%0A%20%20%20%20%20%20%20%20Apache%20Arrow%20supports%20many%20useful%20data%20types%20(many%20more%20than%20those%20which%20are%20supported%20by%20NumPy)%2C%20so%20you%20can%20perform%20fast%2C%20vectorized%20operations%20on%20all%20kinds%20of%20data%20(nested%20JSON%20%60structs%60%2C%20strings%2C%20datetimes%2C%20etc.)%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20%23%23%20Contexts%0A%20%20%20%20%20%20%20%20In%20Polars%2C%20a%20_context_%20refers%20to%20the%20data%20available%20to%20operate%20on.%0A%0A%20%20%20%20%20%20%20%20The%20primary%20contexts%20are%3A%0A%0A%20%20%20%20%20%20%20%20**Selection**%3A%0A%0A%20%20%20%20%20%20%20%20-%20%60.select()%60%3A%20choose%20a%20subset%20of%20columns%20and%20perform%20operations%20on%20them%0A%20%20%20%20%20%20%20%20-%20%60.with_columns()%60%3A%20add%20to%20the%20columns%20already%20available%0A%0A%20%20%20%20%20%20%20%20**Filtering**%3A%0A%0A%20%20%20%20%20%20%20%20-%20%60.filter()%60%3A%20filter%20the%20data%20using%20boolean%20conditions%20on%20row%20values%0A%0A%20%20%20%20%20%20%20%20**Aggregation**%3A%0A%0A%20%20%20%20%20%20%20%20-%20%60.group_by()%60%3A%20perform%20aggregations%20on%20groups%20of%20values%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20%23%23%20Expressions%0A%0A%20%20%20%20%20%20%20%20_Expressions_%20are%20the%20operations%20performed%20in%20Polars%2C%20things%20like%3A%0A%0A%20%20%20%20%20%20%20%20-%20%60.sum()%60%0A%20%20%20%20%20%20%20%20-%20%60.len()%60%0A%20%20%20%20%20%20%20%20-%20%60.mean().over()...%60%0A%20%20%20%20%20%20%20%20-%20%60when().then().otherwise()%60%0A%20%20%20%20%20%20%20%20-%20%60.str.replace()%60%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20%23%23%20Lazy%20vs.%20Eager%20mode%0A%20%20%20%20%20%20%20%20-%20%60scan_csv()%60%20vs.%20%60read_csv()%60%0A%0A%20%20%20%20%20%20%20%20%23%23%23%20Recommendation%3A%20use%20Lazy%20mode%0A%20%20%20%20%20%20%20%20-%20In%20Lazy%20mode%2C%20Polars%20will%20optimize%20the%20query%20plan%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__(mo)%3A%0A%20%20%20%20mo.vstack(%0A%20%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%23%20Plugin%20ecosystem%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20You%20can%20create%20custom%20expressions%20to%20use%20in%20Polars%2C%20which%20will%20also%20be%20vectorized%20and%20run%20in%20parallel%20like%20standard%20Polars%20expressions.%20If%20there's%20an%20operation%20you'd%20like%20to%20run%20on%20your%20data%2C%20chances%20are%20someone%20has%20already%20implemented%20it%20and%20it's%20just%20a%20%60pip%20install%60%20away.%20Here%20are%20%5Bsome%20examples%5D(https%3A%2F%2Fdocs.pola.rs%2Fuser-guide%2Fexpressions%2Fplugins%2F%23community-plugins)...%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%22%22%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%20mo.accordion(%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%20%22%23%23%23%20%5B%60polars_ds%60%5D(https%3A%2F%2Fgithub.com%2Fabstractqqq%2Fpolars_ds_extension)%22%3A%20(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Polars%20extension%20for%20data%20science%20tasks%0A%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-%20A%20combination%20of%20functions%20and%20operations%20from%20scikit-learn%2C%20SciPy%2C%20and%20edit%20distance%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-%20Polars%20is%20the%20only%20dependency%20(unless%20you%20want%20to%20create%20plots%3B%20that%20adds%20Plotly%20as%20a%20dependency)%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-%20Can%20create%20bar%20plots%20within%20dataframe%20outputs%20(HTML%20%60__repr__%60%20in%20a%20notebook)%20--%20like%20sparklines%2C%20and%20similar%20to%20what%20is%20available%20in%20pandas'%20advanced%20dataframe%20styling%20options%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%22%22%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%20%20%20%20%22%23%23%23%20%5B%60polars_distance%60%5D(https%3A%2F%2Fgithub.com%2Fion-elgreco%2Fpolars-distance)%22%3A%20(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Distance%20calculations%20(e.g.%2C%20word%20similarity)%20in%20polars.%20Also%20includes%20haversine%20distance%20(lat%2Flon)%2C%20cosine%20similarity%2C%20etc.%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%22%22%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%20%20%20%20%22%23%23%23%20%5B%60polars_reverse_geocode%60%5D(https%3A%2F%2Fgithub.com%2FMarcoGorelli%2Fpolars-reverse-geocode)%22%3A%20(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Offline%20reverse%20geocoding%3A%20find%20a%20city%20based%20on%20provided%20lat%2Flon%3B%20using%20an%20offline%20lookup%20table%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%22%22%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%20%20%20%20%22%23%23%23%20Tutorial%3A%20%5Bhow%20to%20create%20a%20polars%20plugin%5D(https%3A%2F%2Fmarcogorelli.github.io%2Fpolars-plugins-tutorial%2F)%22%3A%20(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20You%20can%20create%20your%20own%20plugin!%20This%20tutorial%20teaches%20you%20enough%20Rust%20to%20write%20a%20polars%20plugin%2C%20which%20can%20published%20to%20PyPI%20and%20installed%20by%20other%20Polars%20users.%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%22%22%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%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20%23%20Final%20thoughts%0A%0A%20%20%20%20%20%20%20%20%23%23%20Upgrade%20weekly%0A%20%20%20%20%20%20%20%20%E2%AD%90%20Polars%20development%20%5Badvances%20rapidly%5D(https%3A%2F%2Fgithub.com%2Fpola-rs%2Fpolars%2Freleases)%2C%20so%20I%20recommend%20upgrading%20often%20(weekly)%20to%20get%20the%20latest%20features%0A%0A%20%20%20%20%20%20%20%20%23%23%20Try%20it%20out%0A%20%20%20%20%20%20%20%20The%20best%20way%20to%20learn%20is%20by%20doing.%20Try%20using%20Polars%20any%20time%20you%20create%20a%20new%20notebook%20or%20start%20a%20new%20project.%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20%23%20Resources%0A%20%20%20%20%20%20%20%20-%20%5BPolars%20user%20guide%5D(https%3A%2F%2Fdocs.pola.rs%2Fuser-guide%2Fmigration%2Fpandas%2F)%3A%20fantastic%20guide%20to%20learning%20Polars%20alongside%20helpful%20explanations%0A%20%20%20%20%20%20%20%20-%20%5BComing%20from%20%60pandas%60%5D(https%3A%2F%2Fdocs.pola.rs%2Fuser-guide%2Fmigration%2Fpandas%2F)%3A%20are%20you%20familiar%20with%20%60pandas%60%20and%20want%20to%20learn%20the%20differences%20you'll%20notice%20when%20switching%20to%20polars%3F%20This%20guide%20translates%20common%20concepts%20to%20help%20you.%0A%20%20%20%20%20%20%20%20%20%20-%20%5BThis%20series%20of%20articles%20from%202022%5D(https%3A%2F%2Fkevinheavey.github.io%2Fmodern-polars%2F)%20demonstrates%20some%20operations%20in%20pandas%20and%20polars%2C%20side-by-side.%20_Polars%20development%20advances%20rapidly%2C%20so%20many%20of%20the%20concepts%20covered%20in%20that%20series%20are%20already%20different.%20Still%20it%20will%20help%20you%20get%20a%20general%20feel%20for%20the%20flow%20of%20using%20Polars%20compared%20to%20pandas._%0A%20%20%20%20%20%20%20%20-%20%5BPolars%20Python%20API%5D(https%3A%2F%2Fdocs.pola.rs%2Fapi%2Fpython%2Fstable%2Freference%2Findex.html)%3A%20detailed%20info%20on%20every%20expression%2C%20method%2C%20and%20function%20in%20Polars.%20I%20recommend%20browsing%20this%20list%20to%20get%20a%20feel%20for%20what%20Polars%20can%20do.%0A%20%20%20%20%20%20%20%20%22%22%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.vstack(%0A%20%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%20Demo%0A%20%20%20%20In%20this%20section%2C%20I%20demonstrate%20basic%20Polars%20usage%20on%20the%20NYC%20Taxi%20Yellow%20Cab%20dataset.%20You%20can%20find%20more%20information%20about%20that%20dataset%20on%20the%20%5BNYC%20Trip%20Record%20Data%20page%5D(https%3A%2F%2Fwww.nyc.gov%2Fsite%2Ftlc%2Fabout%2Ftlc-trip-record-data.page).%0A%20%20%20%20%22%22%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.accordion(%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%20%22%23%23%20Data%20dictionary%20(from%20the%20%5BPDF%20file%20published%20by%20NYC%20Trip%20Record%20Data%5D(https%3A%2F%2Fwww.nyc.gov%2Fassets%2Ftlc%2Fdownloads%2Fpdf%2Fdata_dictionary_trip_records_yellow.pdf))%22%3A%20r%22%22%22%0A%20%20%20%201.%20**VendorID**%3A%20A%20code%20indicating%20the%20TPEP%20provider%20that%20provided%20the%20record.%201%3D%20Creative%20Mobile%20Technologies%2C%20LLC%3B%202%3D%20VeriFone%20Inc.%0A%20%20%20%202.%20**tpep_pickup_datetime**%3A%20The%20date%20and%20time%20when%20the%20meter%20was%20engaged%0A%20%20%20%203.%20**tpep_dropoff_datetime**%3A%20The%20date%20and%20time%20when%20the%20meter%20was%20disengaged%0A%20%20%20%204.%20**Passenger_count**%3A%20The%20number%20of%20passengers%20in%20the%20vehicle.%20This%20is%20a%20driver-entered%20value.%0A%20%20%20%205.%20**Trip_distance**%3A%20The%20elapsed%20trip%20distance%20in%20miles%20reported%20by%20the%20taximeter%0A%20%20%20%206.%20**PULocationID**%3A%20TLC%20Taxi%20Zone%20in%20which%20the%20taximeter%20was%20engaged%0A%20%20%20%20%20%20%20%20-%20%5BSee%20here%5D(http%3A%2F%2Fwww.nyc.gov%2Fhtml%2Ftlc%2Fhtml%2Fabout%2Ftrip_record_data.shtml)%20for%20a%20map%20of%20the%20TLC%20Taxi%20Zones%0A%20%20%20%207.%20**DOLocationID**%3A%20TLC%20Taxi%20Zone%20in%20which%20the%20taximeter%20was%20disengaged%0A%20%20%20%208.%20**RateCodeID**%3A%20The%20final%20rate%20code%20in%20effect%20at%20the%20end%20of%20the%20trip.%0A%20%20%20%20%20%20%20%20-%201%20%3D%20Standard%20rate%0A%20%20%20%20%20%20%20%20-%202%20%3D%20JFK%0A%20%20%20%20%20%20%20%20-%203%20%3D%20Newark%0A%20%20%20%20%20%20%20%20-%204%20%3D%20Nassau%20or%20Westchester%0A%20%20%20%20%20%20%20%20-%205%20%3D%20Negotiated%20fare%0A%20%20%20%20%20%20%20%20-%206%20%3D%20Group%20ride%0A%20%20%20%209.%20**Store_and_fwd_flag**%3A%20This%20flag%20indicates%20whether%20the%20trip%20record%20was%20held%20in%20vehicle%20memory%20before%20sending%20to%20the%20vendor%2C%20aka%20%E2%80%9Cstore%20and%20forward%2C%E2%80%9D%20because%20the%20vehicle%20did%20not%20have%20a%20connection%20to%20the%20server%0A%20%20%20%20%20%20%20%20-%20Y%20%3D%20store%20and%20forward%20trip%0A%20%20%20%20%20%20%20%20-%20N%20%3D%20not%20a%20store%20and%20forward%20trip%0A%20%20%20%2010.%20**Payment_type**%3A%20A%20numeric%20code%20signifying%20how%20the%20passenger%20paid%20for%20the%20trip%0A%20%20%20%20%20%20%20%20-%201%20%3D%20Credit%20card%0A%20%20%20%20%20%20%20%20-%202%20%3D%20Cash%0A%20%20%20%20%20%20%20%20-%203%20%3D%20No%20charge%0A%20%20%20%20%20%20%20%20-%204%20%3D%20Dispute%0A%20%20%20%20%20%20%20%20-%205%20%3D%20Unknown%0A%20%20%20%20%20%20%20%20-%206%20%3D%20Voided%20trip%0A%20%20%20%2011.%20**Fare_amount**%3A%20The%20time-and-distance%20fare%20calculated%20by%20the%20meter%0A%20%20%20%2012.%20**Extra**%3A%20Miscellaneous%20extras%20and%20surcharges.%20Currently%2C%20this%20only%20includes%20the%20%240.50%20and%20%241%20rush%20hour%20and%20overnight%20charges.%0A%20%20%20%2013.%20**MTA_tax**%3A%20%240.50%20MTA%20tax%20that%20is%20automatically%20triggered%20based%20on%20the%20metered%20rate%20in%20use%0A%20%20%20%2014.%20**Improvement_surcharge**%3A%20%240.30%20improvement%20surcharge%20assessed%20trips%20at%20the%20flag%20drop.%20The%20improvement%20surcharge%20began%20being%20levied%20in%202015.%0A%20%20%20%2015.%20**Tip_amount**%3A%20Tip%20amount%20%E2%80%93%20This%20field%20is%20automatically%20populated%20for%20credit%20card%20tips.%20Cash%20tips%20are%20not%20included.%0A%20%20%20%2016.%20**Tolls_amount**%3A%20Total%20amount%20of%20all%20tolls%20paid%20in%20trip.%0A%20%20%20%2017.%20**Total_amount**%3A%20The%20total%20amount%20charged%20to%20passengers.%20Does%20not%20include%20cash%20tips%0A%20%20%20%2018.%20**Congestion_Surcharge**%3A%20Total%20amount%20collected%20in%20trip%20for%20NYS%20congestion%20surcharge.%0A%20%20%20%2019.%20**Airport_fee**%3A%20%241.25%20for%20pick%20up%20only%20at%20LaGuardia%20and%20John%20F.%20Kennedy%20Airports%0A%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20%23%23%20Lazy-load%20the%20data%0A%20%20%20%20%20%20%20%20Polars%20can%20read%20Parquet%20files%20(local%20or%20hosted%20on%20a%20network)%2C%20determine%20their%20schema%20(columns%20and%20data%20types)%2C%20apply%20filter%20pushdowns%2C%20and%20download%20only%20the%20data%20that%20is%20needed%20for%20the%20operations%20being%20performed.%0A%0A%20%20%20%20%20%20%20%20%60%60%60python%0A%20%20%20%20%20%20%20%20import%20polars%20as%20pl%0A%0A%20%20%20%20%20%20%20%20%23%20Create%20a%20dataframe%20from%20a%20collection%20of%20parquet%20files%0A%20%20%20%20%20%20%20%20df%20%3D%20pl.scan_parquet(%22data%2Fyellow_tripdata_*.parquet)%0A%20%20%20%20%20%20%20%20%60%60%60%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__(mo%2C%20pl)%3A%0A%20%20%20%20_md%20%3D%20mo.md(%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20Let's%20check%20the%20schema%3A%0A%0A%20%20%20%20%20%20%20%20%60%60%60python%0A%20%20%20%20%20%20%20%20%23%20Polars%20will%20scan%20the%20data%20and%20return%0A%20%20%20%20%20%20%20%20%23%20the%20column%20names%20and%20datatypes%0A%20%20%20%20%20%20%20%20df.collect_schema()%0A%0A%20%20%20%20%20%20%20%20%23%20If%20the%20file%20is%20stored%20locally%2C%20you%20can%0A%20%20%20%20%20%20%20%20%23%20also%20read%20the%20schema%20without%20collecting%20fist%0A%20%20%20%20%20%20%20%20pl.read_parquet_schema(%22path%2Fto%2Fa%2Flocal%2Ffile.parquet%22)%0A%20%20%20%20%20%20%20%20%60%60%60%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%0A%20%20%20%20%23%20Create%20a%20LazyFrame%20that%20will%20use%20the%20data%20from%20all%20the%20files%20specified%20above%0A%20%20%20%20df%20%3D%20pl.scan_parquet(%22data%2Fyellow_tripdata_*.parquet%22)%0A%20%20%20%20_output%20%3D%20mo.plain(df.collect_schema())%0A%20%20%20%20mo.vstack(%5B_md%2C%20_output%5D)%0A%20%20%20%20return%20(df%2C)%0A%0A%0A%40app.cell%0Adef%20__(df%2C%20mo%2C%20pl)%3A%0A%20%20%20%20_md%20%3D%20mo.md(%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20**Preview%20the%20first%20few%20rows%3A**%0A%0A%20%20%20%20%20%20%20%20%60%60%60python%0A%20%20%20%20%20%20%20%20df.head(n%3D10)%0A%20%20%20%20%20%20%20%20%60%60%60%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%0A%20%20%20%20with%20pl.Config(tbl_cols%3D20%2C%20tbl_width_chars%3D1000%2C%20thousands_separator%3DTrue)%3A%0A%20%20%20%20%20%20%20%20_output%20%3D%20mo.plain_text(df.head(n%3D10).collect())%0A%0A%20%20%20%20mo.vstack(%5B_md%2C%20_output%5D)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__(df%2C%20mo%2C%20pl)%3A%0A%20%20%20%20_md%20%3D%20mo.md(%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20**You%20can%20also%20preview%20the%20first%20few%20rows%20like%20this%3A**%0A%0A%20%20%20%20%20%20%20%20%60%60%60python%0A%20%20%20%20%20%20%20%20df.collect().glimpse()%0A%20%20%20%20%20%20%20%20%60%60%60%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%0A%20%20%20%20with%20pl.Config(tbl_cols%3D20%2C%20tbl_width_chars%3D1000%2C%20thousands_separator%3DTrue)%3A%0A%20%20%20%20%20%20%20%20_output%20%3D%20mo.plain_text(df.collect().glimpse())%0A%0A%20%20%20%20mo.vstack(%5B_md%5D)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__(df%2C%20mo%2C%20pl)%3A%0A%20%20%20%20_md%20%3D%20mo.md(%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20%23%23%20Explore%20the%20data%0A%0A%20%20%20%20%20%20%20%20**Find%20the%20average%20cost%20per%20trip%2C%20by%20month**%0A%0A%20%20%20%20%20%20%20%20Note%20that%20the%20operations%20below%20are%20performed%20in%20parallel%20across%20all%20available%20CPU%20cores%2C%20and%20that%20only%20the%20data%20needed%20will%20be%20downloaded.%0A%0A%20%20%20%20%20%20%20%20In%20this%20case%2C%20since%20I%20have%20filtered%20to%203%20months%2C%20only%20the%20files%20with%20those%20months%20of%20data%20will%20be%20accessed.%20Also%20notice%20that%20only%205%20columns%20are%20accessed%2C%20since%20those%20are%20the%20ones%20I%20have%20requested.%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%0A%20%20%20%20_accordion%20%3D%20mo.accordion(%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22Here's%20a%20way%20we%20could%20answer%20this%20question%20in%20Polars%22%3A%20mo.md(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20r%22%22%22%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Let's%20see%20this%20in%20Polars%3A%0A%20%20%20%20%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%20%20%20%20%60%60%60python%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20query_plan%20%3D%20(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20df.filter(pl.col(%22tpep_pickup_datetime%22).dt.month()%20%3C%3D%203)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.group_by(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20month%3Dpl.col(%22tpep_pickup_datetime%22).dt.strftime(%22%25Y-%25m%22)%0A%20%20%20%20%20%20%20%20%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%20%20%20%20%20%20%20%20.agg(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20num_trips%3Dpl.len()%2C%20%20%23%20count%20the%20number%20of%20trips%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20cost_per_trip%3Dpl.col(%22total_amount%22).mean()%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%20avg_passengers_per_trip%3Dpl.col(%22passenger_count%22).mean()%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%20avg_distance%3Dpl.col(%22trip_distance%22).mean()%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%20num_airport_trips%3D(pl.col(%22Airport_fee%22)%20%3E%200).sum()%2C%0A%20%20%20%20%20%20%20%20%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%20%20%20%20)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%60%60%60%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%22%22%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%20%22Let's%20see%20how%20Polars%20will%20optimize%20this%20query%22%3A%20mo.md(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%60%60%60python%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%23%20This%20is%20what%20Polars%20will%20execute%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20query_plan.explain()%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%60%60%60%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%22%22%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%20%22You%20can%20also%20run%20this%20in%20streaming%20mode%20for%20memory-constrained%20environments%22%3A%20mo.md(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%60%60%60python%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20query_plan.explain(streaming%3DTrue)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%60%60%60%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20)%0A%0A%0A%20%20%20%20query_plan%20%3D%20(%0A%20%20%20%20%20%20%20%20df.filter(pl.col(%22tpep_pickup_datetime%22).dt.month()%20%3C%3D%203)%0A%20%20%20%20%20%20%20%20.group_by(month%3Dpl.col(%22tpep_pickup_datetime%22).dt.strftime(%22%25Y-%25m%22))%0A%20%20%20%20%20%20%20%20.agg(%0A%20%20%20%20%20%20%20%20%20%20%20%20num_trips%3Dpl.len()%2C%20%20%23%20count%20the%20number%20of%20trips%0A%20%20%20%20%20%20%20%20%20%20%20%20cost_per_trip%3Dpl.col(%22total_amount%22).mean()%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20avg_passengers_per_trip%3Dpl.col(%22passenger_count%22).mean()%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20avg_distance%3Dpl.col(%22trip_distance%22).mean()%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20num_airport_trips%3D(pl.col(%22Airport_fee%22)%20%3E%200).sum()%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20)%0A%0A%20%20%20%20_output%20%3D%20mo.plain_text(query_plan.explain())%0A%20%20%20%20_md2%20%3D%20mo.md(%22**Here's%20the%20streaming%20version%3A**%22)%0A%20%20%20%20_output_with_streaming%20%3D%20mo.plain_text(query_plan.explain(streaming%3DTrue))%0A%0A%20%20%20%20mo.vstack(%5B_md%2C%20_accordion%2C%20_output%2C%20_md2%2C%20_output_with_streaming%5D)%0A%20%20%20%20return%20(query_plan%2C)%0A%0A%0A%40app.cell%0Adef%20__(mo%2C%20pl%2C%20query_plan)%3A%0A%20%20%20%20_md%20%3D%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20%23%23%23%20Collect%20the%20data%0A%0A%20%20%20%20%20%20%20%20%60%60%60python%0A%20%20%20%20%20%20%20%20df_avg%20%3D%20query_plan.collect().sort(by%3Dpl.col(%22month%22))%0A%20%20%20%20%20%20%20%20%60%60%60%0A%0A%20%20%20%20%20%20%20%20Some%20options%20to%20%60.collect()%60%3A%20engine%3D%22cpu%22%2C%20streaming%3DFalse%2C%20background%3DFalse%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%0A%20%20%20%20df_avg%20%3D%20query_plan.collect().sort(by%3Dpl.col(%22month%22))%0A%0A%20%20%20%20with%20pl.Config(tbl_cols%3D20%2C%20tbl_width_chars%3D1000%2C%20thousands_separator%3DTrue)%3A%0A%20%20%20%20%20%20%20%20_output%20%3D%20mo.plain_text(df_avg)%0A%0A%20%20%20%20mo.vstack(%5B_md%2C%20_output%5D)%0A%20%20%20%20return%20(df_avg%2C)%0A%0A%0A%40app.cell%0Adef%20__()%3A%0A%20%20%20%20import%20marimo%20as%20mo%0A%20%20%20%20return%20(mo%2C)%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
+
+
+2d6d409acdb5266a4c492c5952fe33329ff4668342f9d9fa74662a6e16b8f21a
+
+