Python 函數式編程 (2) — map

前幾篇的教學我們知道:可以利用list來記錄班上的成績。但是現在遇到一個狀況:班上的成績都太爛了我們想要調整分數,在Python中可以一次改好。

有兩種方式:

  • 使用Python中〔列表解析〕的寫法:
    initial_grade = [20, 36, 48, 50 ]
    final_grade = [ i*0.8+40 for i in initial_grade]
    print(final_grade)


    把原本的資料存在initial_grade中,並處理過後儲存到final_grade中。會發現在final_grade中所儲存的是處理過後的initial_grade成績。

  • 使用〔函數式編程〕map來寫:

    initial_grade = [20, 36, 48, 50 ]
    final_grade = map(lambda x: x*0.8+40, initial_grade )
    print(list(final_grade))


    利用函數式編程,並利用lambda就可以將兩張表作運算,並將答案儲存起來。不過要注意利用map出來的會是一個”物件”,所以我們要利用list把他轉換成列表的形式。

好啦~今天的教學大致上到這邊,不過大家可能會問為什麼要用map來寫呢?其實答案就是快,使用列表解析的時候其實裡面是利用for迴圈一次一次做,相對來說需要比較多的時間。還記得Python先天不良的劣勢就是慢嗎?特別是處理很大的數據量的時候,這樣子的狀況就會特別明顯,所以把這些細節練習好,code執行起來才不會又肥又慢喔~

Python 函數式編程 (1) — lambda

不知道大家對於函式熟不熟阿?今天要來介紹在Python裡面提供的輕量化函式,在Python中,若是不是太複雜的功能、或是這一小段用完後面保證不會用到的話就可以選使用lamda(),這樣聽起來很抽象對吧?沒關係,我們來看一下兩邊的比較就知道了。

  • 函式

    上面的就是函式,其實說到底就像是國高中數學上的函數的概念,先定義 f(x) 跟 x 的關係。以上面的例子來說,當你在程式中寫到 f(2),電腦就會去找名稱 ” f “這個函式,然後把 ” 2 ” 丟到變數裡面,然後返回 2 * 2 這個值回來。g(x, y) 也是一樣,只是有兩個變數。
    整個過程簡單來說就是這樣:你把數字丟到想要丟的函式裡面,然後他會處理好再丟回來。
    另外要注意一下喔, 函式的名稱不一定要定義成 f 喔~ 你開心叫什麼都可以,當然也一樣~下面定義一個算圓面積的函式,我們把這個函式叫做 circular_area,而變數當然是跟面積有關係的 r :

    這邊我們把 9 丟到 circular_area 運算,得到我面積等於 254.34 。另外在def circular_area(r):return(r*r*pi)之間可以做任何的運算。

  • lambda

    我們來看看lambda的寫法吧~同樣想要執行函式,我們的程式碼變成一行就可以解決了~
    Python中支援函式另一種更簡潔的寫法,然而是否都該使用函數式編程來取代函式呢?一般我們使用函式時,會把他放在整個寫的程式碼的最上面,可以套用在整份文件上,所以對我來說,如果某個函式只有在程式碼的某個段落中使用,而且只需要短短的計算,就可以考慮使用lambda,因為可以讓程式閱讀起來更簡潔;反之若是你需要複雜的函式功能或是整在個code中都需要用到的話,那就還是乖乖使用函式,對於整個程式碼的架構才能保持更清楚。

快檢視與統計手上的 DataFrame

接下來要來教大家怎麼看自己手邊的資料啦,在 Pandas 裡面有很多內建的指令,可以讓你初步的了解你手邊的資料到底長什麼樣子。(不過這邊因為這邊的資料量很小,所以看起來好像脫褲子放屁,但是未來資料量一大的時候,這些技巧就會變得相當有用。)

這邊首先要請大家先建立一個 DataFrame 的表格,先打入以下程式碼:

import pandas as pd
name = ['Bob', 'Tom', 'Jason', 'Marry', 'Julia', 'John', 'Cathy', 'Andy']
subject = ['Chinese', 'Math', 'Science', 'Music', 'PE', 'History']
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], [99,47,85,56,60,100],
 [100,36,89,64,85,50],[85,36,45,79,84,39]]
df = pd.DataFrame(scores, index = name, columns = subject)
df

不知道我在幹嘛嗎?可以來這邊回想一下 DataFrame 到底是什麼~接著就要開始新的教學囉~~把資料讀進來之後,我們來看要怎麼看那些資料吧!!

1.查看首尾資料:

df.head()
df.head(3)
df.tail(4)

使用df.head()可以檢視前五筆資料,聰明大家一定可以類推:df.tail()可以看到後五筆資料。在括號裡面填入數字的話,則更改成想看到的任意組數。輸出的結果在下面,當我們讀入的資料量很龐大的時候,可以利用這種方式來看表格的形式,另外,一份表格在頭尾的地方格式最容易跑掉,所每份資料讀進來的時候可以先用這兩種方式確認資料要如何調整。

2.將index排序:

df.sort_index(axis=1, ascending=True)

在資料表中,我們可以把行跟列的索引值按照順序排列,其中axis = 0的時候,是排”行的索引值axis = 0則是排列的索引值。ascending則是用來選擇要順序或是反序排列。

上面這個是依照行的索引值,把名字字首按照順序排好(A-Z)。

而這個則是將列的索引值按照順序排好。

3.按照數值大小排序:

好接下來假設我們想按照成績的順序來看的話,我們可以利用df.sort_values搭配一個index 來排序。假設我想看按照數學分數的高低將名字做排序,例如下面這樣:

df.sort_values(by='Math')

就會變成下面那樣

4.檢視基礎統計資料:

最後,若是我們想看基礎的統計分析的話,這裡也提供一個簡單快速的指令:df.describe(),我們會發現 Python 將基礎的統計資料都幫我們算出來拉~~

df.describe()

其中 count 代表的是有值出現的次數(有可能會發生數值缺失的狀況,像是這個例子中或許代表他生病沒考到試之類的);mean 就是平均值;std 是標準差;min 最小值;25%是第一四分位數;50%中位數;75%第三四分位數;max 最大值。

好啦~到這堂課應該已經涵蓋”正常人”約80%需要用到的統計數據囉!!不過 TinyCorner 不會到這邊就停止腳步的,因為我們的目標就是要超越普通人,不然這樣其實回去用 Excel就好….(不過如果熟悉的話,絕對還是會比 Excel 快很多)。未來會慢慢用一些其他的統計工具,我也會去找一些真實數據來使用,請大家慢慢期待阿~~

 

( 免費 Python 電子書 ) Think Stats: Probability and Statistics for Programmers ( 統計思維:程序員數學之概率統計 )

免費英文版本~

中文版本是這一本喔~

在做數據分析的時候,有兩個很重要的核心概念,一個是對於所選程式語言的熟悉程度。像我就是使用Python,利用Python可以把不要的垃圾資料清理掉、整理成標準格式、找出你想要分析的資料或是把兩個甚至是兩個以上的的資料表整理成一份,這個部分在TinyCorner會慢慢地教大家如何完成;另外一個核心概念:統計,有了好的資料來源後,要如何分析?如何檢驗你的假設?這時候就需要靠統計的協助了。統計在整算是科學界中共通的語言,每份報告的可信度,或是假設成立與否,都需要藉助統計這個核心工具。所以這邊推薦這本免費的電子書”Think Stats”,感謝Allen B. Downey提供的教材,大家可以在這本免費的資源中,學會在Python中使用統計方法。

反過來說,想學統計的人,也可以藉由這本電子書來學習並實際應用,像我本身在大學時期有修過生物統計,然而在課堂上的教學因為缺乏實際操作,所以很多觀念跟步驟只能死記,所以到寫論文實際要使用時,還是要再花很多時間來找到適合的工具,更不用說找到方法後還要再找一個適合的軟體來做分析,找到了還要再學一次…所以學習不如一次到位,時做才是王道,跟著這本書的教學與練習,能完全的把統計內化成你的能力,讓你知道什麼時候要用什麼樣子的方式分析,人家做出來的統計結果又代表了什麼意思,最重要的是你會發現每次你每次的分析又快又正確。

最後,如果對於英文有閱讀障礙的人,這本書也有中文版(不過似乎是只有簡體中文…),中文書名是”統計思維:程序員數學之概率統計”,也可以和英文版的對照用。

台中出差去—逢甲夜市美食吃爽爽

最近到台中出差,有機會在逢甲夜市商圈附近晃了好幾個晚上,TinyCorner跟大家分享一下,在那附近有哪些我覺得超級好吃的東西,大家也可以分享一下每次去逢甲有什麼必吃的好東西,下次出差如果還有機會住在附近,再去幫大家嘗試一下~~~

1.Mr.38 咖哩界傳奇人物:
地址:台中市西屯區至善路212號

坐落在轉角上,很容易找到這家咖哩,餐點乾淨而且份量很多(據說可以加飯,不過他原本的量就讓我飽到受不了了…),還有多元的創意咖哩料理,如果不打算吃夜市可以來這邊吃一下。而且他的餐點會附贈一杯紅茶跟一杯芒果冰沙,紅茶不會太甜也不會太澀,搭咖哩剛剛好。另外,喜歡吃辣的話,在桌子旁邊有小罐辣咖哩,可以加到你自己的餐點裡面,會完美的融入你的咖哩醬中,不會像一般的辣椒醬加進去後破壞食物原本的味道。

 

