大数据分析案例-基于随机森林算法构建多发性硬化症预测模型

news2024/9/21 20:45:10

🤵‍♂️ 个人主页:@艾派森的个人主页

✍🏻作者简介:Python学习者
🐋 希望大家多多支持,我们一起进步!😄
如果文章对你有帮助的话,
欢迎评论 💬点赞👍🏻 收藏 📂加关注+


喜欢大数据分析项目的小伙伴,希望可以多多支持该系列的其他文章

大数据分析案例合集
大数据分析案例-基于随机森林算法预测人类预期寿命
大数据分析案例-基于随机森林算法的商品评价情感分析
大数据分析案例-用RFM模型对客户价值分析(聚类)
大数据分析案例-对电信客户流失分析预警预测
大数据分析案例-基于随机森林模型对北京房价进行预测
大数据分析案例-基于RFM模型对电商客户价值分析
大数据分析案例-基于逻辑回归算法构建垃圾邮件分类器模型
大数据分析案例-基于决策树算法构建员工离职预测模型

大数据分析案例-基于KNN算法对茅台股票进行预测

大数据分析案例-基于多元线性回归算法构建广告投放收益模型
大数据分析案例-基于随机森林算法构建返乡人群预测模型
大数据分析案例-基于决策树算法构建金融反欺诈分类模型

目录

1.项目背景

2.项目简介

2.1项目说明

2.2数据说明

2.3技术工具

3.算法原理

4.项目实施步骤

4.1理解数据

4.2数据预处理

4.3探索性数据分析

4.3.1目标变量分析

4.3.2类别性变量分析

 4.3.3相关性分析

4.4特征工程

4.5模型构建

4.6模型评估

4.7模型预测

5.实验总结

源代码


1.项目背景

        多发性硬化症(Multiple Sclerosis,简称MS)是一种常见的中枢神经系统慢性炎症性疾病,通常表现为自身免疫攻击引起的神经髓鞘损害。这种损害会导致神经冲动传导障碍,进而导致一系列不同严重程度的神经功能缺陷,如肌无力、感觉异常、视觉障碍和平衡问题等。

        MS的病因尚未完全明确,但据认为是由遗传和环境因素相互作用引起的。尽管已有许多研究对其病理生理学和发病机制进行了深入探究,但对于个体患病风险的预测仍然是一个具有挑战性的问题。

        随机森林算法是一种强大的机器学习方法,它能够处理高维数据和复杂的关联关系。随机森林结合了多个决策树,通过随机特征选择和多样性集成的方式来提高模型的准确性和鲁棒性。因此,基于随机森林算法构建MS预测模型可以帮助我们识别患有MS风险较高的人群,为早期干预和治疗提供依据。

        在现有研究中,已经有一些尝试使用机器学习算法构建MS预测模型。然而,许多早期的研究可能由于数据规模较小或特征选择不当而导致模型的准确性和泛化能力不足。因此,我们需要更大规模的数据集和更精确的特征选择,来构建更可靠的MS预测模型。

        本实验旨在利用随机森林算法,结合临床数据和生物标志物信息,构建一种准确可靠的多发性硬化症预测模型。通过该模型,我们希望能够识别患有MS风险较高的人群,为早期干预、治疗和管理提供有效的辅助决策工具。同时,该实验也有望深化对多发性硬化症发病机制的认识,为进一步研究和治疗提供新的线索和方向。

2.项目简介

2.1项目说明

        本项目旨在通过分析多发性硬化症数据集,找出影响发病确诊的因素,最后使用传统机器学习算法构建发病预测模型,通过该模型,我们希望能够识别患有MS风险较高的人群,为早期干预、治疗和管理提供有效的辅助决策工具。

2.2数据说明

        本实验数据集来源于Kaggle,原始数据集中共有273条数据,19列变量,各变量具体含义如下:

Age:患者的年龄(岁)

Schooling:患者在学校的时间(以年为单位)

Gender:1=男,2=女

Breastfeeding:1=是,2=否,3=未知

Varicella:1=阳性,2=阴性,3=未知

Initial_Symptom:1=视觉,2=感觉,3=运动,4=其他,5=视觉和感觉,6=视觉和运动,7=视觉和其他,8=感觉和运动,9=感觉和其他,10=运动和其他, 11=视觉、感觉和运动, 12=视觉、感觉和其他, 13=视觉、运动和其他, 14=感觉、运动和其他, 15=视觉、感觉、运动和其他

Mono_or_Polysymptomatic:1=单症状,2=多症状,3=未知

Oligoclonal_Bands:0=阴性,1=阳性,2=未知

LLSSEP:0=负,1=正

ULSSEP:0=负,1=正

VEP:0=阴性,1=阳性

BAEP:0=阴性,1=阳性

Periventricular_MRI:0=阴性,1=阳性

Cortical_MRII:0=阴性,1=阳性

Infratentorial_MRI:0=阴性,1=阳性

Spinal_Cord_MRI:0=阴性,1=阳性

初始_EDSS:?

最终_EDSS:?

组别:1=CDMS,2=非 CDMS

2.3技术工具

Python版本:3.9

代码编辑器:jupyter notebook

3.算法原理

        随机森林是一种有监督学习算法。就像它的名字一样,它创建了一个森林,并使它拥有某种方式随机性。所构建的“森林”是决策树的集成,大部分时候都是用“bagging”方法训练的。bagging 方法,即 bootstrapaggregating,采用的是随机有放回的选择训练数据然后构造分类器,最后组合学习到的模型来增加整体的效果。简而言之,随机森林建立了多个决策树,并将它们合并在一起以获得更准确和稳定的预测。其一大优势在于它既可用于分类,也可用于回归问题,这两类问题恰好构成了当前的大多数机器学习系统所需要面对的。

        随机森林分类器使用所有的决策树分类器以及 bagging 分类器的超参数来控制整体结构。与其先构建 bagging分类器,并将其传递给决策树分类器,我们可以直接使用随机森林分类器类,这样对于决策树而言,更加方便和优化。要注意的是,回归问题同样有一个随机森林回归器与之相对应。

        随机森林算法中树的增长会给模型带来额外的随机性。与决策树不同的是,每个节点被分割成最小化误差的最佳指标,在随机森林中我们选择随机选择的指标来构建最佳分割。因此,在随机森林中,仅考虑用于分割节点的随机子集,甚至可以通过在每个指标上使用随机阈值来使树更加随机,而不是如正常的决策树一样搜索最佳阈值。这个过程产生了广泛的多样性,通常可以得到更好的模型。

4.项目实施步骤

4.1理解数据

首先导入数据挖掘基本必备的一些第三方库,接着导入数据集,查看前五行

 查看数据大小

查看数据基本信息

查看数值型变量的描述性统计

 通过描述性统计,我们可以看出各变量的均值方差分位数等数值。

4.2数据预处理

统计数据集缺失值情况

 

发现'Initial_EDSS'和'Final_EDSS'这两列变量缺失太多,所以我们直接删除列,然后再删除缺失值

 检测数据集中是否存在重复值,结果为False,说明不存在重复值

4.3探索性数据分析

4.3.1目标变量分析

 

4.3.2类别性变量分析

 4.3.3相关性分析

4.4特征工程

首先需要准备建模需要对数据,接着拆分数据集为训练集和测试集

4.5模型构建

在构建模型之前,我们先用三个字典来存放模型的准确率、运行时间和F1值,最后用来对比。

 接着开始构建模型

 

 

 

 

 

4.6模型评估

前面我们构建了6个模型,现在来评估各指标选择最适合的模型

从结果看出,随机森林准确率和F1值 都是排在第一,唯一不足就是训练时间长,本次实验样本不多,可以选用随机森林,如果样本大的话,可以训练时间短的模型。

接着我们打印出随机森林模型的混淆矩阵和分类报告

打印特征重要性评分 

4.7模型预测

随机抽取10个预测结果来检验模型效果,发现10个错了一个,效果还不错。

