日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python实验数据处理

發布時間:2023/12/14 python 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python实验数据处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 在sqlite中新建一個數據庫data.db 2 在data.db中新建表score 3 將dafen.txt中數據輸入到score中 4 建立一個python文件statistic.py,其具有以下功能:

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 pltdef connection_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()def processing_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 in range(10):# 這里在每一個運動員成績的第一個位置插入運動員自己的編號lis[i].insert(0, i + 1) #這里插入數據是為了直觀的反應每個運動員的分數return lisdef read_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] * 10 for i in range(12)]#原始數據中,同一個裁判對不同運動員打的分數是一列一列的#這兩個for循環是為了將 一列的分數 轉化為 一行的分數,#做這一步是為了下面直接調用numpy里面的求標準差的函數for i in range(12): # 裁判for j in range(10): # 分數judge_score[i][j] = lis1[j][i + 1]#返回數據return judge_scoredef standard_deviation(): #求標準差函數#調用 讀取數據庫里面的數據 函數judge = read_database()# 存放每個裁判的標準差和裁判的序號standard_sort = [] # 列表中的元素時元組類型 (a,b) a是裁判序號 b是裁判的標準差 ,這個為了排序standard_plot = [] # 這個列表是為了畫圖用for i in range(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_sortdef plot():#畫圖函數# 解決坐標軸中文亂碼問題standard_plot,standard_sort = standard_deviation()for i in range(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 in range(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 = sqlite3.connect(r"路徑/數據庫名稱")

在數據庫中插入多行數據時,這里注意一點,自己在建立數據庫時,創建表的時候,自己創建了多少個字段名,values后面就要加多少個問好。我在創建字段的時候一共創建了13個字段,所以我后面一共有13個問號。

con.executemany("insert into score1(sportman_ID,judge1,judge2,judge3,judge4,judge5,judge6,judge7,judge8,judge9,judge10,judge11,judge12) values (?,?,?,?,?,?,?,?,?,?,?,?,?)",lis)

畫圖時,在給坐標軸添加標簽時,要注意中文亂碼的問題

# 解決坐標軸中文亂碼問題plt.rcParams['font.family'] = 'sans-serif'plt.rcParams['font.sans-serif'] = 'SimHei'# 設置坐標軸標簽plt.xlabel("裁判序號")plt.ylabel("標準差")

這段代碼我是直接輸出了所有裁判標準差的排序

for i in range(10):print("第{0:3}名 {1:4}號裁判 標準差:{2:5.2f}".format(i+1,standard_sort[i][0]+1,standard_sort[i][1]))

結果:
數據庫


結果

總結

僅供參考!歡迎大家批評指正!!!!

總結

以上是生活随笔為你收集整理的Python实验数据处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。