↑南洋椰香嫩雞咖哩蛋包飯 250元
這道有點淡淡的奶香味,選用雞腿肉,肉質很嫩,整體份量也多,配上他們的咖哩醬,非常好吃。

↑陶燒招牌豚肉湯咖哩 260元
哈哈哈,這道跟菜單上的樣子差的有點大,真的很好奇菜單上的照片是怎麼拍出來的…不過裡面滿滿的料可不是開玩笑的,而且湯頭不像一般咖哩鍋使用咖哩粉,喝起來相當細緻,沾醬的部分也很酷,是附咖哩醬,吃咖哩鍋配咖哩醬真的超級爽,份量也是XL級的。

↑炙燒牛菲力咖哩滑蛋飯 320元
雖然名字是咖哩飯,但是主體似乎是炙燒牛菲力才對XDD豪華的享受,肉很多也不會太老,配上咖哩醬更是從來沒嘗試過的組合。

 

2.老虎堂:
地址:台中市西屯區福星路334號

吃飽了就要配飲料阿~但是在夜市裡面就是要拿著一杯霸氣十足的老虎堂。最近在飲料界的十分火紅的黑糖珍珠鮮奶,是我每次點飲料的首選,所以到了逢甲當然要來朝聖一下老虎堂,傳說中最適合打卡的手搖飲料。聽說最近在士林開的新分店要排三個多小時,不過在逢甲雖然隊伍很長,但是因為製作飲料的店員手腳相當俐落,所以一下子就排到了。

光看店面就霸氣十足,排隊的人蠻多的。

店員很多,而且製作速度也很快,所以不用等太久喔~

↑老虎堂波霸厚鮮奶 50元

要注意的是在逢甲店有兩種size的珍珠,波霸珍珠是一般的大小的珍珠,單寫珍珠的則是偏小顆的珍珠喔(害我不小心點到小珍珠QQ),可以選擇加或是不加奶霜。加上奶霜之後很像布丁的味道,其實味道還蠻不不錯的。因為有點小杯,所以比起一般鮮奶珍珠其實還是偏貴,但在視覺上的真的是帶來很大的爽感,有機會的話我應該還是會在光顧阿~

3.明倫蛋餅
地址:台中市西屯區福星路546號

在蛋餅界裡面,絕對排名前幾名,皮嫩、清爽、蔥香,總而言之就是非常好吃,已經從30元漲價到40元了,實在是有點貴阿…不過他手工現做的蛋餅跟一般蛋餅吃起來不一樣,相當薄卻不失它的彈性,而且蔥的用量十分大方,味道也相當濃郁,算是逢甲夜市中的清新小點心。

↑蛋餅 40元

 

4.吉野烤肉飯
地址:台中市西屯區文華路127巷7號

坐落在逢甲夜市裡面,原本想說到了鼎鼎大名的夜市裡面,就是要一直逛一直買一直吃,所以稍微吃點東西墊墊肚子就好,想說70元的烤肉飯應該不會太多,沒想到大失策!!!份量超大,吃完之後就不會想要再吃其他東西了,雞柳條給的超級多,而且每一塊都超級超級厚,完全使用炭火現烤,可以享受使用炭火烤才有的那種香味跟熱度,跟一般烤箱烤出來的完全不一樣,這家CP值真的是超級高,推薦給去逢甲夜市不知道要吃什麼的人!!

↑無骨烤雞柳飯 70元

5.拾飯にほんりょうり
地址:台中市西屯區至善路222號

這家在Mr. 38咖哩的旁邊,店裡面用的海鮮相當新鮮,給的海鮮也相當豪邁,裝潢讓人感覺十分舒服,還有無限的麥茶跟味噌湯可以自取。如果想要跟三五好友避開人群,悠悠閒閒地坐在店裡聊天,這邊絕對是首選。

↑特上炙燒盛合丼 290元
滿到快溢出來的料,有鮭魚、海鱺、花枝以及蝦軟,唯一的缺點就是每種都好吃,吃完了讓人意猶未盡!!

↑好吃蝦蝦蝦蝦蝦丼飯 250元
他真的就叫這個名字…炸蝦控的最愛,旁邊那顆番茄酸酸甜甜的很好吃,可以去整晚炸物的油膩感。

↑無刺明太子秋刀魚丼 260元
因為是現烤的,所以等待時間會稍微久一些,其實也沒什麼好介紹的,因為就是整碗滿滿的秋刀魚!!明太子醬跟秋刀魚更是出乎意料的搭配。

↑麥茶、味噌湯 0元
放在旁邊,可以自己取用喔~

大家最喜歡逢甲哪些食物呢?可以在下面分享,下次有機會再去幫大家試吃看喔~