成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python數據可視化:箱線圖多種庫畫法

開發 后端 數據可視化
箱線圖通過數據的四分位數來展示數據的分布情況。例如:數據的中心位置,數據間的離散程度,是否有異常值等。

Python數據可視化:箱線圖多種庫畫法

概念

箱線圖通過數據的四分位數來展示數據的分布情況。例如:數據的中心位置,數據間的離散程度,是否有異常值等。

把數據從小到大進行排列并等分成四份,第一分位數(Q1),第二分位數(Q2)和第三分位數(Q3)分別為數據的第25%,50%和75%的數字。 

Python數據可視化:箱線圖多種庫畫法

四分位間距(Interquartilerange(IQR))=上分位數(upper quartile)-下分位數(lower quartile)

箱線圖分為兩部分,分別是箱(box)和須(whisker)。箱(box)用來表示從第一分位到第三分位的數據,須(whisker)用來表示數據的范圍。

箱線圖從上到下各橫線分別表示:數據上限(通常是Q3+1.5IQR),第三分位數(Q3),第二分位數(中位數),第一分位數(Q1),數據下限(通常是Q1-1.5IQR)。有時還有一些圓點,位于數據上下限之外,表示異常值(outliers)。

(注:如果數據上下限特別大,那么whisker將顯示數據的最大值和最小值。) 

Python數據可視化:箱線圖多種庫畫法

案例

1. 使用pandas自帶的函數

使用pandas里的dataframe數據結構存放待顯示的數據。如果希望顯示的各個數據列表中,數據長度不一致,可以先用Series函數轉換為Series數據,再存儲到dataframe中,對應index的value值若不存在則為NaN。

