python统计,计数的三种方法

您所在的位置:网站首页 Python数据表格统计 python统计,计数的三种方法

python统计,计数的三种方法

2024-07-14 00:23| 来源: 网络整理| 查看: 265

统计 统计用什么数据格式 统计的方法: 1. 字典法 2. 哈希表法 3. collections.counter()方法 总结 1. 我们先来说说统计用什么格式:

我们知道python有列表,字典,元组等等等数据格式,究竟哪种格式比较适合用作统计呢? 现在给出一句诗句: 鹅鹅鹅,曲项向天歌,白毛浮绿水,红掌拨清波。

# 先看看列表如果用列表,统计大概就是这个样子: [['鹅', 3],['曲', 1]...]

能看但是不好看。

# 再看看元组,元组的话大概是这样: ('鹅', 3, '曲', 1...)

这样就不是我们正常人想看的了,会显得很乱,而且元组只能看不能改。

# 我们再看看字典格式: {'鹅': 3, '曲', 1...}

这个格式是可以的,字典是能够明了的看到key 和 value 的对应,所以我们在给一篇文章做统计的时候,我们总是考虑使用字典.

2.统计的方法:

在我们知道用字典的时候,我们该怎样操作呢? 这时候,就有很多方法了,我刚学的时候就是纯字典手写,后来知道哈希表之后,觉得哈希表也可以,之后看到collections有个counter方法(数数的方法)然后感觉这三种方法都可以。

(1) 字典 # Author:xueling # 先打开一篇我们要统计的文章,并读取内容 f = open(r'文件地址+文件名', 'r', encoding='utf-8') article = f.read() # 建立一个空字典来存储统计结果 d = {} # 遍历整篇文章 for i in article: d[i] = d.get(i,0) + 1 # 字频统计 # 在此基础上我们还可以做一个排序: ls = sorted(list(d.items()), key= lambda x:x[1], reverse=True) print(d) f.close()

我们用了字典的get方法,代码意思是 遍历整篇文章。 每遇到一个新字,就将新字填入到字典d里面,遇到字典已经包含的字就给这个字对应的value + 1 总体方法就是这样,炒鸡简单。打印一下d:

{'鹅': 3, '曲': 1, '项': 1, '向': 1, '天': 1, '歌': 1, ',': 2, '白': 1, '毛': 1, '浮': 1, '绿': 1, '水': 1, '红': 1, '掌': 1, '拨': 1, '清': 1, '波': 1, '。': 1}

这就是我们想要的结果。

(2)哈希表

首先我们要知道什么是哈希表,其实哈希表跟字典很像,存储数据的方式是一样的都是key:value的键值对。 在我们学算法的时候就会学习到哈希表法。 我们想用哈希表,可以通过导collections的包。

# Author:xueling # 在colletions 导入哈希表的包 from collections import defaultdict # 打开一个要统计的文件 f = open(r'文件路径+文件名', 'r', encoding='utf-8') article = f.read() # d是通过defaultdict生成的一个哈希表,其中value我们给int型的数据类型,来记录字符数 d = defaultdict(int) # article里每一个字我们把它当做哈希表里的key,每有一个字就给value + 1,value默认值就是0 for key in article: d[key] += 1 print(d)

哈希表在很多时候都是很好用的,而且简单易上手,我们来看一下结果:

defaultdict(, {'鹅': 3, '曲': 1, '项': 1, '向': 1, '天': 1, '歌': 1, ',': 2, '白': 1, '毛': 1, '浮': 1, '绿': 1, '水': 1, '红': 1, '掌': 1, '拨': 1, '清': 1, '波': 1, '。': 1})

可以说完美。

(3)collections.counter()方法

这个其实也是一样的,我们用collections里的counter方法,直接去数数文章里的字頻。 其实我们一直都是在数中文的文章,但是呢,我们要想去统计英语文章的词频该怎么办呢? 所以这个方法我们就来试试英语文章的词频统计。

我们给英语单词做统计,首先,我们要想想,怎么样才可以让计算机识别出单词呢? 英语文章里每写一个单词就要空格,每有一个标点符号,就会把单词分隔。这是文章特性,所以我们利用这一点去把单词从文章里分割出来。

# Author:xueling import re import collections # 打开我们要统计的文件,并读取里面的内容 f = open(r"文件路径+文件名",'r',encoding='utf-8') txt = f.read() # 利用正则表达式匹配非英文的内容,并用split方法给隔开 ls = re.split(r'\W+',txt) print(ls) # 然后用collections.Counter()的方法直接数就行了 col = collections.Counter(ls) print(col) # 然后我们在最后看一下最频繁的10个内容 col_max = col.most_common(10) print(col_max)

我在这里使用了正则的方法,去匹配除了字母,数字,下划线的内容(也就是匹配了英语文章里面的标点符号和空格,用作之后的切分),用split给分隔并存入ls里,然后统计ls里的内容就行了。 原文是这样的:

Every day is wonderful, if we work hard. 我们拼尽全力,每天都是精彩。 The water of the Yellow River comes from the sky. 黄河之水天上来。

结果是这样的:

ls: ['Every', 'day', 'is', 'wonderful', 'if', 'we', 'work', 'hard', '我们拼尽全力', '每天都是精彩', 'The', 'water', 'of', 'the', 'Yellow', 'River', 'comes', 'from', 'the', 'sky', '黄河之水天上来', ''] col: Counter({'the': 2, 'Every': 1, 'day': 1, 'is': 1, 'wonderful': 1, 'if': 1, 'we': 1, 'work': 1, 'hard': 1, '我们拼尽全力': 1, '每天 都是精彩': 1, 'The': 1, 'water': 1, 'of': 1, 'Yellow': 1, 'River': 1, 'comes': 1, 'from': 1, 'sky': 1, '黄河之水天上来': 1, '': 1}) col_max: [('the', 2), ('Every', 1), ('day', 1), ('is', 1), ('wonderful', 1), ('if', 1), ('we', 1), ('work', 1), ('hard', 1), ('我们拼尽全力', 1)]

col就是我们要的结果。

总结

这就是以上的三种统计我个人比较喜欢的方法,前两种方法(字典和哈希表)通过简单的改写也可以用来统计英语文章的单词。 第一种方法是最简单的,是我最经常用的一种方法,很方便快捷,很基础。 第二种方法用了哈希表,哈希表是算法里必会的,也挺不错。 最后一种方法是直接用collections.counter()方法,简单粗暴,但是在数的时候记得转成列表形式。

这是我第一篇文章,如果有哪里写的不好,希望各位看客姥爷一定要指出来,指出必改。欢迎大家来评论,分享其他方法。

我是伤病不可救药。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3