NLP-Task 2 数据读取与分析

前言

本篇主要进行数据的读取与分析工作。

2.1 数据读取与分析

2.1.1 数据读取

在这里插入图片描述
首先进行数据读取,采用pandas库的read_csv将前100行读下来,以“\t”进行分隔,显示前五行。
第一列为系统生成的索引,第二列为文本的标签,第三列为文本经匿名处理后的结果,每一行代表一条文本。

2.1.2 数据分析

数据分析的三个目标:

  1. 赛题数据中,新闻文本的长度是多少?
  2. 赛题数据的类别分布是怎么样的,哪些类别比较多?
  3. 赛题数据中,字符分布是怎么样的?

2.1.2.1 句子长度分析

在这里插入图片描述
可以看出,文本最长为57921,最短为2,平均长度为907,句子长度相对较长。
在这里插入图片描述

2.1.2.2 新闻类别分布

在这里插入图片描述
文本一共13类,其中0类科技最多,13类星座最少。

2.1.2.3 字符分布统计

资料中提供的采用Counter的方法,需要将20w行的数据进行拼接,然后以空格进行分隔的方式导致占用很大内存,效率较低。

train_tfr = pd.read_csv('data/train_set.csv', sep='\t', chunksize=20000)
for chunk in train_tfr:
    do_sometime(chunk) # 这里的chunk是DataFrame,和下面的操作一样,不过需要额外变量以整合所有分块的统计数据

经过计算发现,字符3750,字符900和字符648在20w新闻的覆盖率接近99%,很有可能是标点符号。
此外,一共出现了6869个词。
在这里插入图片描述

2.1.2.4 数据分析的结论

  1. 赛题中每个新闻包含的字符个数平均为1000个,也有些达到5w+;
  2. 赛题中新闻类别分布不均匀,文本共13类,科技类新闻样本量接近4w,星座类新闻样本量不到1k;
  3. 赛题总共包括6869个字符;
  4. 由于类别不均衡,会严重影响模型的精度,在后续过程中可能考虑对样本的分布进行处理。

2.2 Task2 作业

(1)假设前面说的字符3750,字符900和字符648是句子的标点符号,请分析赛题每篇新闻平均由多少个句子构成?
引入re库,将3750、900和648作为句子的分界,并计算每篇新闻由多少个句子构成。
在这里插入图片描述
可以看出,平均每篇新闻的句子数为80.8,最大的句子个数为3460,最小的句子由一句话构成。

(2)统计每类新闻中出现次数最多的字符。

train_df = pd.read_csv(r'Data/train_set.csv', sep='\t')
for i in range(0, 14):
    df = train_df[train_df['label'] == i]['text']
    biaodian = ['3750', '900', '648']
    df_2 = df.apply(lambda x: [i for i in x.split(' ') if i not in biaodian])
    all_lines = str(df_2.values.tolist())
    word_count = Counter(all_lines.split(" "))  # 统计数字和出现次数
    word_count = sorted(word_count.items(), key=lambda d: d[1], reverse=True)  # 排序
    print(i, word_count[0])  # 新闻类,次数最多的字符及次数

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值