Maison développement back-end Tutoriel Python Web scraping et analyse de données en langues étrangères

Web scraping et analyse de données en langues étrangères

Dec 24, 2024 am 11:40 AM

Récemment, j'ai décidé que j'aimerais réaliser un projet rapide de web scraping et d'analyse de données. Parce que mon cerveau aime proposer de grandes idées qui prendraient beaucoup de temps, j'ai décidé de me mettre au défi de trouver quelque chose de simple qui pourrait être réalisé de manière viable en quelques heures.

Voici ce que j'ai trouvé :

Comme mon diplôme de premier cycle était à l'origine en langues étrangères (français et espagnol), j'ai pensé que ce serait amusant de récupérer sur le Web certaines données liées aux langues. Je voulais utiliser la bibliothèque BeautifulSoup, qui peut analyser du HTML statique mais n'est pas capable de gérer des pages Web dynamiques qui ont besoin d'événements onclick pour révéler l'ensemble de données (c'est-à-dire en cliquant sur la page de données suivante si la page est paginée).

J'ai opté pour cette page Wikipédia des langues les plus parlées.

Web scraping and analysing foreign languages data

Je voulais faire ce qui suit :

  • Obtenir le code HTML de la page et le sortir dans un fichier .txt
  • Utilisez Beautiful Soup pour analyser le fichier HTML et extraire les données du tableau
  • Écrivez le tableau dans un fichier .csv
  • Proposez 10 questions auxquelles je voulais répondre pour cet ensemble de données en utilisant l'analyse des données
  • Répondez à ces questions en utilisant des pandas et un carnet Jupyter

J'ai décidé de diviser le projet en ces étapes pour séparer les préoccupations, mais je voulais aussi éviter de faire plusieurs requêtes inutiles pour obtenir le code HTML de Wikipédia en réexécutant le script. Enregistrer le fichier HTML, puis travailler avec lui dans un script séparé signifie que vous n'avez pas besoin de demander à nouveau les données, car vous les avez déjà.

Lien du projet

Le lien vers mon dépôt github pour ce projet est : https://github.com/gabrielrowan/Foreign-Languages-Analysis

Obtenir le HTML

Tout d’abord, j’ai récupéré et affiché le code HTML. Après avoir travaillé avec C# et C, c'est toujours une nouveauté pour moi de voir à quel point le code Python est court et concis ?

url = 'https://en.wikipedia.org/wiki/List_of_languages_by_number_of_native_speakers'

response = requests.get(url)
html = response.text

with open("languages_html.txt", "w", encoding="utf-8") as file:
    file.write(html)

Copier après la connexion
Copier après la connexion

Analyser le HTML

Pour analyser le html avec Beautiful soup et sélectionner la table qui m'intéressait, j'ai fait :

with open("languages_html.txt", "r", encoding="utf-8") as file:
    soup = BeautifulSoup(file, 'html.parser')

# get table
top_languages_table = soup.select_one('.wikitable.sortable.static-row-numbers')


Copier après la connexion
Copier après la connexion

Ensuite, j'ai obtenu le texte d'en-tête du tableau pour obtenir les noms de colonnes de mon dataframe pandas :

# get column names
columns = top_languages_table.find_all("th")
column_titles = [column.text.strip() for column in columns]

Copier après la connexion
Copier après la connexion

Après cela, j'ai créé le dataframe, défini les noms des colonnes, récupéré chaque ligne du tableau et écrit chaque ligne dans le dataframe :

# get table rows
table_data = top_languages_table.find_all("tr")

# define dataframe
df = pd.DataFrame(columns=column_titles)

# get table data
for row in table_data[1:]:
    row_data = row.find_all('td')
    row_data_txt = [row.text.strip() for row in row_data]
    print(row_data_txt)
    df.loc[len(df)] = row_data_txt 


Copier après la connexion
Copier après la connexion

Remarque : sans utiliser strip(), il y avait n caractères dans le texte qui n'étaient pas nécessaires.

Enfin, j'ai écrit le dataframe dans un .csv.

Analyser les données

À l'avance, je me posais ces questions auxquelles je voulais répondre à partir des données :

  1. Quel est le nombre total de locuteurs natifs dans toutes les langues de l'ensemble de données ?
  2. Combien de types différents de familles linguistiques existe-t-il ?
  3. Quel est le nombre total de locuteurs natifs par famille linguistique ?
  4. Quelles sont les 3 familles de langues les plus courantes ?
  5. Créez un diagramme circulaire montrant les 3 familles de langues les plus courantes
  6. Quelle est la famille de langues - paire de branches la plus courante ?
  7. Quelles sont les langues sino-tibétaines dans le tableau ?
  8. Afficher un graphique à barres des locuteurs natifs de toutes les langues romanes et germaniques
  9. Quel pourcentage du total de locuteurs natifs est représenté par les 5 principales langues ?
  10. Quelle branche compte le plus de locuteurs natifs, et laquelle en compte le moins ?

Les résultats

Bien que je n'entrerai pas dans le code pour répondre à toutes ces questions, j'aborderai les 2 celles qui impliquaient des graphiques.

Afficher un graphique à barres des locuteurs natifs de toutes les langues romanes et germaniques

Tout d'abord, j'ai créé un dataframe qui n'incluait que les lignes où le nom de la branche était « Romance » ou « Germanic »

url = 'https://en.wikipedia.org/wiki/List_of_languages_by_number_of_native_speakers'

