顯示具有 Python 標籤的文章。 顯示所有文章
顯示具有 Python 標籤的文章。 顯示所有文章

2016年9月18日 星期日

[Python] Callback Function 回調函數


大概有一個月沒寫 XD.其實在家裡寫部落格真的是很麻煩的事情,雖然買了 VPN ,但是一直斷斷續續連線不是很順,越寫越抓狂就算了.而且前半個月去美國出差,簡直樂不思蜀,寶貴的晚上時間也都不想拿來寫 Blog ㄎㄎ.話扯回來,之前和朋友聊天談到 javascript 中 callback 是很普遍的用法,但是因為 python 沒有強制使用 callback ,加上我書讀得少,一直沒有深入瞭解.

根據 wiki 的說法,callback 就是將一段可以執行的程式碼作為參數傳到其他程式碼中,然後可以在適當的時機被呼叫使用.用 python 的語言來說,就是把一個 function 作為參數傳到另外一個 function 中.聽起來很玄,但是實作起來到底長什麼樣子.


  • 首先這邊有個數列 my_list
  • 第一個 function - is_even:判斷傳入的數值是不是偶數,如果是偶數則回傳一個 boolean 值 True ,反之則為 False.
  • 第二個 function - count_occurrences:有兩個參數,第一個參數是要判斷的數列,第二個參數得放一個輸出為 boolean 值判斷式,最後回傳該數列中,符合判斷式的數值個數.

這樣做的好處是程式碼可以更加簡化,比如說我今天需要一些函數,分別可以計算奇數,偶數,判斷三的倍數五的倍數,透過 callback 的寫法,第二個 function 只需寫一次,透過代入不同的判斷式就可以切換不同的功能.(實作上當然也可以不用callback的方式,而是用代入參數的方式來判斷倍數)

更多的討論可以參考:知乎上的討論,雖然我覺得有些例子太複雜了XD 但是也不失為一種參考.


2016年7月25日 星期一

[Python] 簡易網站爬蟲 ( Web Crawler) 抓取公開資訊觀測站的資料 - Payload 和 Session (下)


上一篇說明如何使用session 和 payload 進入資料畫面,這一篇就會非常簡單的介紹怎樣 parsing 要用的資料.有大大提示使用Pandas 的 read_html 會輕鬆很多,但是我還沒試驗,等我試驗成功再來介紹.

2016年7月21日 星期四

[Python] 簡易網站爬蟲 ( Web Crawler) 抓取公開資訊觀測站的資料 - Payload 和 Session (上)



平常工作上沒啥機會用到,所以很久沒有寫爬蟲了.最近因為平常下班沒事幹某人有工作上的需求,看他每天人工複製貼上很辛苦,就來從操舊業一下.這次要抓的是公開資訊觀測站中,上市上櫃公司資料上市上櫃公司資料可以依照產業別看到各公司的股東,地址,會計師事務所等基本資料,格式非常整齊,是個很好解析的資料.但是卻沒辦法直接從網址抓取,因為這個網頁有兩個特別的地方:
  1. 傳遞資料是用 POST 方法,而不是 GET.
  2. 網站有認 Session ,要在同一個 Session 中使用POST才能正確取得資料.
一些基本網站分析方式可以參考先前的拙作:

2016年6月21日 星期二

[Spark] 利用 Spark 將亂七八糟資料格式的 Fortigate Log 檔轉成關聯式資料

圖片來源:http://www.fastcompany.com/1842000/company-chaos-you-dont-know-youre-creating

不論資料多雜亂,在做資料分析之前,總是先要整理成關聯式資料,這一段一直是分析中最麻煩也最惱人的一段,特別是當資料量大的時候,其中可能問題又更多了.這次遇到的麻煩是要固定將機器每天的 Log 檔轉成關聯式資料,聽起來不難,是很常見的需求,但是看了資料格式之後整個傻眼.

這樣的格式麻煩點在:
  1. 非一般的資料格式: 既不是關聯式資料,也不是 Json 格式(真的很想打設計這種 log 出來的人),沒辦法輕易地整理.
  2. 分隔符號不固定: 雖然後面的資料是用 = 做為key和value分隔,但是前面四個欄位不是,表示資料要分開處理.
  3. 資料欄位內有空格: 如果預設用" "當做每個欄位的分隔符號,會在這些內部有空格的地方吃了大虧,所以要另外寫工具來區別這種情況.
  4. 每筆資料有的key不一致: 這是最麻煩的事.例如有些筆資料有 location 這個 key ,但是有些資料沒有...,連 null 都不給.所以就算你處理完上面三件事,每筆資料的欄位長度還是不一樣.

2016年2月27日 星期六

2016年2月21日 星期日

[Python] Google Deep Learning TensorFlow課程(一)


Deep Lerning在現在硬體計算能力增長的現在又開始火紅了起來.比起一般的Machine Learngin,Deep Learning在圖形,聲音,影片的辨識上又更強大.Google大神也將Deep Learning的套件開源出來叫做TensorFlow.TensorFlow是一個Deep Learning套件,希望能讓Deep Learning的使用更方便,更有彈性,而且能輕易套在產品上面.

2015年10月31日 星期六

[Python] Are the two binary trees equal?

enter image description here
Previous blog introduced how to implement a binary tree in Python[Python] Inplement Binary Tree,Today I’ll introduce how to determine if two binary trees are equal.
If two binary trees are equal, they are structurally identical and the nodes have the same value. Considering the definition above, we use dynamic function to test the two trees if they are equal.

2015年10月25日 星期日

[Python] 以Inorder Traversal 檢驗是否為BST

