import os
os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = 'C:/Users/santi/anaconda3/Library/plugins/platforms'

Introduction

Immigration has long been a topic of political discussion. The last presidential administration vowed to reduce illegal border crossings by implementing new immigration policies. This reports aims to show the impact of the new immigration policies through data, and seeks to understand if the new policies deterred immigration.

Dataset

The dataset used provides information on US Customs Border Patrol (CBP) immigrant detainees. The data collected is limited to January 2017 to June 2020. The fields collected are ‘date_in’ as the processing date for new detainees, ‘date_out’ is the date when the detainees were released, ‘app_date’ is the date the immigrant applied for immigration, ‘hours_in_custody’ is the amount of time the immigrant remained in the detention center, ‘age_group’ identifies and segments immigrants by age, ‘gender’,citizenship’ indicates the individual’s original country, ‘border’ is the location where the individual was taken into custody, ‘sector’ is the sector to which the CBP office belongs, and ‘field office’ is the office where the immigrant was taken. The Average time in detention ranges from about 20 hours to 140 hours and there are 584K records in this dataset. The field office, sector and border fields had a significant number of NA records indicating challenges in record keeping during this period of time.

The data collected can offer us an understanding from which countries the US receives the greatest number of illegal immigrants, and help us better prepare for and anticipate the needs of the groups of people.

Findings

The Findings expressed in this report are based on data on US Customs Border Patrol detentions from January 2017 through June 2020. This data investigates the number of children held at US detention centers, the countries from which they emigrated and the average time they spend in a US detention facility. This report will illuminate the effect of tight immigration policy on detention center capacity and the growing amount of time it took to release children from a US detention center.

CBP Detentions by Month

The first area of investigation is the number of Customs Border Patrol Detentions by Month. The scatter plot below shows the total number of detentions between Jan 2017 and Jun 2020, which aligns closely with President Trump Administration. In the first year of the Trump Administration (2017), less than 10,000 immigrant children per month were placed in a US Custom Border Patrol Detention Center although the total steadily increased from March through December of 2017. That number grew to over 20,000 in 2018 and climbed to nearly 60,000 detentions in May of 2019, before starting to taper off and drop below 10,000 by the end of 2019. The drop-off observed in 2019 coincides with detention center capacity constraints, and media coverage of detention center conditions and practices.


#import os
#os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = 'C:\Users\santi\anaconda3\Library\plugins\platforms'

#US Border Patrol Detentions Scatter Plot

#each row of data represents one new immigrant child entered into a CBP detention center

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import warnings

warnings.filterwarnings("ignore")

path = "C:/Users/santi/OneDrive/Desktop/MBA Program/GB736 Data Visualization/Python Assignment/"

filename = path + "cbp_foia_response-oct_2020.csv"

cbp_df = pd.read_csv(filename, nrows = 5)

cbp_df = pd.read_csv(filename, usecols = ['date_in', 'hours_in_custody'])

#format date from object to date
cbp_df['date_in'] = pd.to_datetime(cbp_df['date_in'], format = '%Y-%m-%d %H:%M:%S')
#extract Month and Year
cbp_df['Year'] = cbp_df['date_in'].dt.year

cbp_df['Month'] = cbp_df['date_in'].dt.month
cbp_df['MonthName'] = cbp_df.date_in.dt.strftime('%b')

#group data by year than month and count up the number of detentions
cbp_x = cbp_df.groupby(['Year', 'Month']).agg({'date_in':'count','hours_in_custody':'sum'}).reset_index()
cbp_x.rename(columns={'date_in': 'NumberOfDetentions', 'hours_in_custody':'TotalHrs'},inplace = True)

#set year and month to integer
cbp_x['Year'] = cbp_x['Year'].astype('int')
cbp_x['Month'] = cbp_x['Month'].astype('int')

cbp_x['NumberOfDetentions'].max()

#Round to zero decimals because the plot can only use integers
cbp_x['count_hundreds'] = round(cbp_x['NumberOfDetentions']/100, 0)

plt.figure(figsize = (8,5)) #need this at the beginning 18 is width and 10 is height

plt.scatter(cbp_x['Month'], cbp_x['Year'], marker = 's',cmap = 'plasma', c = cbp_x['count_hundreds'], s = cbp_x['count_hundreds'], edgecolors = 'black') #cmap changes color
plt.title('Customs Border Patrol Detentions by Month from Jan 2017 to Jun 2020', fontsize = 14)
plt.xlabel('Months of the Year', fontsize = 12)
plt.ylabel('Year', fontsize=12)

