使用Python制作字符串值的直方图。

9

好的,所以我有六个可能的数据值分别为'32'、'22'、'12'、'31'、'21'和'11'。 我将它们存储为字符串。 Python是否可以对数据进行排序并将其分成六个箱子,并显示每个箱子中有多少个? 或者直方图的输入必须是数字吗?


3
条形图和直方图是有区别的。在这里,使用条形图是合适的,而使用直方图则不合适。 - Waleed Khan
好的,但如果我使用条形图,我是否需要手动排序每个数据以确定它属于哪个类别,然后再绘制?是否有一种像直方图那样自动排序的方法? - Catherine Georgia
“like the histogram does”是什么意思?我不知道是否有Python直方图库? - Waleed Khan
如果你有一个字符串列表,你可以很容易地将它们转换为整数:listOfInts = map(int,listOfStrs) - Matt
请查看此帖子:https://dev59.com/2lzUa4cB1Zd3GeqP34N-,在遵循Matt的建议(将所有内容转换为整数)后。 - user648129
4个回答

15
data =  ['32', '22', '12', '32', '22', '12', '31', '21', '11']
dict((x, data.count(x)) for x in data)

结果

{'11': 1, '12': 2, '21': 1, '22': 2, '31': 1, '32': 2}

8
你考虑过使用 collections.Counter 吗?
# python 2.7
>>> l = ['32', '22', '12', '31', '21', '11', '32']
>>> import collections
>>> collections.Counter(l)
Counter({'32': 2, '11': 1, '12': 1, '21': 1, '22': 1, '31': 1})

谢谢,这看起来非常有用,但可惜我似乎还在使用Python 2.6.6版本。 - Catherine Georgia

2
data =  ['32', '22', '12', '32', '22', '12', '31', '21', '11']
sm = {i:0 for i in ['32', '22', '12', '31', '21','11']}
for i in data:
    sm[i] += 1
print sm

像这样的内容吗?

0
假设 data 是一个列表,你想要计算每个区间内的数字数量。我将使用 bins 作为一个字典。
bin = {'11': 0, '12': 0, '21': 0, '22': 0, '31': 0, '32': 0}

for element in data:
    if element in bin:  # Ignore other elements in data if any
        bin[element] = bin[element] + 1

bins 字典将包含数据列表中每个元素的频率。现在,您可以使用图形绘制库来使用 bins 绘制条形图。也许您可以使用此 post 来检查 matplotlib 用于绘制条形图的用法。


1
列表推导式是Pythonic的,而显式循环则不是。 - user647772
人们对什么是Pythonic感到困惑 - 它意味着“在Python中易于编写,阅读和理解”或“符合Python风格”。您的代码符合C / Java / ...的惯用语。 - user647772
你声称这段代码不遵守这个定义是错误的。 - user648129
我不想再讨论这个问题了。但是我不同意你的说法。谢谢。 - user648129
另请参见http://stackoverflow.com/questions/58968/what-defines-pythonian-or-pythonic。 - user647772

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接