Using census data.
I am investigating change in poverty rate in counties across the state of California over the period between 2012 and 2019, using the current census data. Final product is a conclusion from the data and an interactive map showing how the counties fair. Be sure to check the last cell- it has more details about the findings.
#importing libraries
!pip install geopandas
!pip install cenpy
!pip install jenkspy
import numpy as np
import pandas as pd
import geopandas as gpd
import altair as alt
import cenpy as cen
import cenpy.tiger as tiger
import jenkspy
from getpass import getpass
#setting the column width
pd.set_option('display.max_colwidth', 1000)Collecting geopandas
-manylinux1_x86_64.whl (15.4MB)
ent already satisfied: pandas>=0.24.0 in /usr/local/lib/python3.7/dist-packages (from geopandas) (1.1.5)
Collecting pyproj>=2.2.0
-manylinux2010_x86_64.whl (6.6MB)
ent already satisfied: shapely>=1.6 in /usr/local/lib/python3.7/dist-packages (from geopandas) (1.7.1)
Requirement already satisfied: click>=4.0 in /usr/local/lib/python3.7/dist-packages (from fiona>=1.8->geopandas) (7.1.2)
Requirement already satisfied: six>=1.7 in /usr/local/lib/python3.7/dist-packages (from fiona>=1.8->geopandas) (1.15.0)
Collecting munch
Downloading https://files.pythonhosted.org/packages/cc/ab/85d8da5c9a45e072301beb37ad7f833cd344e04c817d97e0cc75681d248f/munch-2.5.0-py2.py3-none-any.whl
Collecting click-plugins>=1.0
Downloading https://files.pythonhosted.org/packages/e9/da/824b92d9942f4e472702488857914bdd50f73021efea15b4cad9aca8ecef/click_plugins-1.1.1-py2.py3-none-any.whl
Collecting cligj>=0.5
Downloading https://files.pythonhosted.org/packages/73/86/43fa9f15c5b9fb6e82620428827cd3c284aa933431405d1bcf5231ae3d3e/cligj-0.7.2-py3-none-any.whl
Requirement already satisfied: certifi in /usr/local/lib/python3.7/dist-packages (from fiona>=1.8->geopandas) (2021.5.30)
Requirement already satisfied: attrs>=17 in /usr/local/lib/python3.7/dist-packages (from fiona>=1.8->geopandas) (21.2.0)
Requirement already satisfied: setuptools in /usr/local/lib/python3.7/dist-packages (from fiona>=1.8->geopandas) (57.0.0)
Requirement already satisfied: pytz>=2017.2 in /usr/local/lib/python3.7/dist-packages (from pandas>=0.24.0->geopandas) (2018.9)
Requirement already satisfied: numpy>=1.15.4 in /usr/local/lib/python3.7/dist-packages (from pandas>=0.24.0->geopandas) (1.19.5)
Requirement already satisfied: python-dateutil>=2.7.3 in /usr/local/lib/python3.7/dist-packages (from pandas>=0.24.0->geopandas) (2.8.1)
Installing collected packages: munch, click-plugins, cligj, fiona, pyproj, geopandas
Successfully installed click-plugins-1.1.1 cligj-0.7.2 fiona-1.8.20 geopandas-0.9.0 munch-2.5.0 pyproj-3.1.0
Collecting cenpy
Downloading https://files.pythonhosted.org/packages/d8/92/f2787e5dc2f6db9c16e287b38d1978298cc1192d2389244cc0b21f9418ce/cenpy-1.0.0.post4.tar.gz
Requirement already satisfied: pandas in /usr/local/lib/python3.7/dist-packages (from cenpy) (1.1.5)
Requirement already satisfied: geopandas in /usr/local/lib/python3.7/dist-packages (from cenpy) (0.9.0)
Requirement already satisfied: requests in /usr/local/lib/python3.7/dist-packages (from cenpy) (2.23.0)
Collecting rtree
-manylinux2010_x86_64.whl (994kB)
ent already satisfied: numpy in /usr/local/lib/python3.7/dist-packages (from cenpy) (1.19.5)
Requirement already satisfied: six in /usr/local/lib/python3.7/dist-packages (from cenpy) (1.15.0)
Collecting fuzzywuzzy
Downloading https://files.pythonhosted.org/packages/43/ff/74f23998ad2f93b945c0309f825be92e04e0348e062026998b5eefef4c33/fuzzywuzzy-0.18.0-py2.py3-none-any.whl
Collecting libpysal
ent already satisfied: python-dateutil>=2.7.3 in /usr/local/lib/python3.7/dist-packages (from pandas->cenpy) (2.8.1)
Requirement already satisfied: pytz>=2017.2 in /usr/local/lib/python3.7/dist-packages (from pandas->cenpy) (2018.9)
Requirement already satisfied: pyproj>=2.2.0 in /usr/local/lib/python3.7/dist-packages (from geopandas->cenpy) (3.1.0)
Requirement already satisfied: shapely>=1.6 in /usr/local/lib/python3.7/dist-packages (from geopandas->cenpy) (1.7.1)
Requirement already satisfied: fiona>=1.8 in /usr/local/lib/python3.7/dist-packages (from geopandas->cenpy) (1.8.20)
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.7/dist-packages (from requests->cenpy) (2021.5.30)
Requirement already satisfied: chardet<4,>=3.0.2 in /usr/local/lib/python3.7/dist-packages (from requests->cenpy) (3.0.4)
Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /usr/local/lib/python3.7/dist-packages (from requests->cenpy) (1.24.3)
Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.7/dist-packages (from requests->cenpy) (2.10)
Requirement already satisfied: jinja2 in /usr/local/lib/python3.7/dist-packages (from libpysal->cenpy) (2.11.3)
Requirement already satisfied: beautifulsoup4 in /usr/local/lib/python3.7/dist-packages (from libpysal->cenpy) (4.6.3)
Requirement already satisfied: scipy>=0.11 in /usr/local/lib/python3.7/dist-packages (from libpysal->cenpy) (1.4.1)
Requirement already satisfied: cligj>=0.5 in /usr/local/lib/python3.7/dist-packages (from fiona>=1.8->geopandas->cenpy) (0.7.2)
Requirement already satisfied: click>=4.0 in /usr/local/lib/python3.7/dist-packages (from fiona>=1.8->geopandas->cenpy) (7.1.2)
Requirement already satisfied: attrs>=17 in /usr/local/lib/python3.7/dist-packages (from fiona>=1.8->geopandas->cenpy) (21.2.0)
Requirement already satisfied: munch in /usr/local/lib/python3.7/dist-packages (from fiona>=1.8->geopandas->cenpy) (2.5.0)
Requirement already satisfied: click-plugins>=1.0 in /usr/local/lib/python3.7/dist-packages (from fiona>=1.8->geopandas->cenpy) (1.1.1)
Requirement already satisfied: setuptools in /usr/local/lib/python3.7/dist-packages (from fiona>=1.8->geopandas->cenpy) (57.0.0)
Requirement already satisfied: MarkupSafe>=0.23 in /usr/local/lib/python3.7/dist-packages (from jinja2->libpysal->cenpy) (2.0.1)
Building wheels for collected packages: cenpy
Building wheel for cenpy (setup.py) ... e=cenpy-1.0.0.post4-cp37-none-any.whl size=29924 sha256=be4d22a3eae4dd7f8c088c66d9b5f58d97abccf0a6dcc14292d3a696431263b1
Stored in directory: /root/.cache/pip/wheels/e6/43/74/d7ee11e176d530b2ea22243e15c95c1f25b339f680e161cb3c
Successfully built cenpy
Installing collected packages: rtree, fuzzywuzzy, libpysal, cenpy
Successfully installed cenpy-1.0.0.post4 fuzzywuzzy-0.18.0 libpysal-4.5.1 rtree-0.9.7
Collecting jenkspy
e=jenkspy-0.2.0-cp37-cp37m-linux_x86_64.whl size=70350 sha256=3bfe2693a9ff751e1fe7c5933e66c0c096ad253cbfca7ffb272ef44bfa9f931a
Stored in directory: /root/.cache/pip/wheels/e5/ab/c7/449bc908636d689818fca058a9b530f61220b634a09597a69d
Successfully built jenkspy
Installing collected packages: jenkspy
Successfully installed jenkspy-0.2.0
/usr/local/lib/python3.7/dist-packages/fuzzywuzzy/fuzz.py:11: UserWarning: Using slow pure-python SequenceMatcher. Install python-Levenshtein to remove this warning
warnings.warn('Using slow pure-python SequenceMatcher. Install python-Levenshtein to remove this warning')
CENSUS_API_KEY = getpass('Enter your Census API Key: ')Enter your Census API Key: ··········
def contrast_theme():
font = "Helvetica"
primary_color = "#F63366"
white = "#ffffff"
font_color = "#36454f"
grey_color = "#f0f2f6"
base_size = 16
lg_font = base_size * 1.25
sm_font = base_size * 0.8 # st.table size
xl_font = base_size * 1.75
config = {
"config": {
"arc": {"fill": primary_color},
"area": {"fill": primary_color},
"circle": {"fill": primary_color, "stroke": font_color, "strokeWidth": 0.5},
"line": {"stroke": primary_color},
"path": {"stroke": primary_color},
"point": {"stroke": primary_color},
"rect": {"fill": primary_color},
"shape": {"stroke": primary_color},
"geoshape": {"stroke": white, "strokeWidth": .1},
"symbol": {"fill": primary_color},
"title": {
"font": font,
"color": font_color,
"fontSize": lg_font,
"anchor": "start",
},
"axis": {
"titleFont": font,
"titleColor": font_color,
"titleFontSize": sm_font,
"labelFont": font,
"labelColor": font_color,
"labelFontSize": sm_font,
"gridColor": grey_color,
"domainColor": font_color,
"tickColor": "#fff",
},
"header": {
"labelFont": font,
"titleFont": font,
"labelFontSize": base_size,
"titleFontSize": base_size,
},
"legend": {
"titleFont": font,
"titleColor": font_color,
"titleFontSize": sm_font,
"labelFont": font,
"labelColor": font_color,
"labelFontSize": sm_font,
"symbolType": 'square',
},
"range": {
"category": ["#f63366", "#fffd80", "#0068c9", "#ff2b2b", "#09ab3b"],
"diverging": [
"#850018",
"#cd1549",
"#f6618d",
"#fbafc4",
"#f5f5f5",
"#93c5fe",
"#5091e6",
"#1d5ebd",
"#002f84",
],
"heatmap": [
"#ffb5d4",
"#ff97b8",
"#ff7499",
"#fc4c78",
"#ec245f",
"#d2004b",
"#b10034",
"#91001f",
"#720008",
],
"ramp": [
"#ffb5d4",
"#ff97b8",
"#ff7499",
"#fc4c78",
"#ec245f",
"#d2004b",
"#b10034",
"#91001f",
"#720008",
],
"ordinal": [
"#ffb5d4",
"#ff97b8",
"#ff7499",
"#fc4c78",
"#ec245f",
"#d2004b",
"#b10034",
"#91001f",
"#720008",
],
},
}
}
return config
alt.themes.register("contrast", contrast_theme)
alt.themes.enable("contrast")ThemeRegistry.enable('contrast')
availableTables = cen.explorer.available()
acs = cen.products.ACS()#TOTAL POVERTY STATUS IN THE PAST 12 MONTHS OF INDIVIDUALS BY SEX BY EDUCATIONAL ATTAINMENT
acs.filter_variables('B17003_001E')| label | concept | predicateType | group | limit | predicateOnly | attributes | required | values | |
|---|---|---|---|---|---|---|---|---|---|
| B17003_001E | Estimate!!Total | POVERTY STATUS IN THE PAST 12 MONTHS OF INDIVIDUALS BY SEX BY EDUCATIONAL ATTAINMENT | int | B17003 | 0 | NaN | B17003_001EA,B17003_001M,B17003_001MA | NaN | NaN |
#Interested in change over 2012 & 2019 period
pd.reset_option('display.max_colwidth')
availableTables.loc[availableTables['vintage'] == 2019.0]
availableTables.loc[availableTables['vintage'] == 2012.0]| c_isTimeseries | c_isCube | publisher | temporal | spatial | programCode | modified | keyword | contactPoint | distribution | description | bureauCode | accessLevel | title | c_isAvailable | c_isAggregate | c_valuesLink | c_groupsLink | c_examplesLink | c_tagsLink | c_variablesLink | c_geographyLink | c_dataset | vintage | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ACSCP1Y2012 | NaN | True | U.S. Census Bureau | unidentified | NaN | 006:004 | 2018-07-05 00:00:00.0 | () | {'fn': 'American Community Survey Office', 'ha... | {'@type': 'dcat:Distribution', 'accessURL': 'h... | The American Community Survey (ACS) is an ongo... | 006:07 | public | ACS 1-Year Comparison Profiles | True | True | https://api.census.gov/data/2012/acs/acs1/cpro... | https://api.census.gov/data/2012/acs/acs1/cpro... | https://api.census.gov/data/2012/acs/acs1/cpro... | https://api.census.gov/data/2012/acs/acs1/cpro... | https://api.census.gov/data/2012/acs/acs1/cpro... | https://api.census.gov/data/2012/acs/acs1/cpro... | (acs, acs1, cprofile) | 2012.0 |
| ACSCP3Y2012 | NaN | True | U.S. Census Bureau | unidentified | NaN | 006:004 | 2020-02-03 09:25:46.0 | () | {'fn': 'American Community Survey Office', 'ha... | {'@type': 'dcat:Distribution', 'accessURL': 'h... | The American Community Survey (ACS) is an ongo... | NaN | NaN | American Community Survey: 3-Year Estimates: C... | True | True | https://api.census.gov/data/2012/acs/acs3/cpro... | https://api.census.gov/data/2012/acs/acs3/cpro... | https://api.census.gov/data/2012/acs/acs3/cpro... | https://api.census.gov/data/2012/acs/acs3/cpro... | https://api.census.gov/data/2012/acs/acs3/cpro... | https://api.census.gov/data/2012/acs/acs3/cpro... | (acs, acs3, cprofile) | 2012.0 |
| ACSDP1Y2012 | NaN | True | U.S. Census Bureau | unidentified | NaN | 006:004 | 2018-06-20 00:00:00.0 | () | {'fn': 'American Community Survey Office', 'ha... | {'@type': 'dcat:Distribution', 'accessURL': 'h... | The American Community Survey (ACS) is a uswid... | 006:07 | public | ACS 1-Year Data Profiles | True | True | https://api.census.gov/data/2012/acs/acs1/prof... | https://api.census.gov/data/2012/acs/acs1/prof... | https://api.census.gov/data/2012/acs/acs1/prof... | https://api.census.gov/data/2012/acs/acs1/prof... | https://api.census.gov/data/2012/acs/acs1/prof... | https://api.census.gov/data/2012/acs/acs1/prof... | (acs, acs1, profile) | 2012.0 |
| ACSDP3Y2012 | NaN | True | U.S. Census Bureau | unidentified | NaN | 006:004 | 2020-01-28 15:14:18.0 | () | {'fn': 'American Community Survey Office', 'ha... | {'@type': 'dcat:Distribution', 'accessURL': 'h... | The American Community Survey (ACS) is a natio... | NaN | NaN | American Community Survey: 3-Year Estimates: D... | True | True | https://api.census.gov/data/2012/acs/acs3/prof... | https://api.census.gov/data/2012/acs/acs3/prof... | https://api.census.gov/data/2012/acs/acs3/prof... | https://api.census.gov/data/2012/acs/acs3/prof... | https://api.census.gov/data/2012/acs/acs3/prof... | https://api.census.gov/data/2012/acs/acs3/prof... | (acs, acs3, profile) | 2012.0 |
| ACSDP5Y2012 | NaN | True | U.S. Census Bureau | unidentified | NaN | 006:004 | 2018-06-29 00:00:00.0 | () | {'fn': 'American Community Survey Office', 'ha... | {'@type': 'dcat:Distribution', 'accessURL': 'h... | The American Community Survey (ACS) is an ongo... | 006:07 | public | ACS 5-Year Data Profiles | True | True | https://api.census.gov/data/2012/acs/acs5/prof... | https://api.census.gov/data/2012/acs/acs5/prof... | https://api.census.gov/data/2012/acs/acs5/prof... | https://api.census.gov/data/2012/acs/acs5/prof... | https://api.census.gov/data/2012/acs/acs5/prof... | https://api.census.gov/data/2012/acs/acs5/prof... | (acs, acs5, profile) | 2012.0 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| SBO2012 | NaN | True | U.S. Census Bureau | 2012 | United States | 006:008 | 2018-06-21 | () | {'fn': 'Economy Wide Statistics Division Outre... | {'@type': 'dcat:Distribution', 'accessURL': 'h... | The Survey of Business Owners (SBO) provides t... | 006:07 | public | 2012 Survey of Business Owners: Company Summary | True | True | https://api.census.gov/data/2012/sbo/values.json | https://api.census.gov/data/2012/sbo/groups.json | https://api.census.gov/data/2012/sbo/examples.... | https://api.census.gov/data/2012/sbo/tags.json | https://api.census.gov/data/2012/sbo/variables... | https://api.census.gov/data/2012/sbo/geography... | (sbo,) | 2012.0 |
| SBOCSCB12 | NaN | True | U.S. Census Bureau | 2012 | United States | 006:008 | 2018-06-21 | () | {'fn': 'Economy Wide Statistics Division Outre... | {'@type': 'dcat:Distribution', 'accessURL': 'h... | The Survey of Business Owners (SBO) provides t... | 006:07 | public | 2012 Survey of Business Owners: Characteristic... | True | True | https://api.census.gov/data/2012/sbo/cscb/valu... | https://api.census.gov/data/2012/sbo/cscb/grou... | https://api.census.gov/data/2012/sbo/cscb/exam... | https://api.census.gov/data/2012/sbo/cscb/tags... | https://api.census.gov/data/2012/sbo/cscb/vari... | https://api.census.gov/data/2012/sbo/cscb/geog... | (sbo, cscb) | 2012.0 |
| SBOCSCBO12 | NaN | True | U.S. Census Bureau | 2012 | United States | 006:008 | 2018-06-21 | () | {'fn': 'Economy Wide Statistics Division Outre... | {'@type': 'dcat:Distribution', 'accessURL': 'h... | The Survey of Business Owners (SBO) provides t... | 006:07 | public | 2012 Survey of Business Owners: Characteristic... | True | True | https://api.census.gov/data/2012/sbo/cscbo/val... | https://api.census.gov/data/2012/sbo/cscbo/gro... | https://api.census.gov/data/2012/sbo/cscbo/exa... | https://api.census.gov/data/2012/sbo/cscbo/tag... | https://api.census.gov/data/2012/sbo/cscbo/var... | https://api.census.gov/data/2012/sbo/cscbo/geo... | (sbo, cscbo) | 2012.0 |
| ZBP2012 | NaN | NaN | U.S. Census Bureau | April 1,2010 | United States | 006:007 | 2018-04-04 13:17:23.0 | () | {'fn': 'ZBP Staff', 'hasEmail': 'mailto:econ.d... | {'@type': 'dcat:Distribution', 'accessURL': 'h... | ZIP Code Business Patterns (ZBP) is an annual ... | NaN | NaN | 2012 County Business Patterns - Zip Code Busin... | True | True | https://api.census.gov/data/2012/zbp/values.json | https://api.census.gov/data/2012/zbp/groups.json | https://api.census.gov/data/2012/zbp/examples.... | https://api.census.gov/data/2012/zbp/tags.json | https://api.census.gov/data/2012/zbp/variables... | https://api.census.gov/data/2012/zbp/geography... | (zbp,) | 2012.0 |
| pubschlfin2012 | NaN | NaN | U.S. Census Bureau | 2012/2012 | United States | 006:000 | 2014-09-30 | () | {'fn': 'Public Elementary-Secondary Education ... | {'@type': 'dcat:Distribution', 'accessURL': 'h... | The survey covers all public school systems th... | 006:07 | public | 2012 Public Elementary-Secondary Education Fin... | True | True | https://api.census.gov/data/2012/pubschlfin/va... | https://api.census.gov/data/2012/pubschlfin/gr... | https://api.census.gov/data/2012/pubschlfin/ex... | https://api.census.gov/data/2012/pubschlfin/ta... | https://api.census.gov/data/2012/pubschlfin/va... | https://api.census.gov/data/2012/pubschlfin/ge... | (pubschlfin,) | 2012.0 |
94 rows × 24 columns
# Setting a variable (con**) for making a call to the specific tables.
con19 = cen.remote.APIConnection('ACSDT5Y2019',apikey=CENSUS_API_KEY)
con12 = cen.remote.APIConnection('ACSDT5Y2012',apikey=CENSUS_API_KEY)
#The variables available in these tables.
variables19 = con19.variables
variables12 = con12.variables
# Poverty status and total population
columns = [
'B01003_001', # Total Population (This is default)
'B17003_001', # POVERTY STATUS IN THE PAST 12 MONTHS OF INDIVIDUALS BY SEX BY EDUCATIONAL ATTAINMENT
]
# The E was absent from the columns identified. The E identifies the column as an estimate, so we include margins of error with our estimate with the code below.
columns_E = [i+'E' for i in columns]
columns_M = [i+'E' for i in columns]
# Units of geography
# State codes can be found at https://www.census.gov/library/reference/code-lists/ansi/ansi-codes-for-states.html
g_unit = 'county'
g_filter = {'state':'06'} #My focus is on California
# Making an API call for the tables/columns at the county level for the state of California and save to DF
Poverty19 = con19.query(columns_E + columns_M, geo_unit=g_unit, geo_filter=g_filter)
Poverty12 = con12.query(columns_E + columns_M, geo_unit=g_unit, geo_filter=g_filter)#creating geoids for merge
Poverty19['GEOID'] = Poverty19['state'] + Poverty19['county']
Poverty12['GEOID'] = Poverty12['state'] + Poverty12['county']#The columns have the same identities/name renaming them to avoid confusion/for an no-error code in the merge,
Poverty19.columns = ['2019_pop', '2019_PoorPop', '2019_marginOfErrorPop', '2019_marginOfErrorHealth', 'state', 'county', 'GEOID']
Poverty12.columns = ['2012_pop', '2012_PoorPop', '2012_marginOfErrorPop', '2012_marginOfErrorHealth', 'state', 'county', 'GEOID']#merging
dfCalipoverty = Poverty19.merge(Poverty12, left_on="GEOID", right_on="GEOID")#tidy up - removing margins of error because they seem fine + very small
dfCalipoverty = dfCalipoverty[['GEOID', '2012_pop', '2019_pop', '2012_PoorPop', '2019_PoorPop']]
#figure out poverty rate across California from 2012 to 2019
dfCalipoverty['2012_poor'] = (dfCalipoverty['2012_PoorPop'].astype(int) / dfCalipoverty['2012_pop'].astype(int)) * 100
dfCalipoverty['2019_poor'] = (dfCalipoverty['2019_PoorPop'].astype(int) / dfCalipoverty['2019_pop'].astype(int)) * 100
#figure out difference between the two (percentage)
dfCalipoverty['change'] = dfCalipoverty['2019_poor'] - dfCalipoverty['2012_poor']
dfCalipoverty['change'] = dfCalipoverty['change']dfCalipoverty.head()| GEOID | 2012_pop | 2019_pop | 2012_PoorPop | 2019_PoorPop | 2012_poor | 2019_poor | change | |
|---|---|---|---|---|---|---|---|---|
| 0 | 06047 | 256398 | 271382 | 142952 | 158074 | 55.753945 | 58.247784 | 2.493839 |
| 1 | 06043 | 18193 | 17420 | 13821 | 13501 | 75.968779 | 77.502870 | 1.534091 |
| 2 | 06049 | 9545 | 8907 | 6520 | 6598 | 68.308015 | 74.076569 | 5.768554 |
| 3 | 06013 | 1052047 | 1142251 | 699959 | 783310 | 66.533054 | 68.575996 | 2.042942 |
| 4 | 06027 | 18474 | 17977 | 13115 | 12885 | 70.991664 | 71.674918 | 0.683254 |
cxn = tiger.TigerConnection('tigerWMS_ACS2019')
#grab counties
cxn.layers[86].variables
#filter to Californian counties
dfGeo = cxn.query(layer=86, where='STATE = 06')
#set crs
dfGeo = dfGeo.to_crs({'init': 'epsg:4326'})
#chart it to make sure everything is working
alt.Chart(dfGeo).mark_geoshape()/usr/local/lib/python3.7/dist-packages/pyproj/crs/crs.py:68: FutureWarning: '+init=<authority>:<code>' syntax is deprecated. '<authority>:<code>' is the preferred initialization method. When making the change, be mindful of axis order changes: https://pyproj4.github.io/pyproj/stable/gotchas.html#axis-order-changes-in-proj-6
return _prepare_from_string(" ".join(pjargs))