下面我們隨機生成4組數據,看看他們的箱線圖。【代碼】

  1. import numpy as np 
  2. import pandas as pd 
  3. from matplotlib import pyplot as plt 
  4. def list_generator(mean, dis, number): # 封裝一下這個函數,用來后面生成數據 
  5.  return np.random.normal(mean, dis * dis, number) # normal分布,輸入的參數是均值、標準差以及生成的數量 
  6. # 我們生成四組數據用來做實驗,數據量分別為70-100 
  7. y1 = list_generator(0.8531, 0.0956, 70) 
  8. y2 = list_generator(0.8631, 0.0656, 80) 
  9. y3 = list_generator(0.8731, 0.1056, 90) 
  10. y4 = list_generator(0.8831, 0.0756, 100) 
  11. # 如果數據大小不一,記得需要下面語句,把數組變為series 
  12. y1 = pd.Series(np.array(y1)) 
  13. y2 = pd.Series(np.array(y2)) 
  14. y3 = pd.Series(np.array(y3)) 
  15. y4 = pd.Series(np.array(y4)) 
  16. data = pd.DataFrame({"1": y1, "2": y2, "3": y3, "4": y4, }) 
  17. data.boxplot() # 這里,pandas自己有處理的過程,很方便哦。 
  18. plt.ylabel("ylabel"
  19. plt.xlabel("xlabel") # 我們設置橫縱坐標的標題。 
  20. plt.show() 

【效果】 

Python數據可視化:箱線圖多種庫畫法

上面的箱線圖很簡單,給出數據后,幾行代碼就能生成,不過這是簡單的箱線圖。下面再看看稍微復雜點的。

2. 使用matplotlib庫畫箱線圖

我們上面介紹了使用pandas畫箱線圖,幾句命令就可以了。但是稍微復雜點的可以使用matplotlib庫。matplotlib代碼稍微復雜點,但是很靈活。細心點同學會發現pandas里面的畫圖也是基于此庫的,下面給你看看pandas里面的源碼: 

Python數據可視化:箱線圖多種庫畫法

通過源碼可以看到pandas內部也是通過調用matplotlib來畫圖的。那下面我們自己實現用matplotlib畫箱線圖。

我們簡單模擬一下,男女生從20歲,30歲的花費對比圖,使用箱線圖來可視化一下。

【代碼】

  1. import numpy as np 
  2. import matplotlib.pyplot as plt 
  3. fig, ax = plt.subplots() # 子圖 
  4. def list_generator(mean, dis, number): # 封裝一下這個函數,用來后面生成數據 
  5.  return np.random.normal(mean, dis * dis, number) # normal分布,輸入的參數是均值、標準差以及生成的數量 
  6.  
  7. # 我們生成四組數據用來做實驗,數據量分別為70-100 
  8. # 分別代表男生、女生在20歲和30歲的花費分布 
  9. girl20 = list_generator(1000, 29.2, 70) 
  10. boy20 = list_generator(800, 11.5, 80) 
  11. girl30 = list_generator(3000, 25.1056, 90) 
  12. boy30 = list_generator(1000, 19.0756, 100) 
  13.  
  14. data=[girl20,boy20,girl30,boy30,] 
  15. ax.boxplot(data) 
  16. ax.set_xticklabels(["girl20""boy20""girl30""boy30",]) # 設置x軸刻度標簽 
  17. plt.show() 

【效果】 

Python數據可視化:箱線圖多種庫畫法

從上面隨機模擬,看出來男生花費趕不上女生吧,尤其是30歲以后,女生摔男生一大截啊。(模擬數據,請勿當真)

仔細看上面的圖,感覺還是不太好,既然男女生對比,那是不是要分組,男女生放一塊,然后再根據年齡段比較,這樣比較才直觀。

那我們就稍微改動上面一點點代碼,實現男女生箱線圖挨得近一點。

【代碼】

  1. import numpy as np 
  2. import matplotlib.pyplot as plt 
  3. fig, ax = plt.subplots() # 子圖 
  4. def list_generator(mean, dis, number): # 封裝一下這個函數,用來后面生成數據 
  5.  return np.random.normal(mean, dis * dis, number) # normal分布,輸入的參數是均值、標準差以及生成的數量 
  6.  
  7. # 我們生成四組數據用來做實驗,數據量分別為70-100 
  8. # 分別代表男生、女生在20歲和30歲的花費分布 
  9. girl20 = list_generator(1000, 29.2, 70) 
  10. boy20 = list_generator(800, 11.5, 80) 
  11. girl30 = list_generator(3000, 25.1056, 90) 
  12. boy30 = list_generator(1000, 19.0756, 100) 
  13.  
  14.  
  15. data=[girl20,boy20,girl30,boy30,] 
  16. # 用positions參數設置各箱線圖的位置 
  17. ax.boxplot(data,positions=[0, 0.6, 3, 3.7,])# 就是后面加了位置 
  18. ax.set_xticklabels(["girl20""boy20""girl30""boy30",]) # 設置x軸刻度標簽 
  19. plt.show() 

【效果】 

Python數據可視化:箱線圖多種庫畫法

這樣看一下,是不是男女生根據年齡段分組了呢,稍微比上面好看些,也直觀一些。這樣既能看出年齡段的對比,又能看出男女生的對比。

同樣,如果想要箱線圖旋轉90°,那么也是在在 boxplot命令里加上參數 vert=False即可。如果想要更多設置,可以基于 boxplot函數參數進行修改,其函數定義如下:

  1. boxplot(self, x, notch=None, sym=None, vert=None, whis=None, 
  2.  positions=None, widths=None, patch_artist=None, 
  3.  bootstrap=None, usermedians=None, conf_intervals=None, 
  4.  meanline=None, showmeans=None, showcaps=None, 
  5.  showbox=None, showfliers=None, boxprops=None, 
  6.  labels=None, flierprops=None, medianprops=None, 
  7.  meanprops=None, capprops=None, whiskerprops=None, 
  8.  manage_xticks=True, autorange=False, zorder=None) 

3. 使用seaborn庫和matplotlib來畫箱線圖

Seaborn是基于matplotlib的Python可視化庫。 它提供了一個高級界面來繪制有吸引力的統計圖形。Seaborn其實是在matplotlib的基礎上進行了更高級的API封裝,從而使得作圖更加容易,不需要經過大量的調整就能使你的圖變得精致。但應強調的是,應該把Seaborn視為matplotlib的補充,而不是替代物。

函數定義:

  1. boxplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None, 
  2.  orient=None, color=None, palette=None, saturation=.75, 
  3.  width=.8, dodge=True, fliersize=5, linewidth=None, 
  4.  whis=1.5, notch=False, ax=None, **kwargs) 

【參數講解】

  • x,y:dataframe中的列名(str)或者矢量數據
  • data:dataframe或者數組
  • palette:調色板,控制圖像的色調
  • hue(str):dataframe的列名,按照列名中的值分類形成分類的條形圖
  • order, hue_order (lists of strings):用于控制條形圖的順序
  • orient:"v"|"h" 用于控制圖像使水平還是豎直顯示(這通常是從輸入變量的dtype推斷出來的,此參數一般當不傳入x、y,只傳入data的時候使用)
  • fliersize:float,用于指示離群值觀察的標記大小
  • whis:確定離群值的上下界(IQR超過低和高四分位數的比例),此范圍之外的點將被識別為異常值。IQR指的是上下四分位的差值。
  • width:float,控制箱型圖的寬度

我們還是基于上面男女花費案例來說,不過這里我們把數據進行了整理,做成了數據框dataframe。

【包含的庫】

  1. import pandas as pd 
  2. import numpy as np 
  3. import seaborn as sns 
  4. import matplotlib.pyplot as plt 
  5. # plt.rc("font", family="SimHei"size="15") 避免中文亂碼,可不用 

