fbpx
Python

Python 封裝(Encapsulation) 實用教學

今天要來介紹Python物件導向設計中的封裝(Encapsulation)概念,主要的目的在保護程式碼中重要的實作細節不被外部知道,以防止外部程式碼直接或不當的存取類別中的屬性(Attribute)及方法(Method),而導致程式邏輯上的錯誤。 將複雜的運算邏輯進行封裝(Encapsulation)的好處是,外部程式碼只要透過統一介面來進行存取即可,而無需瞭解其中的運算過程,讓程式碼除了保有存取上的控制外,也易於維護。   今天要來說明的封裝(Encapsulation)重點包含了: Python封裝 (Encapsulation) 私有屬性 (Private Attribute) 私有方法 (Private Method) (more…)
學程式助教
January 18, 2020
Python初學程式

Python多型(Polymorphism)實用教學

今天要來介紹的Python多型(Polymorphism)在物件導向設計中非常的重要,不論是設計模式(Design Patterns)或設計原則(Design Principles),都會有多型(Polymorphism)的概念。 使用多型(Polymorphism)來設計類別架構,能夠讓程式碼的相依性不會那麼高,並且透過統一的介面來彈性擴充功能。今天主要的重點有兩個部分: Python抽象方法(Abstract Method) 多型(Polymorphism) (more…)
學程式助教
January 15, 2020
Python

Python 繼承(Inheritance)實用教學

今天要來介紹的Python繼承(Inheritance)在物件導向設計中非常的重要,使用得當可以提高我們程式碼的重用性(Reusable)及維護性。 繼承(Inheritance)顧名思義,就是會有父類別(或稱基底類別Base Class)及子類別(Sub Class)的階層關係。子類別會擁有父類別公開的屬性(Attribute)及方法(Method)。 所以Python繼承(Inheritance)的概念就是將各類別(Class)會共同使用的屬性(Attribute)或方法(Method)放在一個獨立的類別(Class)中,其它的類別(Class)透過繼承(Inheritance)的方式來擁有,降低程式碼的重複性。   Python繼承(Inheritance)的重要觀念如下: 如何使用Python繼承(Inheritance) 方法覆寫(Method Overriding) 多層繼承(Multi-Level Inheritance) 多重繼承(Multiple Inheritance) (more…)
學程式助教
January 12, 2020
Python

解析Python物件導向設計的3種類型方法(Instance,Class,Static Method)

一、實體方法(Instance Method) Python類別(Class)中沒有加任何裝飾詞(Decorator)的方法(Method),至少要有一個self參數,於方法(Method)被呼叫時指向物件(Object),其後可以依需求增加額外參數,如下範例: 實體方法(Instance Method)透過self參數可以自由的存取物件(Object)的屬性(Attribute)及其他方法(Method),藉此來改變物件(Object)的狀態,如下範例:   執行結果 從執行結果可以看到,我們印出self參數時,結果顯示為Cars類別的物件(Object),也就是說呼叫實體方法(Instance Method)時,Python編譯器會傳入物件(Object),使得self參數指向該物件(Object)。   另一方面,當透過類別(Class)呼叫實體方法(Instance Class)時,這會使得Python編譯器無法將self參數指向物件(Object),而發生TypeError的錯誤,如下範例: 執行結果 另外,在實體方法(Instance Method)中可以透過self.__class__屬性(Attribute)來改變類別(Class)的狀態,如下範例:   執行結果 範例中實體方法(Instance Method)即利用self.__class__屬性(Attribute)來改變door類別屬性(Class Attribute)。 二、 類別方法(Class Method) Python類別(Class)中有@classmethod裝飾詞(Decorator)的方法(Method),被呼叫時,相較於實體方法(Instance Method)的self參數指向物件(Object),類別方法(Class Method)為cls參數,指向類別(Class),如下範例:…
學程式助教
January 8, 2020
Python工程思維

Python財金應用:Black-Scholes選擇權訂價模型(1)

