python统计千万级以上文本数据字频的一种思路

python统计千万级以上文本数据字频的一种思路

有个研究项目需要统计jieba分词结果的高频词并统计字频,之前一直利用python的字典格式特性及 not in 方式进行统计,代码片段如下:

#创建空字典
word_dict = {}
#result为包含需进行统计的数据列表
for item in result:
    if item not in word_dict:
        word_dict[item] = 1
    else:
        word_dict[item] += 1
#针对word_dict内的vlave值降序排列
word_dict_sort = sorted(word_dict.items(), key=lambda asd: asd[1], reverse=True)
for key in word_dict_sort:
    wf2.writerow([key[0], key[1]])  #写入文件

这种思路在对少量数据进行统计时比较灵活,但在遇到海量数据时就会出现运算时间过长的问题,手头正好有一个2亿条数据量的词频统计需求,按照上面的思路,大概需要4个小时完成,因此只好转化思路,利用pandas和numpy来快速读 取数据并转换为list格式,利用collections库对文本list进行计数处理,具体代码如下:

# encoding=utf-8
import csv
import collections
import numpy as np
import pandas as pd

csv.field_size_limit(2147483647)
#生成词袋库
wf2 = csv.writer(open("file.csv", 'w', newline='', encoding='utf8'))
wf2.writerow(['no.','word','count'])

data = pd.read_csv("E:\\jieba_words_data.csv")  #使用pd读取源文件
print('单词读取完毕')
train_data = np.array(data.T)    #源文件为一维数据,需要对data进行倒置处理,data.T
train_x_list=train_data.tolist() #利用tolist()函数进行列表转化
print('单词入库,开始计数')
all_words = collections.Counter(train_x_list[0])  #利用Counter函数进行字频快速统计
print('计数处理完毕')
all_words_dict = dict(all_words)   #将class格式转化为dict格式
print('字典转换完毕')
word_dict_sort = sorted(all_words_dict.items(), key=lambda item: item[1], reverse=True) #排序
print('排序转换完毕')
i = 1
for key in word_dict_sort:
    wf2.writerow([i, key[0], key[1]])  #写入文件
    i = i+1
    print('正在写入'+str(i)+'条单词')

结果证明以上思路是基本符合需求的,2亿条的数据量,字频统计时间大概在120s左右,文本写入时间大概在300s左右,处理效率有很大提升。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值