Descarga de librerias:

library(ggplot2)
library(dplyr)
library(lubridate)

Primer archivo:

Gifts

account= read.csv("account_id_data.csv",sep=',')
#Dandoles el formato Date a la fecha de nacimiento y de incripción:
account <- account %>% mutate(date_of_birth = as.Date(date_of_birth,"%Y-%m-%d"),
                               original_recruitment_date=as.Date(original_recruitment_date,"%Y-%m-%d"))
#Dimensión del dataframe:
dim(account)
## [1] 9672    5
#Una rápida observación de las características de las variables:
str(account)
## 'data.frame':    9672 obs. of  5 variables:
##  $ account_id               : int  3000336 3000549 3000610 3003613 3004202 3004223 3004239 3004241 3004322 3004389 ...
##  $ date_of_birth            : Date, format: "1955-07-08" "1967-02-11" ...
##  $ original_recruitment_date: Date, format: "2006-05-12" "1999-05-20" ...
##  $ recruitment_channel      : chr  "apartado_correos" "apartado_correos" "web" "apartado_correos" ...
##  $ gender                   : chr  "mujer" "hombre" "mujer" "mujer" ...
head(account)
##   account_id date_of_birth original_recruitment_date recruitment_channel gender
## 1    3000336    1955-07-08                2006-05-12    apartado_correos  mujer
## 2    3000549    1967-02-11                1999-05-20    apartado_correos hombre
## 3    3000610    1975-06-08                2007-04-13                 web  mujer
## 4    3003613    1966-03-05                1984-01-01    apartado_correos  mujer
## 5    3004202    1978-03-01                1999-05-20                 web hombre
## 6    3004223    1970-10-28                2000-03-28                 web hombre

Segundo archivo:

Account_id_data

gifts= read.csv("gifts.csv",sep=',')
gifts$payment_date <- as.Date(gifts$payment_date, "%Y-%m-%d")
dim(gifts)
## [1] 102551      6
str(gifts)
## 'data.frame':    102551 obs. of  6 variables:
##  $ gift_id       : int  27132848 27133296 27133300 27133306 27133519 27133747 27134198 27134413 27134417 27134867 ...
##  $ account_id    : int  3481181 3356658 3749018 3594961 3545518 4138479 3218844 3584201 3841629 4109138 ...
##  $ payment_date  : Date, format: "2016-01-01" "2016-01-01" ...
##  $ payment_amount: num  6 12 12 50 20 6.01 40 3 50 30 ...
##  $ gift_type     : chr  "Cuotas" "Cuotas" "Cuotas" "Cuotas" ...
##  $ frequency     : chr  "Mensual" "Mensual" "Mensual" "Mensual" ...
head(gifts)
##    gift_id account_id payment_date payment_amount gift_type frequency
## 1 27132848    3481181   2016-01-01           6.00    Cuotas   Mensual
## 2 27133296    3356658   2016-01-01          12.00    Cuotas   Mensual
## 3 27133300    3749018   2016-01-01          12.00    Cuotas   Mensual
## 4 27133306    3594961   2016-01-01          50.00    Cuotas   Mensual
## 5 27133519    3545518   2016-01-01          20.00    Cuotas   Mensual
## 6 27133747    4138479   2016-01-01           6.01    Cuotas   Mensual
  1. ¿En qué mes de 2016 se realizaron más donativos puntuales?
    ¿Cuál fue el importe medio de estos donativos en ese mes?
gifts <- gifts %>% mutate(mes= format(payment_date,"%m"),
                          año = format(payment_date, "%Y"))
#Haciendo una agrupación por mes:
donacion_mes_2016 <- gifts %>% filter(año==2016) %>% group_by(mes) %>% 
summarise(n_donaciones=n(),importe_medio=mean(payment_amount,na.rm= T))
donacion_mes_2016
## # A tibble: 12 x 3
##    mes   n_donaciones importe_medio
##    <chr>        <int>         <dbl>
##  1 01            8188          19.0
##  2 02            8126          18.1
##  3 03            8276          17.3
##  4 04            9114          16.2
##  5 05            8691          17.5
##  6 06            8643          18.5
##  7 07            8696          17.7
##  8 08            8543          17.2
##  9 09            8568          17.5
## 10 10            8611          17.7
## 11 11            8496          17.6
## 12 12            8599          20.8

El mes con mayor número de aportes fue en marzo y el importe medio fue de 17.32 euros

  1. ¿Cuál es la antigüedad de los colaboradores en el 3r cuartil (75%muestra)? ¿Es mayor para los hombres o para las mujeres?
    (No tener en cuenta NA)
as.Date(quantile(as.numeric(account$original_recruitment_date),na.rm= T), origin ="1970-01-01")
##           0%          25%          50%          75%         100% 
## "1963-01-01" "2002-10-07" "2006-04-19" "2013-09-19" "2016-12-22"
#Aportes por sexo
table(account$gender)
## 
##        hombre indeterminado         mujer 
##          4382           164          5126
  • La antigüedad en el tercer cuartil corresponde al colaborador inscrito el 19 de Setiembre de 2013
  • Sin juzgar los aportantes cuyos sexos están indeterminados, existe una mayor cantidad de aportantes mujeres.


  1. Haz un gráfico que muestre el importe total de donativos “Cuotas” por mes y por “recruitment channel”.
    ¿En que mes los captados por teléfono tienen un importe de cuotas mayor?
