手摸手教你數據可視化!(附實例講解)

2021-01-14 Python數據科學
前言本文對課程數據集及鐵達尼號數據集進行了實例講解,一步一步帶你繪製數據可視化中常用的五種圖形,並對數據間可能存在的相關性做出了闡述。繪製常用圖形
#導入相應的包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

#圖可以顯示中文和負號
plt.rcParams['font.sans-serif']='SimHei'
plt.rcParams['axes.unicode_minus']=False

data = pd.read_excel("D:\data\student-score\student-score.xlsx")
data.head()

data = data.drop(columns = ["序號","品德","科學"],axis = 1) #由於品德和科學的總分與其他學科不一致,為了圖片顯示效果,刪除這兩個學科成績

data.loc[:,"總分"] = data.loc[:,"語文"] + data.loc[:,"數學"] + data.loc[:,"英語"]  #重新計算總分成績
data.head()

data.shape  #查看數據結構

# 輸出
(629, 6)

data.isnull().sum()  #查看缺失值情況

'''
姓名 0
學校 0
語文 1
數學 0
英語 0
總分 1
dtype: int64
'''

對於這些缺失值,我們可以選擇使用dropna()函數刪除:
data = data.dropna()  #刪除缺失值
data.shape # (628, 6)

再使用describe()函數進行簡單的統計描述:

散點圖
gp = data.groupby(by = "學校",as_index=False)  #以學校為分組依據進行分組
data1=gp.mean() #分組後的聚合運算為計算均值
data1.head()

# 繪製各學科成績散點圖
plt.figure(figsize=(6,4))
plt.scatter(data1["總分"],data1["語文"],marker='v')
plt.scatter(data1["總分"],data1["數學"],marker='o')
plt.scatter(data1["總分"],data1["英語"],marker='*')
plt.title("各學校成績散點圖",fontsize = 14)
plt.xlabel("總成績")
plt.ylabel("各學科成績")
plt.legend(["語文","數學","英語"]);

# 繪製各學科成績散點圖
plt.figure(figsize=(6,4))
plt.scatter(data1["總分"],data1["語文"],marker='v')
plt.title("各學校語文與總分成績散點圖",fontsize = 14)
plt.xlabel("總成績")
plt.ylabel("各學科成績")
plt.legend(["語文"])

# <matplotlib.legend.Legend at 0x1da13d256c8>

# 繪製各學科成績散點圖
data1.plot.scatter(x = "總分", y = "語文")
plt.title("語文與總分成績散點圖")
data1.plot.scatter(x = "總分", y = "數學")
plt.title("數學與總分成績散點圖")
data1.plot.scatter(x = "總分", y = "英語")
plt.title("英語與總分成績散點圖")
# plt.show()

得到Text(0.5, 1.0, '英語與總分成績散點圖'),且散點圖結果如下:折線圖

data1["序號"]=data1.學校.str.extract('(\d+)')
data1

0     10
1 11
2 12
3 13
4 14
5 15
6 16
7 17
8 18
9 19
10 1
11 20
12 21
13 2
14 3
15 4
16 5
17 6
18 7
19 8
20 9
Name: 序號, dtype: object

ser1 = ser1.astype("int")
ser1

0     10
1 11
2 12
3 13
4 14
5 15
6 16
7 17
8 18
9 19
10 1
11 20
12 21
13 2
14 3
15 4
16 5
17 6
18 7
19 8
20 9
Name: 序號, dtype: int32

del data1["序號"]
data1.index = ser1
data1

data1=data1.sort_index()
data1

plt.figure(figsize=(10,4))
plt.plot(range(21),data1.iloc[:,1],'-*') #選取語文成績數據
plt.plot(range(21),data1.iloc[:,2],'-o') #選取數學成績數據
plt.plot(range(21),data1.iloc[:,3],'-v') #選取英語成績數據
plt.title('各學科成績變化走勢圖')
plt.xlabel('各學校')
plt.ylabel('學科成績')
plt.xticks(range(21),data1["學校"],rotation=30) #rotation=30控制文字傾斜角度
plt.legend(['語文','數學','英語']);

直方圖
yw = data1.loc[:,"學校":"語文"]  #提取數據繪製直方圖,直方圖原理,每個需要被畫圖的標籤對應一個數值
yw = yw.T
yw

yw.columns = yw.iloc[0]  #將學校欄位轉換成列索引
yw1 = yw.drop("學校",axis=0) #刪多餘的行信息
yw1

# 每個學校語文平均成績的直方圖
plt.figure(figsize=(12,4))
plt.bar(range(21),yw.loc["語文",:],width=0.5)
plt.title("語文成績直方圖",fontsize = 14)
plt.ylabel("語文成績",fontsize = 14)
plt.xticks(range(21),yw.iloc[0],rotation=30,fontsize = 12); #x軸刻度為各學校名稱

sx = data1.loc[:,["學校","數學"]]
sx = sx.T
sx

sx.columns = sx.iloc[0]
sx = sx.drop("學校",axis=0)
sx

# 每個學校數學平均成績的直方圖
plt.figure(figsize=(12,4))
plt.bar(range(21),sx.loc["數學",:],width=0.5)
plt.title("數學成績直方圖",fontsize = 14)
plt.ylabel("數學成績",fontsize = 14)
plt.xticks(range(21),yw.iloc[0],rotation=30,fontsize = 12); #x軸刻度為各學校名稱

data2 = data1.drop("總分",axis = 1)  #新建一個dataframe,刪掉總分列,因為總分和單科成績相差太多,影響繪圖效果
data2.head()

# 將多個學科成績畫到一張圖中  #截取前十
data2.plot.bar(x = '學校',y = ['語文','數學','英語'],figsize=(16,6),width=0.7,rot = 30,title = "各學科成績直方圖"); #rot空值標籤傾斜程度

餅圖

plt.figure(figsize=(4,4),dpi=80)
plt.pie(data2.iloc[0,1:] #選取數據源
,labels=['語文','數學','英語']
,autopct='%1.2f') #設置百分比經度
# ,explode=[0.1,0.02,0.02] #設置餅圖各個扇區之間的間隙
# ,colors=['r','g','b']) #設置餅圖各個扇區的顏色
plt.title('第1小學各學科成績佔比',fontsize=12);
#fontsize設定字體的大小,xlabel,ylabel,title裡面都可以設定

pic2 = plt.figure(figsize=(8,8),dpi=80)

fig1 = pic2.add_subplot(2,2,1) #第一個子圖
plt.pie(data2.iloc[0,1:] #選取數據源 第10小學各學科成績
,labels=['語文','數學','英語']
,autopct='%1.2f') #設置百分比經度
# ,explode=[0.1,0.02,0.02] #設置餅圖各個扇區之間的間隙
# ,colors=['r','g','b']) #設置餅圖各個扇區的顏色
plt.title('第1小學各學科成績佔比',fontsize=12)

fig2 = pic2.add_subplot(2,2,2) #第二個字圖
plt.pie(data2.iloc[1,1:] #選取數據源,第11小學各學科成績
,labels=['語文','數學','英語']
,autopct='%1.2f') #設置百分比經度
# ,explode=[0.1,0.02,0.02] #設置餅圖各個扇區之間的間隙
# ,colors=['r','g','b']) #設置餅圖各個扇區的顏色
plt.title('第2小學各學科成績佔比',fontsize=12)

fig3 = pic2.add_subplot(2,2,3) #第二個字圖
plt.pie(data2.iloc[2,1:] #選取數據源,第12小學各學科成績
,labels=['語文','數學','英語']
,autopct='%1.2f') #設置百分比經度
# ,explode=[0.1,0.02,0.02] #設置餅圖各個扇區之間的間隙
# ,colors=['r','g','b']) #設置餅圖各個扇區的顏色
plt.title('第3小學各學科成績佔比',fontsize=12)

fig4 = pic2.add_subplot(2,2,4) #第二個字圖
plt.pie(data2.iloc[3,1:] #選取數據源,第13小學各學科成績
,labels=['語文','數學','英語']
,autopct='%1.2f') #設置百分比經度
# ,explode=[0.1,0.02,0.02] #設置餅圖各個扇區之間的間隙
# ,colors=['r','g','b']) #設置餅圖各個扇區的顏色
plt.title('第4小學各學科成績佔比',fontsize=12);

