医学数据分析实训 项目九 糖尿病风险预测

news2024/9/20 20:32:43

文章目录

  • 综合实践二 糖尿病遗传风险预测
    • 一、分析目标
    • 二、实现步骤
    • 三、数据准备
    • 四、特征工程
    • 五、模型构建
    • 六、性能度量
    • 七、提交要求
  • 综合实践任务二 糖尿病遗传风险预测代码
      • (一)数据准备
      • (二)特征工程
      • (三)模型构建
      • (四)性能度量

综合实践二 糖尿病遗传风险预测

本实践项目的数据集包含“train.csv”和“test.csv”两部分,部分特征名已经做了脱敏处理。训练集中包含年龄、性别、各项体检指标及目标血糖值。测试集相对于训练集缺少了对应的血糖值。训练集中包含 42个数据特征,其中 37 个为医学指标特征,数据集中的第一行为特征名称,其余每行代表一个个体。部分特征内容在部分人群中有缺失。

请将以上体检数据集进行预处理,并在处理后的数据集的基础上,结合交叉验证,运用一种基于决策树算法的梯度提升框架的 LightGBM 算法对训练集进行训练,建立预测模型,实现血糖预测功能。

一、分析目标

结合体检数据集,实现以下分析目标:

  1. 以血糖值为目标建立模型,实现血糖预测功能;
  2. 预测糖尿病遗传风险并对预测结果进行分析;

二、实现步骤

  1. 对数据集“train.csv”和“test.csv”中的数据进行数据探索、数据清洗、特征工程等操作;
  2. 结合交叉验证和 LightGBM 算法构建模型;
  3. 对模型结果进行分析,并进行模型评价;

三、数据准备

  1. 对数据集进行描述性统计分析;
  2. 对数据集“train.csv”和“test.csv”中的缺失值、重复值、异常值,以及格式与内容不规范的数据进行数据清洗;
  3. 结合数据集“train.csv”中的数据,分别绘制图形分析性别、年龄与血糖值的关系;
  4. 计算相关系数,得到数据集“train.csv”中每个指标与血糖值的相关系数,从而分析各特征与血糖值的相关性;

四、特征工程

  1. 结合统计分析结果和特征相关性,筛选数据集“train.csv”和“test.csv”中的特征;
  2. 将性别特征值转化为数值型数据;
  3. 根据年龄和血糖值之间的关系,筛选出高血糖分布的年龄段数据;

五、模型构建

  1. 利用 k 折交叉验证 model_selection.KFold() 将原始数据集 “train.csv” 划分为训练集和测试集两部分;
  2. 使用每次划分的训练集对 LightGBM 分类器进行训练,使用测试集评估 LightGBM 模型;
  3. 使用 LightGBM 模型预测测试集中的血糖值;

六、性能度量

  1. 使用多种评价指标对模型进行评价;
  2. 根据评价效果对模型进行优化;
  3. 绘制折线图分析血糖的真实值与预测值;
  4. 筛选出预测数据中血糖值在正常范围内(3.9~6.1 毫摩尔 / 升)的数据;
  5. 获得高血糖风险个体信息的数据;

七、提交要求

  1. 提交实现本实践任务的所有代码(可执行,非 .doc、.txt 等文本格式);
  2. 提交综合实践任务书(word格式),包括小组成员分工、分析目的、数据预处理、算法介绍、结果分析等内容;
  3. 提交预处理之后的数据集,以及所有可视化图表(命名规范,.jpg 格式);

综合实践任务二 糖尿病遗传风险预测代码

(一)数据准备

# 导入本案例所需的 Python 包;
import matplotlib.pyplot as plt

# 设置显示中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']  # 指定默认字体
# 设置正常显示符号
plt.rcParams['axes.unicode_minus'] = False
import seaborn as sns
import pandas as pd

# 读取数据集;
datatest = pd.read_csv('data/test.csv', encoding='gbk')
datatrain = pd.read_csv('data/train.csv', encoding='gbk')

print(datatest.head())
print(datatrain.head())

# 1. 对数据集进行描述性统计分析;

# 对test数据集进行描述性统计分析
print("test数据集的描述性统计分析:")
print(datatest.describe())
print(datatest.info())
print(datatest.shape)

