КОМАНДЫ ДЛЯ PYTHON
20.12.2020, 17:44. Показов 1201. Ответов 0
| Python | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| # Подключаем библиотеки
import pandas as pd # библиотека для обработки и анализа данных
import numpy as np # библиотека для для работы с многомерными массивами и поддержки высокоуровневых математических функций
import matplotlib.pyplot as plt # библиотека построения графиков
import seaborn as sns # библиотека визуализации статистики, высокоуровневая, на основе matplotlib
from datetime import date # импорт модуля для работы с датами
from IPython.core.pylabtools import figsize # импорт модуля для для задания размера графических элементов
#sns.set(font_scale = 2)
from sklearn.preprocessing import LabelEncoder # импорт модуля кодировщика данных
from sklearn.preprocessing import StandardScaler # импорт модуля для масштабирования
from sklearn.model_selection import train_test_split # импорт модуля разделения на тестовую и обучающую выборки
from sklearn.ensemble import RandomForestClassifier # загрузка классификатора дерева решений
from sklearn.tree import DecisionTreeClassifier # загрузка классификатора случайный лес
from sklearn.linear_model import LinearRegression # загрузка классификатора линейная модель регрессии
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix, mean_squared_error, r2_score
# импорт модулей accuracy_score(Классификационная оценка точности.)
# импорт модулей classification_report(Создаёт текстовый отчет, показывающий основные показатели классификации)
# импорт модулей confusion_matrix(Вычисляет матрицу неточностей, чтобы оценить точность классификации.)
# импорт модуля mean_squared_error(Среднеквадратичная ошибка регрессии потерь)
# импорт модулей r2_score(R ^ 2 (коэффициент детерминации) функция оценки регрессии) |
|
ЗАГРУЗКА ДАННЫХ
| Python | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| # Загружаем данные
df = pd.read_csv("DF.csv", index_col='id', low_memory=False)
#Представляем данные в виде таблицы. Просмотр первых 5 строк.
df.head(5)
#Выведем на экран основную информацию о наборе данных и признаках
df.info()
# размер дата сета
df.shape
# список колонок
df.columns
# транспонированная матрица статистических характеристик
df.describe().T |
|
ПРЕДОБРАБОТКА ДАННЫХ
| Python | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
| print(df.isna().sum()) # вывод количества неизвестных значений (NaN) в столбцах
print(df.isna().sum() / len(df) * 100) # процент пропущенных значений в колонках
#Избавляемся от пустого столбца(furnished)
df = df.drop(['__'], axis = 1)
#поиск дубликатов строк
print(df.shape, df.drop_duplicates().shape)
#удаляем дубликаты
df = df.drop_duplicates()
#Избавляемся от пустых значений (на сегодняшнюю дату)
df[__] = df['__'].fillna(value=date.today())
#Избавляемся от пустых значений, заменив их на медианные значения (для количественных признаков)(size)
df['__'] = df['__'].fillna(value=df['__'].median())
#удаляем строки где есть NaN
df = df[pd.notnull(df['__'])]
print(df.isna().sum()) # вывод количества неизвестных значений (NaN) в столбцах
# разнообразные значения
df["__"].unique()
# словарь перекодировки по данным описания
d = {'One' : '1', 'Two' : '2', 'Three' : '3' }
df['__'] = df['__'].map(d)
df['__'].value_counts()
#Переводим значения одной колонки в другую
df["_1_"].loc[df['_2_'] == 'RUB'] = df["_1_"]*10
#Меняем тип данных
df['__'] = pd.to_datetime(df['__'])
df['__'] = df['__'].astype(str).astype(int) |
|
ОТБОР ПРИЗНАКОВ
| Python | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| figsize(10, 5)
# Распределение
ax = sns.countplot(y = '__', palette = 'Set1', data = df)
ax.set(title = 'Распределение __ по количеству',
xlabel = 'Количество', ylabel = 'Возраст')
plt.show()
# зависимости __ от числовых признаков
plt.figure(figsize = (10,8))
sns.heatmap(df.corr(), annot = True, fmt = ".01f")
# категориальные признаки необходимо закодировать
le = LabelEncoder() # объект класса кодировщика
df["__"] = le.fit_transform(df["__"]) #кодирование
# выровняем разбросы по переменным
scal = StandardScaler() # создаем объект класса
# матожидание будет 0, дисперсия 1
df_scal = scal.fit_transform(df_for_analis.drop("__", axis = 1))
pd.DataFrame(df_scal, columns=df_for_analis.drop("__", axis = 1).columns) |
|
РАЗБИЕНИЕ ОБРАБОТАННЫХ ДАННЫХ НА ОБУЧАЮЩУЮ И ТЕСТИРУЮЩУЮ
| Python | 1
2
3
4
5
| x = df_scal.copy() # копирует массив в x
y = df["building_age"] # целевая переменная y
#выборка не сбалансированная по классам, поэтому проведение случайное разбиение, выровненное по целевой переменной
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.3, random_state = 1, stratify = y) |
|
КЛАССИФИКАЦИЯ ОБЪЕКТОВ
| Python | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
| DT_Classifier = DecisionTreeClassifier(random_state=1) # создаем классификатор Дерево решений
DT_Classifier.fit(x_train, y_train) # обучение модели
DT_Classifier.score(x_test, y_test) # оценка точности
y_pred = DT_Classifier.predict(x_test) # предсказали и вывели первые 10
y_pred[:10]
accuracy_score(y_test, y_pred)# оценка точности
print(classification_report(y_test, y_pred)); #текстовый отчет, показывающий основные показатели классификации
# посмотрим на матрицу ошибок
sns.heatmap(confusion_matrix(y_test, y_pred), annot = True, fmt=".0f")
RF_Classifier = RandomForestClassifier(n_estimators=100, bootstrap = True, max_features = 'sqrt') # создаем классификатор Случайный лес
RF_Classifier.fit(x_train, y_train.values.ravel())# обучение модели
LT_Classifier = LinearRegression() # создаем классификатор линейную модель регрессии
LT_Classifier.fit(x_train, y_train) # обучение модели
y_train_pred = LT_Classifier.predict(x_train)# на обучающей выборке
# точность на обучающей
LT_Classifier.score(x_train, y_train_pred)
mean_squared_error(y_test, y_test_pred ) #Среднеквадратичная ошибка регрессии потерь
r2_score(y_test, y_test_pred) #коэффициент детерминации
# возьмем и построим график значимости отклонения от предсказанных значений
plt.scatter(y_train_pred, y_train_pred - y_train,
c='blue', marker='o', label='Данные обучения')
plt.scatter(y_test_pred, y_test_pred - y_test,
c='lightgreen', marker='s', label='Данные испытаний')
plt.xlabel('Прогнозируемые значения')
plt.ylabel('Остатки')
plt.legend(loc='upper left')
plt.hlines(y=0, xmin=-100000, xmax=100000, lw=2, color='red')
plt.xlim([-100000, 100000])
plt.tight_layout()
# возьмём интервал от -25000 до 25000 - там много значений из выборки
plt.scatter(y_train_pred, y_train_pred - y_train,
c='blue', marker='o', label='Данные обучения')
plt.scatter(y_test_pred, y_test_pred - y_test,
c='lightgreen', marker='s', label='Данные испытаний')
plt.xlabel('Прогнозируемые значения')
plt.ylabel('Остатки')
plt.legend(loc='upper left')
plt.hlines(y=0, xmin=-25000, xmax=25000, lw=2, color='red')
plt.xlim([-25000, 25000])
plt.tight_layout() |
|
2
|