#set legend label size
cbar = plt.colorbar()
cbar.set_label('Number of Detentions', rotation = 270, fontsize=14, color='black', labelpad = 30)

#adjust tick marks/scale for legend so that it increments by 100 and goes to max count
my_colorbar_ticks = [*range(100, int(cbp_x['count_hundreds'].max()), 100)]
cbar.set_ticks(my_colorbar_ticks)

#scale legend values to their appropriate values of ten-thousands
my_colorbar_tick_labels = [*range(10000, int(cbp_x['NumberOfDetentions'].max()), 10000)]

#add commas to each number in tick labels for legend
my_colorbar_tick_labels = [ '{:,}'.format(each) for each in my_colorbar_tick_labels]
cbar.set_ticklabels(my_colorbar_tick_labels)

#add tick marks to x-axis for each Month
my_x_ticks = [*range(cbp_x['Month'].min(), cbp_x['Month'].max()+1, 1)]
plt.xticks(my_x_ticks, fontsize = 10, color = 'black')

#add tick marks to x-axis for each Month
my_y_ticks = [*range(cbp_x['Year'].min(), cbp_x['Year'].max()+1, 1)]
plt.yticks(my_y_ticks, fontsize = 10, color = 'black')
    
plt.show() 

Top Immigrant Countries by Avg Time in Detention

The “Top 100 Immigrant Countries by Average Time in Detention” chart shows the overall distribution of countries rank ordered by average time in detention. The average time in detention for the Top 100 countries is 52.23 hours (2 days and 4 hours), where the highest average time in detention is about 140 hours and the lowest is just over 20 hours. When we delve further into the data and investigate the “Top 25 Immigrant Countries by Average Time in Detention,” the mean time in detention rises to 79.25 hours (3 days and 7 hours). The lower chart allows us to study which immigrant countries citizens tend to spend the greatest time in a US Customs and Border Patrol Detention center. Child Immigrants from the countries of Togo, Sierra Leone, Russia, Saudi Arabia, Armenia, and Sri Lanka have average the greatest amount of time in a US detention center. Surprisingly, the average amount of time children of United States’ neighboring Central American countries spend in a detention center is not even in the top 10. Nicaragua is the first Central American country to appear on the list in the 13th position with an average time of 72 hours which is below the mean of 79.25 hours for the top 25. What is also notable is that our bordering neighbor, Mexico does not appear on the Top 25 list for average time in a US CBP detention center.

#US Border Patrol Immigrant Average Time in Detention
#Vertical Bar Plot in Python
#each row of data represents one new immigrant child entered into a CBP detention center

import pandas as pd 
import numpy as np
import matplotlib.pyplot as plt
import warnings

warnings.filterwarnings("ignore")

path = "C:/Users/santi/OneDrive/Desktop/MBA Program/GB736 Data Visualization/Python Assignment/"

filename = path + "cbp_foia_response-oct_2020.csv"

cbp_df = pd.read_csv(filename)
cbp_df = pd.read_csv(filename, usecols = ['citizenship','hours_in_custody'])

#aggregate data by country of citizenship then find the average number of hours in detention for each country
myresult = cbp_df.groupby('citizenship', as_index = False)['hours_in_custody'].agg('mean')

#function that color codes the chart bars
def pick_colors_according_to_mean_count(this_data):
    colors = []
    avg = this_data.hours_in_custody.mean()
    for each in this_data.hours_in_custody:
        if each > avg*1.01: 
            colors.append('palevioletred')
        elif each < avg*0.99:
            colors.append('mediumslateblue')
        else:
            colors.append('black')
    return colors

#sort countries of citizenship by avg hours in custody in descending order while renumbering the index
x = myresult.sort_values('hours_in_custody', ascending = False).reset_index(drop=True)

import matplotlib.patches as mpatches

#set range for data for each chart, first chart will look at top 100 and second chart will look at top 25
bottom1 = 1
top1 = 100
x1 = x.loc[bottom1:top1]
my_colors1 = pick_colors_according_to_mean_count(x1)
my_colors1
bottom2 = 1
top2 = 25
x2 = x.loc[bottom2:top2]
my_colors2 = pick_colors_according_to_mean_count(x2)
my_colors2

