# install.packages("RMySQL")
library(RMySQL)
## Loading required package: DBI
# online_schema <- dbConnect(RMySQL::MySQL(), dbname='schema', username='onlineUser', password='********', host='******', port=3306)
knitr::opts_chunk$set(eval = FALSE)
CREATE USER onlineUser IDENTIFIED WITH mysql_native_password BY 'password';

# Note: if you want to run chunks, replace {sql} with {sql connection= online_schema, output.var= "report_model_by_make"} in every chunk that you want to run.

Steps: - Use the SQL scripts for the following steps in MySQL.

LOADING AND PROCESSING DATA:

SHOW VARIABLES LIKE "secure_file_priv"

,and the results are shown, and a path is shown in the result.

create.sql :

CREATE TABLE divvy_tripdata_202101 (
    ride_id VARCHAR(100), rideable_type VARCHAR(100),
    started_at DATETIME, ended_at DATETIME,
    start_station_name VARCHAR(100), start_station_id VARCHAR(100),
    end_station_name VARCHAR(100), end_station_id VARCHAR(100),
    start_lat DOUBLE, start_lng DOUBLE,
    end_lat DOUBLE, end_lng DOUBLE,
    member_casual VARCHAR(100) );
LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/202101-divvy-tripdata.csv' INTO TABLE divvy_tripdata_202101
FIELDS TERMINATED BY ','
IGNORE 1 LINES 
(ride_id, rideable_type, started_at, ended_at, start_station_name, start_station_id, end_station_name, end_station_id, @vstart_lat, @start_lng, @vend_lat, @vend_lng, member_casual)
SET start_lat= NULLIF(@vstart_lat,''),
    start_lng= NULLIF(@start_lng,''),
    end_lat= NULLIF(@vend_lat,''),
    end_lng= NULLIF(@vend_lng,'') ;
CREATE TABLE divvy_tripdata_202102 (
    ride_id VARCHAR(100), rideable_type VARCHAR(100),
    started_at DATETIME, ended_at DATETIME,
    start_station_name VARCHAR(100), start_station_id VARCHAR(100),
    end_station_name VARCHAR(100), end_station_id VARCHAR(100),
    start_lat DOUBLE, start_lng DOUBLE,
    end_lat DOUBLE, end_lng DOUBLE,
    member_casual VARCHAR(100) );
LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/202102-divvy-tripdata.csv' INTO TABLE divvy_tripdata_202102
FIELDS TERMINATED BY ','
IGNORE 1 LINES 
(ride_id, rideable_type, started_at, ended_at, start_station_name, start_station_id, end_station_name, end_station_id, @vstart_lat, @start_lng, @vend_lat, @vend_lng, member_casual)
SET start_lat= NULLIF(@vstart_lat,''),
    start_lng= NULLIF(@start_lng,''),
    end_lat= NULLIF(@vend_lat,''),
    end_lng= NULLIF(@vend_lng,'') ;
    
CREATE TABLE divvy_tripdata_202103 (
    ride_id VARCHAR(100), rideable_type VARCHAR(100),
    started_at DATETIME, ended_at DATETIME,
    start_station_name VARCHAR(100), start_station_id VARCHAR(100),
    end_station_name VARCHAR(100), end_station_id VARCHAR(100),
    start_lat DOUBLE, start_lng DOUBLE,
    end_lat DOUBLE, end_lng DOUBLE,
    member_casual VARCHAR(100) );
LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/202103-divvy-tripdata.csv' INTO TABLE divvy_tripdata_202103
FIELDS TERMINATED BY ','
IGNORE 1 LINES 
(ride_id, rideable_type, started_at, ended_at, start_station_name, start_station_id, end_station_name, end_station_id, @vstart_lat, @start_lng, @vend_lat, @vend_lng, member_casual)
SET start_lat= NULLIF(@vstart_lat,''),
    start_lng= NULLIF(@start_lng,''),
    end_lat= NULLIF(@vend_lat,''),
    end_lng= NULLIF(@vend_lng,'') ;
    
CREATE TABLE divvy_tripdata_202104 (
    ride_id VARCHAR(100), rideable_type VARCHAR(100),
    started_at DATETIME, ended_at DATETIME,
    start_station_name VARCHAR(100), start_station_id VARCHAR(100),
    end_station_name VARCHAR(100), end_station_id VARCHAR(100),
    start_lat DOUBLE, start_lng DOUBLE,
    end_lat DOUBLE, end_lng DOUBLE,
    member_casual VARCHAR(100) );
LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/202104-divvy-tripdata.csv' INTO TABLE divvy_tripdata_202104
FIELDS TERMINATED BY ','
IGNORE 1 LINES 
(ride_id, rideable_type, started_at, ended_at, start_station_name, start_station_id, end_station_name, end_station_id, @vstart_lat, @start_lng, @vend_lat, @vend_lng, member_casual)
SET start_lat= NULLIF(@vstart_lat,''),
    start_lng= NULLIF(@start_lng,''),
    end_lat= NULLIF(@vend_lat,''),
    end_lng= NULLIF(@vend_lng,'') ;
    
CREATE TABLE divvy_tripdata_202105 (
    ride_id VARCHAR(100), rideable_type VARCHAR(100),
    started_at DATETIME, ended_at DATETIME,
    start_station_name VARCHAR(100), start_station_id VARCHAR(100),
    end_station_name VARCHAR(100), end_station_id VARCHAR(100),
    start_lat DOUBLE, start_lng DOUBLE,
    end_lat DOUBLE, end_lng DOUBLE,
    member_casual VARCHAR(100) );
LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/202105-divvy-tripdata.csv' INTO TABLE divvy_tripdata_202105
FIELDS TERMINATED BY ','
IGNORE 1 LINES 
(ride_id, rideable_type, started_at, ended_at, start_station_name, start_station_id, end_station_name, end_station_id, @vstart_lat, @start_lng, @vend_lat, @vend_lng, member_casual)
SET start_lat= NULLIF(@vstart_lat,''),
    start_lng= NULLIF(@start_lng,''),
    end_lat= NULLIF(@vend_lat,''),
    end_lng= NULLIF(@vend_lng,'') ;
    
CREATE TABLE divvy_tripdata_202106 (
    ride_id VARCHAR(100), rideable_type VARCHAR(100),
    started_at DATETIME, ended_at DATETIME,
    start_station_name VARCHAR(100), start_station_id VARCHAR(100),
    end_station_name VARCHAR(100), end_station_id VARCHAR(100),
    start_lat DOUBLE, start_lng DOUBLE,
    end_lat DOUBLE, end_lng DOUBLE,
    member_casual VARCHAR(100) );
LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/202106-divvy-tripdata.csv' INTO TABLE divvy_tripdata_202106
FIELDS TERMINATED BY ','
IGNORE 1 LINES 
(ride_id, rideable_type, started_at, ended_at, start_station_name, start_station_id, end_station_name, end_station_id, @vstart_lat, @start_lng, @vend_lat, @vend_lng, member_casual)
SET start_lat= NULLIF(@vstart_lat,''),
    start_lng= NULLIF(@start_lng,''),
    end_lat= NULLIF(@vend_lat,''),
    end_lng= NULLIF(@vend_lng,'') ;
    
CREATE TABLE divvy_tripdata_202107 (
    ride_id VARCHAR(100), rideable_type VARCHAR(100),
    started_at DATETIME, ended_at DATETIME,
    start_station_name VARCHAR(100), start_station_id VARCHAR(100),
    end_station_name VARCHAR(100), end_station_id VARCHAR(100),
    start_lat DOUBLE, start_lng DOUBLE,
    end_lat DOUBLE, end_lng DOUBLE,
    member_casual VARCHAR(100) );
LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/202107-divvy-tripdata.csv' INTO TABLE divvy_tripdata_202107
FIELDS TERMINATED BY ','
IGNORE 1 LINES 
(ride_id, rideable_type, started_at, ended_at, start_station_name, start_station_id, end_station_name, end_station_id, @vstart_lat, @start_lng, @vend_lat, @vend_lng, member_casual)
SET start_lat= NULLIF(@vstart_lat,''),
    start_lng= NULLIF(@start_lng,''),
    end_lat= NULLIF(@vend_lat,''),
    end_lng= NULLIF(@vend_lng,'') ;
    
CREATE TABLE divvy_tripdata_202108 (
    ride_id VARCHAR(100), rideable_type VARCHAR(100),
    started_at DATETIME, ended_at DATETIME,
    start_station_name VARCHAR(100), start_station_id VARCHAR(100),
    end_station_name VARCHAR(100), end_station_id VARCHAR(100),
    start_lat DOUBLE, start_lng DOUBLE,
    end_lat DOUBLE, end_lng DOUBLE,
    member_casual VARCHAR(100) );
LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/202108-divvy-tripdata.csv' INTO TABLE divvy_tripdata_202108
FIELDS TERMINATED BY ','
IGNORE 1 LINES 
(ride_id, rideable_type, started_at, ended_at, start_station_name, start_station_id, end_station_name, end_station_id, @vstart_lat, @start_lng, @vend_lat, @vend_lng, member_casual)
SET start_lat= NULLIF(@vstart_lat,''),
    start_lng= NULLIF(@start_lng,''),
    end_lat= NULLIF(@vend_lat,''),
    end_lng= NULLIF(@vend_lng,'') ;

CREATE TABLE divvy_tripdata_202109 (
    ride_id VARCHAR(100), rideable_type VARCHAR(100),
    started_at DATETIME, ended_at DATETIME,
    start_station_name VARCHAR(100), start_station_id VARCHAR(100),
    end_station_name VARCHAR(100), end_station_id VARCHAR(100),
    start_lat DOUBLE, start_lng DOUBLE,
    end_lat DOUBLE, end_lng DOUBLE,
    member_casual VARCHAR(100) );
LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/202109-divvy-tripdata.csv' INTO TABLE divvy_tripdata_202109
FIELDS TERMINATED BY ','
IGNORE 1 LINES 
(ride_id, rideable_type, started_at, ended_at, start_station_name, start_station_id, end_station_name, end_station_id, @vstart_lat, @start_lng, @vend_lat, @vend_lng, member_casual)
SET start_lat= NULLIF(@vstart_lat,''),
    start_lng= NULLIF(@start_lng,''),
    end_lat= NULLIF(@vend_lat,''),
    end_lng= NULLIF(@vend_lng,'') ;
    
CREATE TABLE divvy_tripdata_202110 (
    ride_id VARCHAR(100), rideable_type VARCHAR(100),
    started_at DATETIME, ended_at DATETIME,
    start_station_name VARCHAR(100), start_station_id VARCHAR(100),
    end_station_name VARCHAR(100), end_station_id VARCHAR(100),
    start_lat DOUBLE, start_lng DOUBLE,
    end_lat DOUBLE, end_lng DOUBLE,
    member_casual VARCHAR(100) );
LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/202110-divvy-tripdata.csv' INTO TABLE divvy_tripdata_202110
FIELDS TERMINATED BY ','
IGNORE 1 LINES 
(ride_id, rideable_type, started_at, ended_at, start_station_name, start_station_id, end_station_name, end_station_id, @vstart_lat, @start_lng, @vend_lat, @vend_lng, member_casual)
SET start_lat= NULLIF(@vstart_lat,''),
    start_lng= NULLIF(@start_lng,''),
    end_lat= NULLIF(@vend_lat,''),
    end_lng= NULLIF(@vend_lng,'') ;
    
CREATE TABLE divvy_tripdata_202111 (
    ride_id VARCHAR(100), rideable_type VARCHAR(100),
    started_at DATETIME, ended_at DATETIME,
    start_station_name VARCHAR(100), start_station_id VARCHAR(100),
    end_station_name VARCHAR(100), end_station_id VARCHAR(100),
    start_lat DOUBLE, start_lng DOUBLE,
    end_lat DOUBLE, end_lng DOUBLE,
    member_casual VARCHAR(100) );
LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/202111-divvy-tripdata.csv' INTO TABLE divvy_tripdata_202111
FIELDS TERMINATED BY ','
IGNORE 1 LINES 
(ride_id, rideable_type, started_at, ended_at, start_station_name, start_station_id, end_station_name, end_station_id, @vstart_lat, @start_lng, @vend_lat, @vend_lng, member_casual)
SET start_lat= NULLIF(@vstart_lat,''),
    start_lng= NULLIF(@start_lng,''),
    end_lat= NULLIF(@vend_lat,''),
    end_lng= NULLIF(@vend_lng,'') ;
    
CREATE TABLE divvy_tripdata_202112 (
    ride_id VARCHAR(100), rideable_type VARCHAR(100),
    started_at DATETIME, ended_at DATETIME,
    start_station_name VARCHAR(100), start_station_id VARCHAR(100),
    end_station_name VARCHAR(100), end_station_id VARCHAR(100),
    start_lat DOUBLE, start_lng DOUBLE,
    end_lat DOUBLE, end_lng DOUBLE,
    member_casual VARCHAR(100) );
LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/202112-divvy-tripdata.csv' INTO TABLE divvy_tripdata_202112
FIELDS TERMINATED BY ','
IGNORE 1 LINES 
(ride_id, rideable_type, started_at, ended_at, start_station_name, start_station_id, end_station_name, end_station_id, @vstart_lat, @start_lng, @vend_lat, @vend_lng, member_casual)
SET start_lat= NULLIF(@vstart_lat,''),
    start_lng= NULLIF(@start_lng,''),
    end_lat= NULLIF(@vend_lat,''),
    end_lng= NULLIF(@vend_lng,'') ;

union.sql :

CREATE TABLE divvy_tripdata_2021 (  
    ride_id VARCHAR(100),
    rideable_type VARCHAR(100),
    month_of_year INT,
    day_of_week INT,
    started_at DATETIME,
    ended_at DATETIME,
    ride_length TIME,
    start_station_name VARCHAR(100),
    start_station_id VARCHAR(100),
    end_station_name VARCHAR(100),
    end_station_id VARCHAR(100),
    start_lat DOUBLE,
    start_lng DOUBLE,
    end_lat DOUBLE,
    end_lng DOUBLE,
    member_casual VARCHAR(100) 
    )
    SELECT *
    FROM (
        SELECT DISTINCT ride_id, rideable_type,
            EXTRACT(MONTH FROM started_at) AS month_of_year,
            WEEKDAY(started_at) AS day_of_week,
            started_at, ended_at, 
            TIMEDIFF(date_format(ended_at, '%H:%i:%s'), date_format(started_at, '%H:%i:%s'))  AS ride_length,
            start_station_name, start_station_id,  end_station_name, end_station_id,
            start_lat, start_lng, end_lat, end_lng,
            member_casual
        FROM (
            SELECT *
            FROM divvy_tripdata_202101
            UNION
            SELECT * 
            FROM divvy_tripdata_202102
            UNION
            SELECT *
            FROM divvy_tripdata_202103
            UNION
            SELECT * 
            FROM divvy_tripdata_202104
            UNION
            SELECT * 
            FROM divvy_tripdata_202105
            UNION
            SELECT * 
            FROM divvy_tripdata_202106
            UNION
            SELECT * 
            FROM divvy_tripdata_202107
            UNION
            SELECT * 
            FROM divvy_tripdata_202108
            UNION
            SELECT * 
            FROM divvy_tripdata_202109
            UNION
            SELECT * 
            FROM divvy_tripdata_202110
            UNION
            SELECT * 
            FROM divvy_tripdata_202111
            UNION
            SELECT * 
            FROM divvy_tripdata_202112
            ) union_table 
        ) full_table ;
UPDATE divvy_tripdata_2021
SET ride_length= IF(ride_length<0, sec_to_time(time_to_sec(ride_length)+86400),ride_length)
WHERE ride_id IS NOT NULL;

DATA CLEANING: - A select distinct count of primary key ‘ride_id’ compared to the select count of the same, shows how many duplicate ride_id’s occur. (can be eliminated in analysis by using distinct):

SELECT COUNT(DISTINCT ride_id)
SELECT TRIM(member_casual)
WHERE column = NOT NULL
HAVING column = NOT NULL /*use when GROUP BY is already used before]*/
SELECT COALESCE(ride_length,'00:00:00') AS ride_length_new                  
    /*or*/
SELECT CASE WHEN ride_length IS NULL THEN '00:00:00' ELSE ride_length END AS ride_length_new
    /*or*/
SELECT NULLIF(ride_length,'00:00:00') AS ride_length_new
    /*or*/
UPDATE TABLE table_name SET ride_length= NULLIF(@vride_length,'')
    /*or*/
(@vride_length) SET ride_length= NULLIF(@vride_length,'')

(The first 3 are while running an analysis query or creating table from query results(as already done in ‘union’ script), while the last two are done while updating table or creating table respectively(as already done in the ‘create’ script).)