5.实验总结

        在本实验中,我们成功地利用随机森林算法构建了一种多发性硬化症(MS)预测模型,并通过大规模的临床数据和生物标志物信息进行了验证和评估。以下是本实验的主要总结:

  1. 数据收集与预处理:我们收集了包括临床数据、生物标志物信息和神经影像学数据在内的大量数据,并进行了数据清洗、处理缺失值和特征选择等预处理步骤,确保了数据的质量和可用性。

  2. 随机森林算法构建:我们选择了随机森林算法作为预测模型的建模工具。随机森林能够有效地处理高维数据和复杂的关联关系,并通过集成多个决策树来提高模型的准确性和鲁棒性。

  3. 模型评估:我们使用了多种指标对模型进行了评估,包括准确率、召回率、F1分数等。评估结果显示,该预测模型具有较高的分类性能和预测准确度。

  4. 特征重要性分析:通过对模型的特征重要性进行分析,我们深入了解了哪些因素对于多发性硬化症的预测起到了关键作用。这有助于增进我们对MS发病机制的认识,并为后续的研究提供新的线索和方向。

  5. 应用前景:该预测模型为早期多发性硬化症的诊断和干预提供了重要的辅助决策工具。通过识别风险较高的患者群体,临床医生可以更早地采取治疗措施,有助于改善患者的预后和生活质量。

  6. 伦理与隐私保护:在整个实验过程中,我们始终遵守了伦理规范和隐私保护要求,确保患者数据的安全和保密,数据仅用于科学研究目的。

  7. 局限性与展望:尽管我们在实验中取得了显著的成果,但仍存在一些局限性。例如,模型的训练数据可能受到样本不平衡问题的影响,未来可以通过更多样本的采集和合成来解决这个问题。此外,随着科学技术的进步和数据的不断积累,我们有望进一步优化和改进预测模型,提高其准确性和泛化能力。

        综上所述,本实验通过基于随机森林算法构建了一种准确可靠的多发性硬化症预测模型,为临床诊断和治疗提供了重要的支持和指导。该实验的成功展示了机器学习在医学领域的巨大潜力,为未来更深入的研究和应用提供了坚实的基础。通过我们的不懈努力,有望为多发性硬化症患者带来更好的医疗服务和健康福祉。

心得与体会:

通过这次Python项目实战,我学到了许多新的知识,这是一个让我把书本上的理论知识运用于实践中的好机会。原先,学的时候感叹学的资料太难懂,此刻想来,有些其实并不难,关键在于理解。

在这次实战中还锻炼了我其他方面的潜力,提高了我的综合素质。首先,它锻炼了我做项目的潜力,提高了独立思考问题、自我动手操作的潜力,在工作的过程中,复习了以前学习过的知识,并掌握了一些应用知识的技巧等

在此次实战中,我还学会了下面几点工作学习心态:

1)继续学习,不断提升理论涵养。在信息时代,学习是不断地汲取新信息,获得事业进步的动力。作为一名青年学子更就应把学习作为持续工作用心性的重要途径。走上工作岗位后,我会用心响应单位号召,结合工作实际,不断学习理论、业务知识和社会知识,用先进的理论武装头脑,用精良的业务知识提升潜力,以广博的社会知识拓展视野。

2)努力实践,自觉进行主角转化。只有将理论付诸于实践才能实现理论自身的价值,也只有将理论付诸于实践才能使理论得以检验。同样,一个人的价值也是透过实践活动来实现的,也只有透过实践才能锻炼人的品质,彰显人的意志。

3)提高工作用心性和主动性。实习,是开端也是结束。展此刻自我面前的是一片任自我驰骋的沃土,也分明感受到了沉甸甸的职责。在今后的工作和生活中,我将继续学习,深入实践,不断提升自我,努力创造业绩,继续创造更多的价值。

这次Python实战不仅仅使我学到了知识,丰富了经验。也帮忙我缩小了实践和理论的差距。在未来的工作中我会把学到的理论知识和实践经验不断的应用到实际工作中,为实现理想而努力。

源代码

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(font='SimHei')
import warnings
warnings.filterwarnings('ignore')

df = pd.read_csv('data.csv')
df.head()
df.shape
df.info()
df.describe()
df.isnull().sum()  # 统计数据集缺失值情况
df.drop(['Initial_EDSS','Final_EDSS'],axis=1,inplace=True)  # 删除缺失值太多的列
df.dropna(inplace=True)  # 删除缺失值
df.shape
any(df.duplicated())  # 检测数据集中是否存在重复值
Target = df['group'].value_counts()
fig , ax= plt.subplots(figsize=(8,8))
ax.pie(x = Target.values ,
       labels = Target.index ,
       shadow=True ,
       colors=["Salmon","cyan"] ,
       explode = [0 , 0.1] ,
       autopct="%.2F" );
ax.set(title="ltiple Sclerosis Disease")
ax.legend(["non-CDMS","CDMs"])
plt.show()
catogary = ['Gender','Breastfeeding', 'Varicella', 'Mono_or_Polysymptomatic', 'Oligoclonal_Bands',
       'LLSSEP', 'ULSSEP', 'VEP', 'BAEP', 'Periventricular_MRI',
       'Cortical_MRI', 'Infratentorial_MRI', 'Spinal_Cord_MRI', 'group']
