制定任意英文文章的文本文件,使用pandas统计文章中每个单词出现的次数,保留形如“60”的数字、形如“self- distrust”中间的连字符、形如“isn‘t”中间的撇号,统计结果按照出现次数降序再按照单词字典序排序,将统计结果保存到csv文件中,并使用水平柱状图显示出现次数最多的十个单词
时间: 2024-02-05 09:12:29 浏览: 109
以下是一个示例代码,实现了上述要求:
```python
import pandas as pd
import re
import matplotlib.pyplot as plt
# 读入文本文件
with open('article.txt', 'r') as f:
text = f.read()
# 使用正则表达式分词
words = re.findall(r'\d+|\w+(?:-\w+)*|\w+(?:\'\w+)*', text)
# 统计单词出现次数
word_counts = pd.Series(words).value_counts().sort_values(ascending=False)
# 保存到csv文件
word_counts.to_csv('word_counts.csv', header=['count'])
# 取前十个单词作为水平柱状图的数据
top_words = word_counts.head(10)
plt.barh(top_words.index, top_words.values)
plt.gca().invert_yaxis()
plt.show()
```
需要注意的是,这里使用了正则表达式对文本进行分词,分别匹配了数字、带连字符的单词以及带撇号的单词。统计单词出现次数时,使用了pandas的Series对象,方便进行排序和保存到csv文件。最后,使用matplotlib库绘制水平柱状图展示出现次数最多的前十个单词。
相关问题
制定任意英文文章的文本文件,使用pandas统计文章中每个单词出现的次数,保留数字,连字符,撇号,统计结果按照出现次数降序再按照单词字典序排序,将统计结果保存到csv文件中,并使用水平柱状图显示出现次数最多的十个单词
以下是一个例子,可以根据需要进行修改:
```python
import pandas as pd
import matplotlib.pyplot as plt
# 读取文本文件
with open('example.txt', 'r') as f:
text = f.read()
# 将文本转换为小写并移除标点符号
text = text.lower()
text = text.replace('-', ' ')
text = text.replace("'", '')
text = ''.join(c for c in text if c.isalnum() or c.isspace())
# 将文本拆分为单词列表
words = text.split()
# 统计每个单词出现的次数
word_counts = {}
for word in words:
if word in word_counts:
word_counts[word] += 1
else:
word_counts[word] = 1
# 将统计结果转换为DataFrame并按照要求排序
df = pd.DataFrame.from_dict(word_counts, orient='index', columns=['count'])
df = df.sort_values(by=['count', df.index.name], ascending=[False, True])
# 保存统计结果到csv文件
df.to_csv('word_counts.csv')
# 绘制水平柱状图
top_words = df.head(10)
plt.barh(top_words.index, top_words['count'])
plt.xlabel('Count')
plt.ylabel('Word')
plt.title('Top 10 Words by Count')
plt.show()
```
注意,这只是一个简单的例子,实际使用时可能需要考虑更多的情况,例如处理缩写、停用词等。
指定任意英文文章的文本文件(本次实验使用“Youth.txt”),使用pandas统计文章中每个单词出现的次数, 单词统计时,保留形如“60”的数字、形如“self-distrust”中间的连字符、形如“isn't”中间的撇号, 统计结果先按照单词出现次数降序再按照单词字典序排序,将统计结果保存到csv文件“Youth.csv”中, 并使用水平柱状图显示出现次数最多的10个单词。根据这些要求写出Python代码
以下是实现这个任务的Python代码:
```python
import pandas as pd
import re
import matplotlib.pyplot as plt
# 读取文章内容
with open('Youth.txt', 'r') as f:
text = f.read()
# 去除非字母、数字、连字符、撇号的字符
text = re.sub(r'[^\w\-\'\d]+', ' ', text)
# 将所有字母转换为小写,以便统一计数
text = text.lower()
# 将形如"60"的数字、形如"self-distrust"中间的连字符、形如"isn't"中间的撇号保留
text = re.sub(r'(\d+)|(\w+\-\w+)|(\w+\'\w+)', r'\1\2\3 ', text)
# 将文章内容拆分为单词列表
words_list = text.split()
# 使用pandas统计单词出现次数
words_df = pd.DataFrame(words_list, columns=['word'])
word_count = words_df.groupby('word').size().reset_index(name='count')
# 按照单词出现次数降序再按照单词字典序排序
word_count = word_count.sort_values(by=['count', 'word'], ascending=[False, True])
# 将统计结果保存到csv文件中
word_count.to_csv('Youth.csv', index=False)
# 取出现次数最多的10个单词,绘制水平柱状图
top_10 = word_count.head(10)
plt.barh(top_10['word'], top_10['count'])
plt.show()
```
这段代码首先使用`re`模块去除文章中的非字母、数字、连字符、撇号的字符,然后将所有字母转换为小写,以便统一计数。接下来,将形如"60"的数字、形如"self-distrust"中间的连字符、形如"isn't"中间的撇号保留,然后使用`pandas`统计单词出现次数,按照要求排序并保存到csv文件中。最后,取出现次数最多的10个单词,绘制水平柱状图。
阅读全文