def create1(link): '''Adds tf-idf for every term and document''' append_list = [] append_list2 = [] bulk_update_list = [] counter = 0 for document in link.find(): term = document['token'] for name in document: if 'posting' in name: n = name + ".tf-idf" file = 37497 df = mongo.get_df(link, term) tf = mongo.get_tf(link, term, name) tf_idf = mongo.get_tf_idf(file, tf, df) append_list = {"token": term} append_list2 = {"$set": {n: str(tf_idf)}} bulk_update_list.append(append_list) bulk_update_list.append(append_list2) counter += 1 if (counter % 10 == 0): link.bulk_write([ UpdateOne(bulk_update_list[0], bulk_update_list[1], True), UpdateOne(bulk_update_list[2], bulk_update_list[3], True), UpdateOne(bulk_update_list[4], bulk_update_list[5], True), UpdateOne(bulk_update_list[6], bulk_update_list[7], True), UpdateOne(bulk_update_list[8], bulk_update_list[9], True), UpdateOne(bulk_update_list[10], bulk_update_list[11], True), UpdateOne(bulk_update_list[12], bulk_update_list[13], True), UpdateOne(bulk_update_list[14], bulk_update_list[15], True), UpdateOne(bulk_update_list[16], bulk_update_list[17], True), UpdateOne(bulk_update_list[18], bulk_update_list[19], True) ]) bulk_update_list = [] print('.') print("################### Finished tf-idf #################")
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Tue Apr 9 10:12:53 2019 @author: zanea """ import mongo import preProcessing import re mongo = mongo.Mongo() df = mongo.get_df() def process_location(location): """ Extrait le code postal (pour l'IDF) ou la ville (pour les autres villes), puis le classe dans la catégorie 'Bassin_emploi' correspondante. """ import villes_csv location = location.lower() # Extraction de la ville et du le code postal localisation = re.findall(r'(.*) \(?', location)[0] cp = int(re.findall(r'.* \(([0-9]*).*', location)[0]) bassin_emploi = villes_csv.get_circo(cp) return bassin_emploi, localisation
def run_models(self): import mongo # Importation de la base de données en dataframe mongo = mongo.Mongo() df = mongo.get_df() cols = ['Bassin_emploi', 'Compagny', 'Contrat', 'Date', 'Date_scrap', 'Location', 'Poste', 'Resume', 'Salary', '_id','Forest','RBF'] df = pd.DataFrame(df,columns=cols) # Sélection des données qui comportent un salaire data = df[['Bassin_emploi', 'Contrat', 'Poste', 'Salary']][df['Salary'] != ''] # Encodage des données en numérique data = pd.get_dummies(data=data, columns={'Poste', 'Bassin_emploi', 'Contrat'}, drop_first=True) # Séparation des données indépendantes/target x = data.iloc[:, 1:] y = data['Salary'].astype('int64') x_train, x_test, y_train, y_test = train_test_split(x, y) # Implantation du Kernel RBF rbf = SVC() parameters = {'kernel': ['rbf'], 'gamma': [1e-3, 1e-4], 'C': [1, 10, 100, 1000], 'shrinking' : [True, False]} clf_rbf = GridSearchCV(rbf, parameters, cv=5) clf_rbf.fit(x_train, y_train) clf_rbf.best_params_ y_pred_rbf = clf_rbf.predict(x_test) # # Comparaison données test/entraînement > seulement pour les tests # plt.scatter(range(len(y_test)), y_test, color = 'blue') # plt.scatter(range(len(y_pred_rbf)), y_pred_rbf, color = 'red') # plt.legend(('Training set', 'Test set')) # plt.title('Comparaison des résultats avec le modèle Kernel RBF') # Implantation du Random Forest rf = RandomForestClassifier() parameters = grid_param = {'n_estimators': [100, 300, 500, 800, 1000], 'criterion': ['gini', 'entropy'], 'bootstrap': [True, False]} clf_rf = GridSearchCV(rf, parameters, cv=5) clf_rf.fit(x_train, y_train) clf_rf.best_params_ y_pred_rf = clf_rf.predict(x_test) # # Score du modèle # accuracy_score(y_test, y_pred_rf) # f1_score(y_test, y_pred_rf, average='micro') # all_accuracies = cross_val_score(estimator=clf_rf, X=x_train, y=y_train, cv=5) # # Comparaison données test/entraînement > seulement pour les tests # plt.scatter(range(len(y_test)), y_test, color = 'blue') # plt.scatter(range(len(y_pred_rf)), y_pred_rf, color = 'red') # plt.legend(('Training set', 'Test set')) # plt.title('Comparaison des résultats avec le modèle Random Forest') # Prédiction : ajout dans la DB Mongo data_to_pred = df[['Bassin_emploi', 'Contrat', 'Poste', '_id']][df['Salary'] == ''] data_to_pred = pd.get_dummies(data=data_to_pred, columns={'Poste', 'Bassin_emploi', 'Contrat'}, drop_first=True) data_to_pred['Salaires_RBF'] = clf_rbf.predict(data_to_pred.iloc[:, 1:]) data_to_pred['Salaires_Random_Forest'] = clf_rf.predict(data_to_pred.iloc[:, 1:-1]) final_data = data_to_pred[['_id', 'Salaires_RBF', 'Salaires_Random_Forest']] indexes = final_data.index for i in indexes: forest = final_data.loc[i,'Salaires_Random_Forest'] rbf = final_data.loc[i,'Salaires_RBF'] df.loc[i,'Forest'] = forest df.loc[i,'RBF'] = rbf if mongo.final_df(df): print('DB updated') return True