Proyecto final del bootcamp de ironhack en Data Analytics
Sistema de recomendación para recruiters obteniendo datos de webs como codewars y github.
- Haciendo web scrapping de la página de los top 500 en Codewars obtenemos sus usuarios y los incluimos en la lista de usuarios de codewars.
- Haciendo web scrapping de cada usuario de la lista obtenemos sus contactos sociales (following, followers, allies)
- Añadimos estos nuevos contactos a muestra lista de usuarios de codewars.
- Repetimos paso 2 y 3 hasta obtener un número de registros de +5000.
- Alcanzamos los 11528 usuarios en solo 2 iteraciones: 500, 3939, 11528.
Iter users timeit(ms) 1 500 3847.40 2 3939 7642800.01 3 11520 11027477.05
Sobre cada uno de los usuarios de la lista hacemos una petición a la API (https://dev.codewars.com/):
$curl "https://www.codewars.com/api/v1/users/some_user"
Y obtenemos un json de la forma:
{
"username": "some_user",
"name": "Some Person",
"honor": 544,
"clan": "some clan",
"leaderboardPosition": 134,
"skills": [
"ruby",
"c#",
".net",
"javascript",
"coffeescript",
"nodejs",
"rails"
],
"ranks": {
"overall": {
"rank": -3,
"name": "3 kyu",
"color": "blue",
"score": 2116
},
"languages": {
"javascript": {
"rank": -3,
"name": "3 kyu",
"color": "blue",
"score": 1819
},
"ruby": {
"rank": -4,
"name": "4 kyu",
"color": "blue",
"score": 1005
},
"coffeescript": {
"rank": -4,
"name": "4 kyu",
"color": "blue",
"score": 870
}
}
},
"codeChallenges": {
"totalAuthored": 3,
"totalCompleted": 230
}
}
De estos datos obtenemos sus skills y sus niveles en cada lenguaje.
Sobre cada uno de los usuarios de la lista hacemos un web scrapping y obtenemos:
- Member Since:Oct 2018
- Enlace de Github (si lo tiene)
- Enlace de LinkedIn (si lo tiene)
NOTA: Se puede obtener para:
- GitHub
- Tweeter
- StackOverflow
Hemos creado una función get_row cuya función es generar un diccionario a partir de un nombre de usuario haciendo uso de las funciones de las fases 2.1 y 2.2.
def get_row(user):
'''
Crea un diccionario con los datos recopilados que se puede
añadir como fila en nuestro dataframe de pandas
'''
user_json = get_user_api(user)
res = get_all_stats(user)
res.update(get_scores(user_json))
return res
Luego iteraremos por todo nuestro poll de usuarios obtenidos en la Fase 1 y crearemos un dataframe que guardaremos en un fichero CSV.
Tiempos:
Iter users timeit(ms) social timeit(ms) rows 1 500 3847.40 2 3939 7642800.01 9796075.92 3 11520 11027477.05 28818747.81
Guardamos nuestro DataFrame en un archivo en la carpeta output:
df_users.to_csv('../output/df-codewars-2929x221.csv')
df = pd.read_csv('../output/df-codewars-2929x221.csv')
En esta fase limpiamos columnas innecesarias. Nos encontramos con más de 200 de las que queremos guardar los scores en cada lenguaje y unos pocos datos de identificación de usuarios. Columnas finales:
- Las correspondientes a los lenguajes
- allies, clan, comments, followers, following, highest trained, honor, kumite, last seen, leaderboard position, member since, total completed kata, total languages trained, username, github, skills, linkedin,
Vamos limpiando columna a columna
df.to_csv('../output/dataframe-limpio3939x56.csv')
En esta fase analizaremos los datos con las herramientas conocidas y provaremos diferentes sistemas de ML para clasificar.