Python裡的排序有很多方法,在這邊歸納整一下。最基本的就是內建的sort()跟sorted()了。要注意的是兩者不大一樣喔。sort()是當場就直接了斷排序了,會改變本來的資料,sorted()是回傳排序後的資料,不影響舊資料:
numpy裡面也有sort函式,好處是速度快,另外跟sorted()一樣,不會改變原來資料:
如果資料是陣列的話,另一個優點是可指定陣列排列的方向:
2018年8月26日 星期日
2018年8月25日 星期六
Ipython特色與magic command
Ipython是Interactive Python (http://ipython.org )的簡寫,是一個超強的python開發環境,也是交談式控制台,其中大家很喜歡的Jupyter Notebook 或是新版Jupyter Lab粗略來說就是Ipython的網頁版,其中Ipython有不少好用的magic command可以幫助程式的開發,這篇就是簡單的筆記一下Ipython的特色與Ipython裡常用的magic command(魔術命令)。
? (help)
就是不懂或忘記程式怎使用的求救命令,會顯示指令的docstring。
使用時只要在指令後面加上"?"就可:
自己的function也可以:
是不是超神奇!!
另外外速鍵(Shift + Tab)也是可以的
?? (原始碼)
不多說,就是給你看看原始碼,不過你可能會發現,很多結果跟"?"是一樣的,因為不是Ipython裡寫的。
magic command主要都是肥宅喜歡的符號"%"開頭的。
%time
測量單一行指令的時間
%timeit
重複測量指令的時間 (執行幾次取平均,所以準確率高)
多行的程式可以嗎?
當然可以,就兩個%符號就行"%%" (肥宅們不要太興奮了!!)
Shell命令:
在Ipython中也可以直接執行shell的指令喔,不用視窗一直換來換去的了。
用棒子就可啦: "!"
真是cool!!
? (help)
就是不懂或忘記程式怎使用的求救命令,會顯示指令的docstring。
使用時只要在指令後面加上"?"就可:
自己的function也可以:
是不是超神奇!!
另外外速鍵(Shift + Tab)也是可以的
?? (原始碼)
不多說,就是給你看看原始碼,不過你可能會發現,很多結果跟"?"是一樣的,因為不是Ipython裡寫的。
magic command主要都是肥宅喜歡的符號"%"開頭的。
%time
測量單一行指令的時間
%timeit
重複測量指令的時間 (執行幾次取平均,所以準確率高)
多行的程式可以嗎?
當然可以,就兩個%符號就行"%%" (肥宅們不要太興奮了!!)
Shell命令:
在Ipython中也可以直接執行shell的指令喔,不用視窗一直換來換去的了。
用棒子就可啦: "!"
真是cool!!
2018年6月18日 星期一
Machine Learning: Polynomial Regression 多項式迴歸
線性迴歸(Linear Regression)是機器學習(Machine Learning)中常用且基本的model之一,但Sckit-Learn中線性迴歸不僅僅只是能處理線性資料,也能以簡單的方式以多項式迴歸(Polynomial Regression)對資料做擬合(fitting)。換句話說,也就是不儘是線性函數:
y = ax + b
也能以多項式擬合(fitting):
y = ax + bx^2 + cx^3+ ........
怎麼做呢? 基本上就是山不轉路轉,動不了特徵值,換個x值總可以吧。
來看看實際例子:
先import會用到的module:
其中PolynomialFeatures就是轉換座標的關鍵函式(Polynomial basis functions)。
舉例來說,若我本來輸入的x值是2,4,6,此函式就會幫我們轉成2次、3次等等。
只要利用.fit_transform就可以輕鬆達成!!!
看一下實際例子吧,假如我們有下列的資料:
這一看就明顯不是"線性",反而像正弦之類的函數,我們這邊嚐試利用多項式來解,
利用剛才的工具:
我們調用了sklearn.linear_model的LinearRegression,並用較高階的語法make_pipeline直接把x值轉換與模型建立一次完成了。注意在PolynomialFeatures中,我們使用到六次項(6)。
接著擬合剛建立的模型(poly_model)poly_model.fit(),其中xfit是我們自己建立的x值:
得到yfit後,再畫出本來的資料與得到的model,看來結果還不錯囉!!!
參考資料:https://jakevdp.github.io/PythonDataScienceHandbook/
y = ax + b
也能以多項式擬合(fitting):
y = ax + bx^2 + cx^3+ ........
怎麼做呢? 基本上就是山不轉路轉,動不了特徵值,換個x值總可以吧。
來看看實際例子:
先import會用到的module:
其中PolynomialFeatures就是轉換座標的關鍵函式(Polynomial basis functions)。
舉例來說,若我本來輸入的x值是2,4,6,此函式就會幫我們轉成2次、3次等等。
只要利用.fit_transform就可以輕鬆達成!!!
看一下實際例子吧,假如我們有下列的資料:
這一看就明顯不是"線性",反而像正弦之類的函數,我們這邊嚐試利用多項式來解,
利用剛才的工具:
我們調用了sklearn.linear_model的LinearRegression,並用較高階的語法make_pipeline直接把x值轉換與模型建立一次完成了。注意在PolynomialFeatures中,我們使用到六次項(6)。
接著擬合剛建立的模型(poly_model)poly_model.fit(),其中xfit是我們自己建立的x值:
得到yfit後,再畫出本來的資料與得到的model,看來結果還不錯囉!!!
參考資料:https://jakevdp.github.io/PythonDataScienceHandbook/
2018年6月13日 星期三
jupyter lab module不能import的問題
Jupyter Lab是jupyter notebook的新版,但會常碰到一些module沒法成功import的問題。我就碰過幾次了,都會跑出這個結果:
沒法import pandas-datareader
參考stackoverflow
我的方法就是重裝囉:
沒法import ipywidgets
參考ipywidgets官網
install the JupyterLab Extension
這應該能解決問題囉!!
ImportError: cannot import name 'is_list_like'
這邊把解法記下來:沒法import pandas-datareader
參考stackoverflow
我的方法就是重裝囉:
> pip install git+https://github.com/pydata/pandas-datareader.git
沒法import ipywidgets
參考ipywidgets官網
install the JupyterLab Extension
> jupyter labextension install @jupyter-widgets/jupyterlab-manager
這應該能解決問題囉!!
2018年6月3日 星期日
Python: Numpy介紹
List是Python中常用的資料結構,因Python動態型別的特性,可以建立"異質"的list,例如:
In[1]: L1 = [2, True, 'a']
[type(item) for item in L1]
In[1]: L1 = [2, True, 'a']
[type(item) for item in L1]
Out[1]: [int, bool, str]
不過這種"動態"的特性並不是免費的,list中的每一個項目必須包含了資料的型態、大小、參考計數等等額外的資料,所以list的缺乏運算的效率(或者說根本沒法做數學運算),因此若能儲存成同一型態,雖然缺乏型態上的彈性,但卻能大幅增加運算的效率。雖然python提供了標準的array模組,但真的好用且真正多數人使用的是numpy模組。numpy會把陣列中的資料轉成相同的型態,因而提升運算效能:
常用的numpy程式指令:
陣列的串接,可分成水平跟垂直的方式:
有人喜歡用reshape也可:
陣列分割,np.split()中的second argument是分割的位置:
創建陣列,如.linspace這個在往後繪圖中會常用到:
Universal Function提供了方便的矩陣運算,可以看看下列例子:
numpy內的亂數random也是很常用的,非常非常重要。
random函數其實並不是真的"隨機"取樣,而是偽亂數,就是有亂數的樣子,但實際上是先安排好的,所以其實可以避免每一次取的亂數不同,方法就是利用.RandomState(),argument輸入相同的數字,取得的"亂數"就會相同,可以確保每一次執行都有一樣的結果:
另外也可以使用條件式取得布林陣列(True或是False),並用np.sum()或np.count_nonzero()計算符合運算條件的資料數目,這個在數據的分析上非常有用的。
注意np.sum()可以axis=0 or 1限定以行或列的方向進行運算,另外np.any()、np.all()應該看例子就可以理解用途了。
不過這種"動態"的特性並不是免費的,list中的每一個項目必須包含了資料的型態、大小、參考計數等等額外的資料,所以list的缺乏運算的效率(或者說根本沒法做數學運算),因此若能儲存成同一型態,雖然缺乏型態上的彈性,但卻能大幅增加運算的效率。雖然python提供了標準的array模組,但真的好用且真正多數人使用的是numpy模組。numpy會把陣列中的資料轉成相同的型態,因而提升運算效能:
常用的numpy程式指令:
陣列的串接,可分成水平跟垂直的方式:
陣列的改造,如陣列互換,這個在Machine Learning中常用到,非常重要。
有人喜歡用reshape也可:
陣列分割,np.split()中的second argument是分割的位置:
創建陣列,如.linspace這個在往後繪圖中會常用到:
Universal Function提供了方便的矩陣運算,可以看看下列例子:
numpy內的亂數random也是很常用的,非常非常重要。
random函數其實並不是真的"隨機"取樣,而是偽亂數,就是有亂數的樣子,但實際上是先安排好的,所以其實可以避免每一次取的亂數不同,方法就是利用.RandomState(),argument輸入相同的數字,取得的"亂數"就會相同,可以確保每一次執行都有一樣的結果:
另外也可以使用條件式取得布林陣列(True或是False),並用np.sum()或np.count_nonzero()計算符合運算條件的資料數目,這個在數據的分析上非常有用的。
注意np.sum()可以axis=0 or 1限定以行或列的方向進行運算,另外np.any()、np.all()應該看例子就可以理解用途了。
2018年5月20日 星期日
Jupyter Lab
jupyter notebook利用直譯語言的特性可以即時輸出程式的結果,是很多人愛用的程式語言工具。而現在有更新版本出現囉!!!
jupyter lab是jupyter的新版,特別是針對檔案切換的不便作出改善。如下圖示jupyter lab的操作畫面,可以看到左邊多了檔案目錄的視窗,因此要找或轉換檔案比起jupyter notebook方便得多了。多了這些特性與功能,儼然演化成完整的的IDE了。
安裝jupyter lab很簡單:
>>>conda install -c conda-forge jupyterlab
不過有些套件module可能要重裝(pip or conda)。
執行時只要鍵入:
>>>jupyter lab
將出現下面畫面:
選擇Notebook,就大功告成囉!!!
現在jupyter lab版本仍然還是beta版,應該很快最會推出穩定的1.0版。
參考資料:
https://jupyterlab.readthedocs.io/en/latest/
jupyter lab是jupyter的新版,特別是針對檔案切換的不便作出改善。如下圖示jupyter lab的操作畫面,可以看到左邊多了檔案目錄的視窗,因此要找或轉換檔案比起jupyter notebook方便得多了。多了這些特性與功能,儼然演化成完整的的IDE了。
安裝jupyter lab很簡單:
>>>conda install -c conda-forge jupyterlab
不過有些套件module可能要重裝(pip or conda)。
執行時只要鍵入:
>>>jupyter lab
將出現下面畫面:
選擇Notebook,就大功告成囉!!!
現在jupyter lab版本仍然還是beta版,應該很快最會推出穩定的1.0版。
參考資料:
https://jupyterlab.readthedocs.io/en/latest/
2018年3月11日 星期日
Tensorflow (Tensorboard)
Tensorboard的使用方式如下:
在jupyter notebook中先運用tensorflow建構一個簡單的tensorflow模型:
之後輸入以下程式碼:
tf.summary.merge_all()
train_writer = tf.summary.FileWrite('你要存的檔案目錄', sess.graph)
就會將所有的tensorflow的資料打包,並存檔。
怎麼打開tensorboard呢?
要先離開jupyter notebook回到cmd,在Tensorflow的Anaconda的虛擬環境之中執行下列命令:
>activate tensorflow
接下來啟動Tensorboard:
>tensorboard --logdir=c:\你剛存檔的目錄
得到如下的畫面:
可以看到紅色框框中有個網址:
這是個人筆電的內部ip
2017年12月30日 星期六
改變Jupyter Notebook的預設瀏覽器
Jupyter Notebook是Python語言常用的IDE(Integrated Development Enviroment)
開發與編輯非常方便
不過Jupyter Notebook介面是經由預設的瀏覽器(如:Edge)
如果想使用不一樣的瀏覽器
除了可以經由改變電腦預設的瀏覽器之外
還可以利用下方的方式改變Jupyter Notebook預設的瀏覽器
這邊舉Chrome為例:
打開Anaconda Prompt
輸入以下指令
>jupyter notebook --generate-config
應該會看到以下回應:
Writing default config to C:..................(後面省略)
這個動作會在.jupyter目錄下開啟一個檔案:
jupyter_notebook_config.py
找到這個檔案後使用任一編輯器打開此檔 (看個人習慣,我自己使用的是免費的Notepad++)
此檔案中會看到一堆#開始的程式碼
找到下面一行程式碼
#c.NotebookApp.browser = ''
接著在下方輸入下列的三行程式碼 (注意不需要"#"在前面)
import webbrowser
webbrowser.register('chrome', None, webbrowser.GenericBrowser(u'C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe'))
c.NotebookApp.browser = 'Chrome'
(注意第二行程式中的路徑跟你當初安裝Chrome的目錄路徑有關)
存檔後,照著一般的方式開啟jupyter notebook
就會從預設的瀏覽器改為從Chrome開啟囉!!!
開發與編輯非常方便
不過Jupyter Notebook介面是經由預設的瀏覽器(如:Edge)
如果想使用不一樣的瀏覽器
除了可以經由改變電腦預設的瀏覽器之外
還可以利用下方的方式改變Jupyter Notebook預設的瀏覽器
這邊舉Chrome為例:
打開Anaconda Prompt
輸入以下指令
>jupyter notebook --generate-config
應該會看到以下回應:
Writing default config to C:..................(後面省略)
這個動作會在.jupyter目錄下開啟一個檔案:
jupyter_notebook_config.py
找到這個檔案後使用任一編輯器打開此檔 (看個人習慣,我自己使用的是免費的Notepad++)
此檔案中會看到一堆#開始的程式碼
找到下面一行程式碼
#c.NotebookApp.browser = ''
接著在下方輸入下列的三行程式碼 (注意不需要"#"在前面)
import webbrowser
webbrowser.register('chrome', None, webbrowser.GenericBrowser(u'C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe'))
c.NotebookApp.browser = 'Chrome'
(注意第二行程式中的路徑跟你當初安裝Chrome的目錄路徑有關)
存檔後,照著一般的方式開啟jupyter notebook
就會從預設的瀏覽器改為從Chrome開啟囉!!!
2017年12月29日 星期五
Jupyter Notebook 與 Spyder
在常見的Python的IDE(Integrated Development Enviroment)
Spyder算是我第一個使用的python編譯器
優點是介面簡潔、乾淨、清楚
還可以看看變數的改變
不過上網爬了許多文章,不少人都推薦Jupyter NoteBook
而且因為我是經由Anaconda安裝Python
兩種編輯介面都一起安裝了
所以某天好奇心驅使下也去試試
使用後發現
Jupyter Notebook最大的優點就是程式碼可以分區執行
對程式的理解很有幫助
確實是很適合初學者(像我自己)使用的IDE
用過就回不去囉!!
Spyder算是我第一個使用的python編譯器
優點是介面簡潔、乾淨、清楚
還可以看看變數的改變
不過上網爬了許多文章,不少人都推薦Jupyter NoteBook
而且因為我是經由Anaconda安裝Python
兩種編輯介面都一起安裝了
所以某天好奇心驅使下也去試試
使用後發現
Jupyter Notebook最大的優點就是程式碼可以分區執行
對程式的理解很有幫助
確實是很適合初學者(像我自己)使用的IDE
用過就回不去囉!!
訂閱:
文章 (Atom)





