【代碼第一部分】數據生成

  1. def list_generator(mean, dis, number): # 封裝一下這個函數,用來后面生成數據 
  2.  return np.random.normal(mean, dis * dis, number) # normal分布,輸入的參數是均值、標準差以及生成的數量 
  3.  
  4. # 我們生成四組數據用來做實驗,數據量分別為70-100 
  5. # 分別代表男生、女生在20歲和30歲的花費分布 
  6. # 構造數據庫DataFrame 
  7. num = 100 # 每組100個樣本 
  8. girl20 = list_generator(1000, 29.2, num) 
  9. boy20 = list_generator(800, 11.5, num) 
  10. girl30 = list_generator(3000, 25.1056, num) 
  11. boy30 = list_generator(1000, 19.0756, num) 
  12. girl_sex = ['female' for _ in range(num)] 
  13. boy_sex = ['male' for _ in range(num)] 
  14. age20 = [20 for _ in range(num)] 
  15. age30 = [30 for _ in range(num)] 
  16.  
  17. girl_d1 = pd.DataFrame({'cost': girl20, 'sex': girl_sex, 'age': age20}) 
  18. boy_d1 = pd.DataFrame({'cost': boy20, 'sex': boy_sex, 'age': age20}) 
  19. girl_d2 = pd.DataFrame({'cost': girl30, 'sex': girl_sex, 'age': age30}) 
  20. boy_d2 = pd.DataFrame({'cost': boy30, 'sex': boy_sex, 'age': age30}) 
  21. data = pd.concat([girl_d1, boy_d1, girl_d2, boy_d2]) 
  22.  
  23. print(data.head()) 

數據長啥樣?下面是給出的數據框前面的部分,一共400個樣本,分性別和年齡。 

Python數據可視化:箱線圖多種庫畫法

【代碼第二部分】使用seaborn庫畫圖

簡單看看所有數據的分布情況:

  1. sns.boxplot(x=data["cost"],data=data) 

 Python數據可視化:箱線圖多種庫畫法

根據性別分組:

  1. sns.boxplot(x="age", y="cost", data=data, hue="sex", width=0.5, linewidth=1.0, palette="Set3"

 Python數據可視化:箱線圖多種庫畫法

根據年齡分組:

  1. sns.boxplot(x="sex", y="cost", data=data, hue="age", width=0.5, linewidth=1.0, palette="Set3"

 Python數據可視化:箱線圖多種庫畫法

上面這些是seaborn庫的簡單使用,可以通過年齡看男女花費比較,也可以根據性別看不同年齡段的花費比較,還是比較直觀的。當然除此之外還有很多其他的炫技,大家可以自己嘗試。

總結

從上面來看,雖然我們是采用不同方法來畫箱線圖,但是最基本的都是調用matplotlib庫,這里面pandas是最簡單的箱線圖可視化,但是不靈活。而matplotlib雖然靈活,但是需要慢慢調,而且復雜。相比之下seaborn更加酷炫,而且圖還更好看。上面例子都是本人親測,一個個對比,原創文章,大家如果有其他問題可以留言討論。

 

責任編輯:未麗燕 來源: 今日頭條
相關推薦

2020-03-11 14:39:26

數據可視化地圖可視化地理信息

2017-10-14 13:54:26

數據可視化數據信息可視化

2022-08-26 09:15:58

Python可視化plotly

2020-07-27 07:37:43

Python開發工具

2024-12-24 07:30:00

Seaborn可視化Python

2020-05-26 11:34:46

可視化WordCloud

2022-02-23 09:50:52

PythonEchartspyecharts

2023-09-19 15:44:03

Python數據可視化

2024-04-01 11:53:42

PlotlyPython數據可視化

2024-12-24 12:00:00

Matplotlib可視化分析Python

2017-10-31 09:38:53

大數據數據可視化Python

2018-11-30 10:28:44

Python反爬網頁

2017-06-23 17:55:49

PythonPycon可視化庫

2024-08-20 18:16:49

數據可視化Python

2015-08-20 10:00:45

可視化

2019-01-21 15:10:11

佩奇可視化數據

2017-06-29 11:26:08

Python數據可視化

2018-03-07 11:35:49

Python可視化數據

2021-10-11 08:04:22

Python數據行程

2020-09-02 13:56:03

Python可視化數據
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产欧美精品一区二区色综合朱莉 | 亚洲91| 西西裸体做爰视频 | 久久精品小视频 | 自拍偷拍第一页 | 久久综合影院 | aacc678成免费人电影网站 | 日韩理论电影在线观看 | 精品一区二区三区91 | av毛片| 久久一二区 | 一区二区久久电影 | 亚洲福利在线视频 | 99久久精品免费视频 | 久久国产精品-久久精品 | 亚洲精品在线免费 | 日本在线免费看最新的电影 | 欧美成年视频 | 欧美日韩网站 | 精品动漫一区 | 宅男噜噜噜66一区二区 | 91在线免费视频 | av福利网站| 69xxx免费| 97超碰人人草 | 精品一区二区三区入口 | a在线免费观看视频 | 久久久91精品国产一区二区三区 | 欧美极品少妇xxxxⅹ免费视频 | 在线日韩视频 | 久久久久久精 | 99热这里只有精品8 激情毛片 | 伊人无码高清 | 日韩电影一区 | 天天干天天插天天 | 欧美成人二区 | 日韩免费毛片视频 | 亚洲a在线观看 | 久久精品视频9 | 99在线精品视频 | com.色.www在线观看 |