数据读取
对于该数据集的读取基于pandas库。
import pandas as pd
train_df=pd.read_csv('C:/Users/Administrator/Desktop/wenbenfenlei/train_set.csv',sep='\t')
train_df.head()
第一行导入pandas工具库,第二行读取csv格式的训练集文件,第三行显示前五行的数据。结果如下:
label | text |
---|---|
2 | 2967 6758 339 2021 1854 3731 4109 3792 4149 15… |
11 | 4464 486 6352 5619 2465 4802 1452 3137 5778 54… |
3 | 7346 4068 5074 3747 5681 6093 1777 2226 7354 6… |
2 | 7159 948 4866 2109 5520 2490 211 3956 5520 549… |
3 | 3646 3055 3055 2490 4659 6065 3370 5814 2465 5… |
数据分为两列,一列是分类标签,一列是字符文本。
数据分析
句子长度分布
赛题数据中每行句子的字符由空格隔开,可以直接统计句子的长度。
%pylab inline
train_df['text_len']=train_df['text'].apply(lambda x:len(x.split(' ')))
train_df['text_len'].describe()
得到的描述性统计数据如下:
从中可以清晰看到句子长度情况,平均长度为907个字符,最短2个字符,最长达到57921个字符。
新闻类别分布
train_df['label'].value_counts().plot(kind='bar')
plt.title('新闻类别分布')
plt.xlabel('category')
可视化结果如下:
结合标签对应关系:
{‘科技’: 0, ‘股票’: 1, ‘体育’: 2, ‘娱乐’: 3, ‘时政’: 4, ‘社会’: 5, ‘教育’: 6, ‘财经’: 7, ‘家居’: 8, ‘游戏’: 9, ‘房产’: 10, ‘时尚’: 11, ‘彩票’: 12, ‘星座’: 13}
可知这次数据集中科技类新闻最多,其次是股票类,星座类新闻最少。
字符分布
接下来统计一下每个字符出现的次数:
from collections import Counter
all_lines = ' '.join(list(train_df['text']))
word_count = Counter(all_lines.split(" "))
word_count = sorted(word_count.items(), key=lambda d:d[1], reverse = True)
print(len(word_count))
print(word_count[0:2])
结果显示字符3750、900、648出现频率最高,总覆盖率接近99%,因此推断可能是标点符号,因此假设这三个字符为标点符号,统计每篇新闻包含的句子数量。首先用re匹配对应的字符并进行分隔,然后就可以统计句子数量了。
import re
train_df['text_sentence']=train_df['text'].apply(lambda x:re.split('3750|900|648',x))
train_df['text_sentence_count']=train_df['text_sentence'].apply(lambda x:len(x))
print(train_df['text_sentence_count'].describe())
可以看到,平均句子数量为80,最小只有1句,最长有3460句。
如果想要统计每类新闻中出现频率最高的字符,应该是可以按照标签将新闻文本进行字符拼接,然后同理进行统计分析,因为内存不够这里就没实现了。
总结
Task2主要是针对该数据集进行简单的一些特征分析,为之后的处理提供一个大概的轮廓,接下来就需要对数据进行深入处理,以实现分类任务。