datacipen commited on
Commit
037366b
·
verified ·
1 Parent(s): 52c675e

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +64 -65
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 = await datavisualisation_chiffres_cles_emplois("https://dataemploi.pole-emploi.fr/metier/chiffres-cles/NAT/FR/" + romeListArray[j])
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):