tft每日頭條

 > 生活

 > python數據可視化填充不規則圖形

python數據可視化填充不規則圖形

生活 更新时间:2025-01-11 11:51:11

在前面兩篇文章中,我們已經學習了seaborn繪圖的風格和顔色設置,從本篇文章開始,我們開始選一些有意思的數據集進行各種圖形繪制,在實踐中感受數據可視化的魅力。本篇文章主要講2個繪圖函數,那就是繪制直方圖的函數seaborn,distplot()和繪制條形圖的函數seaborn.barplot()(關于直方圖和條形圖的區别請查閱前面matplotlib系列中的相關文章)。

處理繪圖數據

今天我們用直方圖和條形圖展示下NBA2017-2018賽季各球員薪資情況。首先,我們用pandas把數據讀寫進來,然後按薪資情況降序排序,看下NBA球員中薪資前10的球員有哪些。

#導入需要的依賴包 %matplotlib inline import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns #讀入數據 data=pd.read_csv('NBA_season1718_salary.csv') #對讀進來的數據按薪資降序排序并取前10條數據 salary_top10=(data.sort_values("season17_18",ascending=False)).head(10) #取出球員列數據,作為條形圖橫坐标 player=salary_top10['Player'] #取出球員薪資列,作為條形圖縱坐标 season_salary=salary_top10['season17_18']

前10條數據結構如下圖:

python數據可視化填充不規則圖形(python可視化三seaborn單變量分析繪圖)1

前10球員薪資數據

seaborn.barplot()繪制條形圖

用seaborn.barplot()函數可以繪制條形圖,如果不傳入任何參數,會繪制出一個坐标軸,如圖:

sns.barplot()

python數據可視化填充不規則圖形(python可視化三seaborn單變量分析繪圖)2

使用默認參數繪圖

現在,我們将球員數據作為橫坐标,球員薪資作為縱坐标,繪制出條形圖。

plt.figure(figsize=(10,6)) plt.xticks(rotation=45) plt.ylim(season.min() * 0.5, season.max() * 1.01) #ci參數表示允許的誤差範圍(控制誤差棒的百分比,在0-100之間) sns.barplot(x=player,y=season,data=salary_top10,ci=68)

python數據可視化填充不規則圖形(python可視化三seaborn單變量分析繪圖)3

NBA球員薪資排名

從條形圖中不難看出,勇士隊的當家球星庫裡薪資最高,将近達到3500萬美元,位居第二的是勒布朗詹姆斯,也是在3300萬美元以上。上面的條形圖是按球員作為橫坐标,下面我們按球隊彙總,看看哪個球隊的薪資總額最高。

salary_by_team=data.groupby(by='Tm').sum().reset_index() salary_by_team=salary_by_team.sort_values(by='season17_18',ascending=False) tm_top10=salary_by_team[0:10] tm=tm_top10['Tm'] salary_sum=tm_top10['season17_18'] sns.barplot(tm,salary_sum,data=tm_top10) sns.color_palette('hls',10) sns.set(style="whitegrid")

python數據可視化填充不規則圖形(python可視化三seaborn單變量分析繪圖)4

NBA各球隊薪資支付條形圖

從上面條形圖中可以看出勇士支付最高,其次是騎士!

seaborn.distplot()繪制直方圖

上面我們用條形圖對比了各球員薪資排名和球隊支付的薪資排名,接下來我們用直方圖的方式展示整個聯盟中各球員的薪資水平分布和球隊薪資水平分布。

#用pandas讀入數據 data=pd.read_csv('NBA_season1718_salary.csv') #取出薪資列 salary=data['season17_18'] #繪制直方圖 sns.distplot(salary)

python數據可視化填充不規則圖形(python可視化三seaborn單變量分析繪圖)5

NBA球員2017-2018賽季薪資分布

上面這個圖,我們沒有指定bins,所以箱子數有點多,那我們分别指定bins為3,10,30,看看效果。

sns.distplot(salary,bins=3) sns.distplot(salary,bins=10) sns.distplot(salary,bins=30)

python數據可視化填充不規則圖形(python可視化三seaborn單變量分析繪圖)6

bins=3

python數據可視化填充不規則圖形(python可視化三seaborn單變量分析繪圖)7

bins=10

python數據可視化填充不規則圖形(python可視化三seaborn單變量分析繪圖)8

bins=30

對于上面的圖,橫坐标表示薪資範圍,縱坐标表示每個球員薪資所占頻數。下面我們彙總球隊薪資,并繪制直方圖。

#按球隊彙總求和并重新設置index salary_by_team=data.groupby(by='Tm').sum().reset_index() #按薪資升序排序 salary_by_team=salary_by_team.sort_values(by='season17_18',ascending=False) tm_top10=salary_by_team[0:10] tm=tm_top10['Tm'] salary_sum=tm_top10['season17_18'] sns.distplot(salary_sum)

python數據可視化填充不規則圖形(python可視化三seaborn單變量分析繪圖)9

NBA各球隊薪資分布圖

這裡默認分了2個範圍,大家知道有30隻球隊,那麼我們設置bins=30,看看效果:

sns.distplot(salary_sum,bins=30)

python數據可視化填充不規則圖形(python可視化三seaborn單變量分析繪圖)10

bins=30

可以從圖中看出,大部分球隊的薪資總額在1.2-1.3億美元左右。下面我們對球隊薪資總額進行處理,找出樣本的上四分位、下四分位,并以此作為标準,将薪資總額分為3個等級(low:0、mid:1、high:2)。

#對球隊薪資總額按降序順序排序并重設索引 salary_by_team=salary_by_team.sort_values(by='season17_18',ascending=True).reset_index() #統計球隊個數 cnt=salary_by_team['Tm'].count() Q3=int((3*(cnt 1)/4)) Q1=int(((cnt 1)/4)) #分别求出下四分位和上四分位,作為判斷薪資水平的标準,低于下四分位的為低,高于上四分位的為高,中間為中等 Q1_value=salary_by_team.at[Q1,'season17_18'] Q3_value=salary_by_team.at[Q3,'season17_18']

然後,自定義一個分類函數,将薪資連續數值離散化:

def which_class(i): if i<Q1_value: return 0 elif i<Q3_value and i>Q1_value: return 1 else: return 2

然後用pandas的apply函數,處理連續值:

#新增level列,并将處理的值添加到新增列中 salary_by_team['level']=salary_by_team['season17_18'].apply(which_class)

python數據可視化填充不規則圖形(python可視化三seaborn單變量分析繪圖)11

處理結果

用等級數據繪制直方圖:

sns.distplot(salary_by_team['level'])

python數據可視化填充不規則圖形(python可視化三seaborn單變量分析繪圖)12

薪資水平直方圖

從圖中可以發現,等級為1(中等)占的比重最大,這也是符合實際情況的,不可能所有的球隊都像快船一樣有錢!

好了,關于條形圖和直方圖到此為止,下次繼續散點圖繪制,感謝閱讀。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved