A 連接數據庫data.db,讀取其中表score中的數據到列表; B 通過numpy.std(a, axis=None),計算每個裁判員的標準差,輸出標準差最大的前3個裁判員的序號; C 利用matplotlib…pyplot中的polt和scatter的方法繪制曲線圖和散點圖在同一坐標內。 代碼:
#使用sqlite3模塊鏈接和操作SQLite數據庫#步驟一:導入相應的數據庫模塊和畫圖軟件模塊import sqlite3,numpy
import matplotlib.pyplot as pltdefconnection_database():#連接數據庫函數并插入數據#步驟一:導入相應的數據庫模塊# 步驟二:建立數據庫連接,返回Connection對象 這里我創建的數據庫叫做db1.db#1.如果數據庫存在,則訪問數據可 2.數據庫如果不存在,則在對應的路徑下,建立一個名叫db1.db數據庫#這里連接數據庫時,數據庫還沒有創建,則創建數據庫con = sqlite3.connect(r"路徑/數據庫名稱")# 步驟三:直接使用連接對象con執行connection對象中的方法#創建一個score1表 sportman_ID 表示 運動員序號 judgei 表示 裁判序號con.execute("create table score1(sportman_ID primary key ,judge1,judge2,judge3,judge4,judge5,judge6,judge7,judge8,judge9,judge10,judge11,judge12)")#這返回游標cur 和 連接對象con#調用數據處理函數lis = processing_data()# 這里在score1表中插入多行數據 sportman_ID 表示 運動員序號 judgei 表示 裁判序號con.executemany("insert into score1(sportman_ID,judge1,judge2,judge3,judge4,judge5,judge6,judge7,judge8,judge9,judge10,judge11,judge12) values (?,?,?,?,?,?,?,?,?,?,?,?,?)",lis)# 提交con.commit()defprocessing_data():#讀取文件并處理數據函數# 讀入文件f =open("dafen.txt",'r')# 將文件存儲在lis列表中lis =[]for line in f:# 使用map函數將每一行分數中的每個分數轉化為float類型,然后在轉化成list類型賦值給 ll =list(map(float, line.split()))lis.append(l)for i inrange(10):# 這里在每一個運動員成績的第一個位置插入運動員自己的編號lis[i].insert(0, i +1)#這里插入數據是為了直觀的反應每個運動員的分數return lisdefread_database():#讀取數據庫里面的數據 函數#這里連接數據庫時,db1.db數據庫已經建立了,則直接打開數據庫con = sqlite3.connect(r"路徑/數據庫名稱")#查詢數據返回 存儲在 lis1列表中中lis1=list(con.execute("select sportman_ID,judge1,judge2,judge3,judge4,judge5,judge6,judge7,judge8,judge9,judge10,judge11,judge12 from score1 "))#建立一個judge_score二維數組用來裁判員打的分數judge_score =[[0]*10for i inrange(12)]#原始數據中,同一個裁判對不同運動員打的分數是一列一列的#這兩個for循環是為了將 一列的分數 轉化為 一行的分數,#做這一步是為了下面直接調用numpy里面的求標準差的函數for i inrange(12):# 裁判for j inrange(10):# 分數judge_score[i][j]= lis1[j][i +1]#返回數據return judge_scoredefstandard_deviation():#求標準差函數#調用 讀取數據庫里面的數據 函數judge = read_database()# 存放每個裁判的標準差和裁判的序號standard_sort =[]# 列表中的元素時元組類型 (a,b) a是裁判序號 b是裁判的標準差 ,這個為了排序standard_plot =[]# 這個列表是為了畫圖用for i inrange(10):standard_plot.append(round(numpy.std(judge[i], ddof=1),3))standard_sort.append((i,round(numpy.std(judge[i], ddof=1),3)))#調用sort 函數 降序排列standard_sort.sort(key=lambda x:x[1],reverse =True)return standard_plot,standard_sortdefplot():#畫圖函數# 解決坐標軸中文亂碼問題standard_plot,standard_sort = standard_deviation()for i inrange(10):print("第{0:3}名 {1:4}號裁判 標準差:{2:5.2f}".format(i+1,standard_sort[i][0]+1,standard_sort[i][1]))xlist =[]# x 軸坐標的取值for i inrange(1,11):xlist.append(i)# 解決坐標軸中文亂碼問題plt.rcParams['font.family']='sans-serif'plt.rcParams['font.sans-serif']='SimHei'# 設置坐標軸標簽plt.xlabel("裁判序號")plt.ylabel("標準差")plt.plot(xlist, standard_plot)plt.scatter(xlist, standard_plot)plt.show()if __name__=="__main__":connection_database()read_database()standard_deviation()plot()
con.executemany("insert into score1(sportman_ID,judge1,judge2,judge3,judge4,judge5,judge6,judge7,judge8,judge9,judge10,judge11,judge12) values (?,?,?,?,?,?,?,?,?,?,?,?,?)",lis)