python資料視覺化簡易版

2020-10-19 15:00:27
  • 最近白天在整機器學習和演演算法導論,做預判分析的時候發現,經常用到幾個畫圖程式碼,老是弄混。睡不著,深夜上線整理一波,順便加強一下記憶叭。寫多少是多少,不行就白天接著補。。
  • 今天先整理一波常規畫圖操作。其實後來學了pandas裡的 seaborn 庫的時候,才發現有更好看的圖
import matplptlib.pypplot as plt
import pandas as pd 
# 讀取一個分類明確的資料集csv檔案,檔案裡資料分了四類
# 資料長這樣子,先大致head()前五行看一下吧
# dataset,x,y
  I,10.0,8.04
  I,8.0,6.95
  I,13.0,7.58
  I,9.0,8.81
  I,11.0,8.33

oh=pd.read_csv('anscombe.csv')
print(oh)
# 取資料子集
oh_1=oh[oh['dataset'] == 'I']
oh_2=oh[oh['dataset'] == 'II']
oh_3=oh[oh['dataset'] == 'III']
oh_4=oh[oh['dataset'] == 'IV']
plt.plot(oh_1['x'],oh_1['y'])
plt.show()
# 如果想用它畫圓點,可以給plt.plot傳遞一個‘o’引數
plt.plot(oh_1['x'],oh_1['y'],'o')
plt.show()
# 現在有四個 子資料集,要把他們放在一起,所以先建立一個畫布
# 就弄一個2x2的畫布吧
fig=plt.figure()
axis1=fig.add_subplot(2,2,1)
axis2=fig.add_subplot(2,2,2)
axis3=fig.add_subplot(2,2,3)
axis4=fig.add_subplot(2,2,4)
#  哈哈然後出圖吧
axes1.plot(oh_1['x'],oh_1['y'],'o')
axes2.plot(oh_2['x'],oh_2['y'],'o')
axes3.plot(oh_3['x'],oh_3['y'],'o')
axes4.plot(oh_4['x'],oh_4['y'],'o')
#向各個子圖新增標籤,並使用tight_layout方法確保各個座標軸彼此分開
axes1.set_title('oh_1')
axes2.set_title('oh_2')
axes3.set_title('oh_3')
axes4.set_title('oh_4')
#為整幅圖新增一個大標題
fig.suptitle('anscomble data')
plt.show()
#緊湊佈局
fig.tight_layout()

圖

  • 單變數畫圖
    單變數做頻數分析的時候,畫圖是最直觀的,樣本頻數特別小的,我一般也就合併到別的小樣本里了。直方圖就夠用,選一個變數多一點的檔案吧
import pandas as pd
tips=pd.read_csv('tips.csv')
print(tips)
# tips檔案 資料 截一下前五行
#  就長這樣吧
"""  "total_bill","tip","sex","smoker","day","time","size"
      16.99,1.01,"Female","No","Sun","Dinner",2
      10.34,1.66,"Male","No","Sun","Dinner",3
      21.01,3.5,"Male","No","Sun","Dinner",3
      23.68,3.31,"Male","No","Sun","Dinner",2   
      24.59,3.61,"Female","No","Sun","Dinner",4
"""
#  大概就是對 餐桌文化,比如不同性別,消費時間,餐桌級別等不同群體的消費賬單做個分析,totalbill 即消費賬單。
# ok 畫圖吧

import matplotlib.pyplot as plt
fig=plt.figure()
#  畫布啊畫布! 
axes1=fig.add_subplot(1,1,1) 
# 畫布一行一列,放第一個
axes1.hist(tips['total_bill'],bins=10)
# 直方圖表示式,y軸衡量的是totalbill,x軸以10為組距
axes1.set_title('histogram of total bill')
axes1.set_xlabel('Frequency')
axes1.set_ylabel('total bill')
plt.show()

在這裡插入圖片描述

  • 雙變數
    雙變數畫圖,兩兩對比,妙不可言。就還是用剛才的那個消費賬單資料吧

  • 1)散點圖

scatter_plot=plt.figure()
axes1=plt.add_subplot(1,1,1)
axes1.scatter(tips['total_bill'],tips['tip'])
# 再搞一下標籤就很完美
axes1.set_xlabel('total bill')
axes1.set_ ylabel('tip')
plt.show()

在這裡插入圖片描述

  • 箱線圖
boxplot=plt.figure()
axes1=boxplot.add_subplot(1,1,1)
axes1.boxplot(
#  箱線圖的第一引數是資料
#  由於要繪製多塊資料,因此必須把每塊資料放入列表中
    [tips[tips['sex']=='Female']['tip'],
     tips[tips['sex']=='Male']['tip']],
#列表中第一個資料表示分類類別,第二表示y軸資料
     labels=['Female','Male']
#展示標籤
)
axes1.set_xlabel('sex')
axes1.set_ylabel('Tip')
axes1.set_title('boxplot of tips by sex')
plt.show()

在這裡插入圖片描述

其實同樣是畫箱線圖,呼叫seaborn庫 程式碼更便捷,可調節的款式也比較多。留給下次睡不著整理吧。。

  • 多變數資料
    其實多變數說白了就是再雙變數的基礎上,區分了顏色,大小,形狀,增加了資訊量。最繁瑣的辦法就是用函數建立一個帶顏色的變數。
    比如在性別上區分顏色。
def recode_sex(sex):
    if sex =='Famale':
        return 0
    else:
        return 1
tips['sex_color']=tips['sex'].apply(recode_sex)
# apply 是對列呼叫函數的好方法,這行程式碼 賦值給tips資料集一個帶顏色引數的新列 ' sex_color '   

# 下面開始畫圖吧
# 建立畫布
scatter_plot=plt.figure()
axes1=scatter_plot.add_subplot(1,1,1)
axes1.scatter(
  x=tips['total_bill'], 
  y=tips['tips'],
  s=tips['size']*10,
# 增加一個‘size’ 變數,用大小*10倍的大小區分
  c=tips['sex_color']
  alpha=0.5
# 增加點透明度,以表示重疊的點
)
# 最後新增標題
axes1.set_title('total bill vs tip colored by sex and sized by size')
axes1.set_xlabel('total bill')
axes1.set_ylabel('tip')
plt.show()

在這裡插入圖片描述