經典的量化金融案例,也是每天在交易室會碰到無數次的內容,推導Black-Scholes formula就不是本篇的重點,有興趣我會在文章最底下附上推薦書單。 選擇權(Options)就是在未來某個時點可用某個價格買進或賣出標的資產的權利,投資人可以買進當作避險或樂透賭博,選擇權槓桿倍數相當大,如果將Gamma效果考慮進去,槓桿可以至百倍,而行情看錯則頂多失去權利金而已,Black-Scholes就是利用未來標的資產進入價內的機率去計算出選擇權權利金的。 有了這個評價公式後,我們可以衡量在設定波動度下的選擇權理論價值,也可以利用市場報價來反推選擇權的波動率,一般稱為隱含波動率(Implied Volatility)。 上圖就是選擇權的報價畫面,可以看到某個日期到期的選擇權鏈(Options Chain)的各履約價報價,並從中反推各種參數。 用Python撰寫Black-Scholes評價公式其實很輕鬆,按照公式的寫法轉換為套件的函數而已,同步還可學會函數的應用。 以上就是一個簡單的選擇權評價範例,給定五個參數數值後,就直接開始計算d1與d2,大家可以對照一下公式,就會發現其實很簡單,下面將每個區塊拆解並解釋。 1. 引入套件(numpy, scipy) 由於Black-Scholes需要用到指數(Exponential)與常態累積分配(Normal distribution c.d.f.)的科學運算 現有預設的Python是沒有這類函數的,則需要引用大量擁有科學運算函數的numpy與scipy。 2. 給定Black-Scholes參數 先行預設標的資產價格(S)、履約價格(K)、無風險利率(r)、具到期日(t)與波動率(Sigma),在整數位後幾乎都有加上小數點,就是為了將變數設定為浮點位,以確保運算正確。 (Python不用另行宣告變數型態) 3. 計算d1與d2 有利用的函數為numpy的log與sqrt,詳細可對照封面照的公式,要小心括號的擺放。 4. 計算Call的理論價格…
學程式助教
January 5, 2020
Python

3個必須瞭解的Python屬性觀念

本篇接續淺談Python類別(Class)文章,細談Python類別(Class)中的屬性(Attribute)觀念。我們知道屬性(Attribute)可以分為實體屬性(Instance Attribute)與類別屬性(Class Attribute),今天就來探討它們的用法以及不一樣的地方。另外,也會介紹Python屬性(Property)的應用方式。 實體屬性(Instance Attribute) 類別屬性(Class Attribute) 屬性(Property) 一、實體屬性(Instance Attribute) 需伴隨物件(Object)的生成來建立,也就是透過點(.)的語法或在建構式(Constructor)中所生成的屬性(Attribute)。各物件(Object)的實體屬性(Instance Attribute)各自獨立,修改某一個物件(Object)的實體屬性(Instance Attribute)值時,不會影響到其他物件。如下範例: 執行結果 從範例中可以看到,我們透過點(.)的方式來建立物件(Object)的屬性(Attribute),mazda和toyota物件的color與seat為實體屬性(Instance Attribute),互相獨立且有各自的屬性值。接下來我們來看透過建構式(Constructor)所建立的屬性(Attribute): 執行結果 在第12行~第14行我們修改了mazda物件(Object)的color、seat及weight屬性(Attribute)值,並不會影響到其他物件toyota的屬性值,所以我們可以說color、seat和weight為實體屬性(Instance Attribute)。 二、類別屬性(Class Attribute) 定義在類別層級的屬性(Attribute),也就是在建構式(Constructor)之外的屬性(Attribute)。可以不需要建立物件(Object),直接透過類別名稱存取。各物件共享類別屬性(Class Attribute)值,也就是說當我們修改類別屬性(Class Attribute)值時,每一個透過此類別(Class)所建立的物件(Object),都會受到影響。如下範例: 執行結果…
學程式助教
January 4, 2020
Python

淺談Python類別(Class)

在學習程式語言時,或多或少都有聽過物件導向程式設計(Object-oriented programming,簡稱OOP),它是一個具有物件(Object)概念的開發方式,能夠提高軟體的重用性、擴充性及維護性,在開發大型的應用程式時更是被廣為使用,所以在現今多數的程式語言都有此種開發方式,Python當然也不例外。 而要使用物件導向程式設計就必須對類別(Class)及物件(Object)等有一些基本的了解,包含了: 類別(Class) 物件(Object) 屬性(Attribute) 建構式(Constructor) 方法(Method) (more…)
學程式助教
January 2, 2020
Python

Python迴圈

在撰寫程式的過程中,都有機會要重複執行一些相同的運算,但是重複撰寫好幾次同樣的運算看起來非常的沒有效率,所以在這個情況下我們通常會使用迴圈來幫我們完成,本篇就來介紹Python迴圈的使用方式,包含For-Loops、Nested Loops及while-Loops,並且說明用來控制迴圈流程的break及continue指令。 一、range()方法 在開始介紹Python迴圈之前,先來說明一個在執行迴圈時常用的range()方法,主要用來幫我們產生數列,語法如下: range(起始值,結束值,遞增(減)值) 使用說明: range(20):起始值預設從0開始,所以會產生0到19的整數序列。 range(10,20):起始值從10開始,所以會產生10到19的整數序列。 range(10,20,3):起始值從10開始,遞增值為3,所以會產生10,13,16,19的整數序列。 二、Python For-Loops敘述 可以針對Iterable(可疊代的)物件來進行讀取,Python內建幾個常用的Iterable物件,像是String(字串)、List(串列)、Tuples(元組)、Dictionary(字典)等,往後會出文章詳細的介紹。Python for-loop的語法如下: 在語法中,in 的後方就是for-loop要讀取的目標物,這個目標物的為Iterable (可疊代的)物件,一次讀取一個元素,然後用item(自訂變數名稱)來接收每次讀取到的元素,執行區塊中的運算。注意for-loop的結尾需加上冒號( : )及區塊中的運算式要有相同的縮排,範例如下: 在範例中,for-loop的讀取目標物為一個字串,每一次讀取一個字母,並且用letter變數來接收,執行print()方法。 三、Python Nested Loops(巢狀迴圈) 簡單來說,就是迴圈中又有一層迴圈,我們來看一個範例: 這個巢狀迴圈分別有外部迴圈(Outer loop)及內部迴圈(Inner loop),程式執行的時候,會先從外部迴圈取得第一個元素 M ,接著執行內部迴圈(分別為0,1,2),直到內部迴圈執行完畢,才會回到外部迴圈取得第二個元素 i ,然後再一次的執行內部迴圈(分別為0,1,2),依此類推,直到外部迴圈的目標物已讀取完畢,整個巢狀迴圈才結束。 四、Python While-Loops敘述…
學程式助教
December 4, 2019
Python學程式主題小聚

