零基础入门NLP-Task02数据读取与数据分析

一、数据读取与数据分析

学习目标
1.学习使用pandas读取赛题数据
2.分析赛题数据的发布规律

1.数据读取

import pandas as pd
train_df = pd.read_csv('C:/Users/BAO/Desktop/天池/train_set.csv/train_set.csv', sep='\t', nrows=100)
train_df.head()

2.数据分析

2.1句子长度分析

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


本次赛题给定的文本比较长,每个句子平均有907个字符构成,最短的句子长度为2,最长的句子长度为57921

_ = plt.hist(train_df['text_len'], bins=200)
plt.xlabel('Text char count')
plt.title("Histogram of char count")

下图将句子长度绘制了直方图,可见大部分句子长度都在2000以内

2.2新闻类别发布

train_df['label'].value_counts().plot(kind='bar')
plt.title('News class count')
plt.xlabel("category")


从统计结果可以看出,赛题的数据集类别发布存在较为不均匀的情况。在训练集中科技类新闻最多,星座类最少

2.3字符发布统计

【刚开始是直接对全部数据进行字符统计分析,结果显示memoryerror(七千元的轻薄本电脑带不动啊!!!)
使用截取了数据的前四分之一数据分析

好奇这个数据有多大

train_df.info()

在这里插入图片描述
200000数据条,太大了

train_df1=train_df.loc[:50000,:]
from collections import Counter
all_lines = ' '.join(list(train_df1['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])
print(word_count[-1])
print(word_count[1])
print(word_count[2])


从统计结果可以看出,训练集(只提取了前50000个数据)总共包括6180个字,其中编号3750的字出现的次数最多,编号1766的字出现的次数最少。
字符3750 ,648, 900出现次数多,很可能是标点符号。

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

2.4数据分析的结论

通过上述分析我们可以得出以下结论:
1.赛题中每个新闻包括的字符个数平均为900个,还有一些新闻字符较长;
2.赛题中新闻类别发布不均匀,科技类新闻样本量接近4W,星座类新闻样本量不到1K;
3.赛题总共包括6000-7000个字符;

2.5本章作业

对pandas的操作真的一点都不懂啊
但是好像上面对句子长度分析时通过识别空格来统计单词的个数
看看代码
在这里插入图片描述
我看见什么了!!!空格!!!
大师我悟了!!!

接下来事情就简单起来了

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

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


2.
好像上面也有类似的操作,但是不同点或者关键在是每类新闻,去网上补补Pandas的知识再来看看

恶补pandas知识,觉得有点思路了
试了多次,整出来了

def get_first1(x):
    from collections import Counter
    all_lines = ' '.join(list(x['text']))
    word_count = Counter(all_lines.split(" "))
    word_count = sorted(word_count.items(), key=lambda d:d[1], reverse = True)
    return(word_count[0])
    
df=train_df.groupby(['label']).apply(get_first1).reset_index()
  
print(df)  

结果如图

结果出来的时候确实很有成就感,pandas挺好玩的!

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值