零基础入门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挺好玩的!