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
'display.max_colwidth', 1000) pd.set_option(
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')
= getpass('Enter your Census API Key: ') CENSUS_API_KEY
Enter your Census API Key: ··········
def contrast_theme():
= "Helvetica"
font = "#F63366"
primary_color = "#ffffff"
white = "#36454f"
font_color = "#f0f2f6"
grey_color = 16
base_size = base_size * 1.25
lg_font = base_size * 0.8 # st.table size
sm_font = base_size * 1.75
xl_font
= {
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
"contrast", contrast_theme)
alt.themes.register("contrast") alt.themes.enable(
ThemeRegistry.enable('contrast')
= cen.explorer.available()
availableTables = cen.products.ACS() acs
#TOTAL POVERTY STATUS IN THE PAST 12 MONTHS OF INDIVIDUALS BY SEX BY EDUCATIONAL ATTAINMENT
'B17003_001E') acs.filter_variables(
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
'display.max_colwidth')
pd.reset_option('vintage'] == 2019.0]
availableTables.loc[availableTables['vintage'] == 2012.0] availableTables.loc[availableTables[
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.
= cen.remote.APIConnection('ACSDT5Y2019',apikey=CENSUS_API_KEY)
con19 = cen.remote.APIConnection('ACSDT5Y2012',apikey=CENSUS_API_KEY)
con12 #The variables available in these tables.
= con19.variables
variables19 = con12.variables
variables12
# 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.
= [i+'E' for i in columns]
columns_E = [i+'E' for i in columns]
columns_M
# Units of geography
# State codes can be found at https://www.census.gov/library/reference/code-lists/ansi/ansi-codes-for-states.html
= 'county'
g_unit = {'state':'06'} #My focus is on California
g_filter
# Making an API call for the tables/columns at the county level for the state of California and save to DF
= con19.query(columns_E + columns_M, geo_unit=g_unit, geo_filter=g_filter)
Poverty19
= con12.query(columns_E + columns_M, geo_unit=g_unit, geo_filter=g_filter) Poverty12
#creating geoids for merge
'GEOID'] = Poverty19['state'] + Poverty19['county']
Poverty19['GEOID'] = Poverty12['state'] + Poverty12['county'] Poverty12[
#The columns have the same identities/name renaming them to avoid confusion/for an no-error code in the merge,
= ['2019_pop', '2019_PoorPop', '2019_marginOfErrorPop', '2019_marginOfErrorHealth', 'state', 'county', 'GEOID']
Poverty19.columns = ['2012_pop', '2012_PoorPop', '2012_marginOfErrorPop', '2012_marginOfErrorHealth', 'state', 'county', 'GEOID'] Poverty12.columns
#merging
= Poverty19.merge(Poverty12, left_on="GEOID", right_on="GEOID") dfCalipoverty
#tidy up - removing margins of error because they seem fine + very small
= dfCalipoverty[['GEOID', '2012_pop', '2019_pop', '2012_PoorPop', '2019_PoorPop']]
dfCalipoverty
#figure out poverty rate across California from 2012 to 2019
'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
dfCalipoverty[
#figure out difference between the two (percentage)
'change'] = dfCalipoverty['2019_poor'] - dfCalipoverty['2012_poor']
dfCalipoverty['change'] = dfCalipoverty['change'] dfCalipoverty[
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 |
= tiger.TigerConnection('tigerWMS_ACS2019')
cxn
#grab counties
86].variables
cxn.layers[
#filter to Californian counties
= cxn.query(layer=86, where='STATE = 06')
dfGeo
#set crs
= dfGeo.to_crs({'init': 'epsg:4326'})
dfGeo
#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))