NLP入门——天池新闻文本分类(2)数据读取与数据分析

数据读取与数据分析

本章内容为数据读取与数据分析,使用Pandas完成数据读取,并对数据构成进行分析

学习目标

  1. 使用Pandas完成赛题数据的读取
  2. 分析赛题数据的分布情况

数据读取

数据集的大小为训练集20w条新闻,测试A集为5w条,测试B集为5w条

import pandas as pd
train_df = pd.read_csv('../input/train_set.csv', sep='\t')

赛题训练数据示例:

label text
6 57 44 66 56 2 3 3 37 5 41 9 57 44 47 45 33 13 63 58 31 17 47 0 1 1 69 26 60 62 15 21 12 49 18 38 20 50 23 57 44 45 33 25 28 47 22 52 35 30 14 24 69 54 7 48 19 11 51 16 43 26 34 53 27 64 8 4 42 36 46 65 69 29 39 15 37 57 44 45 33 69 54 7 25 40 35 30 66 56 47 55 69 61 10 60 42 36 46 65 37 5 41 32 67 6 59 47 0 1 1 68

标签与类别对应关系如下:{‘科技’: 0, ‘股票’: 1, ‘体育’: 2, ‘娱乐’: 3, ‘市政’: 4, ‘社会’: 5, ‘教育’: 6, ‘财经’: 7, ‘家居’: 8, ‘游戏’: 9, ‘房产’: 10, ‘时尚’: 11, ‘彩票’: 12, ‘星座’: 13}

数据分析

这一步我们希望通过数据分析得到的结论有这些:

  1. 赛题数据中,新闻文本的长度是多少
  2. 赛题数据新闻的类别分布,各个类别的新闻数量
  3. 赛题数据中,文本字符的分布

1.新闻文本长度

因为text文本列的数据是以空格符号分割开的,所以我们对text先spilt(' '),然后用len求长度

%pylab inline
train_df['text_len'] = train_df['text'].apply(lambda x:len(x.split(' ')))
train_df['text_len'].describe()

统计结果如下

count    200000.000000
mean        907.207110
std         996.029036
min           2.000000
25%         374.000000
50%         676.000000
75%        1131.000000
max       57921.000000
Name: text_len, dtype: float64

从统计结果可以看出,赛题数据文本总体较长,平均一条新闻由907个字符构成,最短新闻长度为2,最长的新闻长度为57921。
我们 使用hist()作直方图来看句子长度分布,可以看到大部分的句子长度在2000以内。

import matplotlib.pyplot as plt
_ = plt.hist(train_df['text_len'], bins=200) # 文本字符长度直方图
plt.xlabel('Text char count')
plt.title("Histogram of char count")

在这里插入图片描述

2.新闻类别分类

统计每类新闻的样本数

train_df.groupby('label').agg({
   'label':['count'], 'text_len':['max', 'min', 'mean']})
		label		text_len
		count		max		min	mean
label				
0		38918		18587	12	878.717663
1		36945		57921	9	870.363676
2		31425		41894	2	1014.429562
3		22133		10817	17	784.774726
4		15016		14928	25	649.705647
5		12232		15839	27	1116.054938
6		9985		25728	16	1249.114071
7		8841		14469	11	1157.883271
8		7847		15271	7	712.401172
9		5878		23866	17	833.627084
10		4920		20622	14	911.138008
11		3131		5729	21	608.889812
12		1821		8737	25	1194.969248
13		908			6399	26	735.325991
train_df['label'].value_counts().plot(kind='bar') # 新闻类别分布柱状图
plt.title('News class count')
plt.xlabel("category")

在这里插入图片描述
从统计结果可以看出,赛题数据集类别分布并不均匀,科技类新闻最多,其次是股票类,最少的星座类新闻。

3.字符分布统计

我们可以将所有新闻用空格相连,随后使用split(' ')分割为列表,进而使用Counter统计字符词频

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(
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值