[PYTHON] Ich habe versucht, 100 Sprachverarbeitung zu klopfen 2020: Kapitel 2

Einführung

Ich habe versucht Sprachverarbeitung 100 Knock 2020. Sie können den Link anderer Kapitel von hier und den Quellcode von hier sehen. (Die Bestätigung unter UNIX wurde nicht überprüft.)

Kapitel 2

Nr.10 Anzahl der Zeilen zählen

Zählen Sie die Anzahl der Zeilen. Verwenden Sie zur Bestätigung den Befehl wc.

Antwort

010.py


path = "popular-names.txt"
with open(path) as file:
    print(len(file.readlines()))

# -> 2700
Kommentare

Ich habe den "with" -Block verwendet, weil es mühsam war, "close ()" am Ende der Dateioperation zu schreiben.

Nr.11 Tabulatoren in Leerzeichen konvertieren

Ersetzen Sie jedes Tabulatorzeichen durch ein Leerzeichen. Verwenden Sie zur Bestätigung den Befehl sed, den Befehl tr oder den Befehl expand.

Antwort

011.py


path = "popular-names.txt"
with open(path) as file:
     print(file.read().replace("\t", " "), end="")

# -> Mary F 7065 1880 
#    Anna F 2604 1880 
#    Emma F 2003 1880 ...
Kommentare
Ich habe das Leerzeichen mit `\ t` mit` replace ()` konvertiert. Wenn Sie so ausgeben, wie es ist, wird am Ende der Zeile + Textzeile der Funktion "Drucken" eine Zeile leer bei "\ n" angezeigt. Wenn Sie jedoch die Option "Ende" für die Funktion "Drucken" angeben, wird am Ende des Textes "Ende" eingefügt Ich habe es versucht.

Nr.12 Speichern Sie die erste Spalte in col1.txt und die zweite Spalte in col2.txt

Speichern Sie nur die erste Spalte jeder Zeile als col1.txt und die zweite Spalte als col2.txt. Verwenden Sie zur Bestätigung den Befehl cut.

Antwort

012.py


path = "popular-names.txt"
path_col1 = "col1_012.txt"
path_col2 = "col2_012.txt"

with open(path) as file:
    with open(path_col1, mode="w") as col1:
        with open(path_col2, mode="w") as col2:
           item_split = [item.split("\t") for item in file.readlines()]
           for item in item_split:
               col1.write(item[0] + "\n")
               col2.write(item[1] + "\n")

# col1.txt
# -> Mary
#    Anna...
# col2.txt
# -> F
#    F...
Kommentare

Der Betrieb der Datei wird durch "mode" von "open ()" angegeben. Der Standardwert ist mode = 'r', aber Sie sollten es richtig schreiben, ohne es wegzulassen ...?

Nr.13 Füge col1.txt und col2.txt zusammen

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.

Antwort

013.py


path_col1 = "col1_012.txt"
path_col2 = "col2_012.txt"
path_merge = "merge.txt"

with open(path_col1) as col1:
    col1_list = col1.readlines()
    with open(path_col2) as col2:
        col2_list = col2.readlines()
        with open(path_merge, mode="w") as mrg:
            for i in range(len(col1_list)):
                mrg.write(col1_list[i].replace("\n", "") + "\t" + col2_list[i])

# merge.txt
# -> Mary	F
#    Anna	F
#    Emma	F
Kommentare

Die Antwort der anderen Person verwendete "zip ()", um sie zu generieren. Mit dieser Antwort werden Sie in Schwierigkeiten geraten, wenn "len (col1_list)> len (col2_list)", und das ist schlauer.

Nr.14 N Zeilen von Anfang an ausgeben

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.

Antwort

014.py


import sys

N = int(sys.argv[2])
with open(sys.argv[1]) as file:
    for i in range(N):
        print(file.readline().replace("\n",""))

# python 014.py popular-names.txt 3
# -> Mary    F       7065    1880
#    Anna    F       2604    1880
#    Emma    F       2003    1880
Kommentare

Es scheint, dass Sie eine Liste mit Befehlszeilenargumenten erhalten können, indem Sie die Funktion argv des Moduls sys verwenden.

Nr.15 N Zeilen am Ende ausgeben

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.

Antwort

015.py


import pandas as pd

path = "popular-names.txt"
df = pd.read_table(path, header=None)
print(df.tail())

# ->              0  1      2     3
#    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

Kommentare

Für diejenigen, die es kennen, scheint es neu zu sein, aber es scheint, dass es eine Bibliothek namens pandas gibt, die für die Datenverarbeitung geeignet ist, also habe ich versucht, sie zu verwenden. read_csv (path, sep =" \ t ") war in Ordnung, aber read_table ist einfach, nicht wahr?

