当前位置: 首页 > article >正文

2024华为杯研赛C题原创python代码+结果表(1-2问)|全部可运行|精美可视化

2024华为杯研赛C题原创python代码+结果表(1-2问)|全部可运行|精美可视化

以下均为python代码,推荐用anaconda中的notebook当作编译环境

第一问:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

data = pd.read_excel('附件一(训练集).xlsx', sheet_name='材料1')
data
import matplotlib.font_manager as fm

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']  # 使用黑体
plt.rcParams['axes.unicode_minus'] = False  # 解决坐标轴负数显示问题

def plot_magnetic_flux_density(sample_id):
    """根据样本ID绘制磁通密度随时间变化的曲线"""
    sample = data.iloc[sample_id, 4:].values  
    time = np.linspace(0, 1, len(sample))     
    plt.figure(figsize=(8, 4))
    plt.plot(time, sample)
    plt.title(f"磁通密度随时间的变化 - 样本 {sample_id}")
    plt.xlabel("时间 (周期内归一化)")
    plt.ylabel("磁通密度 (T)")
    plt.grid(True)
    plt.show()


plot_magnetic_flux_density(0)  
plot_magnetic_flux_density(50)  
plot_magnetic_flux_density(100) 

from scipy.stats import kurtosis, skew
from scipy.fft import fft

def extract_features(sample):
    """从磁通密度中提取特征"""
    features = {}

     # 确保样本为数值类型
    sample = sample.astype(float)  # 将样本数据转换为浮点数
    sample = sample[~np.isnan(sample)]  # 如果有 NaN 值,则移除
    
    # 时间域特征
    features['mean'] = np.mean(sample)
    features['std'] = np.std(sample)
    features['max'] = np.max(sample)
    features['min'] = np.min(sample)
    features['kurtosis'] = kurtosis(sample)  # 峰度
    features['skew'] = skew(sample)          # 偏度
    
    # 频域特征 (取前几个主要频率成分的绝对值)
    fft_values = np.abs(fft(sample))
    features['fft_1'] = fft_values[1]  # 第一频率成分
    features['fft_2'] = fft_values[2]  # 第二频率成分
    features['fft_3'] = fft_values[3]  # 第三频率成分
    
    return features

# 对所有样本提取特征
features = []
for i in range(len(data)):
    sample = data.iloc[i, 4:].values  # 提取磁通密度数据
    feature_dict = extract_features(sample)
    feature_dict['label'] = data.iloc[i, 3]  # 标签是励磁波形
    features.append(feature_dict)

# 转换为DataFrame
features_df = pd.DataFrame(features)

# 查看提取的特征
features_df.head()

features_df.replace({'label': {'正弦波': 1, '三角波': 2,'梯形波': 3}}, inplace=True)
features_df.head()

这里省略一步关键代码,继续:

# 对所有样本提取特征
test_data_features = []
for i in range(len(test_data)):
    sample = test_data.iloc[i, 4:].values  # 提取磁通密度数据
    test_data_feature_dict = extract_features(sample)
    test_data_features.append(test_data_feature_dict)

# 转换为DataFrame
test_data_features_df = pd.DataFrame(test_data_features)

# 查看提取的特征
test_data_features_df.head()

y_pred = gbdt.predict(test_data_features_df)
y_pred

然后:

unique, counts = np.unique(y_pred, return_counts=True)
waveform_counts = dict(zip(unique, counts))

print("三种波形的数量统计:")
print(f"正弦波 (1) 数量: {waveform_counts.get(1, 0)}")
print(f"三角波 (2) 数量: {waveform_counts.get(2, 0)}")
print(f"梯形波 (3) 数量: {waveform_counts.get(3, 0)}")

以上仅为部分。其中更详细的思路、各题目思路、代码、讲解视频、成品论文及其他相关内容,可以看下面的群名片哦!


http://www.kler.cn/a/313528.html

相关文章:

  • MySQL数据库:SQL语言入门 【下】(学习笔记)
  • 尽量通俗易懂地概述.Net U nity跨语言/跨平台相关知识
  • 轻松上手:使用Docker部署Java服务
  • Kubernetes在容器编排中的应用
  • adb shell常用命令
  • Hadoop(环境搭建篇)
  • openstack中的rabbitmq
  • 清理C盘缓存,电脑缓存清理怎么一键删除,操作简单的教程
  • E2VPT: An Effective and Efficient Approach for Visual Prompt Tuning
  • 系统架构设计师教程 第5章 5.1 软件工程 笔记
  • 面向过程和面向对象思想
  • Linux:开源世界的璀璨明珠
  • 深度学习-13-小语言模型之SmolLM的使用
  • 【Linux 从基础到进阶】OpenStack 私有云平台搭建
  • SpringBoot使用@Scheduled注解实现定时任务
  • MavenMyBatis
  • 0基础跟德姆(dom)一起学AI 数据处理和统计分析04-Panda入门
  • 【操作系统】01.冯·诺伊曼体系结构
  • Flask-WTF的使用
  • 【C++】透析string类
  • 力扣300-最长递增子序列(Java详细题解)
  • 软考无损连接判断
  • Apache Airflow如何使用
  • Python编码系列—Python策略模式:灵活应对变化的算法策略
  • Java 在 GIS 领域的学习路线?
  • 硬件工程师笔试面试——开关