2018年12月9日 星期日

生活雜記 - 學車、進修、小生意

近月決定學車,第一步的報考筆試,政府網上報名的功能完全是廢的,只有襯著放假日子,親身到長沙灣填表報考。報考的櫃位並不多人輪侯,整個過程算很快完成。只要帶好: 1) 近3個月發出的住址證明,2) $510 報考費。 11月6號報考,筆試排到 11月29號,筆試合格的話即日發出路試排期:下年9月初。之後就是慢慢再找學車師傅。以從前在街機賽車的表現,認真擔心,祝好運⋯⋯  對將來是一方面看到最近的交通事故的意外難料,另一方面看到近期對 GOGOVAN 出市集、開始出批發市場大手入貨等需求,如果更投入幫手的話車應該會變得很實用。

留意到一個 「Udemy限免課程」的 FB group,經常有免費課程的優惠碼提供,應該是用程式撈出來的。已經遇到幾個好像不錯的課程,試過輸入優惠碼是有效的。人奇怪的是,對比之前在Coursera付費的自學課程, 今次幾個課甚至連開始也未曾開始,這是對於沒有認真付出就沒有珍惜和盡力的意思嗎?還是面對未熟悉的平台就遲遲地不去行動? 進修的心願偶爾仍會浮起,看大學的課程選擇科目時,卻總是很猶豫很多可以自學的內容是否值十幾萬去讀個碩士 或 短期課程?如果是買一個學位的心態,換取轉行的資格從Freshgrade做起。是否值得?

