series & 建立 DataFrame 表格

今天要來教大家使用Python裡面一個很好用的套件:Pandas(忘記他的可以點這邊)。回想一下,還記得前陣子教的tuplelistdictionary嗎(這邊這邊)?這幾個原生的資料格式很好用沒錯。但是若要用來進行data science的分析會非常麻煩。所以就有了Pandas這個套件來讓大家可以快速且簡單的利用你手邊的資料。

這邊的教學裡面會用到pandas,所以要在程式的最前面import pandas as pd這個套件,並把這個套件取作pd。接著就可以開始使用pandas拉~

1.Series:

這邊先在l這個變數中儲存list。然後利用pd.Serieslist轉換成Series的形式儲存起來。

l = [1,2,3,'tinycorner',3.14]
s = pd.Series(l)

接著我們來看看變數ls裡面存了什麼啊?可以看到l的確是list的格式,而s呢?就是list重新加入索引值,變成新的檔案格式。為什麼要這樣呢????其實可以想像一下在成功嶺受訓的時候,要穿上很白癡的號碼衣,為什麼要做這個白癡的事情呢?因為大家都是死光頭,分隊長根本搞不清楚誰是誰,所以阿~當穿上號碼衣之後,他就只要叫號碼就好了。Series也是,未來資料量變大的時候,我們需要藉由索引值來找出所要的資料即可。

接著來看看要怎麼利用索引值叫資料出來。

我們只要在儲存的資料後面加上他的索引值就好。所以像是s[3]就會叫出對應的tinycorner字串出來。想像是分隊長叫98號出列,就會有一個穿著98號號碼衣的人很悲慘的出來…

2.DataFrame:

接著才要開始進入Data science的重頭戲—DataFrame,基本上呢,我們的資料是不可能只有一行,最普通最普通的資料至少要有行跟列。所以這邊我們就需要使用DataFrame來完成這樣的需求囉~~

下面就開始實做拉,我們先嘗試看看要怎麼做出一個班級的成績表

name = ['Bob', 'Tom', 'Jason', 'Marry', 'Julia']
subject = ['Chinese', 'Math', 'Science', 'Music', 'PE', 'History']
df = pd.DataFrame(index=name, columns = subject)
df

這邊我先用list儲存namesubject。接著利用DataFrame來創建下面的格式,並且設定變index還有columns分別使用namesubject,並將它存到df當中。大家可以看下面輸出結果,我們要的名字科目的格式就會生成出來啦~

不過大家有沒有發現上面出現了NaN,在Python裡面,若是你沒有把數值存到裡面的話,Python會自動把他記成NaN,代表”沒有”或是”缺失值”,注意喔!!!這邊NaN不等於”0″,舉例來說,你因為生病缺考跟考零分是不一樣的意思。未來TinyCorner也會教如果遇到NaN的話該怎麼處理,這邊我們就把數值給填進去完成這張表吧~

scores = [[ 52,85,96,100,75,54],[40,98,93,54,33,20],[100,97,54,55,100,88],
          [72,67,64,53,87,83],[45,90,100,55,34,96]]
df = pd.DataFrame(scores, index = name, columns = subject)
df

這邊我們使用很多個清單把學生的分數儲存起來,在scores中,有很多個list,每個list都代表一個學生全部科目的分數(也就是每個list會代表一行的資料)。最後再把indexcolumns放上去表格,就是一張漂亮的同學的各科成績資料囉~

好啦~有了成績表之後,接著我會教大家怎麼用使用DataFrame裡面更細部的功能,並看看我們能不能從這張表格裡面挖出什麼有用的資訊吧。

 

 

 

 

元組( tuple )、列表( list )、字典( dictionary ) 儲存資料三兄弟

在前面的文章有提到,Python 會自動幫你指定變數的型態,這對 coding 的人來說是一個方便的事情。然而,這樣子會產生一個問題,可能到到後面你無法確定現在變數的型態是什麼?所以 Python 內建了一個函數可以讓你查詢變數的型態type,試試看以下程式碼:

test_1=5
test_2=2.3
test_3='apple'
print(type(test_1))
print(type(test_2))
print(type(test_3))

在前面三行,我們分別將test_1,test_2,test_3分別儲存一個整數、浮點數與字串;後面三行利用type找出類型,並使用print將它們顯示在螢幕上。

下面三行的執行結果的確驗證了三個變數分別為整數、浮點數和字串。

