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

2021年2月13日 星期六

Python|常用基本語言

之前有提到說 Python 和 R 很像,這篇就拿 R 的基本語言那篇改寫成 Python 的用法。

Python 的 libraries 有幾個,常用的有 pandas (data structures & tools), NumPy (arrays, matrices), SciPy (integrals, optimization) 和 Matplotlib (plots, graphs)。

以下 Python 的指令都是在 Jupyter Notebook 裡執行,關於怎麼用 jupyter notebook,請參考這篇:Python | 我想玩,但要怎麼開始?

此篇的指令教學在這:Python 04
之前的入門可參考:Python 01, Python 02, Python data

在 R 裡要讀檔要先跑 library readr,叫出讀檔的功能,然後再用指令 read.csv() 讀檔。例如要用 R 讀電腦裡的 mtcar,指令如下:

library(readr)
mtcars <- read_csv("~/Desktop/R program/ECOSCOPE/mtcars.csv")
View(mtcars)


在 Python 裡則是用 library pandas,指令會變成:

import pandas as pd
mtcars = pd.read_csv("~/Desktop/R program/ECOSCOPE/mtcars.csv")
mtcars



Figure 1. Pandas - import csv file

如果想把更新後的 dataframe 輸出成 csv 檔案的話,可以用 df.to_csv()

這邊我們把 mtcars.csv 輸出到 Python 的檔案夾。


Figure 2. Export csv file

跟 R 相同,dataframe 同樣是 df。pd.read_csv() 會預設第一行為 header,也就是 variables 的名稱,例如圖一的部分,mtcars 這個資料檔案裡是有 variable name,在第 0 行上面那行便是。但是在 autos 這個資料檔裡是沒有的,所以第一筆資料變成了 variable name (圖三)。


Figure 3. Data without headers

這筆資料太長了,我們可以選擇只看前幾列或最後幾列,這時可用 df.head(n),看最後幾行則是用 tail.head(n) (如下圖)。在 R 裡的話,是用 head(df, n)


Figure 4. Read head only

上圖裡還多加了一個指令,因為每次都要把路徑打出來的話太麻煩了,我們可以把路徑設成 path,之後就可以用 path 代替。

如果第一行沒有 variables 的名稱,可以在裡面加 header = None,第一行就會變成用數字代替,如圖五。


Figure 5. Data frame without headers, use header = None.