ANALYSIS: - Open Tableau Desktop. - Two ways exist to produce viz in Tableau:

    1) The results of the SQL script are used as 'dimension' values to create the viz.
    2) The whole dataset is loaded as the data source and 'measure' values such as count, sum, etc. are used to create viz [like in PivotCharts in Excel].
    

(We follow the first as it is faster and SQL is used to write queries to the server data.)

TABLEAU VIZ’s + SQL SCRIPTS and ANALYSIS:

WORKBOOK 1: Created for avg ride lengths and number of trips over months of years using the ‘analysis.sql’ script.

/* Viz1 */
SELECT month_of_year, member_casual,
    COUNT(ride_id) AS no_of_trips,
        sec_to_time(AVG(ride_length)) AS avg_ride_length
FROM divvy_tripdata_2021
GROUP BY member_casual, month_of_year;

SHEET1–> Columns: month_of_year; Rows: SECOND(avg_ride_length) {Note: it is important to keep both as ‘continuous’ values for easier axis editing]; Color: member_casual {Assign as discrete value}; Graph type: Line.

SHEET2–> Columns: month_of_year; Rows: no_of_trips; Color: member_casual, Graph Type: Line.

DASHBOARD–> Add a floating member casual color legend and both sheets to the dashboard in an up&down format.

Dashboard 1

Conclusions :

WORKBOOK 2: Created for avg ride length and ride count over days of week.

/* Viz2 */
SELECT day_of_week, member_casual,
        COUNT(ride_id) AS ride_cnt,
    sec_to_time(AVG(ride_length)) AS avg_ride_lengthh
FROM divvy_tripdata_2021
GROUP BY day_of_week, member_casual;

SHEET1–> Columns: day_of_week; Rows: SECOND(avg_ride_lengthh) {Keep both continuous}; Color: member_casual {keep ‘discrete’}; Graph-type: Line.

SHEET2–> Columns: day_of_week; Rows: ride_cnt; Color: member_casual; Graph-type: Line.

DASHBOARD: Add a floating member casual color legend and both sheets to the dashboard in an up&down format.

Dashboard 2

Conclusions :

WORKBOOK 3: Shows the most used stations using the ‘analysis’ script.

/* Viz3 */
SELECT ride_id, member_casual, start_lat, start_lng, end_lat, end_lng
FROM divvy_tripdata_2021
WHERE start_lat IS NOT NULL AND start_lng IS NOT NULL AND end_lat IS NOT NULL AND end_lng IS NOT NULL
ORDER BY sqrt((start_lat-end_lat)*(start_lat-end_lat)-(start_lng-end_lng)*(start_lng-end_lng)) DESC;

SHEET1 –> Detail: start_lat, start_lng {latitude and longitude will be genertated}, Color: member_casual with sorted acsending.

SHEET2–> Detail: start_lat, start_lng {latitude and longitude will be genertated}, Color: member_casual with sorted decsending.

SHEET3–> Detail: end_lat, end_lng {latitude and longitude will be genertated}, Color: member_casual with sorted acsending.

SHEET4–> Detail: end_lat, end_lng {latitude and longitude will be genertated}, Color: member_casual with sorted decsending.

DASHBOARD–> stations side by side and start and end up & down, with flaoting color legend.

Dashboard 3

Conclusions :

SQL SCRIPT We also run a SQL query to find out the most popular bike ride routes for both casuals and members. Here are the results:

/* SQL1 */
SELECT COUNT(ride_id) AS ride_count, sec_to_time(AVG(ride_length)) AS avg_ride_l, member_casual, CONCAT(start_station_name, " to ", end_station_name) AS route
FROM divvy_tripdata_2021
GROUP BY member_casual, route
ORDER BY ride_count DESC, member_casual
LIMIT 10; /*optional to run*/

SELECT COUNT(ride_id) AS ride_count, sec_to_time(AVG(ride_length)) AS avg_ride_l, member_casual, CONCAT(start_station_name, " to ", end_station_name) AS route
FROM divvy_tripdata_2021
WHERE member_casual LIKE '%member%'
GROUP BY route
ORDER BY ride_count DESC
LIMIT 10; /*count for members*/

SELECT COUNT(ride_id) AS ride_count, sec_to_time(AVG(ride_length)) AS avg_ride_l, member_casual, CONCAT(start_station_name, " to ", end_station_name) AS route
FROM divvy_tripdata_2021
WHERE member_casual LIKE '%casual%'
GROUP BY route
ORDER BY ride_count DESC
LIMIT 10; /*count for casuals*/