箱型圖

data_1 = data.loc[data['學校'] =="第1小學"]  #提取第一小學的所有信息
score = (list(data_1.iloc[:,2]),list(data_1.iloc[:,3]),list(data_1.iloc[:,4]))

plt.figure(figsize=(8,6))
plt.boxplot(score
,labels=['語文','數學','英語']
,notch=True #缺口中位數位置
,sym='*'#設定異常值的形狀
,whis=1.5); #設定幾倍標準差之外的數據算是異常值,默認是1.5

鐵達尼號數據
text = pd.read_csv(r'result.csv')
text.head()

男女中生存人數分布情況
sex = text.groupby('Sex')['Survived'].sum()
sex.plot.bar(color='chocolate')
plt.title('survived_count')
plt.show()

男女中生存人與死亡人數的比例
text.groupby(['Sex','Survived'])['Survived'].count().unstack().plot(kind='bar',stacked='True')
plt.title('survived_count')
plt.ylabel('count')

# Text(0, 0.5, 'count')

不同票價的人生存和死亡人數分布情況
# 排序後繪折線圖
fare_sur = text.groupby(['Fare'])['Survived'].value_counts().sort_values(ascending=False)
fig = plt.figure(figsize=(20, 18))
fare_sur.plot(grid=True)
plt.legend()
plt.show()

不同的票價所反映出來的生存人數是非常明顯的,票價低的人死亡數量高是因為離甲板遠,且逃生機會大大降低。
# 排序前繪折線圖
fare_sur1 = text.groupby(['Fare'])['Survived'].value_counts()
fig = plt.figure(figsize=(20, 18))
fare_sur1.plot(grid=True)
plt.legend()
plt.show()

不同倉位等級的人生存和死亡人員的分布情況
# 1表示生存,0表示死亡
pclass_sur = text.groupby(['Pclass'])['Survived'].value_counts()

import seaborn as sns
sns.countplot(x="Pclass", hue="Survived", data=text)

# <matplotlib.axes._subplots.AxesSubplot at 0x1da160cdc08>

facet = sns.FacetGrid(text, hue="Survived",aspect=3)
facet.map(sns.kdeplot,'Age',shade= True)
facet.set(xlim=(0, text['Age'].max()))
facet.add_legend()

# <seaborn.axisgrid.FacetGrid at 0x1da16136588>

text.Age[text.Pclass == 1].plot(kind='kde')
text.Age[text.Pclass == 2].plot(kind='kde')
text.Age[text.Pclass == 3].plot(kind='kde')
plt.xlabel("age")
plt.legend((1,2,3),loc="best")

# <matplotlib.legend.Legend at 0x1da161b27c8>

Jupyter 平臺最強插件,沒有之一!

本地 IDE 已廢!GitHub 的雲 VSCode 實測

太可怕了!這個 Jupyter 插件可能會讓我失業!

牛逼!一行代碼讓pandas的apply速度飆到極致!

臥槽!一個比 pandas 快百倍的大數據分析神器!

用這個網站一查,才知道自己被賣了

再見,可視化!你好,Pandas!

特別推薦:一個優質的推薦Github開源項目的公眾號「GitHuboy」,每天給大家分享前沿、優質的項目,涉及 Java、Python、Go、Web前端、AI、數據分析等多個領域,非常值得大家關注。

回復「Java學習」獲得 1024G Java學習資料

回復「Python學習」獲得 100G Python學習資料