接下來要介紹Python中,將多個值儲存到一個變數的方法,總共有三種:
1.元組tuple:

tuple有什麼特性呢?他有點像是那種刻在石板上的戒律。tuple一旦儲存起來,就無法做更動了,所以適合儲存那些不想要變動的值。以免不小心更改到值。

x = (1, 'apple', 2, 'banana')
print(type(x))
print(x)

要使用元組(tuple)方式儲存的話,使用括號”()”將要儲存的數值刮起來,每組資料用”,”分隔開來,另外元組可以儲存不同的變數型態。若是利用type再次確認x的型態,會發現的確是tuple

2.列表list:

list的操作在 Python 中算是最常見也是最基礎的方式。簡單來說,他就是把一連串的資料,不管青紅皂白的儲存起來。比較需要注意的地方,在於你叫呼叫出list中的值,要搞清楚他的索引值。未來我會寫一篇關於操作list更詳細的介紹。

y = [1, 'apple', 2, 'banana']
print(type(y))
print(y)

想要使用list儲存,使用中括號”[]”,並用”,”分隔開來,而且他裡面可以放入不同種類形式的資料。使用剛剛學到的type做確認,沒錯,果然是list的型態

3.字典dictionary:

dictionary的儲存方式,大家可以想像成英文單字卡本,也就是一面可以寫中文,一面可以寫英文的那種本子。他多了一個”鍵值”,他會跟你的資料做綁定,也就是你可以藉由鍵值來呼叫他所代表的資料。

dictionary的儲存方式利用”{}”,在並且一個鍵值和資料用”:”分隔,每一組使用”,”分隔。使用的方式如下

z = {"apple":"蘋果", "banana":"香蕉", "one":1}
print(type(z))
print(z["apple"])
print(z["banana"])
print(z["one"])

可以看到你對於每個鍵值做查詢的話,可以看到他所儲存的值。這種儲存方式適合兩兩一組的值,而且dictionary可以在事後做更改、新增跟刪除。

呼~先初步介紹 Python 中的三種資料型態儲存方式,接著會詳細介紹三種資料形態要怎麼操作與應用~~

使用 Python 讀取 csv 和 xlsx 檔

今天要來討論怎麼把檔案“讀到”Jupyter Notebook當中。你可能會想:為什麼要把檔案讀到Jupyter Notebook中呢?一般的表格的資料會以.csv和.xlsx的形式儲存,而我們會利用Office 中的 Excel 來閱讀或是修改這類的檔案類型。而今天我們的作法是要將他們讀到Jupyter Notebook 中,並利用 Python 來做資料的整理,不過問題來了,既然我們可以使用Excel來操作資料,為什麼還要多學 Python 呢?恩…這個問題如果你未來持續追蹤TinyCorner,你就會知道 Python 處理資料用起來有多爽了~ 好啦簡單來說,Excel 所提供的視覺化界面是非常直覺的操作方式,但是在處理大量資料或是多個 Data 來源的時候,就會發現綁手綁腳,而且未來遇到類似的資料,也很難用同套處理方式。利用Python 來整理資料,只要你熟悉語法,感覺起來就會像是你叫一個小弟:欸欸,幫我把這兩個資料表合併成一個表格,並且幫我做…的分析,喔 對了順便幫我把他們視覺化的圖表做出來。他就會幫你整理出你要的資料,這種爽感只能意會不能言傳,希望大家將來也可以利用 Python 來減輕工作的 Loading 量,現在就開始進入教學吧~
(這邊可以先下載後面會用到的兩個資料,City_Zhvi_AllHomesgdplev)

1.確認檔案類型:

常見的表格檔案有兩種:.csv和.xlsx。可以對著檔案點選右鍵,再接著點進內容中,就可以看到檔案類型。其中.csv可以用記事本打開,而.xlsx 則是 Office 特有的檔案,要用Excel打開才行。Python 支援這兩種語法的讀取,只是讀取的方式有小小的差異。

2.讀取檔案:

(這邊先說讀取資料路徑有兩種方式:第一種是把你要讀取的檔案跟你的程式碼放在同一個資料夾,程式就會自己去抓;第二種是跟電腦講說你要讀取的檔案存在那邊。一般來說我比較喜歡第一種作法,因為這樣比較好掌握檔案的位置,若是使用第二種方法,要讀取的檔案位置變更的話,程式碼也要跟著跟動。所以下面是使用第一種方法,不過我會在附註放入第二種作法,大家有興趣可以參考~)

