import%20marimo%0A%0A__generated_with%20%3D%20%220.15.2%22%0Aapp%20%3D%20marimo.App()%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%20%20%20%20from%20pathlib%20import%20Path%0A%20%20%20%20return%20Path%2C%20pd%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20os%0A%20%20%20%20for%20dirname%2C%20_%2C%20filenames%20in%20os.walk('%2Fkaggle%2Finput')%3A%0A%20%20%20%20%20%20%20%20for%20filename%20in%20filenames%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20print(os.path.join(dirname%2C%20filename))%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%20Exploratory%20Data%20Analysis%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%22A%20simple%20function%20to%20load%20the%20data%20from%20the%20respective%20CSV%20files%20without%20the%20hassle%20of%20writing%20the%20full%20path.%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(Path%2C%20pd)%3A%0A%20%20%20%20def%20load_df(name%3A%20str)%20-%3E%20pd.DataFrame%3A%0A%20%20%20%20%20%20%20%20return%20pd.read_csv(Path('Cinema_Audience_Forecasting_challenge')%20%2F%20name%20%2F%20f'%7Bname%7D.csv')%0A%20%20%20%20return%20(load_df%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22To%20organize%20the%20different%20dataframes%2C%20we%20use%20simple%20namespaces%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20from%20types%20import%20SimpleNamespace%0A%20%20%20%20return%20(SimpleNamespace%2C)%0A%0A%0A%40app.cell%0Adef%20_(SimpleNamespace%2C%20load_df)%3A%0A%20%20%20%20booknow%20%3D%20SimpleNamespace(%0A%20%20%20%20%20%20%20%20visits%3Dload_df('booknow_visits')%2C%0A%20%20%20%20%20%20%20%20booking%3Dload_df('booknow_booking')%2C%0A%20%20%20%20%20%20%20%20theaters%3Dload_df('booknow_theaters')%0A%20%20%20%20)%0A%20%20%20%20return%20(booknow%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22What%20is%20the%20shape%20of%20the%20dataset%20named%20booknow_booking%3F%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(booknow)%3A%0A%20%20%20%20booknow.booking.shape%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(booknow)%3A%0A%20%20%20%20booknow.booking.columns%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(SimpleNamespace%2C%20load_df)%3A%0A%20%20%20%20cinepos%20%3D%20SimpleNamespace(%0A%20%20%20%20%20%20%20%20booking%3Dload_df('cinePOS_booking')%2C%0A%20%20%20%20%20%20%20%20theaters%3Dload_df('cinePOS_theaters')%0A%20%20%20%20)%0A%20%20%20%20return%20(cinepos%2C)%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%20How%20many%20columns%20are%20of%20type%20%60Object%60%20in%20the%20dataset%20named%20%60cinePOS_theaters%60%3F%0A%0A%20%20%20%20We%20will%20use%20an%20ephemeral%20function%20to%20not%20pollute%20the%20global%20namespace.%0A%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(cinepos)%3A%0A%20%20%20%20def%20_()%3A%0A%20%20%20%20%20%20%20%20metadata%20%3D%20cinepos.theaters.dtypes%0A%20%20%20%20%20%20%20%20object_columns%20%3D%20metadata%5Bmetadata%20%3D%3D%20'object'%5D%0A%20%20%20%20%20%20%20%20print(object_columns)%0A%20%20%20%20%20%20%20%20return%20len(object_columns)%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(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20Which%20of%20the%20following%20theater%20types%20is%20the%20*most%20frequent*%20in%20the%20dataset%20named%20%60booknow_theaters%60%3F%0A%0A%20%20%20%20Let's%20check%20which%20column%20has%20theater%20types.%0A%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(booknow)%3A%0A%20%20%20%20booknow.theaters.columns%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%22Okay%20so%20we%20can%20use%20%60pd.Series.mode%60%20on%20the%20%60theater_type%60%20column.%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(booknow)%3A%0A%20%20%20%20booknow.theaters.theater_type.mode()%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%22How%20many%20*distinct%20theaters*%20are%20present%20in%20the%20dataset%20named%20%60cinePOS_booking%60%3F%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(cinepos)%3A%0A%20%20%20%20cinepos.booking.columns%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%22Let's%20check%20if%20this%20has%20any%20%60NaN%60%20values.%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(cinepos)%3A%0A%20%20%20%20cinepos.booking.cine_theater_id.isna().sum()%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(cinepos)%3A%0A%20%20%20%20cinepos.booking.cine_theater_id.nunique()%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%22Combine%20the%20datasets%20booknow_booking%20and%20booknow_theaters.%20What%20is%20the%20shape%20of%20this%20dataset%3F%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(booknow)%3A%0A%20%20%20%20%23%20how%3D'inner'%20by%20default%0A%20%20%20%20%23%20on%3D'...'%20is%20the%20intersecting%20column%20by%20default%0A%20%20%20%20%23%20thus%2C%20on%3D'book_theater_id'%0A%20%20%20%20booknow.booking_theaters_inner%20%3D%20booknow.booking.merge(booknow.theaters)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(booknow)%3A%0A%20%20%20%20booknow.booking_theaters_inner.shape%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%22Based%20on%20the%20combined%20dataset%20obtained%20in%20the%20previous%20question%2C%20how%20many%20distinct%20areas%20are%20the%20theaters%20located%20in%3F%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(booknow)%3A%0A%20%20%20%20booknow.booking_theaters_inner.theater_area.nunique()%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%22Combine%20the%20datasets%20movie_theater_id_relation%2C%20cinePOS_booking%20and%20cinePOS_theaters.%20Enter%20the%20column%20names%20containing%20missing%20values%20as%20comma%20seperated%20values.%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(cinepos%2C%20load_df)%3A%0A%20%20%20%20cinepos.id_relation%20%3D%20load_df('movie_theater_id_relation')%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(cinepos)%3A%0A%20%20%20%20print(cinepos.id_relation.columns)%0A%20%20%20%20print(cinepos.booking.columns)%0A%20%20%20%20print(cinepos.theaters.columns)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(cinepos)%3A%0A%20%20%20%20def%20_()%3A%0A%20%20%20%20%20%20%20%20merged%20%3D%20cinepos.id_relation.merge(cinepos.booking).merge(cinepos.theaters)%0A%20%20%20%20%20%20%20%20isna%20%3D%20merged.isna().sum()%0A%20%20%20%20%20%20%20%20print(isna)%0A%20%20%20%20%20%20%20%20print(%22missing%20value%20columns%3A%22%2C%20'%2C'.join(isna%5Bisna%20%3E%200%5D.index))%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%22Enter%20the%20date%20range%20spanned%20in%20the%20dataset%20named%20booknow_booking.%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(booknow%2C%20pd)%3A%0A%20%20%20%20booknow.booking.show_datetime%20%3D%20pd.to_datetime(booknow.booking.show_datetime)%0A%20%20%20%20booknow.booking.booking_datetime%20%3D%20pd.to_datetime(booknow.booking.booking_datetime)%0A%20%20%20%20return%0A%0A%0A%40app.function%0Adef%20iso_to_british_date(time)%3A%0A%20%20%20%20return%20time.strftime('%25d-%25m-%25Y')%0A%0A%0A%40app.cell%0Adef%20_(booknow)%3A%0A%20%20%20%20print(%0A%20%20%20%20%20%20%20%20iso_to_british_date(booknow.booking.show_datetime.dt.date.min())%2C%0A%20%20%20%20%20%20%20%20%22to%22%2C%0A%20%20%20%20%20%20%20%20iso_to_british_date(booknow.booking.show_datetime.dt.date.max())%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(booknow)%3A%0A%20%20%20%20print(%0A%20%20%20%20%20%20%20%20iso_to_british_date(booknow.booking.booking_datetime.dt.date.min())%2C%0A%20%20%20%20%20%20%20%20%22to%22%2C%0A%20%20%20%20%20%20%20%20iso_to_british_date(booknow.booking.booking_datetime.dt.date.max())%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%22Fortunately%2C%20there%20are%20no%20inconsitencies%20between%20the%20range%20of%20%60show_datetime%60%20and%20%60booking_datetime%60.%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%22Enter%20the%20date%20range%20spanned%20in%20the%20test%20dataset%20(sample_submission).%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(SimpleNamespace%2C%20load_df)%3A%0A%20%20%20%20submission%20%3D%20SimpleNamespace(%0A%20%20%20%20%20%20%20%20sample%3Dload_df('sample_submission')%0A%20%20%20%20)%0A%20%20%20%20return%20(submission%2C)%0A%0A%0A%40app.cell%0Adef%20_(submission)%3A%0A%20%20%20%20submission.sample.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%22We%20have%20to%20split%20the%20IDs.%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(pd%2C%20submission)%3A%0A%20%20%20%20submission.input%20%3D%20pd.DataFrame()%0A%20%20%20%20submission.input%5B%5B'ID'%2C%20'date'%5D%5D%20%3D%20submission.sample.ID.str.rsplit(%22_%22%2C%20n%3D1%2C%20expand%3DTrue)%0A%20%20%20%20submission.input.date%20%3D%20pd.to_datetime(submission.input.date)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(submission)%3A%0A%20%20%20%20submission.input.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%22Very%20well%2C%20let's%20find%20the%20range%20now.%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(submission)%3A%0A%20%20%20%20print(%0A%20%20%20%20%20%20%20%20iso_to_british_date(submission.input.date.dt.date.min())%2C%0A%20%20%20%20%20%20%20%20%22to%22%2C%0A%20%20%20%20%20%20%20%20iso_to_british_date(submission.input.date.dt.date.max())%0A%20%20%20%20)%0A%20%20%20%20return%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
5d2c741af210e89fafa5350ff5fe7601c907867057054d738de07ab3db6accec