diff --git a/_posts/2023-08-23-datos-abiertos-de-conectividad-aerea/datos-abiertos-de-conectividad-aerea.Rmd b/_posts/2023-08-23-datos-abiertos-de-conectividad-aerea/datos-abiertos-de-conectividad-aerea.Rmd
new file mode 100644
index 0000000..6e0353a
--- /dev/null
+++ b/_posts/2023-08-23-datos-abiertos-de-conectividad-aerea/datos-abiertos-de-conectividad-aerea.Rmd
@@ -0,0 +1,147 @@
+---
+title: "Datos abiertos de Conectividad Aérea"
+description: |
+ Publicación de datos abiertos sobre transporte aerocomercial en Argentina, con información sobre vuelos, pasajeros y asientos.
+date: 2023-08-23
+output:
+ distill::distill_article:
+ self_contained: false
+draft: false
+---
+
+```{r setup, include=FALSE}
+
+knitr::opts_chunk$set(echo = FALSE)
+
+library(tidyverse)
+library(comunicacion)
+library(herramientas)
+library(lubridate)
+
+
+base_total <- read_file_srv("/srv/DataDNMYE/aerocomercial/anac/base_anac_agrupada_diaria.parquet")
+
+publicacion_mes_anio <- strftime(Sys.Date(), '%B %Y')
+
+datos_mes_anio <- strftime(max(base_total$Fecha), '%B')
+
+datos_mes_anio_bis <- strftime(max(base_total$Fecha), '%d-%m-%Y')
+
+# Cabotaje
+cabotaje <- base_total %>%
+ filter(clasificacion_vuelo == "Cabotaje") %>%
+ mutate(region_destino = case_when(destino_provincia_etiqueta == "Buenos Aires" ~ "Buenos Aires",
+ destino_provincia_etiqueta == "Ciudad Autónoma de Buenos Aires" ~ "AMBA",
+ destino_provincia_etiqueta == "Córdoba" ~ "Córdoba",
+ destino_provincia_etiqueta == "Tierra del Fuego, Antártida e Islas del Atlántico Sur" ~ "Patagonia",
+ destino_provincia_etiqueta == "Santa Cruz" ~ "Patagonia",
+ destino_provincia_etiqueta == "Chubut" ~ "Patagonia",
+ destino_provincia_etiqueta == "Neuquén" ~ "Patagonia",
+ destino_provincia_etiqueta == "Río Negro" ~ "Patagonia",
+ destino_provincia_etiqueta == "La Pampa" ~ "Patagonia",
+ destino_provincia_etiqueta == "Mendoza" ~ "Cuyo",
+ destino_provincia_etiqueta == "San Juan" ~ "Cuyo",
+ destino_provincia_etiqueta == "San Luis" ~ "Cuyo",
+ destino_provincia_etiqueta == "La Rioja" ~ "Norte",
+ destino_provincia_etiqueta == "Catamarca" ~ "Norte",
+ destino_provincia_etiqueta == "Salta" ~ "Norte",
+ destino_provincia_etiqueta == "Jujuy" ~ "Norte",
+ destino_provincia_etiqueta == "Santiago del Estero" ~ "Norte",
+ destino_provincia_etiqueta == "Tucumán" ~ "Norte",
+ destino_provincia_etiqueta == "Santa Fe" ~ "Litoral",
+ destino_provincia_etiqueta == "Chaco" ~ "Litoral",
+ destino_provincia_etiqueta == "Formosa" ~ "Litoral",
+ destino_provincia_etiqueta == "Misiones" ~ "Litoral",
+ destino_provincia_etiqueta == "Corrientes" ~ "Litoral",
+ destino_provincia_etiqueta == "Entre Ríos" ~ "Litoral",
+ T ~ "No hay info"),
+ region_destino = case_when(destino_aeropuerto_etiqueta %in% c("Aeropuerto Int. Ministro Pistarini", "Aeropuerto Int. de San Fernando", "Aeropuerto El Palomar") ~ "AMBA",
+ T ~ region_destino))
+
+#Filtramos de momento los casos sin info.
+cabotaje <- cabotaje %>%
+ filter(region_destino != "No hay info")
+
+```
+
+En vistas de profundizar el trabajo realizado hasta el momento en colaboración con la [Administración Nacional de Aviación Civil (ANAC), dependiente del Ministerio de Transporte de la Nación](https://www.argentina.gob.ar/anac){target="_blank"}, la Dirección Nacional de Mercados y Estadística (DNMYE) publica de manera abierta un nuevo [conjunto de datos sobre Conectividad Aerocomercial en el país](https://datos.yvera.gob.ar/dataset/conectividad-aerea){target="_blank"}.
+
+En esta oportunidad, los datasets, accesibles a través del [portal de datos abiertos](https://datos.yvera.gob.ar/){target="_blank"} del [Sistema de Información Turística de la Argentina (SINTA)](https://www.yvera.tur.ar/sinta/){target="_blank"}, contienen información sobre **vuelos, pasajeros, asientos, aerolíneas comerciales y rutas comerciales desde el año 2017**. Los datos pueden ser encontrados de manera agregada y desagregada, con una frecuencia diaria, aunque también de manera mensual, trimestral y anual, lo cual permite observar su evolución en el tiempo.
+
+De esta manera, se puede ver, por ejemplo, la cantidad de rutas federales que conectan el país por mes.
+
+```{r}
+valores_vacios <- data.table::data.table(anio_local = 2020,
+ mes_local = 4:10,
+ total_rutas = 0)
+
+rutas_federales <- cabotaje %>%
+ filter(!str_detect(ruta_nombre, "Ezeiza|El Palomar|Ciudad de Buenos Aires")) %>%
+ group_by(anio_local, mes_local, ruta_nombre) %>%
+ summarise(total_vuelos = sum(vuelos, na.rm = T)) %>%
+ filter(total_vuelos >= 4) %>%
+ group_by(anio_local, mes_local, .drop = F) %>%
+ summarise(total_rutas = n_distinct(ruta_nombre)) %>%
+ bind_rows(valores_vacios) %>%
+ mutate(fecha = lubridate::my(paste0(mes_local,"-", anio_local))) %>%
+ ggplot(aes(x = fecha,
+ y = total_rutas,
+ text = paste("Fecha:",
+ format(fecha,"%b-%y"),
+ "
Total:",
+ format(total_rutas,
+ big.mark=".", decimal.mark = ",", digits=0)))) +
+ geom_segment(aes(xend = fecha,
+ y = 0,
+ yend = total_rutas),
+ color = dnmye_colores("cian"))+
+ geom_point(color = dnmye_colores("cian"),
+ size = 1.25,
+ fill = alpha(dnmye_colores("cian"), 0.3),
+ alpha = 0.7,
+ shape = 21,
+ stroke = 2) +
+ geom_point(data = cabotaje %>%
+ filter(!str_detect(ruta_nombre, "Ezeiza|El Palomar|Ciudad de Buenos Aires")) %>%
+ group_by(anio_local, mes_local, ruta_nombre) %>%
+ summarise(total_vuelos = sum(vuelos, na.rm = T)) %>%
+ filter(total_vuelos >= 4) %>%
+ group_by(anio_local, mes_local, .drop = F) %>%
+ summarise(total_rutas = n_distinct(ruta_nombre)) %>%
+ bind_rows(valores_vacios) %>%
+ mutate(fecha = lubridate::my(paste0(mes_local,"-", anio_local))) %>%
+ filter(mes_local == month(max(cabotaje$Fecha))),
+ color = dnmye_colores("rosa"),
+ size = 1,
+ fill = alpha(dnmye_colores("rosa"), 0.3),
+ alpha = 0.7,
+ shape = 21,
+ stroke = 1.5) +
+ scale_y_continuous(limits = c(0, 75),
+ breaks = seq(0, 75, 15))+
+ scale_x_date(date_breaks = "4 month",
+ date_labels = "%b-%y")+
+ scale_fill_dnmye(palette = "cualitativa", reverse = -1)+
+ labs(title = "Cantidad de rutas aéreas federales",
+ subtitle = "Con al menos 4 frecuencias mensuales",
+ y = "",
+ x = "",
+ color = "",
+ caption = "Fuente: MINTURDEP en base a información de ANAC.\n Comprende rutas aéreas que no conenctan con el AMBA.\n Nota: En rojo, los meses de agosto.") +
+ theme_minimal() +
+ theme(legend.position = "bottom",
+ axis.text.x = element_text(angle = 45,
+ hjust = 1,
+ vjust = 1))
+
+rutas_federales
+```
+
+A partir del gráfico, se observa que el número de rutas federales ha ido en constante crecimiento desde el quiebre que supuso para la actividad la pandemia durante el año 2020. De esta manera, y pese a las fluctuaciones propias de la demanda estacional, en la actualidad, hay un record de rutas aéreas que unen localidades del interior del país sin pasar por ningún aeropuerto del área metropolitana de Buenos Aires.
+
+En este marco, estos recursos, en conjunto con los recientemente publicados *[Documento de Trabajo N°11](https://tableros.yvera.tur.ar/recursos/biblioteca/conectividad_aerea.pdf){target="_blank"}*, [reporte mensual](https://tableros.yvera.tur.ar/conectividad.html){target="_blank"} y [Tablero de Conectividad Aérea](https://tableros.yvera.tur.ar/conectividad/){target="_blank"}, suponen una nueva fuente de datos para el análisis del mercado aerocomercial y el flujo de pasajeros en el país, una dimensión clave de la actividad turística nacional.
+
+
+::: {.infobox}
+Para recibir las novedades del SINTA escribíle al bot de Telegram de la DNMyE *SintIA*: @RDatinaBot 🤖
+:::
diff --git a/_posts/2023-08-23-datos-abiertos-de-conectividad-aerea/datos-abiertos-de-conectividad-aerea.html b/_posts/2023-08-23-datos-abiertos-de-conectividad-aerea/datos-abiertos-de-conectividad-aerea.html
new file mode 100644
index 0000000..98313a4
--- /dev/null
+++ b/_posts/2023-08-23-datos-abiertos-de-conectividad-aerea/datos-abiertos-de-conectividad-aerea.html
@@ -0,0 +1,1509 @@
+
+
+
+
+
Publicación de datos abiertos sobre transporte aerocomercial en Argentina, con información sobre vuelos, pasajeros y asientos.
+En vistas de profundizar el trabajo realizado hasta el momento en colaboración con la Administración Nacional de Aviación Civil (ANAC), dependiente del Ministerio de Transporte de la Nación, la Dirección Nacional de Mercados y Estadística (DNMYE) publica de manera abierta un nuevo conjunto de datos sobre Conectividad Aerocomercial en el país.
+En esta oportunidad, los datasets, accesibles a través del portal de datos abiertos del Sistema de Información Turística de la Argentina (SINTA), contienen información sobre vuelos, pasajeros, asientos, aerolíneas comerciales y rutas comerciales desde el año 2017. Los datos pueden ser encontrados de manera agregada y desagregada, con una frecuencia diaria, aunque también de manera mensual, trimestral y anual, lo cual permite observar su evolución en el tiempo.
+De esta manera, se puede ver, por ejemplo, la cantidad de rutas federales que conectan el país por mes.
+A partir del gráfico, se observa que el número de rutas federales ha ido en constante crecimiento desde el quiebre que supuso para la actividad la pandemia durante el año 2020. De esta manera, y pese a las fluctuaciones propias de la demanda estacional, en la actualidad, hay un record de rutas aéreas que unen localidades del interior del país sin pasar por ningún aeropuerto del área metropolitana de Buenos Aires.
+En este marco, estos recursos, en conjunto con los recientemente publicados Documento de Trabajo N°11, reporte mensual y Tablero de Conectividad Aérea, suponen una nueva fuente de datos para el análisis del mercado aerocomercial y el flujo de pasajeros en el país, una dimensión clave de la actividad turística nacional.
+Para recibir las novedades del SINTA escribíle al bot de Telegram de la DNMyE SintIA: @RDatinaBot 🤖
+
`,e.githubCompareUpdatesUrl&&(t+=`View all changes to this article since it was first published.`),t+=` + If you see mistakes or want to suggest changes, please create an issue on GitHub.
+ `);const n=e.journal;return'undefined'!=typeof n&&'Distill'===n.title&&(t+=` +Diagrams and text are licensed under Creative Commons Attribution CC-BY 4.0 with the source available on GitHub, unless noted otherwise. The figures that have been reused from other sources don’t fall under this license and can be recognized by a note in their caption: “Figure from …”.
+ `),'undefined'!=typeof e.publishedDate&&(t+=` +For attribution in academic contexts, please cite this work as
+${e.concatenatedAuthors}, "${e.title}", Distill, ${e.publishedYear}.+
BibTeX citation
+${m(e)}+ `),t}var An=Math.sqrt,En=Math.atan2,Dn=Math.sin,Mn=Math.cos,On=Math.PI,Un=Math.abs,In=Math.pow,Nn=Math.LN10,jn=Math.log,Rn=Math.max,qn=Math.ceil,Fn=Math.floor,Pn=Math.round,Hn=Math.min;const zn=['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'],Bn=['Jan.','Feb.','March','April','May','June','July','Aug.','Sept.','Oct.','Nov.','Dec.'],Wn=(e)=>10>e?'0'+e:e,Vn=function(e){const t=zn[e.getDay()].substring(0,3),n=Wn(e.getDate()),i=Bn[e.getMonth()].substring(0,3),a=e.getFullYear().toString(),d=e.getUTCHours().toString(),r=e.getUTCMinutes().toString(),o=e.getUTCSeconds().toString();return`${t}, ${n} ${i} ${a} ${d}:${r}:${o} Z`},$n=function(e){const t=Array.from(e).reduce((e,[t,n])=>Object.assign(e,{[t]:n}),{});return t},Jn=function(e){const t=new Map;for(var n in e)e.hasOwnProperty(n)&&t.set(n,e[n]);return t};class Qn{constructor(e){this.name=e.author,this.personalURL=e.authorURL,this.affiliation=e.affiliation,this.affiliationURL=e.affiliationURL,this.affiliations=e.affiliations||[]}get firstName(){const e=this.name.split(' ');return e.slice(0,e.length-1).join(' ')}get lastName(){const e=this.name.split(' ');return e[e.length-1]}}class Gn{constructor(){this.title='unnamed article',this.description='',this.authors=[],this.bibliography=new Map,this.bibliographyParsed=!1,this.citations=[],this.citationsCollected=!1,this.journal={},this.katex={},this.publishedDate=void 0}set url(e){this._url=e}get url(){if(this._url)return this._url;return this.distillPath&&this.journal.url?this.journal.url+'/'+this.distillPath:this.journal.url?this.journal.url:void 0}get githubUrl(){return this.githubPath?'https://github.com/'+this.githubPath:void 0}set previewURL(e){this._previewURL=e}get previewURL(){return this._previewURL?this._previewURL:this.url+'/thumbnail.jpg'}get publishedDateRFC(){return Vn(this.publishedDate)}get updatedDateRFC(){return Vn(this.updatedDate)}get publishedYear(){return this.publishedDate.getFullYear()}get publishedMonth(){return Bn[this.publishedDate.getMonth()]}get publishedDay(){return this.publishedDate.getDate()}get publishedMonthPadded(){return Wn(this.publishedDate.getMonth()+1)}get publishedDayPadded(){return Wn(this.publishedDate.getDate())}get publishedISODateOnly(){return this.publishedDate.toISOString().split('T')[0]}get volume(){const e=this.publishedYear-2015;if(1>e)throw new Error('Invalid publish date detected during computing volume');return e}get issue(){return this.publishedDate.getMonth()+1}get concatenatedAuthors(){if(2
tag. We found the following text: '+t);const n=document.createElement('span');n.innerHTML=e.nodeValue,e.parentNode.insertBefore(n,e),e.parentNode.removeChild(e)}}}}).observe(this,{childList:!0})}}var Ti='undefined'==typeof window?'undefined'==typeof global?'undefined'==typeof self?{}:self:global:window,_i=f(function(e,t){(function(e){function t(){this.months=['jan','feb','mar','apr','may','jun','jul','aug','sep','oct','nov','dec'],this.notKey=[',','{','}',' ','='],this.pos=0,this.input='',this.entries=[],this.currentEntry='',this.setInput=function(e){this.input=e},this.getEntries=function(){return this.entries},this.isWhitespace=function(e){return' '==e||'\r'==e||'\t'==e||'\n'==e},this.match=function(e,t){if((void 0==t||null==t)&&(t=!0),this.skipWhitespace(t),this.input.substring(this.pos,this.pos+e.length)==e)this.pos+=e.length;else throw'Token mismatch, expected '+e+', found '+this.input.substring(this.pos);this.skipWhitespace(t)},this.tryMatch=function(e,t){return(void 0==t||null==t)&&(t=!0),this.skipWhitespace(t),this.input.substring(this.pos,this.pos+e.length)==e},this.matchAt=function(){for(;this.input.length>this.pos&&'@'!=this.input[this.pos];)this.pos++;return!('@'!=this.input[this.pos])},this.skipWhitespace=function(e){for(;this.isWhitespace(this.input[this.pos]);)this.pos++;if('%'==this.input[this.pos]&&!0==e){for(;'\n'!=this.input[this.pos];)this.pos++;this.skipWhitespace(e)}},this.value_braces=function(){var e=0;this.match('{',!1);for(var t=this.pos,n=!1;;){if(!n)if('}'==this.input[this.pos]){if(0 =k&&(++x,i=k);if(d[x]instanceof n||d[T-1].greedy)continue;w=T-x,y=e.slice(i,k),v.index-=i}if(v){g&&(h=v[1].length);var S=v.index+h,v=v[0].slice(h),C=S+v.length,_=y.slice(0,S),L=y.slice(C),A=[x,w];_&&A.push(_);var E=new n(o,u?a.tokenize(v,u):v,b,v,f);A.push(E),L&&A.push(L),Array.prototype.splice.apply(d,A)}}}}}return d},hooks:{all:{},add:function(e,t){var n=a.hooks.all;n[e]=n[e]||[],n[e].push(t)},run:function(e,t){var n=a.hooks.all[e];if(n&&n.length)for(var d,r=0;d=n[r++];)d(t)}}},i=a.Token=function(e,t,n,i,a){this.type=e,this.content=t,this.alias=n,this.length=0|(i||'').length,this.greedy=!!a};if(i.stringify=function(e,t,n){if('string'==typeof e)return e;if('Array'===a.util.type(e))return e.map(function(n){return i.stringify(n,t,e)}).join('');var d={type:e.type,content:i.stringify(e.content,t,n),tag:'span',classes:['token',e.type],attributes:{},language:t,parent:n};if('comment'==d.type&&(d.attributes.spellcheck='true'),e.alias){var r='Array'===a.util.type(e.alias)?e.alias:[e.alias];Array.prototype.push.apply(d.classes,r)}a.hooks.run('wrap',d);var l=Object.keys(d.attributes).map(function(e){return e+'="'+(d.attributes[e]||'').replace(/"/g,'"')+'"'}).join(' ');return'<'+d.tag+' class="'+d.classes.join(' ')+'"'+(l?' '+l:'')+'>'+d.content+''+d.tag+'>'},!t.document)return t.addEventListener?(t.addEventListener('message',function(e){var n=JSON.parse(e.data),i=n.language,d=n.code,r=n.immediateClose;t.postMessage(a.highlight(d,a.languages[i],i)),r&&t.close()},!1),t.Prism):t.Prism;var d=document.currentScript||[].slice.call(document.getElementsByTagName('script')).pop();return d&&(a.filename=d.src,document.addEventListener&&!d.hasAttribute('data-manual')&&('loading'===document.readyState?document.addEventListener('DOMContentLoaded',a.highlightAll):window.requestAnimationFrame?window.requestAnimationFrame(a.highlightAll):window.setTimeout(a.highlightAll,16))),t.Prism}();e.exports&&(e.exports=n),'undefined'!=typeof Ti&&(Ti.Prism=n),n.languages.markup={comment://,prolog:/<\?[\w\W]+?\?>/,doctype://i,cdata://i,tag:{pattern:/<\/?(?!\d)[^\s>\/=$<]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\\1|\\?(?!\1)[\w\W])*\1|[^\s'">=]+))?)*\s*\/?>/i,inside:{tag:{pattern:/^<\/?[^\s>\/]+/i,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=(?:('|")[\w\W]*?(\1)|[^\s>]+)/i,inside:{punctuation:/[=>"']/}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:/?[\da-z]{1,8};/i},n.hooks.add('wrap',function(e){'entity'===e.type&&(e.attributes.title=e.content.replace(/&/,'&'))}),n.languages.xml=n.languages.markup,n.languages.html=n.languages.markup,n.languages.mathml=n.languages.markup,n.languages.svg=n.languages.markup,n.languages.css={comment:/\/\*[\w\W]*?\*\//,atrule:{pattern:/@[\w-]+?.*?(;|(?=\s*\{))/i,inside:{rule:/@[\w-]+/}},url:/url\((?:(["'])(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1|.*?)\)/i,selector:/[^\{\}\s][^\{\};]*?(?=\s*\{)/,string:{pattern:/("|')(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1/,greedy:!0},property:/(\b|\B)[\w-]+(?=\s*:)/i,important:/\B!important\b/i,function:/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:]/},n.languages.css.atrule.inside.rest=n.util.clone(n.languages.css),n.languages.markup&&(n.languages.insertBefore('markup','tag',{style:{pattern:/(
+
+
+ ${e.map(l).map((e)=>`
`)}}const Mi=`
+d-citation-list {
+ contain: layout style;
+}
+
+d-citation-list .references {
+ grid-column: text;
+}
+
+d-citation-list .references .title {
+ font-weight: 500;
+}
+`;class Oi extends HTMLElement{static get is(){return'd-citation-list'}connectedCallback(){this.hasAttribute('distill-prerendered')||(this.style.display='none')}set citations(e){x(this,e)}}var Ui=f(function(e){var t='undefined'==typeof window?'undefined'!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{}:window,n=function(){var e=/\blang(?:uage)?-(\w+)\b/i,n=0,a=t.Prism={util:{encode:function(e){return e instanceof i?new i(e.type,a.util.encode(e.content),e.alias):'Array'===a.util.type(e)?e.map(a.util.encode):e.replace(/&/g,'&').replace(/e.length)break tokenloop;if(!(y instanceof n)){c.lastIndex=0;var v=c.exec(y),w=1;if(!v&&f&&x!=d.length-1){if(c.lastIndex=i,v=c.exec(e),!v)break;for(var S=v.index+(g?v[1].length:0),C=v.index+v[0].length,T=x,k=i,p=d.length;T
+
+`);class Ni extends ei(Ii(HTMLElement)){renderContent(){if(this.languageName=this.getAttribute('language'),!this.languageName)return void console.warn('You need to provide a language attribute to your
Footnotes
+
+`,!1);class Fi extends qi(HTMLElement){connectedCallback(){super.connectedCallback(),this.list=this.root.querySelector('ol'),this.root.style.display='none'}set footnotes(e){if(this.list.innerHTML='',e.length){this.root.style.display='';for(const t of e){const e=document.createElement('li');e.id=t.id+'-listing',e.innerHTML=t.innerHTML;const n=document.createElement('a');n.setAttribute('class','footnote-backlink'),n.textContent='[\u21A9]',n.href='#'+t.id,e.appendChild(n),this.list.appendChild(e)}}else this.root.style.display='none'}}const Pi=ti('d-hover-box',`
+
+
+