首先先在Jupyter Notebook中創立一個資料夾,點進去開啟新的 Python 專案。另外,把 .csv 和 .xlsx 兩種檔案丟進去,就可以準備開始讀檔囉~

回到Jupyter Notebook頁面,進入TinyCorner_ex的資料夾中會看到檔案已經跑到這個資料夾囉~接著建立新的 Python3,就可以開始寫程式囉~

首先先讀取 .xlsx 檔,用前面兩行把資料讀進來,第三行用來顯示前十五筆資料:

import pandas as pd
df = pd.read_excel("gdplev.xlsx")
df.head(15)

其中我們需要使用 read_excel 來讀取資料,但是他是寫在 pandas 套件中,第一行是跟電腦說我需要使用 pandas 這個套件,而且把他取作 pd;
第二行 df 使創造一個地方給我們的資料儲存, pd 則是叫電腦去找 pandas 裡面的read_excel 功能,然後資料就被存到 df 中囉~
第三行則是把第三行的資料叫出來,head(15) 代表叫出前十五筆資料(可以視需求更改)

接著是要讀取.csv

import pandas as pd
df_2 = pd.read_csv("City_Zhvi_AllHomes.csv")
df_2.head(15)

挖恭喜你啊~你已經學會兩種不同資料的讀法了,
不過別開心的太早,大家仔細看 gdplev 的資料!!!!!!!有沒有發現資料的型態好像怪怪的…沒錯大部分你抓的資料格式都不會依照你所想的幫你整理好,所以接下來會慢慢的教大家怎麼樣把資料整理乾淨~~

附註(輸入路徑來存取):
這邊提供第二種存取檔案的方式,你可以直接輸入檔案的路徑位置來告知程式檔案的位置,假設檔案是存在 D 槽中的 tinycorner 資料夾(大家可以依照自己的檔案位置修改),程式碼如下:

import pandas as pd
df = pd.read_excel(r"D:\tinycorner\gdplev.xlsx")
df.head(15)

import pandas as pd
df = pd.read_csv(r"D:\tinycorner\City_Zhvi_AllHomes.csv")
df.head(15)

會得到一樣的輸出結果~

如果想取得更多不一樣的資料來源,可以參考這篇:數據來源介紹 — 政府資料開放平臺

十五分鐘內安裝 anaconda 寫第一支 Python 程式

如果已經開始在使用 Python,那就跳過這篇吧~但是如果你還沒用過 Python 甚至是還沒寫過程式,恭喜你,今天就趕快上車吧,按照下面的步驟安裝 anaconda,十五分鐘後,你就可以開往寫 code 人生啦~~

Anaconda 可以想像成 Python的懶人包,傳統自己安裝自己安裝 Python 的話,還要進行路徑設定,安裝需要用的 Package 等對初學者不是那麼友善的步驟,但是安裝 Anaconda 可以幫你做好這些事情,也避免日後衍生比較複雜的問題。

1.首先先下載Anaconda

進入Anaconda下載頁面後,依照你所使用的作業系統下載適合的版本,並按照指示安裝,結束後就會看到Anaconda的圖示。

2.開啟Jupyter Notebook(windows作業系統)

在開始列當中,可以點開 Anaconda 的資料夾,並點【 Jupyter Notebook】 就可以進入以下的視窗當中,這代表你已經成功安裝好 Anaconda 囉~~

3.開新檔案,開始寫程式

開始準備寫程式拉~首先先點右上角的【New】,再點Python3後他會打開一個新分頁,接著我們就可以在區塊中撰寫自己的程式碼了。

4.第一支小程式

學程式語言的第一支程式的慣例:試著在電腦列印出 Hello world。雖然其實我一直覺得這是很無聊的傳統(> <),不過我們就來測試一下安裝Python是否正常吧!

在上圖紅色框框中,打進下面的程式碼,按下【enter】

print("Hello world")

如果可以跑出 Hello world 的話
恭喜你 !! 你已經趕上 Python 的列車拉,雖然寫程式的挑戰才剛開始,但只要能對自己有信心,堅持的練習,一定能持續成長,到達自己預設的目標 !! TinyCorner 也會持續的和大家一起努力喔 !!

Python 裡面的閃電俠 — NumPy & Pandas

講到 Python 有一個很嚴重的問題:就是他的速度…為了貼近自然語言(也就是說你嘴巴講出來的話,跟你要寫的 code 差不多),所以他在底層運作上,先天上不可避免的問題就是比人家慢。其實慢也不是很嚴重的問題,因為現在硬體設備的大突破,雖然說是”慢”,但正常人是無法明顯的感覺出差異的(就算是工程師,為了讓自己的生活與工作愉快一點,很多人覺得就算多等那麼一下下也不是那麼嚴重的問題。)

但是以上的這些敘述,很抱歉,不適用於 Data Science 上,為什麼呢?因為現在數據量已經進入超乎想像的龐大。當你開始執行程式的那一刻,結果動輒好幾天才出來,最少可能也是好幾個小時,這個時候程式的效率便非常重要,因為你不會想要一整天都蝦耗在那邊,結果什麼都跑不出來,更悲慘的是結果最後不是自己想要的,於是只好悲慘再修改好code,按下執行後,又再重新再等…

於是,出現了兩個超級英雄拯救 Python,那就是 NumPy 跟 Pandas。

Numpy,雖然他是 Python 裡面的套件,但是他披著 Python 的皮,裡面的運作架構卻是使用 C 語言。而 Pandas 是利用 NumPy 的架構來表示或是紀錄更複雜的資料。哇,怎麼又扯出個”C語言”,你可能會開始懷該不會又要學新的東西了吧。NO! 這個就是 Python最爽的地方,其實你完全完全就可以不用管底下在幹嘛,你就可以利用這個套件,用Python 的語法,達成你要做的事情。不過為了讓大家更徹底的了解,我還是會跟大家講一下 Python 跟 C 語言的差別。下面的舉兩個例子來說明 Python 跟 C 語言運作上的差異(注意:這是舉例,不是完整的程式碼,所以不能拿來執行)

首先我先示範 C 語言中,你要跟電腦講說今天是多少年幾月幾號的時候的作法:

int year, month, day;
year = 2018;
moth = 4;
day = 21;

首先,你要跟要三個空間year, month, day,而且你要跟電腦說我要儲存的是整數喔(也就是 int 做的事情),接著你就可以利用後面的三行 code,把數字儲存進去那三個空間中。於是未來當你用到 year, month, day 時,就會等於使用你所儲存的數字。不過要注意的一點是:在 C 語言中,在你進行宣告後,他就固定了!他就固定了!他就固定了!所以如果你把 day=21; 改成 day=21.5; 的話,電腦執行時會出現錯誤,因為你一開始預定的是整數的空間,所以電腦會不知道你在幹嘛,最後就會出現 error。

接著看看 Python 的話,

year = 2018
month = 4
day = 21

嗯!?怎麼 int 不見了,是的你沒看錯,你不需要跟電腦說 year, month, day 的型態是什麼,你就可以直接用了,因為 Python 會直接幫你處理好。

再看下個例子,我們這次來算圓面積好了:

float r, pi, area;
r = 3;
pi = 3.14;
area = (r ^2)*pi;

嗯…怎麼 int 變成 float 了…因為在這邊pi是浮點數不是整數,所以你要你要改用 float 宣告是浮點數。而且還有一個更麻煩的事,如果你r是宣告成整數的話,電腦將會告訴你,它沒辦法做 (r ^2)*3.14 這樣子的運算,因為電腦只能整數和整數、浮點數和浮點數間運算…

再來看看 Python :

r = 3
pi = 3.14
area = (3^2)*pi

嗯!?這麼簡單?對,在 Python 中,你不需要做宣告型態,他會幫你做好做滿。

所以阿,兩個簡單的例子中,可以看出 Python 真的很方便,因為他會幫你管控變數的型態,但是你不用自己做,不代表不需要做!所以阿,讓 Python 幫你處理,你付出的代價就是變慢。

寫到這邊,我們要心懷感激寫出 NumPy 和 Pandas 套件的前輩們,因為有他們為了解決這樣的問題,所以在我們使用者可以繼續使用 Python 的語法,但是實際上,程式裡面的運作依然是使用 C 語言的架構,讓我們可以用得開心,但是程式速度卻不受影響。講了那麼多 Python 跟 C 語言的恩怨情仇,下次就會開始正式進入 NumPy 的教學囉!請大家不要忘記保持追蹤 TinyCorner 阿!!