① 基於python的決策樹能進行多分類嗎
決策樹主文件 tree.py
[python] view plain
#coding:utf-8
frommathimportlog
importjson
fromplotimportcreatePlot
classDecisionTree():
def__init__(self,criterion="entropy"):
self.tree=None
self.criterion=criterion
def_is_continuous_value(self,a):
#判斷一個值是否是連續型變數
iftype(a).__name__.lower().find('float')>-1or
type(a).__name__.lower().find('int')>-1:
returnTrue
else:
returnFalse
def_calc_entropy(self,dataset):
#計算數據集的香農熵
classes=dataset.ix[:,-1]
total=len(classes)
cls_count={}
forclsinclasses:
ifclsnotincls_count.keys():
cls_count[cls]=0
cls_count[cls]+=1
entropy=1.0
forkeyincls_count:
prob=float(cls_count[key])/total
entropy-=prob*log(prob,2)
returnentropy
def_calc_gini(self,dataset):
#計算數據集的Gini指數
classes=dataset.ix[:,-1]
total=len(classes)
cls_count={}
forclsinclasses:
ifclsnotincls_count.keys():
cls_count[cls]=0
cls_count[cls]+=1
gini=1.0
forkeyincls_count:
prob=float(cls_count[key])/total
gini-=prob**2
returngini
def_split_data_category(self,dataset,feature,value):
#對分類變數進行拆分
#將feature列的值為value的記錄抽取出來,同時刪除feature列
② python命名空間問題
createplot.ax1
是表示:
ax1
是函數
createplot
的一個屬性,這個可以在函數裡面定義也可以在函數定義後加入也可以
example:
def
fun():
fun.x
=1
當你在python的命令窗口下,運行一次fun()後,x
就是
fun()的一個屬性,你在命令窗口下輸入
fun.x
後面會顯示
1
也可以
在
函數定義完後加入
屬性
如
fun.y
=
2,在使用
dir(fun),你就會發現fun有
x,y
這兩個屬性
③ 怎麼用python繪圖
你可以使用numpy和matplotlab這兩個庫來實現的你功能。
你的圖可以參考:
http://matplotlib.org/examples/pylab_examples/histogram_percent_demo.html
importmatplotlib
fromnumpy.randomimportrandn
importmatplotlib.pyplotasplt
frommatplotlib.tickerimportFuncFormatter
defto_percent(y,position):
#Ignorethepassedinposition.
#ticklocations.
s=str(100*y)
#
ifmatplotlib.rcParams['text.usetex']==True:
returns+r'$\%$'
else:
returns+'%'
x=randn(5000)
#Makeanormedhistogram.It'llbemultipliedby100later.
plt.hist(x,bins=50,normed=True)
#_percent.Thismultipliesallthe
#defaultlabelsby100,makingthemallpercentages
formatter=FuncFormatter(to_percent)
#Settheformatter
plt.gca().yaxis.set_major_formatter(formatter)
plt.show()
最主要的就是x軸和y軸的處理,我按照對數算了一下你提供的數據,好像和這個圖效果不一樣。
如果解決了您的問題請採納!
如果未解決請繼續追問
④ 求教python一個作圖的問題
matplotlib 是python最著名的繪圖庫,它提供了一整套和matlab相似的命令API,十分適合互動式地行制圖。而且也可以方便地將它作為繪圖控制項,嵌入GUI應用程序中。
它的文檔相當完備,並且Gallery頁面中有上百幅縮略圖,打開之後都有源程序。因此如果你需要繪制某種類型的圖,只需要在這個頁面中瀏覽/復制/粘貼一下,基本上都能搞定。
在linux下比較著名的數據圖工具還有gnuplot,這個是免費的,Python有一個包可以調用gnuplot,但是語法比較不習慣,而且畫圖質量不高。
而Matplotlib則比較強:Matlab的語法、python語言、latex的畫圖質量(還可以使用內嵌的latex引擎繪制的數學公式)。
本文目錄
1.Matplotlib.pyplot快速繪圖
2.面向對象畫圖
3.Matplotlib.pylab快速繪圖
4.在圖表中顯示中文
5.對LaTeX數學公式的支持
6.對數坐標軸
7.學習資源
Matplotlib.pyplot快速繪圖
快速繪圖和面向對象方式繪圖
matplotlib實際上是一套面向對象的繪圖庫,它所繪制的圖表中的每個繪圖元素,例如線條Line2D、文字Text、刻度等在內存中都有一個對象與之對應。
為了方便快速繪圖matplotlib通過pyplot模塊提供了一套和MATLAB類似的繪圖API,將眾多繪圖對象所構成的復雜結構隱藏在這套API內部。我們只需要調用pyplot模塊所提供的函數就可以實現快速繪圖以及設置圖表的各種細節。pyplot模塊雖然用法簡單,但不適合在較大的應用程序中使用。
為了將面向對象的繪圖庫包裝成只使用函數的調用介面,pyplot模塊的內部保存了當前圖表以及當前子圖等信息。當前的圖表和子圖可以使用plt.gcf()和plt.gca()獲得,分別表示"Get Current Figure"和"Get Current Axes"。在pyplot模塊中,許多函數都是對當前的Figure或Axes對象進行處理,比如說:
plt.plot()實際上會通過plt.gca()獲得當前的Axes對象ax,然後再調用ax.plot()方法實現真正的繪圖。
可以在Ipython中輸入類似"plt.plot??"的命令查看pyplot模塊的函數是如何對各種繪圖對象進行包裝的。
配置屬性
matplotlib所繪制的圖表的每個組成部分都和一個對象對應,我們可以通過調用這些對象的屬性設置方法set_*()或者pyplot模塊的屬性設置函數setp()設置它們的屬性值。
因為matplotlib實際上是一套面向對象的繪圖庫,因此也可以直接獲取對象的屬性
配置文件
繪制一幅圖需要對許多對象的屬性進行配置,例如顏色、字體、線型等等。我們在繪圖時,並沒有逐一對這些屬性進行配置,許多都直接採用了matplotlib的預設配置。
matplotlib將這些預設配置保存在一個名為「matplotlibrc」的配置文件中,通過修改配置文件,我們可以修改圖表的預設樣式。配置文件的讀入可以使用rc_params(),它返回一個配置字典;在matplotlib模塊載入時會調用rc_params(),並把得到的配置字典保存到rcParams變數中;matplotlib將使用rcParams字典中的配置進行繪圖;用戶可以直接修改此字典中的配置,所做的改變會反映到此後創建的繪圖元素。
繪制多子圖(快速繪圖)
Matplotlib 里的常用類的包含關系為Figure -> Axes -> (Line2D, Text, etc.)一個Figure對象可以包含多個子圖(Axes),在matplotlib中用Axes對象表示一個繪圖區域,可以理解為子圖。
可以使用subplot()快速繪制包含多個子圖的圖表,它的調用形式如下:
subplot(numRows, numCols, plotNum)
subplot將整個繪圖區域等分為numRows行* numCols列個子區域,然後按照從左到右,從上到下的順序對每個子區域進行編號,左上的子區域的編號為1。如果numRows,numCols和plotNum這三個數都小於10的話,可以把它們縮寫為一個整數,例如subplot(323)和subplot(3,2,3)是相同的。subplot在plotNum指定的區域中創建一個軸對象。如果新創建的軸和之前創建的軸重疊的話,之前的軸將被刪除。
subplot()返回它所創建的Axes對象,我們可以將它用變數保存起來,然後用sca()交替讓它們成為當前Axes對象,並調用plot()在其中繪圖。
繪制多圖表(快速繪圖)
如果需要同時繪制多幅圖表,可以給figure()傳遞一個整數參數指定Figure對象的序號,如果序號所指定的Figure對象已經存在,將不創建新的對象,而只是讓它成為當前的Figure對象。
import numpy as np
import matplotlib.pyplot as plt
plt.figure(1) # 創建圖表1
plt.figure(2) # 創建圖表2
ax1 = plt.subplot(211) # 在圖表2中創建子圖1
ax2 = plt.subplot(212) # 在圖表2中創建子圖2
x = np.linspace(0, 3, 100)
for i in xrange(5):
plt.figure(1) #❶ # 選擇圖表1
plt.plot(x, np.exp(i*x/3))
plt.sca(ax1) #❷ # 選擇圖表2的子圖1
plt.plot(x, np.sin(i*x))
plt.sca(ax2) # 選擇圖表2的子圖2
plt.plot(x, np.cos(i*x))
plt.show()
在圖表中顯示中文
matplotlib的預設配置文件中所使用的字體無法正確顯示中文。為了讓圖表能正確顯示中文,可以有幾種解決方案。
在程序中直接指定字體。
在程序開頭修改配置字典rcParams。
修改配置文件。
matplotlib輸出圖象的中文顯示問題
上面那個link里的修改matplotlibrc方式,我試了好幾次都沒成功。能work的一個比較簡便粗暴的方式(但不知道有沒有副作用)是,1.找到字體目錄YOURPYTHONHOMELibsite-packagesmatplotlibmpl-datafonts tf下的Vera.ttf。這里我們用中文楷體(可以從windows/system32/fonts拷貝過來,對於win8字體文件不是ttf的可以從網上下一個微軟雅黑),直接張貼到前面的ttf目錄下,然後更名為Vera.ttf。2.中文字元串用unicode格式,例如:u''測試中文顯示'',代碼文件編碼使用utf-8 加上" #coding = utf-8 "一行。
面向對象畫圖
matplotlib API包含有三層,Artist層處理所有的高層結構,例如處理圖表、文字和曲線等的繪制和布局。通常我們只和Artist打交道,而不需要關心底層的繪制細節。
直接使用Artists創建圖表的標准流程如下:
創建Figure對象
用Figure對象創建一個或者多個Axes或者Subplot對象
調用Axies等對象的方法創建各種簡單類型的Artists
importmatplotlib.pyplot as plt
X1 = range(0, 50)Y1 = [num**2 for num in X1] # y = x^2X2 = [0, 1]Y2 = [0, 1] # y = x
Fig = plt.figure(figsize=(8,4)) # Create a `figure'instanceAx = Fig.add_subplot(111) # Create a `axes'instancein the figureAx.plot(X1, Y1, X2, Y2) # Create a Line2Dinstancein the axes
Fig.show()Fig.savefig("test.pdf")
⑤ python中plot怎麼設置指定
我先假設你用的是python(雖然我感覺像是matlab) import matplotlib.pyplot as pltplt.plot(x,y,'ro',label="point")plt.legend()plt.show()這里legend可以顯示圖示 如果是matlab 你直接標legend=xxxx就行了 可以查一下用法
⑥ 如何用python繪制各種圖形
1.環境
系統:windows10
python版本:python3.6.1
使用的庫:matplotlib,numpy
2.numpy庫產生隨機數幾種方法
import numpy as np
numpy.random
rand(d0,d1,...,dn)
In [2]: x=np.random.rand(2,5)
In [3]: x
Out[3]:
array([[ 0.84286554, 0.50007593, 0.66500549, 0.97387807, 0.03993009],
[ 0.46391661, 0.50717355, 0.21527461, 0.92692517, 0.2567891 ]])
randn(d0,d1,...,dn)查詢結果為標准正態分布
In [4]: x=np.random.randn(2,5)
In [5]: x
Out[5]:
array([[-0.77195196, 0.26651203, -0.35045793, -0.0210377 , 0.89749635],
[-0.20229338, 1.44852833, -0.10858996, -1.65034606, -0.39793635]])
randint(low,high,size)
生成low到high之間(半開區間 [low, high)),size個數據
In [6]: x=np.random.randint(1,8,4)
In [7]: x
Out[7]: array([4, 4, 2, 7])
random_integers(low,high,size)
生成low到high之間(閉區間 [low, high)),size個數據
In [10]: x=np.random.random_integers(2,10,5)
In [11]: x
Out[11]: array([7, 4, 5, 4, 2])
3.散點圖
x x軸
y y軸
s 圓點面積
c 顏色
marker 圓點形狀
alpha 圓點透明度#其他圖也類似這種配置
N=50# height=np.random.randint(150,180,20)# weight=np.random.randint(80,150,20)
x=np.random.randn(N)
y=np.random.randn(N)
plt.scatter(x,y,s=50,c='r',marker='o',alpha=0.5)
plt.show()
8.箱型圖
import matplotlib.pyplot as pltimport numpy as npdata=np.random.normal(loc=0,scale=1,size=1000)#sym 點的形狀,whis虛線的長度plt.boxplot(data,sym="o",whis=1.5)plt.show()
#sym 點的形狀,whis虛線的長度
⑦ python繪制函數圖像
raw_input獲取的輸入是字元串,不能直接用np.array,需要用split進行切分,然後強制轉化成數值類型,才能用plot函數
我把你的代碼稍微修改了一下,可能不太漂亮,不過能運行了
x=[1,2,3]
a = raw_input('function>>>')
a = a.split(' ')#依空格對字元串a進行切分,如果是用逗號分隔,則改成a.split(',')
b = []
for i in range(len(a)):#把切分好的字元強制轉化成int類型,如果是小數,將int改為float
b.append(int(a[i]))
plt.plot(x, b, label='x', color="green", linewidth=1)
⑧ python 定義中 函數名.變數名是什麼意思
題主要表達的是這樣意思吧?
defabc1(x):
...
defabc2(x,y):
z=x(y)
...
if__name__=='__main__':
abc2(abc1,1)
⑨ python怎麼畫折線圖
一、環境准備
linux ubuntu 下需安裝下面三個包:
Numpy, Scipy,Matplotlib
分別輸入下面的代碼進行安裝:
[plain]view plain
pipinstallnumpy
pipinstallscipy
sudoapt-getinstallpython-matplotlib
測試是否安裝成功
[html]view plain
python
>>>importpylab
如果沒有報錯則安裝成功
二、開始畫圖
1. 畫最簡單的直線圖
代碼如下:
[python]view plain
importnumpyasnp
importmatplotlib.pyplotasplt
x=[0,1]
y=[0,1]
plt.figure()
plt.plot(x,y)
plt.savefig("easyplot.jpg")
結果如下: