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

本文介绍了NLP入门中的数据读取,分析了新闻的平均字符长度,探讨了新闻类别和字符分布。每条新闻平均907个字符,最长57921个。同时,讲解了Python中的str.join()、Counter和sorted()函数,并提出了作业,包括计算新闻的平均句子数和各类新闻中最常出现的字符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据读取

数据的每一列都是以\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)))

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值