年尾PMI membership 要續期,又是一筆開支 :( 。好不好盡快了結那 60 PDU 就等2年後,才 PMI + PMP 一次過續?還有又到為網址續期的時侯,為女友生意開展的網頁掉空了一段時間。跟 FB 提我的兩年前的Arduino玩具車一樣,彷彿很多興趣總可以去到某個水平,然後就是無形的高牆罇頸。以業餘的時間投放,而要做到更好成果並不容易?

工作進入年尾12月, 人手緊拙。Mission impossible的困境又叫人怎會應付到呢。遲收工的情況令家人都經常咋形,當收工後回到家已經是別人晚飯完兼收拾好的時候,霋時也會感到自己其實是不是收工很晚呢? 工餘時間又要幫手伴侶的生意,沒有什麼自主的時間。但 FB上提醒的回顧,距離早期到觀塘新商廈擺過的市集,原來已經是2年了。這小生意現在也總算有些成長,從摸索中到可以是有點成形了,為她的成果歡喜。要增加生意額,大概就要改變運作的方法去擴大生產規模,這方面怎樣做還要再摸索⋯⋯  然而,一天只有24小時,我又可以做得多少呢?

2018年12月5日 星期三

社創的 Side Project

近幾個月在進行的一個項目,近日終於走到一個milestone里程碑,項目通過了評審,明年可以撥款推展。雖然撥款之外伴隨的是資源、還有限制,不過相信成事最重要的還是靠成員的想法和執行力,反而是對自己能力上可以做到什麼,就充滿懷疑和不安。為己為人為行業為社會,希望能做到一點成果、讓另一伴所走的輔導業情況有一點變化、讓人減輕一份困苦煩惱。所以,希望這個生活中的 Side Project 可以走下去。

近年愈感到一個 Designer 的重要,要成就出一件見得人的作品,外觀包裝最影響著給人的印象。剛好今次在大家考慮製作Logo時,Youtube 上自學了一下 Inkscape 這個開源軟件,一個類似 Illustrator 的向量繪圖工具,把他們的想法做出來,又打開了一扇技術的門。之後剛好又看到幾本書想分享一些章節,粗粗地自製一份圖片版的內容分享。

不過暫時技術只做到一些簡單繪圖和小修小改。對於設計上的美感和表達、可以隨心而畫的技術等,如果有一個更專長於畫畫的人應該會做得更好吧?



2018年10月28日 星期日

「WebOrganic」mBot 友師義工、深圳「厘米空間」 考察

最近參加一個在屯門區的 STEAM 義工師友計劃,最近開始到小學和他們一起上堂玩 mBot 機械人編程,第一天坐在兩位小朋友旁邊觀察,看著兩個人仔的互動比 mBot 吸引,一動一靜的倆人、從行為可以看到他們有不同的需要,和成長中要學習的課題。下一節開始會再和其作人組成小組去設計表演、參賽,這兩種性格如何和別人合作,可能是挑戰同時也是學習機會。很容易表現出想法和需要的小朋友,從什麼時麼人在長大後變得複雜難懂的呢?

兩年前的Arduino學習文,記得大概是那時候 mBot 初被留意作為教學用途,到現在市面所見的STEAM興趣班基本都以mBot作為兒童編程教學了。
Android + Arduino 小車的手機藍牙遙控計劃
Arduino 淘寶小車 - 焊接/使用CH341的Driver/功能測試



上星期跟一個前海交流團北上,由招商局基金會安排到訪位於深圳南山區「蛇口網谷」雙創基地(沿山路和南海大道之間,工業四路至工業八路)的地區(南山半島東部,應該是后海灣地區),參觀一間 「招商啟航」營運 的孵化加速器—「厘米空間」 (CM Space 的 CM 就是招商局的 China Merchant ),和相鄰的共享工作空間-「招商創庫」。整個園區會令我想起在班加羅爾工作時的園區,巴士沿大街行走到園區前下車,經過一個保安崗位和大閘進入,三楝的大厦園繞入口後的空地。我們進入其一座約十層的工業區大厦,就是今次拜訪的「厘米空間」。

2018年10月19日 星期五

[閱讀] 不被情緒勒索的 51 個方法


早前誠品找參考書的時候,發現到這本《不被情緒勒索的 51 個方法》-和田秀樹,當查過圖書館已有後,就打算慢慢等排預約。到某天另有地方剛好發現了,可以借去閱讀。原來,它的內容跟書題所寫的「情緒勒索」這預期有點出入。相比近年所講的以情緒作為操控手段的(Emotional Blackmail)— 「有些時候我們為了維繫與重要的人的關係,為了不想要自己被貶低、為了降低焦慮,會重複被迫去做一些自己不想做的事情……」這本書所講的更多是:如何不被情緒操控了自己,和如何調整情緒。所以 Emotional Backmail 式的情緒勒索著墨不算多,只有第一篇「你總是在意別人的眼光嗎?」勉強地關於那個「不被情緒勒索」的主題……

【圖輯】15張圖讓你一次了解情緒勒索(emotional blackmail)


如書中的前言,情緒整理的重點不是在於如何消除自己的情緒,而是如何不被情緒影響。我們畢竟是人就會有情緒不好的時,但如果可以的話,與其心情不好,還是希望好心情多一點,所以作者希望這是讀者可以心情由負轉正的情緒之書。

有豐富的情緒和把情緒表達出來的人更討人喜歡,但是想做到不被情緒劫持了你的行為反應,要減少引致行為問題,起點就由覺察自己的情緒開始。第一是了解自己,例如「對於自己比別人更急躁」這件事要有自覺。第二是不把自己的想法視為絕對,接受其他的可能性。第三是重視結果,然後在做出行為之前可以在認知上作出選擇。本書的這種模式,有點像從認知行為學派的角度出發。

The last of the human freedom is to choose one's attitudes. - Viktor Franki

2018年10月8日 星期一

2018年夏 - 富士山:距離山頂尚餘那最後的一段路

從打算行富士山開始,今年已經在 Facebook 見到好幾位朋友登富士山的相,網上看到的形容大多是「登山其實唔難」。今次到埗日本時,颱風天鴿剛剛經過了關西,到了預定登山的日子剛剛好重開了;遇到過一些行李上的問題也終於解決了,所以更是對上山充滿期待。但其實今次是沒有走到山頂了,對這個失敗記錄本來也有點猶豫,只係理性再考慮,都相信在第二天早上天氣的因素下,撒退是正確的決定。可惜風雨之下未有紀錄當時天氣,網上找到幾段當日記綠,好讓看到也有心理準備:除了個人體力、裝備和行程準備等,山上的天氣變化也是可以令難度和風景大幅改變。「謀事在人、成事在天」。

9月7日5:24の富士山頂上です。台風の時のように荒れてます。突風が風速15mを超えています。気温は6.1℃です。  - https://twitter.com/mushphoto/status/1037802596017172480

9月7日9:30頃の富士山御殿場口頂上の様子です。雨風ともに強く、台風並みです。大変危険です。気温は7.1℃です。 - https://twitter.com/mushphoto/status/1037870025284022272

Yamakei Online > みんなの登山記録 > 富士山(54歳から始める山さん)
https://www.yamakei-online.com/cl_record/detail.php?id=140693


早上約八九時到河口湖站買巴士票後,到7號候車處等車,也是整個車站最多人排的隊伍,在車站的最外圍。而站旁有一個專櫃賣票,要方便的話可以不用進大站買呢。巴士大約 9.30 開車,開往五合目Subaru Line 吉田口站 準備出發。先行逛一下這裡的商店,買了一支中等尺寸到膊頭的金剛杖,行神社,和在手信店二樓的餐廳食飯,之後就和女友分道揚鑣,大約十一點開始上山;而她就可以用山下的「河口湖・西湖」周遊巴士卷 遊覽。

初段平路為主,可見火山地質的土壤

北富士演習場、山中湖

2018年9月3日 星期一

「中學生看內地與香港關係」的變化-雙方交流而非單方融合,才能彼此學習

這份有關「中學生看內地與香港關係」的問卷調查,回顧原文的話其實伴隨著大量的題目,所以可以抽出不同的感興趣的數字作為題材,除了常見有關身份認同、兩地關係評分的數字外,還有幾項數字的變化和往後發展在我看來是有重要意義的。

中港融合(或者:香港被融合)是一些對香港前境有所關心的人,所感受到的一份未有明言,但似乎某個方向在逐步進行中的感覺。 不必等到50年後(現今只剩30年了)才一下子去傾要不要那套「一國兩制」、「港人治港」、「高度自治」⋯⋯,變化早在這大方向中潛移默化著。害怕改變可能讓人選擇全面封閉或抵制,要擇善固執當中的選擇才是困難。強勢的,與其只去強推改變,更有價值的應該是好像不同的兩個人,如何在交流中一起改進,『和而不同』。

許多負面指標的下降,對前往內地的接受程度上升等,正好反映著內地的一套在對香港的日常影響已逐漸增加。早從以往的較為離地的經濟金融,到散戶參與的股市方面,香港股市從受美股影響變成與中國的相關性更大。從前睇恆指你會想起匯豐,今日你會想起騰訊;近幾年淘寶、順豐是不少「達人」的購物、送貨平台。支付寶Alipay、微信Wechat 的手機支付今年同時以折扣攻入香港消費者的使用習慣。韓國綜藝節目變成內地版後一樣受香港年輕人留意,多套內地電視劇集在香港熱播。這些日常生活上的事慢慢造成一部份的文化差異收窄,要到內地生活(旅遊、創業、升學、工作、定居)可以幻想轉變比昔日減少了,接受程度就會增加。

對於熱愛旅遊的香港人,在前往內地旅遊的接受程度最高,"周未Chill下" 已經常見於最近介紹深圳玩樂的媒體文章,很可能是今後拉近香港人認識內地文化的一道門。相對於旅遊對很多人印象必然是離開香港,其次的創業大抵出於本地的機遇不足。而升學除了特定程度/科目外,內地大學往往仍是本地大學之後的次選,吸納著部份學生。
願意往內地生活的比例在2018年都有上升


問題中分開了「交流」和「融合」,不知在答題者的想像中是否有清晰的分別,結果反映出是交流多於融合。我想這正是要推動中港關係是「即」是「離」的人應該思考之處。中港兩地各有擅長和落後之處,學習別人長處,改善自己人民生活才是一個地方的政府應該推動之事。如果把一切都齊一了,反而令當地欠缺特色和變化,沒有了新的可能性,然後 The City Is Dying, you know?曾經重讀過當年1979-1984年間探討香港回歸到訂立中英聯合聲明時的歷史檔案,當年中國對香港情況的方針是保持它的繁榮穩定,其實也是因為對當年國內推動改革開放有幫助,所以就算收回香港也不欲香港融合走當時內地的模式。今日香港人除了默然接受或抗爭,可以顯示自己的什麼長處? 是否能夠理解雙方想法,甚麼因素可以影響對方要推動A方針而非B方針?



2018年7月21日 星期六

[VBA] 打開 IE 瀏覽器去操作和列印

辦公室之用,之前寫過如何用 VBA 控制 IE 去將網頁列印成 PDF。但後來遇到在 PDF 軟件上的問題,本應可以將存檔也自動化的步驟失效了,而自己對這工具的需求也減少了,就未有再檢視如何改進它。最近重新拾起辦公室內的一些VBA小工具,看見能發揮效果的感覺真不錯,所以,一於重新嘗試如何改進這個自動化的小工具,先整理之前的方法。

在基本的VBA功能以外,還有兩個 Library 需要先引入:打開 Reference - VBAProject,勾選引入 Microsoft Internet Controls 及 Microsoft HTML Object Library。 下面代碼中的 "ShellWindows" 會得到 Windows 下的 Shell 窗口對象,可以用来操控 Windows的文件夹和 IE 瀏覽器。 "InternetExplorer" 顧名思義可以控制Internet Explorer。 取得某個 IE 的控制後,會需要一點 HTML 語法 和 DOM 結構的認識,之後用 GetElementByID("") GetElementsByTagName("").Item(n)、 GetElementsByClassName("").Item(n) 之類的方法去取得HTML 當中的元素; 甚或如透過 .Style.display 、 .innerText 等屬性去改變網頁的顯示。

(直接印紙的話仍可以做到,只是要轉成 PDF 的話就要看 PDF 軟件的造化..... 可能下周試用 Sendkeys處理 Print Dialog?其實VBA又是否能做到其他語言中的Web Scraping方式呢,大概是未有Library的第 3 方支持?。 另外,因為保守地想給予足夠時間讀取網頁,所以也加入很多等待的時間。)

Sub IEautoprint
    
    Dim shellWins As ShellWindows
    Dim myIE As InternetExplorer
    
    Set shellWins = New ShellWindows
    Set mySheet = ThisWorkbook.Sheets("SecuritySheet")
    Set myIE = CreateObject("InternetExplorer.Application")
    StartRow = 2
    MaxRow = 65536
    
    '打開網址
    myIE.Navigate "http://website.com/fullpath"
    Application.Wait (Now + Time("0:00:01")) 

    ' Optional - 以 Title 標題去選擇視窗
    If shellWins.Count > 0 Then
        For i = shellWins.Count - 1 to 0 Step -1
            If (shellWins.Item(i).LocationName = "Window Title") Then
                Set myIE = shellWins.Item(i)
                myIE.Visible = True
                Exit For
            End If
        Next
    End If
    
    ' Loop Excel mySheet 中的 Input, 重覆:遞交HTML表單、改變頁面顯示、列印 等動作 
    For x = StartRow To MaxRow
        ' 填入HTML的表單及遞交
        Do While .ReadyState <> 4
        Loop ' 等待網頁載入完畢
        myIE.Document.Form(0).Elements("CTYPE").Value = mySheet.Cells(x,1).Value 'Html 表單中的元素
        myIE.Document.Form(0).Elements("CCODE").Value = mySheet.Cells(x,2).Value 'Html 表單中的元素 
        myIE.Document.Form(0).Submit 'Html 表單Submit
 
        ' 改變 HTML中的Style屬性去影響 Expand/Collapse 
        Do While .ReadyState <> 4
        Loop
        On Error Resume Next
        If Not (.Document.getElementbyID("hide105") Is Nothing) Then
            myIE.Document.getElementbyID("hide101").Style.display = "None"
            myIE.Document.getElementbyID("hide105").Style.display = "Block"
        End If
        
        ' 列印
        myIE.ExecWB 6, 2   'ExecWB指令, OLECMDID_PRINT=6, OLECMDEXECOPT_DONTPROMPTUSER=2
        Application.Wait (Now + TimeValue("0:00:02")) ' 等待特定的時間讓檔案建立
        
        Do While .Busy Or .ReadyState <> 4
        Loop
        
        ' 新一格沒有內容時完結 => Done~!!
        If mySheet.Cells(x+1, 1).Value = "" Then
            GoTo LastLine            
        End If
    Next
' 完結時的處理LineDone:
    MsgBox "Done"
    Set shellWins = Nothing
    Set myIE = Nothing
End Sub


ShellWindowshttps://msdn.microsoft.com/en-us/library/windows/desktop/bb773974(v=vs.85).aspx
InternetExplorerhttps://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/platform-apis/aa752084(v=vs.85)
ExecWB 的 IOleCommandTarget interfacehttps://docs.microsoft.com/en-us/windows/desktop/api/docobj/ne-docobj-olecmdid
OLECMDIDhttps://docs.microsoft.com/en-us/windows/desktop/api/docobj/ne-docobj-olecmdid

2018年7月6日 星期五

Coursera - Applied Data Science with Python 學習筆記 05 - Social Network Analysis

到了這系列課程的最後一門課-社會網絡分析 (Social Network Analysis) ,原本以為是研究 FB、Twitter 等平台的文字資料;原來是運用圖論中的節點和線邊構成的『圖』去代表社會網絡中的人和關係。純圖論的一些經典實施問題包括:7橋問題(path)、最短路徑問題(distance)、4色問題(labeling)。圖論伸廷到今天的社會網絡分析,研究的方向可能是社群的結構、資訊如何流通等等,社交平台做成的網絡是這個方向的一大推動力,正如 Facebook 提供讓開發者使用的 Graph API 就是以 物件-關係 來處理資訊。Python中有 NetworkX 套件特別用來處理這些Social Network Analysis 問題的工具。

Week1 是圖論上的基礎,和一些特別的圖例如 bipartite graph, 它的L-Bipartite graph (weighted) projection。解釋過什麼是Graph、Node、Edge、Degree等基本詞彙後,網絡和圖的稱呼會交替出現。

要引用一張圖,可以有以下方法:
https://networkx.github.io/documentation/networkx-1.10/reference/readwrite.html
import networkx as nx
import numpy as np
import pandas as pd
%matplotlib notebook

G1 = nx.Graph()
G1.add_edges_from([('A', 'B'),
                   ('A', 'C'),
                   ('A', 'D'),
                   ('A', 'E'),
                   ('B', 'D'),
                   ('B', 'E'),
                   ('D', 'E'),
                   ('C', 'F'),
                   ('C', 'K'),
                   ('F', 'H'),
                   ('F', 'K'),
                   ('F', 'J'),
                   ('J', 'K')])

G2 = nx.read_edgelist('G_self_edgelist.txt', delimiter=',', data=[('Weight', int)])

G_df = pd.read_csv('G_self_edgelist.txt', delimiter=',', 
                   header=None, names=['n1', 'n2', 'weight'])
G3 = nx.from_pandas_dataframe(G_df, 'n1', 'n2', edge_attr='weight')

nx.info(G)
G.nodes(data=True)
G.edges(data=True)
nx.draw_networkx(G)

Week 2

「群聚分析」研究的是,網絡中的點互相連結形成群聚的程度。典型由多人形成的群聚,會是圖中一部分由所有點互相連結的完全子圖。而最簡單的一個群聚是由互相認識的三個人形成的「Triadic Closure」,對更複雜的圖的幾種群聚系數,量度的設計是由這形式推展出來的。

首先是圖中某個頂點的「局部群聚系數」-Local Clustering Coefficient,它的大概主意是去計算:與某頂點相連的近鄰們,能夠互相連結成配對的比例。即以下兩者之比:
$v$的近鄰間實際形成的邊數:$|(X,Y)| s.t. X,Y \in N(v)$
$v$的近鄰間最大可能形成的邊數:$\frac{d_v(d_v - 1)}{2}$

當考慮整個圖的整體群聚程度-「全局群聚系數」時,有兩種方法,一個是所有點的局部群聚系數平均起來-「Average Local Clustering Coefficient」。另一個稱為 「Transitivity」 的量度方法是數算圖中由三點形成的「閉三角組」和「開三角組」的比例:
Transitivity = 3 * number triangle / number of opera triad
而兩套方法的分別是對 Transitivity 對 高Degree 的點有較大比重。
nx.average_clustering(G)
nx.transitivity(G)

2018年6月18日 星期一

Coursera - Applied Data Science with Python 學習筆記 04 - Text Mining

《山林道》-「當初說這裡有天 會由樹變成路 一醒覺經已殺出這條路....
我只盼這裡有天 變回樹 撤回路 疏忽了趕快去補趁還未老... 」

Applied Data Science with Python的第四課-Applied Text Mining in Python,是更多有關文字、語言的處理,可以想像最後一課的social network應該有機會處理網絡社交平台上獲取的資料?

最基本的是文字的 Regular Expression 處理,在第一課時已略有使用過,幾個常用方法包括:

### Regular expression
import re
text = '@UN @UN_Women "Ethics are built right into the ideals and objectives of the United Nations" \
UNSG @NY @NY_Society for Ethical Culture bit.ly/2guVelr'   # 字串
text_list = text.split(' ')   # 分拆字串
[w for w in text_list if re.search('@[A-Za-z0-9_]+', w)]   # 查找吻合的pattern

# Dataframe 的字串處理
time_sentences = ["Monday: The doctor's appointment is at 2:45pm.", 
                  "Tuesday: The dentist's appointment is at 11:30 am.",
                  "Wednesday: At 7:00pm, there is a basketball game!",
                  "Thursday: Be back home by 11:15 pm at the latest.",
                  "Friday: Take the train at 08:10 am, arrive at 09:00am."]
df = pd.DataFrame(time_sentences, columns=['text'])

df['text'].str.split().str.len()   # find the number of tokens for each string in df['text']
df['text'].str.findall(r'(\d?\d):(\d\d)')   # group and find the hours and minutes
df['text'].str.replace(r'\w+day\b', '???')   # replace weekdays with '???'
df['text'].str.extractall(r'((\d?\d):(\d\d) ?([ap]m))')   # extract the entire time, the hours, the minutes, and the perio

然後就開始自然語言處理器 NLTK。課程是英語為主,但香港地更實際的一定是中文的處理,從前在 R 就聽過 Jieba 套件,Python世界似乎也是 Jieba 最廣為人所認識,當然這個 Jieba套件之後也要找機會試試。

所以,還是先溫習課程上所學習對英文的流程。首先是把文章進行分詞 (Tokenization),然後針對英文文法上的不同時態/詞型,分辨詞性 (Noun/Verb/Adj/...) 及縮減成詞根的提取 (Stemming) 或還原Lemmatization)。 這樣以後才可以做一些詞頻統計、Vectorization 後做預測模型、兩篇文章內容的相似度的比較。

