Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimana untuk memanipulasi data teks menggunakan Python?

Bagaimana untuk memanipulasi data teks menggunakan Python?

王林
Lepaskan: 2023-05-08 10:07:14
ke hadapan
1213 orang telah melayarinya

Gunakan python untuk memproses data teks

Tujuan percubaan

Kenal dengan struktur data asas python, serta input dan output fail .

Data eksperimen

Menggunakan data penilaian dan tugasan penilaian persidangan pembelajaran mesin xx dalam xxxx Data termasuk set latihan dan set ujian lulus Data latihan yang diberikan, ramalkan sama ada hubungan dalam set ujian adalah contoh positif atau negatif, dan berikan 1 atau 0 pada akhir setiap sampel.

Data diterangkan seperti berikut Lajur pertama ialah jenis hubungan, lajur kedua dan ketiga ialah nama orang, lajur keempat ialah tajuk, lajur kelima ialah sama ada hubungan itu positif. atau contoh negatif, 1 ialah contoh positif, 0 ialah contoh negatif; lajur keenam mewakili set latihan.

事件 人物1 人物2 标题 关系(0 or 1) 训练集

Set ujian diterangkan dalam rajah di bawah Format pada dasarnya serupa dengan set latihan Satu-satunya perbezaan ialah lajur kelima tidak mempunyai tanda yang berkaitan dengan contoh positif atau negatif.

关系 人物1 人物2 事件

Kandungan percubaan

Proses data set latihan, hanya meninggalkan lima lajur pertama dan teks output dinamakan exp1_1.txt.

Kelaskan 19 jenis perhubungan berdasarkan data yang diperoleh dalam langkah pertama Teks yang dijana disimpan dalam folder exp1_train Mengikut susunan kategori perhubungan yang muncul, data kategori perhubungan pertama ialah disimpan dalam 1 .txt, kategori hubungan kedua disimpan dalam 2.txt sehingga 19.txt.

Set ujian mengelaskan setiap sampel mengikut kategori hubungan dalam susunan 19 kategori set latihan, iaitu, data jenis hubungan yang sama dimasukkan ke dalam fail teks, dan fail ujian 19 kategori juga dijana Formatnya masih sama Selaras dengan fail ujian. Disimpan dalam folder exp1_test, fail setiap kategori masih dinamakan 1_test.txt, 2_test.txt... Pada masa yang sama, kedudukan setiap sampel dalam set ujian asal direkodkan dan sepadan dengan 19 fail ujian satu oleh seorang. Sebagai contoh, baris setiap sampel jenis pertama "perpecahan khabar angin" dalam teks asal direkodkan dalam fail indeks dan disimpan dalam fail index1.txt, index2.txt...

Idea Soalan Penyelesaian

1 Soalan pertama adalah untuk menguji pengetahuan kami tentang operasi dan senarai Kesukaran utama adalah untuk membaca fail baru selepas memprosesnya mengikut keperluan, kami akan menjana fail txt. Mari kita lihat pelaksanaan kod khusus:

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文件
Salin selepas log masuk

2. Soalan kedua masih meneliti operasi fail Berdasarkan fail yang dihasilkan dalam soalan 1, peristiwa dikelaskan mengikut jenis yang sama acara untuk melihat sama ada ia boleh dikumpulkan dengan cekap untuk menyelesaikan, mari kita lihat

pelaksanaan kod

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()                                             # 关闭创建的最后一个类型的文件
Salin selepas log masuk

3 kategori set latihan mengikut perhubungan antara watak, kita boleh merentasi data melalui kamus, mencari perhubungan, meletakkan kandungan dengan perhubungan yang sama ke dalam folder, dan mencipta yang baharu jika ia berbeza.

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
Salin selepas log masuk

Gunakan python untuk memproses data berangka

Tujuan percubaan

Kenal dengan struktur data asas python, serta input dan output fail.

Data eksperimen

Pertandingan xx Tianchi dalam xxx juga merupakan data Cabaran Data Besar ke-x universiti China. Data termasuk dua jadual, iaitu jadual tingkah laku pengguna mars_tianchi_user_actions.csv dan jadual artis lagu mars_tianchi_songs.csv. Pertandingan ini membuka sampel data artis lagu, serta rekod sejarah tingkah laku pengguna yang berkaitan dengan artis ini dalam tempoh 6 bulan (20150301-20150831). Peserta perlu meramalkan data main balik artis untuk 2 bulan akan datang, iaitu 60 hari (20150901-20151030).

Bagaimana untuk memanipulasi data teks menggunakan Python?

Bagaimana untuk memanipulasi data teks menggunakan Python?

Bagaimana untuk memanipulasi data teks menggunakan Python?

Kandungan percubaan

  • Proses data artis lagu mars_tianchi_songs dan kira bilangan artis dan bilangan lagu untuk setiap artis. Format fail output ialah exp2_1.csv Lajur pertama ialah ID artis dan lajur kedua ialah bilangan lagu oleh artis. Baris terakhir mengeluarkan bilangan artis.

  • Gabungkan jadual tingkah laku pengguna dan jadual artis lagu ke dalam satu jadual besar menggunakan song_id lagu sebagai persatuan. Nama lajur pertama hingga kelima bagi setiap lajur adalah konsisten dengan nama lajur jadual tingkah laku pengguna, dan nama lajur keenam hingga kesepuluh ialah nama lajur lajur kedua hingga keenam dalam jadual artis lagu. Nama fail output ialah exp2_2.csv.

  • Mengikut statistik artis, volum main balik semua lagu setiap artis setiap hari dikira Fail output ialah exp2_3.csv. Setiap lajur dinamakan id artis, tarikh Ds dan jumlah kelantangan main balik lagu. Nota: Hanya bilangan lagu yang dimainkan dikira di sini, bukan bilangan muat turun dan koleksi.

Idea penyelesaian masalah: (menggunakan perpustakaan panda)

1.

(1) Gunakan .drop_duplicates() untuk memadamkan nilai pendua

(2) Gunakan .loc[:,‘artist_id’].value_counts() untuk mengetahui bilangan kali penyanyi itu mengulangi, iaitu bilangan lagu bagi setiap penyanyi

( 3) Gunakan .loc[:,‘ songs_id’].value_counts() Ketahui jika tiada lagu pendua

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
Salin selepas log masuk

Gunakan merge() untuk menggabungkan dua jadual

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')
Salin selepas log masuk

Gunakan groupby( )[].sum() untuk penambahan berulang

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')
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk memanipulasi data teks menggunakan Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan