awacke1's picture
Update app.py
071b8bd
raw
history blame
6.74 kB
# 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))