Python 項目實踐二(生成數據)第一篇
上面那個小遊戲教程寫不下去了,以後再寫吧,今天學點新東西,了解的越多,發現python越強大啊!
數據可視化指的是通過可視化表示來探索數據,它與數據挖掘緊密相關,而數據挖掘指的是使用代碼來探索數據集的規律和關聯。數據集可以是用一行代碼就能表示的小型數字列表,也可以是數以吉字節的數據。
最流行的工具之一是matplotlib,它是一個數學繪圖庫,我們將使用它來制作簡單的圖表,如折線圖和散點圖。然後,我們將基於隨機漫步概念生成一個更有趣的數據集——根據一系列隨機決策生成的圖表。我們還將使用Pygal包,它專註於生成適合在數字設備上顯示的圖表。通過使用Pygal,可在用戶與圖表交互時突出元素以及調整其大小,還可輕松地調整整個圖表的尺寸,使其適合在微型智能手表或巨型顯示器上顯示。我們將使用Pygal以各種方式探索擲骰子的結果。
一 折線圖
1 繪制簡單的折線圖
下面來使用matplotlib繪制一個簡單的折線圖,再對其進行定制,以實現信息更豐富的數據可視化。我們將使用平方數序列1、4、9、16和25來繪制這個圖表。
import matplotlib.pyplot as plt squares = [1, 4, 9, 16, 25] plt.plot(squares) plt.show()
運行結果如下圖:
plt.show()打開matplotlib查看器,並顯示繪制的圖形,
2 修改標簽文字和線條粗細
import matplotlib.pyplot as plt squares=[1,4,9,16,25] plt.plot(squares,linewidth=5) #設置圖標標題,並給坐標軸加上標簽 plt.title("Square Numbers",fontsize=24) plt.xlabel("value",fontsize=14) plt.ylabel("Square of value",fontsize=14) #設置刻度標記的大小 plt.tick_params(axis="both",labelsize=14) plt.show()
代碼註釋的很詳細了,這裏再強調幾點:
(1)參數linewidth決定了plot()繪制的線條的粗細。函數title()給圖表指定標題
(2)函數xlabel()和ylabel()讓你能夠為每條軸設置標題
(3)在上述代碼中,出現了多次的參數fontsize指定了圖表中文字的大小。
(4)函數tick_params()設置刻度的樣式
運行結果如下圖:
3 校正圖像
圖形更容易閱讀後,我們發現沒有正確地繪制數據:折線圖的終點指出4.0的平方為25!下面修復這個問題。
當你向plot()提供一系列數字時,它假設第一個數據點對應的x坐標值為0,但我們的第一個點對應的x值為1。為改變這種默認行為,我們可以給plot()同時提供輸入值和輸出值:
import matplotlib.pyplot as plt input_values=[1,2,3,4,5] squares=[1,4,9,16,25] plt.plot(input_values,squares,linewidth=5) #設置圖標標題,並給坐標軸加上標簽 plt.title("Square Numbers",fontsize=24) plt.xlabel("value",fontsize=14) plt.ylabel("Square of value",fontsize=14) #設置刻度標記的大小 plt.tick_params(axis="both",labelsize=14) plt.show()
結果如下:
二 散點圖
1 使用scatter()繪制散點圖並設置其樣式
要繪制單個點,可使用函數scatter(),並向它傳遞一對x和y坐標,它將在指定位置繪制一個點:
import matplotlib.pyplot as plt plt.scatter(2,4) plt.show()
下面來設置輸出的樣式,使其更有趣:添加標題,給軸加上標簽,並確保所有文本都大到能夠看清:
import matplotlib.pyplot as plt plt.scatter(2,4,s=400) # 設置圖表標題並給坐標軸加上標簽 plt.title("Square Numbers", fontsize=24) plt.xlabel("Value", fontsize=14) plt.ylabel("Square of Value", fontsize=14) # 設置刻度標記的大小 plt.tick_params(axis=‘both‘, which=‘major‘, labelsize=14) plt.show()
2 使用scatter()繪制一系列的點
要繪制一系列的點,可向scatter()傳遞兩個分別包含x值和y值的列表,如下所示:
import matplotlib.pyplot as plt x_values=[1,2,3,4,5] y_values=[1,4,9,16,25] plt.scatter(x_values,y_values,s=400) # 設置圖表標題並給坐標軸加上標簽 plt.title("Square Numbers", fontsize=24) plt.xlabel("Value", fontsize=14) plt.ylabel("Square of Value", fontsize=14) # 設置刻度標記的大小 plt.tick_params(axis=‘both‘, which=‘major‘, labelsize=14) plt.show()
列表x_values包含要計算其平方值的數字,而列表y_values包含前述每個數字的平方值。將這些列表傳遞給scatter()時,matplotlib依次從每個列表中讀取一個值來繪制一個點。要繪制的點的坐標分別為 (1, 1)、(2, 4)、(3, 9)、(4, 16)和(5, 25),最終的結果如圖:
三 自動計算數據
手工計算列表要包含的值可能效率低下,需要繪制的點很多時尤其如此。可以不必手工計算包含點坐標的列表,而讓Python循環來替我們完成這種計算。下面是繪制1000個點的代碼:
import matplotlib.pyplot as plt x_values = list(range(1,1001)) y_values = [x**2 for x in x_values] plt.scatter(x_values,y_values,s=40) # 設置圖表標題並給坐標軸加上標簽 plt.title("Square Numbers", fontsize=24) plt.xlabel("Value", fontsize=14) plt.ylabel("Square of Value", fontsize=14) # 設置刻度標記的大小 plt.tick_params(axis=‘both‘, which=‘major‘, labelsize=14) #設置每個坐標的取值範圍 plt.axis([0,1100,0,1100000]) plt.show()
由於這個數據集較大,我們將點設置得較小,並使用函數axis()指定了每個坐標軸的取值範圍。函數axis()要求提供四個值:x和y坐標軸的最小值和最大值,結果如下圖:
四 刪除數據點的輪廓
matplotlib允許你給散點圖中的各個點指定顏色。默認為藍色點和黑色輪廓,在散點圖包含的數據點不多時效果很好。但繪制很多點時,黑色輪廓可能會粘連在一起。要刪除數據點的輪廓可在調用scatter()時傳遞實參edgecolor=‘none‘:
plt.scatter(x_values, y_values, edgecolor=‘none‘, s=40)將相應調用修改為上述代碼後,如果再運行scatter_squares.py,在圖表中看到的將是藍色實心點。
五 自定義顏色
要修改數據點的顏色,可向scatter()傳遞參數c,並將其設置為要使用的顏色的名稱,如下
plt.scatter(x_values, y_values, c=‘red‘, edgecolor=‘none‘, s=40)
你還可以使用RGB顏色模式自定義顏色。要指定自定義顏色,可傳遞參數c,並將其設置為一個元組,其中包含三個0~1之間的小數值,它們分別表示紅色、綠色和藍色分量。例如,下面的代碼行創建一個由淡藍色點組成的散點圖:
plt.scatter(x_values, y_values, c=(0, 0, 0.8), edgecolor=‘none‘, s=40)
值越接近0,指定的顏色越深,值越接近1,指定的顏色越淺。
六 使用顏色映射
顏色映射(colormap)是一系列顏色,它們從起始顏色漸變到結束顏色。在可視化中,顏色映射用於突出數據的規律,例如,你可能用較淺的顏色來顯示較小的值,並使用較深的顏色來顯示較大的值。
模塊pyplot內置了一組顏色映射。要使用這些顏色映射,你需要告訴pyplot該如何設置數據集中每個點的顏色。下面演示了如何根據每個點的y值來設置其顏色:
plt.scatter(x_values, y_values, c=y_values, cmap=plt.cm.Blues,edgecolor="none",s=40)
我們將參數c設置成了一個y值列表,並使用參數cmap告訴pyplot使用哪個顏色映射。這些代碼將y值較小的點顯示為淺藍色,並將y值較大的點顯示為深藍色,生成的圖形如圖。
七 自動保存圖片
要讓程序自動將圖表保存到文件中,可將對plt.show()的調用替換為對plt.savefig()的調用:
plt.savefig(‘squares_plot.png‘, bbox_inches=‘tight‘)
第一個實參指定要以什麽樣的文件名保存圖表,這個文件將存儲到scatter_squares.py所在的目錄中;第二個實參指定將圖表多余的空白區域裁剪掉。如果要保留圖表周圍多余的空白區域,可省略這個實參。
Python 項目實踐二(生成數據)第一篇