Вы находитесь на странице: 1из 11

31.03.

2021 ML_EDA_hw - Jupyter Notebook

Разведочный анализ
Подключитесь к базе данных PostgreSQL и выгрузите таблицу exploratory , сохранив ее в датафрейм.

Параметры для подключения следующие: хост – dsstudents.skillbox.ru , порт – 5432 , имя базы
данных – db_ds_students , пользователь – readonly , пароль – 6hajV34RTQfmxhS .

В [1]:

import sqlalchemy
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np

В [2]:

conn = 'postgresql+psycopg2://readonly:6hajV34RTQfmxhS@dsstudents.skillbox.ru:5432/db_ds_st
engine = sqlalchemy.create_engine(conn)
connect = engine.connect()

В [3]:

inspector = sqlalchemy.inspect(engine)
inspector.get_table_names()
Out[3]:

['keywords', 'links', 'ratings', 'exploratory', 'course_purchases', 'joi']

В [4]:

exploratory = pd.read_sql("select * from exploratory", connect)


exploratory = exploratory.astype(float)
exploratory.head()
Out[4]:

feature_1 feature_2 feature_3 feature_4 feature_5

0 2.439930 -2.180961 33.468496 -1.927388 -5.321392

1 1.770580 -1.174880 0.989593 -1.139681 -2.080220

2 0.742817 -0.263483 0.168149 -0.332438 -0.195720

3 -1.510892 2.712571 -2.685643 2.058495 -4.098402

4 -0.483511 0.096511 -0.028703 0.168763 -0.046664

Type Markdown and LaTeX: 𝛼2


Постройте гистограммы распределения для каждой переменной. Поэксперементируйте с количеством
"разбивок" (bins). Опишите распределение каждой переменной. В каких областях (пример: от нуля до 2
расположено примерно треть всех значений) сосредоточено больше значений, в каких меньше.

localhost:8890/notebooks/ML_EDA_hw.ipynb# 1/11
31.03.2021 ML_EDA_hw - Jupyter Notebook

В [5]:

plt.figure(figsize=(10,6))
plt.title("Распределение для feature_1", fontsize=16)
plt.tick_params(labelsize=14)
sns.histplot(data=exploratory, x="feature_1", bins=10)
plt.show()

Примерно 90% всех данных лежит в диапазоне от -2 до 2. По краям выборки от -3 до -2 и от 2-2.5 данных
меньше всего, а также существует небольшая просадка по количеству данных значения которых близки к
0.

localhost:8890/notebooks/ML_EDA_hw.ipynb# 2/11
31.03.2021 ML_EDA_hw - Jupyter Notebook

В [6]:

plt.figure(figsize=(10,6))
plt.title("Распределение для feature_2", fontsize=16)
plt.tick_params(labelsize=14)
sns.histplot(data=exploratory, x="feature_2", bins=30)
plt.show()

95% процентов всех значений находятся в диапазоне от -2.3 до 2.5 От -3.5 до -2.3 расположено всего
около 5 процентов значений выборки.

localhost:8890/notebooks/ML_EDA_hw.ipynb# 3/11
31.03.2021 ML_EDA_hw - Jupyter Notebook

В [7]:

plt.figure(figsize=(10,6))
plt.title("Распределение для feature_3", fontsize=16)
plt.tick_params(labelsize=14)
sns.histplot(data=exploratory, x="feature_3", bins=20)
plt.show()

Это самая интересная выборка, 90% которой лежат в районе от -2.7 до 2.2. Остальные значения
являются явно каким-то выбросами, которые требуют особого внимания и расположены в диапазоне от
30 до 62.

localhost:8890/notebooks/ML_EDA_hw.ipynb# 4/11
31.03.2021 ML_EDA_hw - Jupyter Notebook

В [8]:

plt.figure(figsize=(10,6))
plt.title("Распределение для feature_4", fontsize=16)
plt.tick_params(labelsize=14)
sns.histplot(data=exploratory, x="feature_4", bins=30)
plt.show()

Это одно из наиболее равномерных распределений данных, на мой взгляд ближе всего к нормальному
из представленных в фрейме. 99% данных находится в диапазоне от -2.2 до 2.1

localhost:8890/notebooks/ML_EDA_hw.ipynb# 5/11
31.03.2021 ML_EDA_hw - Jupyter Notebook

В [9]:

plt.figure(figsize=(10,6))
plt.title("Распределение для feature_5", fontsize=16)
plt.tick_params(labelsize=14)
sns.histplot(data=exploratory, x="feature_5", bins=20)
plt.show()

Данные распределены не равномерно. 80 процентов данных находятся в диапазоне от -2.5 до 2.


