Spaces:
Sleeping
Sleeping
| """ | |
| World Population Dataset | |
| Monitoring city population (per country) with upper/lower bounds intervals | |
| """ | |
| # -- filter on arbitrarily selected countries | |
| countries = df.sample(5)['country'].values | |
| # countries = ["Japan", "Argentina", "Greece", "Thailand", "Peru", "Saudi Arabia", "Jordan" ,"United States"]; | |
| # -- add a new column to df (mean or std) | |
| df = df.groupby("country", as_index=False).apply( | |
| lambda d: d.assign(city_population_avg=d["population"].std().astype(int)) | |
| ); | |
| # -- measure members distance from LCL | |
| df = df.groupby("country", as_index=False).apply( | |
| lambda d: d.assign(upper_bound=abs((d["city_population_avg"]*1.1).astype(int)+d["city_population_avg"])) | |
| ); | |
| df = df.groupby("country", as_index=False).apply( | |
| lambda d: d.assign(lower_bound=abs((d["city_population_avg"]*1.1).astype(int)-d["city_population_avg"])) | |
| ); | |
| for country in countries: | |
| _df = df[df['country']==country] | |
| b = px.bar(_df, x="city", y="population", facet_col="country", facet_col_wrap=4) | |
| s = px.line( | |
| _df, x="city", y="city_population_avg", facet_col="country", facet_col_wrap=4, | |
| color="city_population_avg" | |
| ).update_traces(line_color="orange") | |
| b.add_traces(s.data) | |
| u = px.line( | |
| _df, x="city", y="upper_bound", facet_col="country", facet_col_wrap=4, | |
| color="upper_bound" | |
| ).update_traces(line_color="green") | |
| b.add_traces(u.data) | |
| l = px.line( | |
| _df, x="city", y="lower_bound", facet_col="country", facet_col_wrap=4, | |
| color="lower_bound" | |
| ).update_traces(line_color="red") | |
| b.add_traces(l.data) | |
| st.markdown(f"# {country}") | |
| col1, col2 = st.columns(2) | |
| col1.plotly_chart(b) | |
| col2.write(_df) | |
| below_control = _df[_df['population']<_df['lower_bound']].shape[0] | |
| msg = f"{round((below_control/_df.shape[0]), 2)*100}% of the cities are below the `lower_bound` of population control" | |
| st.markdown(f"> ### {msg}") |