Skip to content

As electronic vehicles (EVs) become more popular, there is an increasing need for access to charging stations, also known as ports. To that end, many modern apartment buildings have begun retrofitting their parking garages to include shared charging stations. A charging station is shared if it is accessible by anyone in the building.

But with increasing demand comes competition for these ports — nothing is more frustrating than coming home to find no charging stations available! In this project, you will use a dataset to help apartment building managers better understand their tenants’ EV charging habits.

The data has been loaded into a Google BigQuery database, containing a schema called VEHICLES and a single table named CHARGING_SESSIONS with the following columns:

VEHICLES.CHARGING_SESSIONS

ColumnDefinitionData type
garage_idIdentifier for the garage/buildingSTRING
user_idIdentifier for the individual userSTRING
user_typeIndicating whether the station is Shared or PrivateSTRING
start_pluginThe date and time the session startedTIMESTAMP
start_plugin_hourThe hour (in military time) that the session startedNUMERIC
end_plugoutThe date and time the session endedTIMESTAMP
end_plugout_hourThe hour (in military time) that the session endedNUMERIC
duration_hoursThe length of the session, in hoursNUMERIC
el_kwhAmount of electricity used (in Kilowatt hours)NUMERIC
month_pluginThe month that the session startedSTRING
weekdays_pluginThe day of the week that the session startedSTRING

Let’s get started!

Sources
  • Data: CC BY 4.0, via Kaggle,
  • Image: Julian Herzog, CC BY 4.0, via Wikimedia Commons
Spinner
DataFrameas
unique_users_per_garage
variable
-- Finding the unique shared users for each garage
SELECT 
	garage_id, 
	COUNT(DISTINCT user_id) AS num_unique_users
FROM
	VEHICLES.CHARGING_SESSIONS
WHERE 
	user_type = 'Shared'
GROUP BY
	garage_id
ORDER BY
	num_unique_users DESC;
Spinner
DataFrameas
most_popular_shared_start_times
variable
-- Finding the top 10 most popular starting charge times by day and hour
SELECT 
	weekdays_plugin, 
	start_plugin_hour, 
	COUNT(*) AS num_charging_sessions
FROM
	VEHICLES.CHARGING_SESSIONS
WHERE 
	user_type = 'Shared'
GROUP BY
	weekdays_plugin, 
	start_plugin_hour
ORDER BY 
	num_charging_sessions DESC
LIMIT 10;
Spinner
DataFrameas
long_duration_shared_users
variable
-- Finding users with long average charging times
SELECT
	user_id, 
	AVG(duration_hours) AS avg_charging_duration
FROM
	VEHICLES.CHARGING_SESSIONS
WHERE 
	user_type = 'Shared'
GROUP BY 
	user_id
HAVING 
	AVG(duration_hours) > 10
ORDER BY
	avg_charging_duration DESC;