2018年6月6日 星期三

Coursera - Applied Data Science with Python 學習筆記 03 - machine learning

第三課, Coursera上的最後一課已經開課,加快記完這篇就要再追一追進度了。機器學習隨著人工智能近年變成流行Buzzword,其實在引入神經網路(Neural Networks)前,一些模型例如Regression, logistics regression, KNN Classifier 等 迴歸 或 分類 模型; K means 的叢集;PCA 的縮減維度方法;Decision Tree的決策指引;很多概念都是統計和數學所已有的,只是一個機械學習的課程會對實作更有重視。

今次只是在有課程框架下去學python。當以<第一課>的技巧處理好數據成合用的格式, <第二課>繪圖後對數據有視覺化的印象, 可以進入第三課建立模型去做數據的形容/預測。其他例子可以參考之前幾篇,例如早期用 R 的:
[R] ML4B 課堂重溫 - 淺談 KNN (K-th Nearest Neighbors) 算法
[R] Show Me The Code - Machine Learning的簡易入門

在課堂的練習中,所有今次用到有關的scikit-learn library。從library的架構中可以留意到model selection, preprocessing, models, metrics幾大類別,對應著建立模型過程中的不同需要:
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import validation_curve

from sklearn.preprocessing import MinMaxScaler
from sklearn.preprocessing import PolynomialFeatures

