library(knitr)
include_graphics("images.jpg")
Lo que haremos inicialmente será aprender a manipular dataframes
(tablas de datos) en R
. Por ejemplo:
# Importacion necesaria
library(datasets)
# Cargamos un conjunto de datos
df <- datasets::iris
# Vemos los primeros 5 registros con la funcion head()
head(df, 5)
Dado un dataframe, podremos acceder a cierto número de filas y
columnas utilizando para ello df[]
como sigue
# De la fila 1 a la 5 (izquierda de la coma)
# De la columna 1 a la 3 (derecha de la coma)
df[1:5, 1:3]
siguiendo con la misma lógica podemos acceder a un solo elemento del dataframe
# Elemento en la fila 1 y columna 1
df[1,1]
## [1] 5.1
Si dentro de los corchetes solo colocamos un número, lo que estaremos haciendo es acceder únicamente a los elementos de una columna:
# Los primeros 5 elementos de la segunda columna
head(df[2], 5)
Anteriormente obtuvimos los elementos de las primeras cinco filas y
las primeras tres columnas df[1:5, 1:3]
, pero tambén
podemos acceder solo a una fila en particular
# Elementos de la segunda fila y de
# las primeras 4 columnas
df[2, 1:4]
o también
# Elementos de la primer y segunda fila y de
# la tercer columna
df[1:2, 3]
## [1] 1.4 1.4
Finalmente
# Elementos de la primer y segunda fila para todas las columnas
# (colocamos una coma y dejamos el espacio en blanco)
df[1:2, ]
De manera alternativa, podemos acceder a los elementos de una columna
en particular utilizando el símbolo $
:
# Accedemos a los tres primeros elementos de la columna Petal.Width
head(df$Petal.Width, 3)
## [1] 0.2 0.2 0.2
Con base en dicha notación, podemos seleccionar elementos de un dataframe dada una condición
# Todos los elementos del dataframe que tengan en Petal.Width un numero mayor a 1.5. Colocamos una coma y dejamos un espacio en blanco debido a que queremos todas las columnas
df[df$Petal.Width > 1.5, ]
Así, podremos seleccionar datos dada una condición, para lo cual
utilizaremos los operadores <, >, ==, <=, >=
, y
en realidad podremos combinarlos utilizando los operador booleanos:
&
(and, y) y |
(or,
o)
# Todos los elementos del dataframe que tengan en Petal.Width un numero mayor a 1.5 o que tengan un numero de Petal.Length mayor a 3
df[(df$Petal.Width <= 1.5) | (df$Petal.Length > 3), ]
Por otro lado, podemos ordenar un dataframe de acuerdo a los valores
de una columna, utilizando la función order()
:
# Ordenamos de manera ascendente de acuerdo a los valores en Petal.Length
df[order(df$Petal.Length), ]
podemos ordenar de manera descendente configurando
df[order(df$Petal.Length, decreasing = T), ]
Hasta ahora hemos trabajado con dataframes ya creados, no osbtante, podemos crear manualmente nuestros dataframes, lo cual haremos utilizando vectores. Por ejemplo
# Creamos dos vectores:
# Un vector de nombres
nombre <- c("Ana", "Luna", "Fernando")
# Un vector de edades
edad <- c(32, 17, 40)
# Procederemos a crear el dataframe con la funcion data.frame
df_new <- data.frame(
"Nombres" = nombre,
"Edades" = edad
)
df_new
donde, dentro de la función data.frame()
colocamos en
cadenas de texto los nombres que queremos asignarles a las columnas,
después del símbolo de asignación (=
) colocamos el vector
que contiene la información para esa columna, y separamos por comas.
Otro ejemplo
df_new_2 <- data.frame(
"ID" = 1:10,
"Número" = sample(1:100, 10)
)
df_new_2
donde con 1:10
creamos la secuencia (la cual es un
vector) de números enteros del 1 al 10; con
sample(1:100, 10)
estamos creando una secuancia de números
enteros del 1 al 100, pero sólo serán seleccionados 10, y donde esta
seleeción es de manera aleatoria.
Podemos agregar columnas nuevas a dataframes ya creados. Por ejemplo,
colocaremos una columna nueva denominada "Número_2"
al
dataframe df_new_2
, asignándole los valores del 1000 al
2000, pero solo tomando 10 de ellos de manera aleatoria. Para ello
# Columna nueva valores asignados
df_new_2["Número_2"] <- sample(1000:2000, 10)
# Veamos el dataframe
df_new_2
Para eliminar una columna, antes veamos otra forma de seleccionar elementos:
# Todas las filas, pero solo de la columna ID y Numero:
# con un vector colocamos los nombres de las dos columnas de interes
df_new_2[, c('ID', 'Número')]
Así, si queremos un dataframe, por ejemplo, sin la columna
Número_2
escribimos
# Reasignamos a df_new_2 el dataframe que solo considera a las columnas sin la columna Numero_2
df_new_2 <- df_new_2[, c('ID', 'Número')]
df_new_2
Podemos eliminar solo una fila utilizando el símbolo -
como sigue
# Dentro del corchete, colocamos un -1 debido a que queremos eliminar la fila 1:
df_new_2[-1, ]
Inicialmente, realizaremos un gráfico de dispersión entre dos
columnas del dataframe df
como sigue:
plot(x=df$Petal.Length, y=df$Petal.Width)
Luego, tenemos que en ese dataframe la información de cada fila corresponde a una especie en específico
df[ , c("Petal.Length", "Petal.Width", "Species")]
donde solo hay tres especies
# Con la funcion unique() obtenemos los valores diferentes en una columna
unique(df$Species)
## [1] setosa versicolor virginica
## Levels: setosa versicolor virginica
Así, podemos colorear el diagrama de dispersión anterior de acuerdo a cada especie:
# Agregamos el parametro col
plot(x=df$Petal.Length, y=df$Petal.Width, col=df$Species)
plot(x=df$Petal.Length, y=df$Petal.Width, col=df$Species,
# Agregamos un titulo al grafico
main = "Diagrama de dispersión")
Podemos agregar una leyenda para saber a qué especie corresponde cada color
plot(x=df$Petal.Length, y=df$Petal.Width, col=df$Species,
main = "Diagrama de dispersión")
legend(x="topleft", legend = c("Setosa", "Versicolor", "Virginica"), fill=c("black", "red", "green"))
# Podemos agregar una cuadricula al grafico
grid()
donde
x
especifica la ubicación donde se colocarán las
etiquetas.legend
corresponde a las etiquetas que se
mostrarán.fill
el color de las etiquetas.Ahora graficaremos un histograma, el cual nos permite observar la distribución de datos numéricos usando barras
# Graficamos un histograma
hist(x=df$Petal.Length, main = "Histograma",
# Cambiaremos la etiqueta del eje x
xlab = "Petal Length")
Podemos cambiar el color
hist(x=df$Petal.Length, main = "Histograma",
xlab = "Petal Length",
col = "orange")
Finalmente, lo que haremos será definir una función que siga la regla \(f(x)=x^{2}\) y la graficaremos. Para crear una función escribiremos
nombre_de_la_funcion <- function(<<parametros>>){
<<acciones que hace la funcion>>
return(<<lo que regresa la funcion>>)
}
De tal manera
# Definimos la funcion
f <- function(x){
return(x ** 2)
}
# Probamos la funcion
f(4)
## [1] 16
Ahora la graficaremos:
# Creamos una secuencia de valor del -5 al 5 con un paso o avance de 0.01
x_rango <- seq(-5, 5, 0.01)
# Graficamos
plot(x_rango, f(x_rango), col="purple", main = "Gráfico de f(x)=x^2")
# Agregamos una cuadricula
grid()
library(knitr)
include_graphics("pylogo.png")
Para manejar datos como lo hicimos antes en R
ocuparemos
una librería de Python
denominada Pandas
, la
cual nos permitirá trabajar con dataframes como lo hemos hecho antes.
Para ello
# Cargamos la libreria y le asociamos un alias
import pandas as pd
# Importamos otra libreria la cual tiene conjuntos de datos integrados (como la libreria datasets de R)
import seaborn as sns
Luego, cargaremos el mismo conjunto de datos iris
, pero
ahora de la librería seaborn
:
# Cargamos los datos
df = sns.load_dataset("iris")
# Vemos los primeros 5 elementos con la funcion .head()
df.head(5)
## sepal_length sepal_width petal_length petal_width species
## 0 5.1 3.5 1.4 0.2 setosa
## 1 4.9 3.0 1.4 0.2 setosa
## 2 4.7 3.2 1.3 0.2 setosa
## 3 4.6 3.1 1.5 0.2 setosa
## 4 5.0 3.6 1.4 0.2 setosa
Luego, podemos obtener la información de una columna en particular
# Dentro de los corchetes colocamos el nombre de la columna
df["sepal_length"]
## 0 5.1
## 1 4.9
## 2 4.7
## 3 4.6
## 4 5.0
## ...
## 145 6.7
## 146 6.3
## 147 6.5
## 148 6.2
## 149 5.9
## Name: sepal_length, Length: 150, dtype: float64
si queremos acceder a información de más de una columna colocaremos los nombres de dichas columnas dentro otros corchetes:
# Dentro de los corchetes colocamos el nombre de las columnas
df[["sepal_length", "sepal_width"]]
## sepal_length sepal_width
## 0 5.1 3.5
## 1 4.9 3.0
## 2 4.7 3.2
## 3 4.6 3.1
## 4 5.0 3.6
## .. ... ...
## 145 6.7 3.0
## 146 6.3 2.5
## 147 6.5 3.0
## 148 6.2 3.4
## 149 5.9 3.0
##
## [150 rows x 2 columns]
Podemos obtener la información de las primeras 9 filas:
# En Python las numeraciones comienzan con el cero.
df[0:9]
## sepal_length sepal_width petal_length petal_width species
## 0 5.1 3.5 1.4 0.2 setosa
## 1 4.9 3.0 1.4 0.2 setosa
## 2 4.7 3.2 1.3 0.2 setosa
## 3 4.6 3.1 1.5 0.2 setosa
## 4 5.0 3.6 1.4 0.2 setosa
## 5 5.4 3.9 1.7 0.4 setosa
## 6 4.6 3.4 1.4 0.3 setosa
## 7 5.0 3.4 1.5 0.2 setosa
## 8 4.4 2.9 1.4 0.2 setosa
o las primeras 5 filas de una sola columna
# Primero seleccionamos la columna y despues entre corchetes colocamos el rango 0:5 para seleccionar las primeras 5 filas
df["petal_length"][0:5]
## 0 1.4
## 1 1.4
## 2 1.3
## 3 1.5
## 4 1.4
## Name: petal_length, dtype: float64
Nota: En R
escribíamos
df$Petal_Length
para acceder a los elementos de una
columna, en Python
escribimos
df["petal_length"]
.
Asimismo, podemos seleccionar elementos del dataframe dada una condición:
# Colocamos nombre del dataframe, luego, entre corchetes
# accedemos a la columna sepal_width y ponemos la condicion
df[df["sepal_width"] > 4]
## sepal_length sepal_width petal_length petal_width species
## 15 5.7 4.4 1.5 0.4 setosa
## 32 5.2 4.1 1.5 0.1 setosa
## 33 5.5 4.2 1.4 0.2 setosa
o también
# Elementos que tengan un numero mayor de 3.5 de sepal_width
# y (and, &) que tenga un numero mayor de 4.5 de sepal_length
df[(df["sepal_width"] > 3.5) & (df["sepal_length"] > 4.5) ]
## sepal_length sepal_width petal_length petal_width species
## 4 5.0 3.6 1.4 0.2 setosa
## 5 5.4 3.9 1.7 0.4 setosa
## 10 5.4 3.7 1.5 0.2 setosa
## 14 5.8 4.0 1.2 0.2 setosa
## 15 5.7 4.4 1.5 0.4 setosa
## 16 5.4 3.9 1.3 0.4 setosa
## 18 5.7 3.8 1.7 0.3 setosa
## 19 5.1 3.8 1.5 0.3 setosa
## 21 5.1 3.7 1.5 0.4 setosa
## 22 4.6 3.6 1.0 0.2 setosa
## 32 5.2 4.1 1.5 0.1 setosa
## 33 5.5 4.2 1.4 0.2 setosa
## 37 4.9 3.6 1.4 0.1 setosa
## 44 5.1 3.8 1.9 0.4 setosa
## 46 5.1 3.8 1.6 0.2 setosa
## 48 5.3 3.7 1.5 0.2 setosa
## 109 7.2 3.6 6.1 2.5 virginica
## 117 7.7 3.8 6.7 2.2 virginica
## 131 7.9 3.8 6.4 2.0 virginica
El operador or es el mismo en Python
que en
R
, esto es, el símbolo es |
.
Por otro lado, podemos crear los dataframes en
Python
:
# Creamos el dataframe con la funcion pd.DataFrame().
# Dentro de los parentesis colocaremos llaves
df_new = pd.DataFrame({
# nombre |los elementos de esta columna
# de la |los colocaremos entre
# columna |corchetes
"Nombres": ["Luis", "Ana", "Fer"],
"Edades" : [25, 30, 16]
})
# Veamos el dataframe
df_new
## Nombres Edades
## 0 Luis 25
## 1 Ana 30
## 2 Fer 16
De manera análoga en R
, podremos agregar columnas
nuevas:
# Importacion necesaria para crear vectores (arrays)
import numpy as np
# Columna nueva | rango de numeros del 0 al 2
df_new["Columna nueva"] = np.arange(0, 3, 1)
# Veamos de nuevo el dataframe
df_new
## Nombres Edades Columna nueva
## 0 Luis 25 0
## 1 Ana 30 1
## 2 Fer 16 2
Con la librería Pandas
podemos realizar de manera
directa gráficos. Por ejemplo, para un diagrama de dispersión
escribiremos nombre_del_dataframe.plot.scatter(x=, y=)
,
donde en x
colocamos el nombre de la columna del dataframe
nombre_del_dataframe
que queremos que sea la variable
independiente y en y
la columna que queremos que sea la
variable dependiente. Así:
df.plot.scatter(x = "sepal_length", y = "sepal_width")
Podemos cambiar el color y agregar un título
df.plot.scatter(x = "sepal_length", y = "sepal_width", color="darkblue", title="Diagrama de dispersión")
Podemos graficar un histograma seleccionando primer la columna de
interés, después colocamos .plot.hist()
como sigue
df["sepal_length"].plot.hist()
Finalmente, también podemos definir la función \(f(x)=x^{2}\) en Python
y
después graficarla. Primero definimos la función. En este caso la
estructura es:
def nombre_funcion(parametros):
acciones_a_realizar
return valor_a_regresar
Luego:
# Definimos la funcion
def f(x):
return x ** 2
# Probamos implementando un bucle for
for i in range(5):
print(f(i))
## 0
## 1
## 4
## 9
## 16
Para graficar la función anterior nos vandremos de otra librería de graficación:
# Importación necesaria
import matplotlib.pyplot as plt
# Creamos el rando de graficacion de -5 a 5 con un paso de 0.01
x_rango = np.arange(-5,5, 0.01)
Luego, para graficar escribimos
# Creamos el grafico
plt.plot(x_rango, f(x_rango), color="red")
# Configuramos el titulo
plt.title
# Configuramos la etiqueta del eje x
plt.xlabel("Eje x")
# Configuramos la etiqueta del eje y
plt.ylabel("Eje y")
# Configuramos una cuadricula
plt.grid()
# Mostramos el grafico
plt.show()
Considerando la librería datasets
, carga el conjunto de
datos cars
. Luego
Realiza un gráfico de dispersión entre las dos columnas de dicho conjunto de datos. Deberás cambiar el color, agregarle un título y una cuadrícula al gráfico; además, cambia las etiquetas de los ejes.
Obtene información de dicho dataframe para aquellos registros
donde speed
sea mayor a 10 y donde
dist
sea menor a 20.
Obtén la información de las primeras 5 filas del dataframe, pero
solo de la columna dist
. Para obtener dicha información
deberás de emplear dos formas distintas.
Al dataframe anterior, agrégale una nueva columna denominada
id
que contenga el rango de números del 1 al 50.
Crear un dataframe con la información de tu preferencia.
Define una función referente a la función matemática \(f(x)=x^{3}\) y gráficala.
De la librería seaborn
, carga el conjunto de datos
tips
.
Realiza un gráfico de dispersión entre las columnas
tip
y total_bill
.
Obtén la información del dataframe para aquellos registros donde
tip
sea mayor a 5 y donde
smoker
sea igual (==
) a
"No"
.
Define una función referente a la función matemática \(f(x)=x^{3}\) y grafícala.