版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
GE数字化工厂应用:工业数据分析与可视化教程1工业4.0与GE数字化工厂概述工业4.0,也被称为第四次工业革命,标志着制造业的数字化转型,通过物联网(IoT)、大数据、人工智能(AI)等技术,实现生产过程的智能化和自动化。GEDigitalPlantApplications正是在这一背景下,为工业领域提供数据分析与可视化解决方案的平台。1.1工业4.0的关键技术物联网(IoT):连接物理设备与数字世界,收集实时数据。大数据分析:处理海量数据,提取有价值的信息。人工智能与机器学习:预测维护,优化生产流程。云计算:提供弹性计算资源,支持数据处理和存储。边缘计算:在数据产生地附近处理数据,减少延迟。1.2GE数字化工厂的应用GEDigitalPlantApplications通过整合上述技术,为工业客户提供以下服务:预测性维护:通过分析设备运行数据,预测潜在故障,减少停机时间。生产优化:利用数据分析,优化生产流程,提高效率。质量控制:实时监控生产过程,确保产品质量。能源管理:分析能源使用数据,实现节能减排。2数据分析与可视化的重要性在工业4.0的背景下,数据分析与可视化是实现智能工厂的关键。它们帮助工厂管理者和工程师从海量数据中快速获取洞察,做出更明智的决策。2.1数据分析原理数据分析涉及数据清洗、数据探索、模型构建和结果解释等步骤。例如,使用Python的Pandas库进行数据清洗和探索:importpandasaspd
#读取数据
data=pd.read_csv('production_data.csv')
#数据清洗,去除缺失值
data=data.dropna()
#数据探索,计算平均生产时间
average_production_time=data['production_time'].mean()
print(f'平均生产时间:{average_production_time}分钟')2.2数据可视化示例数据可视化是将数据以图表形式展示,便于理解和沟通。使用Matplotlib库绘制生产时间的分布图:importmatplotlib.pyplotasplt
#绘制生产时间的直方图
plt.hist(data['production_time'],bins=20,color='blue',alpha=0.7)
plt.title('生产时间分布')
plt.xlabel('时间(分钟)')
plt.ylabel('频数')
plt.show()2.3数据分析与可视化的价值提高决策效率:快速识别生产瓶颈和效率提升点。增强沟通效果:通过图表,非技术背景的管理者也能理解数据。促进持续改进:基于数据分析,持续优化生产流程。通过上述内容,我们了解到工业4.0与GE数字化工厂的紧密联系,以及数据分析与可视化在这一领域的重要作用。掌握这些技术,将有助于推动工业领域的数字化转型,提升生产效率和产品质量。3数据采集与预处理3.1工业数据采集方法在工业环境中,数据采集是通过各种传感器、设备和系统来实现的,这些数据源可以是温度传感器、压力传感器、流量计、摄像头、RFID标签等。数据采集的目标是收集反映工业过程状态的信息,以便进行分析和决策。以下是一种常见的工业数据采集方法——使用Python和pyserial库从串行通信设备读取数据的示例:#导入必要的库
importserial
importtime
#设置串行通信参数
ser=serial.Serial('COM3',9600,timeout=1)#假设设备连接在COM3端口,波特率为9600
#读取数据
defread_data():
whileTrue:
line=ser.readline().decode('utf-8').rstrip()#读取一行数据并解码
ifline:
print(line)#打印读取的数据
time.sleep(1)#暂停1秒,避免连续读取过快
#主函数
if__name__=='__main__':
read_data()3.1.1示例描述上述代码展示了如何使用Python的pyserial库从串行通信设备读取数据。首先,我们导入了serial库,并设置了串行通信的端口和波特率。然后,定义了一个read_data函数,该函数会持续读取设备发送的数据,将其解码为UTF-8格式,并打印出来。最后,通过if__name__=='__main__':确保当此脚本直接运行时,会调用read_data函数。3.2数据清洗与预处理技术数据清洗与预处理是数据分析的关键步骤,它包括处理缺失值、异常值、重复数据,以及数据转换和标准化等。以下是一个使用Python和pandas库进行数据清洗的示例:#导入必要的库
importpandasaspd
#创建示例数据
data={'温度':[20,25,30,None,35],
'压力':[100,120,110,130,125],
'流量':[50,55,None,60,65]}
df=pd.DataFrame(data)
#处理缺失值
defhandle_missing_values(df):
#使用平均值填充缺失值
df['温度'].fillna(df['温度'].mean(),inplace=True)
df['流量'].fillna(df['流量'].mean(),inplace=True)
returndf
#主函数
if__name__=='__main__':
df=handle_missing_values(df)
print(df)3.2.1示例描述在这个示例中,我们首先创建了一个包含缺失值的pandasDataFrame。然后,定义了一个handle_missing_values函数,该函数使用每列的平均值来填充缺失值。最后,我们调用了这个函数,并打印了处理后的数据。数据预处理还包括数据转换和标准化,例如将非数值数据转换为数值数据,或对数值数据进行标准化处理,使其具有相同的尺度。以下是一个使用pandas和scikit-learn库进行数据标准化的示例:#导入必要的库
importpandasaspd
fromsklearn.preprocessingimportStandardScaler
#创建示例数据
data={'温度':[20,25,30,35,40],
'压力':[100,120,110,130,125]}
df=pd.DataFrame(data)
#数据标准化
defstandardize_data(df):
scaler=StandardScaler()
df_scaled=pd.DataFrame(scaler.fit_transform(df),columns=df.columns)
returndf_scaled
#主函数
if__name__=='__main__':
df_scaled=standardize_data(df)
print(df_scaled)3.2.2示例描述在这个示例中,我们使用了scikit-learn的StandardScaler类来标准化数据。首先,创建了一个包含温度和压力数据的DataFrame。然后,定义了一个standardize_data函数,该函数使用StandardScaler对数据进行标准化处理,即减去平均值并除以标准差。最后,我们调用了这个函数,并打印了标准化后的数据。通过这些示例,我们可以看到数据采集与预处理在工业数据分析中的重要性,以及如何使用Python和相关库来实现这些功能。数据的准确性和质量直接影响到后续分析的可靠性和有效性,因此,数据预处理是不可忽视的步骤。4数据分析基础4.1统计分析入门4.1.1原理统计分析是数据分析的基础,它通过收集、整理、分析数据,帮助我们理解数据的分布特征,识别数据中的模式和趋势,以及进行假设检验。在工业数据分析中,统计分析用于监控生产过程,评估设备性能,以及预测未来趋势。4.1.2内容4.1.2.1数据描述中心趋势度量:平均数、中位数、众数。离散程度度量:方差、标准差、四分位数间距。4.1.2.2假设检验t-检验:用于比较两个样本均值是否显著不同。ANOVA:分析多个样本均值之间的差异。4.1.2.3相关性分析皮尔逊相关系数:衡量两个变量之间的线性相关性。4.1.2.4示例代码importnumpyasnp
importpandasaspd
fromscipyimportstats
#创建示例数据
data=pd.DataFrame({
'temperature':np.random.normal(20,2,100),
'pressure':np.random.normal(1013,10,100)
})
#计算描述性统计
mean_temp=data['temperature'].mean()
median_temp=data['temperature'].median()
std_temp=data['temperature'].std()
#输出统计结果
print(f"平均温度:{mean_temp}")
print(f"中位数温度:{median_temp}")
print(f"温度标准差:{std_temp}")
#进行t-检验
t_stat,p_value=stats.ttest_ind(data['temperature'],data['pressure'])
#输出t-检验结果
print(f"t-统计量:{t_stat}")
print(f"p-值:{p_value}")4.1.3解释上述代码首先导入了必要的库,然后创建了一个包含温度和压力数据的DataFrame。通过numpy生成了正态分布的随机数据。接着,计算了温度数据的平均值、中位数和标准差,这些是描述数据中心趋势和离散程度的基本统计量。最后,使用scipy库中的ttest_ind函数进行了t-检验,比较了温度和压力数据的均值差异,输出了t-统计量和p-值,用于判断两组数据均值的显著性差异。4.2时间序列分析4.2.1原理时间序列分析是研究数据随时间变化的模式和趋势。在工业环境中,时间序列数据通常来自传感器,用于监测设备的运行状态。通过分析这些数据,可以识别设备的异常行为,预测未来的运行状态,以及优化生产过程。4.2.2内容4.2.2.1趋势分析移动平均:平滑数据,识别长期趋势。指数平滑:加权移动平均,给予近期数据更多权重。4.2.2.2季节性分析分解时间序列:将时间序列分解为趋势、季节性和随机成分。4.2.2.3预测ARIMA模型:自回归整合滑动平均模型,用于预测未来值。4.2.2.4示例代码importpandasaspd
fromstatsmodels.tsa.seasonalimportseasonal_decompose
fromstatsmodels.tsa.arima.modelimportARIMA
#创建示例时间序列数据
date_rng=pd.date_range(start='1/1/2018',end='1/01/2023',freq='D')
ts_data=pd.Series(np.random.normal(100,10,size=len(date_rng)),index=date_rng)
#进行时间序列分解
result=seasonal_decompose(ts_data,model='additive',period=365)
#输出分解结果
result.plot()
plt.show()
#训练ARIMA模型
model=ARIMA(ts_data,order=(1,1,0))
model_fit=model.fit()
#预测未来值
forecast=model_fit.forecast(steps=30)
#输出预测结果
print(f"未来30天的预测值:{forecast}")4.2.3解释这段代码首先创建了一个从2018年1月1日到2023年1月1日的日期范围,并生成了一个随机的时间序列数据。使用statsmodels库中的seasonal_decompose函数对时间序列进行了分解,识别了趋势、季节性和随机成分。通过ARIMA模型对时间序列进行了预测,order=(1,1,0)表示使用了自回归和差分,但没有滑动平均成分。最后,输出了未来30天的预测值,这在工业预测性维护中非常有用,可以帮助预测设备的未来状态,提前进行维护。4.3预测性维护原理4.3.1原理预测性维护是通过分析设备的历史和实时数据,预测设备的未来状态,从而在设备发生故障前进行维护。它依赖于机器学习和统计模型,能够减少非计划停机时间,提高设备的可用性和效率。4.3.2内容4.3.2.1数据收集传感器数据:温度、压力、振动等。设备状态数据:运行时间、维护记录等。4.3.2.2特征工程时间序列特征:如移动平均、标准差等。设备状态特征:如运行状态、维护间隔等。4.3.2.3模型训练监督学习:使用已知的故障数据训练模型。无监督学习:识别设备的正常运行模式,检测异常。4.3.2.4预测与决策预测设备故障:基于模型预测设备的健康状态。制定维护计划:根据预测结果,提前安排维护。4.3.2.5示例代码importpandasaspd
fromsklearn.ensembleimportIsolationForest
fromsklearn.model_selectionimporttrain_test_split
#加载示例数据
data=pd.read_csv('machine_data.csv')
#特征工程
data['moving_avg']=data['temperature'].rolling(window=10).mean()
data['std_dev']=data['temperature'].rolling(window=10).std()
#数据分割
X_train,X_test=train_test_split(data,test_size=0.2,random_state=42)
#训练IsolationForest模型
model=IsolationForest(contamination=0.1)
model.fit(X_train[['moving_avg','std_dev']])
#预测异常值
predictions=model.predict(X_test[['moving_avg','std_dev']])
#输出预测结果
print(f"预测的异常值:{predictions}")4.3.3解释这段代码展示了如何使用IsolationForest模型进行预测性维护。首先,从CSV文件中加载了机器数据,然后进行了特征工程,计算了温度数据的移动平均和标准差。接着,使用train_test_split函数将数据分割为训练集和测试集。IsolationForest模型被训练来识别异常值,contamination=0.1表示假设10%的数据是异常的。最后,模型对测试集进行了预测,输出了预测的异常值,这可以帮助识别设备的潜在故障,从而进行预测性维护。以上三个部分详细介绍了工业数据分析与可视化中的基础统计分析、时间序列分析以及预测性维护原理,通过具体的代码示例展示了如何在Python中实现这些分析。这些技术在工业领域中至关重要,能够帮助工程师和分析师更好地理解设备状态,优化生产过程,减少非计划停机时间。5数据可视化技术5.1基本可视化图表5.1.1概述基本可视化图表是数据可视化中最常见的元素,它们帮助我们直观地理解数据的分布、趋势和关系。常见的基本图表包括折线图、柱状图、饼图、散点图等。5.1.2折线图示例折线图用于显示数据随时间的变化趋势。下面是一个使用Python的matplotlib库绘制折线图的例子。importmatplotlib.pyplotasplt
importnumpyasnp
#数据样例
time=np.arange(0,10,0.1)
data=np.sin(time)
#创建折线图
plt.plot(time,data)
plt.title('时间与数据变化趋势')
plt.xlabel('时间')
plt.ylabel('数据值')
plt.grid(True)
plt.show()描述:此代码生成一个时间序列的正弦波折线图,展示了数据随时间的周期性变化。5.1.3柱状图示例柱状图用于比较不同类别的数据量。下面是一个使用matplotlib绘制柱状图的例子。importmatplotlib.pyplotasplt
#数据样例
categories=['A','B','C','D','E']
values=[30,25,40,45,35]
#创建柱状图
plt.bar(categories,values)
plt.title('不同类别数据量比较')
plt.xlabel('类别')
plt.ylabel('数据量')
plt.show()描述:此代码生成一个柱状图,比较了五个不同类别的数据量。5.1.4饼图示例饼图用于展示各部分占整体的比例。下面是一个使用matplotlib绘制饼图的例子。importmatplotlib.pyplotasplt
#数据样例
labels=['PartA','PartB','PartC']
sizes=[55,30,15]
#创建饼图
plt.pie(sizes,labels=labels,autopct='%1.1f%%',startangle=140)
plt.title('各部分占整体比例')
plt.show()描述:此代码生成一个饼图,显示了三个部分在整体中的占比。5.1.5散点图示例散点图用于展示两个变量之间的关系。下面是一个使用matplotlib绘制散点图的例子。importmatplotlib.pyplotasplt
importnumpyasnp
#数据样例
x=np.random.rand(50)
y=np.random.rand(50)
#创建散点图
plt.scatter(x,y)
plt.title('变量X与变量Y的关系')
plt.xlabel('X')
plt.ylabel('Y')
plt.show()描述:此代码生成一个散点图,展示了50个随机点在X-Y平面上的分布,帮助我们观察两个变量之间的潜在关系。5.2高级数据可视化工具5.2.1概述高级数据可视化工具提供了更复杂、更精细的图表类型,如热力图、树状图、桑基图等,以及更强大的交互功能,如Plotly和Bokeh等库。5.2.2Plotly示例Plotly是一个强大的交互式图表库,下面是一个使用Plotly绘制交互式散点图的例子。importplotly.expressaspx
#数据样例
df=px.data.iris()
#创建交互式散点图
fig=px.scatter(df,x="sepal_width",y="sepal_length",color="species",
title='鸢尾花数据集的交互式散点图')
fig.show()描述:此代码使用Plotly的express模块,从鸢尾花数据集中生成一个交互式散点图,用户可以通过悬停在点上来查看具体数据信息。5.2.3Bokeh示例Bokeh是一个用于创建交互式Web图表的库,下面是一个使用Bokeh绘制动态折线图的例子。frombokeh.plottingimportfigure,show
frombokeh.modelsimportColumnDataSource
frombokeh.layoutsimportcolumn
frombokeh.ioimportcurdoc
#数据样例
source=ColumnDataSource(data=dict(x=[1,2,3,4,5],y=[6,7,2,4,5]))
#创建动态折线图
p=figure(title="动态折线图示例",x_axis_label='X轴',y_axis_label='Y轴')
p.line('x','y',source=source,line_width=2)
#更新数据
defupdate():
new_data=dict(x=[1,2,3,4,5],y=[np.random.randint(0,10)for_inrange(5)])
source.data=new_data
#添加定时器
curdoc().add_periodic_callback(update,2000)
show(column(p))描述:此代码使用Bokeh创建了一个动态折线图,每隔2秒自动更新数据,展示了数据的实时变化。5.3交互式仪表板设计5.3.1概述交互式仪表板设计是将多个图表和控件组合在一起,形成一个用户可以操作的界面,以探索数据的不同方面。Dash和Streamlit是两个流行的用于创建交互式仪表板的Python库。5.3.2Dash示例Dash是一个由Plotly开发的框架,用于构建数据分析应用。下面是一个使用Dash创建简单交互式仪表板的例子。importdash
importdash_core_componentsasdcc
importdash_html_componentsashtml
fromdash.dependenciesimportInput,Output
importplotly.expressaspx
importpandasaspd
#数据样例
df=pd.DataFrame({
"Fruit":["Apples","Oranges","Bananas","Apples","Oranges","Bananas"],
"Amount":[4,1,2,2,4,5],
"City":["SF","SF","SF","Montreal","Montreal","Montreal"]
})
#创建Dash应用
app=dash.Dash(__name__)
#应用布局
app.layout=html.Div([
dcc.Graph(id='graph-with-slider'),
dcc.Slider(
id='year-slider',
min=df['City'].min(),
max=df['City'].max(),
value=df['City'].min(),
marks={str(city):str(city)forcityindf['City'].unique()},
step=None
)
])
#更新图表
@app.callback(
Output('graph-with-slider','figure'),
Input('year-slider','value'))
defupdate_figure(selected_city):
filtered_df=df[df.City==selected_city]
fig=px.bar(filtered_df,x="Fruit",y="Amount",color="Fruit")
returnfig
#运行应用
if__name__=='__main__':
app.run_server(debug=True)描述:此代码使用Dash创建了一个包含滑块的交互式仪表板,用户可以通过滑块选择不同的城市,查看该城市中不同水果的数量。5.3.3Streamlit示例Streamlit是一个用于快速创建和共享数据应用的工具,下面是一个使用Streamlit创建简单交互式仪表板的例子。importstreamlitasst
importpandasaspd
importnumpyasnp
importmatplotlib.pyplotasplt
#数据样例
data=pd.DataFrame(np.random.randn(10,2),columns=['x','y'])
#创建Streamlit应用
st.title('交互式数据仪表板')
#选择图表类型
chart_type=st.sidebar.selectbox('选择图表类型',['折线图','柱状图'])
#绘制图表
ifchart_type=='折线图':
st.line_chart(data)
elifchart_type=='柱状图':
st.bar_chart(data)
#显示数据
st.write('数据样例')
st.dataframe(data)描述:此代码使用Streamlit创建了一个简单的交互式仪表板,用户可以在侧边栏选择图表类型(折线图或柱状图),并查看随机生成的数据。以上示例展示了如何使用不同的库和技术来创建和设计数据可视化图表和交互式仪表板。通过这些工具,我们可以更有效地探索和理解复杂数据集的特征和模式。6GE数字化工厂应用实践6.1Predix平台介绍Predix是GE(通用电气)公司开发的一个工业互联网平台,旨在为工业数据的收集、分析和应用提供一个统一的框架。它利用云计算技术,支持各种工业设备的连接,收集大量数据,并通过高级分析工具和应用程序,帮助工业领域的企业优化运营,提高效率,减少成本。Predix平台的核心功能包括:数据采集与集成:通过各种传感器和设备收集数据,然后将这些数据集成到一个统一的平台中。数据分析与洞察:提供数据分析工具,帮助企业从数据中提取有价值的信息,如预测性维护、性能优化等。应用开发与部署:允许开发者创建和部署工业应用程序,以解决特定的工业问题。安全与合规:确保数据的安全性和合规性,保护工业资产免受网络攻击。6.2使用Predix进行数据分析在Predix平台上进行数据分析,通常涉及以下几个步骤:数据接入:首先,需要将工业设备的数据接入Predix平台。这可以通过安装传感器和使用Predix的连接服务来实现。数据预处理:接入的数据可能需要进行清洗和预处理,以去除噪声和异常值,确保数据质量。数据分析:使用Predix提供的分析工具或自定义的分析算法,对数据进行深入分析。例如,可以使用机器学习算法预测设备的故障。6.2.1示例:使用Python进行预测性维护分析假设我们有一组工业设备的运行数据,包括设备ID、运行时间、温度、压力等参数。我们将使用Python和Predix的API来预测设备的潜在故障。#导入必要的库
importpandasaspd
importnumpyasnp
fromsklearn.model_selectionimporttrain_test_split
fromsklearn.ensembleimportRandomForestClassifier
fromsklearn.metricsimportaccuracy_score
#从Predix平台获取数据
#假设数据存储在Predix的TimeSeries服务中
#这里使用伪代码表示数据获取过程
data=predix_time_series_service.get_data('device_data')
#将数据转换为PandasDataFrame
df=pd.DataFrame(data)
#数据预处理
#假设我们需要处理缺失值
df=df.fillna(df.mean())
#特征选择
features=df[['temperature','pressure','vibration']]
target=df['is_fault']
#划分训练集和测试集
X_train,X_test,y_train,y_test=train_test_split(features,target,test_size=0.2,random_state=42)
#创建随机森林分类器
clf=RandomForestClassifier(n_estimators=100)
#训练模型
clf.fit(X_train,y_train)
#预测
predictions=clf.predict(X_test)
#评估模型
accuracy=accuracy_score(y_test,predictions)
print(f'预测准确率:{accuracy}')在这个例子中,我们使用了随机森林分类器来预测设备故障。首先,我们从Predix平台获取了设备数据,并使用Pandas库进行数据预处理。然后,我们选择了温度、压力和振动作为预测模型的特征,并将数据集划分为训练集和测试集。最后,我们训练了模型,并在测试集上进行了预测,计算了预测的准确率。6.3案例研究:可视化在工业环境中的应用可视化是工业数据分析中的一个重要环节,它可以帮助我们更直观地理解数据,发现数据中的模式和趋势。在Predix平台上,可以使用各种可视化工具,如PredixUI或自定义的可视化应用程序,来展示工业数据。6.3.1示例:使用PredixUI创建设备状态仪表板PredixUI是一个基于Web的开发框架,用于创建工业应用程序的用户界面。下面是一个使用PredixUI创建设备状态仪表板的简化示例:创建一个新的PredixUI项目:在Predix开发环境中,选择“创建项目”,并选择PredixUI模板。设计仪表板布局:使用PredixUI的布局工具,设计仪表板的布局,包括图表、表格和仪表盘等组件。连接数据源:将仪表板连接到PredixTimeSeries服务,以获取实时的设备数据。配置可视化组件:为每个组件配置数据源和显示参数,如图表类型、时间范围等。测试和部署:在开发环境中测试仪表板,确保所有组件都能正确显示数据,然后部署到生产环境。通过这个过程,我们可以创建一个实时显示设备状态的仪表板,帮助操作人员监控设备的运行情况,及时发现潜在问题。以上就是使用Predix平台进行工业数据分析与可视化的基础教程。通过Predix,我们可以更有效地收集、分析和展示工业数据,从而提高工业运营的效率和安全性。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 培养思维能力的阅读书单
- 北师大版初中物理压强教学反思
- 苏教版六上数学考试题
- 新版苏教版中学数学角的教学设计
- 四年级下册北师大版语文学习疑问解答
- 嘉兴市小学人教版亲子科学实验
- 引流管的护理重点
- 快速掌握北师大版角课件
- 北师大四年级语文下册知识点解读
- 心肺转流术后护理
- 建筑装饰设计收费标准
- 医院感染监测清单
- 云南省饮用水生产企业名录534家
- 2022年中华医学会规章制度
- 2022年上海中考预测英语考纲单词默写
- 高中历史 选择性必修一 当代中国的法治与精神文明建设 课件
- 主观幸福感(GWB)量表
- 9.《复活》课件28张2021—2022学年统编版高中语文选择性必修上册
- 校本课程《硬笔书法》教案(完整版)
- 乳制品食品安全管理制度.doc
- 第5章数字影像与特征提取
评论
0/150
提交评论