Ir al contenido

Uso de DataFrames.jl

·709 palabras·4 mins
Urtzi Enriquez-Urzelai
Autor
Urtzi Enriquez-Urzelai
Ecofisiólogo evolutivo
Julia Tutoriales - Este artículo es parte de una serie.
Parte 1: Este artículo

En este ejemplo, trabajaré con un conjunto de datos de la población mundial por país, descargado de internet. Esta lección está basada en un vídeo de YouTube 1.

Importación de datos
#

using DataFrames
using CSV

wp = DataFrame(CSV.File("./world_pop.csv"))
first(wp, 5)
5×8 DataFrame
RowCountryPopulation 2024Population 2023Area (km2)Density (/km2)Growth RateWorld %World Rank
StringInt64Int64String7Float64Float64Float64?Int64
1India144171985214286276633M485.00.00920.18011
2China142517878214256713529.4M151.0-0.00030.1782
3United States3418144203399965639.1M37.00.00530.04273
4Indonesia2797980492775341221.9M149.00.00820.0354
5Pakistan245209815240485658770.9K318.00.01960.03065
describe(wp)
8×7 DataFrame
Rowvariablemeanminmedianmaxnmissingeltype
SymbolUnion…AnyUnion…AnyInt64Type
1CountryAfghanistanZimbabwe0String
2Population 20243.46886e75265.62636e614417198520Int64
3Population 20233.43744e75185.6439e614286276630Int64
4Area (km2)1.1K< 10String7
5Density (/km2)453.7880.1498.521674.00Float64
6Growth Rate0.00920043-0.03090.007950.04830Float64
7World %0.004446490.00.000750.18016Union{Missing, Float64}
8World Rank117.51117.52340Int64
names(wp)
8-element Vector{String}:
 "Country"
 "Population 2024"
 "Population 2023"
 "Area (km2)"
 "Density (/km2)"
 "Growth Rate"
 "World %"
 "World Rank"

Manipulación de datos (Data wrangling)
#

Code snippet

wp.id = 1:nrow(wp)
first(wp, 5)
5×9 DataFrame
RowCountryPopulation 2024Population 2023Area (km2)Density (/km2)Growth RateWorld %World Rankid
StringInt64Int64String7Float64Float64Float64?Int64Int64
1India144171985214286276633M485.00.00920.180111
2China142517878214256713529.4M151.0-0.00030.17822
3United States3418144203399965639.1M37.00.00530.042733
4Indonesia2797980492775341221.9M149.00.00820.03544
5Pakistan245209815240485658770.9K318.00.01960.030655
colnames = [:country, :pop2024, :pop2023, :area, :density, :growth_rate, :world_perc, :world_rank, :id]
rename!(wp, colnames)
describe(wp)
9×7 DataFrame
Rowvariablemeanminmedianmaxnmissingeltype
SymbolUnion…AnyUnion…AnyInt64Type
1countryAfghanistanZimbabwe0String
2pop20243.46886e75265.62636e614417198520Int64
3pop20233.43744e75185.6439e614286276630Int64
4area1.1K< 10String7
5density453.7880.1498.521674.00Float64
6growth_rate0.00920043-0.03090.007950.04830Float64
7world_perc0.004446490.00.000750.18016Union{Missing, Float64}
8world_rank117.51117.52340Int64
9id117.51117.52340Int64
wp_clean = select!(wp, :id, :country, :pop2024, :growth_rate);

¡Ten cuidado! El signo de exclamación (!) modifica también la tabla original. Recuerda que no estamos haciendo copias, sino creando nuevos punteros a los mismos objetos en memoria.

describe(wp_clean)
4×7 DataFrame
Rowvariablemeanminmedianmaxnmissingeltype
SymbolUnion…AnyUnion…AnyInt64DataType
1id117.51117.52340Int64
2countryAfghanistanZimbabwe0String
3pop20243.46886e75265.62636e614417198520Int64
4growth_rate0.00920043-0.03090.007950.04830Float64
describe(wp)
4×7 DataFrame
Rowvariablemeanminmedianmaxnmissingeltype
SymbolUnion…AnyUnion…AnyInt64DataType
1id117.51117.52340Int64
2countryAfghanistanZimbabwe0String
3pop20243.46886e75265.62636e614417198520Int64
4growth_rate0.00920043-0.03090.007950.04830Float64

Subconjuntos (Subsetting)
#

Es posible comprobar si una cadena (p. ej., el nombre de un país) o un valor está presente utilizando el operador in.

"Tanzania" in wp.country
true

Podemos obtener el índice donde se encuentra un país específico utilizando las funciones findall() o findfirst().

# con funciones anónimas
findall(x -> x == "Tanzania", wp.country)
1-element Vector{Int64}:
 21
# o utilizando la función ==
findall(==("Tanzania"), wp.country)
1-element Vector{Int64}:
 21

Y esto nos permite extraer subconjuntos de nuestro dataframe de varias formas:

# usando cualquiera de las formas posibles con findall() o findfirst()
wp[findall(==("Tanzania"), wp.country), :]
1×4 DataFrame
Rowidcountrypop2024growth_rate
Int64StringInt64Float64
121Tanzania694190730.0294
# o usando broadcasting, de forma similar a la sintaxis de R
wp[wp.country .== "Tanzania", :]
1×4 DataFrame
Rowidcountrypop2024growth_rate
Int64StringInt64Float64
121Tanzania694190730.0294

La sentencia wp.country .== “Tanzania” devuelve un vector de 0s y 1s, que se utiliza para seleccionar las filas.

Julia Tutoriales - Este artículo es parte de una serie.
Parte 1: Este artículo