iT邦幫忙

2022 iThome 鐵人賽

DAY 9
1
AI & Data

先別急著學 Python | The Secret to Success in Python系列 第 9

Ɖ9-榫卯/ 利用多種 Python 方式簡單計算加權平均數

  • 分享至 

  • xImage
  •  

榫卯,如同拼圖一樣組合起結構

榫卯,是中國傳統木工中接合建築與結構的方式,利用榫頭插入另一個的卯眼中,使兩個構件連接並固定,與現代工藝不同的地方在於榫和卯眼之間並無接著劑,不像是現代建築中利用大量的黏膠水泥,而是用最原始的方法組成,我們的知識也是如此。在討論完鐵達尼號的案例,在接下來的內容將要分享的事 Excel 跟 Python 之間的應用關聯,我們也許花了很長的時間熟悉 Python,也學了很多很酷炫的技巧,但是當我們要把這些技術應用回 Excel,或者是說想要應用 Excel 來達成同樣的目標時,反而覺得綁手綁腳的,畢竟兩個是完全不一樣的工具,開發的出發點也有所不同。因此在接下來我會從基本的 Python 操作搭配 Excel 來說明兩者間的關聯性和應用方式。

大家都用過 Pandas 但 What's Pandas?

在 Python 的開發中,Pandas 是我們的好朋友,他是一個免費的開源資料庫,由 Wes McKinney 在2008年開發的,主要是為了方便和直觀地處理關係型或標籤型數據而製作的。它提供了各種數據結構和操作,用於處理數字數據和時間序列。這個庫是建立在NumPy庫之上的,所以通常使用上會一同進行,Pandas的速度很快,它對用戶來說有很高的性能和生產力,所以目前被廣泛應用在資料科學上。

一個簡單的開始:加權平均 Weighted Average

下面一個簡單的例子說明了為什麼加權平均數可以成為一個有用的統計方法。下面表格顯示了3個不同的顧客為同一產品支付的價格和數量。如果有人問,我們鞋子的平均價格是多少?鞋子價格的簡單平均數將是 (300+200+150=$216.67) 雖然這是一個準確的平均數值,但對於理解我們的平均銷售價格來說,這在直覺上是沒有意義的。
https://ithelp.ithome.com.tw/upload/images/20220923/20140740xWL1FkeuXL.png

如果我們想用平均數來預測收入,這就特別具有挑戰性。但如果看一下這些數字,你可以看到我們以小魚 200 美元的價格出售的鞋子遠遠多於超過 200 美元的。因此 216.67 美元的平均值並不能準確反映市場上的真實平均售價。更有用的是,根據購買數量對這些價格進行加權。這樣的平均能代表所有客戶的購買模式,加權平均數可以這樣計算。

  • (鞋子價格*數量)的總和 / 鞋子的總和
  • (300∗20) + (200∗100) + (150∗225) / (20+100+225)=$173.19

由於我們絕大部分的鞋子都是在200美元到150美元之間銷售,這個數字比簡單的平均數更準確地代表了我們產品的整體平均價格。

利用 Python 內建函數達成簡單算術平均 mean()

加權的概念很簡單,但在 Pandas 中計算起來可能有點困難,因為你需要兩個值:要平均的值(鞋價)和重量(鞋量)所以當你在做複雜的數據分組時,在 Pandas 中會有點不直觀,我們先進行資料的讀取,大家可以注意欄目

sales = pd.read_excel("data.xlsx")
sales.head()

print(sales["Current_Price"].mean())
print(sales["New_Product_Price"].mean())

https://ithelp.ithome.com.tw/upload/images/20220923/20140740yS7THcny0l.png

  • 得到輸出 ["Current_Price"].mean() = 405.41666
  • 得到輸出 ["New_Product_Price"].mean() = 447.08333

利用 simple mean 方式計算加權平均值

在許多不同的情況下使用加權平均數就會變得非常容易。此外,建立這個功能並在各種情況下使用它的過程對於培養你日常的pandas數據操作技能是很有用的。在我們的例子數據中,我們有一堆信息,包括當前的價格和數量,以及預測的新產品價格。如果我們想確定一個簡單的平均值,除了使用 Pandas 內置的 mean() 函數來輕鬆計算外,也可以使用 Simple mean 的方法用價格乘上數量的總和 Sum() 來計算平均數值,得到的結果會跟上方相同。

print((sales["Current_Price"] * sales["Quantity"]).sum() / sales["Quantity"].sum())
print((sales["New_Product_Price"] * sales["Quantity"]).sum() / sales["Quantity"].sum())
  • 輸出 ["Current_Price"]*["Quantity"].sum() / ["Quantity"].sum() = 405.41666
  • 輸出 ["New_Product_Price"]*["Quantity"].sum() / ["Quantity"].sum() = 447.08333

利用 numpy.average 方式計算加權平均值

計算加權平均數還有一種方式是利用 Numpy 函數來計算。

print(np.average(sales["Current_Price"], weights=sales["Quantity"]))
print(np.average(sales["New_Product_Price"], weights=sales["Quantity"]))
  • 輸出 np.average(sales["Current_Price"], weights=sales["Quantity"]) = 405.41666
  • 輸出 np.average(sales["New_Product_Price"], weights=sales["Quantity"]) = 447.08333

謝謝大家的觀看,但歷史的痕跡會持續下去

今年沒組團,每一筆一字矢志不渝的獻身精神都是為歷史書寫下新頁,有空的話可以走走逛逛我們去年寫的文章。


Hi'Jerry均

Jerry 據說是個僅佔人口的 4% 人口的 INFP 理想主義者,總是從最壞的生活中尋找最好的一面,想方設法讓世界更好,內心的火焰和熱情可以光芒四射,畢業後把人生暫停了半年,緩下腳步的同時找了份跨領域工作。偶而散步、愛跟小動物玩耍。曾立過很多志,最近是希望當一個有夢想的人。

謝謝你的時間「訂閱,追蹤和留言」都是陪伴我走過 30 天鐵人賽的精神糧食。


上一篇
Ɖ8-根/ 鐵達尼號的 Python 自訂特徵與異常值處理
下一篇
Ɖ10-榫卯/ 利用分組 Python 方式計算加權平均數
系列文
先別急著學 Python | The Secret to Success in Python30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言