enter image description here
承襲上一回[Python] 實作Binary Tree,今天要介紹怎樣確認Tree是一個Binary Search Tree.
定義上的Binary Search Tree(BST):
  • 左邊子樹的值都小於node的值
  • 右邊子樹的值都小於node的值
  • 左右的子樹都必須是BST

[Python] 實作BST的走訪

enter image description here
承襲上一回[Python] 實作Binary Tree,今天要介紹怎樣走訪在Binary tree中各個Node,俗稱Binary Tree Traversal.

2015年10月11日 星期日

[Python] 實作Binary Tree

enter image description here
因為不是科班出身,所以對於資料結構和演算法都沒什麼概念,利用雙十廉價的機會好好惡補了一番Orz…
Binary Tree(簡稱BT)在資料結構中是很基本的概念,概念上是每個節點都有左右兩個子節點,每個節點儲存一個值,最上面會有一個起始節點(或稱為root),每往下長一層就多了2**n個節點,以此類推.從BT衍伸出許多相關概念例如heap或各種樹,可能的優點包括加快搜尋速度或是排序速度等等,所以先了解BT是很重要的.

2015年8月31日 星期一

[Apache Spark][Docker] 利用Jupyterhub打造隨開即用的spark教學環境--HiveContext設定




Spark在1.3.0之後發佈新的DataFrame,與Hive有更多的結合,預設也會啟動HiveContext,可以直接使用sql指令撈取hive中的資料.一般如果Spark與Hive放在同一個環境,只要將hive的hive-site.xml放到spark路徑/conf下面,就可以直接使用.但是現在當我們的環境放在docker裡面的話,設定上就要動點手腳.
相關文章:
[Apache Spark][Docker] 利用Jupyterhub打造隨開即用的spark教學環境
[Apache Spark][Docker] 利用Jupyterhub打造隨開即用的spark教學環境--HiveContext設定
[Apache Spark][Docker] 利用Jupyterhub打造隨開即用的spark教學環境-- numpy 設定

2015年8月12日 星期三

[閒聊] 資料科學家的日常(外傳)


前幾個禮拜過去同事想了解傳說中的資料科學家到底平常在做什麼事情.報章媒體總是喧嘩的好像有資料科學家就能把大便變成黃金,但是身材其中就覺得根本不是這麼回事,就跟一般工作一樣有一堆鳥事要處理,所有神奇的東西都是血汗換來的.

直接放上投影片內容:

相關閱讀:
[Python] 資料科學家的日常(一) Read Data
[Python] 資料科學家的日常(二) Clean Data-清理HTML標籤 l.html

2015年8月7日 星期五

[Algorithm] [python] K-鄰近算法(KNN k-nearest neighbors) 實作


機器學習演算法通常分為監督式學習以及非監督式學習兩種,監督式學習指已知部分要分類的對象的分類結果(例如男性女性),用這些已知的部分來學習分類的模式,將未知的對象來做分類;非監督式學習則是單純從屬性差異來將對象分類.今天要介紹的KNN(K鄰近算法)屬於監督式學習的一種,透過已知的分類結果來給予未知對象分類.

2015年7月18日 星期六

[Python] 資料科學家的日常(二) Clean Data-清理HTML標籤

enter image description here
繼承上次提的Read Data,Read本身除了讀取之外也包含著閱讀的意思.當資料讀取進來前後,都要好好閱讀資料,決定之後的分析方向.通常把資料讀取進來後,就會進入清理資料的階段.Clean Data雖說是分析資料的基本功,但是當資料大到某種程度後,Clean Data也變成相當惱人而且很多坑的事情.

2015年7月6日 星期一

[Python][教學] 網路爬蟲(crawler)進階實務 -- 破解十八禁網站(三)

enter image description here

一般瀏覽網頁的時候,遇到十八禁的網站都會套跳出像這樣的警示畫面,我們當然很習慣的點下已滿十八歲就能閱讀內容.但是對於爬蟲來說卻不見得那麼簡單.

2015年6月27日 星期六

[Python] Receiver operating characteristic (ROC) Curve 實作教學

enter image description here
        ROC Curve以及AUC(Area Under Curve)常被用來衡量預測模型的效果,但是因為之前不了解演算法只會套公式,所以趁空擋簡單實作了ROC演算法.

        ROC Curve主要是要將分類模型的效果視覺化,幫助研究人員選擇模型.ROC Curve適用於輸出為機率的分類(例如svm, logistic regression),計算在不同機率條件下,對於判斷結果的影響.

2015年6月12日 星期五

[Python][教學] 網路爬蟲(crawler)進階實務 -- 頁中有頁(二)

enter image description here
上一回[Python][教學] 網路爬蟲(crawler)進階實務– 自動爬蟲(一)介紹了怎麼繼承已經寫好的CrawlSpider物件來達到根據規則自動爬網頁的效果,但是如果你要爬的分頁沒有特定的規則,或是只想抓取頁面中的特定連結又該如何處理呢?
例如我今天要抓這個網站的掛號資料可以透過網址比對找出類似的網址之後,再一層一層的解析這個表格:

2015年5月30日 星期六

[Python][教學] 網路爬蟲(crawler)進階實務-- 自動爬蟲(一)

圖片來源:http://www.richbank.com.tw/CashierAndRegistration.html

前面幾篇[Python][教學] 網路爬蟲(crawler)實務(上)–網頁元件解析[Python][教學] 網路爬蟲(crawler)實務(下)–爬蟲策略以及設定介紹了撰寫爬蟲程式基本的觀察以及實作方式.這樣的方式爬一兩個小網站還可以,但是如果要爬比較複雜或是多個網站就比較難維護.因此實務上比較常使用Scrapy這個爬蟲框架來處理,這次將介紹更進階的使用方法給各位.