做文本挖掘分词的时候很多的时候,都需要统计一下文本的长度,之前自己做的时候很头疼,画的头疼。
今天看到了一个新的绘图方法很好,记录一下。
import pandas as pd
import matplotlib.pyplot as plt
from itertools import accumulate
查看数据
# 统计句子长度及长度出现的频数
df = pd.read_csv('./data_single.csv')
print(df.groupby('label')['label'].count())
# 统计样本长度
df['length'] = df['evaluation'].apply(lambda x: len(x))
len_df = df.groupby('length').count()
sent_length = len_df.index.tolist()
sent_freq = len_df['evaluation'].tolist()
plt.rcParams['font.sans-serif']=['SimHei'] #图中文字体设置为黑体
# 绘制句子长度及出现频数统计图
plt.figure(figsize=(10,12))
plt.bar(sent_length, sent_freq,2)
plt.title("句子长度及出现频数统计图", )
plt.xlabel("句子长度")
plt.ylabel("句子长度出现的频数")
plt.savefig("./句子长度及出现频数统计图.png")
plt.show
绘制长度累积函数
#绘制句子长度累积分布函数(CDF)
sent_pentage_list = [(count/sum(sent_freq)) for count in accumulate(sent_freq)]
plt.figure(figsize=(10,12))
# 绘制CDF
plt.plot(sent_length, sent_pentage_list)
# 寻找分位点为quantile的句子长度
quantile = 0.90
for length, per in zip(sent_length, sent_pentage_list):
if round(per, 2) == quantile:
index = length
break
print("\n分位点为%s的句子长度:%d." % (quantile, index))
# 绘制句子长度累积分布函数图
plt.plot(sent_length, sent_pentage_list,linewidth=4)
plt.hlines(quantile, 0, index, colors="c", linestyles="dashed",linewidth=4)
plt.vlines(index, 0, quantile, colors="c", linestyles="dashed",linewidth=4)
plt.text(0, quantile, str(quantile),fontsize=10)
plt.text(index, 0, str(index))
plt.title("句子长度累积分布函数图",fontsize=20)
plt.xlabel("句子长度",fontsize=15)
plt.ylabel("句子长度累积频率",fontsize=15)
plt.savefig("./句子长度累积分布函数图.png")
plt.show