for i in catogary :
    cat= pd.crosstab(df["group"], df[i])
    cat.plot(kind="bar" ,
            figsize=(10,6),
            title=f"The Relation Betwwen The {i} And The Multiple Sclerosis Disease")
    plt.ylabel("The Amount")
    plt.legend()
fig,axes  = plt.subplots(nrows = 2,ncols = 3,figsize=(20,10))
sns.boxplot(ax=axes[0,0],x='Initial_Symptom',data = df[df['group']==1])
sns.boxplot(ax = axes[0,1],x='Gender',y='Schooling',data = df,hue = 'group', palette='Set2');
sns.countplot(ax = axes[0,2],x='Varicella',data = df[df['Varicella']!=3],hue = 'group', palette='Set1');

sns.countplot(ax = axes[1,0],x='LLSSEP',data = df,hue = 'group', palette='deep');
sns.countplot(ax = axes[1,1],x='ULSSEP',data = df,hue = 'group', palette='YlOrRd');
sns.countplot(ax= axes[1,2],x='BAEP',data = df,hue = 'group',palette='RdYlGn_r');

axes[0,0].title.set_text('Initial_Symptom')
axes[0,1].title.set_text('Relationship between Gender and Schooling')
axes[0,2].title.set_text('Relationship between Varicella and group')

axes[1,0].title.set_text('Relationship between LLSSEP and group')
axes[1,1].title.set_text('Relationship between ULSSEP and group')
axes[1,2].title.set_text('Relationship between BAEP and group')
fig, ax = plt.subplots(figsize=(20,20))
dataplot=sns.heatmap(df.corr()  ,
                    annot=True ,
                    linewidths=0.5 , 
                    cmap = "Blues")
plt.show()
from sklearn.model_selection import train_test_split
# 准备数据
X = df.drop('group',axis=1)
y = df['group']
# 拆分数据
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=42)
print(f'训练集大小:',X_train.shape[0])
print(f'测试集大小:',X_test.shape[0])
import time
from sklearn.metrics import f1_score
scores = dict()
time_models = dict()
f1 = dict()
# 构建逻辑回归模型
from sklearn.linear_model import LogisticRegression
t0 = time.time()
lr_model = LogisticRegression().fit(X_train, y_train)
t1 = time.time()
print('Model Runnign Time',t1-t0)
lr_score = lr_model.score(X_test, y_test)
scores['Logistic Regression'] = lr_score
print(lr_score)
time_models['Logistic Regression'] = t1-t0
y_pred = lr_model.predict(X_test)
f1['Logistic Regression'] = f1_score(y_test,y_pred)
print(f1_score(y_test,y_pred))
# 构建KNN模型
from sklearn.neighbors import KNeighborsClassifier
t0 = time.time()
knn_model = KNeighborsClassifier().fit(X_train, y_train)
t1 = time.time()
print('Model Runnign Time',t1-t0)
knn_score = knn_model.score(X_test, y_test)
scores['KNeighborsClassifier'] = knn_score
print(knn_score)
time_models['KNeighborsClassifier'] = t1-t0
y_pred = knn_model.predict(X_test)
f1['KNeighborsClassifier'] = f1_score(y_test,y_pred)
print(f1_score(y_test,y_pred))
# 构建朴素贝叶斯模型
from sklearn.naive_bayes import GaussianNB
t0 = time.time()
gb_model = GaussianNB().fit(X_train, y_train)
t1 = time.time()
print('GaussianNB',t1-t0)
gb_score = gb_model.score(X_test, y_test)
scores['GaussianNB'] = gb_score
print(gb_score)
time_models['GaussianNB'] = t1-t0
y_pred = gb_model.predict(X_test)
f1['GaussianNB'] = f1_score(y_test,y_pred)
print(f1_score(y_test,y_pred))
# 构建决策树模型
from sklearn.tree import DecisionTreeClassifier
t0 = time.time()
tree_model = DecisionTreeClassifier().fit(X_train, y_train)
t1 = time.time()
print('DecisionTreeClassifier',t1-t0)
tree_score = tree_model.score(X_test, y_test)
scores['DecisionTreeClassifier'] = tree_score
print(tree_score)
time_models['DecisionTreeClassifier'] = t1-t0
y_pred = tree_model.predict(X_test)
f1['DecisionTreeClassifier'] = f1_score(y_test,y_pred)
print(f1_score(y_test,y_pred))
# 构建随机森林模型
from sklearn.ensemble import RandomForestClassifier
t0 = time.time()
forest_model = RandomForestClassifier().fit(X_train, y_train)
t1 = time.time()
print('RandomForestClassifier',t1-t0)
forest_score = forest_model.score(X_test, y_test)
scores['RandomForestClassifier'] = forest_score
print(forest_score)
time_models['RandomForestClassifier'] = t1-t0
y_pred = forest_model.predict(X_test)
f1['RandomForestClassifier'] = f1_score(y_test,y_pred)
print(f1_score(y_test,y_pred))
# 构建GBDT模型
from sklearn.ensemble import GradientBoostingClassifier
t0 = time.time()
gbdt_model = GradientBoostingClassifier().fit(X_train, y_train)
t1 = time.time()
print('GradientBoostingClassifier',t1-t0)
gbdt_score = gbdt_model.score(X_test, y_test)
scores['GradientBoostingClassifier'] = gbdt_score
print(gbdt_score)
time_models['GradientBoostingClassifier'] = t1-t0
y_pred = gbdt_model.predict(X_test)
f1['GradientBoostingClassifier'] = f1_score(y_test,y_pred)
print(f1_score(y_test,y_pred))
# 查看模型评估指标汇总的结果
result_df = pd.DataFrame({'Models': scores.keys(), 'Scores':scores.values(), 
                          'Time':time_models.values(), 'F1':f1.values()})
