awacke1's picture
Update app.py
18e980a
# 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))