MLOps极致细节:14. Azure ML案例:数据集预处理
作者:互联网
MLOps极致细节:14. Azure ML案例:数据集预处理
这一章节我们将介绍我们在Azure ML案例中所使用的数据集,并且对其进行一些预处理,包括填补空缺,编码,添加特征等。
- Win10
- IDE:VSCode
- Anaconda
- 代码地址
文章目录
1 搭建虚拟环境
(我们将代码从gitee上clone下来。)
首先,我们在Windows的平台下安装Anaconda3。具体的安装步骤此处略过,参见Anaconda的官方文档。
安装完后,新建虚拟环境。使用conda create -n [your_env_name] python=X.X(3.6)
命令创建python版本为X.X、名字为your_env_name的虚拟环境。根据Install the Azure Machine Learning SDK for Python描述,如果是要安装azureml-core
,最好对应的python版本是3.6或者3.7。
安装完默认的依赖后,我们进入虚拟环境:conda activate [your_env_name]
。注意,如果需要退出,则输入conda deactivate
。另外,如果Terminal没有成功切换到虚拟环境,可以尝试conda init powershell
,然后重启terminal。
然后,我们在虚拟环境中下载好相关依赖:pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
requirements.txt
文件包括:
mlflow==1.23.1
azureml-sdk==1.39.0
pandas==1.1.5
matplotlib==3.3.4
seaborn==0.11.2
scikit-learn==1.0.2
这里,azureml-sdk
指的是Azure机器学习SDK。
2 数据集预处理
这里我们所使用的数据集存放于Dataset
文件夹下:weather_dataset_raw.csv
。我们的目标是通过搭建一个ML模型来至少提前4小时预测当地的天气是否有雨。
数据包括:
以下为每一列的名称和格式
S_No int64
Timestamp object
Location object
Temperature_C float64
Apparent_Temperature_C float64
Humidity float64
Wind_speed_kmph float64
Wind_bearing_degrees int64
Visibility_km float64
Pressure_millibars float64
Weather_conditions object
2.1 填补空缺:tf.fillna
在查看数据的过程中,我们发现,Weather_conditions
这一列有一些是空着的,所以,我们这里先将空白或者na的值改为上一行的值。
if df.isnull().values.any():
df['Weather_conditions'].fillna(method='ffill',inplace=True,axis=0)
除此之外,Timestamp
列为object 格式,需要更改为DateTime格式 :
df['Timestamp'] = pd.to_datetime(df['Timestamp'])
2.2 编码:LabelEncoder
另外由于我们的目标是预测天气是否有雨,所以原来的标签:rain, snow, clear,可以变为rain, no_rain:
print("Collect labels of Weather_conditions column with frequencies: {0}".format(df.Weather_conditions.value_counts()))
df["Weather_conditions"].replace({"snow": "no_rain", "clear": "no_rain"}, inplace=True)
然后我们对其编码,rain, no_rain分别对应0和1:
le = LabelEncoder()
y = df['Weather_conditions']
y = le.fit_transform(y)
并且我们新加一列currentWeather
,并且我们将Weather_conditions
这一列删除:
y = pd.DataFrame(data=y, columns=["currentWeather"])
df = pd.concat([df, y], axis=1)
df.drop(['Weather_conditions'],axis=1,inplace=True)
2.3 新增特征
因为我们的任务是预测未来4小时的天气状况(是否有雨),因此我们通过将currentWeather
移动四行创建了一个名为futureWeather
的新特征,需要注意的是,导入的数据每行记录的时间间隔为一小时。
df['featureWeather'] = df.currentWeather.shift(4, axis = 0)
df.dropna(inplace=True)
df['featureWeather'] = df['featureWeather'].apply(np.int64)
2.4 特征的相关性
我们可以通过皮尔逊相关系数来观察特征之间的相关性:
corrMatrix = df.corr()
sn.heatmap(corrMatrix, annot=True)
plt.show()
比如,从上图来看,我们发现,Temperature_C
和Apparent_Temperature_C
的相关性高达0.99,那么我们就不用把Apparent_Temperature_C
放进模型里面。另外,S_No
指的是index值,所以我们也不用将其放入模型。
df.drop(['S_No', 'Apparent_Temperature_C'],axis=1,inplace=True)
最后,我们将处理完的数据保存:
df.to_csv('Dataset/weather_dataset_processed.csv',index=False)
2.5 生成训练数据集以及验证数据集
经过了上述的数据预处理步骤,最后我们需要将现有数据分为训练数据集以及验证数据集,然后保存到本地。
# 我们将处理完的数据分为训练数据集以及验证数据集
dfTrn = df.iloc[:int(8/10*df.shape[0])]
dfVal = df.drop(dfTrn.index)
# 将两个数据集保存到本地
dfTrn.to_csv('Dataset/training_data.csv',index=False)
dfVal.to_csv('Dataset/validation_data.csv',index=False)
标签:虚拟环境,14,数据,df,ML,Weather,Azure,csv,conditions 来源: https://blog.csdn.net/m0_67392273/article/details/123626746