利用Numpy統計成績

2022-01-15 Python百草園
描述

利用附件中的成績數據進行成績統計,根據輸入的同學的名字,輸出其總分和平均分。根據輸入的課程名字,輸出這門課程的平均分、中位數和標準差。(輸出結果中的數值保留2位小數)‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

輸入格式

輸入一個同學的名字‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

輸入一門課程的名字‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

輸出格式

該同學在數組中的位置序號、平均成績‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

該門課程在數組中的位置序號、該課程平均成績、中位數和標準差



題目要求用numpy實現,需要先導入numpy庫,這是一個第三方庫,需要用自行安裝,安裝方法是在命令提示符下輸入:

導入numpy後一般為其設置別名為np:

讀文件可以用Python方法:

def readfile(filename):    with open('成績單數字.csv', 'r', encoding='utf-8') as file:        score = file.read()                       score = score.replace('\n', ',')          score = score.split(',')                      return score                          

也可以使用numpy中的loadtxt()讀文件

def readfile(filename):    score = np.loadtxt(filename, str, delimiter=',', encoding='utf-8')    return score

此時score為一個列表,內容如下:

['姓名', '學號', '高數', '英語', 'python', '物理', 'java', 'C語言', '羅明', '1217106', '95', '85', '96', '88', '78', '90', '金川', '1217116', '85', '86', '90', '70', '88', '85', '戈揚', '1217117', '80', '90', '75', '85', '98', '95', '羅旋', '1217119', '78', '92', '85', '72', '95', '75', '蔣維', '1217127', '99', '88', '65', '80', '85', '75']

將這個列錶轉為numpy的數組,並按文件中數據的格式轉為6行8列:

def arrayshape(score):                             scoreArray = np.array(score)                   scoreArray = scoreArray.reshape(6, 8)              return scoreArray                          

scoreArray 為6行8列的數組,此時成績的數據類型為字符串:

[['姓名' '學號' '高數' '英語' 'python' '物理' 'java' 'C語言']

['羅明' '1217106' '95' '85' '96' '88' '78' '90']

['金川' '1217116' '85' '86' '90' '70' '88' '85']

['戈揚' '1217117' '80' '90' '75' '85' '98' '95']

['羅旋' '1217119' '78' '92' '85' '72' '95' '75']

['蔣維' '1217127' '99' '88' '65' '80' '85' '75']]


根據輸入的學生姓名,返回學生位置序號,可以使用np.argwhere()函數:

indexStudent = np.argwhere(scoreArray == studentName)  

計算學生平均成績,需要根據學生所在位置序號中的行序號,對該行中的成績數據進行統計,計算平均成績。

def studentInfo(studentName):    scoreNum = scoreArray[1:, 2:].astype(int)                  indexStudent = np.argwhere(scoreArray == studentName)      studentRow = indexStudent[0,0]                             meanStudent = np.mean(scoreNum[studentRow - 1])            return indexStudent,round(meanStudent,2)               

scoreNum 是僅包含成績的整數數組,因有標題行存在,統計 時,行號要減1:

[[95 85 96 88 78 90]

[85 86 90 70 88 85]

[80 90 75 85 98 95]

[78 92 85 72 95 75]

[99 88 65 80 85 75]]

課程平均成績的統計與前述方法類似,因為姓名和學號存在,列序號要減2:

def courseInfo(courseName):    scoreNum = scoreArray[1:, 2:].astype(int)                    indexcourse = np.argwhere(scoreArray == courseName)          courseColumn = indexcourse[0, 1]                             meancourse = np.mean(scoreNum[0:, courseColumn - 2])         mediancourse = np.median(scoreNum[0:, courseColumn - 2])     stdcourse = np.std(scoreNum[0:, courseColumn - 2])           return indexcourse,round(meancourse,2),round(mediancourse,2),round(stdcourse,2)

完整參考程序如下:

import numpy as np
def readfile(filename): score = np.loadtxt(filename, str, delimiter=',', encoding='utf-8') return score
def arrayshape(score):     scoreArray = np.array(s).reshape(6, 8)                 return scoreArray
def studentInfo(studentName): scoreNum = scoreArray[1:, 2:].astype(int) indexStudent = np.argwhere(scoreArray == studentName) studentRow = indexStudent[0,0] meanStudent = np.mean(scoreNum[studentRow - 1]) return indexStudent,round(meanStudent,2)
def courseInfo(courseName): scoreNum = scoreArray[1:, 2:].astype(int) indexcourse = np.argwhere(scoreArray == courseName) courseColumn = indexcourse[0, 1] meancourse = np.mean(scoreNum[0:, courseColumn - 2]) mediancourse = np.median(scoreNum[0:, courseColumn - 2]) stdcourse = np.std(scoreNum[0:, courseColumn - 2]) return indexcourse,round(meancourse,2),round(mediancourse,2),round(stdcourse,2)
if __name__ == '__main__': filename = '成績單數字.csv' score = readfile(filename) scoreArray = arrayshape(score) studentName = input() student = studentInfo(studentName)     print(f'{studentName}同學的位置序號為{student[0]}')           print(f'{studentName}同學的平均成績為{student[1]}')        courseName = input() course = courseInfo(courseName) print(f'{courseName}課程位置序號{course[0]}') print(f'{courseName}平均成績為{course[1]}分') print(f'{courseName}成績中位數為{course[2]}分') print(f'{courseName}成績標準差為{course[3]}')

