By the end of 2018, the estimated percentage of US households reported to having at least one pet was around 70%. Among the companion animals, dogs and cats appear have been the most popular pets historically. In 2018, there approximately 184 Million dogs and cats are living as household companion animals in the United States. Each year, the number of cats and dogs entering animal shelters are around 7 Million.
As a professional animal enthusiast, my goal is to gather information from pet ownership and shelter statistics, and identify trends in animal outcomes in order to understand factors with significant impacts on pet adoption. During the process, I hope to highlight strengths, weaknesses, and progress made by animal lovers everywhere, to continue efforts in raising awareness and advocating for animals without a home.
The first data set records the outcome and intake statistics from the Humane society from 2015-2020. This data set was used to investigate shelter intake groups by reason for surrender, as well as euthanasia by reason for surrender.
The second data set is the monthly total intake and outcome statistics. January - July). I wanted to focus on the numbers with this data set to explore the impact of COVID-19 on the shelters specifically.
The data sets is provided by a Kaggle hosted competition for the machine learning community to use for data science practice and social good. The original data source is the Austin Animal Center, taken from the merican society for the prevention of cruelty to animals
The data sets from the humane society were scraped as pdf files using Tabula. They are available for download from their live saving statistics website. Since both data sets were extracted as whole pdf formats, I filtered through parts of the data sets relevant, and covert column types accordingly.
The Austin animal shelter data was downloaded and imported directly from Kaggle’s website for the “Shelter Animal Outcomes” competition.
Besides parsing to appropriate column types, I also converted most numbers into percentages. When comparing differences between variables such as dog vs. cat or each year, numbers alone could be misleading without the total count.
Image sources:
#ahs 2021
ggplot(monthly, aes(dates, total, group = intakes,
color = intakes)) +
geom_line(size = 1) +
geom_point(size = 4) +
labs(subtitle = "2021 Intake & Outcome Summary")
In the beginning of 2020, many have been working and studying from home during the lock down. Animal shelters experienced higher than ever adoption rates. As in-person work and school resumes, concerns were raised about pets adopted during the pandemic are getting surrendered and returned to the shelter when the owners no longer work from home full time. From the humane society’s report from January to this summer, both intakes and outcomes increased dramatically within one month and have been increasing more steadily in the spring.
kable(surrender_stat,
col.names = c(" ", "2015", "2016", "2017", "2018", "2019", "2020"), digits = 2) %>%
kable_styling("striped")
| 2015 | 2016 | 2017 | 2018 | 2019 | 2020 | |
|---|---|---|---|---|---|---|
| surrender | 47.30% | 46.44% | 44.32% | 44.20% | 44.15% | 44.46% |
| transfer | 34.4% | 35.4% | 36.5% | 38.7% | 37.9% | 35.0% |
| stray | 17.7% | 15.9% | 17.1% | 14.5% | 16.2% | 19.8% |
| cruelty | 0.7% | 2.2% | 2.1% | 2.5% | 1.7% | 0.8% |
#humane society f2015-2020
surr_plot <- surrender_stat %>% pivot_longer(c("2015", "2016", "2017", "2018", "2019", "2020"), names_to = "year", values_to = "cases") %>%
mutate(cases = parse_number(cases),
year = parse_number(year))
ggplot(surr_plot, aes(year, cases, fill = reason)) +
geom_col(position = position_dodge2(width = 1), width = 0.7) +
facet_wrap(~reason, scales = "free_y") +
theme_minimal() +
theme(legend.position = "none")
The owner surrender rate has a slight decline from 2015-2020. The increase in stray animal intakes could be the indication that more animals are being abandoned by their owners; However, I interpret it as the shelters’ effort in rescuing more animals over the years. Cruelty cases spiked from 2016-2018, but decreased by almost 2% by 2020.
# austin all 2013-16
ggplot(outcome_trend, aes(factor(Year), value, fill = AnimalType)) +
geom_col(position = "dodge", width = 0.7) +
facet_wrap(~ OutcomeType, scales = "free_y", ncol = 2) +
scale_fill_brewer(palette = "Reds") +
labs(x = "Year" , y = NULL) +
theme_minimal()
This is a glimpse of the outcomes from the Austin animal shelter from 2013-2016. It is encouraging that overall euthanasia rate has decreased over the years. However, euthanasia in cats is far greater than dogs and considerably slower progress. Surprisingly, there are around 25-30 % shelter dogs returned to their owners each year, which has increased over the years, but that is not the case in cats.
| 2013 | 2014 | 2015 | 2016 | |
|---|---|---|---|---|
| Transfer | 29.1% | 26.2% | 23.3% | 23.0% |
| Adoption | 39.4% | 41.5% | 41.8% | 45.1% |
| Euthanasia | 7.4% | 6.4% | 4.5% | 1.6% |
| Return_to_owner | 23.9% | 25.5% | 30.0% | 29.9% |
| Died | 0.2% | 0.3% | 0.3% | 0.3% |
dog_plot <- dog_outcomes %>%
group_by(Year) %>%
mutate(total = sum(n),
percent = n/total)
ggplot(dog_plot, aes(Year, percent, fill = OutcomeType)) +
geom_col(position = "dodge") +
facet_wrap(~OutcomeType, scales = "free_y") +
#coord_flip() +
theme_minimal()
#ggplot(dog_outcomes, aes(Year, n, fill = OutcomeType)) +
#geom_bar(position = position_dodge2(width = .5), width = 1) +
| 2013 | 2014 | 2015 | 2016 | |
|---|---|---|---|---|
| Transfer | 43.5% | 52.3% | 49.5% | 32.3% |
| Adoption | 45.3% | 35.4% | 38.1% | 56.3% |
| Euthanasia | 5.9% | 6.6% | 6.4% | 5.6% |
| Return_to_owner | 4.2% | 4.7% | 4.4% | 4.6% |
| Died | 1.1% | 1.0% | 1.6% | 1.2% |
cat_plot <- cat_outcomes %>%
group_by(Year) %>%
mutate(total = sum(n),
percent = n/total)
ggplot(cat_plot, aes(Year, percent, fill = OutcomeType)) +
geom_col(position = "dodge") +
facet_wrap(~OutcomeType, scales = "free_y") +
#coord_flip() +
theme_minimal()
The highlight for this table is that the proportion of animals with treatable conditions being euthanized decreased greatly over the years. Most euthanized animals are from untreatable illnesses
ggplot(euthanasia, aes(factor(year), cases, fill =
Euthanasia, group = Euthanasia)) +
geom_col(position = "dodge", width = 0.6) +
geom_point() +
geom_line() +
facet_wrap(~Euthanasia, scales = "free_y", ncol= 1) +
labs(x = NULL, y = NULL) +
scale_fill_brewer(palette = "Oranges") +
theme_minimal() +
theme(legend.position = "none",
plot.background = element_rect(colour = "black", size = 1))
euth_table <- as_tibble(ahs) %>%
slice(33:35) %>%
rename("Euthanasia" = 'Animal Intake and Outcomes') %>%
pivot_longer(c('2015','2016','2017','2018','2019','2020'),
names_to = "year", values_to = "cases" ) %>%
mutate(cases = parse_number(cases),
cases = ifelse(is.na(cases), 0, cases),
year = parse_number(year)) %>%
group_by(year) %>%
mutate( total = sum(cases),
cases = percent( cases/total, accuracy = 0.01)) %>%
select(-4) %>%
pivot_wider(names_from = year, values_from = cases)
kable(euth_table) %>% kable_styling("striped")
| Euthanasia | 2015 | 2016 | 2017 | 2018 | 2019 | 2020 |
|---|---|---|---|---|---|---|
| Unhealthy/Untreatable | 66.25% | 88.45% | 94.21% | 96.47% | 95.21% | 94.34% |
| Treatable Manageable | 32.01% | 9.48% | 4.83% | 2.30% | 4.32% | 4.11% |
| Treatable Rehabilitatable | 1.73% | 2.08% | 0.97% | 1.24% | 0.48% | 1.55% |
Each year, most animals are spayed and neutered. In some foster systems, animals are required to be spayed/neutered before adoption to prevent from more animals entering the shelters or euthanized.
kable(dog_names, caption = "dog names", row.names = NA) %>%
kable_styling("striped")
| Female | Male |
|---|---|
| Daisy | Max |
| Bella | Buddy |
| Lucy | Charlie |
| Princess | Rocky |
| Maggie | Jack |
| Luna | Chico |
| Ginger | Cooper |
| Lola | Duke |
| Sadie | Buster |
| Rosie | Hank |
| Female | Male |
|---|---|
| Bella | Oliver |
| Luna | Max |
| Lucy | Charlie |
| Daisy | Leo |
| Mia | Milo |
| Emma | George |
| Ginger | Oscar |
| Lilly | Blue |
| Molly | Cooper |
| Emily | Sam |
#colors
cat_color <- cats %>%
filter(OutcomeType == "Adoption") %>%
count(Color, sort = TRUE) %>%
slice(1:10) %>%
rename(Cats = Color) %>% select(-2)
dog_color <- dogs %>%
filter(OutcomeType == "Adoption") %>%
count(Color, sort = TRUE) %>%
slice(1:10) %>%
rename( Dogs = Color) %>% select(-2)
popular_colors <- bind_cols(dog_color, cat_color)
kable(popular_colors) %>% kable_styling("striped")
| Dogs | Cats |
|---|---|
| Black/White | Brown Tabby |
| Brown/White | Black |
| Tan/White | Black/White |
| Tricolor | Brown Tabby/White |
| Black | Orange Tabby |
| White | Tortie |
| Black/Tan | Calico |
| Tan | Orange Tabby/White |
| White/Brown | Blue Tabby |
| Brown | Blue |
mixes <- bind_cols(dog_mixed, cat_mixed)
kable(mixes, col.names = c("Dogs", "Cats")) %>% kable_styling("striped")
| Dogs | Cats |
|---|---|
| Miniature Schnauzer Mix | Domestic Medium Hair Mix |
| German Shepherd Mix | Domestic Shorthair Mix |
| Pit Bull Mix | Domestic Medium Hair Mix |
| Dachshund Longhair Mix | Domestic Shorthair Mix |
| Pit Bull Mix | Domestic Shorthair Mix |
| Chihuahua Longhair Mix | Domestic Medium Hair Mix |
| Australian Cattle Dog Mix | Domestic Shorthair Mix |
| Labrador Retriever Mix | Domestic Shorthair Mix |
| Chihuahua Shorthair Mix | Domestic Shorthair Mix |
| Harrier Mix | Domestic Shorthair Mix |
Puppies and Kittens are highly adoptable, especially kittens. Besides the cuteness, some owners might take into account the health problems in older pets. In adult cats, many might have a harder time getting adopted or have a higher chance of being returned due to compatiblity issues such as households with children, other animals, or simply another cat. The age in this graph is counted in months.
ggplot(age_outcome,
aes( x = months,
y = ifelse(AnimalType == "Cat", n, -n),
fill = AnimalType )) +
geom_bar(stat = "identity") +
coord_flip() +
scale_y_continuous(limits = c(-2500, 3500),
breaks = seq(-2500,3000,1500),
labels = abs) +
labs(title = "Adoption distribution by Age",
y = "Numbers Adopted", x = "Age in months") +
theme (plot.title = element_text(size=10)) +
theme_bw()
It is important to note that these data sets and my methods aren’t without weaknesses and bias. Accurate shelter and rescuing data are hard to obtain since there is no central reporting system. Overall numbers on pet owner statistics were collected from surveys, so we can only consider them as estimates. The majority of these data set are already calculated and categorized as summaries.
For example, it is common for shelter animals to be returned if they are having a hard time settling in with the family. I cannot trace the relationship between the adopted that were later returned. The most important factor missing from these data is the “surrender by owner” statistics. I think it would be worth while to understand why they are being surrendered. Some of these might include financial, behavioral, or health problems, which can only be reported at the owner’s discretion as well.
There are more questions to be asked and analyzed for animal adoptions. Advocating for animals is an ongoing effort, and my work doesn’t end with this project either. These data reports may only be used mainly by shelters or rescuing groups. I believe they would be powerful tools in educating pet owners or soon-to-be owners. I will list some resources I found below.
Too often pets are being adopt or purchased when the owners aren’t prepared and ready. Taking an animal into our lives is a big commitment that should be taken seriously. We shouldn’t get a pet just because they’re cute (even though they certainly are). They might be chaotic drooling little monsters that demand food and attention 24/7, the friendship and companion with a animal is so so beautiful.
He might only be here for a part of your life, but for him, you are his whole life.