kaggle上经典泰坦尼克项目数据分析探索
之前了解在kaggle上这个项目很火,最近想要加强一下python数据分析,所以在kaggle上找到这个项目进行学习探索,下面是将一些学习资料以及过程整理出来。
一、首先我们了解一下项目背景以及如何找到这个项目。
kaggle项目地址:
https://www.kaggle.com/code/alexisbcook/titanic-tutorial?scriptVersionId=99170538&cellId=5
进入页面后会有背景介绍以及项目
我们先大概了解一下项目背景以及流程,找到项目所需要的数据源。

二、准备就绪,下面进入项目一起学习探索
import pandas as pdtrain_data = pd.read_csv(r'E:/train.csv')
test_data = pd.read_csv(r'E:/test.csv')
train_data.head(10)# 数据集概述
# 泰坦尼克号数据集是机器学习入门中一个非常著名的数据集,包含了乘客的个人信息以及他们的生死状态。数据集主要包含以下字段:# PassengerI:乘客编号
# Survive:生存状态(0代表未存活,1代表存活)
# Pclas:舱位等级
# Nam:乘客姓名
# Se:性别
# Ag:年龄
# SibS:同舱兄弟姐妹或配偶的数量
# Parc:同行父母或子女的数量
# Ticke:票号
# Far:票价
# Cabi:舱位
# Embarke:登船港口
查看导入train数据结果:

查看导入的test数据结果:
test_data.head(10)

查看数据基本信息
# 查看数据基本信息
train_data.info()

test_data.info()

查看数据空值情况
# 检查各个字段的空值情况
train_data.isnull().sum()
说明:从结果看到Age、Cabin和Embarked明显有空值
test_data.isnull().sum()

查看一下数据描述
train_data.describe()

test_data.describe()
# 计算女性获救的概率
women = train_data.loc[train_data.Sex == 'female']["Survived"]
rate_women = sum(women)/len(women)print("% of women who survived:", rate_women)
# 计算男性获救的概率
men = train_data.loc[train_data.Sex == 'male']["Survived"]
rate_men = sum(men)/len(men)print("% of men who survived:", rate_men)

# 学习第一个机器学习模型随机森林来预测乘客的获救可能
from sklearn.ensemble import RandomForestClassifiery = train_data["Survived"]# 指定相关的特性列
features = ["Pclass", "Sex", "SibSp", "Parch"]
# 将features转换为哑变量
X = pd.get_dummies(train_data[features])
X_test = pd.get_dummies(test_data[features])model = RandomForestClassifier(n_estimators=100, max_depth=5, random_state=1)
model.fit(X, y)
predictions = model.predict(X_test)output = pd.DataFrame({'PassengerId': test_data.PassengerId, 'Survived': predictions})
output.to_csv('submission.csv', index=False)
print(output.head(10))
print("Your submission was successfully saved!")

# 上面部分是根据实例kaggle上面的例子,下面我们再对数据做一些探索
# 需求:引入seaborn来研究已知存活的数据中存活比例
# 结论:在891名乘客中,其中存活的比例为36.38%,溺水的比例为61.62%
import seaborn as sns
import matplotlib.pyplot as plt
sns.set()
sns.set_style('ticks')
train_data['Survived'].value_counts().plot.pie(labels = ['downed','survived'],
explode=(0,0.05),shadow = True,autopct = '%.2f%%',fontsize=15)
plt.show()
#年龄分布情况
# 需求:
# 1、年龄的分布情况
# 2、男性和女性的存活情况
# 3、大人和小孩的存活情况# 结论
# 年龄分布呈现右偏,大部分数据集中在20岁到40岁之间,最小年龄是0.42,最大年龄是80fig,ax = plt.subplots(1,2,figsize=(15,7))
age = train_data[train_data['Age'].notnull()]
age['Age'].hist(bins=50,histtype='bar',edgecolor='k',ax=ax[0])age['Age'].plot.box(showfliers=False, color = {'boxes':'DarkGreen', 'whiskers':'DarkOrange', 'medians':'DarkBlue', 'caps':'Gray'},grid=True,ax=ax[1])
pd.DataFrame(age['Age'].describe()).transpose()

