Die Version 2020 von 100 Klopfen der Sprachverarbeitung, die als Sammlung von Problemen der Verarbeitung natürlicher Sprache bekannt ist, wurde veröffentlicht. Dieser Artikel fasst die Ergebnisse der Lösung von Kapitel 2: UNIX-Befehle aus den folgenden Kapiteln 1 bis 10 zusammen. ..
Wir verwenden Google Colaboratory für Antworten. Ausführliche Informationen zum Einrichten und Verwenden von Google Colaboratory finden Sie in diesem Artikel. Das Notizbuch mit den Ausführungsergebnissen der folgenden Antworten ist unter [github] verfügbar (https://github.com/yamaru12345/nlp100/blob/master/chapter02.ipynb).
popular-names.txt ist eine Datei, in der "Name", "Geschlecht", "Anzahl der Personen" und "Jahr" eines in den USA geborenen Babys in einem durch Tabulatoren getrennten Format gespeichert werden. Erstellen Sie ein Programm, das die folgende Verarbeitung ausführt, und führen Sie popular-names.txt als Eingabedatei aus. Führen Sie außerdem denselben Prozess mit einem UNIX-Befehl aus und überprüfen Sie das Ausführungsergebnis des Programms.
Laden Sie zunächst die angegebenen Daten herunter. Wenn Sie den folgenden Befehl in der Zelle von Google Colaboratory ausführen, wird die Zieltextdatei in das aktuelle Verzeichnis heruntergeladen.
!wget https://nlp100.github.io/data/popular-names.txt
[Wget] Befehl - Datei durch Angabe der URL herunterladen
Zählen Sie die Anzahl der Zeilen. Verwenden Sie zur Bestätigung den Befehl wc.
Dieses Mal werden wir jede Frage bearbeiten, nachdem wir sie als Pandas-Datenrahmen gelesen haben. Zusätzlich überprüfen wir die Ergebnisse mit Befehlen gemäß den Anweisungen in der Problemstellung.
import pandas as pd
df = pd.read_table('./popular-names.txt', header=None, sep='\t', names=['name', 'sex', 'number', 'year'])
print(len(df))
Ausgabe
2780
#Bestätigung
!wc -l ./popular-names.txt
Ausgabe
2780 ./popular-names.txt
CSV / TsV-Datei mit Pandas lesen Ermitteln Sie die Anzahl der Zeilen, Spalten und Gesamtelemente (Größe) mit Pandas Befehl [[Cat] - Überprüfen Sie einfach den Inhalt der Einstellungsdatei] (https://www.atmarkit.co.jp/ait/articles/1602/25/news034.html) [Wc] Befehlszählung der Anzahl der Zeichen und Zeilen in einer Textdatei
Ersetzen Sie jedes Tabulatorzeichen durch ein Leerzeichen. Verwenden Sie zur Bestätigung den Befehl sed, den Befehl tr oder den Befehl expand.
Da diese Frage das Ersetzen der Registerkarte voraussetzt, die das Trennzeichen der Originaldaten darstellt, wird sie nicht in dem bereits gelesenen Datenrahmen ausgeführt, sondern nur die Bestätigung durch den Befehl.
#Bestätigung
!sed -e 's/\t/ /g' ./popular-names.txt | head -n 5
Ausgabe
Mary F 7065 1880
Anna F 2604 1880
Emma F 2003 1880
Elizabeth F 1939 1880
Minnie F 1746 1880
Befehl [Sed](Basisteil 4) - ersetzt die Zeichenfolge / gibt die ersetzte Zeile aus
Speichern Sie die extrahierte Spalte jeder Zeile als col1.txt und die extrahierte Spalte 2 als col2.txt. Verwenden Sie zur Bestätigung den Befehl cut.
col1 = df['name']
col1.to_csv('./col1.txt', index=False)
print(col1.head())
Ausgabe
0 Mary
1 Anna
2 Emma
3 Elizabeth
4 Minnie
Name: name, dtype: object
#Bestätigung
!cut -f 1 ./popular-names.txt > ./col1_chk.txt
!cat ./col1_chk.txt | head -n 5
Ausgabe
Mary
Anna
Emma
Elizabeth
Minnie
col2 = df['sex']
col2.to_csv('./col2.txt', index=False)
Ausgabe
0 F
1 F
2 F
3 F
4 F
Name: sex, dtype: object
#Bestätigung
!cut -f 2 ./popular-names.txt > ./col2_chk.txt
!cat ./col2_chk.txt | head -n 5
Ausgabe
F
F
F
F
F
Auswählen und Abrufen von Zeilen / Spalten anhand der Pandas-Indexreferenz CSV-Datei mit Pandas exportieren [Ausschneiden] Befehlsausschnitt aus einer Linie in fester Länge oder Feldeinheiten Ergebnis der Befehlsausführung / Standardausgabe in Datei speichern
Kombinieren Sie col1.txt und col2.txt, die in> 12 erstellt wurden, um eine Textdatei zu erstellen, in der die erste und die zweite Spalte der Originaldatei tabulatorgetrennt angeordnet sind. Verwenden Sie zur Bestätigung den Befehl Einfügen.
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())
Ausgabe
name sex
0 Mary F
1 Anna F
2 Emma F
3 Elizabeth F
4 Minnie F
#Bestätigung
!paste ./col1_chk.txt ./col2_chk.txt | head -n 5
Ausgabe
Mary F
Anna F
Emma F
Elizabeth F
Minnie F
Pandas.DataFrame, Serie verketten [Einfügen] Befehlsverkettung mehrerer Dateien Zeile für Zeile
Empfangen Sie die natürliche Zahl N beispielsweise über ein Befehlszeilenargument und zeigen Sie nur die ersten N Zeilen der Eingabe an. Verwenden Sie zur Bestätigung den Befehl head.
def output_head(N):
print(df.head(N))
output_head(5)
Ausgabe
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
#Bestätigung
!head -n 5 ./popular-names.txt
Ausgabe
Mary F 7065 1880
Anna F 2604 1880
Emma F 2003 1880
Elizabeth F 1939 1880
Minnie F 1746 1880
Funktionen in Python definieren und aufrufen Gibt die erste und letzte Zeile von pandas.DataFrame, Series zurück Befehl [[Kopf] / Befehl [Ende] - Zeigt nur den Anfang / das Ende einer langen Nachricht oder Textdatei an](https://www.atmarkit.co.jp/ait/articles/1603/07/news023. html)
Empfangen Sie die natürliche Zahl N beispielsweise über ein Befehlszeilenargument und zeigen Sie nur die letzten N Zeilen der Eingabe an. Verwenden Sie zur Bestätigung den Befehl tail.
def output_tail(N):
print(df.tail(N))
output_tail(5)
Ausgabe
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
#Bestätigung
!tail -n 5 ./popular-names.txt
Ausgabe
Benjamin M 13381 2018
Elijah M 12886 2018
Lucas M 12585 2018
Mason M 12435 2018
Logan M 12352 2018
Empfangen Sie die natürliche Zahl N beispielsweise über Befehlszeilenargumente und teilen Sie die Eingabedatei zeilenweise in N. Erzielen Sie die gleiche Verarbeitung mit dem Befehl split.
Ich denke, es gibt verschiedene Möglichkeiten, dies zu tun, aber hier fügen wir ein Flag hinzu, das die Datei in N unterteilt, indem qcut, das den N-Teilungspunkt berechnet, auf die Seriennummer des Datensatzes angewendet wird.
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())
Ausgabe
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())
Ausgabe
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
#Auf Befehl aufteilen
!split -l 200 -d ./popular-names.txt sp
Pandas.DataFrame, Serie neu indizieren Binning-Prozess mit Cut- und Qcut-Funktionen von Pandas (Binning) Zählen Sie die Anzahl und Häufigkeit (Anzahl der Vorkommen) eindeutiger Elemente in Pandas [Split] Befehlsaufteilungsdateien
Suchen Sie den Typ der Zeichenfolge in der ersten Spalte (eine Reihe verschiedener Zeichenfolgen). Verwenden Sie zur Bestätigung die Befehle cut, sort und uniq.
print(len(df.drop_duplicates(subset='name')))
Ausgabe
136
#Bestätigung
!cut -f 1 ./popular-names.txt | sort | uniq | wc -l
Ausgabe
136
Doppelte Zeilen von pandas.DataFrame, Series extrahieren / löschen [Sortieren] Befehl sortiert Textdateien Zeile für Zeile [Uniq] doppelte Zeilen mit Befehl löschen
Ordnen Sie jede Zeile in umgekehrter Reihenfolge der Zahlen in der dritten Spalte an (Hinweis: Ordnen Sie den Inhalt jeder Zeile neu an, ohne ihn zu ändern). Verwenden Sie den Befehl sort zur Bestätigung (dieses Problem muss nicht mit dem Ergebnis der Ausführung des Befehls übereinstimmen).
df.sort_values(by='number', ascending=False, inplace=True)
print(df.head())
Ausgabe
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
#Bestätigung
!cat ./popular-names.txt | sort -rnk 3 | head -n 5
Ausgabe
Linda F 99689 1947
Linda F 96211 1948
James M 94757 1947
Michael M 92704 1957
Robert M 91640 1947
Pandas.DataFrame, Serie sortieren
Ermitteln Sie die Häufigkeit des Auftretens der ersten Spalte jeder Zeile und zeigen Sie sie in absteigender Reihenfolge an. Verwenden Sie zur Bestätigung die Befehle cut, uniq und sort.
print(df['name'].value_counts())
Ausgabe
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
#Bestätigung
!cut -f 1 ./popular-names.txt | sort | uniq -c | sort -rn
Ausgabe
118 James
111 William
108 Robert
108 John
92 Mary
Sprachverarbeitung 100 Klopfen sind so konzipiert, dass Sie nicht nur die Verarbeitung natürlicher Sprache selbst lernen können, sondern auch die grundlegende Datenverarbeitung und das allgemeine maschinelle Lernen. Sogar diejenigen, die maschinelles Lernen in Online-Kursen studieren, können sehr gute Ergebnisse erzielen. Probieren Sie es also bitte aus.
Recommended Posts