#define legend colors and labels
Above = mpatches.Patch(color = 'palevioletred', label = 'Above Average')
At = mpatches.Patch(color = 'black', label = 'Within 1% of the Average')
Below = mpatches.Patch(color = 'mediumslateblue', label = 'Below Average')

fig = plt.figure(figsize=(16,14))
fig.suptitle('Average Time in US Immigration Detention Centers by Country of Origin: \n Top '+str(top1) + ' and Top' + str(top2), fontsize = 20, fontweight = 'bold')

#----create first chart that visualizes the Top 100 immigrant countries based on average number of hours in detention---


ax1 = fig.add_subplot(2,1,1)
ax1.bar(x1.citizenship,x1.hours_in_custody, label = 'Hours in Custody', color = my_colors1)
ax1.legend(handles = [Above, At, Below], fontsize = 14)

#add horizontal line to the chart representing the mean for the Top 100 dataset
plt.axhline(x1.hours_in_custody.mean(), color= 'firebrick', linestyle = 'dashed') #add horizontal line to the chart

#adjust, and label axis
ax1.spines['right'].set_visible(False)
ax1.spines['top'].set_visible(False)
ax1.axes.xaxis.set_visible(False)
plt.ylabel('Hours in Detention', fontsize=14)

#set the y-axis scale min and max 
plt.ylim(0,x2.hours_in_custody.max()*1.2)

#add chart title to first chart
ax1.set_title('Top ' + str(top1) +' Immigrant Countries by Average Time in Detention', size = 20) #convert Top1 to a string

#add text for line with mean
ax1.text(top1-10,x1.hours_in_custody.mean()+5, 'Mean= ' + str(round(x1.hours_in_custody.mean(),2)), rotation=0, fontsize = 14)

#----create second chart that looks at the Top 25 immigrant countries based on average number of hours in detention---
ax2 = fig.add_subplot(2,1,2)
ax2.bar(x2.citizenship,x2.hours_in_custody, label = 'Hours in Custody', color = my_colors2)
ax2.legend(handles = [Above, At, Below], fontsize = 14)

#add horizontal line to the chart representing the mean for the Top 25 dataset
plt.axhline(x2.hours_in_custody.mean(), color= 'firebrick', linestyle = 'dashed') 

#adjust, rotate, and label axis
ax2.spines['right'].set_visible(False)
ax2.spines['top'].set_visible(False)
ax2.set_xticklabels(labels = x2.citizenship, rotation=90)
plt.xlabel('Country of Emigration', fontsize = 14)
plt.ylabel('Hours in Detention', fontsize=14)

#add labels to top of each bar on the chart
for row_counter, value_at_row_counter in enumerate(x2.hours_in_custody):

    ax2.text(row_counter, value_at_row_counter+3, str(round(value_at_row_counter,1)), color = 'black' , size = 10,
            ha = 'center', backgroundcolor = 'white') 

#set the y-axis scale min and max 
plt.ylim(0,x2.hours_in_custody.max()*1.2)

#add chart title to second chart
ax2.set_title('Top ' + str(top2) +' Immigrant Countries by Average Time in Detention', size = 20) 

#add text for line with mean
ax2.text(top2-3,x2.hours_in_custody.mean()+5,'Mean= ' + str(round(x2.hours_in_custody.mean(),2)), rotation=0, fontsize = 14)

#create buffer between both charts
fig.subplots_adjust(hspace = 0.35)

plt.show()

Total CBP Detentions by Country of Origin

While the Top Immigrant Countries by Average Time in Detention provided a sense for how long on average children were detained based on the country they emigrated from, the Total Customs and Border Patrol Detentions Chart displays the top 10 countries by total number of detentions. The line chart below shows the top 10 rank ordered by the total number of detentions between January 2017 to June 2020. What we note is that Guatemala has the highest total number of detentions followed by Honduras, Mexico, El Salvador, Brazil, Nicaragua, Ecuador, Venezuela, Cuba, and India. Total detentions for Guatemala, Honduras, and El Salvador peaked around May 2019 and then steeply declined afterwards, but Mexico’s total number of detentions remained relatively steady during the period and peaked in August 2020 and slowly declined. Guatemala, Honduras, and El Salvador were also in the list of the Top 25 countries by average detention time, with an average of 70.1 hours, 72.2 hours, and 71.7 hours respectively.

