# Chapter 1 基礎程式概念 | Python 大數據分析
contributed by AgainTW
# 章節
* [Chapter 1 基礎程式概念](https://hackmd.io/@nfUUgsYRTGy81y5d9AYOyg/BkwXGGuh0)
* [Chapter 2 Python 入門和 Colab](https://hackmd.io/@nfUUgsYRTGy81y5d9AYOyg/SJHvGHO2C)
* [Chapter 3 數據分析: Numpy & Pandas]()
* [Chapter 4 數據分析: Matplotlib]()
* [Chapter 5 用 Python 跟使用 SAS 的印度人輸贏的第一天]()
* [Chapter 6 用 Python 跟使用 SAS 的印度人輸贏的第二天]()
* [Chapter 7 用 Python 跟使用 SAS 的印度人輸贏的第三天]()
* [Chapter 8 我出期中考]()
* [Chapter 9 我教的機器學習概論]()
* [Chapter 10 監督式機器學習: KNN & Logistic Regression]()
* [Chapter 11 監督式機器學習: Decision tree & SVM]()
* [Chapter 12 非監督式機器學習: K-means & GMM]()
* [Chapter 13 非監督式機器學習: PCA & AutoEncoder]()
* [Chapter 14 統計古法: Association rule]()
* [Chapter 15 我出期末考]()
* [Chapter 16 進階大蟒蛇: Python 也有教室?]()
* [Chapter 17 進階大蟒蛇: 我容器裡有的蛇]()
<br/>
# 前言
前言當然要不免俗的來問一下自己,為甚麼會編寫這系列的教材呢?還有這篇教材又教了些什麼?首先,這是一篇面向統計背景學生的程式設計教材,<font color="#f00">不需要任何程式基礎</font>,課綱和內容主要來自我在研究所時的小專案,但因為我沒有任何統計背景(學過線性代數不算有統計背景吧),所以統計相關的資料皆來源自網路,每週的 **參考資料** 處也會條列我的參考資料。
**本系列教材皆為純手工,如有任何疏漏或錯誤,歡迎留言指教。有任何教材的相關問題也都歡迎留言提問。**
<br/>
# Chapter 1
## 1.1 程式是門語言嗎?
中文、英文或是任何其他語言,基本上都是透過 **特定的語法規則** 拼接 **有意義的單詞** (在程式中,又稱作"詞法"、"Token")來去描述一件事、表達情緒或是要求他人做事。程式也是一樣,透過不同的語法,諸如常見的 C、Python 或是 HTML,拼接像是 ```if```、```for```、```[]```和```import``` 等有意義的單詞,來去<font color="#f00">描述一件事應該怎麼做</font>。
* 程式是門語言,但比起背單字,更在乎其中的邏輯。
* 基本上,程式語言的目標僅是 **描述一件事要怎麼做**。
<br/>
## 1.2 程式語言的基本句型
了解了程式的目標後,接著就是要介紹程式的基本句型,不同於英語有"簡單句"、"分詞構句"或是"時態"等複雜的語法,程式中最基本的語法只有:
1. 定義和變數型態(Type variable)
2. 條件
3. 迴圈
4. 矩陣(串列,list)
5. 函式
不同的程式語言在表達這些語法時會有不同的**方式**,例如 C 和 Python 在迴圈的表達上就非常不同。但在撰寫或閱讀上,它們都可以被理解為以上五種語法組成的句子(表達式,Representation)的彼此**套嵌**(Nested)。
> 套嵌: 當是一個語法放置在另一個語法內時,就會稱為嵌套。
舉個中文的例子:
```python=
我是學生
Q是學生
教室是"153"
我和Q從 9/9 到 10/10 每隔 7 天:
如果(教授不在):
我休息
其他情況:
我上課
```
程式大概的架構其實就跟上面中文舉例的差不多,那麼該如何根據五種語法構成的表達式和套嵌邏輯來閱讀上述程式呢?通常,程式碼的撰寫或是閱讀都是<font color="#f00">由上至下</font>,由<font color="#f00">套嵌順序靠前的到套嵌順序靠後的</font>。
* 行 1, 2 : 定義。定義了"我"和"Q"是什麼東東。
* 行 4 : 也是定義,但涉及了不同的變數型態,因此表達上與行 1, 2 不同。
* 行 6 ~ 10: 迴圈,同時內部有一組條件的套嵌。
* 行 7 ~ 10: 條件,內部有多個定義。
* 行 8, 10: 定義。定義了我做什麼。
而在接下來的時間裡,將以 Python 分別介紹程式的五大語法。另外,如果在接觸這系列教學前有試著自學程式,應該有在 Github 或是專家的個人日誌上,看到無法被歸類在這五種語法的程式碼。但請您放心,如果您是以統計科學為目標學習程式,或是非程式專業的工作者,基本上不會使用到這些以外的語法,~~因為這些語法通常涉及程式語言的特性、容器、物件導向、大型專案管理或是效能優化等~~。會使用 Python 進行教學是因為 Python 具有豐富的相關套件,並且都有被優化過、易於學習,可以讓各位專注於輔助統計科學的目標。
<br/>
## 1.3 定義和變數型態(Type variable)
在接下來的時間裡,我將以 Python 分別介紹我所分類的程式五大語法,這邊只要先了解概念即可,因為實際操作、上機的課程內容被我安排在下週。另外,各位如果在接觸這篇教學前有試著自學程式,應該有在 Github 或是專家的個人日誌上,看到無法被歸類在這五種語法的程式碼。不過請您放心,如果您是以統計科學為目標學習程式,或是非程式專業的工作者,基本上不會使用到這些以外的語法,~~因為這些語法通常涉及容器、物件導向、大型專案管理或是效能優化等~~。會使用 Python 進行教學是因為 Python 具有豐富的相關套件,並且都有被優化過、易於學習,可以讓各位專注於輔助統計科學的目標。
閒聊了那麼多,先來看到最最最基本的 **定義句和變數型態** 的程式碼(之後的所有程式碼除非特別提到,否則一律是 Python 的程式碼)。
```python=
a = 100
```
非常好! 我們已經完成這個小節的課程了(誤)。
> 上面這行程式碼的意思是 "**變數 a 是值為 100 的整數**"
從上面的白話文可以知道,定義句由三種元素組成:
### $$定義句:{\kern 4pt}帶有名稱的變數{\kern 6pt}變數型態{\kern 6pt}值$$
* **帶有名稱的變數**:
在前面提到"描述一件事要怎麼做",也就是只一段程式碼中,會需要很多角色各司其職,而這個角色最主要就是 **變數**。每一個角色(變數)都有它自己的名字,並且需要根據一定規則命名。
> 變數的名字只能由英文字母(A-Z, a-z,大小寫不同)、數字(0-9)和底線(_)組成,並且變數名稱不可以以數字開頭。
* **變數型態**:
變數有了身分後接著就需要賦予它身份,也就是所謂的 **變數型態(Type variable)**,在程式語言中,不同身份會有不同的定義方式,<font color="#f00">不同身份的值也會有不同的範圍限制</font>。而常見的身份有:
* 整數
* 浮點數(含有小數點的數)
* 字串
* 矩陣(串列,list)
* **值**:
值可以當作是變數更詳細的身份,例如在變數 A 的變數型態是整數的條件下,A 可以是 -72 、0 也可以是 1500000,端看程式的撰寫者如何 **定義**。
在程式中,通常都有一個特殊的東東叫做 <font color="#f00">**註解**</font>,用來記錄你想記錄的內容,通常這些註解能使其他人更容易閱讀你的程式碼。在Python 中,註解的格式是 ```# 備註的文字```。
下面列舉些定義句的範例:
```python=
# 下面都是合乎語法的定義
# 定義過的變數可以再賦予其他值
# 在 python 中,直接轉換身分(變數型態)也是可以的,但不推薦,因為會使程式碼不易於閱讀(維護)
a = 10
a=20
a = "my batch is 207" # 放在一對「單引號」或「雙引號」裡的字就會變成字串的變數型態
my_age = 5.2 # 變數 my_age 是值為 5.2 的浮點數
```
## 判斷句
判斷句顧名思義就是決定 **"描述一件事要怎麼做"** 時,政策該怎麼轉彎。
```python=
#
if(班長在):
我保持警醒
else:
我摸魚
#
if(班長在):
我保持警醒
elif():
else:
我摸魚
```
## 迴圈
## 矩陣(串列,list)
## 函式
---
# 最基本的 python 語法
---
# 練習題
---
# 參考資料
* [SPSS 應用於醫學資料分析](https://www.youtube.com/playlist?list=PLN2q42LF97OYRpdsVyb_YLf8qylvpZQlp)
* [套嵌定義](https://www.geeksforgeeks.org/nested-loops-in-programming/)
```python=
```