學程式主題小聚-【利用Python掌握消費者輪廓】

上週學程式主題小聚邀請到了Dennis-戴士翔來進行分享,擅長處理數據、資料分析且擁有許多相關經驗的他,透過個案來為我們介紹如何利用Python進行分析與報告的呈現以及如何建模。 (Dennis先前寫過一篇利用Airbnb來進行分析的文章,有興趣的朋友可以參考:https://pse.is/MCA3U ) 【人工智慧出現後的顧客關係管理(CRM)】 過去所進行的管理策略,是基於統計的方法進行資料的蒐集、擬定策略,慢慢地去了解企業的客戶,而在人工智慧出現後,可以透過程式的套件以及機器學習,更快速的去做分析。 而Dennis也提到若是想要善用人工智慧的話,資料就是一項相當重要的要素。 流量分析 採購商品銷售分析 集群分析 顧客流失預測 分類客戶等級 其中,又以集群分析最為重要,可以幫助企業進行掌握消費者輪廓、精準行銷與服務創新的工作,聽到這邊大家心中應該有疑惑,集群分析是什麼?先看看下方的圖,想想看那些會視同一群,哪些又是不同群。 有想法了嗎?我們來看看可以怎麼分~ 所謂的集群分析就是指將消費者分成一群一群的,並從分類出來得群體當中,找出相像的消費者,看看他們的共通點是什麼,會做出什麼樣的選擇。不過,一步一步將資料分類的作法,在資料量不大的時候做起來並非難事,一旦隨著企業的規模越來越大,資料數越來越多時,該怎麼辦?原本的做法是否就會需要付出更多的成本與時間? 【K-means Algorithm】 簡單來說K-means就是「物以類聚」的概念,是演算法的一種,也是一種無監督式學習(Unsupervised Learning)。可以想像他是一個數學函式y=f(x),「X」代表變數,你也能想像成顧客分析中消費者的「特徵」,「Y」代表標籤,將X丟入函式中就能得出Y。 【個案分析–Instacart Market】 活動的後半段時間,Dennis利用了案例來解釋以及深入的探討,同時,也教大家該如何利用Python建模,讓機器進行學習以分析資料與數據。 讓我們來假設一個情境(上圖),一家公司準備進行業務拓展時,意識到自己對於客戶的認知少之又少,沒有經驗可以依循,又或者是有經驗但卻分散在各處或不同人身上,沒有系統性的整理,以致於不知道該從何著手進行計畫,這時有人提出了下列的方案,你認為身為主管階層的你,該選擇哪種方案帶領公司朝向更好的地方發展呢? 方案一:資料探勘了解消費者 方案二:預測可能爆款商品做採購 方案三:預測折價券發放張數 你應該先問問自己一個問題:「你真的了解客戶嗎?」方案式什麼樣子固然需要仔細思考,不過最重要的是你如何找到公司或是消費者的痛點在哪,他們有什麼樣的需求。當你真正了解客戶的需求後,自然就會理解該做怎樣的決定,背後有哪些細節式需要注意的,避免公司做浪費時間又沒有成效的事情,也能降低風險。…
學程式助教
November 28, 2019
Python初學程式工程思維技術問題

Pandas 第6講:Python資料處理套件Pandas 資料字串處理

Open Data: Google Play Store Apps 在前一篇文章中我們介紹了如何調整欄位名稱以及改變欄位的型別,接下來我們要進入下一個重點:開始著手進行資料處理與計算。在進行資料處理時,如果是使用Python原生的資料結構與函式進行處理,往往會需要使用多重迴圈,但使用 Pandas 套件時,我們可以使用名為 Vectorize Opration Technoloage的技術直接針對整個欄位的資料進行處理,這將會大大提升我們的作業效率。 使用資料表 (more…)
學程式助教
November 21, 2019