response = requests.get(url)
html = response.text

with open("languages_html.txt", "w", encoding="utf-8") as file:
    file.write(html)

Copier après la connexion
Copier après la connexion

Ensuite j'ai précisé l'axe x, l'axe y et la couleur des barres que je voulais pour le graphique :

with open("languages_html.txt", "r", encoding="utf-8") as file:
    soup = BeautifulSoup(file, 'html.parser')

# get table
top_languages_table = soup.select_one('.wikitable.sortable.static-row-numbers')


Copier après la connexion
Copier après la connexion

Cela a créé :

Web scraping and analysing foreign languages data

Créez un diagramme circulaire montrant les 3 familles de langues les plus courantes

Pour créer le diagramme circulaire, j'ai récupéré les 3 familles de langues les plus courantes et les ai placées dans un dataframe.

Ce groupe de codes obtient la somme totale des locuteurs natifs par famille de langues, les trie par ordre décroissant et extrait les 3 premières entrées.

# get column names
columns = top_languages_table.find_all("th")
column_titles = [column.text.strip() for column in columns]

Copier après la connexion
Copier après la connexion

Ensuite, je place les données dans un graphique à secteurs, en spécifiant l'axe Y des « locuteurs natifs » et une légende, qui crée des étiquettes à code couleur pour chaque famille de langues affichée dans le graphique.

# get table rows
table_data = top_languages_table.find_all("tr")

# define dataframe
df = pd.DataFrame(columns=column_titles)

# get table data
for row in table_data[1:]:
    row_data = row.find_all('td')
    row_data_txt = [row.text.strip() for row in row_data]
    print(row_data_txt)
    df.loc[len(df)] = row_data_txt 


Copier après la connexion
Copier après la connexion

Web scraping and analysing foreign languages data

Le code et les réponses pour le reste des questions peuvent être trouvés ici. J'ai utilisé le markdown dans le cahier pour écrire les questions et leurs réponses.

La prochaine fois:

Pour ma prochaine itération d'un projet de web scraping et d'analyse de données, j'aimerais compliquer les choses avec :

  • Web scraping d'une page dynamique où plus de données sont révélées en cliquant/défilement
  • Analyser un ensemble de données beaucoup plus volumineux, qui nécessite potentiellement un travail de nettoyage des données avant l'analyse

Web scraping and analysing foreign languages data

Réflexions finales

Même si cela a été rapide, j'ai aimé réaliser ce projet. Cela m'a rappelé à quel point des projets courts et gérables peuvent être utiles pour attirer les représentants du cabinet ? De plus, extraire des données d'Internet et créer des graphiques à partir de celles-ci, même avec un petit ensemble de données, est-il amusant ?

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment résoudre le problème des autorisations rencontré lors de la visualisation de la version Python dans le terminal Linux? Comment résoudre le problème des autorisations rencontré lors de la visualisation de la version Python dans le terminal Linux? Apr 01, 2025 pm 05:09 PM

Solution aux problèmes d'autorisation Lors de la visualisation de la version Python dans Linux Terminal Lorsque vous essayez d'afficher la version Python dans Linux Terminal, entrez Python ...

Comment éviter d'être détecté par le navigateur lors de l'utilisation de Fiddler partout pour la lecture de l'homme au milieu? Comment éviter d'être détecté par le navigateur lors de l'utilisation de Fiddler partout pour la lecture de l'homme au milieu? Apr 02, 2025 am 07:15 AM

Comment éviter d'être détecté lors de l'utilisation de FiddlereVerywhere pour les lectures d'homme dans le milieu lorsque vous utilisez FiddlereVerywhere ...

Comment copier efficacement la colonne entière d'une dataframe dans une autre dataframe avec différentes structures dans Python? Comment copier efficacement la colonne entière d'une dataframe dans une autre dataframe avec différentes structures dans Python? Apr 01, 2025 pm 11:15 PM

Lorsque vous utilisez la bibliothèque Pandas de Python, comment copier des colonnes entières entre deux frames de données avec différentes structures est un problème courant. Supposons que nous ayons deux dats ...

Comment Uvicorn écoute-t-il en permanence les demandes HTTP sans servir_forever ()? Comment Uvicorn écoute-t-il en permanence les demandes HTTP sans servir_forever ()? Apr 01, 2025 pm 10:51 PM

Comment Uvicorn écoute-t-il en permanence les demandes HTTP? Uvicorn est un serveur Web léger basé sur ASGI. L'une de ses fonctions principales est d'écouter les demandes HTTP et de procéder ...

Comment enseigner les bases de la programmation novice en informatique dans le projet et les méthodes axées sur les problèmes dans les 10 heures? Comment enseigner les bases de la programmation novice en informatique dans le projet et les méthodes axées sur les problèmes dans les 10 heures? Apr 02, 2025 am 07:18 AM

Comment enseigner les bases de la programmation novice en informatique dans les 10 heures? Si vous n'avez que 10 heures pour enseigner à l'informatique novice des connaissances en programmation, que choisissez-vous d'enseigner ...

Comment obtenir des données d'information en contournant le mécanisme anti-frawler d'Investing.com? Comment obtenir des données d'information en contournant le mécanisme anti-frawler d'Investing.com? Apr 02, 2025 am 07:03 AM

Comprendre la stratégie anti-rampe d'investissement.com, Beaucoup de gens essaient souvent de ramper les données d'actualités sur Investing.com (https://cn.investing.com/news/latest-news) ...

See all articles