[PYTHON] [Traitement du langage 100 coups 2020] Chapitre 2: Commandes UNIX

introduction

Version 2020 de 100 coups de traitement du langage, qui est célèbre comme une collection de problèmes de traitement du langage naturel, a été publié. Cet article résume les résultats de la résolution du Chapitre 2: Commandes UNIX des chapitres 1 à 10 ci-dessous. ..

Préparation préalable

Nous utilisons Google Colaboratory pour obtenir des réponses. Pour plus d'informations sur la configuration et l'utilisation de Google Colaboratory, consultez cet article. Le notebook contenant les résultats de l'exécution des réponses suivantes est disponible sur github.

Chapitre 2: Commandes UNIX

popular-names.txt est un fichier qui stocke le «nom», le «sexe», le «nombre de personnes» et «l'année» d'un bébé né aux États-Unis dans un format délimité par des tabulations. Créez un programme qui effectue le traitement suivant et exécutez popular-names.txt en tant que fichier d'entrée. De plus, exécutez le même processus avec une commande UNIX et vérifiez le résultat de l'exécution du programme.

Tout d'abord, téléchargez les données spécifiées. Si vous exécutez la commande suivante sur la cellule de Google Colaboratory, le fichier texte cible sera téléchargé dans le répertoire actuel.

!wget https://nlp100.github.io/data/popular-names.txt

[Wget] commande-Télécharger le fichier en spécifiant l'URL

10. Compter le nombre de lignes

Comptez le nombre de lignes. Utilisez la commande wc pour confirmation.

Cette fois, nous traiterons chaque question après l'avoir lue comme une trame de données pandas. De plus, nous vérifions également les résultats avec des commandes selon les instructions de l'énoncé du problème.

import pandas as pd

df = pd.read_table('./popular-names.txt', header=None, sep='\t', names=['name', 'sex', 'number', 'year'])
print(len(df))

production


2780
#Vérification
!wc -l ./popular-names.txt

production


2780 ./popular-names.txt

Lire le fichier csv / tsv avec pandas Obtenez le nombre de lignes, de colonnes et d'éléments totaux (taille) avec les pandas [Commande [Cat] - Vérifiez facilement le contenu du fichier de paramètres] (https://www.atmarkit.co.jp/ait/articles/1602/25/news034.html) [Wc] commande-compter le nombre de caractères et de lignes dans un fichier texte

11. Remplacez les onglets par des espaces

Remplacez chaque caractère de tabulation par un caractère d'espace. Utilisez la commande sed, la commande tr ou la commande expand pour confirmation.

Puisque cette question semble supposer le remplacement de l'onglet qui est le délimiteur des données d'origine, elle n'est pas exécutée dans la trame de données qui a déjà été lue, et seule la confirmation par la commande est effectuée.

#Vérification
!sed -e 's/\t/ /g' ./popular-names.txt | head -n 5

production


Mary F 7065 1880
Anna F 2604 1880
Emma F 2003 1880
Elizabeth F 1939 1880
Minnie F 1746 1880

Commande [Sed](partie de base 4) - remplace la chaîne de caractères / affiche la ligne remplacée

12. Enregistrez la première colonne dans col1.txt et la deuxième colonne dans col2.txt

Enregistrez la colonne extraite de chaque ligne sous col1.txt et la colonne extraite 2 sous col2.txt. Utilisez la commande cut pour confirmation.

col1 = df['name']
col1.to_csv('./col1.txt', index=False)
print(col1.head())

production


0         Mary
1         Anna
2         Emma
3    Elizabeth
4       Minnie
Name: name, dtype: object
#Vérification
!cut -f 1 ./popular-names.txt > ./col1_chk.txt
!cat ./col1_chk.txt | head -n 5

production


Mary
Anna
Emma
Elizabeth
Minnie
col2 = df['sex']
col2.to_csv('./col2.txt', index=False)

production


0    F
1    F
2    F
3    F
4    F
Name: sex, dtype: object
#Vérification
!cut -f 2 ./popular-names.txt > ./col2_chk.txt
!cat ./col2_chk.txt | head -n 5

production


F
F
F
F
F

Sélectionnez et obtenez des lignes / colonnes par référence d'index pandas Exporter le fichier csv avec pandas [Cut] command-cut out from a line in fixed length or field units Enregistrer le résultat de l'exécution de la commande / la sortie standard dans un fichier

13. Fusionnez col1.txt et col2.txt

Combinez col1.txt et col2.txt créés dans> 12 pour créer un fichier texte dans lequel les première et deuxième colonnes du fichier d'origine sont séparées par des tabulations. Utilisez la commande coller pour confirmation.

col1 = pd.read_table('./col1.txt')
col2 = pd.read_table('./col2.txt')
merged_1_2 = pd.concat([col1, col2], axis=1)
merged_1_2.to_csv('./merged_1_2.txt', sep='\t', index=False)
print(merged_1_2.head())

