Comment manipuler des données texte en utilisant Python ?

王林
Libérer: 2023-05-08 10:07:14
avant
1186 Les gens l'ont consulté

Utilisez Python pour traiter des données textuelles

Objectif de l'expérience

Soyez familier avec la structure de données de base de Python, ainsi que l'entrée et la sortie de fichiers.

Données expérimentales

Utilisez les données d'évaluation et les tâches d'évaluation de la xx conférence sur l'apprentissage automatique en XXXX. Les données comprennent des ensembles de formation et des ensembles de tests. La tâche d'évaluation consiste à prédire si la relation dans l'ensemble de test est positive ou. exemple négatif à travers les données de formation données, donnant 1 ou 0 à la fin de chaque échantillon.

Les données sont décrites comme suit : la première colonne est le type de relation, les deuxième et troisième colonnes sont les noms des personnes, la quatrième colonne est le titre et la cinquième colonne indique si la relation est un exemple positif ou négatif. . 1 est un exemple positif et 0 est un exemple négatif ; La sixième colonne représente l'ensemble d'entraînement.

Événement Personnage 1 Personnage 2 Titre Relation (0 ou 1) Ensemble d'entraînement

L'ensemble de test est décrit dans la figure ci-dessous. Le format est fondamentalement similaire. à l'ensemble de formation, la seule différence est que peu importe qu'il s'agisse d'un exemple positif ou négatif dans la cinquième colonne.

Relation Personnage 1 Personnage 2 Événement

Contenu expérimental

Traitez les données de l'ensemble d'entraînement, en ne laissant que les cinq premières colonnes, et le texte de sortie est nommé exp1_1.txt.

Catégorie 19 types de relations basées sur les données obtenues lors de la première étape. Le texte généré est stocké dans le dossier exp1_train Selon l'ordre dans lequel les catégories de relations apparaissent, les données de la première catégorie de relations sont stockées dans 1. txt. La deuxième catégorie de relation est stockée dans 2.txt jusqu'à 19.txt.

L'ensemble de test classe chaque échantillon en fonction de la catégorie de relation dans l'ordre des 19 catégories de l'ensemble de formation, c'est-à-dire que les données du même type de relation sont placées dans un fichier texte et que les fichiers de test de 19 catégories sont également généré. Le format reste le même que celui du fichier de test. Stockés dans le dossier exp1_test, les fichiers de chaque catégorie sont toujours nommés 1_test.txt, 2_test.txt... Parallèlement, la position de chaque échantillon dans le jeu de test d'origine est enregistrée, et correspond aux 19 fichiers de test un par un. Par exemple, la ligne de chaque échantillon du premier type de « rumeur de discorde » dans le texte original est enregistrée dans le fichier d'index et enregistrée dans les fichiers index1.txt, index2.txt...

Idées de résolution de problèmes

1 .La première question est de tester nos connaissances sur les opérations sur les fichiers et les listes. La principale difficulté est de lire le nouveau fichier après traitement selon les exigences, un fichier txt est généré. implémentation :

import os
# 创建一个列表用来存储新的内容
list = []                                     
with open("task1.trainSentence.new", "r",encoding='xxx') as file_input: # 打开.new文件,xxx根据自己的编码格式填写
    with open("exp1_1.txt", "w", encoding='xxx') as file_output:        # 打开exp1_1.txt,xxx根据自己的编码格式填写文件如果没有就创建一个
 
        for Line in file_input:                                         # 遍历每一行的文件
            arr = Line.split('\t')                                      # 以\t为分隔符读取
            if arr[0] not in list:                                      # if the word is not in the list
                list.append(arr[0])                                     # add the word to the list
            file_output.write(arr[0]+"\t"+arr[1]+"\t"+arr[2]+"\t"+arr[3]+"\t"+arr[4]+"\n")  # write the line to the file
file_input.close()                                                      #关闭.new文件
file_output.close()                                                     #关闭创建的txt文件
Copier après la connexion

2. La deuxième question examine toujours les opérations sur les fichiers. Sur la base des fichiers générés dans la question 1, les événements sont classés selon le même type d'événements. Il faut déterminer s'ils peuvent être regroupés efficacement en utilisant des conditions de boucle. Jetons un coup d'œil au code

spécifique Implémenter

import os
file_1 = open("exp1_1.txt", encoding='xxx')             # 打开文件,xxx根据自己的编码格式填写
os.mkdir("exp1_train")                                  # 创建目录
os.chdir("exp1_train")                                  # 修改进程的工作目录(使用该目录)
a = file.readline()                                     # 按行读取exp1_1.txt文件
arr = a.split("\t")                                     # 按\t间隔符作为分割
b = 1                                                   #设置分组文件的序列
file_2 = open("{}.txt".format(b), "w", encoding="xxx")  # 打开文件,xxx根据自己的编码格式填写
for line in file_1:                                     # 按行读取文件
    arr_1 = line.split("\t")                            # 按\t间隔符作为分割
    if arr[0] != arr_1[0]:                              # 如果读取文件的第一列内容与存入新文件的第一列类型不同
        file_2.close()                                  # 关掉该文件
        b += 1                                          # 文件序列加一
        f_2 = open("{}.txt".format(b), "w", encoding="xxx") # 创建新文件,以另一种类型分类,xxx根据自己的编码格式填写
    arr = line.split("\t")                              # 按\t间隔符作为分割
    f_2.write(arr[0]+"\t"+arr[1]+"\t"+arr[2]+"\t"+arr[3]+"t"+arr[4]+"\t""\n") # 将相同类型的文件写入
f_1.close()                                             # 关闭题目一创建的exp1_1.txt文件
f_2.close()                                             # 关闭创建的最后一个类型的文件
Copier après la connexion

