2015/10/30

Windows系統讀取包含日文、韓文的UTF8 文件 [R]

眾所皆知,w indows系統在處理編碼上是非常弱勢的;

相對於 linux 與 mac 在讀寫各式不同編碼的純文件時,只需要指定好 encoding 的內容就可以正常讀取;目前經過我交叉測試,在windows中如果UTF8文件中包含了日文、韓文的UTF8文件還是無法正確讀取…

將問題與解法整理成如下2張圖:
123
456
可依情境加以使用不同解決方案,這2種方式都可以正確讀取含有日文、韓文等文字的UTF8文件…若使用原始系統搭載的 read.csv() 則執行指令時會報錯!!

備註:

(1)readxl套件,請參考:
http://www.r-bloggers.com/get-data-out-of-excel-and-into-r-with-readxl/

(2)readr套件,請參考:
http://www.r-bloggers.com/readr-0-2-0/

readr還含許多方便的機能,例如猜文件編碼的函數
guess_encoding(文件名稱), 非常實用!!!

2015/10/29

igrpah 的學習資源整理

igrpah 是一個在 R 與 Python 的套件,能處理 Social network Analysis

Social network Analysis 能應用的方向還蠻多的,不過如果直接看 Rblogger 上面的文章,我總是覺得有點複雜… 雖然實務上取得資料的確就是要下那麼多苦工…

日本生科學者介紹 igraph 基本功能

先看這一篇日本生科學者,簡單的介紹了fb網路如何被匯進R → 製圖 → 分群 → 計算相關指標 http://rpubs.com/kaz_yos/igraph1
再參考這篇他教學官網上的這篇(日文,但看程式碼就知道邏輯) https://sites.google.com/site/kztakemoto/r-seminar-on-igraph---supplementary-information

網路群組分組

http://qiita.com/hmj-kd/items/3f2b45b32bc3a8204141
http://codeiq.hatenablog.com/entry/2013/06/25/182324

日文書籤網站 igraph

http://doubt-ooo.appspot.com/feed?q=igraph
http://b.hatena.ne.jp/Keiku/igraph/

TokyoR 聚會的簡報

http://www.slideshare.net/kztakemoto/r-seminar-on-igraph

stanford 提供很多 social network analysis 的範例檔

http://snap.stanford.edu/data/egonets-Facebook.html
備註: 日本人使用 Cytoscape 來繪製網路圖形的比例還蠻高的…

2015/10/27

用 Docker 協助學習Social Network Analysis

用 Docker 協助學習Social Network Analysis

這次遇到的狀況是用了最新的 R jupyter / Rstudio(R/win) 無法安裝igrpah 套件(??!!),所以只能先找目前網路上已經包裝好的 RStudio Server + igraph

下載Docker images(docker pull)

先在google透過關鍵字尋找有沒有被人家包裝好的docker iamges,發現有一個: 我的狀況是透過 VirtualBox 中的 Ubuntu 14執行以下指令 sudo docker pull zachcp/phylogeo

執行d ocker images

簡單執行 sudo docker run -d -p 8787:8787 zachcp/phylogeo 預設的帳密 username: rstudio password: rstudio

調整桌機 Virtual Box 網路設定

因為我們想要Browser來操作 Rstudio Server版本,又因為VM是在Virtual Box中執行,所以我們要設定轉port;在很多的情境下,都會建議主機ip設定為 127.0.0.1;但此處我直接把ip留空白,因為後續我會在區網利用另一台Mac筆電進行連線,如果此處你設定了 127.0.0.1 則只有本機有機會連線 IP2

利用Mac連線PC桌機的Rstudio Server

在筆電的 Chrome 輸入 http://192 .168.1.117:8787

下載 Github 上的資料

利用 Rstudio 的 Shell, 輸入: git clone https://github.com/johnmyleswhite/ML_for_Hackers 就可以把資料下載回Rstuio Server

Rstudio Server 上下傳資料

下載資料: 在 Files 視窗介面下 -- More -- export 即可把Server上的資料下載回筆電
上傳資料: 在 Files 視窗介面下已預設有 Upload 按鈕

