“达观杯”文本智能处理挑战赛--数据初识

一. 获取数据

7z压缩文件解压后得到两个文件:train_set.csv和test_set.csv 

train_set.csv:此数据集用于训练模型,每一行对应一篇文章。文章分别在“字”和“词”的级别上做了脱敏处理。共有四列: 第一列是文章的索引(id),第二列是文章正文在“字”级别上的表示,即正文是由一个个字符组成(article);第三列是在“词”级别上的表示,即正文由词和字组成(word_seg);第四列是这篇文章的标注(class)。需要注意的是每个“字”或"词"都有且仅有一个数与其对应,且二者的编号是独立的!

test_set.csv:此数据用于测试。数据格式同train_set.csv,但不包含class。 注:test_set与train_test中文章id的编号是独立的。 

 

二.数据读取

import pandas  as pd
#数据预处理,从硬盘上读取数据

trainData = pd.read_csv('./new_data/train_set.csv')
print('trainData.shape = ', trainData.shape) #训练集数据大小(102277,4)

#观察数据的前10行

print(trainData[:10])

 

   id                                            article  \
0   0  7368 1252069 365865 755561 1044285 129532 1053...   
1   1  581131 165432 7368 957317 1197553 570900 33659...   
2   2  7368 87936 40494 490286 856005 641588 145611 1...   
3   3  299237 760651 299237 887082 159592 556634 7489...   
4   4  7368 7368 7368 865510 7368 396966 995243 37685...   
5   5  7368 1160791 299237 1238054 569999 1044285 117...   
6   6  893673 7368 836872 674898 231468 856005 105964...   
7   7  1122654 125310 907560 1172361 979583 983951 12...   
8   8  793790 599682 1223643 1030656 569999 178976 45...   
9   9  7368 1120647 360394 79747 1140778 472252 7368 ...   

                                            word_seg                                  class  
0  816903 597526 520477 1179558 1033823 758724 63...     14  
1  90540 816903 441039 816903 569138 816903 10343...      3  
2  816903 1012629 957974 1033823 328210 947200 65...     12  
3  563568 1239563 680125 780219 782805 1033823 19...     13  
4  816903 816903 816903 139132 816903 312320 1103...     12  
5  816903 669476 21577 520477 1004165 4184 616471...     13  
6  277781 816903 1098157 986174 1033823 780491 10...      1  
7  289186 640942 363388 585102 261174 1217680 520...     10  
8  1257015 966562 1054308 599826 811205 520477 28...     10  
9  816903 266069 1226448 1276450 816903 769051 12...     19 

 
testData = pd.read_csv('./new_data/test_set.csv')
print('testData.shape = ', testData.shape) # 测试集数据大小(102277,3)

#观察数据整体信息,判断数据的完整性

trainData.info()

testData.info()


RangeIndex: 102277 entries, 0 to 102276
Data columns (total 4 columns):
id          102277 non-null int64
article     102277 non-null object
word_seg    102277 non-null object
class       102277 non-null int64
dtypes: int64(2), object(2)
memory usage: 3.1+ MB

RangeIndex: 102277 entries, 0 to 102276
Data columns (total 3 columns):
id          102277 non-null int64
article     102277 non-null object
word_seg    102277 non-null object
dtypes: int64(1), object(2)
memory usage: 2.3+ MB
 

#观察训练样本中数据分布情况及各个类别对应的样本数量,判断是否存在样本不均衡的问题

print(trainData['class'].describe())
print(trainData['class'].value_counts())

count    102277.000000
mean         10.262356
std           5.370785
min           1.000000
25%           6.000000
50%          10.000000
75%          15.000000
max          19.000000
Name: class, dtype: float64

3     8313
13    7907
9     7675
15    7511
18    7066
8     6972
6     6888
14    6740
19    5524
1     5375
12    5326
10    4963
4     3824
11    3571
16    3220
17    3094
7     3038
2     2901
5     2369
Name: class, dtype: int64

通过上面的数据能够发现数据分布比较均匀,同时各个类别对应的样本数量较大,类别3与类别5对应的样本数量差距也确实很大,呈现出一定的不均衡性

3. 数据拆分

文本识别过程,如果训练过程是用文本的每个“字”作为输入数据,首先效率会很低,其次准确率会较低,因为根本无法体现出上下文的联系,这样的话就要把正文里的”词“都分出来,同时每个词对应”词典“里的一个数,即把单词数字化,这个过程也叫脱敏。需要注意分词的效果对模型和结果影响很大,幸运的是“word_seg”对应的数据就是已经分词的,可以直接拿来使用。

X_train, X_test, y_train, y_test = train_test_split(trainData[['word_seg']], trainData['class'], test_size=0.3, random_state=2019)
print(X_train[:10])
print(X_train.shape)

 

 

 

 

你可能感兴趣的:(“达观杯”文本智能处理挑战赛--数据初识)