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. ..
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.
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
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
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
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
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
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)
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
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
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
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
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
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