Импорт необходимых модулей
from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestRegressor import matplotlib.pyplot as plt import joblib from sklearn.preprocessing import LabelEncoder import seaborn as sns import pandas as pd import numpy as np
Загрузка набора данных
df = pd.read_csv(“datasets/weatherHistory.csv”) df.head(3)
Предварительная обработка данных
проверка типов данных каждого столбца
df.dtypes
Проверка нулевых значений во фрейме данных
df.isnull().sum()
Как мы видим, столбец «Precip Type» содержит 517 пустых строк, поэтому мы просто отбрасываем этот столбец. И мы даже отбрасываем некоторые другие столбцы, потому что они не имеют отношения к модели, которую мы хотим разработать.
df = df.drop([‘Precip Type’, ‘Formatted Date’, ‘Apparent Temperature ©’, ‘Daily Summary’], axis= 1) df.head()
Визуализация данных
Мы строим тепловую карту, чтобы проверить связь между переменными или просто столбцами.
f,ax = plt.subplots(figsize=(8, 8)) sns.heatmap(df.corr(), annot=True,ax=ax) plt.show()
df[‘Temperature ©’].hist()
df[‘Humidity’].hist()
df[‘Wind Speed (km/h)’].hist()
df['Loud Cover'].hist()
Как мы видим на приведенном выше графике, значение «Loud Cover» не меняется, поэтому мы опускаем этот столбец.
df = df.drop(['Loud Cover'], axis = 1)
теперь мы построим диаграмму давления
plt.boxplot(df['Pressure (millibars)'])
На приведенном выше графике мы видим, что значение давления равно «0», что недопустимо, поэтому давайте заменим его средним значением.
pressure_median = df['Pressure (millibars)'].median() def pressure(x): if x==0: return x + pressure_median else: return x df["Pressure (millibars)"] = df.apply(lambda row:pressure(row["Pressure (millibars)"]) , axis = 1)
Теперь давайте посмотрим на коробчатую диаграмму
plt.boxplot(df['Pressure (millibars)'])
df.head()
Значения во фрейме данных содержат много десятичных знаков, поэтому давайте округлим их.
df = df.round({"Temperature (C)" : 3, "Wind Speed (km/h)" : 0, "Pressure (millibars)" : 0, "Visibility (km)" : 0}) df.head()
Как мы знаем, модель принимает только числовые значения в качестве входных данных, но столбец «Сводка» не является числовым, поэтому позвольте метке кодировать столбец.
le = LabelEncoder() df["Summary"] = le.fit_transform(df['Summary']) df.head()
Разделение кадра данных
X = df.drop([‘Temperature ©’], axis=1) y = df['Temperature (C)'] X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=21) X_test.head()
model = RandomForestRegressor() model.fit(X_train, y_train)
y_pred = model.predict(X_test) y_pred
Сохранение модели
joblib.dump(model,’model.pkl’)
Прогноз погоды —2. Локальное развертывание модели машинного обучения с помощью Flask
Создайте отдельный каталог для проекта и сохраните модель в этом каталоге. Я назвал каталог «колба. varshithagudimalla.medium.com »