Рубрики
Без рубрики

(Машинное обучение + статистика) на набор данных для парковки

Реализация линейной регрессии и статистики на набор данных для парковки, чтобы совет по городу на основе … Теги с машиной, статистикой, Python.

Реализация линейной регрессии и статистики на набор данных для парковки, чтобы совет по городу на основе линий регрессии и анализа в отношении расширения парковок.

Набор данных можно загрузить по следующей ссылке: https://github.com/ruthvikraja/parking-lot-dataset.git.giT.

Предварительные знания о наборе данных и цели этой статьи: город планирует повысить производительность некоторых парковок. Город предоставляет занятие каждой парковки в течение трех с половиной лет. Итак, цель состоит в том, чтобы оценить парковочную необходимость для расширения от большейной до наименее срочно. [Предположим, что плата за парковку всех парковок равны]

Код Python выглядит следующим образом:

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression

df=pd.read_csv("/Users/ruthvikrajam.v/Desktop/ML/Parking_lots_dataset.csv")
df.info() # Check if there are any null values in the data set

# Let us separate the input data into 5 different dataframes based on the parking lot number

df1=df[df["Parking Number"]=="Parking lot 01"]

df2=df[df["Parking Number"]=="Parking lot 02"]

df3=df[df["Parking Number"]=="Parking lot 03"]

df4=df[df["Parking Number"]=="Parking lot 04"]

df5=df[df["Parking Number"]=="Parking lot 05"]

## df1
x=np.array(range(df1.shape[0])).reshape(df1.shape[0],1) # The shape displays the number of rows and columns in a Dataframe
y=df1.iloc[:,2].values.reshape(-1,1) # Selecting all the rows in 2nd column and reshaping it to fit the values in Linear Regression class

lr=LinearRegression() # creating object for linear regression class
lr.fit(x,y) # fitting the values
y_pred=lr.predict(x) # predicting the output values

plt.figure(figsize=(20,10)) # Since the count of x values is very high, defining the size of the figure to avoid overlapping in y values
plt.scatter(x,y)
plt.plot(x,y_pred,color="red")
plt.xlabel("Number of Days")
plt.ylabel("Occupancy")
plt.show()

df1.describe()
# On an average only 162 are filled out of 577 means only 28%
# 50% of the data is less than 157 means 50% of the days is filled with more than 27.2% occupancy

## df2
x=np.array(range(df2.shape[0])).reshape(-1,1) # The shape displays the number of rows and columns in a Dataframe
y=df2.iloc[:,2].values.reshape(-1,1) # Selecting all the rows in 2nd column and reshaping it to fit the values in Linear Regression class

lr=LinearRegression() # creating object for linear regression class
lr.fit(x,y) # fitting the values
y_pred=lr.predict(x) # predicting the output values

plt.figure(figsize=(20,10)) # Since the count of x values are very high, defining the size of the figure to avoid overlapping in y values
plt.scatter(x,y)
plt.plot(x,y_pred,color="red")
plt.show()

df2.describe()
# On an average 136 are filled out of 317 means 42%
# 50% of the data is less than 135, here the mean and median values are almost equal this means
  # that the data is equally distributed from lowest to highest values i.e from 0 to 317
count1=df2[df2["Occupancy"]>=317].count()
print(count1[-1]) # Total % of days with more than the total capacity is just 4%

## df3

x=np.array(range(df3.shape[0])).reshape(-1,1) # The shape displays the number of rows and columns in a Dataframe
y=df3.iloc[:,2].values.reshape(-1,1) # Selecting all the rows in 2nd column and reshaping it to fit the values in Linear Regression class

lr=LinearRegression() # creating object for linear regression class
lr.fit(x,y) # fitting the values
y_pred=lr.predict(x) # predicting the output values

plt.figure(figsize=(20,10)) # Since the count of x values are very high, defining the size of the figure to avoid overlapping in y values
plt.scatter(x,y)
plt.plot(x,y_pred,color="red")
plt.show()

df3.describe()
# On an average 572 are filled out of 863 means 66%
# The median of the data is less than 618 i.e 50% of the days are filled with more than 72% occupancy
count2=df3[df3["Occupancy"]>=863].count()
print(count2[-1]) # Total % of days with more than the total capacity is 11%

## df4
x=np.array(range(df4.shape[0])).reshape(-1,1) # The shape displays the number of rows and columns in a Dataframe
y=df4.iloc[:,2].values.reshape(-1,1) # Selecting all the rows in 2nd column and reshaping it to fit the values in Linear Regression class

lr=LinearRegression() # creating object for linear regression class
lr.fit(x,y) # fitting the values
y_pred=lr.predict(x) # predicting the output values

plt.figure(figsize=(20,10)) # Since the count of x values are very high, defining the size of the figure to avoid overlapping in y values
plt.scatter(x,y)
plt.plot(x,y_pred,color="red")
plt.show()

df4.describe()
# On an average 288 out of 387 are filled means 74%
# The median of the data is less than 309 i.e 50% of the days are filled with more than 80% occupancy

# The max capacity is 387 but the max value for occupancy is 403 this means that there is a need for enlargement 

count3=df4[df4["Occupancy"]>=387].count()
print(count3[-1]) # Total % of days with more than the total capacity is 19%

## df5
x=np.array(range(df5.shape[0])).reshape(-1,1) # The shape displays the number of rows and columns in a Dataframe
y=df5.iloc[:,2].values.reshape(-1,1) # Selecting all the rows in 2nd column and reshaping it to fit the values in Linear Regression class

lr=LinearRegression() # creating object for linear regression class
lr.fit(x,y) # fitting the values
y_pred=lr.predict(x) # predicting the output values

plt.figure(figsize=(20,10)) # Since the count of x values are very high, defining the size of the figure to avoid overlapping in y values
plt.scatter(x,y)
plt.plot(x,y_pred,color="red")
plt.show()

df5.describe()
# On an average 1067 are filled out of 1920 that is 56%
# The median of the data is less than 1162 i.e 50% of the days are filled with more than 61% occupancy

Растение регрессии для вышеуказанного кода Python следующие:

Ось X -> Количество дней y y axis -> Замещение

DF1 (парковка 01):

DF2 (парковка 02):

DF3 (парковка 03):

DF4 (парковка 04):

DF5 (парковка 05):

Таким образом, рейтинг парковок для немедленного расширения следующим образом:

  • Из вышеперечисленных регрессионных участков ясно, что парковка 04 требует немедленного расширения, поскольку он имеет высокий спрос, поскольку линия регрессии значительно увеличивается, в среднем 74% места заполняется и на 19% от общего количества дней. Заполняется транспортными средствами более чем на его максимальную емкость.

  • Затем наступает парковка 03, потому что он также имеет высокий спрос, который может быть визуализирован с графика регрессионного участка, в среднем 66% места заполняется, и 11% от общего количества дней наполняется транспортными средствами с более чем его максимальная емкость.

  • Затем наступает автостоянка 05, потому что из регрессионного сюжета ясно, что есть небольшой спрос на парковку, в среднем 56% места заполняется, а 50% дней находятся на заполнении более чем на 61%.

  • Затем наступает парковка 02 со средней занятостью 42%, 50% дней Получаются заполненные более чем на 42% занятости, и только 4% от общего количества дней наполняется транспортными средствами с более чем его максимальной емкостью.

  • Наконец, наименее предпочтение может быть дано на парковку 01, потому что спрос меньше, линия регрессии также постоянна, а средняя занятость также очень низкая.

Оригинал: “https://dev.to/ruthvikraja_mv/machine-learning-statistics-on-parking-lot-dataset-1j95”