數據科學入門 讀書筆記 day3

第三章 可視化數據

3.1 matplotlib

例如,製作一個(就像圖 3-1 這樣)非常簡單的圖形,就可以採取以下步驟:

<code>from matplotlib import pyplot as plt 
years = [1950, 1960, 1970, 1980, 1990, 2000, 2010]
gdp = [300.2, 543.3, 1075.9, 2862.5, 5979.6, 10289.7, 14958.3]
# 創建一幅線圖, x軸是年份, y軸是gdp
plt.plot(years, gdp, color='green', marker='o', linestyle='solid')
# 添加一個標題
plt.title("名義GDP")
# 給y軸加標記
plt.ylabel("十億美元")
plt.show()/<code>


數據科學入門 讀書筆記 day3

圖3-1

3.2 條形圖

如果你想展示某些離散的項目集合中的數量是如何變化的,可以使用條形圖。比如,圖 3-2 顯示了幾部電影所獲得的奧斯卡金像獎的數目:

<code>movies = ["Annie Hall", "Ben-Hur", "Casablanca", "Gandhi", "West Side Story"] 
num_oscars = [5, 11, 3, 8, 10]
# 條形的默認寬度是0.8,因此我們對左側座標加上0.1 # 這樣每個條形就被放置在中心了
xs = [i + 0.1 for i, _ in enumerate(movies)]
# 使用左側x座標[xs]和高度[num_oscars]畫條形圖
plt.bar(xs, num_oscars)
plt.ylabel("所獲奧斯卡金像獎數量")
plt.title("我最喜愛的電影")
# 使用電影的名字標記x軸,位置在x軸上條形的中心
plt.xticks([i + 0.5 for i, _ in enumerate(movies)], movies)
plt.show()/<code>


數據科學入門 讀書筆記 day3

圖3-2


條形圖也可以用來繪製擁有大量數值取值的變量直方圖,以此來探索這些取值是如何分佈 的,如圖 3-3 所示。

<code>grades = [83,95,91,87,70,0,85,82,100,67,73,77,0] 

decile = lambda grade: grade // 10 * 10

histogram = Counter(decile(grade) for grade in grades)
plt.bar([x - 4 for x in histogram.keys()], # 每個條形向左側移動4個單位
            histogram.values(), # 給每個條形設置正確的高度
            8) # 每個條形的寬度設置為8
plt.axis([-5, 105, 0, 5]) # x軸取值從-5到105
                                    # y軸取值0到5
plt.xticks([10 * i for i in range(11)]) # x軸標記為0, 10,...,100
plt.xlabel("十分相")
plt.ylabel("學生數")
plt.title("考試分數分佈圖")
plt.show()/<code>


數據科學入門 讀書筆記 day3

圖3-3

3.3 線圖

前面提供,可以用plt.plot()來製作線圖。這種圖形可以用來清晰地顯示某種事物的趨勢如圖3-6所示:

<code>variance     = [1, 2, 4, 8, 16, 32, 64, 128, 256] 
bias_squared = [256, 128, 64, 32, 16, 8, 4, 2, 1]
total_error = [x + y for x, y in zip(variance, bias_squared)]
xs = [i for i, _ in enumerate(variance)]
# 可以多次調用plt.plot
# 以便在同一個圖上顯示多個序列
plt.plot(xs, variance, 'g-', label='variance') # 綠色實線
plt.plot(xs, bias_squared, 'r-.', label='bias^2') # 紅色點虛線
plt.plot(xs, total_error, 'b:', label='total error') # 藍色點線
# 因為已經對每個序列都指派了標記
# 所以可以自由地佈置圖例
# loc=9指的是“頂部中央”
plt.legend(loc=9)
plt.xlabel("模型複雜度")
plt.title("偏差-方差權衡圖")
plt.show()/<code>


數據科學入門 讀書筆記 day3


分享到:


相關文章: