Схема
Это задание по анализу системы проката велосипедов. Используя эту систему, люди могут брать велосипеды напрокат в одном месте и возвращать их в другом по мере необходимости. Используемый здесь набор данных описывает спрос на эту систему аренды на основе различных факторов, таких как месяцы, праздники, времена года, температура и т. д. Используя приведенный ниже анализ, мы сможем определить тенденции, присутствующие в наборе данных.
Часть 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'])