from sklearn.neighbors import KNeighborsClassifier 
from sklearn.linear_model import LinearRegression, Ridge, Lasso, LogisticRegression
from sklearn.svm import LinearSVC, SVC
from sklearn.tree import DecisionTreeClassifier
from sklearn.dummy import DummyClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier
from sklearn.neural_network import MLPClassifier

from sklearn.metrics.scorer import SCORERS
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
from sklearn.metrics import classification_report
from sklearn.metrics import precision_recall_curve
from sklearn.metrics import roc_curve, auc
from sklearn.metrics import mean_squared_error, r2_score

from sklearn.datasets import make_classification, make_blobs, make_friedman1, load_breast_cancer

2018年5月29日 星期二

Coursera - Applied Data Science with Python 學習筆記 02 - matplotlib

香港2018年對比以往10年的極端氣溫 - 現在 5月尾 (至27/5) 已經連續出現破記錄的高溫

第二課:<Applied Plotting, Charting & Data Representation in Python> 學的是繪圖,倚重 Jupyter Notebook 中的 %matplotlib 功能來直接顯示繪圖的輸出。以上的圖就是其中一功課改用香港數據表示出來,詳細coding看本文的最後部份。 Jupyter Notebook 以前稱為 IPython notebook,從前安裝 Anaconda 應該是預設了Jupyter,只是一直未有使用。今次先檢查兩個2.7和3.6的python環境中的package,未有Jupyter的話就重新安裝/更新。