#US Border Patrol Immigrant Totals by Month
#Multiple Line Plot in Python


#each row of data represents one new immigrant child entered into a CBP detention center

import pandas as pd 
import numpy as np
import matplotlib.pyplot as plt
import warnings

warnings.filterwarnings("ignore")

path = "C:/Users/santi/OneDrive/Desktop/MBA Program/GB736 Data Visualization/Python Assignment/"

filename = path + "cbp_foia_response-oct_2020.csv"

cbp_df_orig = pd.read_csv(filename)

CtryMonthlyTot_df = pd.read_csv(filename, usecols = ['date_in','citizenship'])

CtryMonthlyTot_df.date_in.isna().sum()
CtryMonthlyTot_df = CtryMonthlyTot_df.dropna(subset = ['date_in'])

#format date from object to date
CtryMonthlyTot_df['date_in'] = pd.to_datetime(CtryMonthlyTot_df['date_in'], format = '%Y-%m-%d %H:%M:%S')

CtryMonthlyTot_df['Year'] = CtryMonthlyTot_df['date_in'].dt.year
CtryMonthlyTot_df['Month'] = CtryMonthlyTot_df['date_in'].dt.month

CtryMonthlyTot_df['MonthName'] = CtryMonthlyTot_df.date_in.dt.strftime('%b')

CtryMonthlyTot_df.Year.isna().sum()
CtryMonthlyTot_df['MonthYear'] = CtryMonthlyTot_df['Year'].astype(str) + '-' + CtryMonthlyTot_df['MonthName']

MonthlyTot_df = CtryMonthlyTot_df.groupby(['citizenship','MonthYear', 'Year', 'Month'])['date_in'].count().reset_index(name = 'Number of Detentions')

TotalDetentions_df = MonthlyTot_df.groupby(['citizenship'])['Number of Detentions'].sum().reset_index(name = 'TotDetentions')

TotalDetentions_df = TotalDetentions_df.sort_values('TotDetentions', ascending = False).reset_index(drop=True)

Top10List = TotalDetentions_df.citizenship[0:10]

NewMonthlyTot_df = MonthlyTot_df[MonthlyTot_df['citizenship'].isin(Top10List)]

NewMonthlyTot_df = NewMonthlyTot_df.sort_values(['Year', 'Month'], ascending = True)

from matplotlib.ticker import FuncFormatter

fig = plt.figure(figsize = (18,10))
ax = fig.add_subplot(1,1,1)

my_colors = {'GUATEMALA':'blue', 'HONDURAS':'red', 'MEXICO':'green', 'EL SALVADOR':'gray', 'BRAZIL':'purple', 'NICARAGUA':'gold', 'ECUADOR':'brown', 'VENEZUELA': 'orange', 'CUBA': 'teal','INDIA': 'black'}

for key, grp in NewMonthlyTot_df.groupby(['citizenship']):  #grp represents the resulting subset
    grp.plot(ax = ax, kind = 'line', x = 'MonthYear', y = 'Number of Detentions', color = my_colors[key], label = key, marker = 'o', )

plt.title('Total Customs and Border Patrol Detentions by Country of Origin \n from Jan 2017 to Jun 2020', fontsize = 22)
ax.set_xlabel('Month and Year', fontsize = 18, labelpad = 20)
ax.set_ylabel('Total Detentions', fontsize = 18, labelpad = 20)
ax.tick_params(axis = 'x', labelsize =14, rotation = 90)
ax.tick_params(axis = 'y', labelsize = 14, rotation = 0)
#ax.axes.tick_params(axis=  'x', which= 'minor')


#ax.set_xticks((np.arange(42), by=1) 

handles, labels =ax.get_legend_handles_labels() 
handles = [handles[4], handles[5], handles[7], handles[3], handles[0], handles[8], handles[2], handles[9], handles[1], handles[6]]
labels = [labels[4],labels[5], labels[7], labels[3], labels[0], labels[8], labels[2], labels[9], labels[1], labels[6]]
plt.legend(handles, labels, loc = 'best', fontsize = 14, ncol = 1)

plt.show()

Detentions by Age and Gender

