import%20marimo%0A%0A__generated_with%20%3D%20%220.18.4%22%0Aapp%20%3D%20marimo.App(width%3D%22medium%22)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20import%20seaborn%20as%20sns%0A%0A%20%20%20%20import%20pyrf%20as%20rf%0A%0A%20%20%20%20sns.set_style(%22whitegrid%22)%0A%20%20%20%20return%20(rf%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(rf)%3A%0A%20%20%20%20grid%20%3D%20rf.models.GoalGrid(6)%0A%20%20%20%20print(grid.home%20-%20grid.away)%0A%20%20%20%20return%20(grid%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20lambda_home%20%3D%201.05%0A%20%20%20%20lambda_away%20%3D%201.42%0A%20%20%20%20return%20lambda_away%2C%20lambda_home%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(grid%2C%20lambda_away%2C%20lambda_home%2C%20rf)%3A%0A%20%20%20%20poisson2%20%3D%20rf.BivariatePoisson(lambda_home%3Dlambda_home%2C%20lambda_away%3Dlambda_away)%0A%20%20%20%20print(poisson2.pmf(grid))%0A%20%20%20%20return%20(poisson2%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(grid%2C%20lambda_away%2C%20lambda_home%2C%20rf)%3A%0A%20%20%20%20skellam%20%3D%20rf.Skellam(lambda_home%3Dlambda_home%2C%20lambda_away%3Dlambda_away)%0A%20%20%20%20print(skellam.pmf(grid))%0A%20%20%20%20return%20(skellam%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(grid%2C%20skellam)%3A%0A%20%20%20%20skellam.plot(grid%2C%20alpha%3D0.5)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(grid%2C%20poisson2)%3A%0A%20%20%20%20print(poisson2.pmf(grid))%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20%23%20import%20numpy%20as%20np%0A%20%20%20%20%23%20import%20matplotlib.pyplot%20as%20plt%0A%0A%20%20%20%20%23%20X%20%3D%20grid.away%0A%20%20%20%20%23%20Y%20%3D%20grid.home%0A%20%20%20%20%23%20Z%20%3D%20poisson2.pmf(grid)%0A%0A%20%20%20%20%23%20%23%20Flatten%20for%20bar3d%0A%20%20%20%20%23%20xpos%20%3D%20X.values.ravel()%0A%20%20%20%20%23%20ypos%20%3D%20Y.values.ravel()%0A%20%20%20%20%23%20zpos%20%3D%20np.zeros_like(xpos)%0A%0A%20%20%20%20%23%20%23%20Bar%20dimensions%0A%20%20%20%20%23%20dx%20%3D%20dy%20%3D%200.8%20*%20np.ones_like(zpos)%20%20%20%23%20width%2Fdepth%20of%20bars%0A%20%20%20%20%23%20dz%20%3D%20Z.values.ravel()%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%23%20heights%0A%0A%20%20%20%20%23%20%23%20Plot%0A%20%20%20%20%23%20fig%20%3D%20plt.figure(figsize%3D(8%2C6))%0A%20%20%20%20%23%20ax%20%3D%20fig.add_subplot(111%2C%20projection%3D'3d')%0A%0A%20%20%20%20%23%20ax.bar3d(xpos%2C%20ypos%2C%20zpos%2C%20dx%2C%20dy%2C%20dz%2C%20shade%3DTrue)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(grid%2C%20poisson2)%3A%0A%20%20%20%20import%20plotly.graph_objects%20as%20go%0A%0A%20%20%20%20x%20%3D%20grid.home.columns%0A%20%20%20%20y%20%3D%20grid.home.index%0A%20%20%20%20z%20%3D%20poisson2.pmf(grid)%0A%0A%20%20%20%20%23%20Use%20go.Surface%20for%203D%20surface%20plot%0A%20%20%20%20fig%20%3D%20go.Figure(data%3D%5Bgo.Surface(z%3Dz%2C%20x%3Dx%2C%20y%3Dy%2C%20colorscale%3D%22Viridis%22%2C%20opacity%3D0.7)%5D)%0A%20%20%20%20fig.update_layout(%0A%20%20%20%20%20%20%20%20scene%3D%7B%22xaxis_title%22%3A%20%22home%22%2C%20%22yaxis_title%22%3A%20%22away%22%2C%20%22zaxis_title%22%3A%20%22prob%22%7D%2C%0A%20%20%20%20%20%20%20%20margin%3D%7B%22l%22%3A%200%2C%20%22r%22%3A%200%2C%20%22b%22%3A%200%2C%20%22t%22%3A%200%7D%2C%0A%20%20%20%20)%0A%20%20%20%20fig.show()%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%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
27232b1536fb0bdacc9714d8cda6b2a9