如果想要加 variable name 的話,可以用 headers =["", '' ", ...]。"" 裡面為你想取的 variable name,如下圖。


Figure 6. Data frame with new headers

接下來,我們可以把加了 variable name 的新檔案輸出去為新的 csv file。

path = "~/Desktop/Python/data/autos.csv"
autos.to_csv(path)


打開 csv 檢查一下。



真的加進去了呢!

接下來,可以查檔案的 types,用的指令是 df.dtypes


Figure 7. Check types of data frame

可以看到有的應該是數字的,卻顯示為 object,這些之後要自己改才可以執行一些運算,之前介紹 R 的時候也有提過。

我們也可以查檔案資料的 statistic summary,用的指令是 df.describe()


Figure 8. Statistical summary of data frame

df.describe() 這個功能不會顯示非數字的 variables,如果要顯示所有的總結報告,可以在裡面加 include = "all"


Figure 9. Statistical summary including non-numeric data. NaN = not a number.




以上,這篇就先這樣吧。













2018年5月5日 星期六

Python | 用線上 repl.it 寫程式和一些基礎語言

Python 除了可以用之前介紹的 jupyter notebook 外,也可以線上直接寫:repl.it

repl.it 除了可以讓你線上寫 code 之外,也可以自學。先申請一個帳號,登入後在右上角會出現功能列:learn/teach, student, my repls

點入 learn/teach 後下面就會出現很多線上課程,像是 Python, Javascript 等等,我目前是在試 Auto-Graded Course with Solutions 這個課,主要是教你怎麼寫程式,如果你之前有學過 C++ 之類的可能會比較容易上手。


(點圖可以放大)

如果直接連上上面那個網址,就會出現下面這個 coding 的頁面,最左欄是檔案夾,你可以登入後把你寫的東西存入。中間那欄是寫 code 的地方,寫好後點上面的 "run",就會在最右邊那欄跑出來。

例如你在中間欄打入:

a = int(input())
b = int(input())
print(a + b)

input() 這個功能是接受使用者輸入的東西,下面會解釋。

int() 的功能跟 R 的一樣,是指 integer,把輸入的東西變成數字的整數。str() 則是可以把數字變成 string。

print() 就是顯示出 () 裡面的結果

之前關於 Python 的那篇有簡單介紹一下,有興趣的可以先看那篇。(注意,這兩篇教的都是 Python 3.xx 以上的版本,Python 2.xx 的語法會有點不同。例如在 Python 2.xx 的版本裡,input() 的預設是 integer,但是在 Python 3.xx 裡則是 string,所以在上面的例子裡,a 和 b 需要用 int(input()) 把輸入的東西變成 integer,而在 Python 2.xx 的版本裡的話則不用,直接用 input() 讀出來的就是數字。)

上面寫好的 code 在跑了之後就會呈現在右欄,也就是你輸入的第一個數字會是 a,第二個數字會是 b,然後它會算出 a + b。所以當我輸入 3 和 5 後,它會算出 8,變成下面這樣:

3
5
8

上面的 3 和 5 是我輸入的數字,8 是它算出來的。

在 R 裡面設定一個 variable 是用 <-,例如上面的例子,在 R 裡面可以寫成這樣:

a <- 3
b <- 5
print(a + b)

之前那篇有提過,Python 讀取的資料型態分為三種:string (字), integer (整數), float (有小數點的)。在數字外加 str() 就會把它變成 string。另外,在 print() 的功能裡,在字的外面加上 " " 或是 ' ' 的話,就會把它變成 string。用 int() 功能就會把獨到的東西變成 integer。

上面的程式簡單介紹了 integer,接下來介紹一下 string 會在哪裡用到。如果你想要在使用者輸入自己的名字後,出現歡迎詞 "Hello, xxx!",那要怎麼寫呢?我們來拆解一下句子。

Hello, xxx! 這個句子可以拆成三部分:
"Hello, " 是 string。
"xxx" 是使用者輸入的名字,也就是 input()。
"!" 是 string。

要如何把這三個東西結合在一起變成一個句子顯示出來呢?有兩個方法,一個是用 +,另一個是用  ,

在 Python 裡面,+ 除了有數學的功能,在 print() 裡面還有結合顯示的功能。

所以這個句子要讓它呈現,需要這樣寫:

print("Hello, " + input() + "!")

Hello, ! 因為是 string,所以要用 " " 括起來。注意,"Hello, " 的後面有個空格,它也是 string 的一部份,所以要放進去,如果沒有放進去,逗號的後面就會直接連名字,變成:

Hello,xxx!

如果是用  的話,就是在每組字後面加  , ,而且每組之間會出現空白, 也就是說上面用 + 時需要自己加空格的部分,用  ,  的話就不需要。例如上面的句子用  ,  寫的話,就是這樣:

print("Hello,", input(), "!")

不過,因為每組字中間會出現空格,所以你輸入名字後,出現的會是:

Hello, xxx !

你也可以把使用者輸入的名字指定為一個 variable,例如 name,指令寫成這樣:name = input()

於是,中間欄的程式碼可以這樣寫:

name = input()
print("Hello, " + name + "!")
print("Hello,", name, "!")

跑了程式之後,當你在右邊輸入名字,它就會出現:

Peter
Hello, Peter!
Hello, Peter !

Peter 是你輸入的名字,"Hello, Peter!""Hello, Peter !" 是程式讀取後顯示出來的 greetings,看出用 + 和用  的不同了嗎?

另外,+ 和  除了空格這個部分不一樣外,還有一個就是 + 不同種類的不能相加在一起,也就是說 interger 和 string 不能相加在一起顯示,需要把它們變成同類。用  的話則沒有這個限制。

例如我想要讓使用者輸入自己的名字和年齡後,出現這樣的句子:xxx is ??? years old

我們可以把句子拆成這樣:
"xxx" 是使用者輸入的名字,所以是 input()。
"is" 是 string
"???" 是使用者輸入的年齡,所以是 input()。
"years old" 是 string

跟上面一樣,可以把名字指定為 name,年齡指定為 age。

name = input()
age = input()

然後用 + 來寫的話就是:(注意要自己空格和把數字改為 string)

print(name + " is " + str(age) + " years old")

用  來寫的話則是:

print(name, "is", age, "years old")

除了讓使用者輸入,Python 跟 R 一樣也可以指定 variable,例如我們可以指定 year 為 1990,birthmonth 為 Feb。

year = 1990
birthmonth = "Feb"
print(birthmonth, year)

Feb 是 string 所以要加 " "。上面的程式碼跑出來就會在右欄顯示出:

Feb 1990

把上面的程式碼混在一起,比較完整的打在中間那欄:

name = input()
age = input()
birthmonth = "Feb"
year = 1990

print(name, "was born in", birthmonth, year)
print(name, "is", age, "years old")

print(name + " was born in " + birthmonth + str(year))
print(name + " is " + str(age) + " years old")

把程式碼跑完後,在右欄輸入名字和年齡:Peter, 28

就會出現:

Peter
28
Peter is 28 years old
Peter was born in Feb 1990
Peter is 28 years old
Peter was born in Feb1990

看出用 + 和用  的不同呢嗎?

最後,+ 用在數字是把兩個數字加在一起,但是用在 string 是把兩個字連在一起。咦,這不是上面講過了嗎?下面用數字做例子,解釋一下為什麼要再次提出來讓大家注意。

例如我想要顯示:The sum of a and b is (a + b)

把句子拆開來看就是:(記得要把句子中的空格算進 string 裡面)
"The sum of " 是 string
a 是 input(),是數字。
" and " 是 string
b 是 input(),是數字。
" is " 是 string
a + b 是算出來的結果,是 integer。

因為句子是 string,所以要用 + 的話,需要把裡面數字的部分在 print() 裡面設為 string,於是就會變成這樣:

print("The sum of " + str(a) + " and " + str(b) + " is " + str(a + b))

如果用 , 的話就不需要,可以寫成這樣:

print('The sum of', a, 'and', b, 'is', a+b)

前面說過,Python 3.xx 裡的 input() 預設是 string,所以要把 a 和 b 設為 integer。

a = int(input())
b = int(input())

另外加 c 和 d 沒有設 int() 的做比較:

c = input()
d = input()

跟 R 一樣,可以查 variable 的格式是什麼。在 R 裡面是用 class() 的功能,在 Python 裡是用 type() 。查詢 a, b, c, d 的格式:

print(type(a), type(b), type(c), type(d))

算算看 a + b 和 c + d 不同在哪:

print(a + b)
print(c + d)

+ 和  的功能顯示:The sum of a and b is ....

print("The sum of " + str(a) + " and " + str(b) + " is " + str(a + b))

print('The sum of', a, 'and', b, 'is', a+b)

把上面的程式碼整合,打在中間欄完整的 code 是:

a = int(input())
b = int(input())

c = input()
d = input()

print(type(a), type(b), type(c), type(d))

print(a + b)
print(c + d)

print("The sum of " + str(a) + " and " + str(b) + " is " + str(a + b))

print('The sum of', a, 'and', b, 'is', a+b)

print('The sum of', c, 'and', d, 'is', c+d)

跑程式碼後,在右邊輸入 a, b, c, d 四個數字,例如 3, 4, 5, 6,就會出現:

3
4
5
6
<class int=""> <class int=""> <class str=""> <class str="">
7
56
The sum of 3 and 4 is 7
The sum of 3 and 4 is 7
The sum of 5 and 6 is 56

3, 4, 5, 6 是你輸入的數字,後面幾行是程式算出來的。可以看到 3 和 4 是 integer,5 和 6 是 string,所以 3 + 4 算出來是 7,但是 5 + 6 算出來是 56,因為是兩個 string 連在一起,而不是兩個數字加在一起。


以上,這篇的 Python 介紹就先到這吧。









2017年9月24日 星期日

Python | 我想玩,但要怎麼開始?

拖了好久的 Python,上課好像已經是半年前的事惹哈哈。其實 Python 的語法和 R 差不多,所以你會 R 的話基本上可以互用,只是兩者的介面不一樣。

課程是建議安裝 Python version 3.x,可以在 Anaconda 網頁下載(點此),我那時下載以為會是像 RStudio 那樣,是一整個 Python 環境,可以在裡面做任何事,不過上課後發現不是那樣,哈哈。

如果是用 MacBook 的話,要先叫出 Terminal,然後 command 打入:jupyter notebook。

之後會出現這樣的畫面(點圖可放大):

點圖變大

對,它看起來會像是變成瀏覽器的一個頁面,上面出現的是你電腦裡的主要 folders,Python script 的檔案也可以在正常的 folder 裡看到,不用進入 Python 的環境,只是要打開的話需要進入 jupyter notebook。

如果想要在 jupyter 裡面看電腦裡面有哪些 folders,或是 folders 裡面有哪些 sub-folders 的話,用的指令是跟 bash shell 相同的,例如用 ls 列出有什麼檔案,用 cd 進入你想進的 folder。



這裡就不再重複 Bash Shell 的指令,細節請看這篇:Bash Shell

你可以用 bash shell 的指令在你要的 folder 建立新的 folder 或檔案,也可以直接在正常的 folder 開新的 folder。進入到你想開新 python 檔案的資料夾後,要開始寫一個新的 script 的話就在右上角的 "New" 那裡打開一個新的檔案:Python [conda root]。

點圖變大

打開之後就會出現這樣的頁面,input (In[]) 欄讓你打指令,就像 R 裡面的 console,然後按 Enter 可以換行,如果要讓它跑結果,就是按 "Shift + Enter"。指令是可以更改的,用滑鼠點到那一欄以後就可以改,不用再開另一欄重打,改過的指令再按一次 "Shift + Enter" 會出現新的計算結果。

點圖變大

跟 R 同樣有分三種:string (字), integer (整數), float (有小數點的)

在數字外加 '' 就會把數字變成 string,例如 '8' 是個 string 而不是數字。不同的種類不能互相加減,要把它轉成同種,例如上面的 a 是 string,乘以十的話就會出現十個 a,也就是十個 hello。String 不能和數字相加減,上面的例子是把 b 變成 string,兩個 string 相加就會變成 hello10。把整數的 b 變成有小數點的 float 就可以和 c 相加,結果就變成 10.0 + 6.6 = 16.6。

要載入 packages 的話,要用 import 這個指令。例如要讀 csv file 的話,需要用 read_csv() 這個功能,而這個功能在 package pandas 裡面,我們需要先 import pandas,指令就是:

import pandas

例如要讀取的檔案為 apple.csv,先把檔案設成一個 data frame,把其命名為 data_apple。

data_apple = pandas.read_csv('apple.csv')

如果覺得每次要用 read_csv() 這個功能要打很長很煩的話,可以把 pandas 指定一個短的代替,例如 pd,這時在 import 的時候就要下這樣的指令:

import pandas as pd

之後使用的時候就可以變成:

data_apple = pd.read_csv('apple.csv')

這篇就先介紹到這,只是個入門讓大家知道怎麼開始,其他語法很多都和 R 一樣,大家可以互相轉換來試試看。