使用Numpy統計全班的同學的成績

使用Numpy實現班級同學成績的統計

假設現在有如下的數據:

姓名/學科 語文 英語 數學
張飛 66 65 30
關羽 95 85 98
趙雲 93 92 96
黃忠 90 88 77
典韋 80 90 90
  • 統計全班的成績:在語文、數學、英語等中的平均成績、最小成績、最大成績、方差、標準差。然後將這些人的總成績排序輸出:
import numpy as np
# 1、先定義一個人物類
persontype = np.dtype({
    'names':['name','chinese','english','math'],
    'formats':['S32','i','i','i']
})
# 2、將數據加載
peoples = np.array([("ZhangFei",66,65,30),("GuanYu",95,85,98),
                    ("ZhaoYun",93,92,96),("HuangZhong",90,88,77),
                    ("DianWei",80,90,90)],dtype=persontype)
# 3、統計單科成績                 
chineses = peoples[:]['chinese']
englishs = peoples[:]['english']
maths = peoples[:]['math']
# 平均成績
print(np.mean(chineses))
print(np.mean(englishs))
print(np.mean(maths))
# 輸出最小值和最大值
print(np.amin(chineses))
print(np.amin(englishs))
print(np.amin(maths))
print(np.amax(chineses))
print(np.amax(englishs))
print(np.amax(maths))
# 計算方差和標準差
stdchinese = np.array(chineses)
print(np.std(stdchinese))
print(np.var(stdchinese))
stdenglish = np.array(englishs)
print(np.std(stdenglish))
print(np.var(stdenglish))
stdmath = np.array(maths)
print(np.std(stdmath))
print(np.var(stdmath))
# 排序
# ①所有成績
a = np.array([chineses,englishs,maths])
print(np.sort(a))
# ②按照三科成績之和降序排列
#用sorted函數進行排序
ranking = sorted(peoples,key=lambda x:x[1]+x[2]+x[3], reverse=True)
print(ranking)

注意:定義的結構數組中的S32代表的是什麼意思?

就是結構數組中:

persontype = np.dtype({
    'names':['name','chinese','english','math'],
    'formats':['S32','i','i','i']
})

實際上使用的是Numpy的字符編碼來表示數據類型的定義,比如i代表的是整數,f代表的是單精度浮點數,S代表的是字符串,S32代表的是32個字符的字符串。

參見下表:

數據類型 字符
整數 i
單精度浮點數 f
雙精度浮點數 d
布爾值 b
字符串 S(大寫)
Unicode U(大寫)

假如數據中使用了中文,數學成績中含有單精度浮點數,可以把數據類型設置爲U32,i改成f,如下代碼所示:

import numpy as np
persontype = np.dtype({
    'names':['name','chinese','english','math'],
    'formats':['U32','i','i','f']
})
peoples = np.array([("張飛",66,65,30.5),("關羽",95,85,98.5),
                    ("趙雲",93,92,96.5),("黃忠",90,88,77),
                    ("典韋",80,90,90.5)],dtype=persontype)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章