Nr.16 Teilen Sie die Datei in N.

Empfangen Sie die natürliche Zahl N mithilfe von Befehlszeilenargumenten und teilen Sie die Eingabedatei zeilenweise in N. Erzielen Sie die gleiche Verarbeitung mit dem Befehl split.

Antwort

016.py


import pandas as pd
import sys

N = int(sys.argv[1])
path = "popular-names.txt"
df = pd.read_table(path, header=None)
col_n = -(-len(df) // N)
for i in range(N):
    print(df.iloc[col_n * i : col_n * (i + 1), :])

# python 016.py 2
# ->               0  1      2     3
#    0          Mary  F   7065  1880
#    1          Anna  F   2604  1880
#    ...         ... ..    ...   ...
#    1389     Sharon  F  25711  1949
#
#    [1390 rows x 4 columns]
#                  0  1      2     3
#     1390     James  M  86857  1949
#     1391    Robert  M  83872  1949
#     ...        ... ..    ...   ...
#     2779     Logan  M  12352  2018
#
#    [1390 rows x 4 columns]

Kommentare
`col_n = - (- len (df) // N)` berechnet die aufgerundete ganze Zahl von` len (df) / N`. Es ist intuitiver, `math.ceil ()` zu verwenden, aber ich frage mich, ob diese Art der Notation möglich ist.

Für die Ausgabe habe ich "iloc" verwendet, weil ich mehrere Zeilen von "df" nach Index angeben möchte.

Nr.17 Überlappung von Zeichenketten in der ersten Spalte

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.

Antwort

017.py


import pandas as pd

path = "popular-names.txt"
df = pd.read_table(path, header=None)
print(df[0].unique())

# -> ['Mary' 'Anna' 'Emma' 'Elizabeth' 'Minnie' 'Margaret' 'Ida' 'Alice'...
Kommentare

unique () gibt den Wert eines eindeutigen Elements als NumPys ndarray -Typ zurück. Die Anzahl der eindeutigen Elemente kann durch "df [0] .nunique ()" zusätzlich zu "len (df [0] .unique ())" erhalten werden.

Nr.18 Sortieren Sie jede Zeile in absteigender Reihenfolge der numerischen Werte in der dritten Spalte

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

Antwort

018.py


import pandas as pd

path = "popular-names.txt"
df = pd.read_table(path, header=None)
print(df.sort_values(2, ascending=False))

# ->            0  1      2     3
#   1340    Linda  F  99689  1947
#   1360    Linda  F  96211  1948
#   1350    James  M  94757  1947...
Kommentare
`sort_values` ist sowohl in` pandas.DataFrame` als auch in` pandas.Series` verfügbar. Sehr bequem zu sortieren. Auch persönlich bin ich eher eine "Spalten" -Gruppe als eine "Spalte".

Nr. 19 Ermitteln Sie die Häufigkeit des Auftretens der Zeichenfolge in der ersten Spalte jeder Zeile und ordnen Sie sie in absteigender Reihenfolge der Häufigkeit des Auftretens an.

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.

Antwort

019.py


import pandas as pd

path = "popular-names.txt"
df = pd.read_table(path, header=None)
print(df[0].value_counts())

# -> James      118
#    William    111
#    John       108
Kommentare

value_counts gibt eindeutige Elemente und deren Nummer als pandas.Series Typ aus. Es ist verwirrend, dass "unique ()" die Liste der eindeutigen Elemente anzeigt, "nunique ()" die Gesamtzahl der eindeutigen Elemente anzeigt und "value_counts ()" die Häufigkeit des Auftretens jedes Elements anzeigt.

Referenz

Pandas grundlegende Operation, die häufig in der Datenanalyse verwendet wird upura / nlp100v2020 Löse "100 Language Processing Knock 2020" mit Python Zusammenfassung der Amateur-Sprachverarbeitung mit 100 Klopfen

Recommended Posts

Ich habe versucht, 100 Sprachverarbeitung klopfen 2020: Kapitel 3
Ich habe versucht, 100 Sprachverarbeitung klopfen 2020: Kapitel 1
Ich habe versucht, 100 Sprachverarbeitung zu klopfen 2020: Kapitel 2
Ich habe versucht, 100 Sprachverarbeitung zu klopfen 2020: Kapitel 4
Ich habe versucht, 100 Sprachverarbeitung klopfen 2020
100 Sprachverarbeitung Knock 2020 Kapitel 1
100 Sprachverarbeitung Knock Kapitel 1
100 Sprachverarbeitung Knock 2020 Kapitel 3
100 Sprachverarbeitung Knock 2020 Kapitel 2
100 Sprachverarbeitung Knock Kapitel 1 (Python)
100 Sprachverarbeitung Knock Kapitel 2 (Python)
Ich habe versucht, die Version 2020 mit 100 Sprachverarbeitung zu lösen [Kapitel 2: UNIX-Befehle 10-14]
Ich habe versucht, die Version 2020 mit 100 Sprachverarbeitung zu lösen [Kapitel 2: UNIX-Befehle 15-19]
100 Sprachverarbeitung Knock 2020 Kapitel 2: UNIX-Befehle
100 Sprachverarbeitung Knock 2015 Kapitel 5 Abhängigkeitsanalyse (40-49)
100 Sprachverarbeitungsklopfen mit Python (Kapitel 1)
100 Sprachverarbeitung Knock Kapitel 1 in Python
100 Sprachverarbeitung Knock 2020 Kapitel 4: Morphologische Analyse
100 Sprachverarbeitung Knock 2020 Kapitel 9: RNN, CNN
100 Sprachverarbeitungsklopfen (2020): 28
100 Sprachverarbeitungsklopfen mit Python (Kapitel 3)
100 Sprachverarbeitungsklopfen: Kapitel 1 Vorbereitungsbewegung
100 Sprachverarbeitung Knock 2020 Kapitel 6: Maschinelles Lernen
100 Sprachverarbeitung Knock 2020 Kapitel 10: Maschinelle Übersetzung (90-98)
100 Sprachverarbeitung Knock 2020 Kapitel 5: Abhängigkeitsanalyse
100 Sprachverarbeitung Knock 2020 Kapitel 7: Word Vector
100 Sprachverarbeitung Knock 2020 Kapitel 8: Neuronales Netz
Python-Anfänger versucht 100 Sprachverarbeitung klopfen 2015 (05 ~ 09)
100 Sprachverarbeitungsklopfen (2020): 38
100 Sprachverarbeitung klopfen 00 ~ 02
100 Sprachverarbeitung Knock 2020 Kapitel 1: Vorbereitende Bewegung
100 Sprachverarbeitung Knock 2020 Kapitel 3: Reguläre Ausdrücke
100 Language Processing Knock 2015 Kapitel 4 Morphologische Analyse (30-39)
Python-Anfänger versucht 100 Sprachverarbeitung klopfen 2015 (00 ~ 04)
Ich habe mit GiNZA v3.1 Kapitel 4 100 Sprachverarbeitungsklopfen 2020 durchgeführt
100 Sprachverarbeitungsklopfen mit Python (Kapitel 2, Teil 2)
100 Sprachverarbeitungsklopfen mit Python (Kapitel 2, Teil 1)
[Programmierer-Neuling "100 Sprachverarbeitung klopfen 2020"] Lösen Sie Kapitel 1
Ich habe versucht, natürliche Sprache mit Transformatoren zu verarbeiten.
100 Sprachverarbeitung klopfen 2020 [00 ~ 39 Antwort]
100 Sprachverarbeitung klopfen 2020 [00-79 Antwort]
100 Amateur-Sprachverarbeitungsklopfen: 17
100 Sprachverarbeitung klopfen 2020 [00 ~ 49 Antwort]
100 Sprachverarbeitung Knock-52: Stemming
100 Sprachverarbeitungsklopfen ~ Kapitel 1
100 Amateur-Sprachverarbeitungsklopfen: 07
100 Sprachverarbeitung klopft Kapitel 2 (10 ~ 19)
100 Amateur-Sprachverarbeitungsklopfen: 09
100 Amateur-Sprachverarbeitungsklopfen: 47
100 Sprachverarbeitung Knock-53: Tokenisierung
100 Amateur-Sprachverarbeitungsklopfen: 97
100 Sprachverarbeitung klopfen 2020 [00 ~ 59 Antwort]
100 Amateur-Sprachverarbeitungsklopfen: 67
100 Sprachverarbeitung Knock UNIX-Befehle in Kapitel 2
100 Sprachverarbeitung Klopfen Sie auf reguläre Ausdrücke, die Sie in Kapitel 3 gelernt haben
Ich habe versucht, die Version 2020 mit 100 Sprachverarbeitung zu lösen [Kapitel 3: Reguläre Ausdrücke 25-29]
100 Sprachverarbeitungsklopfen mit Python 2015
100 Sprachverarbeitung Knock-51: Wortausschnitt
100 Sprachverarbeitung Knock-58: Extraktion von Taple
100 Sprachverarbeitung Knock-57: Abhängigkeitsanalyse
100 Sprachverarbeitung Knock-50: Satzumbruch