国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

教你利用Python玩轉histogram直方圖的五種方法

2020-02-15 22:35:20
字體:
來源:轉載
供稿:網友

直方圖

直方圖是一個可以快速展示數據概率分布的工具,直觀易于理解,并深受數據愛好者的喜愛。大家平時可能見到最多就是 matplotlib,seaborn 等高級封裝的庫包,類似以下這樣的繪圖。

本篇博主將要總結一下使用Python繪制直方圖的所有方法,大致可分為三大類(詳細劃分是五類,參照文末總結):

純Python實現直方圖,不使用任何第三方庫 使用Numpy來創建直方圖總結數據 使用matplotlib,pandas,seaborn繪制直方圖

下面,我們來逐一介紹每種方法的來龍去脈。

純Python實現histogram

當準備用純Python來繪制直方圖的時候,最簡單的想法就是將每個值出現的次數以報告形式展示。這種情況下,使用 字典 來完成這個任務是非常合適的,我們看看下面代碼是如何實現的。

>>> a = (0, 1, 1, 1, 2, 3, 7, 7, 23)>>> def count_elements(seq) -> dict:... """Tally elements from `seq`."""... hist = {}... for i in seq:...  hist[i] = hist.get(i, 0) + 1... return hist>>> counted = count_elements(a)>>> counted{0: 1, 1: 3, 2: 1, 3: 1, 7: 2, 23: 1}

我們看到,count_elements() 返回了一個字典,字典里出現的鍵為目標列表里面的所有唯一數值,而值為所有數值出現的頻率次數。hist[i] = hist.get(i, 0) + 1 實現了每個數值次數的累積,每次加一。

實際上,這個功能可以用一個Python的標準庫 collection.Counter 類來完成,它兼容Pyhont 字典并覆蓋了字典的 .update() 方法。

>>> from collections import Counter>>> recounted = Counter(a)>>> recountedCounter({0: 1, 1: 3, 3: 1, 2: 1, 7: 2, 23: 1})

可以看到這個方法和前面我們自己實現的方法結果是一樣的,我們也可以通過 collection.Counter 來檢驗兩種方法得到的結果是否相等。

>>> recounted.items() == counted.items()True

我們利用上面的函數重新再造一個輪子 ASCII_histogram,并最終通過Python的輸出格式format來實現直方圖的展示,代碼如下:

def ascii_histogram(seq) -> None: """A horizontal frequency-table/histogram plot.""" counted = count_elements(seq) for k in sorted(counted): print('{0:5d} {1}'.format(k, '+' * counted[k]))

這個函數按照數值大小順序進行繪圖,數值出現次數用 (+) 符號表示。在字典上調用 sorted() 將會返回一個按鍵順序排列的列表,然后就可以獲取相應的次數 counted[k] 

>>> import random>>> random.seed(1)>>> vals = [1, 3, 4, 6, 8, 9, 10]>>> # `vals` 里面的數字將會出現5到15次>>> freq = (random.randint(5, 15) for _ in vals)>>> data = []>>> for f, v in zip(freq, vals):... data.extend([v] * f)>>> ascii_histogram(data) 1 +++++++ 3 ++++++++++++++ 4 ++++++ 6 +++++++++ 8 ++++++ 9 ++++++++++++ 10 ++++++++++++            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 德令哈市| 万安县| 于田县| 潮州市| 壤塘县| 疏勒县| 玛沁县| 天峻县| 鄂托克旗| 庆城县| 金湖县| 惠水县| 都安| 霍林郭勒市| 乐安县| 双桥区| 贡嘎县| 平利县| 阿瓦提县| 探索| 牟定县| 岗巴县| 永城市| 淮南市| 上思县| 平果县| 青铜峡市| 高州市| 阜城县| 盐源县| 沛县| 黄冈市| 驻马店市| 木兰县| 乐安县| 通化县| 乌拉特后旗| 葫芦岛市| 阳高县| 古浪县| 阿拉善右旗|