2018年3月13日 星期二

Udemy 課程筆記: 掌握 Git & Github 程式時光機

# ===========================================================
# Course notes
# Site: Udemy
# Title:  掌握 Git & Github 程式時光機
# Lecturer: 廖洧杰 (六角學園)
# https://www.udemy.com/learninggit/learn/v4/overview
# last edit: 2018/03/10
# ===========================================================

01. install git: https://www.git-scm.com/

02. windows command lines:
    - 開新檔案與展開列表在 git bash 上執行。
          # 避免 windows 預設的命令提示字元沒辦法使用,一律都使用 git bash 。
      - 移動路徑: cd [folder-path]     # 可以直接輸入路徑或是用拖曳資料的方式較快
      - 回上一層: cd ..       PS:是兩個.. 不是一個 . (cd 和..中間有一個空格)
      - 展開列表: ls
      - 新增新資料夾: mkdir [folder-name]
      - 刪除資料夾: rmdir [folder-name]]
      - 新增新檔案:touch [folder-name]]
      - 刪除檔案: rm [file-name]]

03. 初始設定git user name 及 user email address
    > git config --global user.name ["user-name"]    #設定使用者姓名
    > git config --global user.email ["user-email"]   #設定使用者email

    > git config --list   #查看設定
    > git version   #查看git安裝版本
    - git 在windows 設定檔的位置 C:\Users\xxxxxx\.gitconfig

04. 建立本地數據庫 (lcoal repository)
    - 建立資料夾,並進到資料夾。
    > git init  # initialized empty git repository
    - 在 git bash裡會顯示 (master), 資料夾裡會產生 .git的資料夾

05. 工作目錄是保存目前正在處理檔案的目錄,Git 相關的操作都會在這個目錄下完成。索引位於工作目錄和數據庫之間,是為了向數據庫提交作準備的暫存區域,又被稱為staging area。
    基本流程:
    - 在工作目錄(working directory)下新增或編輯檔案後
    - 加入索引(staging area)
    - 提交更新到本地數據庫 (local repository)

    > git add . #將全部檔案加入索引 (add後有一格空白才接 . )
    > git add [file-name]   #加入單一檔案進入索引
    > git commit -m ["Description"] #將索引提交到數據庫並加上更新敘述

    > git status    #查詢資料夾內檔案更新的狀態
    > git log   #查詢提交到本地數據庫的紀錄, 到文件底部按"q"離開

06. 在工作目錄下建立 .gitignore 檔(文字檔),所有被記錄在 .gitignore的檔案/資料夾都會被git忽略記錄。語法可以是:
    - index.html #直接記錄單一檔案名稱
    - *.html #忽略全部附檔名為HTML的檔案
    - css/ #忽略css資料夾及其內全部檔案
   
    - https://github.com/github/gitignore   #gitignore 大全   

07. 有時候當檔案加到索引之後想要取消回到未加入前的狀態時,可以使用取消索引的指令。
    > git reset HEAD   #全部檔案取消索引
    > git reset HEAD [file-name]   #單一檔案取消索引

08. 在git中可以將檔案還原到最後一次做commit的狀態。
    > git checkout [file-name]   #恢復單一檔案到最後一次commit的狀態
    > git reset --hard    #還原整個工作目錄與索引,到最後一次commit的狀態