result_df.sort_values('Scores', ascending = False)
from sklearn.metrics import confusion_matrix,classification_report,auc,roc_curve
# 模型评估
y_pred = forest_model.predict(X_test)
print('confusion_matrix:','\n',confusion_matrix(y_test,y_pred))
print('classification_report:','\n',classification_report(y_test,y_pred))
#打印特征重要性评分
feat_labels = X_train.columns[0:]
importances = forest_model.feature_importances_
indices = np.argsort(importances)[::-1]
index_list = []
value_list = []
for f,j in zip(range(X_train.shape[1]),indices):
    index_list.append(feat_labels[j])
    value_list.append(importances[j])
    print(f + 1, feat_labels[j], importances[j])
plt.figure(figsize=(12,8))
plt.barh(index_list[::-1],value_list[::-1])
plt.yticks(fontsize=12)
plt.title('Feature Importance Sorted',fontsize=14)
plt.show()
# 模型预测
res = pd.DataFrame()
res['真实值'] = y_test
res['预测值'] = y_pred
res.sample(10) # 随机抽取10个

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

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

相关文章

selenium 和 chromedriver 使用的一些总结

1 selenium 下载地址 selenium PyPIhttps://pypi.org/project/selenium/ 2 chromedriver 下载地址 ,可以下载最新版的 chromedriver ChromeDriver - WebDriver for Chrome - Downloadshttps://chromedriver.chromium.org/downloadsChrome for Testing availabi…

JS沙箱绕过

一、沙箱绕过 1.概念 沙箱绕过"是指攻击者利用各种方法和技术来规避或绕过应用程序或系统中的沙箱(sandbox)。沙箱是一种安全机制,用于隔离和限制应用程序的执行环境,从而防止恶意代码对系统造成损害。它常被用于隔离不受信任…

小红书媒介审稿,有哪些注意事项

在内容营销中,打造一篇爆文对品牌来说,意义重大。它意味着更高的销售转化,以及更广的品牌传播。那么该如何打造一篇爆文呢,今天小红书媒介审稿,有哪些注意事项进行分享! 一、媒介审稿的前期准备 作为一个合…

TypeScript【enum 枚举】