production


        name sex
0       Mary   F
1       Anna   F
2       Emma   F
3  Elizabeth   F
4     Minnie   F
#Vérification
!paste ./col1_chk.txt ./col2_chk.txt | head -n 5

production


Mary	F
Anna	F
Emma	F
Elizabeth	F
Minnie	F

Concaténer pandas.DataFrame, Série [Coller] concaténer plusieurs fichiers ligne par ligne

14. Sortie de N lignes depuis le début

Recevoir le nombre naturel N au moyen d'un argument de ligne de commande et n'afficher que les N premières lignes de l'entrée. Utilisez la commande head pour confirmation.

def output_head(N):
  print(df.head(N))

output_head(5)

production


        name sex  number  year
0       Mary   F    7065  1880
1       Anna   F    2604  1880
2       Emma   F    2003  1880
3  Elizabeth   F    1939  1880
4     Minnie   F    1746  1880
#Vérification
!head -n 5 ./popular-names.txt

production


Mary	F	7065	1880
Anna	F	2604	1880
Emma	F	2003	1880
Elizabeth	F	1939	1880
Minnie	F	1746	1880

Définir et appeler des fonctions en Python Renvoie les première et dernière lignes de pandas.DataFrame, Series [[Head] command / [tail] command-Afficher uniquement le début / la fin d'un long message ou d'un fichier texte](https://www.atmarkit.co.jp/ait/articles/1603/07/news023. html)

15. Sortez les N dernières lignes

Recevoir le nombre naturel N au moyen d'un argument de ligne de commande et n'afficher que les N dernières lignes de l'entrée. Utilisez la commande tail pour confirmation.

def output_tail(N):
  print(df.tail(N))

output_tail(5)

production


          name sex  number  year
2775  Benjamin   M   13381  2018
2776    Elijah   M   12886  2018
2777     Lucas   M   12585  2018
2778     Mason   M   12435  2018
2779     Logan   M   12352  2018
#Vérification
!tail -n 5 ./popular-names.txt

production


Benjamin	M	13381	2018
Elijah	M	12886	2018
Lucas	M	12585	2018
Mason	M	12435	2018
Logan	M	12352	2018

16. Divisez le fichier en N

Recevez le nombre naturel N au moyen d'arguments de ligne de commande et divisez le fichier d'entrée en N ligne par ligne. Réalisez le même traitement avec la commande de fractionnement.

Je pense qu'il y a plusieurs façons de faire cela, mais ici nous ajoutons un drapeau pour diviser le fichier en N en appliquant qcut, qui calcule le point de division N, au numéro de série de l'enregistrement.

def split_file(N):
  tmp = df.reset_index(drop=False)
  df_cut = pd.qcut(tmp.index, N, labels=[i for i in range(N)])
  df_cut = pd.concat([df, pd.Series(df_cut, name='sp')], axis=1)

  return df_cut

df_cut = split_file(10)
print(df_cut['sp'].value_counts())

production


9    278
8    278
7    278
6    278
5    278
4    278
3    278
2    278
1    278
0    278
Name: sp, dtype: int64
print(df_cut.head())

production


        name sex  number  year sp
0       Mary   F    7065  1880  0
1       Anna   F    2604  1880  0
2       Emma   F    2003  1880  0
3  Elizabeth   F    1939  1880  0
4     Minnie   F    1746  1880  0
#Diviser par commande
!split -l 200 -d ./popular-names.txt sp

Réindexer pandas.DataFrame, Series Processus de binning avec fonctions cut et qcut des pandas (binning) Comptez le nombre et la fréquence (nombre d'occurrences) d'éléments uniques dans les pandas [Split] command-split files

17. Différence dans la chaîne de caractères dans la première colonne

Recherchez le type de chaîne de caractères dans la première colonne (un ensemble de chaînes de caractères différentes). Utilisez les commandes cut, sort et uniq pour confirmation.

print(len(df.drop_duplicates(subset='name')))

production


136
#Vérification
!cut -f 1 ./popular-names.txt | sort | uniq | wc -l

production


136

Extraire / supprimer les lignes dupliquées de pandas.DataFrame, Series [Trier] commande-trie les fichiers texte ligne par ligne [Uniq] commande-supprimer les lignes en double

18. Triez chaque ligne dans l'ordre décroissant des nombres dans la troisième colonne

Disposez chaque ligne dans l'ordre inverse des nombres de la troisième colonne (Remarque: réorganisez le contenu de chaque ligne sans les changer) Utilisez la commande sort pour confirmation (ce problème ne doit pas nécessairement correspondre au résultat de l'exécution de la commande).

df.sort_values(by='number', ascending=False, inplace=True)
print(df.head())

production


         name sex  number  year
1340    Linda   F   99689  1947
1360    Linda   F   96211  1948
1350    James   M   94757  1947
1550  Michael   M   92704  1957
1351   Robert   M   91640  1947
#Vérification
!cat ./popular-names.txt | sort -rnk 3 | head -n 5

production


Linda	F	99689	1947
Linda	F	96211	1948
James	M	94757	1947
Michael	M	92704	1957
Robert	M	91640	1947

Trier pandas.DataFrame, Série

19. Recherchez la fréquence d'apparition de la chaîne de caractères dans la première colonne de chaque ligne et organisez-les par ordre décroissant de fréquence d'apparition.

Trouvez la fréquence d'apparition de la première colonne de chaque ligne et affichez-les par ordre décroissant. Utilisez les commandes cut, uniq et sort pour confirmation.

print(df['name'].value_counts())

production


James      118
William    111
Robert     108
John       108
Mary        92
          ... 
Crystal      1
Rachel       1
Scott        1
Lucas        1
Carolyn      1
Name: name, Length: 136, dtype: int64
#Vérification
!cut -f 1 ./popular-names.txt | sort | uniq -c | sort -rn

production


    118 James
    111 William
    108 Robert
    108 John
     92 Mary

en conclusion

Traitement du langage 100 coups sont conçus pour que vous puissiez apprendre non seulement le traitement du langage naturel lui-même, mais également le traitement des données de base et l'apprentissage automatique général. Même ceux qui étudient l'apprentissage automatique dans des cours en ligne pourront pratiquer de très bons résultats, alors essayez-le.

Recommended Posts

[Traitement du langage 100 coups 2020] Chapitre 2: Commandes UNIX
100 coups de traitement du langage ~ Chapitre 1
100 Commandes de traitement du langage Knock UNIX apprises au chapitre 2
100 traitements linguistiques frappent 03 ~ 05
100 coups de traitement linguistique (2020): 40
100 coups de traitement linguistique (2020): 32
100 coups de traitement linguistique (2020): 47
100 traitements du langage naturel frappent le chapitre 4 Commentaire
[Traitement du langage 100 coups 2020] Chapitre 6: Machine learning
100 coups de traitement linguistique (2020): 22
100 coups de traitement linguistique (2020): 26
100 coups de traitement linguistique (2020): 34
100 coups de traitement du langage 2020: Chapitre 4 (analyse morphologique)
[Traitement du langage 100 coups 2020] Chapitre 5: Analyse des dépendances
100 coups de traitement linguistique (2020): 42
100 coups de traitement linguistique (2020): 29
100 coups de traitement linguistique (2020): 49
Le traitement de 100 langues frappe 06 ~ 09
100 coups de traitement linguistique (2020): 43
100 coups de traitement linguistique (2020): 24
[Traitement du langage 100 coups 2020] Chapitre 1: Mouvement préparatoire
100 coups de traitement linguistique (2020): 45
100 coups de traitement linguistique (2020): 10-19
[Traitement du langage 100 coups 2020] Chapitre 7: Vecteur Word
100 coups de traitement linguistique (2020): 30
100 coups de traitement linguistique (2020): 00-09
100 coups de traitement linguistique (2020): 31
[Traitement du langage 100 coups 2020] Chapitre 8: Réseau neuronal
100 coups de traitement linguistique (2020): 48
100 coups de traitement linguistique (2020): 44
100 coups de traitement linguistique (2020): 41
100 coups de traitement linguistique (2020): 37
[Traitement du langage 100 coups 2020] Chapitre 9: RNN, CNN
100 coups de traitement linguistique (2020): 25
100 coups de traitement linguistique (2020): 23
100 coups de traitement linguistique (2020): 33
100 coups de traitement linguistique (2020): 20
100 coups de traitement linguistique (2020): 27
[Traitement du langage 100 coups 2020] Chapitre 4: Analyse morphologique
100 coups de traitement linguistique (2020): 46
100 coups de traitement linguistique (2020): 21
100 coups de traitement linguistique (2020): 36
Traitement du langage 100 coups Chapitre 4: Analyse morphologique 31. Verbes
100 coups de traitement du langage amateur: 41
100 coups de traitement du langage amateur: 56
100 coups de traitement du langage amateur: 24
100 coups de traitement du langage amateur: 50
100 coups de traitement du langage amateur: 59
100 coups de traitement du langage amateur: 70
100 coups de traitement du langage amateur: 62
100 Language Processing Knock 2020 Chapitre 1
100 coups de traitement du langage amateur: 92
100 coups de langue amateur: 06
100 coups de traitement du langage amateur: 81
100 coups de traitement du langage amateur: 46
100 coups de traitement du langage amateur: 88
100 coups de traitement du langage amateur: 89
100 coups de traitement du langage amateur: 43
100 coups de traitement du langage amateur: 55
100 coups de traitement du langage amateur: 94
100 coups de traitement du langage amateur: 54