前言
華羅庚說過
數(shù)缺形時(shí)少直觀,形少數(shù)時(shí)難入微.
這句話第一次聽還是初中數(shù)學(xué)老師上二次方程課時(shí)說的.
最近看到了3blue1brown對線性代數(shù)的直觀解釋感覺豁然開朗,于是我又撿起了兒時(shí)對美妙數(shù)學(xué)的興趣. 發(fā)現(xiàn)一個(gè)博客,數(shù)據(jù)可視化很好的例子,決定花些時(shí)間和大家一起解讀一下
例程來自:https://www.machinelearningplus.com/plots/matplotlib-histogram-python-examples//
感謝b站UP "菜菜TsaiTsai" 分享這個(gè)博客.
正式開始“50圖”的學(xué)習(xí)另玖。首先的一個(gè)系列 <u>關(guān)聯(lián)圖</u> 這通常能告訴我們幾個(gè)事物之間的聯(lián)系煎楣。
例1
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# Import dataset
midwest = pd.read_csv("midwest_filter.csv")
midwest.head()
# Prepare Data
# Create as many colors as there are unique midwest['category']
categories = np.unique(midwest['category'])
#色譜
colors = [plt.cm.tab10(i/float(len(categories)-1)) for i in range(len(categories))]
# Draw Plot for Each Category
plt.figure(figsize=(16, 10), dpi= 80, facecolor='w', edgecolor='k')
for i, category in enumerate(categories):
plt.scatter('area', 'poptotal',
data=midwest.loc[midwest.category==category, :],
s=20, c=colors[i], label=str(category))
# Decorations
plt.gca().set(xlim=(0.0, 0.1), ylim=(0, 90000),
xlabel='Area', ylabel='Population')
plt.xticks(fontsize=12); plt.yticks(fontsize=12) # 返回坐標(biāo)和 標(biāo)簽
plt.title("Scatterplot of Midwest Area vs Population", fontsize=22)
plt.legend(fontsize=12)
plt.show()
解析
解析下代碼流程。
- 目的贞铣,畫出不同地區(qū)人口和地區(qū)面積的點(diǎn)圖部翘,y方向表示人口增長方向短纵,x方向表示面積增長方向
- 導(dǎo)入數(shù)據(jù)
- 編碼 要區(qū)分的目標(biāo) 這里是category 不同的地區(qū)
- 繪畫杆融,這里使用將每個(gè)不同category 對應(yīng)不同的色點(diǎn)集合
- 增加一些描述桑阶,比如坐標(biāo)軸的名字畅涂,和legend鱼填,就是圖右上方的標(biāo)簽條
方法參數(shù)解釋
- 數(shù)據(jù)下載 pd.read_csv("https://raw.githubusercontent.com/selva86/datasets/master/midwest_filter.csv")
- cm.tab10() colormap
- plt.scatter() 散點(diǎn)繪制方法
- 必要的 data =midwest.loc[midwest.category==category, :] 表示 篩選行中category 的 所有數(shù)據(jù)
- loc(),有必要說明毅戈,在pandas 中的常用函數(shù)苹丸。他的底層邏輯是用一個(gè)符合條件的 0,1 矩陣與原矩陣相與從而消掉不合條件的行列苇经。
這里我鼓勵(lì)你動(dòng)手嘗試并觀察這個(gè)函數(shù)如何給你想要行列結(jié)果
data = [[1,2,3],[4,5,6]]
index = ['a','b']
columns = ['c','d','e']
df = pd.DataFrame(data=data, index=index, columns=columns)
'''
c d e
a 1 2 3
b 4 5 6
'''
print df.loc['a']
- plt.legend(fontsize=12) 右邊邊標(biāo)簽 還有些其他的畫布設(shè)置能讓圖標(biāo)更容易被讀懂赘理。
圖像
應(yīng)用
分布圖的優(yōu)勢在于讓我們發(fā)現(xiàn)某種密度,這種密度可能就是字面上密度扇单,還可能是一種概率密度商模。盡管上面的圖并看不出太多的區(qū)域面積與人口數(shù)量有什么必然的關(guān)系。但是可以得出一點(diǎn)蜘澜,研究左下方那一塊密集的小區(qū)域比研究整個(gè)地域來個(gè)更加有性價(jià)比施流,不是嗎?
下期預(yù)告
例2 氣泡圖 ——更多的關(guān)系等待發(fā)現(xiàn)