Схема

Это задание по анализу системы проката велосипедов. Используя эту систему, люди могут брать велосипеды напрокат в одном месте и возвращать их в другом по мере необходимости. Используемый здесь набор данных описывает спрос на эту систему аренды на основе различных факторов, таких как месяцы, праздники, времена года, температура и т. д. Используя приведенный ниже анализ, мы сможем определить тенденции, присутствующие в наборе данных.

Часть 1. Загрузка данных

Я использовал Google Colaboratory для проведения анализа. Загрузите данные по ссылке ниже в ваш colab-файл.

[Альтернативный вариант — положить его в одну папку с блокнотом и смонтировать гугл диск в colab файл. ]

Ссылка для доступа — https://drive.google.com/file/d/12Hd-M6i6o2uSDbqlvcm2cZjCFBKnLNgG/view?usp=sharing

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
import seaborn as sns

1. Загрузите данные об аренде велосипедов csv (распечатайте первые пять наблюдений)

df = pd.read_csv("bike_rental.csv")
df.head()

2. Изучите список переменных, их минимум и максимум

df.describe()

Часть 2. Визуализация данных

3. Гистограмма переменного шума (влажности) с нормальным графиком

# Make the normal distribution fit the data: 
mu, std = norm.fit(df.hum) # mean and standard deviation
# Plot the histogram.
plt.hist(df.hum, bins=25, density=True, alpha=0.6)

xmin, xmax = plt.xlim()
x = np.linspace(xmin, xmax, 100)
p = norm.pdf(x, mu, std)
  
plt.plot(x, p, 'k', linewidth=2)
  
plt.show()

4. Коробчатая диаграмма переменного шума

sns.boxplot(df['hum'])

5. Судя по блочной диаграмме и гистограмме, в самых низких значениях переменной влажности есть выбросы. Проверьте, как эти выбросы влияют на количество арендованных велосипедов и существует ли линейная зависимость между влажностью и количеством, построив график рассеяния.

df.plot.scatter(x='hum', y='cnt', c='DarkBlue', title='Scatter plot of rented bike count and humidity')

6. Выведите выбросы для переменного шума на основе 2 стандартных отклонений.

Среднее — 2 * Std_Deviation

Среднее + 2 * стандартное_отклонение

def remove_outlier_sd(df):
    mean =df.mean(axis=0)
    sd = df.std(axis=0)
    df_final=df[~((df<(mean-2*sd)) | (df>(mean+2*sd)))]
    outlier_df = df[(df<(mean-2*sd)) | (df>(mean+2*sd))]
    return df_final, outlier_df

hum_outlier_removed_sd, sd_outlier_df =remove_outlier_sd(df.hum)

sd_outlier_df
35     0.929167
45     0.314348
49     0.187917
61     0.318333
64     0.948261
68     0.000000
86     0.302174
87     0.314167
89     0.918333
133    0.922500
152    0.305000
249    0.917083
250    0.939565
265    0.972500
319    0.930000
325    0.962500
339    0.949583
340    0.970417
393    0.311250
451    0.290000
462    0.254167
463    0.275833
464    0.317500
677    0.333478
709    0.925000
Name: hum, dtype: float64
df1 = df.copy()
df1['hum'] = hum_outlier_removed_sd
sns.boxplot(df1['hum'])

7. Выведите выбросы для переменного шума на основе метода межквартильного диапазона.

Q1–1,5 * IQR

Q3 + 1,5 * IQR

def remove_outlier_IQR(df):
    Q1=df.quantile(0.25)
    Q3=df.quantile(0.75)
    IQR=Q3-Q1
    df_final=df[~((df<(Q1-1.5*IQR)) | (df>(Q3+1.5*IQR)))]
    outlier_df = df[(df<(Q1-1.5*IQR)) | (df>(Q3+1.5*IQR))]
    return df_final, outlier_df

hum_outlier_removed_ir, ir_outlier_df =remove_outlier_IQR(df.hum)

ir_outlier_df
49 0.187917 
68 0.000000 
Name: hum, dtype: float64

8. Видите ли вы какой-либо риск в удалении этих выбросов? Обосновать ответ?.

В случае выбросов, обнаруженных с использованием метода стандартного отклонения, существует огромный риск удаления выбросов, поскольку задействовано много точек данных, тогда как в методе межквартильного диапазона есть только 2 выброса. Следовательно, большого риска нет.

9. Удалите выбросы, используя метод межквантильного диапазона. Дайте набору данных новое имя bike_OutliersRemoved

df2 = df.copy()
df2['hum'] = hum_outlier_removed_ir

10. Теперь постройте график влажности прямоугольного графика из bike_OutliersRemoved.

sns.boxplot(df2['hum'])

11. Гистограмма переменной скорости ветра

df2['windspeed'].hist()

12. Коробчатая диаграмма переменной скорости ветра.

sns.boxplot(df2['windspeed'])

13. Диаграмма рассеивания скорости ветра в зависимости от cnt (количество)

df2.plot.scatter(x='windspeed', y='cnt', c='DarkBlue', title='Scatter plot of rented bike count and wind speed')

14. Выведите выбросы для переменной скорости ветра на основе метода межквантильного диапазона.

ws_outlier_removed_ir, ws_outlier_df =remove_outlier_IQR(df2.windspeed)
ws_outlier_df
44     0.417908
49     0.507463
93     0.385571
94     0.388067
292    0.422275
382    0.415429
407    0.409212
420    0.421642
432    0.441563
433    0.414800
450    0.386821
666    0.398008
721    0.407346
Name: windspeed, dtype: float64
df3 = df2.copy()
df3['windspeed'] = ws_outlier_removed_ir
sns.boxplot(df3['windspeed'])