iT邦幫忙

2022 iThome 鐵人賽

DAY 9
0
AI & Data

文理組人都能上手的入門 NLP(自然語言處理)系列 第 9

[Day 8.5] 時間都去哪了?資料前處理:客製化你的專屬函式-function

  • 分享至 

  • xImage
  •  

  一個大糟糕,突然發現排schedule的時候沒有排到要教function怎麼用。但是這個東西又非常之方便,不講一下真的不行,所以只好來個第8.5天幫自己加班了。

  昨天介紹了公司老鳥的工作秘訣-正規表達式,再加上今天介紹了怎麼用if跟loop當個有原則有效率的社畜,基本上大家已經具備讓python成為年度好員工的秘密了。雖然python裡面充滿各種各樣實用的套件跟函式,但是大家要做的事情都不一樣,一定沒辦法完全滿足每個人的需求。所以如果想讓python更上一層樓的話,絕對要學會訂好SOP讓他參考。而存放SOP的地方就是function

  每間公司裡面一定會有針對不同活動或是事務的固定流程,會需要SOP就是因為這些事情不斷重複上演,前人找到有效率的工作方式了當然會傳給後面的人。當我們在進行資料前處理的時候也會遇到這樣的事情。以我們在if跟loop的應用裡面練習的針對成績給評語來說,一個學期至少三次段考,每次都要重複寫一樣的程式碼未免太過麻煩。這種時候就可以自己定一個function來簡化流程。

  定function的方式很簡單,我們要先告訴python現在開始要定義一個新的SOP了,所以先打出def。接著告訴python這個SOP的名字是什麼,跟到時候需要哪些要素(也就是參數)來進行。在做好這些前置工作後就可以開始告訴他SOP確切的內容了。先舉一個簡單的例子,如果我想要一個可以用半徑幫我算圓型面積的功能,就可以像下面這樣寫。

def circle_area(radius_int):
    area = radius_int*radius_int*3.14
    return area

  翻譯一下上面這段程式碼就是「定義一個叫做circle_area的函式,需要輸入代號radius_int的一個參數。circle_area執行的時候會把參數radius_int平方之後再乘上3.14,並把這個結果宣告為一個叫做area的變數。接著輸出這個變數。」這裡需要注意的有下面幾點:

  1. 定義好函式的名字跟需要的參數後要加冒號
  2. 參數的命名只是為了下面做事的時候有一個指涉對象,但通常會以需要的資料型態命名
  3. 開始說明SOP內容時要縮排
  4. 使用函式時,裡面宣告的變數並非真實存在python的環境之中,只是在函式作用時暫時存在而已
  5. 所以我們希望他給出來的東西(在這裡式圓形面積)需要透過return來輸出

  下面就讓我們實際使用看看這個函式,也順便示範一下第四點到底在說什麼。

print(circle_area(5))
print(area)
# 輸出
78.5
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-2-ae1ac93c486b> in <module>
      1 print(circle_area(5))
----> 2 print(area)

NameError: name 'area' is not defined

  我們可以看到這個新函式成功幫我們算出半徑為5的圓型面積。然後area這個臨時變數對python來說是根本不存在的東西。

  說明完定義function的基本概念之後,我們就試著來寫一個可以自動產出評語的function吧。這邊的情景設定是,通常成績會寫成一個表格(dataframe),我們要針對不同成績的同學給出評語並回傳一個有評語欄的表格給使用者。給評語的規則是這樣的:

  1. 90分以上:為學霸鼓掌~
  2. 60~89:恭喜過關~
  3. 60分以下:重修囉~
def give_comment(df, column):
  result = df
  result["comment"] = " "
  for i in range(len(df.iloc[:,column])):
        if df.iat[i, column] >= 90:
            result["comment"][i] = "為學霸鼓掌~"
        elif df.iat[i, column] > 60:
            result["comment"][i] = "重修囉~"
        else:
            result["comment"][i] = "恭喜過關~"
  return result

  如果想要給評語的話,首先我們需要有一個dataframe,然後還要知道哪一行代表的是成績才能作業。所以需要的參數有兩個,表格跟成績是第幾行。接著先準備新的表格讓他有代表comment的行可以填入,再讓他一個一個判斷符合哪個評語的條件把評語傳進表格裡,最後回傳這個新表格。

  接著我們用這個檔案試試看。

import pandas as panda
data = pd.read_csv("檔案路徑")
new_data = give_comment(data, 1)
new_data.head()

https://ithelp.ithome.com.tw/upload/images/20220923/201516875iWVN3BQr6.png

  那關於函式定義的教學就到這邊結束,真的明天(今天)見~


上一篇
[Day 8] 時間都去哪了?資料前處理:當一個有原則有效率的快樂打工人-if & loop
下一篇
[Day 9] 時間都去哪了?資料前處理:成為聽懂人話的社畜之第一步-斷詞斷句(英)
系列文
文理組人都能上手的入門 NLP(自然語言處理)31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言