iT邦幫忙

2024 iThome 鐵人賽

DAY 22
0
Python

30天Python資料分析挑戰:從基礎到視覺化系列 第 22

Day 22: 資料排序與排名

  • 分享至 

  • xImage
  •  

Day 22: 資料排序與排名

以下文章,有任何問題。都歡迎私訊我的IG
點我私訊
在資料分析過程中,排序和排名是非常常見的操作。通過對資料進行排序,我們可以輕鬆地找出最大值、最小值或前幾名的資料。建立排名表則可以幫助我們快速了解每個資料點在整體中的相對位置。今天,我們將學習如何對資料進行排序並建立排名表,以便進行比較分析。
請在之前同一個資料夾,建立一個名稱叫做sort的檔案
並先執行下段程式碼

from google.colab import drive
drive.mount('/content/drive/')
import pandas as pd
iris_df=pd.read_csv('/content/drive/MyDrive/iris/iris_dataset.csv')

https://ithelp.ithome.com.tw/upload/images/20241006/20140380vvDQQAtHM9.jpg

1. 資料排序

Pandas 提供了 sort_values()sort_index() 函數來對資料進行排序:

  • sort_values():根據某個或多個欄位的值進行排序。
  • sort_index():根據索引進行排序。

1.1 根據單個欄位進行排序

我們可以使用 sort_values() 根據某個欄位進行升序或降序排序。

# 根據花瓣長度進行升序排序
sorted_by_petal_length = iris_df.sort_values(by='petal length (cm)', ascending=True)
print("Results sorted by petal length in ascending order:")
print(sorted_by_petal_length.head())

https://ithelp.ithome.com.tw/upload/images/20241006/20140380wqOyOymnVN.jpg
這段程式碼將資料集根據花瓣長度進行升序排序,並顯示前幾筆資料。

1.2 根據多個欄位進行排序

我們也可以根據多個欄位進行排序,例如先根據花卉種類進行排序,再根據花瓣長度排序。

# 根據花卉種類和花萼寬度進行排序
sorted_by_species_and_sepal_width = iris_df.sort_values(by=['target_0', 'sepal width (cm)'], ascending=[True, False])
print("根據花卉種類和花萼寬度進行排序的結果:")
print(sorted_by_species_and_sepal_width.head())

https://ithelp.ithome.com.tw/upload/images/20241006/20140380CX0Mj5PReL.jpg
這段程式碼會先根據花卉種類升序排序,再根據花萼寬度降序排序。

1.3 根據索引進行排序

有時我們需要根據索引來對資料進行排序,例如當資料順序被打亂時,可以使用 sort_index() 將其恢復。

# 根據索引進行排序
sorted_by_index = iris_df.sort_index(ascending=True)
print("Results sorted by index in ascending order:")
print(sorted_by_index.head())

https://ithelp.ithome.com.tw/upload/images/20241006/20140380iZ5eQ1IjYu.jpg
這段程式碼會將資料集根據索引進行升序排序。

2. 資料排名

Pandas 提供了 rank() 函數來對資料進行排名。排名可以用來找出某個資料點在整個資料集中的相對位置,例如前幾名或倒數第幾名。

2.1 基本排名操作

我們可以使用 rank() 函數對資料進行排名,並使用 ascending 參數設置升序或降序。

# 根據花萼長度進行排名
iris_df['sepal length rank'] = iris_df['sepal length (cm)'].rank(ascending=False)
print("Results ranked by sepal length (in descending order):")
print(iris_df[['sepal length (cm)', 'sepal length rank']].head())

https://ithelp.ithome.com.tw/upload/images/20241006/20140380pO750ERdVm.jpg
這段程式碼會根據花萼長度進行排名,並將排名結果儲存在新的欄位 sepal length rank 中。

2.2 分組排名

有時我們希望在不同的分組中進行排名,例如每個花卉種類內的花瓣長度排名。我們可以使用 groupby() 來實現分組排名。

# 在每個花卉種類中根據花瓣長度進行排名
iris_df['petal length group rank'] = iris_df.groupby(['target'])['petal length (cm)'].rank(ascending=False)
print("Results ranked by petal length within each flower species:")
print(iris_df[['target', 'petal length (cm)', 'petal length group rank']].head(10))

https://ithelp.ithome.com.tw/upload/images/20241006/20140380T4aHKzSh5G.jpg
這段程式碼會在每個花卉種類內根據花瓣長度進行排名,幫助我們了解每個花卉在其種類內的相對位置。

2.3 不同排名方法的比較

rank() 函數支持多種排名方法,例如 averageminmax 等。我們可以通過 method 參數來設置不同的排名方法。

# 使用不同的排名方法進行排名
iris_df['rank_average'] = iris_df['sepal width (cm)'].rank(method='average')
iris_df['rank_min'] = iris_df['sepal width (cm)'].rank(method='min')
iris_df['rank_max'] = iris_df['sepal width (cm)'].rank(method='max')

print("使用不同排名方法的結果:")
print(iris_df[['sepal width (cm)', 'rank_average', 'rank_min', 'rank_max']].head())

https://ithelp.ithome.com.tw/upload/images/20241006/20140380eRMqzQOr0o.jpg
這段程式碼會展示 average(平均值排名)、min(最小排名)和 max(最大排名)三種排名方法的差異。

3. 使用 nlargest()nsmallest() 找出最大值和最小值

有時我們希望快速找到資料集中的前幾名最大值或最小值,可以使用 nlargest()nsmallest() 函數來實現。

# 找出花萼長度最大的五筆資料
top5_sepal_length = iris_df.nlargest(5, 'sepal length (cm)')
print("Top 5 records with the largest sepal length:")
print(top5_sepal_length[['sepal length (cm)', 'sepal length rank']])

# 找出花萼寬度最小的三筆資料
bottom3_sepal_width = iris_df.nsmallest(3, 'sepal width (cm)')
print("Bottom 3 records with the smallest sepal width:")
print(bottom3_sepal_width[['sepal width (cm)']])

https://ithelp.ithome.com.tw/upload/images/20241006/20140380iiHnm9POy8.jpg
這段程式碼會找出花萼長度最大的五筆資料和花萼寬度最小的三筆資料,方便我們進行快速比較分析。

4. 小結

今天我們學習了如何對資料進行排序與排名,包括:

  1. 使用 sort_values() 進行單個或多個欄位的排序。
  2. 使用 rank() 函數建立資料的排名表。
  3. 在分組中進行排名,了解不同類別內的相對位置。
  4. 使用 nlargest()nsmallest() 找出資料集中的最大值和最小值。

排序和排名是資料分析中非常重要的操作,它們可以幫助我們更好地理解資料的分佈情況,並進行有效的比較分析。接下來,我們將學習如何使用餅圖來展示資料的比例分佈。


上一篇
Day 21: 面積圖 (Area Plot) 的應用與實作
下一篇
Day 23: 餅圖 (Pie Chart) 的應用與實作
系列文
30天Python資料分析挑戰:從基礎到視覺化30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言