国产探花免费观看_亚洲丰满少妇自慰呻吟_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 ++++++++++++            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 大港区| 介休市| 喀喇沁旗| 林周县| 尤溪县| 东安县| 东莞市| 泰宁县| 晋宁县| 凤城市| 新兴县| 珠海市| 米泉市| 克什克腾旗| 嫩江县| 炎陵县| 永胜县| 轮台县| 册亨县| 濮阳县| 常州市| 西青区| 南宁市| 孟连| 绿春县| 焦作市| 布拖县| 无极县| 蓬莱市| 正阳县| 广州市| 潞城市| 贵港市| 东阿县| 金平| 桐乡市| 娱乐| 廉江市| 台安县| 桃园市| 新绛县|