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