我创建了一个随机文本文件(我只是在记事本上随机输入了约3500个字符),我的代码必须读取输入的字符的频率并制作直方图-我已经完成了,但现在我需要我的代码读取字符之间的转换频率(例如,“ r”跟随“ a”的次数或空格跟随“ a”的次数),然后在图表或图表中显示。如何显示过渡或计算这些过渡的频率?
f = open('Text-File-HW2.txt', 'r')
data = f.read()
f.close()
range(len(data))
range(0, 5132)
d = {}
for i in range(len(data)):
c = data[i]
if c in d:
d[c] += 1
else:
d[c] = 1
d
{'s': 86,
'j': 139,
'k': 55,
'm': 15,
'f': 347,
'n': 66,
' ': 569,
'd': 69,
'v': 83,
'o': 48,
'A': 2,
'Q': 1,
'H': 1,
'P': 1,
'E': 1,
'J': 3,
'R': 1,
'N': 4,
'V': 2,
'F': 1,
'L': 1,
'I': 2,
'O': 2,
'D': 1,
'S': 1,
'i': 318,
'r': 496,
'e': 560,
'a': 34,
'w': 332,
'h': 457,
'b': 244,
'c': 24,
'g': 241,
'u': 495,
'9': 8,
'3': 16,
'4': 28,
'8': 17,
'5': 9,
't': 63,
'l': 7,
';': 1,
'q': 41,
'y': 223,
'p': 7,
'[': 1,
'7': 9}
result = list(d.items())
result.sort()
result
[(' ', 569),
('3', 16),
('4', 28),
('5', 9),
('7', 9),
('8', 17),
('9', 8),
(';', 1),
('A', 2),
('D', 1),
('E', 1),
('F', 1),
('H', 1),
('I', 2),
('J', 3),
('L', 1),
('N', 4),
('O', 2),
('P', 1),
('Q', 1),
('R', 1),
('S', 1),
('V', 2),
('[', 1),
('a', 34),
('b', 244),
('c', 24),
('d', 69),
('e', 560),
('f', 347),
('g', 241),
('h', 457),
('i', 318),
('j', 139),
('k', 55),
('l', 7),
('m', 15),
('n', 66),
('o', 48),
('p', 7),
('q', 41),
('r', 496),
('s', 86),
('t', 63),
('u', 495),
('v', 83),
('w', 332),
('y', 223)]
from pylab import *
cs = [x[0] for x in result]
fs = [x[1] for x in result]
bar(cs, fs,)
<BarContainer object of 48 artists>
答案 0 :(得分:1)
我认为这是最Python化的方式(假设您最后要使用dict
)
with open('Text-File-HW2.txt', 'r') as f:
data = f.read()
d = dict(Counter(zip(data[:-1], data[1:])))
打破现状:
zip(data[:-1], data[1:])
基本上会为您提供所有字母对的列表。
Counter(['aa', 'a ', ' a', 'aa')])
会为您提供类似于Counter({'aa': 2, 'a ', 1: ' a': 1})
的东西。