Members: CSV Table

ride_count, avg_ride,   member_casual,  route
221070,     00:20:55,   member,     to 
4082,       00:10:06,   member,     Ellis Ave & 60th St to Ellis Ave & 55th St
3652,       00:09:51,   member,     Ellis Ave & 55th St to Ellis Ave & 60th St
3109,       00:09:53,   member,     Ellis Ave & 60th St to University Ave & 57th St
3010,       00:08:43,   member,     University Ave & 57th St to Ellis Ave & 60th St
1989,       00:06:27,   member,     Calumet Ave & 33rd St to State St & 33rd St
1962,       00:29:29,   member,     University Ave & 57th St to 
1954,       00:07:15,   member,     State St & 33rd St to Calumet Ave & 33rd St
1860,       00:08:48,   member,     Loomis St & Lexington St to Morgan St & Polk St
1809,       00:15:10,   member,     Ellis Ave & 60th St to 

Casuals: CSV Table

ride_count, avg_ride,   member_casual,  route
202148,     00:34:12,   casual,     to 
11683,      01:47:09,   casual,     Streeter Dr & Grand Ave to Streeter Dr & Grand Ave
6111,       01:46:29,   casual,     Millennium Park to Millennium Park
5900,       02:00:39,   casual,     Michigan Ave & Oak St to Michigan Ave & Oak St
4669,       01:34:21,   casual,     Lake Shore Dr & Monroe to Lake Shore Dr & Monroe
3445,       02:07:18,   casual,     Buckingham Fountain to Buckingham Fountain
3309,       01:07:36,   casual,     Streeter Dr & Grand Ave to Millennium Park
3219,       01:53:20,   casual,     Theater on the Lake to Theater on the Lake
3116,       01:26:25,   casual,     DuSable Lake Shore Dr & Monroe St to 'same'
3028,       02:11:14,   casual,     Montrose Harbor to Montrose Harbor

{Ignore the null station_values this are tackled with R analysis}

Conclusions :

WORKBOOK 4: Shows the distribution of casual and member most popular routes.

/* Viz4 */
SELECT COUNT(ride_id) AS ride_count, sec_to_time(AVG(ride_length)) AS avg_ride_l, member_casual, CONCAT(start_station_name, " to ", end_station_name) AS route
FROM divvy_tripdata_2021
GROUP BY route
ORDER BY ride_count DESC
LIMIT 100;

SHEET1–> Columns: route {Sort route By Field in a descending order by Count of ride_count}; Rows: SECOND(avg_ride_l), ride_count {keep both continuous}; Color: member_casual; Filter: route {remove null station values}, member_casual {in this sheet keep member}

SHEET2–> Duplicate the sheet1 and change the filter to casual only.

DASHBOARD–> Make a side-by-side of both sheets without the legends or filter.

Dashboard 4

Conclusions :

WORKBOOK 5: Aims to describe the paths of the most popular routes.


/* Viz5 */
SELECT ride_id, member_casual, start_lat, start_lng, end_lat, end_lng
FROM divvy_tripdata_2021
WHERE member_casual LIKE '%casual%' AND start_lat IS NOT NULL AND start_lng IS NOT NULL AND end_lat IS NOT NULL AND end_lng IS NOT NULL AND start_lat != end_lat AND start_lng != end_lng
ORDER BY sqrt((end_lat-start_lat)*(end_lat-start_lat)-(end_lng-start_lng)*(end_lng-start_lng)) DESC
LIMIT 250; /*use to extract casual routes*/

SELECT ride_id, member_casual, start_lat, start_lng, end_lat, end_lng
FROM divvy_tripdata_2021
WHERE member_casual LIKE '%member%' AND start_lat IS NOT NULL AND start_lng IS NOT NULL AND end_lat IS NOT NULL AND end_lng IS NOT NULL AND start_lat != end_lat AND start_lng != end_lng
ORDER BY sqrt((end_lat-start_lat)*(end_lat-start_lat)-(end_lng-start_lng)*(end_lng-start_lng)) DESC
LIMIT 250; /*use to extract member routes*/

SHEET–> Drag and drop the line onto the sheet. Also drop the start and end points onto the sheet as a ‘Marks’ layer. Colour: member_casual.

Dashboard 5 casual

Dashboard 5 member

Conclusions :