10.3 实战项目三:英文词频统计
项目目标
读取一篇英文文章,统计每个单词出现的次数,输出出现频率最高的前 10 个单词。
这是数据处理的入门第一课——"统计"是数据分析的原点。
用到的知识:文件读取、字符串处理、字典计数、排序。
准备测试数据
在代码同目录创建 article.txt,随便放一段英文,比如:
Python is powerful and fast. Python plays well with others.
Python runs everywhere. Python is friendly and easy to learn.
Python is open. That is why we love Python.
思路拆解
- 读取文件内容为一个字符串
- 统一转成小写(
Python和python应算同一个词) - 去掉标点符号
- 按空格拆分成单词列表
- 用字典计数(第 4.3 节学过的套路)
- 按次数排序,取前 10
完整代码
# word_count.py — 英文词频统计
def read_text(filename):
"""读取文件内容"""
with open(filename, "r", encoding="utf-8") as f:
return f.read()
def clean_text(text):
"""转小写并去掉标点"""
text = text.lower()
for ch in ",.!?;:\"'()[]":
text = text.replace(ch, " ")
return text
def count_words(text):
"""统计每个单词出现的次数,返回字典"""
counter = {}
for word in text.split():
counter[word] = counter.get(word, 0) + 1
return counter
def main():
text = read_text("article.txt")
text = clean_text(text)
counter = count_words(text)
# 按出现次数从大到小排序
sorted_words = sorted(counter.items(), key=lambda x: x[1], reverse=True)
print(f"共 {len(counter)} 个不同的单词,出现最多的前 10 个:\n")
print(f"{'单词':<15}次数")
print("-" * 20)
for word, count in sorted_words[:10]:
print(f"{word:<15}{count}")
if __name__ == "__main__":
main()
运行结果类似:
共 22 个不同的单词,出现最多的前 10 个:
单词 次数
--------------------
python 6
is 4
and 2
...
三个新知识点
1. get() 计数法,比 if/else 版更简洁:
counter[word] = counter.get(word, 0) + 1
# 含义:取 word 当前的次数(没有就当 0),加 1 后存回去
2. sorted + lambda 排序:
sorted(counter.items(), key=lambda x: x[1], reverse=True)
counter.items()把字典变成[("python", 6), ("is", 4), ...]这样的键值对序列key=lambda x: x[1]意思是"按每一项的第 1 号元素(即次数)排序"。lambda是一种一行的迷你函数,lambda x: x[1]等价于:
def get_count(x):
return x[1]
reverse=True从大到小
3. 格式化对齐:f"{word:<15}" 表示左对齐、占 15 个字符宽度,用于排出整齐的表格。
挑战任务
- 排除无意义的常见词(the、is、a、and 等):建一个"停用词"集合,统计时跳过。
- 把统计结果写入
result.txt而不是打印。 - 让用户输入文件名来指定要分析哪个文件,文件不存在时友好提示。
- (进阶)中文文章能直接用这套方法吗?为什么?(提示:中文词与词之间没有空格。业界用
jieba分词库解决,感兴趣可以pip install jieba试试。)
毕业寄语
三个项目做完,你已经具备了独立编写小程序的能力!🎓
接下来的建议:
- 多写:想到什么小工具就动手做(自动整理文件夹、生日提醒、密码生成器……)
- 选方向:办公自动化、爬虫、数据分析、Web 开发,选一个感兴趣的方向深入
- 学会查资料:官方文档、搜索引擎和 AI 助手都是你的好朋友