# 需求:按照存活状态分布的年龄情况
# 结论:幸存者的年龄整体比溺水的年龄小,幸存者数据有一个明显的异常值,80岁的幸存者,需要检查一下。import numpy as npplt.figure(figsize=(15, 3))
#显示汉字
plt.rcParams['font.sans-serif'] = ['SimHei']sns.boxplot(y = 'Survived', x = 'Age', data = train_data,palette=["#3f3e6fd1", "#85c6a9"], fliersize = 0, orient = 'h')
#orient:"v"|"h" 用于控制图像使水平还是竖直显示
#fliersize:异常值大小sns.stripplot(y = 'Survived', x = 'Age', data = train_data,linewidth = 0.6, palette=["#3f3e6fd1", "#85c6a9"], orient = 'h')plt.yticks( np.arange(2), ['drowned', 'survived'],fontsize= 15)
plt.title('乘客的年龄分布情况',fontsize= 15)
plt.ylabel('存活状态')
plt.tight_layout()pd.DataFrame(train_data.groupby('Survived').Age.describe())

# 需求:由于有一个异常数据,这里简单修正数据
# 结论:异常值的影响不大,结论仍然是年龄偏小的获救概率较大
train_data.loc[train_data['Age']==80,'Age'] = 48
train_data[train_data['Name']=='Barkworth, Mr. Algernon Henry Wilson']pd.DataFrame(train_data.groupby('Survived').Age.describe())

#男性和女性存活情况
s_sex = train_data[train_data['Survived']==1][['Sex','Survived']].groupby('Sex').count()s_sex.plot.bar(rot=0)print(
'女性存活率为%0.2f%%,男性存活率为%0.2f%%'
%(s_sex.loc['female']/s_sex.sum()*100,s_sex.loc['male']/s_sex.sum()*100))
# 按照不同船舱等级划分: 船舱等级越高,存活者年龄越大,船舱等级1存活年龄集中在20-40岁,船舱等级2/3中有较多低龄乘客存活
# 按照性别划分 : 男性女性存活者年龄主要分布在20-40岁,且均有较多低龄乘客,其中女性存活更多
# 按照不同船舱等级看存活的男女比例: 1、3等舱存活的男性大部分为20到50,2等舱幸存男性年龄偏低
# 年龄与存活的关系
age = train_data[train_data['Age'].notnull()]
s_age = age[age['Survived']==1]fig,ax = plt.subplots(1,3,figsize=(15,5))sns.violinplot(x='Pclass',y='Age',hue='Survived',data = age,split=True,ax=ax[0],grid=True)
ax[0].set_yticks(range(0,110,10))sns.violinplot('Sex','Age',hue='Survived',data=age,split=True,ax=ax[1])
ax[1].set_yticks(range(0,110,10))sns.violinplot('Pclass','Age',hue='Sex',data=s_age,split=True,ax=ax[2])
ax[2].set_yticks(range(0,110,10))plt.tight_layout()

age = train_data[train_data['Age'].notnull()]
age['age_int']=age['Age'].astype(int)
a = age[['Survived','age_int']].groupby('age_int',as_index=False).mean()
#计算均值相当于计算存活率plt.figure(figsize=(15,4))
sns.barplot(x ='age_int',y='Survived',data=a, palette = 'BrBG')
# 结合 SibSp、Parch字段,研究亲人多少与存活的关系
# 要求:
# 1、有无兄弟姐妹/父母子女和存活与否的关系
# 2、亲戚多少与存活与否的关系#计算家庭大小
train_data['family_size']=train_data['SibSp']+train_data['Parch']+1
train_data['family_size'].value_counts()

# 家庭大小与存活的关系
# 有两个大小分别为8和11的大家族,其训练数据集中的所有成员均被淹死。
# 大多数乘客独自旅行,生存率不是很高。
# 在船上有4位家庭成员的人群中,幸存的乘客比例最大。fig = plt.figure(figsize=(12,5))ax1 = fig.add_subplot(121)ax = sns.countplot(train_data['family_size'])
labels = (train_data['family_size'].value_counts())
for i, v in enumerate(labels):ax.text(i, v+6, str(v), horizontalalignment = 'center', size = 10, color = 'black')
plt.ylabel('乘客数')
plt.title('按照家庭数量分布的乘客情况')ax2 = fig.add_subplot(122)a = train_data.groupby('family_size')['Survived'].value_counts(normalize=True).unstack()
a.plot(kind='bar',stacked='True',color=["#3f3e6fd1", "#85c6a9"],rot=0,ax =ax2)
plt.legend(( 'Drowned', 'Survived'), loc=(1.04,0))
plt.title('按照家庭数量分布的存活情况')
plt.tight_layout()

