現(xiàn)在人工智能越來越實用秩铆,甚至深入到千家萬戶烙荷,隨之而來的就是python技術(shù)的火爆浴骂,今天小猿圈python講師為你講解一下繪制頻率分布直方圖示例度宦,希望對于剛剛自學(xué)python的你有一定的幫助。
項目中在前期經(jīng)常要看下數(shù)據(jù)的分布情況童社,這對于探究數(shù)據(jù)規(guī)律非常有用求厕。概率分布表示樣本數(shù)據(jù)的模樣,長的好不好看如果有圖像展示出來就非常完美了扰楼,使用Python繪制頻率分布直方圖非常簡潔呀癣,因為用的頻次非常高,這里記錄下來弦赖。還是Python大法好项栏,代碼簡潔不拖沓~
如果數(shù)據(jù)取值的范圍跨度不大,可以使用等寬區(qū)間來展示直方圖蹬竖,這也是最常見的一種沼沈;如果數(shù)據(jù)取值范圍比較野,也可以自定義區(qū)間端點币厕,繪制圖像列另,下面分兩種情況展示
1.區(qū)間長度相同繪制直方圖
#-*- encoding=utf-8 -*-
import datetime
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
zhfont1 = matplotlib.font_manager.FontProperties(fname='C:\Windows\Fonts\simsun.ttc')
# 按照固定區(qū)間長度繪制頻率分布直方圖
# bins_interval 區(qū)間的長度
# margin? ? 設(shè)定的左邊和右邊空留的大小
def probability_distribution(data, bins_interval=1, margin=1):
? bins = range(min(data), max(data) + bins_interval - 1, bins_interval)
? print(len(bins))
? for i in range(0, len(bins)):
? ? print(bins[i])
? plt.xlim(min(data) - margin, max(data) + margin)
? plt.title("probability-distribution")
? plt.xlabel('Interval')
? plt.ylabel('Probability')
? plt.hist(x=data, bins=bins, histtype='bar', color=['r'])
? plt.show()
2.區(qū)間長度不同繪制直方圖
#-*- encoding=utf-8 -*-
import datetime
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
zhfont1 = matplotlib.font_manager.FontProperties(fname='C:\Windows\Fonts\simsun.ttc'
# 自己給定區(qū)間,小于區(qū)間左端點和大于區(qū)間右端點的統(tǒng)一做處理劈榨,對于數(shù)據(jù)分布不均很的情況處理較友好
# bins? 自己設(shè)定的區(qū)間數(shù)值列表
# margin? 設(shè)定的左邊和右邊空留的大小
# label? 右上方顯示的圖例文字
"""e
? import numpy as np
? data = np.random.normal(0, 1, 1000)
? bins = np.arange(-5, 5, 0.1)
? probability_distribution_extend(data=data, bins=bins)
"""
def probability_distribution_extend(data, bins, margin=1, label='Distribution'):
? bins = sorted(bins)
? length = len(bins)
? intervals = np.zeros(length+1)
? for value in data:
? ? i = 0
? ? while i < length and value >= bins[i]:
? ? ? i += 1
? ? intervals[i] += 1
? intervals = intervals / float(len(data))
? plt.xlim(min(bins) - margin, max(bins) + margin)
? bins.insert(0, -999)
? plt.title("probability-distribution")
? plt.xlabel('Interval')
? plt.ylabel('Probability')
? plt.bar(bins, intervals, color=['r'], label=label)
? plt.legend()
? plt.show()
Case示例
if __name__ == '__main__':
? data = [1,4,6,7,8,9,11,11,12,12,13,13,16,17,18,22,25]
? probability_distribution(data=data, bins_interval=5,margin=0)
以上就是小猿圈python講師給大家分享的繪制頻率分布直方圖示例访递,希望對小伙伴們有所幫助Python交流群:874680195晦嵌,想要了解更多內(nèi)容的小伙伴可以到小猿圈直接觀看同辣,想要學(xué)好Python開發(fā)技術(shù)的小伙伴快快行動吧。