The major cause of concern for immigrant child detention was related to extended periods of separation from parents. The Total Detentions by Gender and Age aims to better understand the distribution of children detained by age group and gender using a pie chart. Children under the age of 2 constituted just under 12% of the total population. For children 3-5 years, 6-8 years, 9-11 years, and 12 -14 years the percentage of children in detention for each group ranged from 11.7% to 15.7%, where there were more children in the 3-5 year, and 6–8-year range. The most notable observation is that children aged 15-18 years accounts for nearly one-third of all detentions and nearly 75% of those detentions are males. This is noticeably different from all other age groups where the distribution of gender is more closely split. This may indicate that minors between the age of 15-18 may be fleeing their countries without parents.


#Pie chart of distribution of detentions by Age and Gender 
Age_group_df = pd.read_csv(filename, usecols = ['age_group', 'gender'])

Age_group_df.age_group.isna().sum()
Age_group_df = Age_group_df.dropna(subset = ['age_group'])
Age_group_df.gender.isna().sum()
Age_group_df = Age_group_df.dropna(subset = ['gender'])
Gender_Age_pie_df = Age_group_df.groupby(['gender', 'age_group'])['age_group'].count().reset_index(name = 'TotalCount')

Gender_Age_pie_df.loc[(Gender_Age_pie_df.gender == 'F - FEMALE'),'gender'] = 'Female'
Gender_Age_pie_df.loc[(Gender_Age_pie_df.gender == 'M - MALE'),'gender'] = 'Male'
Gender_Age_pie_df.loc[(Gender_Age_pie_df.gender == 'U - UNKNOWN'),'gender'] = 'Unknown'

Gender_Age_pie_df=Gender_Age_pie_df[Gender_Age_pie_df.gender != 'Unknown']

Gender_Age_pie_df = Gender_Age_pie_df.groupby(['gender', 'age_group'])['TotalCount'].sum().reset_index(name = 'TotalDetentions')

titles = list(Gender_Age_pie_df.columns)
titles[0],titles[1] = titles[1],titles[0]
Gender_Age_pie_df=Gender_Age_pie_df[titles]
Gender_Age_pie_df

#sort_order = ['Under 1 year','1-2 years', '3-5 years', '6-8 years','9-11 years', '12-14 years', '15-18 years']
Gender_Age_pie_df['age_group'] = pd.Categorical(
    Gender_Age_pie_df['age_group'], 
    categories=['Under 1 year','1-2 years', '3-5 years', '6-8 years','9-11 years', '12-14 years', '15-18 years'], 
    ordered=True
)
Gender_Age_pie_df.sort_values('age_group').reset_index(drop=True)

#outside Pie colors
number_outside_colors = len(Gender_Age_pie_df.age_group.unique())
outside_color_ref_number = np.arange(number_outside_colors)*2 #scale the selection of colors


#inside Pie colors
number_inside_colors =len(Gender_Age_pie_df.gender.unique())
all_color_ref_number = [13,1]

inside_color_ref_number = []

#find color not used in inside colors and add to inside color list
for each in all_color_ref_number: 
    if each not in outside_color_ref_number:
        inside_color_ref_number.append(each)

import matplotlib.patches as mpatches

fig =plt.figure(figsize =(8,8))
ax = fig.add_subplot(1,1,1)

colormap = plt.get_cmap("tab20")
outer_colors =colormap(outside_color_ref_number)

all_detentions = Gender_Age_pie_df.TotalDetentions.sum() 

Gender_Age_pie_df.groupby(['age_group'])['TotalDetentions'].sum().plot(
        kind = 'pie', radius = 1, colors = outer_colors, pctdistance = 0.85, labeldistance = 1.05,
        wedgeprops = {'edgecolor':'white'}, textprops = {'fontsize':12},
        autopct = lambda p: '{:.1f}%\n ({:.1f}k)'.format(p,(p/100)*all_detentions/1e3),
        startangle = 90)

#inner nested pie
inner_colors = colormap(inside_color_ref_number)
Gender_Age_pie_df.groupby(['age_group','gender'])['TotalDetentions'].sum().plot(
       kind = 'pie', radius = 0.7, colors = inner_colors, pctdistance = 0.75, labeldistance = None, 
       wedgeprops = {'edgecolor':'white'}, textprops = {'fontsize': 10}, rotatelabels = True,
       autopct = lambda x: format(x/100, '.2%') if x > 2 else None,
       startangle = 90)


#draw the hole in the pie chart
hole = plt.Circle((0,0), 0.28, fc = 'white')
fig1 = plt.gcf()
fig1.gca().add_artist(hole)