# 當前環境的套件
conda list
# 更新 pip
pip install --upgrade pip

# 安裝 jupyter
pip install jupyter

之後當執行jupyter,電腦會打開一個瀏覽器視窗,預設會連到localhost的 port:8888。新增或打開課程的 .ipynb 檔,當中的內容以一個個的「Cell」顯示。按 [Shift+Enter] 執行這個 Cell ,某個 Cell 的 in[?] 的結果會顯示在相應的 out[?] 之中,這樣可以選擇文件中的某部分來執行、逐步去測試。 其他功能可以在文件上方的選項,經常用到 Kernal 中的 Restart, Restart+Run all。在用完某 .ipynb 後可以把它 Shutdown;要離開 Jupyter 就可以在 Terminal 中按 [Ctrl+C] x2

# Use Jupyter
python -m jupyter notebook

用瀏覽器的 localhost:8888/tree/ 作為開頭的路徑,前往電腦中的檔案夾

打開 Jupyter Notebook 的 .ipynb 檔


2018年5月17日 星期四

Coursera - Applied Data Science with Python 學習筆記 01 - Introduction

5月初的放假期間開始了一個Coursera 的 Python Specialization 課程-<Applied Data Science with Python>, 暫時完成了3/5的課,在5月尾開始下一課前,先重溫一下第一課:<Introduction to Data Science in Python> 一些值得記著的codings.

