2021 年电工杯 A 题

声明

竞赛期间,拒绝任何有关电工杯的提问。本篇博客仅介绍数据读取、展示部分,以及一些简单的思路,若涉及到较深的,有影响比赛公平的内容,请自觉举报。

维护竞赛公平,是每个人的责任,希望大家共同努力,取得好成绩。

数据描述

分别展示空载、牵引和制动状态,三相电压、电流数据的统计信息,和图像:

空载状态

统计信息
2021 年电工杯 A 题_第1张图片

数据描述:
2021 年电工杯 A 题_第2张图片
2021 年电工杯 A 题_第3张图片
2021 年电工杯 A 题_第4张图片
2021 年电工杯 A 题_第5张图片
2021 年电工杯 A 题_第6张图片
2021 年电工杯 A 题_第7张图片

牵引

统计信息:

2021 年电工杯 A 题_第8张图片

三相电压和电流图:
2021 年电工杯 A 题_第9张图片
2021 年电工杯 A 题_第10张图片
2021 年电工杯 A 题_第11张图片
2021 年电工杯 A 题_第12张图片
2021 年电工杯 A 题_第13张图片
2021 年电工杯 A 题_第14张图片

制动

统计信息
2021 年电工杯 A 题_第15张图片

三相电压电流:

2021 年电工杯 A 题_第16张图片
2021 年电工杯 A 题_第17张图片
2021 年电工杯 A 题_第18张图片
2021 年电工杯 A 题_第19张图片
2021 年电工杯 A 题_第20张图片
2021 年电工杯 A 题_第21张图片

将数据读取到 Python 中

代码:

# -*- coding: utf-8 -*-
import numpy as np
import pandas as pd
import h5py
import matplotlib.pyplot as plt


def read_data(path):
    '''
    读取附件1的数据
    '''
    f = h5py.File(path, 'r')
    data_columns = list(f.keys())
    print('文件中的变量有: ', data_columns)

    data = pd.DataFrame()
    for col in data_columns[:-1]:
        # f[col][:] 是一个列表中的列表
        data[col] = f[col][:][0]

    fs = f['fs'][:]
    rows = data.shape[0]
    # 采样时间(单位:ms)
    interval = 50*(10**-3)
    t_end = rows*interval
    t = np.arange(0, t_end, interval)
    
    
    return data, t, fs


def describe_data(data, t, fs, verbose=True):
    '''
    描述数据的统计信息
    '''
    cols = data.columns
    print('频率为: ', fs)
    # Python 和 Matlab 的索引机制不一样,所以要 -1.
    for start, end in [(0,4000), (1600000-1, 1604000-1), (4000000-1, 4004000-1)]:
        if end == 4000:
            print('空载状态下: ')
            # 状态变量
            status = 'No-load'
        elif end == 1604000-1:
            print('牵引状态下: ')
            status = 'Traction'
        elif end == 4004000-1:
            print('制动状态下: ')
            status = 'Braking'
            
        data_use = data.iloc[start:end, :]
        stat_info = data_use.describe()
        stat_info.to_excel(f'../附件/中间数据/统计信息_{
       status}.xlsx')
        t_axis = t[start:end]
        print('数据的统计信息如下: \n', stat_info)
        # 画图
        for col in cols:
            fig = plt.figure(figsize=(8,4))
            plt.plot(t_axis, data_use[col])
            plt.ylabel(f'{
       col}({
       status})', fontsize=16)
            plt.xlabel('t/ms', fontsize=16)
            plt.grid()
            file_path = str(col).replace('/', '') + '_' + str(status)
            fig.savefig(f'../图片/{
       file_path}图.png')
            if verbose:
                plt.show() 
    

if __name__ == '__main__':
    path = r'../附件/Data.mat'
    data, t, fs = read_data(path)
    describe_data(data, t, fs)

你可能感兴趣的:(数据挖掘竞赛,电工杯,2021,A题)