作者 | Ashwin Pajankar
譯者 | Liangchu
校對 | gongyouliu
編輯 | auroral-L
全文共3300字,預計閱讀時間20分鐘。
第三章 使用Leather進行資料視覺化在第二章中,我們熟悉了使用Jupyter Notebook進行Python程式設計的步驟,所以現在你可以放心地使用Jupyter Notebook編寫互動式Python程式了。
在本章中,我們將使用Jupyter Notebook、Python、資料視覺化庫leather進行基本的資料視覺化。以下是我們將在本章中介紹的內容:
• leather的簡介
• 更多型別的視覺化
• 標尺
• 風格
在Jupter Notebook上執行OS(operating system)命令你已經知道如何使用Jupyter Notebook進行Python程式設計,現在我們將學習如何在筆記本notebook中執行OS命令,這對於我們使用pip安裝許多實用程式是很有用的,而且我們可以在筆記本中直接執行它,所以很方便。
為本章中即將涉及的所有程式碼建立一個新的Jupyter筆記本。本書每一章的學習中,我們都會這麼做,所以到本書的最後,我們將擁有按章節分類的所有程式碼,並存放在筆記本中。
要在筆記本單元格中執行OS命令,就要使用!作為字首,示例命令如下:
!dir
該命令的輸出如圖(3-1)所示:
可以透過執行以下語句更新pip:
!pip3 install--upgrade pip
執行以下語句安裝用於資料視覺化演示的庫:
!pip3 install leather
這將在計算機上安裝leather資料視覺化庫。在下一節中,我們將使用筆記本開始學習Python利用leather庫的視覺化。
Leather簡介Leather是一個易於使用且流行的Python資料視覺化庫。你可以在Python Package Index(PyPI,Python軟體包索引)所在的網站https://pypi.org/project/leather/上找到該軟體包。PyPI是第三方軟體包的儲存庫,我們可以使用pip3實用程式下載它。我們還可以在PyPI上搜索包的可用性。在筆記本中執行以下命令:
!pip3 search leather
輸出如圖(3-2)所示:
在繼續學習這個包之前,我們需要提前瞭解一些關於Python程式語言的知識。在Python中,製表符(tab)或縮排(index)用於指示程式碼塊。在一些流行的程式語言比如C、C++和java中,多行程式碼塊被封閉在括號{}中。然而Python強制程式設計師使用縮排表示程式碼塊,除此之外別無其他辦法。以下面的程式碼為例:
a = 3
if a%2 == 0:
print('Even')
else:
print('Odd')
在筆記本上執行程式碼即可看到結果了。還有一件事你也可以試試:我們先前學習過PEP 20,即Python之禪。Python創始人將其作為彩蛋新增到直譯器中,你可以執行以下語句呼叫它:
import this
若你在筆記本中執行該語句,它會在輸出中列印Python之禪的所有內容。
注意,無論我們要用Jupyter Notebook演示什麼程式,都可以做一些修改然後在IDLE中執行。我們使用Jupyter筆記本是因為它在即時反饋和互動上的優勢。現在讓我們使用import語句將leather庫新增到筆記本中。每個會話中只需匯入一次就可以在整個會話中使用了。輸入以下語句:
import leather
執行此命令,它會將庫匯入當前筆記本的會話中。使用標題(heading)區分每個topic的內容不失為一個好主意,不過用不用都取決於你自己。你會發現,我經常在本書的筆記本中使用標題來提供上下文和參考,以說明我正在演示的內容。這是個好習慣,可能你會想使用這種方法。
讓我們編寫一些簡單的程式碼來視覺化幾個點。我們可以在X-Y座標系中定義點。我們可以使用元組(tuple)列表(list)來定義點,如下所示:
data1 = [(1.5, 2), (2, 3), (4.5, 6), (7.5, 4)]
我們也可以將它們定義為一列列表(a list of lists):
data1 = [[1.5, 2], [2, 3], [4.5, 6], [7.5, 4]]
我們也可以將它們定義為元組的元組(a tuple of tuples):
data1 = ((1.5, 2), (2, 3), (4.5, 6), (7.5, 4))
我們還可以將它們定義為列表的元組( a tuple of lists):
data1 = ([1.5, 2], [2, 3], [4.5, 6], [7.5, 4])
如你所見,leather庫並不是很特別,而且可以很靈活地定義資料。
下面定義一個圖表(chart)物件:
chart = leather.Chart('Simple pairs of x-y')
接下來,建立一個點圖(dot chart):
chart.add_dots(data1)
然後使用如下程式碼將圖表視覺化:
chart.to_svg()
它將在這個筆記本上顯示輸出,如圖(3-3)所示:
我們可以使用以下語句將影象儲存到磁碟:
chart.to_svg('image1.svg')
我們可以按如下方式自定義點:
chart = leather.Chart('Customised Dots')chart.add_dots(data1, fill_color='#00ff00', radius=10)chart.to_svg()
接著讓我們定義更多的資料點:
data2 = [(2, 3), (4, 5), (5, 6), (7, 5)]
我們還可以將多個系列(這裡的系列指的是不同風格的點,即data1和data2)的點視覺化如下:
chart=leather.Chart('Visualizing Multiple series')
chart.add_dots(data1)
chart.add_dots(data2)
chart.to_svg()
輸出如圖(3-4)所示:
如上圖(3-4)所示,leather根據所屬系列自動為點分配不同的顏色。
視覺化的更多型別我們可以透過將點連線起來以線段形式將資料視覺化,如下所示:
chart=leather.Chart('Visualizing Lines')
chart.add_line(data1)
chart.to_svg()
輸出如圖(3-5)所示:
我們可以按如下方式自定義線條視覺化:
chart=leather.Chart('Customized Line')
chart.add_line(data1,stroke_color='#0000ff', width=3)
chart.to_svg()
如圖(3-6)顯示輸出:
我們可以將多條線段視覺化如下:
chart=leather.Chart('Visualizing Multiple Lines')
chart.add_line(data1)
chart.add_line(data2)
chart.to_svg()
如圖(3-7)顯示輸出:
我們可以在單個視覺化中視覺化多個型別的圖,如下所示:
chart=leather.Chart('Visualizing Multiple Types')
chart.add_line(data1)
chart.add_dots(data2)
chart.to_svg()
如圖(3-8)顯示輸出:
我們可以用條形圖視覺化:
data = [[1, 'A'], [2, 'B'], [3, 'C'], [4, 'D']]
chart=leather.Chart('Visualizing Bars')
chart.add_bars(data)
chart.to_svg()
在我們的資料集中,其中一個維度是文字資料。視覺化如圖(3-9)所示:
我們可以自定義如下:
chart=leather.Chart('Customizing Bars')
chart.add_bars(data, fill_color='#777777')
chart.to_svg()
輸出如圖(3-10)所示:
我們可以使用水平列(柱狀圖)進行視覺化,如下所示:
data = [ ('A', 1), ('B', 2), ('C', 3), ('D', 4)]
chart = leather.Chart('Visualizing Columns')
chart.add_columns(data)
chart.to_svg()
輸出如圖(3-11)所示:
我們可以按以下方式自定義列:
chart = leather.Chart('Customizing Columns')
chart.add_columns(data, fill_color='#77ff77')
chart.to_svg()
輸出如圖(3-12)所示:
標尺Scalesleather庫可以自動程式化地建立各種型別的Scale,能自動為文字資料建立順序標尺。這個例子和我們前面看到的一樣:
chart = leather.Chart('The Ordinal Scale')
chart.add_columns(data)
chart.to_svg()
當資料為數字時,將自動建立線性標尺。我們可以按以下方式設定其邊界:
chart = leather.Chart('Linear Scale')
chart.add_x_scale(1, 8)
chart.add_y_scale(1, 7)
chart.add_line(data1)chart.to_svg()
輸出如圖(3-13)所示:
將自動為時間(時間相關的)資料建立時間標尺:
from datetime import date
data = [
(date(2020, 1, 1), 4),
(date(2020, 3, 1), 6),
(date(2020, 6, 1), 2),
(date(2020, 9, 1), 1)]
chart = leather.Chart('Temporal Scale')
chart.add_x_scale(date(2019, 9, 1), date(2020, 12, 1))
chart.add_line(data)
chart.to_svg()
輸出如圖(3-14)所示:
風格Stylingleather提供了很多種風格可供選擇。我們可以按需求設定軸上的刻度值,如下所示:
chart = leather.Chart('Ticks Demo')
chart.add_x_scale(1, 8)
chart.add_x_axis(ticks=[1, 2, 3, 4, 5, 6, 7, 8])
chart.add_y_scale(1, 7)
chart.add_y_axis(ticks=[1, 2, 3, 4, 5, 6, 7])
chart.add_line(data1)
chart.to_svg()
輸出如圖(3-15)所示:
我們還可以自定義字型和顏色,用於顯示視覺化中的值和序列。下面是一個簡單的例子:
leather.theme.title_font_family = 'Times New Roman'
leather.theme.legend_font_family = 'Times New Roman'
leather.theme.tick_font_family = 'Times New Roman'
leather.theme.default_series_colors = ['#ff0000', '#00ff00']
chart = leather.Chart('Custom Fonts')
chart.add_line(data1)
chart.add_line(data2)
chart.to_svg()
如圖(3-16)顯示了這個例子的輸出:
我們也可以根據資料點的位置給它們上色,下面的程式碼演示了這一點。首先將random庫匯入檔案中:
import random
我們將用它生成如下資料點:
data = [(random.randint(0, 250),
random.randint(0, 250)) for i in range(100)]
將建立100個數據點。這100個點的x和y軸的值在0到250裡隨機選擇。我們可以編寫一個函式colorizer,根據點的位置以RGB的形式返回顏色值:
def colorizer(location):
return 'rgb(%i, %i, %i)' % (location.x, location.y, 150)
呼叫此函式來定義點的顏色,如下所示:
chart = leather.Chart('Colorized dots')
chart.add_dots(data, fill_color=colorizer)
chart.to_svg()
輸出如圖(3-17)所示:
總結本章介紹了在Python中使用流行的資料視覺化庫leather進行資料視覺化的演示。我們看到了不同型別的視覺化、風格和標尺。Leather是一個非常簡單的資料視覺化庫,所以只能視覺化簡單的形狀。
你的業務需求或科學視覺化可能需要更復雜、更精細的視覺化。為此,你需要熟悉科學的Python生態系統。下一章將詳細探討科學Python生態系統。我們還將學習Numpy n維陣列(也稱為ndarrays)的基礎知識。