1. 例子

# 關於資料結構
x = (1, 'a', 2, 'b')  # Tuple
x = [1, 'a', 2, 'b']  # List
      # set(x['name'] for x in df).   elist = [n for n in range(0,100) if n%2==0]
x = {1: 'a', 2: 'b'} # Dict
      # x[name], x.values(), x.items()
x = np.array([[7, 8, 9], [10, 11, 12]])     # Array:   import numpy as np.
x = Series(['item1', 'item2', 'item3'], [0, 1, 2])   # Series:  import pandas as pd
x = Dataframe(array, index, columns)   # Dataframe:  import pandas as pd
type()

# 字串 及 正則表示式
x = 'This is a string'
x[0:2]   # 從第 0th 元素開始,停止在第 2nd 元素之前
'This is a string'.split(' ')[0]  # 以空格 '  ' 分拆字串,提取第 0th 元素
re.findall(r'\w+', 'This is a string')  # 以正則表示式尋找特定字符。需要先 import re

# Numpy 中的 Array,用於使用 Vector、Matrix 的時候
a = np.arrange(start, end, step)  # 從 start 至 end,數值間隔為 step 的 Array
a = np.linspace(start, end, count)  # 從 start 至 end,count 個數值的 Array
amax = a.argmax()  # Array 中的最大值
a = np.vstack([array1, array2])  # 垂直合併兩個 Array
arrar2 = array1.copy   # 複製出獨立的 Array


# Pandas 中的 Series/Dataframe, 從 Numpy 的 Array衍生出來,處理數據的資料表時可以用到
a.argmax()
s.loc['name']   # index 為'name'的資料
df.reset_index()  # 重設 index 為 0:len(df)
df.set_index('time').sort_index()  # 以Column 'time' 為 index,並排序
df.dropna()  # 除去包含 NA 的行-Row
df.apply(min_max, axis=1)  # 進行 Row 運算
df.pivot_table(values, index, columns, aggfunc=[np.mean,np.min], margins=True)  # 製作Pivot Table綜合資料表
df= df.set_index('Col1') .groupby(level=0)['Col2'].agg({'avg': np.average}) 
pd.cut(df['avg'],10)

2018年4月18日 星期三

第一次鑽瓷磚牆就成功的圖文紀錄

自從裝修完成後一直未有隨便鑽牆。上星期的復活節,女友在淘寶買了幾件傢俱擺設,除了一般組裝以外,還有需要鑽牆去安裝上牆的掛架和層架。世伯以前做過裝修,有工具可以借用之餘,也指導指導我這後輩該怎樣落手。這四件新傢俱可以幫助整理家居之餘,還可以玩玩手工,很滿意。

然後某天又趁放半天假的時間,回家第一時間嘗試弄好廚房的掛桿。初次試鑽瓦仔面的磚牆,好好記錄下步驟。總結經驗,就是感到:工具的重要,不然很難鑽進去;方法的重要,不然令磚面出現裂紋;位置的重要,例如是刻意選磚邊下手的,而更緊要是評估過牆後會不會有電線水管等,不然破壞了要修補的話就大工程了。

想起年輕時做過一個月跟車助手,跟車之餘也幫手店舖/特賣場的裝修工程,那時的師傅也說教過-人要靈活利用工具,是否做裝修工程的人,特別容易有這份對工具重要性的體悟?
度位確定下鑽的位置
用縐紋膠紙避免瓷磚鑽到裂痕,膠紙上做記號也方便撕走。
準備用這種鑽頭鑽開瓷磚面,不要開震動模式。

先鑽穿瓷面

之後用石屎鑽和震動模式,為瓷面後的磚鑽孔

量度螺絲和牆洞的深度,斜切膠塞可以方便打入牆孔

多餘部份用𠝹刀和鎚子配合就可切走,
勉強鎚打可能傷到周邊的牆身

檢視成果,第一次算收貨吧

之後就是掛桿本身的安裝了
量度預留多少位放掛片,用電批鑽入螺絲

試試安穩掛片,小小的缺陷都遮蓋了

放入橫桿和排勾後,收緊兩邊的小螺絲

大功告成 ~

2018年4月16日 星期一

九肚山/摩星嶺-過路香港歷史

記一下 2018年到過的幾個新地方, 一個是火炭的九肚山,另一個是港島的摩星嶺。

火炭廢村/九肚山

火炭西面往草山的方向,山中有不少荒廢了的昔日村落。這天的目標本來是石榴洞村,一個可能是香港海拔最高的廢村。過去的「火炭」是一個「河灘」,在沙田新市鎮發展的過程中,山下沿河的兩岸規劃為工業區;近城門河的新填海地就用作馬場、體院、私樓住宅;山腳和工業區外圍保留了不少村屋;但沿西北面山的方向,山上的村落逐漸荒廢,而村名就用作工業區道路的起名參考。工業區內多條街道均以當地鄉村命名,包括火炭路、坳背灣街、山尾街、禾寮坑路、禾上墩街、牛湖托街、黃竹洋街、河瀝背街及桂地街等。當日結果在山上經過山尾、牛湖托村、回到大埔滘林路走一段路往長瀝尾方向,到車路盡頭的直升機坪,最後上九肚山回火炭。