# 对train数据集进行描述性统计分析
print("train数据集的描述性统计分析:")
print(datatrain.describe())
print(datatrain.info())
print(datatrain.shape)

发现要对性别,为数值型数据,日期格式化

#2. 对数据集“train.csv”和“test.csv”中的缺失值、重复值、异常值,以及格式与内容不规范的数据进行数据清洗;
import numpy as np
from scipy import stats

# 检查缺失值
missing_train = datatrain.isnull().sum()
missing_test = datatest.isnull().sum()

print("训练集中缺失值:")
print(missing_train[missing_train > 0])
print("\n测试集中缺失值:")
print(missing_test[missing_test > 0])

# 处理缺失值
datatrain.dropna(inplace=True)  # 删除缺失值较多的行
datatest.dropna(subset=['性别'], inplace=True)  # 确保性别列不为空

# 内容不规范的数据进行数据清
# 转换性别特征为数值型
datatrain['性别'] = datatrain['性别'].map({'男': 1, '女': 0})
datatest['性别'] = datatest['性别'].map({'男': 1, '女': 0})

# 清洗日期列:将其转换为 datetime 格式
datatrain['体检日期'] = pd.to_datetime(datatrain['体检日期'], errors='coerce', dayfirst=True)
datatest['体检日期'] = pd.to_datetime(datatest['体检日期'], errors='coerce', dayfirst=True)