保存 Docker images

有時候因為學習需要又下載了新的套件,不想要下次docker run時還要重新安裝一次則可以進行保存
sudo docker commit d9ae87d0828a zachcp/phylogeo:v2 
其中 d9ae87d0828a 是可以透過 docker ps 查詢到的容器id
不過若是在隨身碟上執行此一指令需時較久,建議還是將過程中的檔案直接下載到本機備份較快

2015/10/14

Windows 處理UTF8 CSV就是悲劇… Excel與R搭配時的解法…

Excel處理CSV UTF8 編碼就是悲劇!!!!

    • excel 2016在英文版介面下,匯入文字檔(csv、txt)無法選擇UTF8編碼,只有2種編碼ansi、mac可選
    • excel 2016在中文版介面下,匯入文字檔(csv、txt),可選擇UTF8編碼及其他世界各國文字編碼
    • 總之微軟放棄不是很想認真處理 UTF8 CSV的問題…

    利用Excel協助Data Clean :

    • 不要讓excel直接處理csv UTF8格式
      • 正常讀取utf的文字編輯軟體打開uft8文件
      • 於文字編輯軟體中全選文字→複製貼上至excel→excel中進行資料剖析(這樣比由匯入文字檔還快…)
    • Data Clean成功後,直接轉存成xlsx

  • 被excel存檔過後的csv會自動變成BIG5編碼 → 避免夜長夢多,請不要這樣做
  • excel要存檔成UTF8,有UTF8文字檔的 → 超難用!!!!
  • PowerBI 也無法處理 UTF8 csv → 存成預設為UTF8的 xlsx 保證沒問題

  • 與R搭配時,不想管編碼問題直接用excel存成xlsx、xls:

    • 避免處理編碼的問題時,直接把csv改存成xlsx或xls格式
    • 安裝套件 install.packages(readxl) # 此套件可讀入單頁sheet
      • xlsx格式: 使用xml進行資料儲存,預設已是UTF8編碼;可將副標名改為zip後,解壓縮即可驗證
      • xls格式: 編碼套件 readxl 會幫忙轉成uft8
      • 所以 read_excel 指令中沒有指定編碼的選項!!!
    • 讀入資料,記住如果xlsx、xls內有多張sheet要指定sheet,否則只能讀入一個sheet
      • 例: read_excel(/Users/xxx/Downloads/WeareJordan.xls,sheet=3)
      • 別忘了在 windows 底下目錄名稱要用2個\指定
        • 例: read_excel(c:\Users\zzz\Desktop\CHINA.xls )
    • 在mac底下,讀入的檔名不可以是數字開頭的檔名,例如: 444_js.xls 要改成變數命名規則 js.xls ;winodws則無此限制,但為了未來跨平台,請直接以英文做為檔名開頭
    • 在windows底下,檢視匯入的資料時,若非big5編碼內的文字會以uft8的編碼型式顯示;而在mac則無此問題

    長治久安之道,資料量小時請存成xlsx,資料量多時請用資料庫管理…

    • 資料量少的時候而且資料有大量與Excel協作機會時,可以考慮直接將資料亦寫成 xlsx 輸出
      • 安裝套件 install.packages(openxlsx)
      • 使用資料 write.xlsx() 寫檔至 xlsx
    • 隨著資料愈來愈多,可以考慮存成直接支援uft8的資料庫系統;例如:sqlite可跨平台使用,且支援UTF8openxlsx
      • Excel亦支援各式資料庫直接進行連結

    windows10 kitematic(docker gui)掛載windows目錄

    windows10 kitematic(docker gui)掛載windows目錄

    kitematic 提供了GUI介面,以利 docker 的安裝與操作;
    在官網下載安裝後,一直按下下一步就可以安裝完成;實際上是透過virtual box的方式來達成docker環境的架設。

    步驟

    • 在docker hub蒐尋 jupyter/datascience-notebook 進行安裝,裝好後即running
    • 在 kitematic 介面中尋找 Volumes 進行設定,可以發現無法進行設定
    • 執行 Docker Quickstart Terminal
    • 輸入 docker ps ,確認一下目前執行的 jupyter/datascience-notebook ID
    • 先將jupyter/datascience-notebook給停掉:docker stop 輸入id
    • 手動執行以下指令,重點在於 -v 指令,本機直接用 /host 代稱
      • docker run -d -p 8888:8888 -e GRANT_SUDO=yes -v /host:/home/jovyan/work jupyter/datascience-notebook
      • 原本 ubutnu 底下可以直接指定目錄,但是windows目錄是無法直接掛載
    • 回到kitematic 介面中,可以發現會自動命名一個新的容器名稱,且此時可以用GUI方式指定windows目錄…

    備註

    • 目前kitematic在windows底下的使用,其實不會比直接在vm ubuntu直覺太多,進階指令還是要回到 Docker Quickstart Terminal執行
    • kitematic 介面中預設搭配的shell是 powershell,嗯… 非常難用
    • 沒有在mac上測試過,我猜mac應該不用這麼麻煩…

    2015/10/8

    Python 環境切換與管理[簡易版]

    Python 環境切換與管理[簡易版]

    Python 目前比較麻煩的是有 Python 2 / Python 3 的版本,然後 Mac 也有自帶的Python, 初學者往往在一開始時容易困擾…
    例如:pip install 套件後,到底是安裝到那一個 python 環境呢? pip3 ?? pip ??

    解決方式:

    • (1)使用 Pyenv 完全隔開不同的 Python
      • 例如:隔開之後再安裝不同版本的 Anacnoda(預設安裝很多的python套件)
      • 因為是完全分開的,所以依據你所使用的環境進行 pip install 套件安裝,不會與原先系統預設的python環境對衝
      • Anacnoda 官網介紹說 Anacnoda 已經具備有套件與環境管理機能,但依照我自己的使用經驗,建議還是先裝 pyenv 來把環境完全切割比較好…

    • (2)使用 Docker image
      • 例如:我目前使用這組 Docker image; https://hub.docker.com/r/jupyter/datascience-notebook/
      • 好處是已經有了 python 2、python 3、R 的Jupyter 
      • Python 套件安裝
        • 此 Docker 預設的Python環境是 Python3 ,所以如果是 pip install 套件,則會安裝套件至 Python3
      • 若要安裝 Python2套件呢?
        • 首先要知道 docker 中有多少python環境
        • conda env list → 可得知安裝 python2 的環境叫 python2
        • 選擇 python2 環境: source activate python2
        • 再次使用 conda env list 確認目前的環境
        • 使用 pip install 套件。例如: pip install beautifulsoup4
        • 安裝後新的套件後(安裝至 python2中),記得下 docker commit 指令把容器的狀態給存起來
    • 備註
      • 因為 docker 本來就是虛擬化工具,docker中發生了什麼事情對於主系統都不會有什麼影響,所以docker中就沒有必要再安裝 pyenv;當然這是用空間(SSD/HD)來換取煩雜的設定時間損失。

    備註:

    conda常用指令:
    • (1)目前作用中的環境安裝了多少python套件 conda list ;
    也支援這樣的語法 conda list baut* ,則列出:
    beautifulsoup4 4.4.1
    • (2)切換環境
    source activate python2
    • (3)目前有那些python環境
    conda evn list
    參考資料: http://conda.pydata.org/docs/_downloads/conda-pip-virtualenv-translator.html

    2015/10/7

    RCurl 設定 SSL 驗證 [R]


    例如:

    library(RCurl)
    getURL("https://www.python.org"  )

    會得到
    * Error in function (type, msg, asError = TRUE) : error setting certificate verify locations:
      CAfile: /etc/pki/tls/certs/ca-bundle.crt
      CApath: none

    調整為:

    library(RCurl)
    getURL("https://www.python.org" ,   ssl.verifypeer = FALSE)

    則可取回 Html 文件

    2015/10/3

    Power BI 利用 ODBC 連接 sqlite

    Power BI 利用 ODBC 連接 sqlite
    • Power BI 是微軟力推的商業智慧軟體,目前強調在與 excel 高度的整合性;所以被微軟內部視為重要的戰略武器,幾乎每個月都有更新功能… 目前使用限定在 windows 平台,但可以用私人網域郵件申請帳號,就可以將 Power BI的內容以 HTML5 網頁方式呈現
    • 但是…
    • 其實實務上在資料蒐集的階段,目前 windows 平台不是一個好選擇… 往往我們是在 linux 的 docker 環境中將資料以最簡單的 sqlite 方式予以儲存
    • 所以將sqlite的檔案移轉至 windows 平台後利用 ODBC 方式取存是最簡單的

    step:

    備註 :

    • 如果你有用過 Excel 舊版中連接資料庫中取得 ODBC 或是 SQL SERVER 就會被目前 Power BI 純工程師介面給嚇到… 突然要你輸入一長串的連線字串,完全沒有提示… 還好 google 找得到
    • 如果不用 ODBC, 使用將 sqlite 匯出成 csv 後 → 匯入 Power BI,會有utf8處理中文的問題…
      • 目前 Power BI 似乎暫無解決 utf8 csv 的手段
      • Excel也有一樣的問題,但可用匯入文字檔的方式才能解決
      • sqlite → 轉存 csv → 轉存成 excel 就能解決,但有點複雜

    總之利用 ODBC 方式算是 windows 底下處理 sqlite 最簡單的方式!

    利用 docker 協助程式學習

    作業模式/情境
    • 出門帶著 Mac + Docker化隨身碟,確保作業環境為純 linux 開發環境
    • 在家使用 PC桌機(16GB) + Docker化隨身碟,確保作業環境為純 linux 開發環境
    • 有些在 mac 上極難安裝的程式在 Ubuntu 上的 Docker 異常簡單
    • Mac / Windows 雖然都有 Docker Tools 但很難用,還不如直接用虛擬機 Ubuntu設定
    • 目前學習 Docker 是為了學習程式開發,暫不學習更進階的議題
    • 使用網路爬蟲捉資料時用 PC 桌機上的 linux 的Docker R來進行資料的取得
    • 節省 docker 若安裝 mac上 的 SSD空間浪費
    • Docker Hub上有各式神人提供的設定好的Dockerfile

    step:

    • 購置一個市面上販售最快的 64GB 隨身碟(不用1000元)
    • 將其格式化為 exFAT
      • Mac / Windows / Linux 都可以讀寫
    • 在 Mac / Windows 都安裝上 virtual box
    • 將 Mac / Windows virtual box 預設的資料夾指向隨身碟
    • 下載各式的 Linux Based VM並安裝
      • Ubuntu 15 Server
      • Ubuntu 14 Server
      • Ubuntu 14 Desktop
      • Ubuntu + GIS
      • 帳號與密碼儘量單一化,因為都是為了學習而非實際生產環境

    • 以隨身碟中VM: Ubuntu Server 15為主,進行各項設定
      • 安裝 vsftp 以利資料交換
      • 安裝 docker
        • 安裝 docker 化軟體
        • 例如:Jupyter Notebook,以利學習 R / Python / Spark
        • 依情境將 virtual box 中的網路設定 port forward

    Ubuntu 15 設定 vsftp

    主要參考這篇 http://www.liquidweb.com/kb/how-to-install-and-configure-vsftpd-on-ubuntu-15-04/

    安裝 vsftp
    • apt-get update
    • apt-get -y install vsftpd
    修改設定檔 vim /etc/vsftpd.conf
    • anonymous_enable=NO
    • local_enable=YES
    • write_enable=YES
    • chrootlocaluser=YES
    • 設定檔中的localumask=002 直接改成localumask=775 才能上檔目錄、檔案
    備忘
    • 使用 filezilla 連線時,記得要選 sftp 協定
    • ubuntu 15預設重啟 vsftp 指定修改為: service vsftpd restart,有些教學網頁上的資料是舊的,不適用於 ubuntu15
    用途/情境
    • 在VM ubuntu 中使用 docker run -v 時設定好共享資料夾,將資料用 ftp 方式回傳至本機
    • 因為只有本機有存取的需求,所以不需要設定太繁雜的安全性設定,所以上述直接將 local_umask=775