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 | |
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}, | |
'Arizona': {'region': 'West', 'population': 7278717, 'area': 295234, 'lat': 33.729759, 'lon': -111.431221}, | |
'Arkansas': {'region': 'South', 'population': 3017804, 'area': 137732, 'lat': 34.969704, 'lon': -92.373123}, | |
'California': {'region': 'West', 'population': 39538223, 'area': 423967, 'lat': 36.116203, 'lon': -119.681567}, | |
'Colorado': {'region': 'West', 'population': 5773714, 'area': 269601, 'lat': 39.059811, 'lon': -105.311104}, | |
'Connecticut': {'region': 'Northeast', 'population': 3605944, 'area': 14357, 'lat': 41.597782, 'lon': -72.755371}, | |
'Delaware': {'region': 'South', 'population': 989948, 'area': 6446, 'lat': 39.318523, 'lon': -75.507141}, | |
'Florida': {'region': 'South', 'population': 21538187, 'area': 170312, 'lat': 27.766279, 'lon': -81.686783}, | |
'Georgia': {'region': 'South', 'population': 10711908, 'area': 153910, 'lat': 33.040619, 'lon': -83.643074}, | |
'Hawaii': {'region': 'West', 'population': 1415872, 'area': 28314, 'lat': 21.094318, 'lon': -157.498337}, | |
'Idaho': {'region': 'West', 'population': 1826156, 'area': 216443, 'lat': 44.240459, 'lon': -114.478828}, | |
'Illinois': {'region': 'Midwest', 'population': 12671821, 'area': 149995, 'lat': 40.349457, 'lon': -88.986137}, | |
'Indiana': {'region': 'Midwest', 'population': 6732219, 'area': 94326, 'lat': 39.849426, 'lon': -86.258284}, | |
'Iowa': {'region': 'Midwest', 'population': 3155070, 'area': 145746, 'lat': 42.011539, 'lon': -93.210526}, | |
'Kansas': {'region': 'Midwest', 'population': 2913314, 'area': 213099, 'lat': 38.526600, 'lon': -96.726486}, | |
'Kentucky': {'region': 'South', 'population': 4467673, 'area': 104656, 'lat': 37.668140, 'lon': -84.670067}, | |
'Louisiana': {'region': 'South', 'population': 4648794, 'area': 135659, 'lat': 31.169546, 'lon': -91.867805}, | |
'Maine': {'region': 'Northeast', 'population': 1362359, 'area': 91634, 'lat': 44.693947, 'lon': -69.381927}, | |
'Maryland': {'region': 'South', 'population': 6177224, 'area': 32131, 'lat': 39.063946, 'lon': -76.802101}, | |
'Massachusetts': {'region': 'Northeast', 'population': 7029917, 'area': 27336, 'lat': 42.230171, 'lon': -71.530106}, | |
'Michigan': {'region': 'Midwest', 'population': 10077331, 'area': 250487, 'lat': 43.326618, 'lon': -84.536095}, | |
'Minnesota': {'region': 'Midwest', 'population': 5706494, 'area': 225163, 'lat': 45.694454, 'lon': -93.900192}, | |
'Mississippi': {'region': 'South', 'population': 2989260, 'area': 125438, 'lat': 32.741646, 'lon': -89.678697}, | |
'Missouri': {'region': 'Midwest', 'population': 6169270, 'area': 180540, 'lat': 38.456085, 'lon': -92.288368}, | |
'Montana': {'region': 'West', 'population': 1084225, 'area': 380831, 'lat': 46.921925, 'lon': -110.454353}, | |
'Nebraska': {'region': 'Midwest', 'population': 1952570, 'area': 200330, 'lat': 41.125370, 'lon': -98.268082}, | |
'Nevada': {'region': 'West', 'population': 3139658, 'area': 286380, 'lat': 38.313515, 'lon': -117.055374}, | |
'New Hampshire': {'region': 'Northeast', 'population': 1371246, 'area': 24214, 'lat': 43.452492, 'lon': -71.563896}, | |
'New Jersey': {'region': 'Northeast', 'population': 9288994, 'area': 22591, 'lat': 40.298904, 'lon': -74.521011}, | |
'New Mexico': {'region': 'West', 'population': 2117522, 'area': 314917, 'lat': 34.840515, 'lon': -106.248482}, | |
'New York': {'region': 'Northeast', 'population': 20215751, 'area': 141297, 'lat': 42.165726, 'lon': -74.948051}, | |
'North Carolina': {'region': 'South', 'population': 10488084, 'area': 139391, 'lat': 35.630066, 'lon': -79.806419}, | |
'North Dakota': {'region': 'Midwest', 'population': 762062, 'area': 183108, 'lat': 47.528912, 'lon': -99.784012}, | |
'Ohio': {'region': 'Midwest', 'population': 11689100, 'area': 116098, 'lat': 40.388783, 'lon': -82.764915}, | |
'Oklahoma': {'region': 'South', 'population': 3953823, 'area': 181037, 'lat': 35.565342, 'lon': -96.928917}, | |
'Oregon': {'region': 'West', 'population': 4217737, 'area': 254799, 'lat': 44.572021, 'lon': -122.070938}, | |
'Pennsylvania': {'region': 'Northeast', 'population': 12801989, 'area': 119280, 'lat': 40.590752, 'lon': -77.209755}, | |
'Rhode Island': {'region': 'Northeast', 'population': 1097379, 'area': 4001, 'lat': 41.680893, 'lon': -71.511780}, | |
'South Carolina': {'region': 'South', 'population': 5148714, 'area': 82933, 'lat': 33.856892, 'lon': -80.945007}, | |
'South Dakota': {'region': 'Midwest', 'population': 884659, 'area': 199729, 'lat': 44.299782, 'lon': -99.438828}, | |
'Tennessee': {'region': 'South', 'population': 6833174, 'area': 109153, 'lat': 35.747845, 'lon': -86.692345}, | |
'Texas': {'region': 'South', 'population': 29145505, 'area': 695662, 'lat': 31.054487, 'lon': -97.563461}, | |
'Utah': {'region': 'West', 'population': 3271616, 'area': 219882, 'lat': 40.150032, 'lon': -111.862434}, | |
'Vermont': {'region': 'Northeast', 'population': 623989, 'area': 24906, 'lat': 44.045876, 'lon': -72.710686}, | |
'Virginia': {'region': 'South', 'population': 8631393, 'area': 110787, 'lat': 37.769337, 'lon': -78.170400}, | |
'Washington': {'region': 'West', 'population': 7693612, 'area': 184661, 'lat': 47.400902, 'lon': -121.490494}, | |
'West Virginia': {'region': 'South', 'population': 1792147, 'area': 62756, 'lat': 38.491000, 'lon': -80.954570}, | |
'Wisconsin': {'region': 'Midwest', 'population': 5851754, 'area': 169635, 'lat': 44.268543, 'lon': -89.616508}, | |
'Wyoming': {'region': 'West', 'population': 578759, 'area': 253335, 'lat': 42.755966, 'lon': -107.302490} | |
} | |
# 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='Area', | |
get_fill_color='[190, 30, 0, 140]', | |
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)) | |