# 将日期转换为时间戳(单位为秒)
datatrain['体检日期'] = (datatrain['体检日期'].astype(np.int64) // 10 ** 9)  # 转换为秒
datatest['体检日期'] = (datatest['体检日期'].astype(np.int64) // 10 ** 9)  # 转换为秒

# 处理异常值
numeric_cols = datatrain.select_dtypes(include=[np.number]).columns
z_scores_train = stats.zscore(datatrain[numeric_cols])
abs_z_scores_train = np.abs(z_scores_train)
datatrain = datatrain[(abs_z_scores_train < 3).all(axis=1)]

# 检查特征中是否有NaN
print("数据集中NaN数量:")
print(datatrain[['年龄', '血糖']].isnull().sum())

# 打印前几行数据以检查
print("训练集前几行数据:")
print(datatrain[['年龄', '血糖']].head())

# 保存数据
datatrain.to_csv('data/train_clean.csv', index=False)
datatest.to_csv('data/test_clean.csv', index=False)
训练集中缺失值:
*r-谷氨酰基转换酶     1406
*丙氨酸氨基转换酶      1406
*天门冬氨酸氨基转换酶    1406
*总蛋白           1406
*球蛋白           1406
*碱性磷酸酶         1406
中性粒细胞%           21
乙肝e抗体          5110
乙肝e抗原          5110
乙肝核心抗体         5110
乙肝表面抗体         5110
乙肝表面抗原         5110
低密度脂蛋白胆固醇      1395
单核细胞%            21
嗜碱细胞%            21
嗜酸细胞%            21
尿素             1572
尿酸             1572
总胆固醇           1395
淋巴细胞%            21
甘油三酯           1395
白球比例           1406
白细胞计数            21
白蛋白            1406
红细胞体积分布宽度        21
红细胞压积            21
红细胞平均体积          21
红细胞平均血红蛋白浓度      21
红细胞平均血红蛋白量       21
红细胞计数            21
肌酐             1572
血小板体积分布宽度        29
血小板平均体积          29
血小板比积            29
血小板计数            21
血红蛋白             21
高密度脂蛋白胆固醇      1395
dtype: int64

测试集中缺失值:
*天门冬氨酸氨基转换酶    185
*丙氨酸氨基转换酶      185
*碱性磷酸酶         185
*r-谷氨酰基转换酶     185
*总蛋白           185
白蛋白            185
*球蛋白           185
白球比例           185
甘油三酯           176
总胆固醇           176
高密度脂蛋白胆固醇      176
低密度脂蛋白胆固醇      176
尿素             194
肌酐             194
尿酸             194
乙肝表面抗原         831
乙肝表面抗体         831
乙肝e抗原          831
乙肝e抗体          831
乙肝核心抗体         831
白细胞计数            5
红细胞计数            5
血红蛋白             5
红细胞压积            5
红细胞平均体积          5
红细胞平均血红蛋白量       5
红细胞平均血红蛋白浓度      5
红细胞体积分布宽度        5
血小板计数            5
血小板平均体积          6
血小板体积分布宽度        6
血小板比积            6
中性粒细胞%           5
淋巴细胞%            5
单核细胞%            5
嗜酸细胞%            5
嗜碱细胞%            5
dtype: int64
数据集中NaN数量:
年龄    0
血糖    0
dtype: int64
#3. 结合数据集“train.csv”中的数据,分别绘制图形分析性别、年龄与血糖的关系;
import os

# 绘制性别与血糖值的关系
plt.figure(figsize=(8, 6))
sns.boxplot(x='性别', y='血糖', data=datatrain)
plt.title('性别与血糖的关系')
plt.xlabel('性别 (0: 女, 1: 男)')
plt.ylabel('血糖')
plt.xticks([0, 1], ['女', '男'])
# 保存图片
if not os.path.exists('output'):
    os.makedirs('output')
plt.savefig('output/性别与血糖的关系.png')
plt.show()

# 绘制年龄与血糖值的关系
plt.figure(figsize=(8, 6))
sns.scatterplot(x='年龄', y='血糖', data=datatrain)
plt.title('年龄与血糖的关系')
plt.xlabel('年龄')
plt.ylabel('血糖')
plt.savefig('output/年龄与血糖的关系.png')
plt.show()


在这里插入图片描述
在这里插入图片描述

# 4. 计算相关系数,得到数据集“train.csv”中每个指标与血糖值的相关系数,从而分析各特征与血糖值的相关性;
# 计算相关系数
correlation_matrix = datatrain.corr()

# 获取血糖值与其他特征的相关系数
glucose_correlation = correlation_matrix['血糖'].sort_values(ascending=False)

# 打印相关系数
print("各特征与血糖的相关系数:")
print(glucose_correlation)

# 可视化相关系数热图(这个可以不要,做图后,发现没有必要使用热力图)
plt.figure(figsize=(12, 10))  # 调整图形大小
sns.heatmap(correlation_matrix, annot=False, fmt='.2f', cmap='coolwarm',
            linewidths=0.5, linecolor='gray', cbar_kws={'shrink': 0.8})

# 设置坐标轴标签的旋转角度
plt.xticks(rotation=45, ha='right', fontsize=10)
plt.yticks(fontsize=10)

# 设置标题
plt.title('相关系数热图', fontsize=16)

plt.tight_layout()
plt.show()

在这里插入图片描述

(二)特征工程

#1. 结合统计分析结果和特征相关性,筛选数据集“train.csv”和“test.csv”中的特征;
# 获取与血糖相关的特征
correlation_with_glucose = correlation_matrix['血糖'].sort_values(ascending=False)
print("与血糖的相关系数:")
print(correlation_with_glucose)
with open('output/与血糖的相关系数.txt', 'a') as f:
    f.write("与血糖的相关系数:\n")
    f.write(str(correlation_with_glucose) + "\n")

# 筛选出相关系数绝对值大于某个阈值的特征
threshold = 0.1  # 可以调整
selected_features = correlation_with_glucose[abs(correlation_with_glucose) > threshold].index.tolist()

# 确保血糖是最后一个特征
if '血糖' in selected_features:
    selected_features.remove('血糖')
selected_features.append('血糖')
print(f"选择的特征: {selected_features}")

# 筛选训练集和测试集的特征
X_train = datatrain[selected_features]
X_test = datatest[selected_features[:-1]]  # 不包括目标变量

# 打印选择的特征集信息
print("筛选后的训练集特征:")
print(X_train.head())
print("\n筛选后的测试集特征:")
print(X_test.head())

#2. 将性别特征值转化为数值型数据;
# 已经转化为数值型数据,只需要查看转换后的性别数据
print("\n训练集中性别特征转化后的数据:")
print(datatrain[selected_features][['性别']].head())

print("\n测试集中性别特征转化后的数据:")
print(datatrain[selected_features][['性别']].head())
#3. 根据年龄和血糖之间的关系,筛选出高血糖分布的年龄段数据;
# 定义高血糖标准
high_glucose_threshold = 6.1  # 血糖值大于 6.1 mmol/L 视为高血糖

# 筛选高血糖分布的年龄段数据
high_glucose_data = datatrain[datatrain['血糖'] > high_glucose_threshold]

# 打印高血糖数据及其年龄
print("高血糖记录的年龄段数据:")
print(high_glucose_data[['年龄', '血糖']])

# 分析年龄分布,可以绘制直方图
# 绘制高血糖年龄分布图
plt.figure(figsize=(10, 6))

# 折线图和直方图分开设置颜色和透明度
sns.histplot(high_glucose_data['年龄'], bins=10, kde=True, color='skyblue', alpha=0.5)

plt.title('高血糖分布的年龄段', fontsize=14)
plt.xlabel('年龄', fontsize=12)
plt.ylabel('频率', fontsize=12)

# 显示网格
plt.grid(True, linestyle='--', alpha=0.6)
plt.savefig('output/高血糖分布的年龄段.png')

plt.show()


在这里插入图片描述

(三)模型构建

  1. 利用 k 折交叉验证 model_selection.KFold()将原始数据集“train.csv”划分为训练集和测试集两部分;
  2. 使用每次划分的训练集对 LightGBM 分类器进行训练,使用测试集评估LightGBM 模型;
  3. 使用 LightGBM 模型预测测试集中的血糖值;
from sklearn.model_selection import KFold
import lightgbm as lgb
from sklearn.metrics import mean_squared_error, r2_score
# 设置参数
n_splits = 5  # k 折交叉验证的折数
kf = KFold(n_splits=n_splits, shuffle=True, random_state=42)
# 准备特征和目标变量
X = X_train.drop(columns=['血糖']) # 不包括目标变量 血糖
y = X_train['血糖']

# 初始化 LightGBM 模型
model = lgb.LGBMRegressor()
# 存储每次交叉验证的结果
results = []
# 进行 k 折交叉验证
for train_index, test_index in kf.split(X):
    X_train_cv, X_test_cv = X.iloc[train_index], X.iloc[test_index]
    y_train_cv, y_test_cv = y.iloc[train_index], y.iloc[test_index]
    # 训练模型
    model.fit(X_train_cv, y_train_cv)
    # 预测
    y_pred = model.predict(X_test_cv)
    # 计算评价指标
    mse = mean_squared_error(y_test_cv, y_pred)
    r2 = r2_score(y_test_cv, y_pred)
    results.append((mse, r2))
# 输出平均结果
average_mse = np.mean([result[0] for result in results])
average_r2 = np.mean([result[1] for result in results])
print(f"平均均方误差: {average_mse:.4f}")
print(f"平均 R^2 值: {average_r2:.4f}")

# 使用训练好的模型预测测试集
predictions = model.predict(X_test)

# 将预测结果保存
datatest['预测血糖'] = predictions
datatest.to_csv('结果分析/LightGBM模型预测测试集中的血糖值.csv', index=False)

平均均方误差: 0.7351
平均 R^2 值: 0.1289
模型训练的结果显示平均均方误差为0.7351,而平均R²值为0.1289。这表明模型的性能并不理想,R²值接近于0,意味着模型对数据的解释能力较弱。

(四)性能度量

1.使用多种评价指标对模型进行评价;
2.根据评价效果对模型进行优化;
3.绘制折线图分析血糖的真实值与预测值;
4.筛选出预测数据中血糖值在正常范围内(3.9~6.1 毫摩尔/升)的数据;
5.获得高血糖风险个体信息的数据;

# 1. 使用多种评价指标对模型进行评价

# 导入必要的库
from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score
import matplotlib.pyplot as plt
import seaborn as sns

# 1. 使用多种评价指标对模型进行评价
print(f"平均均方误差: {average_mse:.4f}")
print(f"平均 R^2 值: {average_r2:.4f}")

平均均方误差: 0.7351
平均 R^2 值: 0.1289
结果很差,没必要优化了,这个项目写的不好

# 3. 绘制折线图分析血糖的真实值与预测值
plt.figure(figsize=(10, 6))
plt.plot(y_test_cv.values, label='真实值', marker='o')
plt.plot(y_pred, label='预测值', marker='x')
plt.title('真实值与预测值对比')
plt.xlabel('样本')
plt.ylabel('血糖值')
plt.legend()
plt.grid(True)
plt.savefig('结果分析/真实值与预测值对比.png')
plt.show()

在这里插入图片描述

# 4. 筛选出预测数据中血糖值在正常范围内的数据
normal_glucose_data = datatest[(datatest['预测血糖'] >= 3.9) & (datatest['预测血糖'] <= 6.1)]
print("正常血糖范围内的预测数据:")
print(normal_glucose_data[['id', '预测血糖']])

# 5. 获得高血糖风险个体信息的数据
high_risk_data = datatest[datatest['预测血糖'] > 6.1]
print("高血糖风险个体的信息:")
print(high_risk_data[['id', '预测血糖']])

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2146144.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Selenium通过ActionBuilder模拟鼠标操作直接移动到指定坐标的注意事项

在目前&#xff08;2024-09-18&#xff09;得Selenium官方手册中&#xff0c;模拟鼠标操作基本上都是通过ActionChains完成的&#xff0c;唯独有一动作&#xff0c;是通过ActionBuilder完成的。 而前者ActionChains&#xff0c;主要是通过offset&#xff0c;也就是坐标偏移量来…

【Prometheus】jmx_prometheus_javaagent监控java应用

目录 一、概述 1.1 promethues简介 1.2 JMX Exporter简介 二、监控SparkHistoryServer实现 一、概述 1.1 promethues简介 promethues采集数据的方法很多&#xff0c;常用的是通过各种exporter去主机采集&#xff0c;然后有些程序是没有相关的exporter,所以有些时候会通过脚…

信息学奥赛报考指南

近年来&#xff0c;信息学奥林匹克竞赛&#xff08;NOI&#xff09;越来越受到家长和学生的重视。这项竞赛不仅能培养孩子的编程与算法思维&#xff0c;还为优秀的选手提供了进入国内顶尖大学的保送资格&#xff0c;并有机会参加国际级赛事。因此&#xff0c;许多家长都希望了解…

设计图纸加密方法知多少?小编给你讲清楚

一、对称加密 使用对称加密算法&#xff0c;对设计图纸进行加密。对称加密使用相同的密钥进行加密和解密&#xff0c;确保只有持有正确密钥的人能够解密文件。 二、非对称加密 使用非对称加密算法&#xff0c;进行设计图纸的加密。非对称加密使用公钥加密、私钥解密的方式&a…

机械设备产品资料方案介绍小程序系统开发制作

设备产品资料介绍小程序系统&#xff0c;是一家工业机械设备生产厂家为了更好的服务客户而定制开发的一套小程序系统&#xff0c;让用户通过小程序就可以了解公司产品介绍的详细参数、售后服务和产品操作手持等。 该小程序系统里面主要开发的功能模块有&#xff1a; 1、产品目…

如何在算家云搭建DynamiCrafter(图生视频)

一、模型简介 DynamiCrafter 是一种&#xff08;文本-&#xff09;图像到视频/图像动画的方法&#xff0c;旨在从条件图像和文本提示中生成短视频片段&#xff08;约 2 秒&#xff09;&#xff0c;可以将静止图像转换为动画。它使用了一种称为视频扩散先验的技术&#xff0c;可…

探索Facebook的黑暗面:数字化社交的双面剑

Facebook作为全球最大的社交平台&#xff0c;改变了我们的沟通和互动方式。虽然它带来了便利&#xff0c;但也存在不少隐忧。本文将探讨Facebook的负面影响&#xff0c;包括隐私问题、信息操控、心理健康危机及社交表面化等。 一、隐私问题&#xff1a;数据收集的隐忧 Facebo…

优思学院|如何从零开始自己学习六西格玛?

优思学院为学习六西格玛管理的学员&#xff0c;精心推荐了几本由浅入深、系统全面的书籍&#xff0c;帮助大家从入门到精通&#xff0c;逐步掌握六西格玛这一强大的管理工具。无论你是刚接触六西格玛的初学者&#xff0c;还是想在专业领域提升的高级学员&#xff0c;这几本书都…

硬件(驱动开发概念)

驱动程序开发 裸机驱动&#xff08;无操作系统&#xff09; Linux驱动 以计算机技术为基础&#xff0c;在软件和硬件层间可以被剪裁的专业硬件计算机系统 SOC&#xff1a;片上系统 Kernel&#xff1a;内核 x86 &#xff08;CISC:complex instruction set computer 复杂指令…

IEEE Electronic Library(IEL)数据库文献检索下载介绍及个人获取IEEE文献途径

一、数据库介绍 IEEE&#xff08;The Institute of Electrical and Electronics Engineers&#xff0c;电气电子工程师学会&#xff09;是目前全球最大的非营利性专业技术学会&#xff0c;在全球160多个国家拥有超过45万名会员。IEEE在电气电子、计算机、半导体、通讯、电力能…

24年蓝桥杯及攻防世界赛题-MISC-3

21 reverseMe 复制图片&#xff0c;在线ocr识别&#xff0c;https://ocr.wdku.net/&#xff0c;都不费眼睛。 22 misc_pic_again ┌──(holyeyes㉿kali2023)-[~/Misc/tool-misc/zsteg] └─$ zsteg misc_pic_again.png imagedata … text: “$$KaTeX parse error: Undefined…

方法:批量提取PPT幻灯片中图片

处理包含大量图片的PPT&#xff08;PowerPoint&#xff09;幻灯片已成为许多专业人士的日常任务之一。然而&#xff0c;手动从每张幻灯片中逐一提取图片不仅耗时耗力&#xff0c;还容易出错。为了提升工作效率&#xff0c;减少重复劳动&#xff0c;探索并实现一种高效批量提取P…

STM32F407单片机开发入门(二)STM32F407VET6单片机详解

文章目录 一.概要二.单片机型号命名规则三.STM32F407系统架构四.STM32F40VET6单片机启动流程五.STM32F40VET6单片机主要外设资源六.开发过程中查看芯片数据手册的必要性1.单片机外设资源情况2.STM32F407单片机内部框图3.STM32F407单片机管脚图4.STM32F407单片机每个管脚功能5.单…

球类目标检测系统源码分享

球类目标检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

IOS 26 实现歌单详情(UITableView)列表 ③

歌单详情完整效果 歌单列表分组头部效果 本节是在文章 IOS 25 实现歌单详情&#xff08;UITableView&#xff09;列表② 的基础上&#xff0c;实现歌单列表分组头部View。当歌单列表滑动头部View至顶部时&#xff0c;头部View不会因列表滑动而消失&#xff0c;会一直显示在顶部…

2024.9.18

1.已知网址www.hqyj.com截取出网址的每一个部分 菜单栏中 ----> 虚拟机 -----> 设置 -----> 网络适配器 选择桥接模式 菜单栏中 ----> 编辑 -----> 虚拟网络编辑器 更改设置 将桥接改成自动 如果桥接连不上网 尝试还原默认设置后&#xff0c;在重新连接桥接…

微信小程序的学生选课系统--论文源码调试讲解

第二章 开发技术介绍 此次管理系统的关键技术和架构由B/S结构、java和mysql数据库&#xff0c;是本系统的关键开发技术&#xff0c;对系统的整体、数据库、功能模块、系统页面以及系统程序等设计进行了详细的研究与规划。 2.1 系统开发平台 在该在线微信小程序的学生选课系统…

动手学习RAG: 大模型向量模型微调 intfloat/e5-mistral-7b-instruct

动手学习RAG: 向量模型动手学习RAG: moka-ai/m3e 模型微调deepspeed与对比学习动手学习RAG&#xff1a;rerank模型微调实践 bge-reranker-v2-m3动手学习RAG&#xff1a;迟交互模型colbert微调实践 bge-m3动手学习RAG: 大模型向量模型微调 intfloat/e5-mistral-7b-instruct动手学…

JavaScript高级——内存溢出和内存泄漏

1、闭包的缺点与解决方法 &#xff08;1&#xff09;缺点&#xff1a;函数执行完后&#xff0c;函数内的局部变量没有释放&#xff0c;占用内存时间会变长。 容易造成内存泄漏。 &#xff08;2&#xff09;解决&#xff1a;能不用闭包就不用。 及时释放。 2、内存溢出 ① 一…

Linux进阶 查看系统进程

操作系统中进程的生命周期是: 创建进程,(服务启动或软件的启动)进行运行状态进程等待状态进行唤醒进程结束一般主要关注是进行中间的三种状态,三种状态之间装换关系如下: 1、就绪状态:表示进程已经做好了运行的准备状态,只要获得内存空间,就可以立即执行。 2、阻塞状态:…