Autores: MILADYS AGUILERA , MARVIN SIERRA, DAYANA ROMAN
Con el crecimiento del Big Data y el desarrollo de software, ha surgido la necesidad de analizar este importante sector que ha marcado un antes y un después en la era tecnológica. Para ello desde el 2011 se implementa la encuesta stackoverflow, con el fin de conocer tendencias, gustos y opiniones del mundo del desarrollo del software. Esta encuesta se ha convertido en un referente gracias a la acogida que ha tenido a nivel mundial desde su implementación, por ejemplo, para el año 2017 aproximadamente 64.000 desarrolladores respondieron la encuesta, una muestra bastante significativa para poder inferir interesantes conclusiones, como: rankings salariales, profesiones mejor pagadas, softwares con mayor uso, países con más desarrolladores, entre otras.
A continuación, se aplicarán algunos conocimientos para el manejo de bases de datos masivos con el fin de construir una bodega de datos, donde los datos históricos de la encuesta se tendrán limpios y estandarizados en 5 dimensiones que son de nuestro interés y que se encuentran como campos en común para los registros desde el año 2011 hasta 2017.
Dichas dimensiones son:
Año de realización de la encuesta
Ubicación de los encuestados
Lenguaje de programación que manejan
Experiencia
Salarios devengados
Ocupación
Una vez construida la base de datos se realizarán algunos modelos dimensionales, como el modelo de Estrella, Cubo y Malinowski, que nos permitirá entender el propósito de la bodega. Seguidamente, se aplicarán las funciones Map y Reduce que nos permitirán tener datos como llave, valor y que darán respuestas a preguntas que son útiles en el análisis de la Datawarehouse. También se hará una predicción para los siguientes 50.000 registros, con el fin de conocer posibles resultados de la encuesta para el año 2018 y por último se harán actualizaciones y modificaciones sobre la bodega, con el fin de aplicar algunas técnicas en el manejo de bases de datos no relacionales.
Para el desarrollo de este trabajo se utilizaron 7 conjuntos de datos masivos completamente libres y accesibles a través de BigQuery, que corresponden a la encuesta anual que Stackoverflow realiza desde el 2011 a sus usuarios para observar y analizar tendencias en la industria de la tecnología y el software.
Fh-bigquery.stackoverflow.survey_results_2011
Fh-bigquery.stackoverflow.survey_results_2012
Fh-bigquery.stackoverflow.survey_results_2013
Fh-bigquery.stackoverflow.survey_results_2014
Fh-bigquery.stackoverflow.survey_results_2015
Fh-bigquery.stackoverflow.survey_results_2016
Fh-bigquery.stackoverflow.survey_results_public_2017
La información completa de las tablas utilizadas y creadas para el desarrollo de este trabajo está disponible en:
Se realizó la limpieza año a año como aparece en los scripts y teniendo en cuenta la arquitectra inicial predefinida para la creación posterior de a bodega de datos:
Limpieza de datos 2011
Limpieza de datos 2012
Limpieza de datos 2013
Limpieza de datos 2014
Limpieza de datos 2015
Limpieza de datos 2016
Limpieza de datos 2017
Antes de realizar la creación de la bodega de datos se realizó la normalización de las dimensiones que quedaron definidas.
Normalización - Experiencia
Normalización - Ingresos
Normalización - Ubicación
Normalización - Tiempo
Creacion de la bodega de datos
A continuación, se presentan 15 preguntas resueltas a través de consultas sobre el Datawarehouse. Estas preguntas fueron planteadas con base en las 6 dimensiones que conforman la bodega y con base en los datos que fueron normalizados.
PREGUNTA 1: ¿Cual es la participación total en las encuestas por país (resultado - 5 primeros países) ?
PREGUNTA 2: ¿Cúal es el rango salarial según la experiencia de los desarrolladores que programan en Java?
PREGUNTA 3: ¿Cúal es el rango salarial según la experiencia de los desarrolladores que programan en Python?
PREGUNTA 4: ¿Cuál ha sido el comportamiento a través de los años del uso de los lenguajes en Colombia?
PREGUNTA 5: ¿Cuál ha sido el comportamiento a través de los años del uso de los lenguajes en Estados Unidos?
De acuerdo a las dimensiones definidas anteriormente se construyeron distintos modelos dimensionales que representan gráficamente la bodega de datos, estos modelos son:
En esta representación se debe definir claramente un hecho particular que será representado en las dimensiones del cubo. Para este caso el hecho es:
Número de programadores con mayor salario en los tres lenguajes más utilizados en los tres últimos años.
Es así, como se hace uso de la dimensión tiempo, representada para el hecho en los últimos 3 años, es decir, 2015 - 2016 y 2017.
La segunda dimensión de interés es el lenguaje de programación, para este caso se eligen los más populares, que son: Python (P), Java Script (JS) y SQL (S).
La última dimensión es el salario, en este caso se toman los tres últimos rangos que representan los salarios más altos, estos rangos son:
R1: 100.000 – 120.000 USD
R2: 120.000 – 140.000 USD
R3: > 140.000 USD
A continuación, se presenta el cubo con sus respectivas dimensiones:
En este modelo se ubica el hecho de interés y sus medidas en el centro. Cada una de las dimensiones con sus respectivas medidas se ubican alrededor del hecho, de tal manera que se identifique claramente que compone cada una de las dimensiones y el modo de conectar las relaciones con el hecho. Es decir, se establece una relación de muchos a muchos, muchos a 1 o 1 a muchos. La relación de muchos a muchos se presenta cuando el hecho puede tomar muchos valores de la dimensión y viceversa, por ejemplo, en este caso la dimensión lenguaje y el número de encuestados presenta este tipo de relación, ya que muchos encuestados pueden manejar muchos lenguajes y muchos lenguajes pueden ser manejados por muchos desarrolladores.
El modelo Malinowski es muy similar al modelo de estrella, sólo que acá se busca representar con mayor detalle una dimensión en especifico y no se asignan las medidas y relaciones entre las dimensiones y el hecho.
Desde la bodega de datos se hizo un filtro en donde sólo aparecieran los lenguajes de programación en una sola columna, se llevaron los datos desde la query (filtro) a una base de datos NoSQL, y se aplicó MapReduce para agrupar el número de programadores por lenguaje de programación. Se muestra a continuación la rutina:
var mape = function(){emit(this["Lenguaje"],1)}
var reduce = function(key, values){ return Array.sum(values)}
db.stackoverflow.mapReduce(mape, reduce, {out: {inline : 1}})
{
"results" : [
{ "_id" : null,
"value" : 207546
},
{
"_id" : "NULL",
"value" : 14311
},
{
"_id" : "c#",
"value" : 31457
},
{
"_id" : "c++",
"value" : 19498
},
{
"_id" : "java",
"value" : 34869
},
{
"_id" : "javascript",
"value" : 52411
},
{
"_id" : "python",
"value" : 22658 },
{
"_id" : "sql",
"value" : 32343
}
],
"timeMillis" : 2356,
"counts" : {
"input" : 415093,
"emit" : 415093,
"reduce" : 6700,
"output" : 8
},
"ok" : 1
Se generó un conjunto de datos nuevos a partir con al menos 50 mil registros y se predijo cuáles serían las respuestas de la nueva encuesta en el 2018. El análisis que se realizó se describe a continuación y se adjunta el algoritmo que se usó generar los registros manteniendo la línea de tendencia con base en las encuestas anteriores.
Se adicionó un registro a la encuesta de 2014, y se actualizó la bodega de datos y las consultas realizadas sobre la misma en adelante.
Se da cuenta además que inicialmente la encuesta de 2014 tenía inicialmente 7.645 registros y que termina con 7.646.
Se generó una rutina que actualizara el indicador del total de programadores que sabían un lenguaje en particular (Javascript) para Colombia en el año 2016 y modificara los demás datos y la bodega de manera coherente para corresponderse con el.

















