[PYTHON] J'ai essayé 100 traitements linguistiques Knock 2020: Chapitre 2

introduction

J'ai essayé Language processing 100 knock 2020. Vous pouvez voir le lien des autres chapitres d'ici, et le code source de ici. (La confirmation sous UNIX n'a pas été vérifiée.)

Chapitre 2

N ° 10 Compter le nombre de lignes

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

<détails>

Réponse </ summary>

010.py


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

# -> 2700

<détails>

Commentaires </ summary>

J'ai utilisé le bloc with car il était fastidieux d'écrire close () à la fin de l'opération de fichier.

No.11 Convertir les onglets en 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.

<détails>

Réponse </ summary>

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

<détails>

Commentaires </ summary>
J'ai converti l'espace avec \ t avec replace (). Si vous sortez tel quel, une ligne vide apparaîtra à «\ n» à la fin de la ligne + ligne de texte de la fonction «impression», mais si vous spécifiez l'option «fin» pour la fonction «impression», «fin» sera inséré à la fin du texte J'ai essayé de l'utiliser.

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

<détails>

Réponse </ summary>

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

<détails>

Commentaires </ summary>

Le fonctionnement du fichier est spécifié par mode de ʻopen (). La valeur par défaut est mode = 'r'`, mais vous devriez l'écrire correctement sans l'omettre ...?

No.13 Fusionner 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.

<détails>

Réponse </ summary>

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

<détails>

Commentaires </ summary>

La réponse de l'autre personne a utilisé «zip ()» pour le générer. Avec cette réponse, vous aurez des ennuis quand len (col1_list)> len (col2_list), et c'est plus intelligent.

N ° 14 Sortie 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.

<détails>

Réponse </ summary>

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
Commentaires

Il semble que vous puissiez obtenir une liste avec des arguments de ligne de commande en utilisant la fonction ʻargvdu modulesys`.

N ° 15 Sortie N lignes à la fin

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.

<détails>

Réponse </ summary>

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

Commentaires

Pour ceux qui le connaissent, il semble que ce soit nouveau, mais il semble qu'il existe une bibliothèque appelée pandas qui est pratique pour le traitement des données, j'ai donc essayé de l'utiliser. read_csv (chemin, sep =" \ t ") était bien, mais read_table est simple, n'est-ce pas?

N ° 16 Diviser 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.

<détails>

Réponse </ summary>

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]

Commentaires
`col_n = - (- len (df) // N)` calcule l'entier arrondi de `len (df) / N`. Il est plus intuitif d'utiliser `math.ceil ()`, mais je me demande si ce genre de notation est possible.

Pour la sortie, j'ai utilisé ʻiloc parce que je veux spécifier plusieurs lignes de df` par index.

N ° 17 Chevauchement de chaînes 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.

<détails>

Réponse </ summary>

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'...
Commentaires

ʻUnique () renvoie la valeur d'un élément unique en tant que type ndarrayde NumPy. Le nombre d'éléments uniques peut être obtenu pardf [0] .nunique ()en plus delen (df [0] .unique ())`.

N ° 18 Trier chaque ligne par ordre décroissant des valeurs numériques de 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).

<détails>

Réponse </ summary>

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...
Commentaires
`sort_values` est disponible à la fois dans` pandas.DataFrame` et `pandas.Series`. Très pratique pour trier facilement. Aussi, personnellement, je suis plus un groupe de «colonnes» qu'une «colonne».

N ° 19 Trouvez la fréquence d'apparition des chaînes 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.

<détails>

Réponse </ summary>

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
Commentaires

value_counts renvoie les éléments uniques et leur nombre sous la forme pandas.Series. Il est déroutant que ʻunique () affiche une liste d'éléments uniques, nunique () montre le nombre total d'éléments uniques et value_counts () `montre la fréquence d'occurrence de chaque élément.

référence

Opération de base Pandas fréquemment utilisée dans l'analyse des données upura / nlp100v2020 Résoudre "100 Language Processing Knock 2020" avec Python Résumé du traitement du langage amateur à 100 coups

Recommended Posts