起步前先到火炭站,在御龍山的快餐店食過早餐,就回到車站的另一邊,沿坳背灣街穿過整個火炭工業區。當轉入桂地街和黃竹洋街,這裡看到興建中的火炭公屋項目-共 6 座約 4780伙,一度為林鄭在 2017年末的首份施政報告中,推銷將會轉為「綠置居」的項目。走過現場的感覺,的確如去年報導的介紹般,暫時在交通和生活的配套都不方便。至今年初的房委會會議,因為是短期內落成的大型項目,可能有鄰近山坡維修等,而並不符合先導項目的選取原則。大抵維持作為出租公屋,2019年底落成後,大抵是2020年安排推出入往,這規模更有效處理基層市民對公屋項目的需求。而,當近年政府討論綠置居的定位時,顯然並不是作為公居與居屋之間的一層(定價更在居屋之上),而是為了加快公屋流轉。其實,居屋之外是否需要這樣另立名目的計劃? 推出這種計劃是否公平?是否有其他方法達到效果?

概念設計圖 (2013年區議會文件)

沙田區區議會 發展及房屋委員會 2013年文件
「綠表置居計劃」先導項目的檢討 - 文件編號:SHC 5/2018

2018年3月24日 星期六

Coursera與Google的新課程後記- Google IT Support Professional Certificate

這星期剛完成了Coursera上的 「Google IT Support Professional Certificate」,由 6課組成的專業證書。 https://www.coursera.org/specializations/google-it-support


以前在Coursera都是用「Audit」旁聽的制度自學,自從Coursera的旁聽制度變得不能交功課甚至打開功課之後,就也沒有在這平台上課了(因為不實實在在地練習的話,只看影片是很難學得好的。)。 忘了當初是什麼文章的介紹而留意到了這個課程了,首先當然是留意到由 Google 準備的 IT 課程應該有質素保證吧。然後看到按月收費的模式,心想先慢慢地旁聽自學,之後才加入課程做功課,應該可以一個月付款期內完成功課吧,那樣就只是$49美元,OK啦。(之後如來實際上還有7天免費期,之後才開始收費。)於是開始了這個Coursera 上的 「Professional Certificate」。 今次也是除了坐定定在電腦看之外,更主要是靠平時交通時間的手機,和1.25 - 1.5倍速的功能,還有作為靠閱讀吸收的人,有時看講稿的文字比慢慢聽片快。最終大概是前前後後用了約一個月時間。而功課大約個多星期完成,剛剛過了免費期T_T,不過就當少少支持吧。

By the way,課程本身的介紹是這樣:
This six-course certificate, developed exclusively by Google, includes innovative curriculum designed to prepare you for an entry-level role in IT support. A job in IT can mean in-person or remote help desk work, either in a small business or at a global company, like Google. Whether you’ve been tinkering with IT or are completely new to the field, you’ve come to the right place.
....
If you dedicate 8-10 hours a week to the courses, you can complete the certificate in about eight months. You can also skip through any content that you might already know and speed ahead to the graded assessments.

2018年2月25日 星期日

嚤囉山-屯門寮屋區的社區導賞

這已經是一月初參加的一個社區導賞團。屯門舊墟嚤囉山位於后角天后廟的後面。因為在附近工厦租了迷你倉的緣故,經常會經過連接天后廟外和屯門公園的天橋,只是之前一直未曾走進廟前的廣場空地,更不知有後山的這個村屋/寮屋區。現在一般多以天后廟稱呼這邊,天后廟前的天后廟廣場是每年屯門區舉辦年宵市場的地方,今年也去了,地方不大,規模也不算大。這個是從前的屯門舊墟,現今平日已經沒有墟市或市場了,它的一部份在新市鎮發展時納入工廠區。部份舊墟的村民搬到新墟旁立了一個較小的舊墟村,另一部份山上的寮屋區就和小山一起保留了下來,「鄉村範圍圖」中是為 屯門鄉事委員會下的「屯門舊墟」也是一村分為兩地,這邊是是較大面積的嚤囉山村,而搬過去的舊墟村就是新墟旁的那邊。

1976年新市鎮發展時的屯門,
(圖中間)嚤囉山就在河道出海口的小山。
Wiki 上 1866年的《新安縣全圖》- 填海前寬闊的青山灣,
"清山"之下的"田門"出海口,可見口角的形狀和的小山

2018年2月4日 星期日

[Web] Digital Ocean升級 和 部署到One-click app時修改的 Nginx、Gunicorn 設定。

Digital Ocean 升級

之前的一篇記錄過如何在 Digital Ocean 建立一個雲端主機後,不久的某天早上在查看電郵時,留意到 Digital Ocean 為它的服務升級了。以最低價格每月5美元一個標準主機的Droplet 為例,就有以下更新:從 512MB -> 1GB RAM、 20GB -> 25GB SSD。

但如電郵標題已經講明,這是[Action Required]。這個自製網站的規模不怕暫時離線,也未看到有復原到小容量,或預留那 5GB Disk的需要,所以也沒理由不放心進行 Disk, CPU and RAM 的升級。以 Control Panel 的方式升級也非常容易。



參考:https://www.digitalocean.com/community/tutorials/how-to-resize-your-droplets-on-digitalocean

 

2018年1月19日 星期五