09. git & github 連結的基本操作 (全新empty的repository)
    - 首先先在 github 上建立一個新的 repository (example: git_practice)
    - 複製 github 上 repository 的連結 (example: https://github.com/hkshu001/git_practice.git)
    - 使用 gitbash 進入想將 repository 存放的目錄 (如桌面上的"github")
      > cd /c/Users/xxxxxxx/Desktop/github
    - 將github上的reposiory 抓取下來
      > git clone https://github.com/hkshu001/git_practice.git
    - 用git bash進入到剛剛的的資料夾即可發現,此資料夾已成為git的本地數據庫。
      > cd git_practice/
      xxxx@xxxxx MINGW64 ~/Desktop/github/git_practice (master)
    - 接著所有的操作跟在本地數據庫一樣,最後加上一個上傳更新遠端資料庫的步驟。
      > git push

10. HEAD:目前所在位置的指標,是指出現在修改的某一個commit的位置,當我們checkout的時候其實就是移動HEAD,使其跳到另外一個commit或branch上。
    > git branch  #可以查看目前 HEAD 所在的分支
    > git checkout [前4碼]    #前四碼指的是 git log 上每次commit產生亂數的前4碼,可以移動 HEAD 到不同的 commit 位置
    > git checkout master    #將 HEAD 移動到 branch 'master'
    > git checkout [branch-name]    #將 HEAD 移動到 branch 上
   
    因為HEAD被移動的時候會造成工作目錄的檔案內容改變,所以如果有檔案被修改過但是沒有commit或stash的檔案存在時會不能夠移動HEAD,也就是不能使用git checkout。
    > git branch [branch-name]   #新增一個分支

11. 在合併分支的基本流程:
    > git checkout master   #需先回到master branch
    > git merger [branch-name]   #合併分支

    - 在合併分支時,若兩個檔案之間沒有衝突 (更動的code不在同一處),git 會做automerge,如果有衝突,則需在檢視存檔後,再做一次 add & commit。

12. 就像大多數的版本管理系統,git具備在特定commit時間點加入標籤去註明其重要性的功能。一般而言,我們會使用這個功能去標記出發行版本(如V1.0等等)。
    > git tag   #查詢目前既有標籤
    > git tag [tagname]    #新增標籤
    > git tag -am ["tag Description"] [tagname]   #新增標籤並具有敘述
    > git tag -n    #查詢標籤及其敘述內容
    > git tag -d [tagname]    #刪除標籤
       
    > git checkout [tagname] #將 HEAD 移動到[tagname]的commit位置

13. 有時工作做到一半需要暫時的離開目前工作點,但是有不想把做一半的工作提交,則可以使用stash 做資料的暫存
    > git stash   #暫時儲存當前目錄
    > git stash list    #瀏覽git stash 列表
    > git stash pop     #還原最後一次的暫存
    > git stash drop    #清除最後一次暫存
    > git stash clear   #清除全部暫存

14. 在之前所提到上傳到遠端數據庫所使用的 git push,只有在單一遠端數據庫及單一分支master的單純使用環境下適用,當有多個遠端數據庫及分支時,則需要寫出完整的數據庫名稱與分支名稱。
    > git remote    #查詢遠端數據庫名稱
    > git remote -v   #查詢遠端數據庫名稱且在名稱後方顯示其URL
    - 當我們從github clone資料下來,git 複製儲存數據庫會使用預設的名稱 "origin"
    > git push [remote-name] [branch-name]  #將檔案發佈到遠端數據庫上
    > git remote rename [original remote-name] [new remote-name]    #更名遠端儲存庫

15. 另外,執行 git pull 一般來說會從當初複製時的來源儲存庫擷取資料並自動試著合併到目前工作的版本。在多人遠端協同工作的情形下,保持本地端數據庫與遠端數據庫同步是十分重要的事情。
    > git pull    #擷取遠端數據庫資料

16. github亦可以當作一個網頁空間,來存放靜態的網站。在進到github的repository內,選擇
    settings在GitHub pages的欄位裡,將 source 選 "master branch"


----------------------------------------------------------------------------

2016年6月10日 星期五

Swirl_01-RBasic-04-Factors

01-RBasic-04-Factors
-------------------------------

01.factor()是一個向量物件,用途是儲存「類別」的資料。Factor向量很像文字向量,但多出額外的分類名稱彙整資訊,levels這個屬性。實際上Factor向量本質上只是整數向量加上levels。這樣設計的原因是儲存整數比儲存文字更省空間。

02. Factor向量中的levels屬性代表向量中允許出現的類別。 可使用levels()函數來查詢或設定分類資料。

03. 在Factor向量中指派沒在levels裡面的類別,會出現NA。

04. R預設是以字母順序排序levels

05.「類別」的資料有兩種。分為「無順序」與「有順序」的。對於無順序的資料硬要去比大小,R會印出警告訊息。 想轉為有順序的factor向量。做法是在factor函數中,把ordered設為TRUE。 並且把levels順序以向量方式傳入,level要由小到大填入。
    > grades <- C("A","C","B","B","A")
    > grades_factor<-factor(grades,ordered=TRUE,levels=c("C","B","A"))
    > grades_factor
    [1] A C B B A
    Levels: C < B < A

06. 總的來說factor向量用來儲存類別的資料。level屬性限制能在向量中出現的類別種類。 Factor本質上是整數向量,只是帶有levels。 Factor可以是無順序或有順序的,可用在Factor函數中使用ordered=TRUE讓Factor變成有序。

2016年6月9日 星期四

Swirl_01-RBasic-03-Data-Structure-Object

01-RBasic-03-Data-Structure-Object
-----------------------------------------------


01. 向量物件有兩個很重要的屬性:`mode`和`length`。
    - `mode`代表這個向量的值型態,總共有:    `logical`、`integer`、`numeric`、`complex`、`character`和`raw`。
    - `length`代表這個向量的值的個數。

02. `[ ]`和`[[ ]]`的差異。單層方括弧`[ ]`,R 取出向量的元素並且維持原有屬性,除了傳回元素值外也傳回names與其他屬性。使用雙層方括弧`[[ ]]`時,R 會只傳回元素值。

03. list向量最有用的地方,在於它可以裝不同型態的值。包含不同屬性、不同長度的數值、文字、向量甚至是矩陣。

04. 所有的R 物件,都有「屬性」(attributes)。我們可以用`attributes`這個函數來印出一個R 物件的屬性與屬性內容。
    >  attributes(g)
    $names
     [1] "coefficients"  "residuals"     "effects"       "rank"          "fitted.values" "assign"      
     [7] "qr"            "df.residual"   "xlevels"       "call"          "terms"         "model"       

    $class
    [1] "lm"

05. `names(g)`來查詢`g`的名字
    > names(g)
     [1] "coefficients"  "residuals"     "effects"       "rank"          "fitted.values" "assign"      
     [7] "qr"            "df.residual"   "xlevels"       "call"          "terms"         "model"       
    也可以用`attr(g, "names")`來取得名字是"names"的屬性
    > attr(g, "names")
     [1] "coefficients"  "residuals"     "effects"       "rank"          "fitted.values" "assign"      
     [7] "qr"            "df.residual"   "xlevels"       "call"          "terms"         "model"       

06. `class(g)`來查詢`g`的類別
    > class(g)
    [1] "lm"

   
07. 了解像attributes這樣的功能,在探索一些複雜的R模型物件時,是非常好用的。我們在之後深入探討`matrix`、`data.frame`等進階物件的時候, 也會需要了解attributes的相關的知識。而名稱為"class"的屬性是非常重要的,因為它牽涉到R的物件導向設計。


Swirl_01-RBasic-02-Data-Structure-Vectors

 01-RBasic-02-Data-Structure-Vectors
---------------------------------------------
01. `max(x)`會傳回x 中最大的值,而`min(x)`會傳回x 最小的值

02. 函數`range`就能直接傳回輸入向量的 範圍(最小到最大)

03. `sum(x)`會傳回x 所有值的加總。 `length(x)`函數能直接傳回x 的長度

04. `mean(x)`就能直接 計算x的平均值

05. `var(x)`樣本變異數: `sum((x - mean(x))^2) / (length(x)-1)`

06. `sd(x)`計算x 的樣本標準差

07. `sort(x)`則會產生一個和x 長度一樣的向量,但是值是 由小到大排列

08. `sqrt(x)`代表的就是數學上開根號的運算

09. 產生一些附帶有規則的序列。例如: `1:10`就會產生自1至10的序列。`seq(1, 10)`其實就是`1:10`

10. `:`這個運算子的優先層級很高,也就是說如果R 看到:`2 * 1:10`這段expression,會優先處理`1:10`,然後再把所有結果乘以2

11. 想要重複一個數字,則可以用`rep(x)`

12. 在R 中,邏輯值「真」常用`TRUE`或`T`來代表。「假」則用`FALSE`或`F`代表。第三種在邏輯向量會出現的值,就是NA(Not Available)

13. 邏輯向量的「條件」有:大於`>`、大於等於`>=`、 小於`<`、小於等於`<=`、相等`==`和不相等`!=`。

14. 邏輯運算子「且」`&`和「或」`|`

15. 當資料的值無法取得的時候,R 就會給它一個特殊的記號:NA

16. `is.na(x)`來判斷一個向量裡面有沒有NA

17. NA和NaN。 NA代表的是缺失值,而NaN往往來自於數學運算中沒有定義的行為。 例如:`sqrt(-17)`、`0/0`和`Inf - Inf`。在R 裡面,無限大就是`Inf`

18. 雖然我們理解NA和NaN的不同,但是`is.na`會把兩者都看成TRUE

19. 「字串」是透過單引號`'`或雙引號`"`來建立的

20. 在R 中,`\`符號代表字串中的跳脫符號。舉例來說,如果我們要輸入一個包含雙引號的字串,有兩種方法:一種是用單引號`'`來包覆雙引號,另外一種就是在雙引號之前插入`\`

21. `paste(x)`是在R中常常用來做字串處理的函數。我們可以丟任意個 arguments 給`paste`,結果R會把這些argument以字串的形式接成一個字串。
    > paste(c("X", "Y"), 1:10)
    [1] "X 1"  "Y 2"  "X 3"  "Y 4"  "X 5"  "Y 6"  "X 7"  "Y 8"  "X 9"  "Y 10"

22. `paste0`預設在串接字串的時候,中間是不會有空格
    > paste0(c("X", "Y"), 1:10)
    [1] "X1"  "Y2"  "X3"  "Y4"  "X5"  "Y6"  "X7"  "Y8"  "X9"  "Y10"

23. 挑選向量中一部份的資料。x<- c(10.4,5.6, 3.1, 6.4)
    第一種方法,使用坐標。如果要挑選x 的 第一和第三個位置的值,只要使用:`x[c(1,3)]`
    第二種方法,是利用邏輯向量。如果要 挑選x 之中超過5 的值,就透過`x[x > 5]`
    第三種方法,是削去法。如果要挑x _除了_第二個之外的 全部的值,可以使用`x[-2]`

24. R的向量中,每一個值是可以有名字的。舉例來說,我們可以透過: `names(x) <- c("a", "b", "c", "d")`來幫x的每個值取名
    > x
    a    b    c    d
    10.4  5.6  3.1  6.4











Swirl_01-RBasic-01-Introduction

01-RBasic-01-Introduction
---------------------------------------
01. 查詢函數的詳細說明,例如solve這個函數就輸入:`help(solve)`或`?solve`

02. 多個expression可以用`{`和`}`包覆起來,變成一個大的expression。如果有一個expression還沒有完成,(可能是少了`)`或`}`),那R 會在console的開頭用`+`來提示你。

03. 在程式碼中插入註解:`#`。所有在# 之後的輸入,R 都會略過

04. `objects()`或`ls()`來列出所有目前存在的object 的名字

05. 刪除已經存在的物件。舉例來說,如果我們要刪除`a`, 就只要輸入:`rm(a)`

06. 每次退出R的時候,你都有機會把所有的物件存到一個叫做 .RData的檔案之中。之後,只要在相同的目錄打開R,這些資料就會自動進入R。所以R 官方建議使用者在不同的分析專案時,在不同的目錄底下跑R。因為我們常常在分析的時候,建立一些名叫`x`或`y`的變數。 在相同的案子中,`x`和`y`可能是很明顯的。但是當我們同時做很多分析時,就容易搞不清楚`x`是哪一個分析案子的`x`。





Swirl_00-Hello-DataScienceAndR

發現了R 語言翻轉教室這個好站....

http://datascienceandr.org/

可以用互動式的方式在R實作....
比啃書本快多了....



學習環境:
  1. 安裝R
  2. 安裝Rstudio
  3. 打開R ,執行:source("http://wush978.github.io/R/init-swirl.R")
  4. 輸入library(swirl);swirl()後即進入教學環境。
 

00-Hello-DataScienceAndR
-------------------------------------
`skip()`    來看答案並跳過卡住的關卡
`play()`    來暫時中止swirl自由摸索
`nxt()`        回到課程
`bye()`        離開swirl環境
`swirl()`    可以選擇接關,繼續挑戰 離開前的進度。

2016年5月25日 星期三

好的句子

  • みんなの心をあわせたら、みんなの力をあわせたら、きっと みんなと強くなれるよ
  • 才能とは継続する情熱のことである
  • ごはんの数だけ、家族になる
  •  
  •  --------古文----------------
  •  

  •  知事少時煩惱少,識人多處是非多
  • 為你的難過而快樂的 是敵人, 為你的快樂而快樂的 是朋友,為你的難過而難過的.....就是那些 該放進心裡的人
  • 心包太虛,量周沙界
  • 你不需要很厲害才能開始,但你需要開始才會很厲害 
  •  
  • ----------古文----------------
  • 紀稱、望龍光知古劍、覘寶氣辯明珠、故萍實・商羊、非天明莫洞。厥後博物稱華、辯字稱康、析實玉稱倚頓、亦僅僅晨星耳。 ~~本草綱目序~~
  •  

  • Shoot for the moon. Even if you miss, you'll land among the stars.
  • To be born in a duck’s nest, in a farmyard, is of no consequence to a bird, if it is hatched from a swan’s egg 如果你是一顆天鵝蛋,出生在養鴨場也沒關係