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 plt

def 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类型赋值给 l
        l = list(map(float, line.split()))
        lis.append(l)

    for i in range(10):# 这里在每一个运动员成绩的第一个位置插入运动员自己的编号
        lis[i].insert(0, i + 1) #这里插入数据是为了直观的反应每个运动员的分数
    return lis



def 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_score

def 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_sort

def 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]))

结果:
数据库
在这里插入图片描述
在这里插入图片描述
结果
在这里插入图片描述
在这里插入图片描述

总结

仅供参考!欢迎大家批评指正!!!!

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Champion.XL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值