3. Classer davantage les 19 catégories de l'ensemble d'entraînement en fonction de la relation entre les personnages. Nous pouvons parcourir les données à travers le dictionnaire, trouver la relation, mettre la. contenu avec la même relation dans un dossier, et créez-en un nouveau s'il est différent.

import os

with open("exp1_1.txt", encoding='xxx') as file_in1: # 打开文件,xxx根据自己的编码格式填写
    i = 1                                            # 类型序列
    arr2 = {}                                        # 创建字典
    for line in file_in1:                            # 按行遍历
        arr3 = line[0:2]                             # 读取关系
        if arr3 not in arr2.keys():
            arr2[arr3] = i                           
            i += 1                                   # 类型+1
    file_in = open("task1.test.new")                 # 打开文件task1.test.new
    os.mkdir("exp1_test")                            # 创建目录
    os.chdir("exp1_test")                            # 修改进程的工作目录(使用该目录)
    for line in file_in:
        arr = line[0:2]
        with open("{}_test.txt".format(arr2[arr]), "a", encoding='xxx') as file_out:
            arr = line.split('\t')
            file_out.write(line)
    i = 1
    file_in.seek(0)
    os.mkdir("exp1_index")
    os.chdir("exp1_index")
    for line in file_in:
        arr = line[0:2]
        with open("index{}.txt".format(arr2[arr]), "a", encoding='xxx') as file_out:
            arr = line.split('\t')
            line = line[0:-1]
            file_out.write(line + '\t' + "{}".format(i) + "\n")
        i += 1
Copier après la connexion

Utilisez Python pour traiter des données numériques

Objectif de l'expérience

Soyez familier avec la structure de données de base de Python, ainsi que l'entrée et la sortie de fichiers.

Données expérimentales

Le xx Concours Tianchi en xxxx, ce sont aussi les données du xième Big Data Challenge des universités chinoises. Les données comprennent deux tables, à savoir la table du comportement de l'utilisateur mars_tianchi_user_actions.csv et la table des artistes de la chanson mars_tianchi_songs.csv. Le concours ouvre des données échantillonnées sur les artistes de chansons, ainsi que des enregistrements de l'historique du comportement des utilisateurs liés à ces artistes dans un délai de 6 mois (20150301-20150831). Les candidats doivent prédire les données de lecture de l'artiste pour les 2 prochains mois, soit 60 jours (20150901-20151030).

Comment manipuler des données texte en utilisant Python ?

Comment manipuler des données texte en utilisant Python ?

Comment manipuler des données texte en utilisant Python ?

Contenu expérimental

  • Traitez les données de l'artiste de la chanson mars_tianchi_songs et comptez le nombre d'artistes et le nombre de chansons pour chaque artiste. Le format du fichier de sortie est exp2_1.csv. La première colonne est l'identifiant de l'artiste et la deuxième colonne est le nombre de chansons de l'artiste. La dernière ligne affiche le nombre d'artistes.

  • Fusionnez la table de comportement de l'utilisateur et la table des artistes de la chanson en une seule grande table en utilisant la chanson song_id comme association. Les noms de chaque colonne sont les première à cinquième colonnes, qui correspondent aux noms de colonnes du tableau des comportements des utilisateurs, et les sixième à dixième colonnes sont les noms de colonnes des deuxième à sixième colonnes du tableau des artistes de la chanson. Le nom du fichier de sortie est exp2_2.csv.

  • Selon les statistiques des artistes, le volume de lecture de toutes les chansons de chaque artiste chaque jour, le fichier de sortie est exp2_3.csv et chaque colonne est nommée identifiant de l'artiste, date Ds et volume total de lecture de la chanson. Remarque : Seul le nombre d'écoutes de chansons est pris en compte ici, pas le nombre de téléchargements et de collections.

Idées de résolution de problèmes : (Utilisation de la bibliothèque pandas)

1.

(1) Utilisez .drop_duplicates() pour supprimer les valeurs en double

(2) Utilisez .loc[:,‘artist_id’] .value_counts() Découvrez le nombre de fois que le chanteur répète, c'est-à-dire le nombre de chansons pour chaque chanteur

(3) Utilisez .loc[:,‘songs_id’].value_counts() pour savoir si les chansons ne sont pas répétés

import pandas as pd
data = pd.read_csv(r"C:\mars_tianchi_songs.csv")       # 读取数据
Newdata = data.drop_duplicates(subset=['artist_id'])   # 删除重复值
artist_sum = Newdata['artist_id'].count()              
#artistChongFu_count = data.duplicated(subset=['artist_id']).count() artistChongFu_count = data.loc[:,'artist_id'].value_counts() 重复次数,即每个歌手的歌曲数目
songChongFu_count = data.loc[:,'songs_id'].value_counts()  # 没有重复(歌手)
artistChongFu_count.loc['artist_sum'] = artist_sum         # 没有重复(歌曲)artistChongFu_count.to_csv('exp2_1.csv')                   # 输出文件格式为exp2_1.csv
Copier après la connexion

Utilisez merge() pour fusionner les deux tables

import pandas as pd import os

data = pd.read_csv(r"C:\mars_tianchi_songs.csv")
data_two = pd.read_csv(r"C:\mars_tianchi_user_actions.csv")
num=pd.merge(data_two, data) num.to_csv('exp2_2.csv')
Copier après la connexion

Utilisez groupby()[].sum() pour des ajouts répétés

import pandas as pd
data =pd.read_csv('exp2_2.csv')
DataCHongfu = data.groupby(['artist_id','Ds'])['gmt_create'].sum()#重复项相加DataCHongfu.to_csv('exp2_3.csv')
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal