python文本文档处理,python如何读取文本中的数据并处理
在学习Python的时候,总能让人深深体会到这种语言的魅力。今天,边肖给大家带来了一个用Python处理文本数据的有趣项目。我们来看看今天的问题。
00-1010前言使用python处理文本数据和python处理数值数据
目录
嗨,好久不见。今天是我关闭朋友圈的第60天。我是野蛮生长的AC-Asteroid。
人生苦短,我用Python,通过短短两周的自学,从基础知识到项目实践,深深体会到了这门语言的魅力。今天带来了一个用Python处理文本数据的有趣项目。我们来看看今天的问题。
前言
实验目的
熟悉python的基本数据结构,以及文件的输入输出。
实验数据
使用xxxx年xx机器学习大会的评测数据和任务,数据包括训练集和测试集。评估任务是通过给定的训练数据预测测试集中的关系是正还是负,并在每个样本结束时给出1或0。
数据描述如下:第一列是关系类型,第二、三列是人名,第四列是头衔,第五列是关系是正还是负,1为正,0为负;第六列指示训练集。
事件1字符2标题关系(0或1)训练集测试集如下图所示。格式基本上类似于训练集的格式。唯一的区别是第五列与它是正面例子还是反面例子没有关系。
人员1,人员2,事件实验内容
处理训练集数据,只留下前五列,输出文本命名为exp1_1.txt
基于在第一步中获得的数据,19种关系被分类,并且生成的文本被存储在exp1_train文件夹中。按照关系类别出现的顺序,第一个关系类别的数据存储在1.txt,第二个关系类别的数据存储在2.txt,直到19.txt。
测试集根据训练集的19个类别的顺序,将每个样本按照关系类别进行分类,即将同一关系类型的数据放入一个文本文件中,同样生成19个类别的测试文件,格式仍然与测试文件一致。在存放exp1_test的文件夹下,每个类别的文件仍然命名为1_test.txt,2_test.txt…同时记录了每个样本在原始测试集中的位置,与19个测试文件一一对应。比如原文中第一类“道听途说不和谐”的每个样本是哪一行,记录在索引文件中,保存在文件index1.txt,index2.txt…
解题思路
1.第一个问题是考察我们对文件操作和列表的知识。主要难点是读取新文件,然后按照要求处理后生成一个txt文件。让我们来看看具体的代码实现:
导入操作系统
#创建存储新内容的列表
list=[]
用( task1.trainsentence.new , r ,encoding= xxx )作为file _ input3360 #打开。新文件,XXX按照自己的编码格式填充。
用( exp1 _ 1.txt , w ,encoding= XXX )作为file _ output3360 #打开exp1 _ 1.txt,XXX会按照自己的编码格式填充文件。如果没有,请创建一个。
For Line in file_input: #遍历文件的每一行
Arr=Line.split(\t) # Read用\t作为分隔符
if arr[0]不在列表中: #如果单词不在列表中
list.append(arr[0]) #将单词添加到列表中
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文件
2.第二题依旧考察了文件操作,在题目一生成的文件基础上,按照同一类型的事件对事件进行分类,是否能高效的分组需要利用循环条件来解决,我们来看看具体的
代码实现
import osfile_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() # 关闭创建的最后一个类型的文件
3.将训练集的19个类别按照人物的关系进行进一步的分类,我们可以通过字典对数据进行遍历,查找关系,把关系相同的内容放到一个文件夹中,不同则新建一个。
import oswith 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
用python处理数值型数据
实验目的
熟悉python的基本数据结构,以及文件的输入与输出。
实验数据
xxxx年xx天池大赛,也是中国高校第x届大数据挑战赛的数据。数据包括两个表,分别是用户行为表mars_tianchi_user_actions.csv和歌曲艺人表mars_tianchi_songs.csv。大赛开放抽样的歌曲艺人数据,以及和这些艺人相关的6个月内(20150301-20150831)的用户行为历史记录。选手需要预测艺人随后2个月,即60天(20150901-20151030)的播放数据。
实验内容
- 对歌曲艺人数据mars_tianchi_songs进行处理,统计出艺人的个数以及每个艺人的歌曲数量。输出文件格式为exp2_1.csv,第一列为艺人的ID,第二列为该艺人的歌曲数目。最后一行输出艺人的个数。
- 将用户行为表和歌曲艺人表以歌曲song_id作为关联,合并为一个大表。各列名称为第一到第五列与用户行为表的列名一致,第六到第十列为歌曲艺人表中的第二列到第六列的列名。输出文件名为exp2_2.csv。
- 按照艺人统计每个艺人每天所有歌曲的播放量,输出文件为exp2_3.csv,各个列名为艺人id,日期Ds,歌曲播放总量。注意:这里只统计歌曲的播放量,不包括下载和收藏的数量。
解题思路:(利用pandas库)
1.
(1)利用.drop_duplicates() 删除重复值
(2)利用.loc[:,‘artist_id’].value_counts() 求出歌手重复次数,即每个歌手的歌曲数目
(3)利用.loc[:,‘songs_id’].value_counts() 求出歌曲没有重复
import pandas as pddata = 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
利用merge()合并两个表
import pandas as pd import osdata = 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)
利用groupby()[].sum()进行重复性相加
import pandas as pddata =pd.read_csv(exp2_2.csv)
DataCHongfu = data.groupby([artist_id,Ds])[gmt_create].sum()#重复项相加DataCHongfu.to_csv(exp2_3.csv)
到此这篇关于Python处理文本数据的方法详解的文章就介绍到这了,更多相关Python处理数据内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。