[PowerShell] [Office] 用 Regular Expression 轉換日期格式 (US/GB)

前日上班的車程中,想起同事偶爾會碰到日期格式(美式/英式)的問題。雖然可以在打開Excel,為資料分列(Text to Columns)時做處理,去指定每列資料讀取時的格式。但想到要指示得人人明白卻不太易,能否有個只需簡單一按的小工具,可以做美式/英式間的格式轉換呢?

Office 中的問題,PowerShell 解決。也學到一些Regular Expression(正則表達式)的運用:
$inputfile = "test.csv"

(Get-Content $inputfile) | 
Foreach-Object {$_ -replace "([0-9]{1,2})/([0-9]{1,2})/([0-9]{4})", '$2/$1/$3'} | 
Set-Content '_output.txt'


部份 Regular Expression 的解釋:
字元/符號 範例 說明 成立例子
一般字元 / 含字母 “/” 的字串 25/12
^ ^A 比對字串開始位置AB
$ C$ 比對字串結束位置 ABC
\e\^2避開特殊字元 e^2
[......] B[aeiou]t 比對 [......] 內的任意字元 Bit
Bot

[0-9] [0-9] 比對0到9的任意字元,另有[a-z]和[A-Z]等用法 9
{n} B{2} 比對{n}前的字元n次,n必為正整數 BB
{n,m} [0-9]{2,4} 比對{n,m}前的字元至少n次但最多m次,n,m均為正整數 01
2389

(x) ([0-9]+)/([0-9]+) 比對 x 並將符合的部分存入一個變數 可比對 “123/45” 中的 “123” 、 “45”, 並將這個比對得到的字串設定至變數 \$1 和 \$2







加入給使用者的簡介部份:
$rePattern = '([0-9]{1,2})/([0-9]{1,2})/([0-9]{4})'
Write-Host "This will do date-format conversion for your AA/BB/CCCC into BB/AA/CCCC,"
Write-Host "Output as '_converted.txt'. Enjoy."
Write-Host ""
$fileRaw = Read-Host -Prompt 'Input your filename (same folder, ever with file extension): '
(Get-Content $fileRaw) | Foreach-Object {$_ -replace $rePattern, '$2/$1/$3'} | Set-Content '_convert.txt'


對這類辦公室日常出現的問題,有時太重技術層面去應對了就算的話,也明白就像是諸侯舞庶人之劍的感覺。 而且,這個日期格式的問題本來已有專案去處理和做了改變,好處是應該可以更完善的解決問題。但世上總有意外或突然的需要,再啟動一個項目的形式,過程往往會快費較長時間,而小修小補就是quick-and-dirty。

再者,參考使用者自己也會用的方法,就好像社區提案的概念,這些方案可能更切合用家的需要。如果能讓人人都有能力和空餘可以做些小創新、小改變,應該對人對己都是好處吧。

2018年1月16日 星期二

[Web] 為網站準備的 雲端主機 (Digital Ocean) 和 域名註冊 (Hosting speed)

按此推薦網址註冊,可獲得10美元Credit的優惠【 https://m.do.co/c/586afef63cee 】。

為老闆娘做網頁,自從寫好基本的網頁框架,就把它放下了一段日子,十二月尾至一月初忙著做線下的工作,為訂單起貨。現在網頁仍欠一些產品照和字型配色等的外觀設計,還有要等待和店主討論希望如何展示定價和包裝等等。在這個等待的時候,為了準備之後的正式部署上線,12月中開始租了一個Digital Ocean的雲端主機作虛擬專用伺服器(VPS) 用來寄存和運行網站;1月初還在 Hostingspeed.net 買了一個 .hk 的域名。

Digital Ocean

當開發階段有了雛型時,就向身邊的朋友示範和搜集意見,"上線"這部分就推介了DigitalOcean (D.O.) 這個VPS主機商。作為個人運作的網站,還要是對寫網頁仍在學習中的階段,它的好處是入門門檻相對很低。DO 有不同的租用計劃選擇,最便宜的只需每月$5美金,(新用戶用朋友的邀請連結去註冊,有$10的credit,如上),可以分到一個在新加坡的伺服器, 512mb記憶體,20GB硬碟空間,我選擇 1-click app的版本,預設好 Ubuntu 16.04, Python 2.7.12, Django 1.8.7。


按邀請 [連結] 建立帳戶:

2018年1月7日 星期日

老虎頭 - 從「情侶放閃」變成「挑戰情侶」路線

路線 :愉景灣-寶峰徑-涼亭瞭望台-老虎頭-山頂瞭望台-石堆-亞婆塱-白芒-東涌
點去:港鐵東涌站 D 出口,乘愉景灣巴士 DB01R 往海燕徑15號 ,登對面梯級往寶峰徑盡頭
需時:從愉景灣到東涌,大約 5 小時
地圖:https://drive.google.com/open?id=1-bHko-mKUSBE_A_cM0H4tpoFnWWt9IhD&usp=sharing



這個星期在電視港台31台,看到一集「聖誕特備情侶放閃一日遊」介紹老虎頭郊遊徑 。近年網上也見多了那張從山上望向愉景灣的相片,山咀處的山勢伴隨小徑和荒草,呈現出一個老虎頭後頸脊的形態。2017年未周日的行山Group就選取了這條少行的山嶺路去走一走。
<自在8點半(旅遊) 第十六集>:  http://www.rthk.hk/tv/dtt31/programme/830magazine/episode/469877