相關焦點

  • Numpy統計計算、數組比較,看這篇就夠了
    01 Numpy的統計計算方法NumPy內置了很多計算方法,其中最重要的統計方法及說明具體如下。sum():計算矩陣元素的和;矩陣的計算結果為一個一維數組,需要指定行或者列。需要注意的是,用於這些統計方法的數值類型必須是int或者float。
  • 利用Excel統計班級成績
    第一步:以某班前10人綜合成績為例。創建Excel工作簿,錄入全班同學各科成績。第二步:統計「個人總成績」。單擊個人總成績下任意單元格,點擊標題欄「公式」按鈕,點擊副標題欄「自動求和」下的「求和」。第三步:統計其餘人成績。 在已錄入公式單元格單擊,滑鼠左鍵按住單元格右下角的正方形小點向下拉,拉到最後一人,即完成了所有人的個人總成績統計。第四步:統計單科平均成績。在各科平均分所在行,任意選中單元格單擊,點擊標題欄「公式」按鈕,點擊副標題欄「自動求和」下的「平均值」。
  • Numpy 使用簡介
    source: https://realpython.com/numpy-tutorial/#hello-numpy-curving-test-grades-tutorial聲明:本篇推送的主要內容翻譯自:https://realpython.com/numpy-tutorial/#hello-numpy-curving-test-grades-tutorial
  • 《利用numpy進行統計分析》
    arr:為需要保存的數組,拓展名.npy為自動添加"""'\nnp.save(file,arr,allow_pickle=True,fix_imports=True)\n file:為要保存的文件名稱,需要指定文件保存的路徑\n arr:為需要保存的數組,拓展名.npy為自動添加\n'import numpy
  • 獨家 | 在機器學習中利用統計插補來處理缺失值(附代碼)
    這是一個非常受歡迎的方法,因為對於訓練集很容易計算出一列的統計值,另外這種方法所獲得的效果也比較理想。在這篇教程中,你會了解到在機器學習領域如何利用統計插補來處理缺失值。缺失值必須被標記為NaN,且可以被用統計方法計算出的列的值來替代。如何載入一份帶有缺失值的CSV文件,用NaN來標識缺失值,展現出每一列的缺失值數量和百分比。
  • Numpy學習打卡task03
    數理統計的推論是在概率論的框架下進行的,概率論涉及隨機現象的分析。標準統計程序涉及收集數據,以測試兩個統計數據集之間的關係,或者測試從理想化模型中提取的數據集和綜合數據。為兩個數據集之間的統計關係提出了一個假設,並將其作為兩個數據集之間不存在關係的理想化零假設的替代選擇。拒絕或反駁零假設是使用統計測試完成的,該測試量化了在給定測試中使用的數據的情況下可以證明零假設為假的意義。
  • NumPy完整剖析篇
    我們可以利用這種數組對整塊數據執行一些數學運算,其語法跟標量元素之間的運算一樣的。ndarray是一個通用的同構數據多維容器,也就是其中的所有元素必須是相同類型的。import numpy as npdata1 = [6, 7.5, 8, 0, 1]arr1 = np.array(data1)print(arr1) print(arr1.shape)  print(arr1.dtype) print(arr1.ndim) 除此之外還可以使用利用numpy提供的函數方便的創建一些特定的數組比如zeros
  • Numpy簡易入門
    numpy 和稀疏矩陣運算包 scipy 配合使用更加方便。1.5.3 布爾型# 存儲學生姓名的數組student_name = np.array(['Tom', 'Lily', 'Jack', 'Rose'])student_namearray(['Tom', 'Lily', 'Jack', 'Rose'], dtype='<U4')# 存儲學生成績的數組
  • Python冬令營-Numpy 使用簡介
    source: https://realpython.com/numpy-tutorial/#hello-numpy-curving-test-grades-tutorial聲明:本篇推送的主要內容翻譯自:https://realpython.com/numpy-tutorial/#hello-numpy-curving-test-grades-tutorial
  • 趣Python [11] - NumPy中常用統計函數梳理
    在使用NumPy進行數據操作時,本文對於常用的統計函數做了詳細的梳理,我們一起看下吧。import numpy as npnp.random.seed(66) # 設置隨機種子arr = np.random.randint(1, 10, size=(2,2))print('創建的單維數組為:', arr)# 常用統計函數print('數組的最大值為:',np.max
  • AI學習準備工作以及numpy學習
    使用《利用python進行數據分析》(第二版)進行學習,僅需要學習資料的小夥伴可直接跳轉至文章最下方。
  • 使用NumPy 讓你的 Python 科學計算更高效
    使用numpy可以使python的計算效率更高。NumPy 數組存儲在一個均勻連續的內存塊中。這樣數組計算遍歷所有的元素,不像列表 list 還需要對內存地址進行查找,從而節省了計算資源。因為數據連續的存儲在內存中,NumPy 直接利用現代 CPU 的矢量化指令計算,加載寄存器中的多個連續浮點數。另外 NumPy 中的矩陣計算可以採用多線程的方式,充分利用多核 CPU 計算資源,大大提升了計算效率。具體的原理我也不大懂,簡單理解就是Numpy的計算效率更高一些。
  • 數據分析-numpy庫快速了解
    NumPy是SciPy、Pandas等數據處理或科學計算庫的基礎2.numpy庫有什麼用numpy用途是很廣的,涉及到數字計算等都可以使用,它的優勢在於底層是C語言開發的數據非常快。庫pip install numpy導入使用import numpy as np4.numpy中的數組對象ndarrayndarray是一個多維數組對象,由兩部分構成: 實際的數據 描述這些數據的元數據(數據維度、數據類型等)創建數組對象支持非常多種的創建方法,有列表數據創建或者
  • Numpy入門詳細教程
    本篇先從numpy開始,對numpy常用的方法進行思維導圖式梳理,多數方法僅拉單列表,部分接口輔以解釋說明及代碼案例。最後分享了個人關於axis和廣播機制的理解。numpy可以很方便的實現基本統計量,而且每種方法均包括對象方法和類方法:max,argmax分別返回最大值和最大值對應索引,可接收一個axis參數,指定軸線的聚合統計。
  • 數值計算模塊numpy
    Numpy(Numerical Python)是科學計算基礎庫,提供大量科學計算相關功能,比如數據統計,隨機數生成等,其提供最核心類型為多維數組類型(ndarray),支持大量的維度數組與矩陣運算,numpy支持向量處理ndarray對象,提高程序運算速度。
  • 數據分析之Numpy入門
    12、數組數值捨入13、數組數值添加14、數組元素去重15、常用數學函數16、常用統計函數17、矩陣運算1、什麼是numpyNumPy(Numerical Python)是Python語言中做科學計算的基礎庫。
  • 從numpy開啟Python數據科學之旅
    本文小編主要從如何利用numpy創建一個數組對象、列印數組、numpy對象的基本運算和線性代數運算、數組的索引與切片、變換數組形狀等方面來介紹numpy。創建一個numpy對象    利用numpy創建數組對象方法很多,但最常用的還是 array方法和 arange方法。
  • Python的數據分析: numpy和pandas入門
    數據分析絕對繞不過的三個包是numpy、scipy和pandas。numpy是Python的數值計算擴展,專門用來處理矩陣,它的運算效率比列表更高效。scipy是基於numpy的科學計算包,包括統計、線性代數等工具。pandas是基於numpy的數據分析工具,能更方便的操作大型數據集。後續的章節主要圍繞pandas講解。
  • python:numpy入門詳細教程
    本篇先從numpy開始,對numpy常用的方法進行思維導圖式梳理,多數方法僅拉單列表,部分接口輔以解釋說明及代碼案例。最後分享了個人關於axis和廣播機制的理解。numpy可以很方便的實現基本統計量,而且每種方法均包括對象方法和類方法:max,argmax分別返回最大值和最大值對應索引,可接收一個axis參數,指定軸線的聚合統計。
  • 深度學習筆記1:利用numpy從零搭建一個神經網絡
    所以,我建議在學習深度學習的路上,從最簡單的感知機開始寫起,一步一步捋清神經網絡的結構,以至於激活函數怎麼寫、採用何種損失函數、前向傳播怎麼寫、後向傳播又怎麼寫,權值如何迭代更新,都需要你自己去實現。若在一開始就直接調用框架,小的 demo 可以跑起來,糊弄一時,看起來就像是鳩摩智在內力未到的情形下強行練習少林寺的 72 絕技,最後走火入魔。