Skip to content

dayanarc7/SBDM_stackoverflow-_survey_results

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

109 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Trabajo Final Sistemas de Bases de Datos Masivos

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:

Paquete_Stackoverflow_SQL

I. Limpieza de los datos

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:

alt text

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

II. Creación de la bodega de datos

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

II-a. Consultas realizadas sobre 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) ?

Query

Representación gráfica: alt text

PREGUNTA 2: ¿Cúal es el rango salarial según la experiencia de los desarrolladores que programan en Java?

Query

Representación gráfica: alt text

PREGUNTA 3: ¿Cúal es el rango salarial según la experiencia de los desarrolladores que programan en Python?

Query

Representación gráfica: alt text

PREGUNTA 4: ¿Cuál ha sido el comportamiento a través de los años del uso de los lenguajes en Colombia?

Query

Representación gráfica: alt text

PREGUNTA 5: ¿Cuál ha sido el comportamiento a través de los años del uso de los lenguajes en Estados Unidos?

Query

Representación gráfica: alt text

PREGUNTA 6: Comparación de usos de lenguajes Colombia VS Estados Unidos en 2016

Query

Representación gráfica: alt text

PREGUNTA 7: ¿Cuál ha sido el rango salarial más popular por ocupación en el año 2016?

Query

Representación gráfica: alt text

PREGUNTA 8: ¿Cuál es el rango más popular de ingresos Colombia Vs Estados Unidos?

Query

Representación gráfica: alt text

PREGUNTA 9: ¿Cuáles son los rangos de experiencia por ocupación?

Query

Representación gráfica: alt text

PREGUNTA 10: Rangos de experiencia por pais - Colombia Vs Estados Unidos

Query

Representación gráfica: alt text

PREGUNTA 11: Comportamiento histórico ocupaciones Colombia

Query

Representación gráfica: alt text

PREGUNTA 12: Comportamiento histórico ocupaciones Estados Unidos

Query

Representación gráfica: alt text

PREGUNTA 13: ¿Uso de lenguajes de programación en Suramerica en 2016?

Query

Representación gráfica: alt text

PREGUNTA 14: ¿Ocupaciones en Suramerica en 2016?

Query

Representación gráfica: alt text

PREGUNTA 15: Cuáles son los 20 países con el promedio más alto de rango de ingresos

Query

Representación gráfica: alt text

III. Diagramas Estrella, Cubo y Malinoski

De acuerdo a las dimensiones definidas anteriormente se construyeron distintos modelos dimensionales que representan gráficamente la bodega de datos, estos modelos son:

Modelo de cubo:

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:

alt text

Modelo estrella

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.

alt text

Modelo Malinowski

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.

alt text

IV. MapReduce bases de datos NoSQL

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:

Query
Archivo.JSON

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

V. Predicción encuesta 2018

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.

Notebook

VI. Adicion de 1 registro

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.

Rutina
DW_actualizada

VII. Modificación de datos operativos

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.

Rutina

About

Trabajo final SBDM - stackoverflow survey results

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors