数据读取
数据的每一列都是以\t为分割的字符
import pandas as pd
data=pd.read_csv('train_set.csv',sep='\t')
data.head()
数据可视化与分析
新闻长度分析
train_df['text_len']=train_df['text'].apply(lambda x: len(x.split(' ')))
print(train_df['text_len'].describe())
每条新闻平均由907个字符构成,最短的长度为2,最长的长度为57921
#将句子长度绘制直方图(直方图分为bins个柱体)
import matplotlib.pyplot as plt
_ =plt.hist(train_df['text_len'],bins=200)
plt.xlabel('Text char count')
plt.title('Histogram of char count')
新闻类别分类分析
train_df['label'].value_counts().plot(kind='bar')
plt.xlabel('category')
plt.title('News class count')
字符分布统计
函数及功能介绍
1)str.join(sequence)
返回通过指定字符连接序列中元素后生成的新字符串
2)Counter(sequence)
实现计数功能,即sequence中每个元素出现的次数
3)sorted(sequence,key=x)
把sequence按key排序,如果有reverse=True说明是降序
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])
#出现最少的字
print(word_count[-1])
6869
(‘3750’,7482224)
(‘3133’,1)
#因为标点符号在每个句子中都出现,所以下为统计不同字符在句子中出现的次数
#(所以需要set一下,让每个句子中每个字符只出现一次)
from collections import Counter
train_df['text_unique']=train_df['text'].apply(lambda x: ' '.join(list(set(x.split(' ')))))
all_lines=' '.join(list(train_df['text_unique']))
print(word_count[0])
print(word_count[1])
print(word_count[2])
(‘3750’,197997)
(‘900’,197653)
(‘648’,191975)
作业
假设字符3750,字符900和字符648是句子的标点符号,请分析赛题每篇新闻平均由多少个句子构成?
p=['3750','900','648']
def ct_sts(x):
l=x.split()
return len(list(filter(lambda w: w in p,l)))+1
data['sentences']=data['text'].apply(ct_sts)
print(data['sentences'].describe())
2)
统计每类新闻中出现次数最多的字符
def get_most(x):
d=data.query('label=={}'.format(x))
all_=' '.join(list(d['text']))
wc=Counter(list(filter(lambda w: w not in p,all_.split())))
return sorted(wc.items(),key=lambda x:x[1],reverse=True)[0]
for i in set(data['label']):
print('label {}: {}'.format(i,get_most(i)))