<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
HI,好久不見,今天是關閉朋友圈的第60天,我是野蠻成長的AC-Asteroid。
人生苦短,我用Python,通過短短兩週時間自學,從基礎知識到專案實踐,在這個過程中深刻體會到這款語言的魅力,今天帶來一個有趣的專案,用Python處理文字資料,一起來看看今天的問題吧。
實驗目的
熟悉python的基本資料結構,以及檔案的輸入與輸出。
實驗資料
利用xxxx年xx機器學習會議的評測資料和評測任務,資料包括訓練集和測試集,評測任務為通過給定的訓練資料,預測測試集中的關係是正例還是負例,在每個樣本最後給出1或者0。
資料描述如下,第一列為關係型別,第二列和第三列為人名,第四列是標題,第五列是關係為正例還是負例,1為正例,0為負例;第六列表示訓練集。
事件 | 人物1 | 人物2 | 標題 | 關係(0 or 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.第一題是考察我們檔案操作與列表的知識,主要考察的難點是對new檔案的讀取,根據要求處理後在生成一個txt檔案,讓我們看一下具體的程式碼實現:
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檔案
2.第二題依舊考察了檔案操作,在題目一生成的檔案基礎上,按照同一型別的事件對事件進行分類,是否能高效的分組需要利用迴圈條件來解決,我們來看看具體的
程式碼實現
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() # 關閉建立的最後一個型別的檔案
3.將訓練集的19個類別按照人物的關係進行進一步的分類,我們可以通過字典對資料進行遍歷,查詢關係,把關係相同的內容放到一個資料夾中,不同則新建一個。
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
實驗目的
熟悉python的基本資料結構,以及檔案的輸入與輸出。
實驗資料
xxxx年xx天池大賽,也是中國高校第x屆巨量資料挑戰賽的資料。資料包括兩個表,分別是使用者行為表mars_tianchi_user_actions.csv和歌曲藝人表mars_tianchi_songs.csv。大賽開放抽樣的歌曲藝人資料,以及和這些藝人相關的6個月內(20150301-20150831)的使用者行為歷史記錄。選手需要預測藝人隨後2個月,即60天(20150901-20151030)的播放資料。
實驗內容
解題思路:(利用pandas庫)
1.
(1)利用.drop_duplicates() 刪除重複值
(2)利用.loc[:,‘artist_id’].value_counts() 求出歌手重複次數,即每個歌手的歌曲數目
(3)利用.loc[:,‘songs_id’].value_counts() 求出歌曲沒有重複
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
利用merge()合併兩個表
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')
利用groupby()[].sum()進行重複性相加
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')
到此這篇關於Python處理文字資料的方法詳解的文章就介紹到這了,更多相關Python處理資料內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45