相關焦點

  • 淺談數據可視化
    (1)視覺暗示可視化最基本的形式就是簡單地把數據映射成彩色圖形。它的工作原理就是大腦傾向於尋找模式,你可以在圖形和它所代表的數字間來回切換。這一點很重要。你必須確定數據的本質並沒有在這反覆切換中丟失,如果不能映射回數據,可視化圖表就只是一堆無用的圖形。
  • 從數據可視化到交互式數據分析
    你想解決什麼難題?你的最終目標是什麼?從數據分析中獲得的更多理解將如何使你更接近你的目標?(2)生成問題難題說明通常太高級且寬泛,無法直接轉換為數據分析操作(這個問題經常被忽視且未被充分理解)。通常,需要將難題(隱式地,或者更好地,顯式地)轉換為許多數據分析問題。
  • 數據可視化之平行坐標圖的製作與分析
    平行坐標圖是信息可視化的一種重要技術。為了克服傳統的笛卡爾直角坐標系容易耗盡空間、 難以表達三維以上數據的問題, 平行坐標圖將高維數據的各個變量用一系列相互平行的坐標軸表示, 變量值對應軸上位置。為了反映變化趨勢和各個變量間相互關係,往往將描述不同變量的各點連接成折線。
  • 網際網路人要了解的數據可視化 —— 基礎篇
    一、什麼是數據可視化數據可視化就是藉助視覺的表達方式(不局限於文字),將枯燥的,專業的,不直觀的數據內容,有趣的、淺顯的、直觀的傳達給觀眾的一種手段。非設計師在製作數據可視化時,往往會因為重點突出數據的重要性,而讓可視化圖表變得枯燥乏味。而設計師在製作數據可視化時,又會因為過度注重絢麗多彩而讓數據的呈現效果大打折扣。
  • SparkR編程系列 | 機器學習+數據可視化
    朝樂門@ruc為您詳細講解SparkR的KMeans機器學習和數據可視化的知識,並給出實際程序代碼、代碼介紹及運行結果  —— 一份你的大腦也可以直接執行和調試的SparkR源程序。本案例由朝樂門設計與編寫。
  • 數據可視化的基本流程
    作者 | 向倩文來源 | 數據產品手記大多數人對數據可視化的第一印象,可能就是各種圖形,比如Excel圖表模塊中的柱狀圖、條形圖、折線圖、餅圖、散點圖等等,就不一一列舉了。以上所述,只是數據可視化的具體體現,但是數據可視化卻不止於此。
  • 手把手教你使用Python進行高級數據可視化
    數據可視化能力已經越來越成為各崗位的基礎技能。領英的數據報告顯示,數據可視化技能在2018年中國最熱門技能中排名第一。就數據分析而言,可視化探索幾乎是你正式進行數據分析的第一步,通過SQL拿到數據之後,我們需要使用可視化方法探索和發現數據中的模式規律。
  • 可視化工具不知道怎麼選?深度評測5大Python數據可視化工具
    作者 | 劉早起來源 | 早起Python(ID: zaoqi-python)相信很多讀者學習Python就是希望作出各種酷炫的可視化圖表,當然你一定會聽說過Matplotlib、Pyecharts、Seaborn、Plotly、Bokeh這五大工具,本文就將通過真實繪圖來深度評測這五個Python數據可視化的庫,看看到底這幾種工具各有什麼優缺點
  • 數據可視化在移動端的應用
    隨著大數據行業的快速發展,數據可視化設計在移動端的應用越來越多。今天我們就數據可視化在移動端的使用場景、特點、注意事項以及各個使用場景進行一次簡單的分享。應用場景數據可視化在移動端的主要體現是「數據圖表」,我們最常用的數據設計組件就是:柱狀圖、折線圖、環形圖等,它們簡單易懂,容易被用戶接受。
  • 必聽公開課:從零入門科研數據可視化雲平臺
    作為一名科研工作者,除了要不斷推進實驗進展、及時獲取實驗數據外,如何向他人清晰明了地呈現自己的研究成果也是一項必備的科研能力。科研成果要求專業、嚴謹、信息量,且兼顧審美,所以數據可視化在科研工作中發揮著越來越重要的作用。基於可視化圖形,我們可以更好地展示科研數據中的主要特徵和規律。
  • 數據可視化圖表的使用方式及最佳做法,你用對了嗎?
    分層的 屬於層次結構類別的數據可視化是對較大組中的組進行排序的可視化,如果你需要顯示信息集群,尤其是當它們從單個起點流動時,分層可視化效果最適合。 這些圖的不利之處在於它們往往更複雜且難以閱讀,這就是為什麼最經常使用樹形圖的原因;由於其線性路徑,因此最簡單。
  • 海洋數據三維可視化
    海洋數據可視化平臺指通過海洋信息三維可視化技術,實現海洋信息數據的可視化。海洋數據可視化是科學管理海洋數據的重要組成部分,它能夠將無法直接查看的數據以直觀的圖形方式展示出來,提高海洋數據研究利用能力,能提髙數據訪問效率及安全性。
  • 優秀的數據可視化,原來是這樣做的!
    如果您的可視化中有多個大小相同的數據點,它們會混在一起,很難區分值。使用相同細節添加的細節(和數字)越多,大腦處理的時間就越長。想想你想要用你的數據傳達什麼,以及最有效的方式是什麼。使用基礎圖形一個很好的經驗法則是,如果你不能高效理解,你的讀者或聽眾可能也難理解。
  • 兩步搞定數據可視化
    數據可視化強調以圖形形式呈現抽象信息。數據可視化使我們能夠發現傳統報告,表格或電子表格中未被注意的模式,趨勢和相關性。研究表明,人類對視覺的反應優於任何其他類型的刺激。人類大腦處理視覺信息的速度比文本快60,000倍。
  • 這5種數據可視化方式是數據科學家標配!
    【IT168 編譯】數據可視化是數據科學家工作的重要組成部分。在項目的早期階段,你通常會進行探索性數據分析(EDA)以獲取對數據的一些洞察。創建可視化確實有助於使事情更清晰易懂,特別是對於大型高維數據集。在你的項目結束時,能夠以清晰、簡潔和引人注目的方式展示你的最終結果非常重要,因為你的受眾往往是非技術性客戶,他們可以理解。
  • 這16個數據可視化案例,驚豔了全球數據行業
    數據可視化可以幫你更容易的解釋趨勢和統計數據。  數據是非常強大的。當然,如果你能真正理解它想告訴你的內容,那它的強大之處就更能體現出來了。  通過觀察數字和統計數據的轉換以獲得清晰的結論並不是一件容易的事。必須用一個合乎邏輯的、易於理解的方式來呈現數據。  談談數據可視化。
  • Python數據可視化技能提升—用好matplotlib第1篇
    Python想必已經是大家最為熟悉不過的程式語言了,得益於它的易上手性,以及強大的兼容性和開源性,已經受到了廣泛「程序猿」的喜愛哦,通過前面幾次,咱們已經把Python的前世今生和Python的模塊化編程聊完了,這兩天收到朋友的私信說想了解點Python數據可視化相關的東東,俺想了下,就這樣好啦,以後呢,就把Python的基礎知識和實戰的專業知識點進行穿插講解啦,這樣既能讓入門的朋友快速熟悉
  • 數據可視化的一些思考丨從三個問題看數據可視化的商業前景
    數據可視化的需求場景是什麼?一種場景是「看」,數據可視化的主要作用是展示匯報,是信息的獲取。比如前不久RayData團隊為央視頻打造的生態可視化交互管理系統,以及在央視現場的工作區,利用RayData Web做出來的環形可視化大屏,都是為了讓管理者、運營者、業務人員更好地獲取相關信息。另一種場景是「用」,數據可視化的主要目的是交互管理,是數據的應用。
  • 手把手教你用Matplotlib進行數據可視化
    01 導入Matplotlib如果你安裝了完整的Python Anaconda,那麼你已經安裝了Matplotlib,可以開始了。否則,你可能要訪問官網獲取安裝說明。我們將使用NumPy的linspace函數在x軸上創建一個線性空間,x值從0到10,共100個樣本點:import numpy as np  x = np.linspace(0, 10, 100) 我們可以使用NumPy的sin函數求sin函數的所有x值,並通過調用plt的plot函數可視化結果:plt.plot(x, np.sin(x)) 你親自試過了嗎
  • 最佳大數據可視化技術
    當我們試圖理解和解釋數據時,或者當我們尋找數百或數千個變量之間的關係以確定它們的相對重要性時,情況就更是如此。 識別重要關係的最有效方法之一是通過高級分析和易於理解的可視化。數據可視化幾乎應用於所有知識領域。 不同學科的科學家使用計算機技術對複雜事件建模並可視化無法直接觀察到的現象,例如天氣模式,醫療條件或數學關係。