导语 在 TypeScript 中,新增了很多具有特性的一些数据类型处理方法,enum 【枚举】就是其中,很具有代表性的一种,所以本章节就来聊聊 在 TypeScript 中如何去运用 enum 【枚举】。 枚举的概念: 枚举(Enum&am…

面试热题(最长回文子串)

给你一个字符串 s,找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同,则该字符串称为回文字符串 输入:s "babad" 输出:"bab" 最长回文子串以前的博客已经讲过KMP算法以及比较不常见的Manacher算法…

详解Spring中涉及的技术

注解 介绍: 注解(Annotation)很重要,未来的开发模式都是基于注解的,JPA是基于注解的,Spring2.5以上都是基于注解的,Hibernate3.x以后也是基于注解的,现在的Struts2有一部分也是基于注解的了,注…

Matlab滤波、频谱分析

Matlab滤波、频谱分析 滤波: 某目标信号是由5、15、30Hz正弦波混合而成的混合信号,现需要设计一个滤波器滤掉5、30Hz两种频率。 分析:显然我们应该设计一个带通滤波器,通带频率落在15Hz附近。 % 滤波 % 某目标信号是由5、15、3…

Python(六十四)字典元素的遍历

❤️ 专栏简介:本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中,我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 :本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

Cesium 加载ArcGIS Server切片服务错级问题

1.首先上官方api说明 ArcGisMapServerImageryProvider - Cesium Documentation 里面没有 zoomoffset参数!!! 2.如果按照互联网栅格切片规则 3857、4326、4490常用切片层级参数,则直接加载显示地图 viewer.imageryLayers.addImageryProvider(new Cesium.ArcGisMapServerI…

购买阿里云vod视频点播服务流程

引言 在当前数字化时代,视频内容的传播越来越重要,而阿里云视频点播服务作为一种强大的视频存储和分发平台,受到越来越多企业和个人的青睐。但是,对于初次接触阿里云视频点播服务的用户来说,购买流程可能会让人有些困…

“东快西慢”格局被重塑 西安智能网联产业发展明显提速

近年来,全球汽车产业迎来新一轮的变革——智能化。智能化变革可谓是对全球汽车产业的再次重塑,这场变革不仅带来了动力及驱动能源和驾驶方式的转变,还使得汽车工业转向新兴市场,中国成为智能网联汽车产业发展的新高地。 在智能网…

企业架构NOSQL数据库之MongoDB

目录 一、背景描述及其方案设计 (一)业务背景描述 (二)模拟运维设计方案 二、Mongodb介绍 (一)nosql介绍 (二)产品特点 1、存储性 2、 效率性 3、结构 三、安装和配置 (一&#xff09…

jmeter 5.1彻底解决中文上传乱码

1.修改源码,然后重新打jar包,就是所有上传文件名重新获取文件名 参考链接:多种Jmeter中文乱码问题处理方法 - 51Testing软件测试网 2.修改Advanced,必须选java

电商系统架构设计系列(七):如何构建一个电商的商品搜索系统?

上篇文章中,我给你留了一个思考题:如何构建一个商品搜索系统? 今天这篇文章,我们来说一下电商的商品搜索系统。 引言 搜索这个特性可以说是无处不在,现在很少有网站或者系统不提供搜索功能了,所以&#xf…

Unity Shader:常用的C#与shader交互的方法

俗话说久病成医,虽然不是专业技术美术,但代码写久了自然会积累一些常用的shader交互方法。零零散散的,总结如下: 1,改变UGUI的材质球属性 有时候我们需要改变ui的一些属性,从而实现想要的效果。通常UGUI上…

GEE:矢量数据去除重复值(输出样本点数据的标签信息)

作者:CSDN @ _养乐多_ 本文记录了在GoogleEarthEngine(GEE)平台上,将样本点数据中某个字段的值去除重复值,并将剩下的值打印到控制台的代码。该代码可以用于快速在GEE平台上查询土地利用分类信息中landcover的类别信息。 矢量数据信息如下所示, 打印结果如下所示, 文章…

【Linux】【docker】安装sonarQube免费社区版9.9

文章目录 sonarQube 镜像容器Linux 安装镜像出现 Permission denied的异常安装sonarQube 中文包重启服务 代码上传到sonarQube扫描配置 JS TS Php Go Python sonarQube 镜像容器 老样子第一步还是打开镜像容器官网https://hub.docker.com搜索sonarqube官方推荐的挂载目录 我就按…

LeetCode 热题 100 JavaScript --226. 翻转二叉树

给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 3&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[] 提示&#xff1a; 树中节点数目范围在 [0, 100] 内 -100 < Node.val < 100 var invertTree function(root…

使用“纯”Servlet做一个单表的CRUD操作

1. 项目说明 介绍&#xff1a; 这里我们使用 纯粹 的 Servlet 完成单表【对部门的】的增删改查操作。&#xff08;B/S结构的。&#xff09; 结构图 初始的欢迎页面 部门列表页面 部门详情 修改部门 删除部门&#xff1a; 新增部门&#xff1a; 2. 具体对应的功能的代码实现 …

为什么马斯克和奥特曼都想重振加密货币?

1、前言 加密货币已经死了吗&#xff1f;这个问题的答案取决于谁来回答。一个加密爱好者会给你一百个不同的理由来解释为什么加密货币没有死。特斯拉CEO埃隆马斯克和OpenAI CEO 山姆奥特曼都对加密货币及其在塑造未来世界中的潜在作用有着浓厚的兴趣。 在过去很长一段时间里&…