# 结合票的费用情况,研究票价和存活与否的关系
# 要求:
# 1、 票价分布和存活与否的关系
# 2、比较研究生还者和未生还者的票价情况# 票价分布和存活与否的关系
# 结论:生还者的平均票价要大于未生还者的平均票价fig, ax=plt.subplots(1,2,figsize=(15,4))
train_data['Fare'].hist(bins=70, ax = ax[0])
train_data.boxplot(column='Fare', by='Pclass', showfliers=False,ax = ax[1])
# 查看票价分布情况fare_not_survived = train_data['Fare'][train_data['Survived'] == 0]
fare_survived = train_data['Fare'][train_data['Survived'] == 1]
# 基于票价,筛选出生存与否的数据
average_fare = pd.DataFrame([fare_not_survived.mean(),fare_survived.mean()])
std_fare = pd.DataFrame([fare_not_survived.std(),fare_survived.std()])
average_fare.plot(yerr=std_fare,kind='bar',legend=False,figsize = (15,4),grid = True)
# 查看票价与是否生还的关系
plt.tight_layout()

# 结合出发地的情况,研究出发地点与存活的关系
#大多数乘客登上南安普敦。 南安普敦的溺水乘客比例最大。
#从瑟堡出发的乘客,其中50%以上存活(在训练数据集中)。
#皇后镇出发的乘客中,绝大多数是三等舱乘客。fig = plt.figure(figsize = (15,4))ax1 = fig.add_subplot(131)
palette = sns.cubehelix_palette(5, start = 2)
ax = sns.countplot(train_data['Embarked'], palette = palette, order = ['C', 'Q', 'S'], ax = ax1)
plt.title('不同港口出发的乘客分布情况')
plt.ylabel('乘客数')labels = (train_data['Embarked'].value_counts())
labels = labels.sort_index()for i, v in enumerate(labels):ax.text(i, v+10, str(v), horizontalalignment = 'center', size = 10, color = 'black')ax2 = fig.add_subplot(132)
surv_by_emb = train_data.groupby('Embarked')['Survived'].value_counts(normalize = True)
surv_by_emb = surv_by_emb.unstack().sort_index()
surv_by_emb.plot(kind='bar', stacked='True', color=["#3f3e6fd1", "#85c6a9"], ax = ax2)
plt.title('不同港口出发的乘客存活情况')
plt.legend(( 'Drowned', 'Survived'), loc=(1.04,0))
_ = plt.xticks(rotation=False)ax3 = fig.add_subplot(133)
class_by_emb = train_data.groupby('Embarked')['Pclass'].value_counts(normalize = True)
class_by_emb = class_by_emb.unstack().sort_index()
class_by_emb.plot(kind='bar', stacked='True', color = ['#eed4d0', '#cda0aa', '#a2708e'], ax = ax3)
plt.legend(('1st class', '2nd class', '3rd class'), loc=(1.04,0))
plt.title('不同港口出发的乘客的船舱等级分布')
_ = plt.xticks(rotation=False)plt.tight_layout()

