A Short Note on Medicare¶
Initiated in 1965, Medicare is one of the most revolutionary plans initiated by the the United States' National Health Insurance Program. Medicare was created to provide equal and adequate access to healthcare for senior citizens of the United States. Though the insurance is primarily offered to citizens aged 65 and older, it is also offered for younger people with disability, including those with chronic end-stage life conditions. Medicare coverage includes four parts - Part A, Part B, Part C and Part D. Read more about each of these coverages here. To read more on claim types, refer to this resource .
Objectives of the Analysis¶
There are several open source datasets related to Medicare available for research. Such datasets have been gathered and analyzed as part of this analysis to get a general idea of the demographics and associated metrics like spending, annual spending per user, and so on. Some of these datasets have data as of 2022 whereas some do not. However, though some data is not up-to-date, it still makes sense to use the information to get insights. Details of each dataset has been explained in the section below. We load these datasets into GridDB in order to use GridDB's fast query engine and then visualize the results using the Altair and Matplotlib libraries in Python.
About the Datasets¶
A small note on the excel datasets: if they are not being ingested by your pandas, you can re-save them as .xls
files and they should fix up your issue
Dataset 1 -
Dataset 1 is obtained from the Social Security Administration. This dataset provides details on decisions made by the Social Security Administration (SSA) for the Medicare Prescription Drug Program (Part D). Note that this data excludes individuals who applied through a State Medicaid agency or who automatically qualified because they were already receiving SSI benefits or Medicaid. There are 2 datasets to be downloaded in this case; one for 2016 - 2022, and another for 2010-2015.
Filenames: fy16-onwards-MPD-Plan-Cost-Yrly.xls and Extra-Help-with-Medicare-Prescription-Drug-Plan-Cost.xls
Dataset 2 -
The second part of the data is sourced from Data.World. This data offers an interesting compilation of medicare hospital expenditure. For more details on the dataset, refer https://data.world/health/medicare-hospital-spending.
Filenames: rows.csv (This was renamed to Medicare_Hospital_Spending)
Dataset 3 -
The third part of the data is sourced from the Centers for Medicare & Medicaid Services. This data provides drug spending metrics as part of the Part D Medicare program.
Filenames: DSD_PTD_R21_P04_V21_D20_BGM.csv (This was renamed to Drug_Spending_Metrics_PartD)
Dataset 4 -
The fourth part of the data is sourced from Data.world and provides a detailed compilation of prescription drug spending as part of both the Medicare Part B and Medicare Part D.
Note that there are two methods to download the data file -
- Click on the download icon next to the name of the file (health-medicare-drug-spending (1).csv)
- Click on the Download hyperlink in the "About this dataset" section next to the size.
Filenames: health-medicare-drug-spending.csv (renamed from health-medicare-drug-spending (1).csv)
Loading Libraries¶
import os
import numpy as np
import pandas as pd
from seaborn import countplot
import matplotlib.pyplot as plt
import altair as alt
from vega_datasets import data
import requests # to make http calls
import http
http.client.HTTPConnection.debuglevel = 1
import json
Data Cleaning¶
#Dataset 1
Presc_Drug_cost_2010to2015 = pd.read_excel("Extra-Help-with-Medicare-Prescription-Drug-Plan-Cost.xlsx",skiprows=4,keep_default_na=False)
Presc_Drug_cost_2016to2022 = pd.read_excel("fy16-onwards-MPD-Plan-Cost-Yrly.xlsx",keep_default_na=False)
#Handling Data Formatting Issues
#drop extra column
Presc_Drug_cost_2016to2022 = Presc_Drug_cost_2016to2022.drop(columns=['Unnamed: 5'])
#rename columns to match the earlier dataset
Presc_Drug_cost_2016to2022 = Presc_Drug_cost_2016to2022.rename(columns={"State (Field A)": "State", "Decisions Made (Field B)": "Decisions Made","Eligible (Field C)": "Eligible","Percentage Eligible (Field D)":"Percentage Eligible"})
#format the Fiscal Year column values
Presc_Drug_cost_2016to2022['Fiscal Year'] = Presc_Drug_cost_2016to2022['Fiscal Year'].str.replace('FY - ','')
#Append the 2 datasets together into one dataframe
Pres_Drug_Costs = Presc_Drug_cost_2010to2015.append(Presc_Drug_cost_2016to2022,ignore_index=True)
C:\Users\mg_su\AppData\Local\Temp/ipykernel_104016/464606998.py:14: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead. Pres_Drug_Costs = Presc_Drug_cost_2010to2015.append(Presc_Drug_cost_2016to2022,ignore_index=True)
#Dataset 2
Medicare_Hospital_Spending = pd.read_csv("Medicare_Hospital_Spending.csv")
Medicare_Hospital_Spending.head(n=2)
# We remove currency and percentage symbols from columns
# Removing '$' and '%' from individual columns
Medicare_Hospital_Spending["Avg Spending Per Episode (Hospital)"] = Medicare_Hospital_Spending["Avg Spending Per Episode (Hospital)"].str.replace("$","")
Medicare_Hospital_Spending["Avg Spending Per Episode (State)"] = Medicare_Hospital_Spending["Avg Spending Per Episode (State)"].str.replace("$","")
Medicare_Hospital_Spending["Avg Spending Per Episode (Nation)"] = Medicare_Hospital_Spending["Avg Spending Per Episode (Nation)"].str.replace("$","")
Medicare_Hospital_Spending["Percent of Spending (Hospital)"] = Medicare_Hospital_Spending["Percent of Spending (Hospital)"].str.replace("%","")
Medicare_Hospital_Spending["Percent of Spending (State)"] = Medicare_Hospital_Spending["Percent of Spending (State)"].str.replace("%","")
Medicare_Hospital_Spending["Percent of Spending (Nation)"] = Medicare_Hospital_Spending["Percent of Spending (Nation)"].str.replace("%","")
#Dataset 3
#Here, we transform the dataframe which is in a wide format to a long format. We introduce a column named 'metric'
# while transforming the values in the columns Avg_Spnd_Per_Dsg_Unt_Wghtd_2016, Avg_Spnd_Per_Dsg_Unt_Wghtd_2017, etc. to rows.
PartD_Drug_Spending_Metrics = pd.read_csv("Drug_Spending_Metrics_PartD.csv")
PartD_Drug_Spending_Metrics = PartD_Drug_Spending_Metrics[PartD_Drug_Spending_Metrics.Mftr_Name!='Overall']
PartD_Drug_Spending_Metrics = PartD_Drug_Spending_Metrics.drop(columns=[
'Avg_Spnd_Per_Dsg_Unt_Wghtd_2016', 'Avg_Spnd_Per_Clm_2016','Avg_Spnd_Per_Bene_2016','Outlier_Flag_2016',
'Avg_Spnd_Per_Dsg_Unt_Wghtd_2017', 'Avg_Spnd_Per_Clm_2017','Avg_Spnd_Per_Bene_2017','Outlier_Flag_2017',
'Avg_Spnd_Per_Dsg_Unt_Wghtd_2018', 'Avg_Spnd_Per_Clm_2018','Avg_Spnd_Per_Bene_2018','Outlier_Flag_2018',
'Avg_Spnd_Per_Dsg_Unt_Wghtd_2019', 'Avg_Spnd_Per_Clm_2019','Avg_Spnd_Per_Bene_2019','Outlier_Flag_2019',
'Avg_Spnd_Per_Dsg_Unt_Wghtd_2020', 'Avg_Spnd_Per_Clm_2020','Avg_Spnd_Per_Bene_2020','Outlier_Flag_2020'
])
PartD_Drug_Spending=pd.melt(PartD_Drug_Spending_Metrics,id_vars=['Brnd_Name','Gnrc_Name','Tot_Mftr','Mftr_Name'],var_name='metrics', value_name='values')
#Dataset 4
health_medicare_drug_spending = pd.read_csv("health-medicare-drug-spending.csv")
health_medicare_drug_spending["beneficiary_count_lis"] = health_medicare_drug_spending["beneficiary_count_lis"].str.replace(",","")
health_medicare_drug_spending["beneficiary_count_no_lis"] = health_medicare_drug_spending["beneficiary_count_no_lis"].str.replace(",","")
health_medicare_drug_spending["beneficiary_count_lis"] = pd.to_numeric(health_medicare_drug_spending["beneficiary_count_lis"])
health_medicare_drug_spending["beneficiary_count_lis"] = health_medicare_drug_spending["beneficiary_count_no_lis"].fillna(0).astype(int)
health_medicare_drug_spending["beneficiary_count_no_lis"] = pd.to_numeric(health_medicare_drug_spending["beneficiary_count_no_lis"])
C:\Users\mg_su\AppData\Local\Temp/ipykernel_104016/3553379346.py:6: FutureWarning: The default value of regex will change from True to False in a future version. In addition, single character regular expressions will *not* be treated as literal strings when regex=True. Medicare_Hospital_Spending["Avg Spending Per Episode (Hospital)"] = Medicare_Hospital_Spending["Avg Spending Per Episode (Hospital)"].str.replace("$","") C:\Users\mg_su\AppData\Local\Temp/ipykernel_104016/3553379346.py:7: FutureWarning: The default value of regex will change from True to False in a future version. In addition, single character regular expressions will *not* be treated as literal strings when regex=True. Medicare_Hospital_Spending["Avg Spending Per Episode (State)"] = Medicare_Hospital_Spending["Avg Spending Per Episode (State)"].str.replace("$","") C:\Users\mg_su\AppData\Local\Temp/ipykernel_104016/3553379346.py:8: FutureWarning: The default value of regex will change from True to False in a future version. In addition, single character regular expressions will *not* be treated as literal strings when regex=True. Medicare_Hospital_Spending["Avg Spending Per Episode (Nation)"] = Medicare_Hospital_Spending["Avg Spending Per Episode (Nation)"].str.replace("$","")
Creating the Request & Containers¶
We create the request and containers.
#Construct an object to hold the request headers (ensure that you replace the XXX placeholder with the correct value that matches the credentials for your GridDB instance)
header_obj = {"Authorization":"XXX","Content-Type":"application/json; charset=UTF-8","User-Agent":"PostmanRuntime/7.29.0"}
#Construct the base URL based on your GRIDDB cluster you'd like to connect to (ensure that you replace the placeholders in the URL below with the correct values that correspond to your GridDB instance)
# Add the appropriate host, port, cluster and database name in the base_url
base_url = 'https://[host]:[port]/griddb/v2/[clustername]/dbs/[database_name]'
Creating the container Pres_Drug_Costs¶
#Construct an object to hold the request body (i.e., the container that needs to be created)
data_obj = {
"container_name": "Pres_Drug_Costs",
"container_type": "COLLECTION",
"rowkey": False,
"columns": [
{
"name": "fiscal_year",
"type": "INTEGER"
},
{
"name": "state",
"type": "STRING"
},
{
"name": "Decisions_Made",
"type": "INTEGER"
},
{
"name": "Eligible",
"type": "INTEGER"
},
{
"name": "Percentage_Eligible",
"type": "FLOAT"
}
]
}
#Set up the GridDB WebAPI URL
url = base_url + '/containers'
#Invoke the GridDB WebAPI with the headers and the request body
x = requests.post(url, json = data_obj, headers = header_obj)
Creating the container Medicare_Hospital_Spending¶
#Construct an object to hold the request body (i.e., the container that needs to be created)
data_obj = {
"container_name": "Medicare_Hospital_Spending",
"container_type": "COLLECTION",
"rowkey": False,
"columns": [
{
"name": "hospital_name",
"type": "STRING"
},
{
"name": "provider_number",
"type": "STRING"
},
{
"name": "state",
"type": "STRING"
},
{
"name": "period",
"type": "STRING"
},
{
"name": "claim_type",
"type": "STRING"
},
{
"name": "avg_spending_per_episode_hospital",
"type": "FLOAT"
},
{
"name": "avg_spending_per_episode_state",
"type": "FLOAT"
},
{
"name": "avg_spending_per_episode_nation",
"type": "FLOAT"
},
{
"name": "percent_of_spending_hospital",
"type": "FLOAT"
},
{
"name": "percent_of_spending_state",
"type": "FLOAT"
},
{
"name": "percent_of_spending_nation",
"type": "FLOAT"
},
{
"name": "measure_start_date",
"type": "STRING"
},
{
"name": "measure_end_date",
"type": "STRING"
}
]
}
#Set up the GridDB WebAPI URL
url = base_url + '/containers'
#Invoke the GridDB WebAPI with the headers and the request body
x = requests.post(url, json = data_obj, headers = header_obj)
Creating the Container PartD_Drug_Spending_Metrics¶
#Construct an object to hold the request body (i.e., the container that needs to be created)
#"1st Tier Unifine Pentips","Pen Needle, Diabetic",1,"Owen Mumford Us","Tot_Spndng_2016",216273.87
data_obj = {
"container_name": "PartD_Drug_Spending",
"container_type": "COLLECTION",
"rowkey": False,
"columns": [
{
"name": "Brnd_Name",
"type": "STRING"
},
{
"name": "Gnrc_Name",
"type": "STRING"
},
{
"name": "Tot_Mftr",
"type": "INTEGER"
},
{
"name": "Mftr_Name",
"type": "STRING"
},
{
"name": "metrics",
"type": "STRING"
},
{
"name": "values",
"type": "FLOAT"
}
]
}
#Set up the GridDB WebAPI URL
url = base_url + '/containers'
#Invoke the GridDB WebAPI with the headers and the request body
x = requests.post(url, json = data_obj, headers = header_obj)
Creating the Container health_medicare_drug_spending¶
#Construct an object to hold the request body (i.e., the container that needs to be created)
data_obj = {
"container_name": "health_medicare_drug_spending",
"container_type": "COLLECTION",
"rowkey": False,
"columns": [
{
"name": "year",
"type": "INTEGER"
},
{
"name": "brand_name",
"type": "STRING"
},
{
"name": "generic_name",
"type": "STRING"
},
{
"name": "coverage_type",
"type": "STRING"
},
{
"name": "total_spending",
"type": "FLOAT"
},
{
"name": "beneficiary_count",
"type": "INTEGER"
},
{
"name": "unit_count",
"type": "INTEGER"
},
{
"name": "beneficiary_cost_share",
"type": "FLOAT"
},
{
"name": "total_annual_spending_per_user",
"type": "FLOAT"
},
{
"name": "average_cost_per_unit",
"type": "FLOAT"
},
{
"name": "average_annual_beneficiary_cost_share",
"type": "FLOAT"
},
{
"name": "claim_count",
"type": "INTEGER"
},
{
"name": "beneficiary_count_lis",
"type": "INTEGER"
},
{
"name": "beneficiary_count_no_lis",
"type": "FLOAT"
},
{
"name": "beneficiary_cost_share_lis",
"type": "FLOAT"
},
{
"name": "beneficiary_cost_share_no_lis",
"type": "FLOAT"
},
{
"name": "average_beneficiary_cost_share_lis",
"type": "FLOAT"
},
{
"name": "average_beneficiary_cost_share_no_lis",
"type": "FLOAT"
},
{
"name": "serialid",
"type": "INTEGER"
}
]
}
#Set up the GridDB WebAPI URL
url = base_url + '/containers'
#Invoke the GridDB WebAPI with the headers and the request body
x = requests.post(url, json = data_obj, headers = header_obj)
Loading Data into the containers in GridDB (Row Registration)¶
Loading the container 'Pres_Drug_Costs'¶
#Convert the data in the dataframe to the JSON format
Pres_Drug_Costs_json = Pres_Drug_Costs.to_json(orient='values')
request_body_Pres_Drug_Costs = Pres_Drug_Costs_json
#Setup the URL to be used to invoke the GridDB WebAPI to register rows in the container created previously
url = base_url + '/containers/Pres_Drug_Costs/rows'
#Invoke the GridDB WebAPI using the request constructed
x = requests.put(url, data=request_body_Pres_Drug_Costs, headers=header_obj)
print(str(json.loads(x.text)['count']) + ' rows have been registered in the container Pres_Drug_Costs.')
687 rows have been registered in the container Pres_Drug_Costs.
Loading the container 'Medicare_Hospital_Spending'¶
#Convert the data in the dataframe to the JSON format
Medicare_Hospital_Spending_json = Medicare_Hospital_Spending.to_json(orient='values')
request_body_Medicare_Hospital_Spending = Medicare_Hospital_Spending_json
#Setup the URL to be used to invoke the GridDB WebAPI to register rows in the container created previously
url = base_url + '/containers/Medicare_Hospital_Spending/rows'
#Invoke the GridDB WebAPI using the request constructed
x = requests.put(url, data=request_body_Medicare_Hospital_Spending, headers=header_obj)
print(str(json.loads(x.text)['count']) + ' rows have been registered in the container Medicare_Hospital_Spending.')
70598 rows have been registered in the container Medicare_Hospital_Spending.
Loading the Container 'PartD_Drug_Spending'¶
#Convert the data in the dataframe to the JSON format
PartD_Drug_Spending_json = PartD_Drug_Spending.to_json(orient='values')
request_body_PartD_Drug_Spending_json = PartD_Drug_Spending_json
#Setup the URL to be used to invoke the GridDB WebAPI to register rows in the container created previously
url = base_url + '/containers/PartD_Drug_Spending/rows'
#Invoke the GridDB WebAPI using the request constructed
x = requests.put(url, data=request_body_PartD_Drug_Spending_json, headers=header_obj)
print(str(json.loads(x.text)['count']) + ' rows have been registered in the container PartD_Drug_Spending.')
219868 rows have been registered in the container PartD_Drug_Spending.
Loading the Container 'health_medicare_drug_spending'¶
#Convert the data in the dataframe to the JSON format
health_medicare_drug_spending_json = health_medicare_drug_spending.to_json(orient='values')
request_body_health_medicare_drug_spending_json = health_medicare_drug_spending_json
#Setup the URL to be used to invoke the GridDB WebAPI to register rows in the container created previously
url = base_url + '/containers/health_medicare_drug_spending/rows'
#Invoke the GridDB WebAPI using the request constructed
x = requests.put(url, data=request_body_health_medicare_drug_spending_json, headers=header_obj)
print(str(json.loads(x.text)['count']) + ' rows have been registered in the container health_medicare_drug_spending.')
576 rows have been registered in the container health_medicare_drug_spending.
Data Visualization & Insights¶
What percentage of applicants are eligible for Extra Help With Medicare Prescription Drug Plan Costs as of 2022 by State?¶
The Social Security Administration decides the applicants eligible for Prescription Drug costs after analyzing the applications sent to it. Let's dig into this information to understand more about it.
sql_query1 = (f"""SELECT fiscal_year, state, Percentage_Eligible FROM Pres_Drug_Costs where fiscal_year = 2022""")
#Setup the URL to be used to invoke the GridDB WebAPI to retrieve data from the container
url = base_url + '/sql'
#Construct the request body
request_body = '[{"type":"sql-select", "stmt":"'+sql_query1+'"}]'
#Validate the constructed request body
request_body
'[{"type":"sql-select", "stmt":"SELECT fiscal_year, state, Percentage_Eligible FROM Pres_Drug_Costs where fiscal_year = 2022"}]'
#Invoke the GridDB WebAPI
data_req1 = requests.post(url, data=request_body, headers=header_obj)
#Process the response received and construct a Pandas dataframe with the data from the response
myJson = data_req1.json()
Pres_Drug_Eligibility = pd.DataFrame(myJson[0]["results"], columns=[myJson[0]["columns"][0]["name"], myJson[0]["columns"][1]["name"],myJson[0]["columns"][2]["name"]])
Pres_Drug_Eligibility=Pres_Drug_Eligibility.sort_values(by=['Percentage_Eligible'], ascending=False)
df = Pres_Drug_Eligibility[Pres_Drug_Eligibility.state != "No Zip Available"]
height = df['Percentage_Eligible']
bars = df['state']
y_pos = np.arange(len(bars))
f = plt.figure()
f.set_figwidth(5)
f.set_figheight(15)
# Create a horizontal bar chart
plt.barh(bars, width=height, align='edge')
plt.title('Percentage of Eligible Applicants by State', fontdict=None, loc='center')
Text(0.5, 1.0, 'Percentage of Eligible Applicants by State')
Insight(s): DC, Texas, Tennesse and Alabama have the highest percentage of applications eligible for extra help with prescription drug costs.
What is the Medicare Acceptance Ratio for Prescription Drug Costs as of 2021 and 2022 by State?¶
For this, we calculate the Medicare Acceptance Ratio for each state and year. The Medicare Acceptance Ratio is calculated as the number of decisions made to the number of applications marked as 'eligible'.
sql_query1a = (f"""SELECT fiscal_year, state, Decisions_Made, Eligible FROM Pres_Drug_Costs where fiscal_year IN (2021,2022)""")
#Setup the URL to be used to invoke the GridDB WebAPI to retrieve data from the container
url = base_url + '/sql'
#Construct the request body
request_body = '[{"type":"sql-select", "stmt":"'+sql_query1a+'"}]'
#Validate the constructed request body
request_body
'[{"type":"sql-select", "stmt":"SELECT fiscal_year, state, Decisions_Made, Eligible FROM Pres_Drug_Costs where fiscal_year IN (2021,2022)"}]'
#Invoke the GridDB WebAPI
data_req1a = requests.post(url, data=request_body, headers=header_obj)
#Process the response received and construct a Pandas dataframe with the data from the response
myJson = data_req1a.json()
Decisions_vs_Eligibility = pd.DataFrame(myJson[0]["results"], columns=[myJson[0]["columns"][0]["name"], myJson[0]["columns"][1]["name"],myJson[0]["columns"][2]["name"],myJson[0]["columns"][3]["name"]])
Decisions_vs_Eligibility=Decisions_vs_Eligibility.sort_values(by=['Eligible'], ascending=False)
Decisions_vs_Eligibility = Decisions_vs_Eligibility[Decisions_vs_Eligibility['state']!= 'Total'] # Exclude the Total rows
alt.Chart(Decisions_vs_Eligibility).transform_fold(['Decisions_Made','Eligible'],as_=['Medicare Acceptance Ratio','Value']).mark_bar().encode(
alt.X('state:O', axis=None),#axis=alt.Axis(title=None, labels=False, ticks=False)),
alt.Y('Value:Q', axis=alt.Axis(grid=True)),
alt.Facet('fiscal_year:N',title="Medicare Acceptance Ratio for 2021 and 2022 by State",),
color='Medicare Acceptance Ratio:N',
tooltip = ['Medicare Acceptance Ratio:N', 'state:N', 'Value:N' ]
).properties(height=800, width=800).configure_view(
stroke='transparent'
).configure_scale(bandPaddingInner=0,
bandPaddingOuter=0.1,
).configure_header(labelOrient='bottom',
labelPadding = 3).configure_facet(spacing=5
)
C:\Users\mg_su\anaconda3\lib\site-packages\altair\utils\core.py:317: FutureWarning: iteritems is deprecated and will be removed in a future version. Use .items instead. for col_name, dtype in df.dtypes.iteritems():
This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`)); } if(typeof define === "function" && define.amd) { requirejs.config({paths}); require(["vega-embed"], displayChart, err => showError(`Error loading script: ${err.message}`)); } else { maybeLoadScript("vega", "5") .then(() => maybeLoadScript("vega-lite", "4.17.0")) .then(() => maybeLoadScript("vega-embed", "6")) .catch(showError) .then(() => displayChart(vegaEmbed)); } })({"config": {"view": {"continuousWidth": 400, "continuousHeight": 300, "stroke": "transparent"}, "facet": {"spacing": 5}, "header": {"labelOrient": "bottom", "labelPadding": 3}, "scale": {"bandPaddingInner": 0, "bandPaddingOuter": 0.1}}, "data": {"name": "data-069f510aec18cea5e06b50a4538c21e5"}, "mark": "bar", "encoding": {"color": {"field": "Medicare Acceptance Ratio", "type": "nominal"}, "facet": {"field": "fiscal_year", "title": "Medicare Acceptance Ratio for 2021 and 2022 by State", "type": "nominal"}, "tooltip": [{"field": "Medicare Acceptance Ratio", "type": "nominal"}, {"field": "state", "type": "nominal"}, {"field": "Value", "type": "nominal"}], "x": {"axis": null, "field": "state", "type": "ordinal"}, "y": {"axis": {"grid": true}, "field": "Value", "type": "quantitative"}}, "height": 800, "transform": [{"fold": ["Decisions_Made", "Eligible"], "as": ["Medicare Acceptance Ratio", "Value"]}], "width": 800, "$schema": "https://vega.github.io/schema/vega-lite/v4.17.0.json", "datasets": {"data-069f510aec18cea5e06b50a4538c21e5": [{"fiscal_year": 2021, "state": "Texas", "Decisions_Made": 65550, "Eligible": 40411}, {"fiscal_year": 2022, "state": "Texas", "Decisions_Made": 57421, "Eligible": 35061}, {"fiscal_year": 2021, "state": "Florida", "Decisions_Made": 43761, "Eligible": 23518}, {"fiscal_year": 2021, "state": "California", "Decisions_Made": 50175, "Eligible": 21788}, {"fiscal_year": 2021, "state": "Georgia", "Decisions_Made": 32978, "Eligible": 20268}, {"fiscal_year": 2021, "state": "New York", "Decisions_Made": 46571, "Eligible": 19165}, {"fiscal_year": 2022, "state": "Florida", "Decisions_Made": 33842, "Eligible": 18145}, {"fiscal_year": 2021, "state": "North Carolina", "Decisions_Made": 29945, "Eligible": 16575}, {"fiscal_year": 2022, "state": "Georgia", "Decisions_Made": 25387, "Eligible": 15234}, {"fiscal_year": 2022, "state": "California", "Decisions_Made": 31136, "Eligible": 13871}, {"fiscal_year": 2021, "state": "Pennsylvania", "Decisions_Made": 25180, "Eligible": 13585}, {"fiscal_year": 2021, "state": "Tennessee", "Decisions_Made": 21972, "Eligible": 13438}, {"fiscal_year": 2021, "state": "Michigan", "Decisions_Made": 24636, "Eligible": 13027}, {"fiscal_year": 2022, "state": "Pennsylvania", "Decisions_Made": 27131, "Eligible": 12809}, {"fiscal_year": 2022, "state": "New York", "Decisions_Made": 34410, "Eligible": 12293}, {"fiscal_year": 2022, "state": "North Carolina", "Decisions_Made": 23030, "Eligible": 12281}, {"fiscal_year": 2021, "state": "Illinois", "Decisions_Made": 22737, "Eligible": 10835}, {"fiscal_year": 2021, "state": "Ohio", "Decisions_Made": 21903, "Eligible": 10324}, {"fiscal_year": 2021, "state": "South Carolina", "Decisions_Made": 17380, "Eligible": 9891}, {"fiscal_year": 2021, "state": "Virginia", "Decisions_Made": 16741, "Eligible": 9537}, {"fiscal_year": 2021, "state": "New Jersey", "Decisions_Made": 16467, "Eligible": 8989}, {"fiscal_year": 2022, "state": "Tennessee", "Decisions_Made": 14518, "Eligible": 8788}, {"fiscal_year": 2021, "state": "Alabama", "Decisions_Made": 14110, "Eligible": 8396}, {"fiscal_year": 2022, "state": "Michigan", "Decisions_Made": 15742, "Eligible": 8057}, {"fiscal_year": 2022, "state": "Ohio", "Decisions_Made": 16285, "Eligible": 7694}, {"fiscal_year": 2021, "state": "Missouri", "Decisions_Made": 13725, "Eligible": 7608}, {"fiscal_year": 2022, "state": "Virginia", "Decisions_Made": 13646, "Eligible": 7442}, {"fiscal_year": 2021, "state": "Kentucky", "Decisions_Made": 13621, "Eligible": 7359}, {"fiscal_year": 2022, "state": "South Carolina", "Decisions_Made": 13362, "Eligible": 7213}, {"fiscal_year": 2022, "state": "Alabama", "Decisions_Made": 11854, "Eligible": 7026}, {"fiscal_year": 2022, "state": "Kentucky", "Decisions_Made": 15094, "Eligible": 6834}, {"fiscal_year": 2022, "state": "New Jersey", "Decisions_Made": 12426, "Eligible": 6571}, {"fiscal_year": 2021, "state": "Maryland", "Decisions_Made": 11274, "Eligible": 6404}, {"fiscal_year": 2021, "state": "Louisiana", "Decisions_Made": 11215, "Eligible": 5731}, {"fiscal_year": 2022, "state": "Missouri", "Decisions_Made": 10639, "Eligible": 5691}, {"fiscal_year": 2021, "state": "Indiana", "Decisions_Made": 12407, "Eligible": 5585}, {"fiscal_year": 2021, "state": "Oklahoma", "Decisions_Made": 9455, "Eligible": 5408}, {"fiscal_year": 2022, "state": "Illinois", "Decisions_Made": 12625, "Eligible": 5285}, {"fiscal_year": 2021, "state": "Arkansas", "Decisions_Made": 8878, "Eligible": 5176}, {"fiscal_year": 2021, "state": "Mississippi", "Decisions_Made": 9150, "Eligible": 5022}, {"fiscal_year": 2022, "state": "Mississippi", "Decisions_Made": 8532, "Eligible": 4840}, {"fiscal_year": 2022, "state": "Indiana", "Decisions_Made": 10340, "Eligible": 4772}, {"fiscal_year": 2022, "state": "Arkansas", "Decisions_Made": 7354, "Eligible": 4259}, {"fiscal_year": 2021, "state": "Washington", "Decisions_Made": 9593, "Eligible": 4255}, {"fiscal_year": 2022, "state": "Oklahoma", "Decisions_Made": 7467, "Eligible": 4196}, {"fiscal_year": 2021, "state": "Arizona", "Decisions_Made": 9473, "Eligible": 4174}, {"fiscal_year": 2021, "state": "Colorado", "Decisions_Made": 8161, "Eligible": 4004}, {"fiscal_year": 2022, "state": "Maryland", "Decisions_Made": 7796, "Eligible": 3885}, {"fiscal_year": 2021, "state": "Nevada", "Decisions_Made": 6451, "Eligible": 3570}, {"fiscal_year": 2021, "state": "West Virginia", "Decisions_Made": 6338, "Eligible": 3552}, {"fiscal_year": 2022, "state": "Louisiana", "Decisions_Made": 7126, "Eligible": 3454}, {"fiscal_year": 2021, "state": "Minnesota", "Decisions_Made": 7722, "Eligible": 3401}, {"fiscal_year": 2022, "state": "Washington", "Decisions_Made": 6744, "Eligible": 2990}, {"fiscal_year": 2021, "state": "Massachusetts", "Decisions_Made": 8299, "Eligible": 2954}, {"fiscal_year": 2022, "state": "Arizona", "Decisions_Made": 6844, "Eligible": 2915}, {"fiscal_year": 2021, "state": "Kansas", "Decisions_Made": 5216, "Eligible": 2912}, {"fiscal_year": 2022, "state": "Nevada", "Decisions_Made": 5087, "Eligible": 2755}, {"fiscal_year": 2021, "state": "Wisconsin", "Decisions_Made": 6709, "Eligible": 2744}, {"fiscal_year": 2021, "state": "Oregon", "Decisions_Made": 6271, "Eligible": 2652}, {"fiscal_year": 2021, "state": "New Mexico", "Decisions_Made": 5166, "Eligible": 2199}, {"fiscal_year": 2022, "state": "Kansas", "Decisions_Made": 4058, "Eligible": 2170}, {"fiscal_year": 2022, "state": "West Virginia", "Decisions_Made": 4193, "Eligible": 2106}, {"fiscal_year": 2021, "state": "Iowa", "Decisions_Made": 4447, "Eligible": 2048}, {"fiscal_year": 2022, "state": "Minnesota", "Decisions_Made": 4911, "Eligible": 2042}, {"fiscal_year": 2022, "state": "Oregon", "Decisions_Made": 4241, "Eligible": 1841}, {"fiscal_year": 2022, "state": "Wisconsin", "Decisions_Made": 4568, "Eligible": 1765}, {"fiscal_year": 2021, "state": "Utah", "Decisions_Made": 3291, "Eligible": 1705}, {"fiscal_year": 2022, "state": "Colorado", "Decisions_Made": 3994, "Eligible": 1636}, {"fiscal_year": 2022, "state": "Massachusetts", "Decisions_Made": 4672, "Eligible": 1567}, {"fiscal_year": 2021, "state": "Rhode Island", "Decisions_Made": 2814, "Eligible": 1459}, {"fiscal_year": 2022, "state": "Iowa", "Decisions_Made": 3359, "Eligible": 1451}, {"fiscal_year": 2021, "state": "Nebraska", "Decisions_Made": 2874, "Eligible": 1358}, {"fiscal_year": 2022, "state": "New Mexico", "Decisions_Made": 2756, "Eligible": 1216}, {"fiscal_year": 2022, "state": "Utah", "Decisions_Made": 2506, "Eligible": 1195}, {"fiscal_year": 2021, "state": "New Hampshire", "Decisions_Made": 2382, "Eligible": 1182}, {"fiscal_year": 2021, "state": "Montana", "Decisions_Made": 2190, "Eligible": 1079}, {"fiscal_year": 2021, "state": "Idaho", "Decisions_Made": 2554, "Eligible": 1009}, {"fiscal_year": 2021, "state": "Connecticut", "Decisions_Made": 2766, "Eligible": 981}, {"fiscal_year": 2021, "state": "Hawaii", "Decisions_Made": 2100, "Eligible": 914}, {"fiscal_year": 2022, "state": "Nebraska", "Decisions_Made": 1984, "Eligible": 847}, {"fiscal_year": 2021, "state": "Delaware", "Decisions_Made": 1962, "Eligible": 775}, {"fiscal_year": 2021, "state": "Vermont", "Decisions_Made": 1826, "Eligible": 775}, {"fiscal_year": 2022, "state": "Connecticut", "Decisions_Made": 1906, "Eligible": 736}, {"fiscal_year": 2021, "state": "Maine", "Decisions_Made": 3149, "Eligible": 726}, {"fiscal_year": 2022, "state": "Idaho", "Decisions_Made": 1824, "Eligible": 688}, {"fiscal_year": 2022, "state": "Montana", "Decisions_Made": 1406, "Eligible": 686}, {"fiscal_year": 2021, "state": "South Dakota", "Decisions_Made": 1401, "Eligible": 668}, {"fiscal_year": 2022, "state": "Rhode Island", "Decisions_Made": 1417, "Eligible": 649}, {"fiscal_year": 2022, "state": "New Hampshire", "Decisions_Made": 1386, "Eligible": 630}, {"fiscal_year": 2022, "state": "Hawaii", "Decisions_Made": 1413, "Eligible": 602}, {"fiscal_year": 2021, "state": "North Dakota", "Decisions_Made": 1255, "Eligible": 565}, {"fiscal_year": 2022, "state": "Delaware", "Decisions_Made": 1488, "Eligible": 551}, {"fiscal_year": 2021, "state": "DC", "Decisions_Made": 860, "Eligible": 530}, {"fiscal_year": 2022, "state": "Vermont", "Decisions_Made": 1235, "Eligible": 521}, {"fiscal_year": 2021, "state": "Wyoming", "Decisions_Made": 948, "Eligible": 514}, {"fiscal_year": 2022, "state": "South Dakota", "Decisions_Made": 1047, "Eligible": 500}, {"fiscal_year": 2022, "state": "Wyoming", "Decisions_Made": 750, "Eligible": 408}, {"fiscal_year": 2022, "state": "Maine", "Decisions_Made": 1122, "Eligible": 406}, {"fiscal_year": 2022, "state": "North Dakota", "Decisions_Made": 947, "Eligible": 394}, {"fiscal_year": 2022, "state": "DC", "Decisions_Made": 427, "Eligible": 269}, {"fiscal_year": 2021, "state": "Alaska", "Decisions_Made": 639, "Eligible": 265}, {"fiscal_year": 2022, "state": "Alaska", "Decisions_Made": 527, "Eligible": 241}, {"fiscal_year": 2021, "state": "No Zip Available", "Decisions_Made": 490, "Eligible": 9}, {"fiscal_year": 2022, "state": "No Zip Available", "Decisions_Made": 339, "Eligible": 7}]}}, {"mode": "vega-lite"});
<!-
If you have any questions about the blog, please create a Stack Overflow post here https://stackoverflow.com/questions/ask?tags=griddb .
Make sure that you use the “griddb” tag so our engineers can quickly reply to your questions.