Spaces:
Runtime error
Runtime error
# Import necessary libraries | |
import pandas as pd | |
import streamlit as st | |
import matplotlib.pyplot as plt | |
import pydeck as pdk | |
# Create a dictionary of states with their region, population, and area | |
states = { | |
'Alabama': {'region': 'South', 'population': 4903185, 'area': 135767}, | |
'Alaska': {'region': 'West', 'population': 731545, 'area': 1723337}, | |
'Arizona': {'region': 'West', 'population': 7278717, 'area': 295234}, | |
'Arkansas': {'region': 'South', 'population': 3017804, 'area': 137732}, | |
'California': {'region': 'West', 'population': 39538223, 'area': 423967}, | |
'Colorado': {'region': 'West', 'population': 5773714, 'area': 269601}, | |
'Connecticut': {'region': 'Northeast', 'population': 3605944, 'area': 14357}, | |
'Delaware': {'region': 'South', 'population': 989948, 'area': 6446}, | |
'Florida': {'region': 'South', 'population': 21538187, 'area': 170312}, | |
'Georgia': {'region': 'South', 'population': 10711908, 'area': 153910}, | |
'Hawaii': {'region': 'West', 'population': 1415872, 'area': 28314}, | |
'Idaho': {'region': 'West', 'population': 1826156, 'area': 216443}, | |
'Illinois': {'region': 'Midwest', 'population': 12671821, 'area': 149995}, | |
'Indiana': {'region': 'Midwest', 'population': 6732219, 'area': 94326}, | |
'Iowa': {'region': 'Midwest', 'population': 3155070, 'area': 145746}, | |
'Kansas': {'region': 'Midwest', 'population': 2913314, 'area': 213099}, | |
'Kentucky': {'region': 'South', 'population': 4467673, 'area': 104656}, | |
'Louisiana': {'region': 'South', 'population': 4648794, 'area': 135659}, | |
'Maine': {'region': 'Northeast', 'population': 1362359, 'area': 91634}, | |
'Maryland': {'region': 'South', 'population': 6177224, 'area': 32131}, | |
'Massachusetts': {'region': 'Northeast', 'population': 7029917, 'area': 27336}, | |
'Michigan': {'region': 'Midwest', 'population': 10077331, 'area': 250487}, | |
'Minnesota': {'region': 'Midwest', 'population': 5706494, 'area': 225163}, | |
'Mississippi': {'region': 'South', 'population': 2989260, 'area': 125438}, | |
'Missouri': {'region': 'Midwest', 'population': 6169270, 'area': 180540}, | |
'Montana': {'region': 'West', 'population': 1084225, 'area': 380831}, | |
'Nebraska': {'region': 'Midwest', 'population': 1952570, 'area': 200330}, | |
'Nevada': {'region': 'West', 'population': 3139658, 'area': 286380}, | |
'New Hampshire': {'region': 'Northeast', 'population': 1371246, 'area': 24214}, | |
'New Jersey': {'region': 'Northeast', 'population': 9288994, 'area': 22591}, | |
'New Mexico': {'region': 'West', 'population': 2117522, 'area': 314917}, | |
'New York': {'region': 'Northeast', 'population': 20215751, 'area': 141297}, | |
'North Carolina': {'region': 'South', 'population': 10488084, 'area': 139391}, | |
'North Dakota': {'region': 'Midwest', 'population': 762062, 'area': 183108}, | |
'Ohio': {'region': 'Midwest', 'population': 11689100, 'area': 116098}, | |
'Oklahoma': {'region': 'South', 'population': 3953823, 'area': 181037}, | |
'Oregon': {'region': 'West', 'population': 4217737, 'area': 254799}, | |
'Pennsylvania': {'region': 'Northeast', 'population': 12801989, 'area': 119280}, | |
'Rhode Island': {'region': 'Northeast', 'population': 1097379, 'area': 4001}, | |
'South Carolina': {'region': 'South', 'population': 5148714, 'area': 82933}, | |
'South Dakota': {'region': 'Midwest', 'population': 884659, 'area': 199729}, | |
'Tennessee': {'region': 'South', 'population': 6833174, 'area': 109153}, | |
'Texas': {'region': 'South', 'population': 29145505, 'area': 695662}, | |
'Utah': {'region': 'West', 'population': 3271616, 'area': 219882}, | |
'Vermont': {'region': 'Northeast', 'population': 623989, 'area': 24906}, | |
'Virginia': {'region': 'South', 'population': 8631393, 'area': 110787}, | |
'Washington': {'region': 'West', 'population': 7693612, 'area': 184661}, | |
'West Virginia': {'region': 'South', 'population': 1792147, 'area': 62756}, | |
'Wisconsin': {'region': 'Midwest', 'population': 5851754, 'area': 169635}, | |
'Wyoming': {'region': 'West', 'population': 578759, 'area': 253335} | |
} | |
# Create a function to calculate population density | |
def calculate_density(population, area): | |
return population / area | |
# Create a function to plot the graph | |
def plot_graph(df, region): | |
plt.figure(figsize=(10, 5)) | |
plt.bar(df['State'], df['Population Density']) | |
plt.title(f'Population Density of States in {region} Region') | |
plt.xlabel('State') | |
plt.ylabel('Population Density') | |
plt.xticks(rotation=90) | |
plt.show() | |
# Group states by region and calculate the total population and area for each region | |
regions = {} | |
for state, data in states.items(): | |
region = data['region'] | |
population = data['population'] | |
area = data['area'] | |
if region not in regions: | |
regions[region] = {'population': population, 'area': area, 'states': []} | |
else: | |
regions[region]['population'] += population | |
regions[region]['area'] += area | |
regions[region]['states'].append(state) | |
# Calculate the population density for each state in each region and create dataframes | |
dataframes = [] | |
for region, data in regions.items(): | |
population = data['population'] | |
area = data['area'] | |
states_in_region = data['states'] | |
densities = [] | |
for state in states_in_region: | |
state_data = states[state] | |
state_population = state_data['population'] | |
state_area = state_data['area'] | |
state_density = calculate_density(state_population, state_area) | |
densities.append(state_density) | |
df = pd.DataFrame({'State': states_in_region, 'Population Density': densities}) | |
dataframes.append(df) | |
plot_graph(df, region) | |
# Use Streamlit to display dataframes | |
for df in dataframes: | |
st.write(df) | |
# Add lat and lon to your states data | |
states = { | |
'Alabama': {'region': 'South', 'population': 4903185, 'area': 135767, 'lat': 32.806671, 'lon': -86.791130}, | |
'Alaska': {'region': 'West', 'population': 731545, 'area': 1723337, 'lat': 61.370716, 'lon': -152.404419}, | |
# Continue for all states... | |
} | |
# Create dataframe from states data | |
df = pd.DataFrame.from_dict(states, orient='index').reset_index() | |
df.columns = ['State', 'Region', 'Population', 'Area', 'Latitude', 'Longitude'] | |
# Define initial viewport for the deckgl map | |
view_state = pdk.ViewState( | |
longitude=-97.6, | |
latitude=38.5, | |
zoom=3, | |
pitch=50, | |
) | |
# Define deckgl layer | |
layer = pdk.Layer( | |
"ScatterplotLayer", | |
data=df, | |
get_position='[Longitude, Latitude]', | |
get_radius='Population/Area', | |
get_fill_color='[200, 30, 0, 160]', | |
pickable=True, | |
auto_highlight=True, | |
) | |
# Render the deckgl map in the Streamlit app | |
st.pydeck_chart(pdk.Deck(layers=[layer], initial_view_state=view_state)) | |