ax.yaxis.set_visible(False)
plt.title('Total US CBP Child Detentions by Age and Gender', fontsize = 18)


#--rotate gender percent label

#define legend colors and labels
Female = mpatches.Patch(color = colormap(13), label = 'Female')
Male = mpatches.Patch(color = colormap(1), label = 'Male')
ax.legend(handles = [Female, Male], loc = 'upper right', fontsize = 12)


ax.axis('equal')
plt.tight_layout() #fixes the label positions

ax.text(0,0, 'Total Child Detentions\n' + str(round(all_detentions/1e3, 2)) + 'k', size = 10, ha = 'center',va = 'center')

#add note under chart about unlabeled pie segments
ax.annotate('Note: Unlabeled pie segments values are less than 2%',
            xy = (0.5, 0),
            xycoords='axes fraction',
            ha='center',
            va="center",
            fontsize=10)

fig.tight_layout()

plt.show()

Change in Avg Holding Time

The “Change in Average Holding Time by Quarter” waterfall chart below aligns with our previous findings. As the total number of detentions rose, so to did the average time children were spending in detention. The red bars indicate quarters in which the average amount of time in detention increased relative to the prior quarter. At its peak, immigrant children spent 84 hours (3.5 days)in detention centers on average in Quarter 4 of 2018 before being released. That stands in stark contrast to the lowest average time of 25 hours (~2 days) prior to policy changes during Quarter 2 of 2017. Once concerns were raised about child separations, child holding time reduced steadily and reached a new average low of 11 hours in Quarter 2 of 2020.


# Waterfall Chart for Average Time in Detention
import pandas as pd 
import numpy as np
import matplotlib.pyplot as plt
import warnings

warnings.filterwarnings("ignore")

path = "C:/Users/santi/OneDrive/Desktop/MBA Program/GB736 Data Visualization/Python Assignment/"

filename = path + "cbp_foia_response-oct_2020.csv"


cbp_df = pd.read_csv(filename, usecols = ['date_in', 'hours_in_custody'])

#format date from object to date
cbp_df['date_in'] = pd.to_datetime(cbp_df['date_in'], format = '%Y-%m-%d %H:%M:%S')

#extract Month and Year
cbp_df['Year'] = cbp_df['date_in'].dt.year
cbp_df['Month'] = cbp_df['date_in'].dt.month
cbp_df['MonthName'] = cbp_df.date_in.dt.strftime('%b')
cbp_df['Quarter'] = 'Qtr ' + cbp_df.date_in.dt.quarter.astype('str')

#group data by year then Quarter and count up the number of detentions and total hours
cbp_x = cbp_df.groupby(['Year','Quarter']).agg({'date_in':'count','hours_in_custody':'sum'}).reset_index()
cbp_x.rename(columns={'date_in': 'NumberOfDetentions', 'hours_in_custody':'TotalHrs'},inplace = True)

cbp_x['AverageTime'] =cbp_x['TotalHrs']/cbp_x['NumberOfDetentions']

cbp_x['QuarterYear'] = cbp_x['Quarter'].astype(str)+ ' (' + cbp_x['Year'].astype(str) + ')'
cbp_wf_df = cbp_x[['QuarterYear', 'AverageTime']]


cbp_wf_df['Deviation'] = [cbp_wf_df['AverageTime'][i] if i==0 else cbp_wf_df['AverageTime'][i]-cbp_wf_df['AverageTime'][i-1] for i in range(len(cbp_wf_df))]
cbp_wf_df['Deviation2'] = round(cbp_wf_df.Deviation,1)

#fig.show

import plotly.io as pio

pio.write_html(fig,path+"WaterfallofAvgTimeDetentions4.html", auto_open=False)

Conclusion

The data presented conveys that while immigration policy did affect immigration rates at the southern US border, the policies appeared to have the reverse of the intended effect. Detentions soared between early 2017 and mid-2019, from 10K to nearly 60K a month.They also had a detrimental effect on children and the amount of time they were separated from family. This investigation would benefit from additional historical context on policies, and greater clarity on which detention centers the children were placed at. The information collected expands my understanding of the volume of immigrants being processed and the subsequent processing out issues. From a sociological perspective, I would be interested in understanding the political environments these immigrants face and the impetus for taking such a risky journey, especially in the countries of Guatemala, Honduras, El Salvador, and Mexico from which the US receives the greatest number of immigrants.