buscar el link en mis repositorios
Nota:En el documento puede que se presenten varios errores de ortografía asi como varios caracteres extraños que puedan hacer que se pierda interpretación, por lo cual de ser así me disculpo de antemano, ya que no los corrigo debido a mi escacez de tiempo. Gracias.
El objetivo principal de este documento simplemente es poner en práctica ciertas funciones que aprendí en el curso de R programming dado en Coursera por parte de la universidad John hopkins university.
Las dos primeras semanas del curso consisten en obtener datos basicamente, el primer tipo de archivo que se explica a leer es mas básico y común el tipo csv.
para lo anterior, primero siguiendo las ideas de reprocucibilidad explicadas en el curso, para que si alguna persona corre este código en su computadora no tenga problemas, priemro crearemos directamente una carpeta en caso de no existir, llamada “GettingData”, apra ello se usa la función dir.create y el uso de un condicional.
if(!file.exists("GettingData")){
dir.create("GettingData")
}
una ves creada la carpeta definiremos nuestro directorio de trabajo a la nueva carpeta para ello uso la funcion paste para concatenar al directorio que se tenga por default la carpeta existente y posteriormente fijar neustro directorio de trabajo como esa carpeta con setwd()
DirDeTrabajo <- paste(getwd(),"/GettingData",sep="")
setwd(DirDeTrabajo)
Ahora, ubicamos los datos a leer, para ello primero descargaremos el archivo de internet en este caso son datos de llamadas tramitadas C4 en Bogotá de la pagina de datos abiertos de Bogotá, utilizamos el comando download.file, especificando como quieremos que se llame, despues con la función dir()comrpobamos que se encuentra descargado Puede que tarde un poco en descargarce
UrlDelArchivo <- "https://datosabiertos.bogota.gov.co/dataset/9bdf518e-b756-4865-983f-0521111fbcd1/resource/30d65a8b-d0ed-4e95-977e-0d7cc2ea89ef/download/llamadastramitadas-c4-bogota_numerounicodeseguridadyemergencias-nuse_linea-123-20210630.csv"
download.file(UrlDelArchivo,destfile = "Lectura1.csv")
dir()
## [1] "Getting-and-cleaning-data.Rmd"
## [2] "Getting-and-cleaning-data_cache"
## [3] "Getting and cleaning data.Rmd"
## [4] "GettingData"
## [5] "Lectura1.csv"
## [6] "proyectoportildes.txt"
## [7] "Repaso-de-Getting-and-Cleaning-Data.Rproj"
date()
## [1] "Wed Jul 28 22:57:34 2021"
Tambien por la reproducibilidad, se especifica la fecha por si en futuras descargas el archivo cambia o no se encuentra disponible
Ahora podemos leer los datos con la función básica read.csv, donde se especifica la separación como sep =;; Cabe resltar también que se pudo haber utilizado la función read.table() sin embargo al ser el archivo un .csv prefiero utiliza la otra, sin mebargo read.table se podria utilizar para alguna lectura de un archivo .txt.
Datos1 <- read.csv("Lectura1.csv",sep=";")
head(Datos1)
## ID ANIO MES TIPO_INCIDENTE
## 1 20150101UPR1611M 2015 1 611M
## 2 20150101UPR1916 2015 1 916
## 3 20150101UPR1934 2015 1 934
## 4 20150101UPR1942H 2015 1 942H
## 5 20150101UPR1943 2015 1 943
## 6 20150101UPR1944 2015 1 944
## TIPO_DETALLE COD_LOCALIDAD LOCALIDAD COD_UPZ
## 1 MALTRATO A MUJER 01 USAQUÉN UPR1
## 2 PERSONA O VEHÃ\215CULO SOSPECHOSO 01 USAQUÉN UPR1
## 3 RIÑA 01 USAQUÉN UPR1
## 4 ACCIDENTE TRÃ\201NSITO CON HERIDOS/MUERTOS 01 USAQUÉN UPR1
## 5 MOVILIDAD / SEÑALIZACIÓN 01 USAQUÉN UPR1
## 6 MANIFESTACIÓN / MOTÃ\215N 01 USAQUÉN UPR1
## UPZ CANT_INCIDENTES
## 1 UPR ZONA NORTE 1
## 2 UPR ZONA NORTE 1
## 3 UPR ZONA NORTE 1
## 4 UPR ZONA NORTE 5
## 5 UPR ZONA NORTE 2
## 6 UPR ZONA NORTE 12
Posteriormente se enseña a leer un archivo de tipo excel, para ello simplemente se debe tener un archivo en excel a leer en el directorio de trabajo, y mediante el paquete xlsxse puede leer mediante la función read.xlsx, sin embargo antes de leerlo es muy importante especificar la hoja del archivo a leer asi como el rango en el que se encuentren los datos que queremos leer, en este caso leo la hoja 2, la segunda tabla que aparece, apra ello el parametro colIndex lo defino como 10 al encontrarce esta tabla en la columna 10 con fila 8 por ello rowIndex corresponde a 8 respectivamente, y especifico que leo los titulos de las columnas con headerTRUE. Resaltar que para evitar problemas al descargar el archivo al ser un .xlsx especificar el parametro mode=wb
UrlDelArchivo <- "https://datosabiertos.bogota.gov.co/dataset/d451b52f-e30c-43b3-9066-3a7816638fea/resource/aef2bb5f-57f0-4eb3-a21d-b4c283b83edc/download/directorio_unico_de_establecimientos_30-jun-2020_vobo_sed.xlsx"
download.file(UrlDelArchivo,destfile = "Lectura2.xlsx",mode='wb')
dir()
## [1] "Distrital.jpeg"
## [2] "Getting-and-cleaning-data.html"
## [3] "Getting-and-cleaning-data.Rmd"
## [4] "Getting-and-cleaning-data_cache"
## [5] "Getting and cleaning data.Rmd"
## [6] "GettingData"
## [7] "Lectura1.csv"
## [8] "Lectura2.xlsx"
## [9] "proyectoportildes.txt"
## [10] "Repaso-de-Getting-and-Cleaning-Data.Rproj"
## [11] "twitter.rds"
## [12] "twitterRtweet.rds"
date()
## [1] "Wed Jul 28 23:04:09 2021"
#install.packages("xlsx")
library(xlsx)
## Warning: package 'xlsx' was built under R version 4.0.5
Datos2 <- read.xlsx("Lectura2.xlsx",sheetIndex=2,colIndex=10:16,rowIndex=8:28,header = TRUE)
head(Datos2)
## LOCALIDADES DISTRITAL DISTRITAL.ADMINISTRACION.CONTRATADA
## 1 1-USAQUEN 25 1
## 2 2-CHAPINERO 7 NA
## 3 3-SANTAFE 15 1
## 4 4-SAN CRISTOBAL 62 2
## 5 5-USME 67 6
## 6 6-TUNJUELITO 25 NA
## OFICIAL.CON.REGIMEN.ESPECIAL PRIVADO PRIVADO.CON.MATRICULA.CONTRATADA
## 1 3 114 NA
## 2 NA 20 NA
## 3 NA 18 NA
## 4 NA 78 NA
## 5 NA 44 NA
## 6 1 48 NA
## PRIVADO.CON.REGIMEN.ESPECIAL
## 1 NA
## 2 NA
## 3 2
## 4 NA
## 5 NA
## 6 1
Una ves leido se podrían hacer diferentes operaciones y escribir un excel con la función write.xlsx()
Posteriormente se enseño a leer .xml, apra ello se utiliza el paquete XML y especialmente se utiliza la función xmlTreeParse, sin embargo cabe resaltar que para poder aplicar tal léctura de manera correcta, debemos fijarnos en el url donde si es es de tipo http se puede pasar al a función xmlTreeParsedirectamente el url, sin embargo si es de tipo seguro como https es necesario antes utilizar el comando GET del paquete httr.
Además de lo anterior, en mi experiencia no he encontrado muchos archivos de tipo xml disponibles, lo más común es encontrar los códigos fuentes de páginas siendo de tipo html, por ello en tal caso se puede utilizar la función htmlTreeParsedel mismo paquete.
Finalmente se resalta que en el manejo de esta función GET, esta corresponde a un método de los 4 que se peuden hacer en el http protocolo, donde tambien se podria realizar un POST, por ello mismo se puede utilizar esta función especificando diferentes requisitos de lo que se queire obtener de la pagina, por ejemplo se puede especificar el parametro de accept_json()especificando que esperamos que los devuelva el servidor un arhivo de tipo jason, y demás funciones relacionadas al manejo de APIS.
#install.packages("httr")
library(httr)
## Warning: package 'httr' was built under R version 4.0.5
Archivo <- GET("https://query.data.world/s/whouwt5ictwdvfdkyhl5tqnyeo3nxk")
date()
## [1] "Wed Jul 28 23:04:14 2021"
#install.packages("XML")
library(XML)
## Warning: package 'XML' was built under R version 4.0.5
Datos3 <- xmlTreeParse(Archivo,useInternal=TRUE)
## No encoding supplied: defaulting to UTF-8.
class(Datos3)
## [1] "XMLInternalDocument" "XMLAbstractDocument"
Cabe resaltar que el anterior dataset obtenido no se puede revisar con la función head al no ser de tipo data.frame sino un Xml por ello toca utilizar mas funciones del mismo paquete para poder acceder a nodos del documento especificando diferentes clases o cosas que se desen
nodoRaiz <- xmlRoot(Datos3)
head(nodoRaiz)
## $table
## <table study="AEO2011" table="1-AEO2011">
## <label>Table 1. Total Energy Supply, Disposition, and Price Summary</label>
## <number>1</number>
## <name>Total Energy Supply, Disposition, and Price Summary</name>
## <data>
## <row number="1" likelyParentRowNumber="1">
## <label>Total Energy Supply, Disposition, and Price Summary, Reference case</label>
## <row number="2" likelyParentRowNumber="1">
## <label>(quadrillion Btu, unless otherwise noted)</label>
## </row>
## <row number="3" likelyParentRowNumber="1">
## <label>Production</label>
## <row number="4" unitsRowNumber="2" units="quadrillion Btu" likelyParentRowNumber="3" likelyIsTotal="false" is2009RealPrice="false">
## <label>Crude Oil and Lease Condensate</label>
## </row>
## <row number="5" unitsRowNumber="2" units="quadrillion Btu" likelyParentRowNumber="3" likelyIsTotal="false" is2009RealPrice="false">
## <label>Natural Gas Plant Liquids</label>
## </row>
## <row number="6" unitsRowNumber="2" units="quadrillion Btu" likelyParentRowNumber="3" likelyIsTotal="false" is2009RealPrice="false">
## <label>Dry Natural Gas</label>
## </row>
## <row number="7" unitsRowNumber="2" units="quadrillion Btu" likelyParentRowNumber="3" likelyIsTotal="false" is2009RealPrice="false">
## <label>Coal</label>
## </row>
## <row number="8" unitsRowNumber="2" units="quadrillion Btu" likelyParentRowNumber="3" likelyIsTotal="false" is2009RealPrice="false">
## <label>Nuclear Power</label>
## </row>
## <row number="9" unitsRowNumber="2" units="quadrillion Btu" likelyParentRowNumber="3" likelyIsTotal="false" is2009RealPrice="false">
## <label>Hydropower</label>
## </row>
## <row number="10" unitsRowNumber="2" units="quadrillion Btu" likelyParentRowNumber="3" likelyIsTotal="false" is2009RealPrice="false">
## <label>Biomass</label>
## </row>
## <row number="11" unitsRowNumber="2" units="quadrillion Btu" likelyParentRowNumber="3" likelyIsTotal="false" is2009RealPrice="false">
## <label>Other Renewable Energy</label>
## </row>
## <row number="12" unitsRowNumber="2" units="quadrillion Btu" likelyParentRowNumber="3" likelyIsTotal="false" is2009RealPrice="false">
## <label>Other</label>
## </row>
## </row>
## <row number="14" likelyParentRowNumber="1">
## <label>Imports</label>
## <row number="15" unitsRowNumber="2" units="quadrillion Btu" likelyParentRowNumber="14" likelyIsTotal="false" is2009RealPrice="false">
## <label>Crude Oil</label>
## </row>
## <row number="16" unitsRowNumber="2" units="quadrillion Btu" likelyParentRowNumber="14" likelyIsTotal="false" is2009RealPrice="false">
## <label>Liquid Fuels</label>
## </row>
## <row number="17" unitsRowNumber="2" units="quadrillion Btu" likelyParentRowNumber="14" likelyIsTotal="false" is2009RealPrice="false">
## <label>Natural Gas</label>
## </row>
## <row number="18" unitsRowNumber="2" units="quadrillion Btu" likelyParentRowNumber="14" likelyIsTotal="false" is2009RealPrice="false">
## <label>Other Imports</label>
## </row>
## </row>
## <row number="20" likelyParentRowNumber="1">
## <label>Exports</label>
## <row number="21" unitsRowNumber="2" units="quadrillion Btu" likelyParentRowNumber="20" likelyIsTotal="false" is2009RealPrice="false">
## <label>Petroleum</label>
## </row>
## <row number="22" unitsRowNumber="2" units="quadrillion Btu" likelyParentRowNumber="20" likelyIsTotal="false" is2009RealPrice="false">
## <label>Natural Gas</label>
## </row>
## <row number="23" unitsRowNumber="2" units="quadrillion Btu" likelyParentRowNumber="20" likelyIsTotal="false" is2009RealPrice="false">
## <label>Coal</label>
## </row>
## </row>
## <row number="25" unitsRowNumber="2" units="quadrillion Btu" likelyParentRowNumber="1" likelyIsTotal="false" is2009RealPrice="false">
## <label>Discrepancy</label>
## </row>
## <row number="26" likelyParentRowNumber="1">
## <label>Consumption</label>
## <row number="27" unitsRowNumber="2" units="quadrillion Btu" likelyParentRowNumber="26" likelyIsTotal="false" is2009RealPrice="false">
## <label>Liquid Fuels</label>
## </row>
## <row number="28" unitsRowNumber="2" units="quadrillion Btu" likelyParentRowNumber="26" likelyIsTotal="false" is2009RealPrice="false">
## <label>Natural Gas</label>
## </row>
## <row number="29" unitsRowNumber="2" units="quadrillion Btu" likelyParentRowNumber="26" likelyIsTotal="false" is2009RealPrice="false">
## <label>Coal</label>
## </row>
## <row number="30" unitsRowNumber="2" units="quadrillion Btu" likelyParentRowNumber="26" likelyIsTotal="false" is2009RealPrice="false">
## <label>Nuclear Power</label>
## </row>
## <row number="31" unitsRowNumber="2" units="quadrillion Btu" likelyParentRowNumber="26" likelyIsTotal="false" is2009RealPrice="false">
## <label>Hydropower</label>
## </row>
## <row number="32" unitsRowNumber="2" units="quadrillion Btu" likelyParentRowNumber="26" likelyIsTotal="false" is2009RealPrice="false">
## <label>Biomass</label>
## </row>
## <row number="33" unitsRowNumber="2" units="quadrillion Btu" likelyParentRowNumber="26" likelyIsTotal="false" is2009RealPrice="false">
## <label>Other Renewable Energy</label>
## </row>
## <row number="34" unitsRowNumber="2" units="quadrillion Btu" likelyParentRowNumber="26" likelyIsTotal="false" is2009RealPrice="false">
## <label>Other</label>
## </row>
## </row>
## <row number="36" likelyParentRowNumber="1">
## <label>Prices</label>
## <row number="37" unitsRowNumber="37" units="$ per barrel" likelyParentRowNumber="36" likelyIsTotal="false" is2009RealPrice="true">
## <label>Low Sulfur Light Price</label>
## </row>
## <row number="38" unitsRowNumber="38" units="$ per barrel" likelyParentRowNumber="36" likelyIsTotal="false" is2009RealPrice="true">
## <label>Imported Crude Oil Price</label>
## </row>
## <row number="39" unitsRowNumber="39" units="$ / mmBtu" likelyParentRowNumber="36" likelyIsTotal="false" is2009RealPrice="true">
## <label>Gas Price at Henry Hub</label>
## </row>
## <row number="40" unitsRowNumber="40" units="$ / mmBtu" likelyParentRowNumber="36" likelyIsTotal="false" is2009RealPrice="true">
## <label>Gas Wellhead Price</label>
## </row>
## <row number="41" unitsRowNumber="41" units="$ / Mcf" likelyParentRowNumber="36" likelyIsTotal="false" is2009RealPrice="true">
## <label>Gas Wellhead Price</label>
## </row>
## <row number="42" unitsRowNumber="42" units="$ / ton" likelyParentRowNumber="36" likelyIsTotal="false" is2009RealPrice="true">
## <label>Coal Minemouth Price</label>
## </row>
## <row number="43" unitsRowNumber="43" units="$ / million Btu" likelyParentRowNumber="36" likelyIsTotal="false" is2009RealPrice="true">
## <label>Coal Delivered Price</label>
## </row>
## <row number="44" unitsRowNumber="44" units="cents per kilowatthour" likelyParentRowNumber="36" likelyIsTotal="false" is2009RealPrice="true">
## <label>Electricity</label>
## </row>
## </row>
## <row number="45" likelyParentRowNumber="1">
## <label>Prices</label>
## <row number="46" unitsRowNumber="46" units="$ per barrel" likelyParentRowNumber="45" likelyIsTotal="false" is2009RealPrice="false">
## <label>Low Sulfur Light Price</label>
## </row>
## <row number="47" unitsRowNumber="47" units="$ per barrel" likelyParentRowNumber="45" likelyIsTotal="false" is2009RealPrice="false">
## <label>Imported Crude Oil Price</label>
## </row>
## <row number="48" unitsRowNumber="48" units="$ / mmBtu" likelyParentRowNumber="45" likelyIsTotal="false" is2009RealPrice="false">
## <label>Gas Price at Henry Hub</label>
## </row>
## <row number="49" unitsRowNumber="49" units="$ / mmBtu" likelyParentRowNumber="45" likelyIsTotal="false" is2009RealPrice="false">
## <label>Gas Wellhead Price</label>
## </row>
## <row number="50" unitsRowNumber="50" units="$ / Mcf" likelyParentRowNumber="45" likelyIsTotal="false" is2009RealPrice="false">
## <label>Gas Wellhead Price</label>
## </row>
## <row number="51" unitsRowNumber="51" units="$ / ton" likelyParentRowNumber="45" likelyIsTotal="false" is2009RealPrice="false">
## <label>Coal Minemouth Price</label>
## </row>
## <row number="52" unitsRowNumber="52" units="$ / million Btu" likelyParentRowNumber="45" likelyIsTotal="false" is2009RealPrice="false">
## <label>Coal Delivered Price</label>
## </row>
## <row number="53" unitsRowNumber="53" units="cents per kilowatthour" likelyParentRowNumber="45" likelyIsTotal="false" is2009RealPrice="false">
## <label>Electricity</label>
## </row>
## </row>
## </row>
## </data>
## </table>
##
## attr(,"class")
## [1] "XMLInternalNodeList" "XMLNodeList"
xmlName(nodoRaiz)
## [1] "aeo"
head(names(nodoRaiz))
## table table table table table table
## "table" "table" "table" "table" "table" "table"
nodoEspecifico <- nodoRaiz[[5]]
head(nodoEspecifico)
## $label
## <label>Table 5. Commercial Sector Key Indicators and Consumption</label>
##
## attr(,"class")
## [1] "XMLInternalNodeList" "XMLNodeList"
ValorEspecificoDeUnNodoEspecifico <-nodoRaiz[[5]][[3]]
ValorEspecificoDeUnNodoEspecifico
## <name>Commercial Sector Key Indicators and Consumption</name>
PonerValoresDeNodosComoLineas <- xmlSApply(nodoRaiz,xmlValue)
head(PonerValoresDeNodosComoLineas,3)
## table
## "Table 1. Total Energy Supply, Disposition, and Price Summary1Total Energy Supply, Disposition, and Price SummaryTotal Energy Supply, Disposition, and Price Summary, Reference case(quadrillion Btu, unless otherwise noted)ProductionCrude Oil and Lease CondensateNatural Gas Plant LiquidsDry Natural GasCoalNuclear PowerHydropowerBiomassOther Renewable EnergyOtherImportsCrude OilLiquid FuelsNatural GasOther ImportsExportsPetroleumNatural GasCoalDiscrepancyConsumptionLiquid FuelsNatural GasCoalNuclear PowerHydropowerBiomassOther Renewable EnergyOtherPricesLow Sulfur Light PriceImported Crude Oil PriceGas Price at Henry HubGas Wellhead PriceGas Wellhead PriceCoal Minemouth PriceCoal Delivered PriceElectricityPricesLow Sulfur Light PriceImported Crude Oil PriceGas Price at Henry HubGas Wellhead PriceGas Wellhead PriceCoal Minemouth PriceCoal Delivered PriceElectricity"
## table
## "Table 2. Energy Consumption by Sector and Source - United States2Energy Consumption by Sector and Source - United StatesEnergy Consumption by Sector and Source, United States, Reference case(quadrillion Btu, unless otherwise noted)ResidentialLiquefied Petroleum GasesKeroseneDistillate Fuel OilNatural GasCoalRenewable EnergyElectricityDelivered EnergyElectricity Related LossesCommercialLiquefied Petroleum GasesMotor GasolineKeroseneDistillate Fuel OilResidual Fuel OilNatural GasCoalRenewable EnergyElectricityDelivered EnergyElectricity Related LossesIndustrialLiquefied Petroleum GasesMotor GasolineDistillate Fuel OilResidual Fuel OilPetrochemical FeedstocksOther PetroleumNatural GasNatural-Gas-to-Liquids Heat and PowerLease and Plant FuelMetallurgical CoalOther Industrial CoalCoal-to-Liquids Heat and PowerNet Coal Coke ImportsBiofuels Heat and CoproductsRenewable EnergyElectricityDelivered EnergyElectricity Related LossesTransportationLiquefied Petroleum GasesE85Motor GasolineJet FuelDistillate Fuel OilResidual Fuel OilOther PetroleumPipeline Fuel Natural GasCompressed Natural GasLiquid HydrogenElectricityDelivered EnergyElectricity Related LossesDelivered Energy Consumption, All SectorsLiquefied Petroleum GasesE85Motor GasolineJet FuelKeroseneDistillate Fuel OilResidual Fuel OilPetrochemical FeedstocksOther PetroleumNatural GasNatural-Gas-to-Liquids Heat and PowerLease and Plant FuelPipeline Natural GasMetallurgical CoalOther CoalCoal-to-Liquids Heat and PowerNet Coal Coke ImportsBiofuels Heat and CoproductsRenewable EnergyLiquid HydrogenElectricityDelivered EnergyElectricity Related LossesElectric PowerDistillate Fuel OilResidual Fuel OilNatural GasSteam CoalNuclear PowerRenewable EnergyElectricity ImportsTotal Energy ConsumptionLiquefied Petroleum GasesE85Motor GasolineJet FuelKeroseneDistillate Fuel OilResidual Fuel OilPetrochemical FeedstocksOther PetroleumNatural GasNatural-Gas-to-Liquids Heat and PowerLease and Plant FuelPipeline Natural GasMetallurgical CoalOther CoalCoal-to-Liquids Heat and PowerNet Coal Coke ImportsNuclear PowerBiofuels Heat and CoproductsRenewable EnergyLiquid HydrogenElectricity ImportsEnergy Use and Related StatisticsDelivered Energy UseTotal Energy UseEthanol Consumed in Motor Gasoline and E85PopulationUS GDPCarbon Dioxide Emissionstons carbon dioxide equivalent)"
## table
## "Table 3. Energy Prices by Sector and Source - United States3Energy Prices by Sector and Source - United StatesEnergy Prices by Sector and Source, United States, Reference case(2009 dollars per million Btu, unless otherwise noted)ResidentialLiquefied Petroleum GasesDistillate Fuel OilNatural GasElectricityCommercialLiquefied Petroleum GasesDistillate Fuel OilResidual FuelNatural GasElectricityIndustrialLiquefied Petroleum GasesDistillate Fuel OilResidual Fuel OilNatural GasMetallurgical CoalOther Industrial CoalCoal to LiquidsElectricityTransportationLiquefied Petroleum GasesE85Motor GasolineJet FuelDiesel Fuel (distillate fuel oil)Residual Fuel OilNatural GasElectricityElectric PowerDistillate Fuel OilResidual Fuel OilNatural GasSteam CoalAverage Price to All UsersLiquefied Petroleum GasesE85Motor GasolineJet FuelDistillate Fuel OilResidual Fuel OilNatural GasMetallurgical CoalOther CoalCoal to LiquidsElectricityNon-Renewable Energy Expenditures by SectorResidentialCommercialIndustrialTransportationTotal Non-Renewable ExpendituresTransportation Renewable ExpendituresTotal Expenditures(billion 2009 dollars)Prices in Nominal DollarsResidentialLiquefied Petroleum GasesDistillate Fuel OilNatural GasElectricityCommercialLiquefied Petroleum GasesDistillate Fuel OilResidual FuelNatural GasElectricityIndustrialLiquefied Petroleum GasesDistillate Fuel OilResidual Fuel OilNatural GasMetallurgical CoalOther Industrial CoalCoal to LiquidsElectricityTransportationLiquefied Petroleum GasesE85Motor GasolineJet FuelDiesel Fuel (distillate fuel oil)Residual Fuel OilNatural GasElectricityElectric PowerDistillate Fuel OilResidual Fuel OilNatural GasSteam CoalAverage Price to All UsersLiquefied Petroleum GasesE85Motor GasolineJet FuelDistillate Fuel OilResidual Fuel OilNatural GasMetallurgical CoalOther CoalCoal to LiquidsElectricityNon-Renewable Energy Expenditures by SectorResidentialCommercialIndustrialTransportationTotal Non-Renewable ExpendituresTransportation Renewable ExpendituresTotal Expenditures(billion nominal dollars)"
CategoriasDeCadaNodoOTabla <- xpathSApply(nodoRaiz,"//label",xmlValue)
head(CategoriasDeCadaNodoOTabla)
## [1] "Table 1. Total Energy Supply, Disposition, and Price Summary"
## [2] "Total Energy Supply, Disposition, and Price Summary, Reference case"
## [3] "(quadrillion Btu, unless otherwise noted)"
## [4] "Production"
## [5] "Crude Oil and Lease Condensate"
## [6] "Natural Gas Plant Liquids"
Despues se enseña a obtener datos de tipo JSON, para ello utilizamoas el paquete jsonlite, y la función fromJSON()que convierte el url de tipo JSON en una lista de R, a la cual podemos acceder a sus elementos obteniendo diferentes data.frames. Tambien cabe resltar que de este paquete se puede vovler a escribir un archivo JSON con la función toJSON() donde se indica el atributo pretty=TRUEpara hacer que se observe con llaves caracteristicas del tipo JSON m
library(jsonlite)
## Warning: package 'jsonlite' was built under R version 4.0.5
Archivo <- "https://datosabiertos.bogota.gov.co/dataset/d2ad3bde-f835-4c01-a419-53902a16d1b3/resource/d1b71ea0-6e13-4f9e-aa46-fa41c496ab16/download/parques.geojson"
jsonData <- fromJSON(Archivo)
data <-jsonData[[3]]
data <-data$properties
head(data)
## OBJECTID SHAPE_Leng SHAPE_Area ID_PARQUE ESTRATO COORDENADA COORDENA_1
## 1 5075 305.9956 2143.9530 12-157 5 102147,368492 109832,960404
## 2 5077 369.7889 8296.3422 16-010 3 97340,7046936 101256,344212
## 3 5078 327.6652 4008.5506 16-078 3 97279,6425538 101141,304905
## 4 5079 300.2943 1607.5566 10-575 3 95425,4021427 111351,077576
## 5 5080 127.5994 943.8615 07-318 2 86917,7080302 101992,618191
## 6 5081 259.7845 2193.9310 07-319 2 86691,0683295 101804,139997
## npar
## 1 AGRUPACIàN DE VIVIENDA VILLA CALASANZ II ETAPA
## 2 VERAGUAS CENTRAL (BARRIO COMUNEROS Y BOCHICA)
## 3 VERAGUAS CENTRAL (BARRIO COMUNEROS Y BOCHICA)
## 4 URBANIZACIàN LOS µNGELES
## 5 DESARROLLO ISLANDIA
## 6 DASARROLLO GRAN COLOMBIANO II SECTOR- LAURELES
## NOMBRE_PAR CODIGOPOT TIPOPARQUE
## 1 AGRUPACIàN DE VIVIENDA VILLA CALASANZ II ETAPA <NA> PARQUE VECINAL
## 2 VERAGUAS CENTRAL (BARRIO COMUNEROS Y BOCHICA) <NA> PARQUE VECINAL
## 3 VERAGUAS CENTRAL (BARRIO COMUNEROS Y BOCHICA) <NA> PARQUE VECINAL
## 4 URBANIZACIàN LOS µNGELES <NA> PARQUE VECINAL
## 5 DESARROLLO ISLANDIA <NA> PARQUE DE BOLSILLO
## 6 DASARROLLO GRAN COLOMBIANO II SECTOR- LAURELES <NA> PARQUE VECINAL
## LOCNOMBRE ADMINISTRA ESTADO_CER ID_LOCALID FECHAINCOR
## 1 BARRIOS UNIDOS <NA> CERTIFICADO 12 20/05/2006
## 2 PUENTE ARANDA <NA> CERTIFICADO 16 01/01/2004
## 3 PUENTE ARANDA <NA> CERTIFICADO 16 01/01/2004
## 4 ENGATIVA <NA> CERTIFICADO 10 20/05/2006
## 5 BOSA <NA> CERTIFICADO 7 20/05/2006
## 6 BOSA <NA> CERTIFICADO 7 20/05/2006
JASON <- toJSON(data,pretty = TRUE)
AL finalizar la semana 1 se enseña el manejo de las data.tables, que heredan los atributos de los data.frames, por lo que se pueden manejar de igual forma, aun que cambia un poco su manejo de expresiones, expondré estos conceptos con este ultimo data.frame que obtuve.
Mediante el paquete data.tablese accede al manejo de estas funciones, con la función tables()se osberva que tablas se tienen cargadas; cabe resaltar que se puede leer algun archivo directamente como data.table usando la función fread()que en mi experiencia es mas rápida que la básica read.csvaun asi estando optimizada, e incluso mas rápida que la función read_csvdel paquete readr
library(data.table)
data <- data.table(data)
class(data)
## [1] "data.table" "data.frame"
tables()
## NAME NROW NCOL MB
## 1: data 5,315 16 2
## COLS KEY
## 1: OBJECTID,SHAPE_Leng,SHAPE_Area,ID_PARQUE,ESTRATO,COORDENADA,...
## Total: 2MB
si quisiera hace un subconujunto de los parques de estrato dos estas serian la forma igual que con un data.frame
data[data$ESTRATO==2,]
## OBJECTID SHAPE_Leng SHAPE_Area ID_PARQUE ESTRATO COORDENADA
## 1: 5080 127.59943 943.8615 07-318 2 86917,7080302
## 2: 5081 259.78449 2193.9310 07-319 2 86691,0683295
## 3: 5082 154.53336 1258.2906 01-241 2 105558,806653
## 4: 11028 135.30618 1042.9728 04-476 2 98843,1210914
## 5: 5090 213.51484 2622.6158 19-719 2 92646,9452505
## ---
## 1454: 11046 248.04806 1939.7229 18-460 2 96725,7804465
## 1455: 18676 143.64487 660.8323 05-501 2 96635,1199241
## 1456: 18706 46.98359 91.0672 03-171 2 100439,194937
## 1457: 18735 101.81557 253.0186 03-172 2 101058,670455
## 1458: 18742 406.16744 3875.8863 04-477 2 98958,4008721
## COORDENA_1 npar
## 1: 101992,618191 DESARROLLO ISLANDIA
## 2: 101804,139997 DASARROLLO GRAN COLOMBIANO II SECTOR- LAURELES
## 3: 118887,978317 DESARROLLO BUENAVISTA
## 4: 96783,0371776 Granada Sur
## 5: 97039,1982285 URBANIZACIàN PROTECHO BOGOTµ II (ETAPA II,III Y IV)
## ---
## 1454: 95247,0118701 Desarrollo Molinos II Sector
## 1455: 89051,9893221 LOS COMUNEROS
## 1456: 98759,635438 GIRARDOT
## 1457: 98946,746508 LACHES LOS
## 1458: 95069,2904183 BELLA VISTA SUR ORIENTAL PARTE ALTA
## NOMBRE_PAR CODIGOPOT
## 1: DESARROLLO ISLANDIA <NA>
## 2: DASARROLLO GRAN COLOMBIANO II SECTOR- LAURELES <NA>
## 3: DESARROLLO BUENAVISTA <NA>
## 4: Granada Sur <NA>
## 5: URBANIZACIàN PROTECHO BOGOTµ II (ETAPA II,III Y IV) <NA>
## ---
## 1454: Desarrollo Molinos II Sector <NA>
## 1455: LOS COMUNEROS <NA>
## 1456: GIRARDOT <NA>
## 1457: LACHES LOS <NA>
## 1458: BELLA VISTA SUR ORIENTAL PARTE ALTA <NA>
## TIPOPARQUE LOCNOMBRE ADMINISTRA ESTADO_CER ID_LOCALID
## 1: PARQUE DE BOLSILLO BOSA <NA> CERTIFICADO 7
## 2: PARQUE VECINAL BOSA <NA> CERTIFICADO 7
## 3: PARQUE VECINAL USAQUEN <NA> CERTIFICADO 1
## 4: PARQUE VECINAL SAN CRISTOBAL <NA> CERTIFICADO 4
## 5: PARQUE VECINAL CIUDAD BOLIVAR <NA> CERTIFICADO 19
## ---
## 1454: PARQUE VECINAL RAFAEL URIBE <NA> CERTIFICADO 18
## 1455: PARQUE DE BOLSILLO USME <NA> CERTIFICADO 5
## 1456: PARQUE DE BOLSILLO SANTAFE <NA> CERTIFICADO 3
## 1457: PARQUE DE BOLSILLO SANTAFE <NA> CERTIFICADO 3
## 1458: PARQUE VECINAL SAN CRISTOBAL <NA> SIN CERTIFICAR 4
## FECHAINCOR
## 1: 20/05/2006
## 2: 20/05/2006
## 3: 31/12/2017
## 4: 26/02/2020
## 5: 31/12/2016
## ---
## 1454: 05/10/2020
## 1455: 07/10/2020
## 1456: 21/01/2021
## 1457: 05/02/2021
## 1458: 08/02/2021
para hace un subconjkunto de filas es la coma se puede omitir,ya que para una data table lo que esta a la derecha de la coma NO SON COLUMNAS a diferencia del data.frame, sino que despeus de la coma se puden realizar expresiones especificas como la creacion de nuevas columnas
data[c(10,20)] # extrayendo 2 columnas cualquieras
## OBJECTID SHAPE_Leng SHAPE_Area ID_PARQUE ESTRATO COORDENADA COORDENA_1
## 1: 10600 81.1191 194.5937 19-771 1 90291,0181307 96507,798424
## 2: 5073 134.7191 1083.6680 12-155 5 101967,509237 109954,087498
## npar
## 1: Desarrollo Arborizadora Alta
## 2: AGRUPACIàN DE VIVIENDA VILLA CALASANZ II ETAPA
## NOMBRE_PAR CODIGOPOT TIPOPARQUE
## 1: Desarrollo Arborizadora Alta <NA> PARQUE DE BOLSILLO
## 2: AGRUPACIàN DE VIVIENDA VILLA CALASANZ II ETAPA <NA> PARQUE VECINAL
## LOCNOMBRE ADMINISTRA ESTADO_CER ID_LOCALID FECHAINCOR
## 1: CIUDAD BOLIVAR <NA> CERTIFICADO 19 31/12/2017
## 2: BARRIOS UNIDOS <NA> CERTIFICADO 12 20/05/2006
data[,mean(SHAPE_Area)] # obteniendo area promedio
## [1] 6677.718
Notese como solo se pone el nombre de la columna a analizar, ya que se entende que es de la data.table
data[,table(ESTRATO)] # cantidad de parques para cada estrato
## ESTRATO
## 1 2 3 4 5 6 Rural
## 560 1458 2001 723 295 265 13
data[,table(ESTRATO,ESTADO_CER)] # cantidad de parques para cada estrato de tipo certificado, en investigacion o no certificados
## ESTADO_CER
## ESTRATO CERTIFICADO INVESTIGADO NO CERTIFICADO SIN CERTIFICAR
## 1 530 18 12
## 2 1233 65 160
## 3 1746 68 187
## 4 600 24 99
## 5 266 6 23
## 6 221 3 41
## Rural 11 2 0
#creacion de nueva columna
data[,TamanoSegunYo:= ifelse(SHAPE_Area>1000,"Grande","Pequeño")]
data[,c("SHAPE_Area","TamanoSegunYo"),with=FALSE]
## SHAPE_Area TamanoSegunYo
## 1: 2143.9530 Grande
## 2: 8296.3422 Grande
## 3: 4008.5506 Grande
## 4: 1607.5566 Grande
## 5: 943.8615 Pequeño
## ---
## 5311: 147.8832 Pequeño
## 5312: 11398.9831 Grande
## 5313: 253.0186 Pequeño
## 5314: 3875.8863 Grande
## 5315: 404169.6679 Grande
Cabe resaltar que también se pueden relizar expresiones para la creacion de tablas nuevacolumna:={;}, tambien cabe resltar que para poder hacer subconjuntos de columnas toca especiicar el argumento whith=FALSE
#calculo pro agrupación, similar a tapply de base, o groupby y summarize de dplyr.
data[,PromedioArea:=mean(SHAPE_Area),by=ESTRATO]
unique(data[,c("PromedioArea","ESTRATO"),with=FALSE])
## PromedioArea ESTRATO
## 1: 4889.851 5
## 2: 5174.413 3
## 3: 6537.960 2
## 4: 5613.478 1
## 5: 9082.884 4
## 6: 146298.335 Rural
## 7: 9625.911 6
#utilizo unique al haber registros repetidos
Notece como el area promedio de tipo rural es mayor para los estratos 6 o mas ricos de la ciudad.
#Funcion .N para contar y especificacion de llave para no tener que indicar el argumento by y todo lo que se realice se hara respecto a la llave
setkey(data,ESTRATO)
data['5',.N] #cuantos valores para algun tipo de estrato especifico
## [1] 295
Finalmente en cuanto a Data.Tables lo unico que no muestro es el uso de la función merge() en data.tables, lo cual para ello se fija la llave para dos data.tables y se especifica esta llave por la coluna sobre la cual se queire hacer la fusion de tablas, despues es usar merge()directamnete con las dos data tables.
En el curso tambien se explico la conexion a bases de datos MySql para ello se utiliza el paquete RMySql pero para que este funcione adecuadamente se debe tener instalado el servidor de MySql además de definir en windows, este servidor como una variable global.
library(RMySQL)
## Warning: package 'RMySQL' was built under R version 4.0.5
## Loading required package: DBI
## Warning: package 'DBI' was built under R version 4.0.5
Conexion <- dbConnect(MySQL(),user='root',password=contrasena,dbname="tienda",host='localhost')
Conexion
## <MySQLConnection:0,0>
Cabe resaltar que en el comando anterior especifico las cosas básicas para poder conectarce a una base de datos, en este caso una base de datos local de mi computador,donde la contraseña la defino pero no la muestro, y en codigo esa parte del codigo la elimino asi que si alguien lo usa debe especificar su propia contraseña y base de datos.
para el cual tuve siretos problemas que logre solucionar en ProblemaRmySqlen lase gunda respuesta. tambien cabe resaltar que tal base de datos la cree medainte un formulario realizado en C#, donde depronto subo el Código.
basesDeDatos <- dbListTables(Conexion)
basesDeDatos
## [1] "productos"
ColumnasDeAlgunaTabla <-dbListFields(Conexion,"productos")
ColumnasDeAlgunaTabla
## [1] "id" "codigo" "nombre" "descripcion"
## [5] "precio_publico" "existencias"
resultado <- dbGetQuery(Conexion,"SELECT * FROM tienda.productos")
## Warning in .local(conn, statement, ...): Decimal MySQL column 4 imported as
## numeric
#resultado <- dbReadTable(Conexion,"productos")#equivalente al anterior
resultado
## id codigo nombre descripcion precio_publico existencias
## 1 1 6 Gaseosa Cola Refresco azucarado 2500 15
## 2 3 10 Gaseosa Pepsi Refresco azucaradp 2700 10
dbDisconnect(Conexion)
## [1] TRUE
En el código anterior,primero reviso que tablas hay en la base de datos mediante dbListTables, despues con dbListFieldsobservo que columnas tiene alguna tabla a observar,y finalmente mediante la función dbGetQuery() obtengo de la conexión mediante algún comando lo que deseo, en este caso obtener la base de datos, a la cual yo aca mediante R ya puedo manejar como quiera al ser un data.frame;finalmente se realiza la desconexion de la base de datos.
Cabe resaltar que en caso de no querer usar el comando SQL para Obetenr los datos se peude utilizar la función dbReadTable. ademas de ello se reslta que en ves de dbGetQuery()se podria utilizar dbSendQuery()y posteriormente ese resutlado obtenerlo con la funcion fetch() , y despues limpiar la query con dbClearResult() aplicada al objeto dato por dbSendQuery().
finalmente encuanto a SQL me gustaria resaltar el paquete sqldf el cual permite ejecutar comandos de sql directamente a un dataframe de R.
En el curso tambien se enseño a realizar lectura de archivos .h5, y la escritura de los mismos, donde estos archivos generalemnte es para almacenar datos que van a pesar bastante, sin embargo por esa misma razon no lo planeo realizar en este documento, ya que para leer archivos que encontre online estos pesaban minimo 2GB, y por otro lado no tengo nada pesado para almecenar de tal magnitud, solo mencionare que para ello se necesita el paquete HDF5done se crean los archivos con h5createFile,se observan los datos con h5ls, se escriben objetos que tengamos con h5write y se lee algun archivo externo con h5read
Con la función url() podemos conectarnos a alguna página web para posteriormente leerla como texto con readLines() y en tal caso tocaría usar funciones de expresiones regulares, como grep() y demás
Pagina <- url("http://hpv.prosperidadsocial.gov.co")
estudio <- readLines(Pagina)
## Warning in readLines(Pagina): incomplete final line found on 'http://
## hpv.prosperidadsocial.gov.co'
head(estudio)
## [1] "" ""
## [3] "<!DOCTYPE html>" "<html lang=\"es\">"
## [5] "<head>" " <meta charset=\"UTF-8\">"
date()
## [1] "Wed Jul 28 23:04:35 2021"
Del código anterior el resutlado que se obtiene es el código fuente de la página la cual es un html.
Además cabe resaltar , que para poder usar esta función url()el link al que accedemos debe ser de tipo http si no, la conexion no se podra abrir, y en tal caso se debera utilizar el paquete httr anteriormente mencuionado y utilizar el método GETy en tal caso el objeto recogido seria un html el cual se puede utilizar mediatne la función htmlTreeParsedel paquete XML similar la proceso mostrado en este documento en la seccion leer XML ; tambiñen cabe resaltar el uso de la función handle, la cual se aplicaría a un link y despues este si se pediría con GET esto solo para mantener el uso de cookies.
Para acceder a paginas de Twitter es necesaria la creación de una API de Twitter, y una ves tenida tal applicación, twitter nos dará una clave de consumidor, una clave de consumidor secreta, además de un token y un token secreto, apartir de tales datos, se puede acceder a datos de twitter de diferentes maneras, se puede utilizar el paquete httr, y los paquetes rtweety twitteR, donde en cualquier caso hay que hacer uan autentificación de los datos proveidos por la API; solo pondré los códigos para el paquete de httry rtweet, y posteriomrente pondré algunas funciones para la consulta de datos, donde para el paquete httr estas consultas son algo mas arcaicas ya que se utilizan directamente comandos especificos que la API de twitter nos especifica en su documentanción para pedir diferentes datos ya sea seguidores, ultimos tweets y demás, a diferencia del paquete rtweet donde este trae ya unas funciones especificas para la realización de tales consultas, y en cuanto a twitteR este no lo utilizo ya que es demasiado similar a rtweet.
Cabe resaltar que en el siguiente xodigo pongo en comentarios debido a que este proceso ya lo realice antes, lo que cabe destacar es que si es la priemra ves haciendo esta generación es necesario guardar el archivo con el token generado como RDS, para despeusp oder leerlo facilmente
library(httr)
#ConsumidorClave <- oauth_app("twitter", key = "ClaveDeCOnsumidor", secret = "SecretoDeClaveDeCOnsumidor")
#token <- sign_oauth1.0(ConsumidorClave,token="Token",token_secret = "TOkenSecreto")
#saveRDS(token, file = "twitter.rds") guardar ek archivo con el token en caso de ser la priemera ves
token <- readRDS("twitter.rds")
Una ves generado el token, ya con este podemos acceder a los datos de twitter para ello en la documentacion se encuentran diferentes ejemplos para consultar con el método GET API Twitter
Bogota <- GET("https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=bogota&count=200",token)
En el comando anterior, pasamos el ejemplo de consulta respecto a el timeline o ultimos tweets de algun usuario, en ese caso notece que en el link despues del .json o comando que se observa en la página citada anteriormente de la documentación de Twitter se indica el header ?screen_name el cual corresponde a el nombre que tiene un usario normalmente el twitter, y con &seguimos agregando parametros que deseemos, en este caso 200 tweets, finalmente del codigo anterior se obtiene una respuesta de twitter en formato JSON, al cual podemos acceder de manera similar a como lo explique anteriormente y poner nuestros datos en un data.frame del cual extraemos la columna text que tendria los tweets Alcaldia de Bogota
library(jsonlite)
DatosBogota <- content(Bogota)
DatosBogotaEnDataFrame <- fromJSON(toJSON(DatosBogota))
head(DatosBogotaEnDataFrame$text)
## [[1]]
## [1] "El @idubogota tiene previsto intervenir 814, 82 km/carril con los recursos presupuestales de 2021 y las vigencias f… https://t.co/pIeaWxjwAa"
##
## [[2]]
## [1] "A partir de agosto se iniciarán actividades de mantenimiento y conservación a 35 km/carril de malla vial arterial n… https://t.co/3knHDtnKGP"
##
## [[3]]
## [1] "Las obras de la @UMVbogota contribuyen a recorridos más seguros. Este 2<U+FE0F><U+20E3>0<U+FE0F><U+20E3>2<U+FE0F><U+20E3>1<U+FE0F><U+20E3> hemos tapado 1<U+FE0F><U+20E3>2<U+FE0F><U+20E3>4<U+FE0F><U+20E3>.2<U+FE0F><U+20E3>6<U+FE0F><U+20E3>8<U+FE0F><U+20E3>… https://t.co/NTzxURG4z6"
##
## [[4]]
## [1] "A partir de los trabajos nocturnos en los que @idubogota y @UMVbogota aprovechan el bajo flujo vehicular <U+0001F697><U+0001F3CD><U+FE0F><U+0001F68E>, han… https://t.co/VWR98qJkwh"
##
## [[5]]
## [1] "¡Le apostamos a la reactivación económica! La @UMVbogota no se ha detenido a pesar de la pandemia <U+0001F9A0>. La entidad tra… https://t.co/eWx6O7pANY"
##
## [[6]]
## [1] "¡No nos detenemos! <U+0001F929> Así quedó la <U+0001F4CD> calle 100 entre carreras 49 y 54 después de las intervenciones nocturnas realiz… https://t.co/gjIFPeLeYg"
date()
## [1] "Wed Jul 28 23:04:39 2021"
usando rtweet
library(rtweet)
## Warning: package 'rtweet' was built under R version 4.0.5
##
## Attaching package: 'rtweet'
## The following object is masked from 'package:jsonlite':
##
## flatten
#token <- create_token(app= "nombreapp" ,consumer_key="",consumer_secret="",access_token="",access_secret="")
#saveRDS(token, file = "twitterRtweet.rds")
tokenRtweet <- readRDS("twitterRtweet.rds")
olimpicos <- search_tweets("#Tokio2020",n=200,include_retwets=FALSE,token = tokenRtweet)
head(olimpicos$text)
## [1] "#AHORA El tirador Alessandro De Souza empezó a disparar en la ronda 5 en #Tokio2020. Ha fallado solo 1 plato. La fe. <U+0001F1F5><U+0001F1EA> https://t.co/4ZkUGFXwB2"
## [2] "4to Set \n#Kor 9\n#Dom 14\n\nJuego liderado por Corea 2-1\n\n#Tokio2020 \n#Volleyball \n\n#LasReinasDelCaribe \n\n#VamosReinas"
## [3] "¿Qué significan los colores de los aros olímpicos<U+0001F3C5>?\n\n<U+0001F535>Los 5 aros son el principal símbolo de los juegos olímpicos<U+0001F3DF><U+FE0F>, cada color representa a un continente<U+0001F30E> y a sus atletas<U+0001F3CA><U+0001F3FD>.\n\n#Tokio2020 #OlympicGames2021 #CongresoTv https://t.co/4qN9OquXul"
## [4] "#Tokyo2020 \n #Tokio2020\n #<U+6A4B><U+672C><U+91D1><U+30E1><U+30C0><U+30EB>\n #shameonjapan\n #Olympics \n #<U+6A4B><U+672C><U+5927><U+8F1D>\nWhat a high level gold medal to impress the world<U+0001F60A> https://t.co/W0zpb8P4Gp"
## [5] "<U+0001F1E8><U+0001F1FA> #Tokio2020 La favorita de los 78 Kg Madeleine Malonga de Francia vence en un tremendo combate que se extendió a regla de oro a Kaliema Antomarchi. La cubana de todas formas se va al repechaje. @radiorebeldecu @radio_cubana @oneliocc @InderCuba @CMontiller #HagamosloPorCuba https://t.co/YNTdurJ5Mx"
## [6] "#EcuatorianosEnJJOO #Tokio2020 #Judo \n\nVanessa Chalá cayó por #Ippon ante Anastasia Turchin de Ucrania, a lo 3:42 minutos de combate, en la cat. -78kg y termina su participación en el certamen. https://t.co/5y00kalFg2"
Notece del código anterior, que el token es necesario crealo esepecificamente para estas funciones de rtweet, no funciona el token del paquete httr, además fijece como con la función search_tweets se obtienen 200 tweets de el numeral tokio2020 y se pone el argumento include_retwets=FALSEpara que solo salgan los tweets originales, seguido del token a usar.
Por ultimo en cuanto a twitter hay mas funciones que se pueden aplicar como get_friends, get_timelines(para el mismo procedimiento anterior con httr) y demás asi como comandos especificos de tipo GET para obtener algo que se desee.
En cuanto a imagenes realmente no se enseño mucho, simplemente descargarla y mediante el paquete jpeg y la función readJPEG obtener la inforamción de una imagen de forma nativa.
library(jpeg)
UDistrital <- "http://laud.udistrital.edu.co/sites/default/files/images/Escudo%20U%20Distrital.jpg"
download.file(UDistrital,destfile = "Distrital.jpeg",mode = "wb")
UD <- readJPEG("Distrital.jpeg", native=TRUE)
En cuanto a limpiar datos se nombraron ciertos procedimientos a seguir asi como otras funciones, se nombro la función sort la cual se le pasa un vector como argumento, el parametro decreasing, y el parametro na.last=TRUE dando como resutlado las posiciones del vector ordenado de la manera indicada y poniendo de ultimas los NA en caso de haber, también se hablo de la funciñon order que utilice en el anterior proyecto,y de arrange de plyr o dplyrla cual usare mas adelante en este documento.
En tales procedimientos se nombra Ordenar los datos, Agregar Columnas como algun id, tratar los valores faltantes, y para ello se nombra empezar mirando las primeras filas de los datos, hacer resumenes, sacar cuantiles de variables cuantitivas, utilizar table(), y demás procedimientos que realicé en el anterior proyecto, lo unico nuevo que se enseño fueron Croos tabs que aplicaré aca, siguiendo con los datos obtenidos de los parques de bogota y flat tables
TablaCruzada <- xtabs(SHAPE_Area~ESTRATO+ESTADO_CER,data=data)
TablaCruzada
## ESTADO_CER
## ESTRATO CERTIFICADO INVESTIGADO NO CERTIFICADO SIN CERTIFICAR
## 1 2185614.0848 325790.7312 632143.0500
## 2 7225527.4014 1507443.7475 799374.2602
## 3 9092139.1756 341152.9040 920709.0142
## 4 6016850.9793 245944.3477 304130.1377
## 5 1272647.1153 29893.1040 139965.8242
## 6 2083516.5237 185986.3360 281363.5389
## Rural 1901071.1695 807.1826 0.0000
En caso anterior muestro los valores del area del parque respecto al estrato y desagregados por su certificacion, en caso de poner otra variable, salen varias tablas como en el sigueitne código
TablaCruzadade3 <- xtabs(SHAPE_Area~ESTRATO+ESTADO_CER+TIPOPARQUE,data=data)
TablaCruzadade3
## , , TIPOPARQUE = ESCENARIO DEPORTIVO
##
## ESTADO_CER
## ESTRATO CERTIFICADO INVESTIGADO NO CERTIFICADO SIN CERTIFICAR
## 1 0.0000 0.0000 0.0000
## 2 0.0000 0.0000 0.0000
## 3 95786.2129 0.0000 0.0000
## 4 449521.7760 0.0000 0.0000
## 5 0.0000 0.0000 0.0000
## 6 0.0000 0.0000 0.0000
## Rural 0.0000 0.0000 0.0000
##
## , , TIPOPARQUE = PARQUE DE BOLSILLO
##
## ESTADO_CER
## ESTRATO CERTIFICADO INVESTIGADO NO CERTIFICADO SIN CERTIFICAR
## 1 123636.2285 5591.1022 0.0000
## 2 232082.5146 9259.0929 15330.8643
## 3 289845.8550 10584.9993 33209.4039
## 4 86150.0745 634.9969 9621.5019
## 5 24384.7281 458.7531 1740.6597
## 6 34981.9535 318.0087 7473.0336
## Rural 1222.4169 807.1826 0.0000
##
## , , TIPOPARQUE = PARQUE METROPOLITANO
##
## ESTADO_CER
## ESTRATO CERTIFICADO INVESTIGADO NO CERTIFICADO SIN CERTIFICAR
## 1 0.0000 0.0000 0.0000
## 2 523650.4775 243293.0765 0.0000
## 3 2115931.0315 41233.8981 330974.1512
## 4 2656202.4813 0.0000 0.0000
## 5 0.0000 0.0000 0.0000
## 6 0.0000 0.0000 78813.3339
## Rural 0.0000 0.0000 0.0000
##
## , , TIPOPARQUE = PARQUE METROPOLITANO PROPUESTO
##
## ESTADO_CER
## ESTRATO CERTIFICADO INVESTIGADO NO CERTIFICADO SIN CERTIFICAR
## 1 340570.1901 277130.5299 276026.0065
## 2 718633.6546 707025.9463 0.0000
## 3 39589.0063 0.0000 0.0000
## 4 249182.5451 160066.6042 0.0000
## 5 0.0000 0.0000 0.0000
## 6 0.0000 179990.5581 0.0000
## Rural 0.0000 0.0000 0.0000
##
## , , TIPOPARQUE = PARQUE REGIONAL
##
## ESTADO_CER
## ESTRATO CERTIFICADO INVESTIGADO NO CERTIFICADO SIN CERTIFICAR
## 1 0.0000 0.0000 0.0000
## 2 0.0000 0.0000 0.0000
## 3 0.0000 0.0000 0.0000
## 4 0.0000 0.0000 0.0000
## 5 0.0000 0.0000 0.0000
## 6 0.0000 0.0000 0.0000
## Rural 1793425.1713 0.0000 0.0000
##
## , , TIPOPARQUE = PARQUE VECINAL
##
## ESTADO_CER
## ESTRATO CERTIFICADO INVESTIGADO NO CERTIFICADO SIN CERTIFICAR
## 1 1569219.0698 7668.6665 116049.4574
## 2 4944089.1221 219645.2275 446340.7015
## 3 5608447.4503 179343.7095 502245.1122
## 4 2315216.3732 85242.7466 294508.6358
## 5 1037905.1935 29434.3509 138225.1645
## 6 1896376.8487 5677.7691 177441.6374
## Rural 63555.6773 0.0000 0.0000
##
## , , TIPOPARQUE = PARQUE ZONAL
##
## ESTADO_CER
## ESTRATO CERTIFICADO INVESTIGADO NO CERTIFICADO SIN CERTIFICAR
## 1 149697.1504 35400.4326 240067.5861
## 2 730608.4882 8793.4650 337702.6944
## 3 942539.6195 38907.0000 54280.3470
## 4 260577.7292 0.0000 0.0000
## 5 210357.1937 0.0000 0.0000
## 6 152157.7215 0.0000 17635.5340
## Rural 42867.9041 0.0000 0.0000
##
## , , TIPOPARQUE = PARQUE ZONAL PROPUESTO
##
## ESTADO_CER
## ESTRATO CERTIFICADO INVESTIGADO NO CERTIFICADO SIN CERTIFICAR
## 1 2491.4460 0.0000 0.0000
## 2 76463.1444 319426.9393 0.0000
## 3 0.0000 71083.2972 0.0000
## 4 0.0000 0.0000 0.0000
## 5 0.0000 0.0000 0.0000
## 6 0.0000 0.0000 0.0000
## Rural 0.0000 0.0000 0.0000
donde esta se puede ver de manera mas agrupada con una tabla plana con la función ftable
TablaPLana <-ftable(TablaCruzadade3)
TablaPLana
## TIPOPARQUE ESCENARIO DEPORTIVO PARQUE DE BOLSILLO PARQUE METROPOLITANO PARQUE METROPOLITANO PROPUESTO PARQUE REGIONAL PARQUE VECINAL PARQUE ZONAL PARQUE ZONAL PROPUESTO
## ESTRATO ESTADO_CER
## 1 CERTIFICADO 0.0000 123636.2285 0.0000 340570.1901 0.0000 1569219.0698 149697.1504 2491.4460
## INVESTIGADO NO CERTIFICADO 0.0000 5591.1022 0.0000 277130.5299 0.0000 7668.6665 35400.4326 0.0000
## SIN CERTIFICAR 0.0000 0.0000 0.0000 276026.0065 0.0000 116049.4574 240067.5861 0.0000
## 2 CERTIFICADO 0.0000 232082.5146 523650.4775 718633.6546 0.0000 4944089.1221 730608.4882 76463.1444
## INVESTIGADO NO CERTIFICADO 0.0000 9259.0929 243293.0765 707025.9463 0.0000 219645.2275 8793.4650 319426.9393
## SIN CERTIFICAR 0.0000 15330.8643 0.0000 0.0000 0.0000 446340.7015 337702.6944 0.0000
## 3 CERTIFICADO 95786.2129 289845.8550 2115931.0315 39589.0063 0.0000 5608447.4503 942539.6195 0.0000
## INVESTIGADO NO CERTIFICADO 0.0000 10584.9993 41233.8981 0.0000 0.0000 179343.7095 38907.0000 71083.2972
## SIN CERTIFICAR 0.0000 33209.4039 330974.1512 0.0000 0.0000 502245.1122 54280.3470 0.0000
## 4 CERTIFICADO 449521.7760 86150.0745 2656202.4813 249182.5451 0.0000 2315216.3732 260577.7292 0.0000
## INVESTIGADO NO CERTIFICADO 0.0000 634.9969 0.0000 160066.6042 0.0000 85242.7466 0.0000 0.0000
## SIN CERTIFICAR 0.0000 9621.5019 0.0000 0.0000 0.0000 294508.6358 0.0000 0.0000
## 5 CERTIFICADO 0.0000 24384.7281 0.0000 0.0000 0.0000 1037905.1935 210357.1937 0.0000
## INVESTIGADO NO CERTIFICADO 0.0000 458.7531 0.0000 0.0000 0.0000 29434.3509 0.0000 0.0000
## SIN CERTIFICAR 0.0000 1740.6597 0.0000 0.0000 0.0000 138225.1645 0.0000 0.0000
## 6 CERTIFICADO 0.0000 34981.9535 0.0000 0.0000 0.0000 1896376.8487 152157.7215 0.0000
## INVESTIGADO NO CERTIFICADO 0.0000 318.0087 0.0000 179990.5581 0.0000 5677.7691 0.0000 0.0000
## SIN CERTIFICAR 0.0000 7473.0336 78813.3339 0.0000 0.0000 177441.6374 17635.5340 0.0000
## Rural CERTIFICADO 0.0000 1222.4169 0.0000 0.0000 1793425.1713 63555.6773 42867.9041 0.0000
## INVESTIGADO NO CERTIFICADO 0.0000 807.1826 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
## SIN CERTIFICAR 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
Otra cosa que se resalta es el operador %in%el cual puede sr una ofrma mas rapida de hacer un subconjunto de algun vector por ejemplo si se quisiera sacar los registros con estrao 1 2 y 3 normalemente sería usando el operador |
data[(data$ESTRATO == 1 | data$ESTRATO == 2 | data$ESTRATO == 3),]
## OBJECTID SHAPE_Leng SHAPE_Area ID_PARQUE ESTRATO COORDENADA
## 1: 5083 122.44411 673.7954 05-443 1 97087,7241926
## 2: 10600 81.11910 194.5937 19-771 1 90291,0181307
## 3: 5072 68.45705 257.9770 04-342 1 100867,326005
## 4: 5091 679.19316 5352.3034 19-722 1 90264,1539924
## 5: 5092 89.70923 310.5024 19-723 1 90068,4023667
## ---
## 4015: 18707 182.69602 169.5795 18-461 3 94945,3120986
## 4016: 18713 47.81164 142.8154 10-809 3 96494,9762982
## 4017: 18714 71.51606 177.2922 10-810 3 96582,0407222
## 4018: 18715 48.65344 147.8832 10-811 3 96606,4721419
## 4019: 18777 3001.93889 404169.6679 03-035 3 0
## COORDENA_1
## 1: 87542,5058796
## 2: 96507,798424
## 3: 96954,91233
## 4: 98064,0025543
## 5: 98050,3749333
## ---
## 4015: 96844,4940209
## 4016: 110981,525387
## 4017: 110955,417235
## 4018: 110944,022849
## 4019: 0
## npar
## 1: EL SALTEADOR
## 2: Desarrollo Arborizadora Alta
## 3: DESARROLLO LA GRAN COLOMBIA
## 4: DESARROLLO SIERRA MORENA
## 5: DESARROLLO SIERRA MORENA
## ---
## 4015: UNIDAD RESIDENCIAL FRANCISCO VEGA
## 4016: REFUGIO DEL NORTE URBANIZACION
## 4017: REFUGIO DEL NORTE URBANIZACION
## 4018: REFUGIO DEL NORTE URBANIZACION
## 4019: PARQUE NACIONAL (PM-2A) ENRIQUE OLAYA HERRERA ( SECTOR HISTORICO )
## NOMBRE_PAR
## 1: EL SALTEADOR
## 2: Desarrollo Arborizadora Alta
## 3: DESARROLLO LA GRAN COLOMBIA
## 4: DESARROLLO SIERRA MORENA
## 5: DESARROLLO SIERRA MORENA
## ---
## 4015: UNIDAD RESIDENCIAL FRANCISCO VEGA
## 4016: REFUGIO DEL NORTE URBANIZACION
## 4017: REFUGIO DEL NORTE URBANIZACION
## 4018: REFUGIO DEL NORTE URBANIZACION
## 4019: PARQUE NACIONAL (PM-2A) ENRIQUE OLAYA HERRERA ( SECTOR HISTORICO )
## CODIGOPOT TIPOPARQUE LOCNOMBRE ADMINISTRA ESTADO_CER
## 1: <NA> PARQUE DE BOLSILLO USME <NA> CERTIFICADO
## 2: <NA> PARQUE DE BOLSILLO CIUDAD BOLIVAR <NA> CERTIFICADO
## 3: <NA> PARQUE DE BOLSILLO SAN CRISTOBAL <NA> CERTIFICADO
## 4: <NA> PARQUE VECINAL CIUDAD BOLIVAR <NA> CERTIFICADO
## 5: <NA> PARQUE DE BOLSILLO CIUDAD BOLIVAR <NA> CERTIFICADO
## ---
## 4015: <NA> PARQUE DE BOLSILLO RAFAEL URIBE <NA> CERTIFICADO
## 4016: <NA> PARQUE DE BOLSILLO ENGATIVA <NA> CERTIFICADO
## 4017: <NA> PARQUE DE BOLSILLO ENGATIVA <NA> CERTIFICADO
## 4018: <NA> PARQUE DE BOLSILLO ENGATIVA <NA> CERTIFICADO
## 4019: PM2A PARQUE METROPOLITANO SANTAFE IDRD CERTIFICADO
## ID_LOCALID FECHAINCOR TamanoSegunYo PromedioArea
## 1: 5 31/12/2016 Pequeño 5613.478
## 2: 19 31/12/2017 Pequeño 5613.478
## 3: 4 20/05/2006 Pequeño 5613.478
## 4: 19 31/12/2016 Grande 5613.478
## 5: 19 31/12/2016 Pequeño 5613.478
## ---
## 4015: 18 21/01/2021 Pequeño 5174.413
## 4016: 10 21/01/2021 Pequeño 5174.413
## 4017: 10 22/01/2021 Pequeño 5174.413
## 4018: 10 22/01/2021 Pequeño 5174.413
## 4019: 3 16/04/2021 Grande 5174.413
con el operador %in%se realiza mas rápido
data[data$ESTRATO %in% c(1,2,3),]
## OBJECTID SHAPE_Leng SHAPE_Area ID_PARQUE ESTRATO COORDENADA
## 1: 5083 122.44411 673.7954 05-443 1 97087,7241926
## 2: 10600 81.11910 194.5937 19-771 1 90291,0181307
## 3: 5072 68.45705 257.9770 04-342 1 100867,326005
## 4: 5091 679.19316 5352.3034 19-722 1 90264,1539924
## 5: 5092 89.70923 310.5024 19-723 1 90068,4023667
## ---
## 4015: 18707 182.69602 169.5795 18-461 3 94945,3120986
## 4016: 18713 47.81164 142.8154 10-809 3 96494,9762982
## 4017: 18714 71.51606 177.2922 10-810 3 96582,0407222
## 4018: 18715 48.65344 147.8832 10-811 3 96606,4721419
## 4019: 18777 3001.93889 404169.6679 03-035 3 0
## COORDENA_1
## 1: 87542,5058796
## 2: 96507,798424
## 3: 96954,91233
## 4: 98064,0025543
## 5: 98050,3749333
## ---
## 4015: 96844,4940209
## 4016: 110981,525387
## 4017: 110955,417235
## 4018: 110944,022849
## 4019: 0
## npar
## 1: EL SALTEADOR
## 2: Desarrollo Arborizadora Alta
## 3: DESARROLLO LA GRAN COLOMBIA
## 4: DESARROLLO SIERRA MORENA
## 5: DESARROLLO SIERRA MORENA
## ---
## 4015: UNIDAD RESIDENCIAL FRANCISCO VEGA
## 4016: REFUGIO DEL NORTE URBANIZACION
## 4017: REFUGIO DEL NORTE URBANIZACION
## 4018: REFUGIO DEL NORTE URBANIZACION
## 4019: PARQUE NACIONAL (PM-2A) ENRIQUE OLAYA HERRERA ( SECTOR HISTORICO )
## NOMBRE_PAR
## 1: EL SALTEADOR
## 2: Desarrollo Arborizadora Alta
## 3: DESARROLLO LA GRAN COLOMBIA
## 4: DESARROLLO SIERRA MORENA
## 5: DESARROLLO SIERRA MORENA
## ---
## 4015: UNIDAD RESIDENCIAL FRANCISCO VEGA
## 4016: REFUGIO DEL NORTE URBANIZACION
## 4017: REFUGIO DEL NORTE URBANIZACION
## 4018: REFUGIO DEL NORTE URBANIZACION
## 4019: PARQUE NACIONAL (PM-2A) ENRIQUE OLAYA HERRERA ( SECTOR HISTORICO )
## CODIGOPOT TIPOPARQUE LOCNOMBRE ADMINISTRA ESTADO_CER
## 1: <NA> PARQUE DE BOLSILLO USME <NA> CERTIFICADO
## 2: <NA> PARQUE DE BOLSILLO CIUDAD BOLIVAR <NA> CERTIFICADO
## 3: <NA> PARQUE DE BOLSILLO SAN CRISTOBAL <NA> CERTIFICADO
## 4: <NA> PARQUE VECINAL CIUDAD BOLIVAR <NA> CERTIFICADO
## 5: <NA> PARQUE DE BOLSILLO CIUDAD BOLIVAR <NA> CERTIFICADO
## ---
## 4015: <NA> PARQUE DE BOLSILLO RAFAEL URIBE <NA> CERTIFICADO
## 4016: <NA> PARQUE DE BOLSILLO ENGATIVA <NA> CERTIFICADO
## 4017: <NA> PARQUE DE BOLSILLO ENGATIVA <NA> CERTIFICADO
## 4018: <NA> PARQUE DE BOLSILLO ENGATIVA <NA> CERTIFICADO
## 4019: PM2A PARQUE METROPOLITANO SANTAFE IDRD CERTIFICADO
## ID_LOCALID FECHAINCOR TamanoSegunYo PromedioArea
## 1: 5 31/12/2016 Pequeño 5613.478
## 2: 19 31/12/2017 Pequeño 5613.478
## 3: 4 20/05/2006 Pequeño 5613.478
## 4: 19 31/12/2016 Grande 5613.478
## 5: 19 31/12/2016 Pequeño 5613.478
## ---
## 4015: 18 21/01/2021 Pequeño 5174.413
## 4016: 10 21/01/2021 Pequeño 5174.413
## 4017: 10 22/01/2021 Pequeño 5174.413
## 4018: 10 22/01/2021 Pequeño 5174.413
## 4019: 3 16/04/2021 Grande 5174.413
Tambien se resalta la creación de variables binarias como la que ya cree de TamanoSegunYo(representando grande 1 y pequeño 0 podría ser)
Además la creacion de variables categoricas apartir de cauntitivas como los rangos del os cuantiles a los que pertenece el area del parque:
data[,RangoArea:=cut(SHAPE_Area,breaks = quantile(SHAPE_Area))]
data[,c("NOMBRE_PAR","RangoArea"),with=FALSE]
## NOMBRE_PAR RangoArea
## 1: EL SALTEADOR (17,792]
## 2: Desarrollo Arborizadora Alta (17,792]
## 3: DESARROLLO LA GRAN COLOMBIA (17,792]
## 4: DESARROLLO SIERRA MORENA (4.37e+03,1.79e+06]
## 5: DESARROLLO SIERRA MORENA (17,792]
## ---
## 5311: ILLIMANI (PARAISO) (4.37e+03,1.79e+06]
## 5312: DESARROLLO SUBATµ (17,792]
## 5313: VEREDA PASQUILLA LOTE EL RUBÖ (4.37e+03,1.79e+06]
## 5314: DESARROLLO SUBATµ (1.77e+03,4.37e+03]
## 5315: San Juan (4.37e+03,1.79e+06]
Para el código anterior, tambien se puede realizar en caso de no desear el corte por cuantiles, el uso del a función cut2 del paquete Hmisc especificandole a esta función el argumento g=a la cantidad de grupos que queramos.
Se nos dice tambien que utilicemos varaibles de tipo factor lo cual ya realice en el proyecto anterior, en este data set se me ocurriria volver factor especialmente el ESTRATO y mirar psoteriormente algun comportamiento entre el estrato y el area.
En esta parte de limpiar los datos merece una seccion por aparte este famosisimo paquete donde rapidamente utilizare las funciones directamentem, resalto que usaré el famoso pipe %>% que permite segun yo de cierta forma conjugar los vervos a utilizar de dplyr
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.0.5
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:data.table':
##
## between, first, last
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
# 1 convertir el objeto a una tbl_df()
datadplyr <- tbl_df(data)
## Warning: `tbl_df()` was deprecated in dplyr 1.0.0.
## Please use `tibble::as_tibble()` instead.
datadplyr %>% #dataset a aplicar oepraciones
select(ESTRATO,NOMBRE_PAR,SHAPE_Area,SHAPE_Leng,)%>% # escogemos columnas con las que deseamos quedarnos
rename(Area=SHAPE_Area,Longitud = SHAPE_Leng)%>% # cambiamos algunos nombres
filter(Area>=1000,Longitud>=100) %>% # filtramos alguans filas que deseemos, notece que no se usa el opeardor & sino solo comas, si se desea utilziar el operador | se puede utilizar con cualqueir naturaleza
arrange(desc(Area),desc(Longitud),NOMBRE_PAR) %>% # ordenamos los datos por area seguido de longitud y por ultimo por orden alfabetico
slice(1:5) # mostramos unas 5 lineas similar al head
## # A tibble: 5 x 4
## ESTRATO NOMBRE_PAR Area Longitud
## <chr> <chr> <dbl> <dbl>
## 1 Rural LA FLORIDA 1793425. 6297.
## 2 4 SIMON BOLIVAR ( SECTOR CENTRAL ) 1006720. 3950.
## 3 2 Humedal Jaboque 986042. 6061.
## 4 2 EL PORVENIR (GIBRALTAR) 718634. 3783.
## 5 2 GUAYMARAL (SECTOR USAQUEN) 707026. 5591.
Notece del código que solo mostramos 5 registros y que el parque con mayor area es LA FLORIDA de estrato Rural; cabe resltar que aun asi no se utilice slice, dplyr hará que solo se musetren 10 registros como máximo, ahora continuo con el código para utilizar la combinacion group_by y summarize que básicamente funcionan como un tapply, cotnando además con la ventaja de agrupar directamente porm as variable, si se realizara de la ofrma tradicional, seria necesario crear otra columna que agrupara dos varibles y ahi si realizar el tapply de esa varaible, esto ultimo se realizaría con la función interaction que utilicé en el anterior proyecto.
datadplyr <- tbl_df(data)
datadplyr %>%
select(ESTRATO,NOMBRE_PAR,SHAPE_Area,SHAPE_Leng,ESTADO_CER)%>%
rename(Area=SHAPE_Area,Longitud = SHAPE_Leng)%>%
filter(Area>=1000,Longitud>=100) %>%
arrange(desc(Area),desc(Longitud),NOMBRE_PAR) %>%
group_by(ESTRATO,ESTADO_CER)
## # A tibble: 3,652 x 5
## # Groups: ESTRATO, ESTADO_CER [19]
## ESTRATO NOMBRE_PAR Area Longitud ESTADO_CER
## <chr> <chr> <dbl> <dbl> <chr>
## 1 Rural LA FLORIDA 1.79e6 6297. CERTIFICADO
## 2 4 SIMON BOLIVAR ( SECTOR CENTRAL ) 1.01e6 3950. CERTIFICADO
## 3 2 Humedal Jaboque 9.86e5 6061. CERTIFICADO
## 4 2 EL PORVENIR (GIBRALTAR) 7.19e5 3783. CERTIFICADO
## 5 2 GUAYMARAL (SECTOR USAQUEN) 7.07e5 5591. INVESTIGADO NO ~
## 6 3 EL TUNAL 5.95e5 3282. CERTIFICADO
## 7 3 PARQUE NACIONAL (PM-2A) ENRIQUE OL~ 4.04e5 3002. CERTIFICADO
## 8 1 ARBORIZADORA ALTA 3.41e5 5501. CERTIFICADO
## 9 6 AGRUPACIàN BOSQUE DE TORCA 2.99e5 4777. CERTIFICADO
## 10 3 TIMIZA 2.98e5 2842. CERTIFICADO
## # ... with 3,642 more rows
notece que se muestran los mismos datos de antes, solo que sobre los datos sale un indicador de Groups indicando cuantos grupos hay; fijece que agrupamos por dos varaibles estrato y tipo de certificación habiendo 19 grupos al agrupar estas dos variables, donde cmo máximo deberian ser 21 al haber 3 tipos de ceritifacion y 7 estratos sin embargo este 19 indica que 2 combinaciones de estrato con tipo de certificacion no existen
datadplyr <- tbl_df(data)
datadplyr %>%
select(ESTRATO,NOMBRE_PAR,SHAPE_Area,SHAPE_Leng,ESTADO_CER)%>%
rename(Area=SHAPE_Area,Longitud = SHAPE_Leng)%>%
filter(Area>=1000,Longitud>=100) %>%
arrange(desc(Area),desc(Longitud),NOMBRE_PAR) %>%
group_by(ESTRATO,ESTADO_CER) %>%
summarize(PromediosAreas=mean(Area),PromediosLongitudes=mean(Longitud),CantidadRegistros=n())
## `summarise()` has grouped output by 'ESTRATO'. You can override using the `.groups` argument.
## # A tibble: 19 x 5
## # Groups: ESTRATO [7]
## ESTRATO ESTADO_CER PromediosAreas PromediosLongitud~ CantidadRegistr~
## <chr> <chr> <dbl> <dbl> <int>
## 1 1 CERTIFICADO 8055. 628. 256
## 2 1 INVESTIGADO NO CE~ 53367. 1546. 6
## 3 1 SIN CERTIFICAR 52679. 1324. 12
## 4 2 CERTIFICADO 8923. 499. 784
## 5 2 INVESTIGADO NO CE~ 31212. 640. 48
## 6 2 SIN CERTIFICAR 5851. 369. 134
## 7 3 CERTIFICADO 7192. 444. 1224
## 8 3 INVESTIGADO NO CE~ 6611. 373. 50
## 9 3 SIN CERTIFICAR 6438. 360. 138
## 10 4 CERTIFICADO 13179. 537. 450
## 11 4 INVESTIGADO NO CE~ 10666. 399. 23
## 12 4 SIN CERTIFICAR 3592. 323. 82
## 13 5 CERTIFICADO 5648. 426. 221
## 14 5 INVESTIGADO NO CE~ 5887. 396. 5
## 15 5 SIN CERTIFICAR 6911. 493. 20
## 16 6 CERTIFICADO 12803. 706. 160
## 17 6 INVESTIGADO NO CE~ 92834. 2156. 2
## 18 6 SIN CERTIFICAR 9445. 456. 29
## 19 Rural CERTIFICADO 237481. 1288. 8
Notece que la función n()cuenta cuantos registros hay para el grupo y es especial para elemenos de este tipo; también se resalta la función n_distinct que realiza la misma función de unique pero para dplyr
Creo que hasta este punto a quedado claro el manejo de dplyr la unica función que faltaria es mutate()que simplemente crea nuevas columnas y que estas miasmas columnas que se van creando pueden ser utilizadas para crear nuevas columnas directamente en la misma línea de código donde se utilice muatate; otra función similar es transmutate que reliza lo mismo pero como salida solo nos entrega las vraibles que se crearon; también cabe resaltar que en la función select se puede colocar un argumento para sleecionar de varias columnas aquellas que tengan algu nombre especifico utilizando ends_with o similarres, incluso con expresiones regulares.
Finalmente el el curso se nombran otras cosas, principalmente el manejo de expresiones regulares que ya trate en el proyecto anterior,utilizando funciones normales o del paquete stringr y finalmente el curso finaliza con el manejo de fechas con el paquete lubridate; de esto ultimo no hablaré, ya que muhcas funcioens de respecto a fechas traté en el anterior proyecto y en cuanto a lubridate lo unico que resalto es la facilidad para saber una funciión intuitivamente, ya que solo es saber como se escuentra la fecha y en sese mismo orden aplciar la función pro ejemplo la función ymd() se aplicaria a una fecha que indique año mes y y dia en ese orden.
Otras cosas que no trate fue merge()y join() de base de R y de dplyr respectivametne, esto porque no tengo datasets similares a unir.
En cuanto al concepto de tidy data este se trato varias veces en el curso, sin embargo este no lo trataré principalmente a la ya bastante longitud de este documento. asi mismo como por no encontrar datos rapidamente para aplicar tales conceptos ya que el dataset que traté ya se acomoda a un tidy data según mi opinion, sin embargo nombrare algunos casos en los que no se encuentra tidy la data, y como estos se trata con el paquete tidyr
Encabezados son valores no nombres: esto se refiere a que por ejemplo en el dataset tratado en este proyecto, una columna mostrata el valor de la altura YA directamente respecto a certificado y estrato, entonces no seria tidy data al no haber una columna diferente por cada observacion , este se soluciona con la función gather de tidyr o la función meltde base de R haceidno que lso valores que hayan los separe respecto a las variables que hayan entonces este crearia dos varibles una que dijera varias veces el encabezado y otra con el valor,sin embargo esto no terminaria siendo aún tidy. ya que esa variable primera tendría dos variables aún por lo cual se separarian mediante separate.
Lo anterior son algunas de las cosas otras son mas al manejo de diferentes tablas, como no tener la misma tabla repitiendo ids, sino separar las tablas y que una se quede con los ids de manera única.