paquete DataFrames, que se base en data.frames como originalmente implementado en R/S. Para usarlo tenemos que escribir:
julia> using DataFrames
y ahora tenemos acceso a las definiciones del paquete. Primero, implementa un valor especial NA "no accesible" para representar valores de variables desconocidos:
julia> NA
NA
julia> NA+1
NA
julia> sin(NA)
NA
Hacemos un vector de datos: (el tipo DataArray)
julia> dv =DataArray([1,4,2,9,4,5,2])
7-element DataArray{Int64,1}:
1
4
2
9
4
5
2
julia> length(dv)
7
julia> size(dv)
(7,)
Podemos asignar NA a uno de los elementos:
julia> dv[2]=NA
NA
julia> dv'
1x7 DataArray{Int64,2}:
1 NA 2 9 4 5 2
Note el uso de ' para transposición! (Y aqui, para ahorrar espacio).
julia> mean(dv)
NA
¿Podemos calcular el promedio de los elementos que no es NA? Usamos la función
removeNA:
julia> removeNA(dv)
6-element Array{Int64,1}:
1
2
9
4
5
2
julia> mean(removeNA(dv))
3.8333333333333335
Ahora construimos un DataFrame, una cierta matriz de filas y coumnas, donde cada columna es un
DataArray:
julia> df=DataFrame(A=1:5, B=["M","M","H","H","M"])
5x2 DataFrame:
A B
[1,] 1 "M"
[2,] 2 "M"
[3,] 3 "H"
[4,] 4 "H"
[5,] 5 "M"
julia> describe(df)
A
Min 1.0
1st Qu. 2.0
Median 3.0
Mean 3.0
3rd Qu. 4.0
Max 5.0
NAs 0
NA% 0.0%
B
Length 5
Type ASCIIString
NAs 0
NA% 0.0%
Unique 2
julia> size(df)
(5,2)
julia> length(df)
2
Veremos unos conjuntos de datos clasicos contenido en R:
julia> using RDatasets
julia> anscombe = data("datasets","anscombe")
11x9 DataFrame:
x1 x2 x3 x4 y1 y2 y3 y4
[1,] 1 10 10 10 8 8.04 9.14 7.46 6.58
[2,] 2 8 8 8 8 6.95 8.14 6.77 5.76
[3,] 3 13 13 13 8 7.58 8.74 12.74 7.71
[4,] 4 9 9 9 8 8.81 8.77 7.11 8.84
[5,] 5 11 11 11 8 8.33 9.26 7.81 8.47
[6,] 6 14 14 14 8 9.96 8.1 8.84 7.04
[7,] 7 6 6 6 8 7.24 6.13 6.08 5.25
[8,] 8 4 4 4 19 4.26 3.1 5.39 12.5
[9,] 9 12 12 12 8 10.84 9.13 8.15 5.56
[10,] 10 7 7 7 8 4.82 7.26 6.42 7.91
[11,] 11 5 5 5 8 5.68 4.74 5.73 6.89
julia> describe(anscombe)
Min 1.0
1st Qu. 3.5
Median 6.0
Mean 6.0
3rd Qu. 8.5
Max 11.0
NAs 0
NA% 0.0%
x1
Min 4.0
1st Qu. 6.5
Median 9.0
Mean 9.0
3rd Qu. 11.5
Max 14.0
NAs 0
NA% 0.0%
x2
Min 4.0
1st Qu. 6.5
Median 9.0
Mean 9.0
3rd Qu. 11.5
Max 14.0
NAs 0
NA% 0.0%
x3
Min 4.0
1st Qu. 6.5
Median 9.0
Mean 9.0
3rd Qu. 11.5
Max 14.0
NAs 0
NA% 0.0%
x4
Min 8.0
1st Qu. 8.0
Median 8.0
Mean 9.0
3rd Qu. 8.0
Max 19.0
NAs 0
NA% 0.0%
y1
Min 4.26
1st Qu. 6.3149999999999995
Median 7.58
Mean 7.500909090909093
3rd Qu. 8.57
Max 10.84
NAs 0
NA% 0.0%
y2
Min 3.1
1st Qu. 6.695
Median 8.14
Mean 7.500909090909091
3rd Qu. 8.95
Max 9.26
NAs 0
NA% 0.0%
y3
Min 5.39
1st Qu. 6.25
Median 7.11
Mean 7.500000000000001
3rd Qu. 7.98
Max 12.74
NAs 0
NA% 0.0%
y4
Min 5.25
1st Qu. 6.17
Median 7.04
Mean 7.50090909090909
3rd Qu. 8.190000000000001
Max 12.5
NAs 0
NA% 0.0%
julia> size(anscombe)
(11,9)
julia> length(anscombe)
9
julia> typeof(anscombe)
DataFrame (constructor with 22 methods)
julia> colnames(anscombe)
9-element Array{Union(ASCIIString,UTF8String),1}:
""
"x1"
"x2"
"x3"
"x4"
"y1"
"y2"
"y3"
"y4"
Eso es "anscombes quartet", un conjunto de data clasico, construido para mostrar que pares de variables
(x,y) puede tener exactamente los mismos valores de muchas estadisticos descriptivos, como correlación, coeficientes de regresión, etc, pero, sim embargo, tener plots muy diferentes!
Podemos investigar eso con julia?
julia> using GLM
julia> using Distributions
julia> colnames(anscombe)
9-element Array{Union(ASCIIString,UTF8String),1}:
""
"x1"
"x2"
"x3"
"x4"
"y1"
"y2"
"y3"
"y4"
julia> a1 = lm(:(y1 ~ x1), anscombe)
Formula: y1 ~ x1
Coefficients:
2x4 DataFrame:
Estimate Std.Error t value Pr(>|t|)
[1,] 3.00009 1.12475 2.66735 0.0257341
[2,] 0.500091 0.117906 4.24146 0.00216963
julia> a2 = lm(:(y2 ~ x2), anscombe)
Formula: y2 ~ x2
Coefficients:
2x4 DataFrame:
Estimate Std.Error t value Pr(>|t|)
[1,] 3.00091 1.1253 2.66676 0.0257589
[2,] 0.5 0.117964 4.23859 0.00217882
Aqui, la "Formula" en :(y2 ~ x2) se interpreta como en R.
En otro blog veremos como hacer plots!
No hay comentarios:
Publicar un comentario