donativocuota <- gifts %>% filter(gift_type=="Cuotas")
donativocuota$mes <- as.factor(donativocuota$mes)
donativoscuotas_union <- donativocuota %>% inner_join(account,by="account_id")
donativoscuotas_union_groupby <- donativoscuotas_union %>% group_by(mes,recruitment_channel) %>% 
summarise(total_cuotas=sum(payment_amount))
donativoscuotas_union_groupby
## # A tibble: 72 x 3
## # Groups:   mes [12]
##    mes   recruitment_channel total_cuotas
##    <fct> <chr>                      <dbl>
##  1 01    apartado_correos          59586.
##  2 01    cara_a_cara               18313.
##  3 01    llamada                   20432.
##  4 01    otros                       370.
##  5 01    puerta_a_puerta           28593.
##  6 01    web                       15348.
##  7 02    apartado_correos          55749.
##  8 02    cara_a_cara               18639.
##  9 02    llamada                   19368.
## 10 02    otros                       397.
## # ... with 62 more rows
ggplot(donativoscuotas_union_groupby,aes(mes,total_cuotas))+ geom_point() + facet_wrap(~ recruitment_channel)

Presenta un total de cuota por llamada mayor en diciembre

  1. Si clasificamos la Antiguedad en 4 grupos: los que tienen una antiguedad menor a 1 año “<1”, los que tienen un antiguedad igual o mayor a 1 año y menor a 3, “1_a_3”, los que tienen una antiguedad igual o mayor a 3 e inferior a 5, “3_a_5” y los que tienen una antiguedad mayor o igual a 5, “>5”. (No tener en cuenta NA’s)¿Puedes decir en cuál de estos grupos de antiguedad las mujeres tienen una media de cuota anualizada mayor? ?,¿Cuál es esa media? (cuota anualizada es la suma de todas las gift_type == “Cuotas” pagadas por cada colaborador durante el año) Dentro de este grupo “ganador”, ¿para qué canal de captación (“recruitment_channel”) la cuota anualizada es más alta??Cuál es el importe?
donativoscuotas_union_mujer <- donativoscuotas_union %>% filter(gender=="mujer")
donativoscuotas_union_mujer <- donativoscuotas_union_mujer %>% 
filter (!is.na(payment_date),!is.na(original_recruitment_date))
donativoscuotas_union_mujer<- donativoscuotas_union_mujer %>% 
mutate(años_antiguedad = interval(original_recruitment_date,payment_date) %/% years(1))
donativoscuotas_union_mujer<- donativoscuotas_union_mujer %>% 
mutate(antiguedad=case_when(años_antiguedad<1 ~"<1",
                            años_antiguedad>=1 & años_antiguedad<3 ~ "1_3",
                            años_antiguedad>=3 & años_antiguedad<5 ~ "3_5",
                            TRUE ~ ">5"))
donativoscuotas_union_mujer_antiguedadcuotamedia <- donativoscuotas_union_mujer %>% 
group_by(antiguedad,año,account_id) %>% summarize(cuota_anualizada=sum(payment_amount)) %>% 
group_by(antiguedad) %>% summarise(couta_media=mean(cuota_anualizada,na.rm=T))
donativoscuotas_union_mujer_antiguedadcuotamedia
## # A tibble: 4 x 2
##   antiguedad couta_media
##   <chr>            <dbl>
## 1 <1                93.0
## 2 >5               177. 
## 3 1_3              111. 
## 4 3_5              101.

Los que tienen una antiguedad mayor a los 5 años tienen la mejor de couta anual media es de 100.92 euros.

#Averiguando la aportación media de las aportantes femeninas con antiguedad mayor de 5 años como socias de acuerdo al canal de reclutamiento:
#Haciendo un groupby por recruitment channel y por account_id:
donantes_viejos <- donativoscuotas_union_mujer %>% filter(antiguedad==">5")
donantes_viejos_recruitmentchannel<- donantes_viejos %>% 
group_by(año,recruitment_channel,account_id)  %>% summarise(cuota_anualizada=sum(payment_amount)) %>% 
group_by(recruitment_channel) %>% summarise(cuota_media=mean(cuota_anualizada,na.rm=T))
donantes_viejos_recruitmentchannel
## # A tibble: 6 x 2
##   recruitment_channel cuota_media
##   <chr>                     <dbl>
## 1 apartado_correos           206.
## 2 cara_a_cara                130.
## 3 llamada                    144.
## 4 otros                      168.
## 5 puerta_a_puerta            150.
## 6 web                        225.

La cuota anual más alta viene a ser de aquellos inscritos por la internet, cuya cuota media es de 226.79 euros.

  1. Crea unos diagramas de caja (boxplot) con la cuota anualizada (ten en cuenta solo las cuotas menores de 500 eur) por canal de captación (recruitment_channel) y en función de los resultados, teniendo en cuenta que queremos maximizar la cuota anualizada de los donativos, ¿Qué canal/es se debería apostar?
cuotasmenores_rtc<-donativoscuotas_union %>% group_by(año,recruitment_channel,account_id) %>% 
summarise(cuota_anualizada=sum(payment_amount)) %>% filter(cuota_anualizada<500) %>% 
group_by(recruitment_channel) %>% summarise(total_cuotas=cuota_anualizada) 
ggplot(cuotasmenores_rtc,aes(recruitment_channel,total_cuotas))+ geom_boxplot()

Se apostaria en primer lugar por correos y luego por la web