Присутствует также хвост в данных.

Постройте ящик с усами для каждой переменной. Опишите распределение данных. Прокомментируйте
наличие или отсутствие выбросов.

В [10]:

plt.figure(figsize=(18,5))
plt.title("Боксплот для feature_1", fontsize=18)
plt.xticks(np.arange(min(exploratory["feature_1"]), max(exploratory["feature_1"]+0.5),0.5))
plt.tick_params(labelsize=14)
ax = sns.boxplot(x=exploratory["feature_1"])
plt.show()

localhost:8890/notebooks/ML_EDA_hw.ipynb# 6/11
31.03.2021 ML_EDA_hw - Jupyter Notebook

В [11]:

plt.figure(figsize=(18,5))
plt.title("Боксплот для feature_1", fontsize=18)
plt.xticks(np.arange(min(exploratory["feature_1"]), max(exploratory["feature_1"]+0.5),0.5))
plt.tick_params(labelsize=14)
ax = sns.boxplot(x=exploratory["feature_1"])
plt.show()

В [12]:

plt.figure(figsize=(18,5))
plt.title("Боксплот для feature_2", fontsize=18)
plt.xticks(np.arange(min(exploratory["feature_2"]), max(exploratory["feature_2"]+0.5),0.5))
plt.tick_params(labelsize=14)
ax = sns.boxplot(x=exploratory["feature_2"])
plt.show()

localhost:8890/notebooks/ML_EDA_hw.ipynb# 7/11
31.03.2021 ML_EDA_hw - Jupyter Notebook

В [13]:

plt.figure(figsize=(18,5))
plt.title("Боксплот для feature_3", fontsize=18)
plt.xticks(np.arange(min(exploratory["feature_3"]), max(exploratory["feature_3"]+5),5))
plt.tick_params(labelsize=14)
ax = sns.boxplot(x=exploratory["feature_3"])
plt.show()

В [14]:

plt.figure(figsize=(18,5))
plt.title("Боксплот для feature_4", fontsize=18)
plt.xticks(np.arange(min(exploratory["feature_4"]), max(exploratory["feature_4"]+0.5),0.5))
plt.tick_params(labelsize=14)
ax = sns.boxplot(x=exploratory["feature_4"])
plt.show()

localhost:8890/notebooks/ML_EDA_hw.ipynb# 8/11
31.03.2021 ML_EDA_hw - Jupyter Notebook

В [15]:

plt.figure(figsize=(18,5))
plt.title("Боксплот для feature_5", fontsize=18)
plt.xticks(np.arange(min(exploratory["feature_5"]), max(exploratory["feature_5"]+1),1))
plt.tick_params(labelsize=14)
ax = sns.boxplot(x=exploratory["feature_5"])
plt.show()

На 3-ем боксплоте присутствуют выбросы и 5 данные смещены в сторону.

Допустим, мы хотим построить регрессионную модель по имеющимся данным и исследовать влияние


остальных переменных на переменную feature_4 . Постройте диаграммы рассеяния. Определите по
графикам, какие независимые переменные имело бы смысл включить в модель регрессии?

В [16]:

plt.figure(figsize=(15,7))
plt.title("Диаграмма рассеивания между 4 и 1 параметром", fontsize=18)
sns.scatterplot(x="feature_4", y="feature_1", data=(exploratory))
plt.show()

localhost:8890/notebooks/ML_EDA_hw.ipynb# 9/11
31.03.2021 ML_EDA_hw - Jupyter Notebook

В [17]:

plt.figure(figsize=(15,7))
plt.title("Диаграмма рассеивания между 2 и 4 параметром", fontsize=18)
sns.scatterplot(x="feature_4", y="feature_2", data=(exploratory))
plt.show()

В [18]:

plt.figure(figsize=(15,7))
plt.title("Диаграмма рассеивания между 3 и 4 параметром", fontsize=18)
sns.scatterplot(x="feature_4", y="feature_3", data=(exploratory))
plt.show()

localhost:8890/notebooks/ML_EDA_hw.ipynb# 10/11
31.03.2021 ML_EDA_hw - Jupyter Notebook

В [19]:

plt.figure(figsize=(15,7))
plt.title("Диаграмма рассеивания между 5 и 4 параметром", fontsize=18)
sns.scatterplot(x="feature_4", y="feature_5", data=(exploratory))
plt.show()

Второй и третий параметр (feature_2, feature_3), лучше всего подходят для модели регрессии, т.к.
между ними и 4 параметром прослеживается выраженная линейная зависимость.

localhost:8890/notebooks/ML_EDA_hw.ipynb# 11/11