总结:
我们知道泰坦尼克号上没有足够的船只可供所有乘客撤离。 在研究了有关乘客的信息之后,我们可以对谁在沉船事故中有更好的生存机会以及对乘客的
一般观察做出一些假设。
1、数据集中有891名乘客,其中有549名(61.6%)被淹,只有342名(38.4%)幸存。 但是我们知道,救生艇(16艘木质救生艇和4辆可折叠救生艇)
可以载运总乘客的53%。
2、所有乘客的年龄从0.17年到80岁不等,平均为29.88岁。 幸存乘客的平均年龄为28.23,比溺水乘客的平均年龄(仅我们知道幸存者的年龄)小2.39。
看起来年轻人有更大的生存机会。
3、船上的家庭人数似乎也对生存机会有影响:有两个大家庭,分别为8和11,他们来自训练数据集的所有成员都被淹死了。 我们可以观察到,拥有2人,
3人,4人家庭的幸存者所占百分比大于单身人士,然后,随着家庭规模的增加,幸存者所占的百分比会降低。
4、泰坦尼克号的大部分乘客都是三等舱。 就乘客人数而言,第二类是最小的。 尽管有先前确定的先决条件(平均而言,老年人死亡的可能性更高,
并且头等舱的平均年龄比其他舱位更高。而且,由100%头等舱组成的A层乘客的 溺水乘客的比例很高),头等舱的幸存者人数最多,而舱内幸存者的
比例最大。
5、三等舱机票的溺水乘客人数最多。但是,大多数头等舱的男性乘客被淹死,而女性几乎全部幸存下来。 三等舱,一半的女性得以幸存。
6、船上的男性总体上比女性多,这对每个舱位来说都是公平的,但是在三等舱中,男性的数量是女性的两倍多。
7、几乎有600名男性旅客没有家庭成员,只有200名女性,但是在普通家庭和大家庭中,女性旅客略多。
8、大多数乘客(914)登上南安普敦。 此外,南安普敦的溺水乘客比例最大。 270名乘客登上瑟堡,其中50%以上幸存下来(在培训数据集中)。
皇后镇(Queenstown)出发的旅客有123人,其中绝大多数是三等舱旅客。
9、泰坦尼克号幸存者分析是机器学习的入门案例,我做了一点资料的查询发现有一些是数据无法体现的,不得不说单从数据的角度还原当时情况
实在有很多不妥的地方,原因有以下几点:
(1)三等舱乘客中相当一部分是不懂英语的,看不懂路标指示,听不懂船员的指令。这一因素与社会地位无关。
(2)爱德华·约翰·史密斯船长在最后时刻下令“妇孺优先”,但是大副、二副对该命令的执行是不一致的,右舷大副默多克认为如果甲板上没有
女士儿童了,只要还有空位,男性乘客也可以登艇。所以从右舷放下的九艘救生艇上都有男性乘客,救生艇的乘坐率也比较高,其中有三艘满员。
而在左舷的二副莱托勒则把“女士和儿童优先”理解为“全船的女士和儿童都应当先于男性乘客登艇”。所以,左舷的救生艇其实是
“仅限女士和儿童”。从左舷放下的九艘救生艇中,只有三艘乘坐率略超过六成。
(3)考察头等舱幸存男性,他们主要集中右舷最早放下的三艘救生艇中,第一艘救生艇,一半座位是空的,一半乘客是男性,主要原因是一开始多数人
都没有认识到被认为“永不沉没”的铁达尼所面临的的危险。第二艘、第三艘救生艇男性乘客也占了近三分之一。还有一个原因是,右舷的救生艇位置
距离头等舱近。
(4)有少部分人主动放弃等艇机会,这样行为无疑闪烁着人性光辉。
所以单从数据的角度得出的结论显然不足以说明当时的情况。电影《萨利机长》中,计算机的模拟还原的情况是飞机完全可以不必迫降在河面,
也是数字还原结果与现实的不符。所以只知道分析数据的分析师不是好的分析师,结合对业务的理解才是关键,数据是辅助。
相关文章:
kaggle上经典泰坦尼克项目数据分析探索
之前了解在kaggle上这个项目很火,最近想要加强一下python数据分析,所以在kaggle上找到这个项目进行学习探索,下面是将一些学习资料以及过程整理出来。 一、首先我们了解一下项目背景以及如何找到这个项目。 kaggle项目地址: https://www.k…...
影刀魔法指令3.0:开启自动化新篇章
在数字化飞速发展的今天,自动化工具已经成为提升工作效率、优化工作流程的重要手段。影刀RPA作为一款强大的自动化软件,其最近推出的魔法指令3.0版本,更是让人大开眼界,为自动化操作带来了全新的可能性。 影刀魔法指令3.0简介 影…...
15 python 数据容器-字典
在 Python 的编程世界里,字典是一种超实用的数据类型,它就像打工人的工作资料夹,能把各种不同类型的信息有条理地存起来,还能快速找到你需要的内容。对于刚开始学习编程的小伙伴来说,掌握字典的用法,能让你…...
Linux的一些常见指令
一、ls指令 语法: ls (选项) 功能: ls可以查看当前目录下的所有文件和目录。 常用选项: -a:列出目录下的所有文件,包括以点(.)开头的隐含文件 。-d:将目录像文件一样显示,不显示其下的文件。…...
Pre-flash和Main flash
在相机拍照过程中,Pre-flash(预闪光) 和 Main flash(主闪光) 是常见的两种闪光灯使用模式,通常用于提高低光环境下的拍摄质量,尤其在自动曝光(AE)和自动对焦(…...
jmm-java内存模型
java内存模型----底层原理 底层原理 从Java代码到最终执行的CPU指令的流程: 最开始,我们编写的Java代码,是*.java文件在编译(javac命令)后,从刚才的*.java文件会变出一个新的Java字节码文件(…...
合宙780E开发学习-LUATOS-SOC云编译自定义固件
登录https://luatos.com 点击登录,使用合宙erp账号登录即可 点击右上角构建,点击右上角菜单新构建,自定义构建名称,可新建多个 勾选想要的组件 点击右上角保存修改,只有点击准备就绪(注意:一定…...
解决Centos使用yum命令报错“Cannot find a valid baseurl for repo: base/7/x86_64”问题
一、问题描述 我们在使用Centos7.9使用【sudo yum install influxdb2】命令安装influxDB数据库的时候提示“Loading mirror speeds from cached hostfile Could not retrieve mirrorlist http://mirrorlist.centos.org/release=7&arch=x86_64&repo=os&infra=stock …...
好用的Markdown阅读编辑器Typora破解记录
Typora破解 一、下载Typora二、安装Typora三、破解Typora 😀 记录一下Typora破解记录,怕不常用忘记咯,感觉自己现在的脑子就像我的肠子一样,刚装进去就么得了。。。😔 Typroa算是用起来很舒服的Markdown阅读器了吧&am…...
c#在work线程中怎样更新UI控件
最近笔者调试修改项目,碰到了c#在work线程中怎样更新UI控件中的场景,简单总结了下,主要有两个方法: 方法1:通过System.Windows.Application.Current.Dispatcher.Invoke来更新UI控件 System.Windows.Application.Curre…...
RabbitMQ三种队列深度解析:区别、场景与未来趋势
嗯,用户让我分析RabbitMQ三种队列的区别、应用场景、技术原理和未来趋势,还要写一篇三千字的文章。首先,我需要回顾一下搜索结果,看看有哪些资料可用。 根据搜索结果,RabbitMQ的三种队列是经典队列(Classi…...
自然语言处理(13:RNN的实现)
系列文章目录 第一章 1:同义词词典和基于计数方法语料库预处理 第一章 2:基于计数方法的分布式表示和假设,共现矩阵,向量相似度 第一章 3:基于计数方法的改进以及总结 第二章 1:word2vec 第二章 2:word2vec和CBOW模型的初步实现 第二章 3:CBOW模型…...
WebSocket接入SSL证书
目录 碎碎念解决方法创建 HTTPS WebSocket 服务器创建系统服务启动服务 碎碎念 在访问网站时,使用 HTTPS 非常重要。HTTPS 协议不仅可以确保数据传输的安全性,还可以防止中间人攻击和数据篡改等安全问题。任何没有 SSL 证书的内容都可能会被拒绝访问。因…...
无人机宽带自组网机载电台技术详解,50KM超远图数传输系统实现详解
以下是关于无人机宽带自组网机载电台技术以及50KM超远图数传输系统实现的详解: 无人机宽带自组网机载电台技术详解 无人机宽带自组网机载电台是一种专门为无人机设计的通信设备,它支持宽带数据传输和自组网功能。这种电台的实现技术涉及多个方面&#x…...
MySQL 表 t1 建立联合索引 (a, b, c),在 where a < ? and b > ? and c < ? 中哪些索引生效
文章目录 联合索引 abc 均范围扫描时的索引生效情况无回表 表数据量非常少无回表 表数据量多有回表总结 联合索引 abc 均范围扫描时的索引生效情况 场景:表 t1 建立联合索引 (a, b, c),在 where a < ? and b > ? and c < ? 中哪些索引生效…...
Spring Boot定时任务设置与实现
Spring Boot定时任务设置与实现 在Spring Boot中,可以使用Scheduled注解来创建定时任务。以下是一个简单的示例,展示了如何在项目启动后每5秒调用一次指定的方法。 1. 添加依赖 首先,确保你的pom.xml文件中包含Spring Boot的依赖ÿ…...
#vue中解决异步请求的竞态
// composables/useFetchWithoutRace.js import { ref } from vue; import axios from axios;// 定义一个可复用的 Composition 函数,处理带有竞态控制的异步请求 export function useFetchWithoutRace() {// 定义响应式变量 latestRequestId,用于追踪最…...
BP神经网络+NSGAII算法(保真)
BP神经网络NSGAII算法 非常适合用来当作实验验证自己的结论,构建一个神经网络模型,并使用NSGAII多目标优化算法来实现多领域的毕业论文的设计。仅仅使用简单的matlab代码就可以实现自己的多目标优化任务。 BP神经网络算法 我的任务是预测三个变量的值…...
【CXX-Qt】4.1 extern “RustQt“
QObjects Properties Methods Signals #[cxx_qt::bridge] mod ffi {extern "RustQt" {} }extern “RustQt” 部分是 CXX-Qt 桥接的核心,用于声明 Rust 类型和签名,使其可用于 Qt 和 C。 CXX-Qt 代码生成器使用你的 extern “RustQt” 部…...
每日一题-力扣-2829. k-avoiding 数组的最小总和 0326
解决"k-avoiding 数组的最小总和"问题 这道题有两种主要解法。 解法一:直接数学计算(最优解) 通过数学推导直接计算出结果,不需要构建实际的数组。 class Solution:def minimumSum(self, n: int, k: int) -> int…...
React 中的错误边界(Error Boundaries),如何使用它们捕获组件错误
大白话React 中的错误边界(Error Boundaries),如何使用它们捕获组件错误 在 React 里,错误边界就像是一个“小卫士”,专门负责在组件出现错误时挺身而出,避免整个应用因为一个小错误就崩溃掉。接下来我会详…...
OSI模型_TCP/IP模型_五层模型
文章目录 OSI模型_TCP/IP模型_五层模型模型对比模型层级对比关键区别对比 OSI模型OSI模型概述举例说明流程图示 TCP/IP 四层模型模型结构举例说明流程图示 TCP/IP 五层模型模型的结构举例说明流程图示 OSI模型_TCP/IP模型_五层模型 学OSI,用TCP/IP,分析选…...
HarmonyOS Next应用架构设计与模块化开发详解
引言 在HarmonyOS Next开发中,合理的应用架构设计和模块化开发是构建高效、可维护应用的关键。本文将深入探讨HarmonyOS Next应用的架构设计思路,并通过实际代码示例展示如何实现模块化开发。 应用架构设计 HarmonyOS Next应用通常采用分层架构设计&…...
SpringCould微服务架构之Docker(2)
Docker和虚拟机的差别: 虚拟机是在操作系统中模拟硬件设备,然后运行另外一个操作系统。...
LINUX基础IO [六] - 文件理解与操作
目录 前言 C语言文件操作回顾 文件的打开与关闭 文件的增删改查 文件系统调用 比特位方式的标志位传递原理 访问文件的本质 文件描述符fd 理解文件描述符fd 三个流的理解 文件描述符的分配规则 重定向再理解 输出重定向 输入重定向 如何理解一切皆文件 理解…...
拥抱人工智能大模型时代:大模型会改变我们的生活吗?
在这个科技日新月异的时代,人工智能(AI)正以前所未有的速度改变着我们的生活和工作方式。尤其是随着人工智能大模型(如ChatGPT、DeepSeek等)的崛起,人们对于AI技术的期待和关注达到了前所未有的高度。那么&…...
常见框架漏洞攻略-ThinkPHP篇
漏洞名称:Thinkphp5x远程命令执行及getshell 第一步:开启靶场 第二步:准备工具 第三步:启动工具,进行漏洞检测 #存在漏洞 1.目标存在tp5_invoke_func_code_exec_1漏洞2.目标存在tp5_dbinfo_leak漏洞payload:http://47…...
若依框架二次开发——若依集成 JSEncrypt 实现密码加密传输方式
文章目录 一、问题场景二、相关技术介绍1. RSA 加密算法2. JSEncrypt三、实现步骤1. 前端加密处理2. 后端解密处理3. 登录逻辑处理四、测试流程1. 前端测试2. 后端测试3. 运行效果五、总结一、问题场景 在 RuoYi 系统中,默认情况下,用户在登录时会将明文密码直接传输到服务器…...
rabbitmq承接MES客户端服务器
文章目录 背景整体架构概述方案详细步骤1. 数据库选型与搭建2. 设备端数据上传至数据库3. 搭建 RabbitMQ 服务器4. 数据同步模块(数据库到 RabbitMQ)5. MES 服务器从 RabbitMQ 接收数据6. 指令接收模块(RabbitMQ 到设备端) 7. MES…...
Linux touch命令
参考资料 Linux 常用命令 - touch 【创建空文件与修改时间戳】 目录 一. 用法简介二. 配合扩展字符,批量创建文件三. 修改文件的时间戳3.1 -t 配置项3.2 -d 配置项3.3 配合find命令实现批量时间戳修改 四. 结合 find 批量创建相同时间的新文件 一. 用法简介 ⏹当指…...
