Update main.py
Browse files
main.py
CHANGED
@@ -232,6 +232,69 @@ def htmlToDataframe(htmlTable):
|
|
232 |
dataFrame = pd.DataFrame(data = data, columns = list_header)
|
233 |
return dataFrame
|
234 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
235 |
def listToString(list):
|
236 |
return str(list)
|
237 |
|
@@ -281,7 +344,7 @@ def rename(orig_author: str):
|
|
281 |
async def on_action(action):
|
282 |
romeListArray = ast.literal_eval(action.value)
|
283 |
for j in range(0, len(romeListArray)):
|
284 |
-
table =
|
285 |
plot_demandeur = plotDemandeur(htmlToDataframe(table[0]), romeListArray[j])
|
286 |
if len(table[1]) > 0:
|
287 |
plot_salaire = plotSalaire(htmlToDataframe(table[1]))
|
@@ -524,70 +587,6 @@ async def document_chiffres_cles_emplois(url, codes):
|
|
524 |
allentreprise = ""
|
525 |
all = all + "\n\nChiffres-clés Métier : \n**" + allTitre + "**:\n◉ Demandeurs d'emploi et Offres d'emploi : " + allEmbauches.replace("Plus de données sur les Demandeurs d'emploi","").replace("Plus de données","") + ".\n◉ Salaires proposés dans les offres : " + allSalaires + ".\n◉ Salaires médians constatés : " + allSalairesMedian + ".\n◉ Difficultés de recrutement pour les entreprises : " + alldiff + ".\n◉ Origine des difficultés : " + alldiffOrigin + ".\n◉ Répartition des embauches par type de contrat : " + allTypeContrat + ".\n◉ Répartition des embauches par taille d'entreprise : " + allentreprise + "."
|
526 |
return all
|
527 |
-
|
528 |
-
@cl.step(type="tool")
|
529 |
-
async def datavisualisation_chiffres_cles_emplois(url):
|
530 |
-
response = requests.get(url)
|
531 |
-
soup = BeautifulSoup(response.text, "lxml")
|
532 |
-
|
533 |
-
alldemandeurs = ''
|
534 |
-
allsalaires = ''
|
535 |
-
alldifficultes = ''
|
536 |
-
allrepartitions = ''
|
537 |
-
allentreprises = ''
|
538 |
-
allembauches = soup.select('p.population_category')
|
539 |
-
allnumembauchesfirst = soup.select('p.population_main-num.data')
|
540 |
-
allnumembauches = removeTags(allnumembauchesfirst[0]).split('\xa0')
|
541 |
-
allnumembauches = ''.join(allnumembauches)
|
542 |
-
allnumoffres = removeTags(allnumembauchesfirst[1]).split('\xa0')
|
543 |
-
allnumoffres = ''.join(allnumoffres)
|
544 |
-
alldetailembauches = soup.select('p.hiring_text.ng-star-inserted')
|
545 |
-
allnumevolutionembauches = soup.select('p.main.ng-star-inserted')
|
546 |
-
alldetailevolutionembauches = soup.select('p.population_bubble-title')
|
547 |
-
alldemandeurs = "<table><tr><td>Indicateur</td><td>Valeur</td></tr><tr><td>" + removeTags(allembauches[0]) + " (" + removeTags(alldetailembauches[0]) + ");\nÉvolution demandeurs d'emploi (" + removeTags(alldetailevolutionembauches[0]) + ": " + removeTags(allnumevolutionembauches[0]) + ")</td><td>" + allnumembauches + "</td></tr>"
|
548 |
-
alldemandeurs += "<tr><td>" + removeTags(allembauches[1]) + " (" + removeTags(alldetailembauches[1]) + "); Évolution offres d'emploi (" + removeTags(alldetailevolutionembauches[1]) + ": " + removeTags(allnumevolutionembauches[1]) + ")</td><td>" + allnumoffres + "</td></tr>"
|
549 |
-
alldemandeurs += "</table>"
|
550 |
-
|
551 |
-
allFAP = soup.select('tr.sectorTable__line.ng-star-inserted')
|
552 |
-
allcategorie = soup.select('td.sectorTable__cell')
|
553 |
-
alltypesalaires = soup.select('th.sectorTable__cell')
|
554 |
-
allFAPsalaires = soup.select('p.sectorTable__cellValue')
|
555 |
-
if len(allFAPsalaires) >= 3:
|
556 |
-
allsalaires = "<table><tr><td>categorie</td><td>emploi</td><td>salaire</td></tr>"
|
557 |
-
allsalaires += "<tr><td>" + removeTags(alltypesalaires[1]) + "</td><td>" + removeTags(allcategorie[0]) + "</td><td>" + removeTags(allFAPsalaires[0]).replace('\xa0','').replace(' ','').replace('€','') + "</td></tr>"
|
558 |
-
allsalaires += "<tr><td>" + removeTags(alltypesalaires[2]) + "</td><td>" + removeTags(allcategorie[0]) + "</td><td>" + removeTags(allFAPsalaires[1]).replace('\xa0','').replace(' ','').replace('€','') + "</td></tr>"
|
559 |
-
allsalaires += "<tr><td>" + removeTags(alltypesalaires[3]) + "</td><td>" + removeTags(allcategorie[0]) + "</td><td>" + removeTags(allFAPsalaires[2]).replace('\xa0','').replace(' ','').replace('€','') + "</td></tr>"
|
560 |
-
if len(allFAP) >= 2 and len(allFAPsalaires) == 6:
|
561 |
-
allsalaires += "<tr><td>" + removeTags(alltypesalaires[1]) + "</td><td>" + removeTags(allcategorie[4]) + "</td><td>" + removeTags(allFAPsalaires[3]).replace('\xa0','').replace(' ','').replace('€','') + "</td></tr>"
|
562 |
-
allsalaires += "<tr><td>" + removeTags(alltypesalaires[2]) + "</td><td>" + removeTags(allcategorie[4]) + "</td><td>" + removeTags(allFAPsalaires[4]).replace('\xa0','').replace(' ','').replace('€','') + "</td></tr>"
|
563 |
-
allsalaires += "<tr><td>" + removeTags(alltypesalaires[3]) + "</td><td>" + removeTags(allcategorie[4]) + "</td><td>" + removeTags(allFAPsalaires[5]).replace('\xa0','').replace(' ','').replace('€','') + "</td></tr>"
|
564 |
-
allsalaires += "</table>"
|
565 |
-
|
566 |
-
alltypedifficultes = soup.select('.tabs-main-content_persp-col2-bar.ng-star-inserted')
|
567 |
-
alldifficulte = soup.select('p.horizontal-graph_title')
|
568 |
-
allpcdifficulte = soup.select('div.horizontal-graph_data')
|
569 |
-
alldifficultes = "<table><tr><td>Indicateur</td><td>Valeur</td></tr>"
|
570 |
-
for i in range(0,len(alltypedifficultes)):
|
571 |
-
alldifficultes += "<tr><td>" + removeTags(alldifficulte[i]) + "</td><td>" + removeTags(allpcdifficulte[i]).replace('Pour le territoire principal FRANCE pour les ' + removeTags(alldifficulte[i]),'').replace('%','') + "</td></tr>"
|
572 |
-
alldifficultes += "</table>"
|
573 |
-
|
574 |
-
alltyperepartitions = soup.select('div.hiring-contract_legende_item.ng-star-inserted')
|
575 |
-
allrepartition = soup.select('p.hiring-contract_legende_item_label')
|
576 |
-
allpcrepartition = soup.select('span.hiring-contract_legende_item-first')
|
577 |
-
allrepartitions = "<table><tr><td>Indicateur</td><td>Valeur</td></tr>"
|
578 |
-
for i in range(0,len(alltyperepartitions)):
|
579 |
-
allrepartitions += "<tr><td>" + removeTags(allrepartition[i]).replace('(' + removeTags(allpcrepartition[i]) + ')','') + "</td><td>" + removeTags(allpcrepartition[i]).replace('%','').replace(',','.') + "</td></tr>"
|
580 |
-
allrepartitions += "</table>"
|
581 |
-
|
582 |
-
allentrepriserepartitions = soup.select('div.horizontal-graph_pattern.sm-bubble_wrapper > span')
|
583 |
-
allentreprise = soup.select('span.sr-only')
|
584 |
-
allpcentreprise = soup.select('span.data.ng-star-inserted')
|
585 |
-
allentreprises = "<table><tr><td>Indicateur</td><td>Valeur</td></tr>"
|
586 |
-
for i in range(0,len(allentrepriserepartitions)):
|
587 |
-
allentreprises += "<tr><td>" + removeTags(allentrepriserepartitions[i])[0:-4] + "</td><td>" + removeTags(allentrepriserepartitions[i])[-4:].replace('%','').replace(',','.') + "</td></tr>"
|
588 |
-
allentreprises += "</table>"
|
589 |
-
|
590 |
-
return [alldemandeurs, allsalaires, alldifficultes, allrepartitions, allentreprises]
|
591 |
|
592 |
@cl.step(type="tool")
|
593 |
async def datavisualisation_statistiques_emplois(results_df):
|
|
|
232 |
dataFrame = pd.DataFrame(data = data, columns = list_header)
|
233 |
return dataFrame
|
234 |
|
235 |
+
def datavisualisation_chiffres_cles_emplois(url):
|
236 |
+
response = requests.get(url)
|
237 |
+
soup = BeautifulSoup(response.text, "lxml")
|
238 |
+
|
239 |
+
alldemandeurs = ''
|
240 |
+
allsalaires = ''
|
241 |
+
alldifficultes = ''
|
242 |
+
allrepartitions = ''
|
243 |
+
allentreprises = ''
|
244 |
+
allembauches = soup.select('p.population_category')
|
245 |
+
allnumembauchesfirst = soup.select('p.population_main-num.data')
|
246 |
+
allnumembauches = removeTags(allnumembauchesfirst[0]).split('\xa0')
|
247 |
+
allnumembauches = ''.join(allnumembauches)
|
248 |
+
allnumoffres = removeTags(allnumembauchesfirst[1]).split('\xa0')
|
249 |
+
allnumoffres = ''.join(allnumoffres)
|
250 |
+
alldetailembauches = soup.select('p.hiring_text.ng-star-inserted')
|
251 |
+
allnumevolutionembauches = soup.select('p.main.ng-star-inserted')
|
252 |
+
alldetailevolutionembauches = soup.select('p.population_bubble-title')
|
253 |
+
alldemandeurs = "<table><tr><td>Indicateur</td><td>Valeur</td></tr><tr><td>" + removeTags(allembauches[0]) + " (" + removeTags(alldetailembauches[0]) + ");\nÉvolution demandeurs d'emploi (" + removeTags(alldetailevolutionembauches[0]) + ": " + removeTags(allnumevolutionembauches[0]) + ")</td><td>" + allnumembauches + "</td></tr>"
|
254 |
+
alldemandeurs += "<tr><td>" + removeTags(allembauches[1]) + " (" + removeTags(alldetailembauches[1]) + "); Évolution offres d'emploi (" + removeTags(alldetailevolutionembauches[1]) + ": " + removeTags(allnumevolutionembauches[1]) + ")</td><td>" + allnumoffres + "</td></tr>"
|
255 |
+
alldemandeurs += "</table>"
|
256 |
+
|
257 |
+
allFAP = soup.select('tr.sectorTable__line.ng-star-inserted')
|
258 |
+
allcategorie = soup.select('td.sectorTable__cell')
|
259 |
+
alltypesalaires = soup.select('th.sectorTable__cell')
|
260 |
+
allFAPsalaires = soup.select('p.sectorTable__cellValue')
|
261 |
+
if len(allFAPsalaires) >= 3:
|
262 |
+
allsalaires = "<table><tr><td>categorie</td><td>emploi</td><td>salaire</td></tr>"
|
263 |
+
allsalaires += "<tr><td>" + removeTags(alltypesalaires[1]) + "</td><td>" + removeTags(allcategorie[0]) + "</td><td>" + removeTags(allFAPsalaires[0]).replace('\xa0','').replace(' ','').replace('€','') + "</td></tr>"
|
264 |
+
allsalaires += "<tr><td>" + removeTags(alltypesalaires[2]) + "</td><td>" + removeTags(allcategorie[0]) + "</td><td>" + removeTags(allFAPsalaires[1]).replace('\xa0','').replace(' ','').replace('€','') + "</td></tr>"
|
265 |
+
allsalaires += "<tr><td>" + removeTags(alltypesalaires[3]) + "</td><td>" + removeTags(allcategorie[0]) + "</td><td>" + removeTags(allFAPsalaires[2]).replace('\xa0','').replace(' ','').replace('€','') + "</td></tr>"
|
266 |
+
if len(allFAP) >= 2 and len(allFAPsalaires) == 6:
|
267 |
+
allsalaires += "<tr><td>" + removeTags(alltypesalaires[1]) + "</td><td>" + removeTags(allcategorie[4]) + "</td><td>" + removeTags(allFAPsalaires[3]).replace('\xa0','').replace(' ','').replace('€','') + "</td></tr>"
|
268 |
+
allsalaires += "<tr><td>" + removeTags(alltypesalaires[2]) + "</td><td>" + removeTags(allcategorie[4]) + "</td><td>" + removeTags(allFAPsalaires[4]).replace('\xa0','').replace(' ','').replace('€','') + "</td></tr>"
|
269 |
+
allsalaires += "<tr><td>" + removeTags(alltypesalaires[3]) + "</td><td>" + removeTags(allcategorie[4]) + "</td><td>" + removeTags(allFAPsalaires[5]).replace('\xa0','').replace(' ','').replace('€','') + "</td></tr>"
|
270 |
+
allsalaires += "</table>"
|
271 |
+
|
272 |
+
alltypedifficultes = soup.select('.tabs-main-content_persp-col2-bar.ng-star-inserted')
|
273 |
+
alldifficulte = soup.select('p.horizontal-graph_title')
|
274 |
+
allpcdifficulte = soup.select('div.horizontal-graph_data')
|
275 |
+
alldifficultes = "<table><tr><td>Indicateur</td><td>Valeur</td></tr>"
|
276 |
+
for i in range(0,len(alltypedifficultes)):
|
277 |
+
alldifficultes += "<tr><td>" + removeTags(alldifficulte[i]) + "</td><td>" + removeTags(allpcdifficulte[i]).replace('Pour le territoire principal FRANCE pour les ' + removeTags(alldifficulte[i]),'').replace('%','') + "</td></tr>"
|
278 |
+
alldifficultes += "</table>"
|
279 |
+
|
280 |
+
alltyperepartitions = soup.select('div.hiring-contract_legende_item.ng-star-inserted')
|
281 |
+
allrepartition = soup.select('p.hiring-contract_legende_item_label')
|
282 |
+
allpcrepartition = soup.select('span.hiring-contract_legende_item-first')
|
283 |
+
allrepartitions = "<table><tr><td>Indicateur</td><td>Valeur</td></tr>"
|
284 |
+
for i in range(0,len(alltyperepartitions)):
|
285 |
+
allrepartitions += "<tr><td>" + removeTags(allrepartition[i]).replace('(' + removeTags(allpcrepartition[i]) + ')','') + "</td><td>" + removeTags(allpcrepartition[i]).replace('%','').replace(',','.') + "</td></tr>"
|
286 |
+
allrepartitions += "</table>"
|
287 |
+
|
288 |
+
allentrepriserepartitions = soup.select('div.horizontal-graph_pattern.sm-bubble_wrapper > span')
|
289 |
+
allentreprise = soup.select('span.sr-only')
|
290 |
+
allpcentreprise = soup.select('span.data.ng-star-inserted')
|
291 |
+
allentreprises = "<table><tr><td>Indicateur</td><td>Valeur</td></tr>"
|
292 |
+
for i in range(0,len(allentrepriserepartitions)):
|
293 |
+
allentreprises += "<tr><td>" + removeTags(allentrepriserepartitions[i])[0:-4] + "</td><td>" + removeTags(allentrepriserepartitions[i])[-4:].replace('%','').replace(',','.') + "</td></tr>"
|
294 |
+
allentreprises += "</table>"
|
295 |
+
|
296 |
+
return [alldemandeurs, allsalaires, alldifficultes, allrepartitions, allentreprises]
|
297 |
+
|
298 |
def listToString(list):
|
299 |
return str(list)
|
300 |
|
|
|
344 |
async def on_action(action):
|
345 |
romeListArray = ast.literal_eval(action.value)
|
346 |
for j in range(0, len(romeListArray)):
|
347 |
+
table = datavisualisation_chiffres_cles_emplois("https://dataemploi.pole-emploi.fr/metier/chiffres-cles/NAT/FR/" + romeListArray[j])
|
348 |
plot_demandeur = plotDemandeur(htmlToDataframe(table[0]), romeListArray[j])
|
349 |
if len(table[1]) > 0:
|
350 |
plot_salaire = plotSalaire(htmlToDataframe(table[1]))
|
|
|
587 |
allentreprise = ""
|
588 |
all = all + "\n\nChiffres-clés Métier : \n**" + allTitre + "**:\n◉ Demandeurs d'emploi et Offres d'emploi : " + allEmbauches.replace("Plus de données sur les Demandeurs d'emploi","").replace("Plus de données","") + ".\n◉ Salaires proposés dans les offres : " + allSalaires + ".\n◉ Salaires médians constatés : " + allSalairesMedian + ".\n◉ Difficultés de recrutement pour les entreprises : " + alldiff + ".\n◉ Origine des difficultés : " + alldiffOrigin + ".\n◉ Répartition des embauches par type de contrat : " + allTypeContrat + ".\n◉ Répartition des embauches par taille d'entreprise : " + allentreprise + "."
|
589 |
return all
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
590 |
|
591 |
@cl.step(type="tool")
|
592 |
async def datavisualisation_statistiques_emplois(results_df):
|