├── .gitignore ├── Exercises ├── Exercise-1 │ ├── Dockerfile │ ├── README.md │ ├── docker-compose.yml │ ├── main.py │ └── requirements.txt ├── Exercise-10 │ ├── Dockerfile │ ├── README.md │ ├── data │ │ └── 202306-divvy-tripdata.csv │ ├── docker-compose.yml │ ├── main.py │ └── requirements.txt ├── Exercise-2 │ ├── Dockerfile │ ├── README.md │ ├── docker-compose.yml │ ├── main.py │ └── requirements.txt ├── Exercise-3 │ ├── Dockerfile │ ├── README.md │ ├── docker-compose.yml │ ├── main.py │ └── requirements.txt ├── Exercise-4 │ ├── Dockerfile │ ├── README.md │ ├── data │ │ ├── enough_already │ │ │ └── file-4.json │ │ ├── file-1.json │ │ ├── other_folder │ │ │ └── file-3.json │ │ └── some_folder │ │ │ ├── other_folder │ │ │ └── file-2.json │ │ │ └── test.csv │ ├── docker-compose.yml │ ├── main.py │ └── requirements.txt ├── Exercise-5 │ ├── Dockerfile │ ├── README.md │ ├── data │ │ ├── accounts.csv │ │ ├── products.csv │ │ └── transactions.csv │ ├── docker-compose.yml │ ├── main.py │ └── requirements.txt ├── Exercise-6 │ ├── Dockerfile │ ├── README.md │ ├── data │ │ ├── Divvy_Trips_2019_Q4.zip │ │ └── Divvy_Trips_2020_Q1.zip │ ├── docker-compose.yml │ ├── main.py │ └── requirements.txt ├── Exercise-7 │ ├── Dockerfile │ ├── README.md │ ├── data │ │ └── hard-drive-2022-01-01-failures.csv.zip │ ├── docker-compose.yml │ ├── main.py │ └── requirements.txt ├── Exercise-8 │ ├── Dockerfile │ ├── README.md │ ├── data │ │ └── Electric_Vehicle_Population_Data.csv │ ├── docker-compose.yml │ ├── main.py │ └── requirements.txt └── Exercise-9 │ ├── Dockerfile │ ├── README.md │ ├── data │ └── 202306-divvy-tripdata.csv │ ├── docker-compose.yml │ ├── main.py │ └── requirements.txt └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | *.idea* 2 | *.DS_Store* 3 | *postgres-data* -------------------------------------------------------------------------------- /Exercises/Exercise-1/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:latest 2 | 3 | WORKDIR app 4 | COPY . /app 5 | 6 | RUN python3 -m pip install -r requirements.txt -------------------------------------------------------------------------------- /Exercises/Exercise-1/README.md: -------------------------------------------------------------------------------- 1 | ## Exercise #1 - Downloading Files with Python. 2 | 3 | In this first exercise you will practice your Python skills, 4 | as well as learn about a very common task ... downloading data files 5 | from a `HTTP` source. 6 | You will have to unzip the files with Python as well. 7 | 8 | 9 | #### Setup 10 | 1. Change directories at the command line 11 | to be inside the `Exercise-1` folder `cd Exercises/Exercise-1` 12 | 13 | 2. Run `docker build --tag=exercise-1 .` to build the `Docker` image. 14 | 15 | 3. There is a file called `main.py` in the `Exercise-1` directory, this 16 | is where you `Python` code to complete the exercise should go. 17 | 18 | 4. Once you have finished the project or want to test run your code, 19 | run the following command `docker-compose up run` from inside the `Exercises/Exercise-1` directory 20 | 21 | #### Problems Statement 22 | You need to download 10 files that are sitting at the following specified 23 | `HTTP` urls. You will use the `Python` package `requests` to do this 24 | work. 25 | 26 | You will need to pull the filename from the download uri. 27 | 28 | The files are `zip` files that will also need to be unzipped into 29 | their `csv` format. 30 | 31 | They should be downloaded into a folder called `downloads` which 32 | does not exist currently inside the `Exercise-1` folder. You should 33 | use `Python` to create the directory, do not do it manually. 34 | 35 | Generally, your script should do the following ... 36 | 1. create the directory `downloads` if it doesn't exist 37 | 2. download the files one by one. 38 | 3. split out the filename from the uri, so the file keeps its 39 | original filename. 40 | 41 | 4. Each file is a `zip`, extract the `csv` from the `zip` and delete 42 | the `zip` file. 43 | 5. For extra credit, download the files in an `async` manner using the 44 | `Python` package `aiohttp`. Also try using `ThreadPoolExecutor` in 45 | `Python` to download the files. Also write unit tests to improve your skills. 46 | 47 | #### Download URIs are listed in the `main.py` file. 48 | 49 | ### Hints 50 | 1. Don't assume all the uri's are valid. 51 | 2. One approach would be the `Python` method `split()` to retrieve filename for uri, 52 | or maybe find the last occurrence of `/` and take the rest of the string. -------------------------------------------------------------------------------- /Exercises/Exercise-1/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3.9" 2 | services: 3 | test: 4 | image: "exercise-1" 5 | volumes: 6 | - .:/app 7 | command: python3 -m pytest 8 | run: 9 | image: "exercise-1" 10 | volumes: 11 | - .:/app 12 | command: python3 main.py -------------------------------------------------------------------------------- /Exercises/Exercise-1/main.py: -------------------------------------------------------------------------------- 1 | import requests 2 | 3 | download_uris = [ 4 | "https://divvy-tripdata.s3.amazonaws.com/Divvy_Trips_2018_Q4.zip", 5 | "https://divvy-tripdata.s3.amazonaws.com/Divvy_Trips_2019_Q1.zip", 6 | "https://divvy-tripdata.s3.amazonaws.com/Divvy_Trips_2019_Q2.zip", 7 | "https://divvy-tripdata.s3.amazonaws.com/Divvy_Trips_2019_Q3.zip", 8 | "https://divvy-tripdata.s3.amazonaws.com/Divvy_Trips_2019_Q4.zip", 9 | "https://divvy-tripdata.s3.amazonaws.com/Divvy_Trips_2020_Q1.zip", 10 | "https://divvy-tripdata.s3.amazonaws.com/Divvy_Trips_2220_Q1.zip", 11 | ] 12 | 13 | 14 | def main(): 15 | # your code here 16 | pass 17 | 18 | 19 | if __name__ == "__main__": 20 | main() 21 | -------------------------------------------------------------------------------- /Exercises/Exercise-1/requirements.txt: -------------------------------------------------------------------------------- 1 | requests==2.27.1 -------------------------------------------------------------------------------- /Exercises/Exercise-10/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:24.04 2 | 3 | RUN apt-get update && \ 4 | apt-get install -y default-jdk scala wget vim software-properties-common python3.8 python3-pip curl unzip libpq-dev build-essential libssl-dev libffi-dev python3-dev && \ 5 | apt-get clean 6 | 7 | RUN wget https://archive.apache.org/dist/spark/spark-3.5.0/spark-3.5.0-bin-hadoop3.tgz && \ 8 | tar xvf spark-3.5.0-bin-hadoop3.tgz && \ 9 | mv spark-3.5.0-bin-hadoop3/ /usr/local/spark && \ 10 | ln -s /usr/local/spark spark 11 | 12 | WORKDIR app 13 | COPY . /app 14 | 15 | RUN pip3 install -r requirements.txt --break-system-packages 16 | 17 | ENV PYSPARK_PYTHON=python3 -------------------------------------------------------------------------------- /Exercises/Exercise-10/README.md: -------------------------------------------------------------------------------- 1 | ## Exercise 10 - Data Quality with Great Expectations 2 | 3 | In this exercise we are to learn about data quality and data quality checks, 4 | specifcally with a tool called Great Expectations. https://greatexpectations.io/ 5 | We have a datasets in Postgres along with an existing data pipeline that is having 6 | data quality issues, you need to implement data quality checks to catch these problems. 7 | 8 | #### Setup 9 | 1. Change directories at the command line 10 | to be inside the `Exercise-10` folder `cd Exercises/Exercise-10` 11 | 12 | 2. Run `docker build --tag=exercise-10 .` to build the `Docker` image. 13 | 14 | 3. There is a file called `main.py` in the `Exercise-10` directory, this 15 | is where the data pipeline exists and the data quality checks need to go. 16 | 17 | 4. Once you have finished the project or want to test run your code, 18 | run the following command `docker-compose up run` from inside the `Exercises/Exercise-10` directory 19 | The code should raise some data quality errors. 20 | 21 | #### Problems Statement 22 | There is a folder called `data` in this current directory, `Exercises/Exercise-10`. Inside this 23 | folder there is a `csv` file. The file is called `202306-divvy-tripdate.csv`. This is an open source 24 | data set bike trips. 25 | 26 | Generally the files look like this ... 27 | ``` 28 | "ride_id","rideable_type","started_at","ended_at","start_station_name","start_station_id","end_station_name","end_station_id","start_lat","start_lng","end_lat","end_lng","member_casual" 29 | "6F1682AC40EB6F71","electric_bike","2023-06-05 13:34:12","2023-06-05 14:31:56",,,,,41.91,-87.69,41.91,-87.7,"member" 30 | ``` 31 | 32 | Recently the analytics that have been calculating the max bike trip durations have shown some very strange 33 | and long trip durations. It's expected that most bike trips start and end on the same day. We need to 34 | implement a Data Quality alert that will let us know when we are getting erroneous durations in ride times. 35 | 36 | 1. Use Great Expectations to satisfy this requirement. 37 | 2. The current dataset includes erroneous trip lenghts, when you run this pipeline (using `docker-compose up run`) 38 | your data quality checks should pick up on this. 39 | 40 | 41 | If you don't know where to start check out this blog post https://www.confessionsofadataguy.com/great-expectations-with-apache-spark-a-tale-of-data-quality/ 42 | 43 | 44 | -------------------------------------------------------------------------------- /Exercises/Exercise-10/data/202306-divvy-tripdata.csv: -------------------------------------------------------------------------------- 1 | "ride_id","rideable_type","started_at","ended_at","start_station_name","start_station_id","end_station_name","end_station_id","start_lat","start_lng","end_lat","end_lng","member_casual" 2 | "6F1682AC40EB6F71","electric_bike","2023-06-05 13:34:12","2023-06-05 14:31:56",,,,,41.91,-87.69,41.91,-87.7,"member" 3 | "622A1686D64948EB","electric_bike","2023-06-05 01:30:22","2023-06-05 01:33:06",,,,,41.94,-87.65,41.94,-87.65,"member" 4 | "3C88859D926253B4","electric_bike","2023-06-20 18:15:49","2023-06-20 18:32:05",,,,,41.95,-87.68,41.92,-87.63,"member" 5 | "EAD8A5E0259DEC88","electric_bike","2023-06-19 14:56:00","2023-06-19 15:00:35",,,,,41.99,-87.65,41.98,-87.66,"member" 6 | "5A36F21930D6A55C","electric_bike","2023-06-19 15:03:34","2023-06-19 15:07:16",,,,,41.98,-87.66,41.99,-87.65,"member" 7 | "CF682EA7D0F961DB","electric_bike","2023-06-09 21:30:25","2023-06-09 21:49:52",,,,,41.99,-87.68,41.94,-87.65,"member" 8 | "4910FBB710157754","electric_bike","2023-06-03 13:34:09","2023-06-03 13:34:28",,,,,41.88,-87.62,41.88,-87.62,"member" 9 | "EA19D850A42F56D8","electric_bike","2023-06-03 13:34:46","2023-06-03 13:35:00",,,,,41.88,-87.62,41.88,-87.62,"member" 10 | "E68F43784662A2D0","electric_bike","2023-06-02 22:27:35","2023-06-02 22:35:26",,,,,41.95,-87.64,41.95,-87.65,"member" 11 | "5A013E29CC001611","electric_bike","2023-06-02 21:18:31","2023-06-03 01:27:19",,,,,41.87,-87.63,41.89,-87.63,"member" 12 | "4F90CD311BEFEE10","electric_bike","2023-06-23 17:26:02","2023-06-23 17:31:08",,,,,41.93,-87.63,41.94,-87.64,"member" 13 | "37A429F1BF359220","electric_bike","2023-06-23 15:37:49","2023-06-23 16:02:04",,,,,41.89,-87.66,41.93,-87.63,"member" 14 | "ABF4F851DE485B76","electric_bike","2023-06-30 18:56:13","2023-06-30 19:30:40",,,,,41.96,-87.66,41.88,-87.65,"member" 15 | "5D351FDB750E3CFB","electric_bike","2023-06-02 16:24:02","2023-06-02 16:38:43",,,,,41.85,-87.62,41.86,-87.62,"member" 16 | "8FF8A97580847907","electric_bike","2023-06-02 12:03:13","2023-06-02 12:11:01",,,,,41.98,-87.67,41.99,-87.67,"member" 17 | "F123B5D34B002CDB","electric_bike","2023-06-30 06:12:31","2023-06-30 06:23:05",,,,,41.9,-87.68,41.93,-87.68,"member" 18 | "CA8E2C38AF641DFB","electric_bike","2023-06-30 08:28:51","2023-06-30 08:37:45",,,,,41.93,-87.68,41.9,-87.68,"member" 19 | "93CCE4EA48CFDB69","electric_bike","2023-06-30 09:09:24","2023-06-30 09:17:41",,,,,41.93,-87.64,41.92,-87.65,"member" 20 | "FDBCEFE7890F7262","electric_bike","2023-06-30 16:29:48","2023-06-30 16:38:51",,,,,41.95,-87.66,41.93,-87.65,"member" 21 | "F119ACADE5F89EAB","electric_bike","2023-06-30 13:55:44","2023-06-30 14:06:13",,,,,41.93,-87.65,41.95,-87.66,"member" 22 | "411EB7D2FE4B54A8","electric_bike","2023-06-29 21:02:14","2023-06-29 21:04:55",,,,,41.92,-87.64,41.91,-87.63,"member" 23 | "44A924DF9891C03F","electric_bike","2023-06-18 14:46:23","2023-06-18 15:22:07",,,,,41.8,-87.59,41.87,-87.62,"member" 24 | "F78EDCE3544408F9","electric_bike","2023-06-06 16:52:20","2023-06-06 17:03:57",,,,,41.88,-87.65,41.9,-87.63,"member" 25 | "8CE03F2158127D8E","electric_bike","2023-06-06 06:42:55","2023-06-06 06:46:16",,,,,41.87,-87.66,41.87,-87.67,"member" 26 | "DDA217272F2379E3","electric_bike","2023-06-21 18:08:03","2023-06-21 18:12:38",,,,,41.95,-87.66,41.94,-87.65,"member" 27 | "9DF626744417CB49","electric_bike","2023-06-24 09:54:23","2023-06-24 10:05:31",,,,,41.94,-87.71,41.95,-87.68,"member" 28 | "E4EF4EF28E69B0F1","electric_bike","2023-06-24 16:10:07","2023-06-24 16:22:45",,,,,41.95,-87.68,41.94,-87.71,"member" 29 | "678764B0D303F1B3","electric_bike","2023-06-23 22:50:56","2023-06-23 23:15:52",,,,,41.87,-87.61,41.87,-87.63,"member" 30 | "8DD1732A2DB6D64A","electric_bike","2023-06-03 23:58:37","2023-06-04 00:07:01",,,,,41.91,-87.63,41.89,-87.63,"member" 31 | "E99AB3A41A8AA61E","electric_bike","2023-06-03 22:24:22","2023-06-03 22:33:01",,,,,41.93,-87.65,41.91,-87.63,"member" 32 | "A1857861DA98C6CF","electric_bike","2023-06-03 20:28:39","2023-06-03 20:28:52",,,,,41.9,-87.73,41.9,-87.73,"member" 33 | "CEEEA2D0B898C0FC","electric_bike","2023-06-03 20:29:43","2023-06-03 20:45:39",,,,,41.9,-87.73,41.93,-87.74,"member" 34 | "88973C121A3EF308","electric_bike","2023-06-04 17:55:22","2023-06-04 17:56:25",,,,,41.95,-87.65,41.95,-87.65,"member" 35 | "5CE5EA6181A983B9","electric_bike","2023-06-04 17:52:46","2023-06-04 17:54:48",,,,,41.95,-87.65,41.95,-87.65,"member" 36 | "0E093B3D4FE3A983","electric_bike","2023-06-14 12:34:26","2023-06-14 13:14:57",,,,,41.88,-87.63,41.88,-87.63,"member" 37 | "AC2829D4D64318D9","electric_bike","2023-06-03 17:16:16","2023-06-03 17:25:45",,,,,42.06,-87.68,42.05,-87.68,"member" 38 | "B4BBA986C666F932","electric_bike","2023-06-19 15:35:50","2023-06-19 15:43:17",,,,,41.99,-87.68,41.99,-87.66,"member" 39 | "CB98F800FFEA28B3","electric_bike","2023-06-01 19:01:02","2023-06-01 19:10:48",,,,,41.94,-87.72,41.92,-87.7,"member" 40 | "C8BA6AC904B3A31B","electric_bike","2023-06-15 20:34:53","2023-06-15 20:39:17",,,,,41.95,-87.65,41.94,-87.65,"member" 41 | "778C7EE84AB01969","electric_bike","2023-06-15 19:09:21","2023-06-15 19:25:08",,,,,41.91,-87.63,41.88,-87.65,"member" 42 | "5960CE69A6C6597E","electric_bike","2023-06-21 20:18:32","2023-06-21 20:26:13",,,,,41.93,-87.65,41.93,-87.63,"member" 43 | "FECD914A148DA978","electric_bike","2023-06-20 18:32:51","2023-06-20 18:43:35",,,,,41.79,-87.6,41.8,-87.59,"member" 44 | "0B285EE9CABCE7FC","electric_bike","2023-06-20 08:09:31","2023-06-20 08:16:43",,,,,41.88,-87.64,41.89,-87.63,"member" 45 | "C742539F8713F707","electric_bike","2023-06-09 18:09:44","2023-06-09 18:58:16",,,,,41.9,-87.68,41.98,-87.67,"member" 46 | "7B685D4030FA2D2D","electric_bike","2023-06-17 12:16:57","2023-06-17 12:17:23",,,,,41.91,-87.65,41.91,-87.65,"member" 47 | "4EECC54CC8220F86","electric_bike","2023-06-16 19:23:41","2023-06-16 19:32:56",,,,,41.8,-87.58,41.8,-87.59,"member" 48 | "02C584945CF0AC21","electric_bike","2023-06-28 16:44:12","2023-06-28 16:55:20",,,,,41.89,-87.65,41.91,-87.64,"member" 49 | "1D64FCAE271346A3","electric_bike","2023-06-17 19:00:52","2023-06-17 21:50:31",,,,,41.88,-87.63,41.89,-87.63,"member" 50 | "FF915545C15DD839","electric_bike","2023-06-17 11:51:58","2023-06-17 12:04:59",,,,,41.84,-87.62,41.84,-87.62,"member" 51 | "02B7646C29F061EC","electric_bike","2023-06-22 12:40:34","2023-06-22 13:01:53",,,,,41.93,-87.71,41.89,-87.66,"member" 52 | "65A546D4AD364098","electric_bike","2023-06-22 11:44:03","2023-06-22 11:52:08",,,,,41.91,-87.72,41.93,-87.71,"member" 53 | "9300C4081918E783","electric_bike","2023-06-09 17:49:14","2023-06-09 18:01:23",,,,,41.95,-87.65,41.96,-87.64,"member" 54 | "F65F817C803AF331","electric_bike","2023-06-20 06:46:35","2023-06-20 06:47:28",,,,,41.98,-87.66,41.98,-87.66,"member" 55 | "690B15280B1BB47B","electric_bike","2023-06-20 17:13:20","2023-06-20 17:13:39",,,,,41.91,-87.64,41.91,-87.64,"member" 56 | "9C2BF661239FB1EF","electric_bike","2023-06-20 17:14:20","2023-06-20 17:19:12",,,,,41.91,-87.64,41.9,-87.63,"member" 57 | "CC36A08422C04A6B","electric_bike","2023-06-03 15:51:24","2023-06-03 15:52:07",,,,,41.92,-87.64,41.92,-87.64,"member" 58 | "CD1C9FF95F7CD8D5","electric_bike","2023-06-03 17:40:25","2023-06-03 17:45:32",,,,,41.95,-87.68,41.94,-87.67,"member" 59 | "CCD2A5325B5274CB","electric_bike","2023-06-02 21:51:45","2023-06-02 22:01:57",,,,,41.91,-87.63,41.89,-87.64,"member" 60 | "28A41009AFBC345E","electric_bike","2023-06-02 21:49:30","2023-06-02 21:55:59",,,,,41.87,-87.61,41.88,-87.62,"member" 61 | "5FBD93F7B67E50A7","electric_bike","2023-06-13 16:53:05","2023-06-13 16:55:23",,,,,41.93,-87.65,41.93,-87.66,"member" 62 | "9E9C4792EDEBEB55","electric_bike","2023-06-13 15:51:22","2023-06-13 15:54:57",,,,,41.93,-87.66,41.93,-87.65,"member" 63 | "AB3A6CBCA4D650A4","electric_bike","2023-06-09 20:14:54","2023-06-09 20:21:16",,,,,41.96,-87.64,41.96,-87.65,"member" 64 | "69DCD78D6547CBA6","electric_bike","2023-06-28 19:00:25","2023-06-28 19:07:18",,,,,41.91,-87.65,41.92,-87.65,"member" 65 | "79EDB8D05370E503","electric_bike","2023-06-17 15:13:27","2023-06-17 15:22:48",,,"California Ave & Division St","13256",41.93,-87.71,41.903029,-87.697474,"member" 66 | "B6F161BD6377AF9A","electric_bike","2023-06-17 16:10:17","2023-06-17 16:55:01",,,,,41.84,-87.61,41.79,-87.58,"casual" 67 | "BA7A89A1DA576CF0","electric_bike","2023-06-16 21:22:29","2023-06-16 21:27:07",,,,,41.92,-87.65,41.92,-87.65,"member" 68 | "88BDBFF0BC5E69C1","electric_bike","2023-06-17 11:40:50","2023-06-17 11:44:40",,,,,41.92,-87.65,41.92,-87.65,"member" 69 | "A987BDA0C47139DF","electric_bike","2023-06-28 17:17:31","2023-06-28 17:19:01",,,,,41.96,-87.71,41.96,-87.71,"member" 70 | "E624BB23020C26D5","electric_bike","2023-06-28 17:38:52","2023-06-28 17:44:17",,,,,41.96,-87.71,41.96,-87.73,"member" 71 | "D1D046D01D18AC69","electric_bike","2023-06-28 09:57:43","2023-06-28 10:06:35",,,,,41.89,-87.62,41.88,-87.63,"member" 72 | "41FDE647AF289A22","electric_bike","2023-06-27 21:09:39","2023-06-27 21:25:11",,,,,41.9,-87.62,41.9,-87.68,"member" 73 | "FDF531239C8A8EFF","electric_bike","2023-06-12 23:27:15","2023-06-12 23:33:15",,,,,41.94,-87.65,41.94,-87.66,"member" 74 | "5CB51B1B00B56B71","electric_bike","2023-06-13 10:42:43","2023-06-13 12:42:00",,,,,41.88,-87.64,41.89,-87.63,"member" 75 | "3FF948CB72A733DB","electric_bike","2023-06-12 21:03:19","2023-06-12 21:11:25",,,,,41.99,-87.66,42.01,-87.67,"member" 76 | "2B89FDC82263BAA6","electric_bike","2023-06-12 23:03:07","2023-06-12 23:11:49",,,,,42.01,-87.67,41.99,-87.67,"member" 77 | "1804DC6689E09F02","electric_bike","2023-06-04 16:35:04","2023-06-04 16:42:06",,,,,41.94,-87.64,41.93,-87.65,"member" 78 | "C3146D55D4598156","electric_bike","2023-06-04 17:14:05","2023-06-04 17:20:16",,,,,41.93,-87.65,41.94,-87.64,"member" 79 | "57727BFFB6A1B677","electric_bike","2023-06-14 16:57:56","2023-06-14 17:03:39",,,,,41.97,-87.67,41.96,-87.66,"member" 80 | "B9A4AA238E83D959","electric_bike","2023-06-14 11:12:45","2023-06-14 11:30:47",,,,,41.99,-87.67,41.99,-87.67,"member" 81 | "91F12414CE9AC787","electric_bike","2023-06-06 18:05:06","2023-06-06 18:23:19",,,,,41.95,-87.68,41.92,-87.63,"member" 82 | "0A33F2B9760FDB08","electric_bike","2023-06-18 16:46:10","2023-06-18 17:04:22",,,,,41.88,-87.63,41.91,-87.67,"member" 83 | "FBAD2E46F1454A9C","electric_bike","2023-06-13 20:26:53","2023-06-13 20:30:02",,,,,41.93,-87.65,41.93,-87.65,"member" 84 | "078F54C9859642E1","electric_bike","2023-06-14 00:21:44","2023-06-14 00:24:39",,,,,41.94,-87.65,41.94,-87.65,"member" 85 | "1EF78B465496EF7B","electric_bike","2023-06-14 16:08:55","2023-06-14 16:11:43",,,,,41.94,-87.65,41.94,-87.65,"member" 86 | "AC2CECC3D38FBB6F","electric_bike","2023-06-04 16:08:22","2023-06-04 16:12:26",,,,,41.94,-87.66,41.94,-87.66,"member" 87 | "BABD884382D018B7","electric_bike","2023-06-04 16:15:38","2023-06-04 16:32:14",,,,,41.94,-87.66,41.91,-87.64,"member" 88 | "BE9355D987D363F8","electric_bike","2023-06-08 18:36:20","2099-06-08 18:41:23",,,,,41.91,-87.65,41.91,-87.63,"member" 89 | "FCD0868280A69270","electric_bike","2023-06-08 17:15:34","2023-06-08 17:32:05",,,,,41.89,-87.63,41.91,-87.62,"member" 90 | "F032071C91120051","electric_bike","2023-06-11 12:58:55","2023-06-11 13:11:38",,,,,41.7,-87.66,41.71,-87.67,"member" 91 | "8B8EF84425B6DFBF","electric_bike","2023-06-11 16:51:13","2023-06-11 17:10:36",,,,,41.94,-87.65,41.92,-87.68,"member" 92 | "E393BD4121996D28","electric_bike","2023-06-09 17:42:08","2023-06-09 17:45:53",,,,,41.95,-87.65,41.94,-87.65,"member" 93 | "E34D62A5C2503B03","electric_bike","2023-06-09 06:14:35","2023-06-09 06:23:02",,,,,41.9,-87.68,41.93,-87.68,"member" 94 | "701224736CF2B465","electric_bike","2023-06-09 08:21:02","2023-06-09 08:28:41",,,,,41.93,-87.68,41.9,-87.68,"member" 95 | "CF9F2E2274FB2356","electric_bike","2023-06-02 18:23:35","2023-06-02 18:37:23",,,,,41.88,-87.65,41.91,-87.63,"member" 96 | "3DAA99DD1C7C00BE","electric_bike","2023-06-19 16:08:42","2023-06-19 16:11:31",,,,,41.9,-87.67,41.9,-87.67,"member" 97 | "732F4842B7D3FE98","electric_bike","2023-06-04 11:20:41","2023-06-04 11:33:14",,,,,41.93,-87.71,41.92,-87.73,"member" 98 | "8DB4EE9EA160B9FD","electric_bike","2023-06-29 21:05:19","2023-06-29 21:10:45",,,,,42.0,-87.7,42.0,-87.69,"member" 99 | "B8A194D31FBB52C8","electric_bike","2023-06-07 18:10:41","2023-06-07 18:28:46",,,,,41.94,-87.64,41.96,-87.64,"member" 100 | "0F2A62EB1002DE50","electric_bike","2023-06-07 18:46:33","2023-06-07 18:51:10",,,,,41.91,-87.64,41.92,-87.64,"member" 101 | "DF475C5155C0EE43","electric_bike","2023-06-06 20:39:53","2023-06-06 20:42:58",,,,,41.8,-87.59,41.8,-87.59,"member" 102 | "E061EC0E4E9504D4","electric_bike","2023-06-07 16:57:25","2023-06-07 17:00:13",,,,,41.8,-87.59,41.8,-87.59,"member" 103 | "94C057CCCC7EF742","electric_bike","2023-06-28 06:02:27","2023-06-28 06:12:25",,,,,41.8,-87.59,41.79,-87.6,"member" 104 | "253EED5A6D516B03","electric_bike","2023-06-28 08:39:40","2023-06-28 08:48:53",,,,,41.92,-87.63,41.94,-87.64,"member" 105 | "2826E5D0AB4DB637","electric_bike","2023-06-28 11:39:35","2023-06-28 11:46:17",,,,,41.91,-87.72,41.93,-87.72,"member" 106 | "CA50C8A77771C599","electric_bike","2023-06-28 03:37:54","2023-06-28 03:53:56",,,,,41.94,-87.65,41.99,-87.68,"member" 107 | "CA0EC87726CEB834","electric_bike","2023-06-27 21:26:40","2023-06-27 21:26:49",,,,,41.99,-87.68,41.99,-87.68,"member" 108 | "3E14E3FD93885FEF","electric_bike","2023-06-28 12:44:18","2023-06-28 12:54:23",,,,,41.94,-87.69,41.94,-87.69,"member" 109 | "E92935C47EBC14DB","electric_bike","2023-06-28 17:06:43","2023-06-28 17:28:00",,,,,41.94,-87.69,41.88,-87.64,"member" 110 | "1D55FB96165A9178","electric_bike","2023-06-28 17:05:59","2023-06-28 17:06:29",,,,,41.94,-87.69,41.94,-87.69,"member" 111 | "F7D6CEC77FC83729","electric_bike","2023-06-28 13:24:55","2023-06-28 13:27:27",,,,,41.94,-87.69,41.94,-87.69,"member" 112 | "DEFC66E7B7704E31","electric_bike","2023-06-26 21:30:37","2023-06-26 21:43:48",,,,,41.91,-87.69,41.9,-87.69,"member" 113 | "D3CDB28CD95FD7FF","electric_bike","2023-06-27 13:31:36","2023-06-27 13:53:36",,,,,41.94,-87.64,41.89,-87.62,"member" 114 | "E32AF16B61FF8340","electric_bike","2023-06-16 19:00:11","2023-06-16 19:06:00",,,,,41.8,-87.59,41.8,-87.58,"member" 115 | "FA9BBE5497E2C530","electric_bike","2023-06-04 20:35:39","2023-06-04 20:35:53",,,,,41.85,-87.64,41.85,-87.64,"member" 116 | "C35BD4AE5D353B72","electric_bike","2023-06-27 11:48:10","2023-06-27 11:54:45",,,,,41.94,-87.74,41.94,-87.74,"member" 117 | "3F984B9CDEBD811E","electric_bike","2023-06-27 18:18:46","2023-06-27 18:19:54",,,,,41.8,-87.6,41.8,-87.6,"member" 118 | "ADF66923E80B20CA","electric_bike","2023-06-27 14:53:12","2023-06-27 14:56:31",,,,,41.89,-87.63,41.88,-87.63,"member" 119 | "A7197CE1FE7D38A6","electric_bike","2023-06-15 16:37:39","2023-06-15 17:01:05",,,,,41.94,-87.64,41.94,-87.64,"member" 120 | "C01CD4C429067839","electric_bike","2023-06-15 18:59:04","2023-06-15 19:13:24",,,,,41.9,-87.63,41.94,-87.64,"member" 121 | "98F1FE97B30CB3FD","electric_bike","2023-06-16 15:09:17","2023-06-16 15:23:24",,,,,41.88,-87.63,41.89,-87.62,"member" 122 | "8ACB34D524632A2E","electric_bike","2023-06-16 10:53:38","2023-06-16 12:47:48",,,,,41.88,-87.64,41.88,-87.63,"member" 123 | "7C638115AF5D4A76","electric_bike","2023-06-23 09:49:52","2023-06-23 10:31:26",,,,,41.86,-87.65,41.78,-87.59,"member" 124 | "93948D052F59C399","electric_bike","2023-06-26 17:49:59","2023-06-26 17:53:54",,,,,41.92,-87.65,41.92,-87.65,"member" 125 | "821160A717276C5F","electric_bike","2023-06-21 20:21:10","2023-06-21 20:30:00",,,,,41.91,-87.63,41.89,-87.63,"member" 126 | "57A342168B5299F0","electric_bike","2023-06-22 14:20:47","2023-06-22 14:41:12",,,,,41.93,-87.65,41.89,-87.64,"member" 127 | "C86BB3A91CB89108","electric_bike","2023-06-21 20:20:53","2023-06-21 20:45:00",,,,,41.91,-87.63,41.95,-87.65,"member" 128 | "F93945DEA0B8135D","electric_bike","2023-06-24 19:29:27","2023-06-24 19:36:21",,,,,41.94,-87.65,41.93,-87.66,"member" 129 | "86EB3B2B863A6CEA","electric_bike","2023-06-14 17:27:35","2023-06-14 17:29:51",,,,,41.8,-87.59,41.79,-87.59,"member" 130 | "334BE3387BAE58CF","electric_bike","2023-06-23 10:17:56","2023-06-23 10:39:57",,,,,41.8,-87.6,41.79,-87.59,"member" 131 | "E94D08687FC3F90C","electric_bike","2023-06-23 11:23:34","2023-06-23 11:32:42",,,,,41.79,-87.59,41.8,-87.59,"member" 132 | "F0E103AC14AD9A16","electric_bike","2023-06-23 11:42:41","2023-06-23 11:59:39",,,,,41.8,-87.59,41.8,-87.6,"member" 133 | "89B947576850FE5A","electric_bike","2023-06-10 19:15:07","2023-06-10 19:20:18",,,,,41.94,-87.64,41.95,-87.64,"casual" 134 | "85A2D025C600DFEA","electric_bike","2023-06-04 00:47:28","2023-06-04 00:47:55",,,,,41.95,-87.67,41.95,-87.67,"member" 135 | "2AFB961F8C6A47FC","electric_bike","2023-06-04 00:44:43","2023-06-04 00:47:06",,,,,41.95,-87.67,41.95,-87.67,"member" 136 | "49637203A6AED65F","electric_bike","2023-06-25 00:31:31","2023-06-25 00:42:55",,,,,41.95,-87.65,41.93,-87.64,"member" 137 | "8B82624933BF86D8","electric_bike","2023-06-25 14:59:39","2023-06-25 15:15:46",,,,,41.95,-87.65,41.96,-87.69,"member" 138 | "F8BE6CFC0DA9F910","electric_bike","2023-06-25 09:39:48","2023-06-25 09:47:00",,,,,41.89,-87.63,41.91,-87.63,"member" 139 | "EAFBF2F1B7E3B5DB","electric_bike","2023-06-25 01:15:27","2099-06-25 01:18:06",,,,,41.89,-87.64,41.89,-87.63,"member" 140 | "41680F35CB65DA9A","electric_bike","2023-06-07 18:49:57","2023-06-07 18:57:18",,,,,41.79,-87.6,41.8,-87.59,"member" 141 | "32A2E16AFD7F018F","electric_bike","2023-06-22 08:51:51","2023-06-22 08:52:36",,,,,41.93,-87.64,41.93,-87.64,"member" 142 | "EFA705AA2A6EA689","electric_bike","2023-06-22 12:10:24","2023-06-22 12:18:32",,,,,41.79,-87.6,41.8,-87.59,"member" 143 | "BCF6BF29C0BD4D5D","electric_bike","2023-06-29 03:42:11","2023-06-29 03:45:09",,,,,41.8,-87.59,41.8,-87.6,"member" 144 | "9D9313D41162F55E","electric_bike","2023-06-30 20:08:12","2023-06-30 20:10:38",,,,,41.94,-87.65,41.94,-87.65,"member" 145 | "68049E3E14779953","electric_bike","2023-06-30 21:22:16","2023-06-30 21:53:22",,,,,42.01,-87.69,42.01,-87.66,"member" 146 | "C10313ADEBC5A814","electric_bike","2023-06-30 22:26:57","2023-06-30 22:34:47",,,,,42.01,-87.66,42.0,-87.66,"member" 147 | "1FF2AF45BCE38FDD","electric_bike","2023-06-30 20:54:21","2023-06-30 21:11:09",,,,,41.93,-87.64,41.9,-87.67,"member" 148 | "A76D6E7BE56F7C1E","electric_bike","2023-06-10 18:40:34","2023-06-10 18:51:12",,,,,41.92,-87.63,41.93,-87.63,"casual" 149 | "C26EFE3A656A44AD","electric_bike","2023-06-10 17:21:52","2023-06-10 17:44:32",,,,,41.95,-87.64,41.92,-87.63,"casual" 150 | "8D7685A89AFF37C6","electric_bike","2023-06-10 16:22:50","2023-06-10 16:22:53",,,,,41.93,-87.66,41.93,-87.66,"member" 151 | "D098502930A79319","electric_bike","2023-06-10 16:23:03","2023-06-10 16:27:05",,,,,41.93,-87.66,41.94,-87.67,"member" 152 | "96675B5B9609C42A","electric_bike","2023-06-09 21:13:21","2023-06-09 21:23:54",,,,,41.96,-87.66,41.98,-87.68,"member" 153 | "34AD3D4D19FB375B","electric_bike","2023-06-09 19:10:17","2023-06-09 19:16:09",,,,,41.93,-87.65,41.94,-87.66,"member" 154 | "1D12B8F608CB3FEB","electric_bike","2023-06-09 18:17:56","2023-06-09 18:24:32",,,,,41.94,-87.65,41.93,-87.65,"member" 155 | "F8FDFDE2E4CD39DF","electric_bike","2023-06-08 21:50:22","2023-06-08 22:10:49",,,,,41.95,-87.65,41.9,-87.63,"member" 156 | "903E1891234938DC","electric_bike","2023-06-07 12:17:14","2023-06-07 13:24:43",,,,,41.79,-87.59,41.79,-87.59,"member" 157 | "7A5316AAFAC5F915","electric_bike","2023-06-07 13:30:33","2023-06-07 14:30:36",,,,,41.79,-87.59,41.8,-87.59,"member" 158 | "BB74973DA650EDEB","electric_bike","2023-06-17 16:24:41","2023-06-17 16:40:10",,,,,41.95,-87.65,41.95,-87.65,"member" 159 | "6700E3D74898D953","electric_bike","2023-06-17 18:18:56","2023-06-17 18:19:43",,,,,41.88,-87.63,41.88,-87.63,"member" 160 | "45BBC80D25F22971","electric_bike","2023-06-17 16:00:34","2023-06-17 16:04:41",,,,,41.96,-87.64,41.97,-87.65,"member" 161 | "24F70DAE8A337491","electric_bike","2023-06-01 16:19:45","2023-06-01 19:39:49",,,,,41.89,-87.62,41.88,-87.65,"member" 162 | "E326B6F0A6D8BF44","electric_bike","2023-06-27 17:42:55","2023-06-27 18:46:12",,,,,41.94,-87.69,41.85,-87.63,"member" 163 | "1836450AACBA3C9D","electric_bike","2023-06-26 22:20:23","2023-06-26 22:20:55",,,,,41.87,-87.63,41.87,-87.63,"member" 164 | "7D25022E8A825AF8","electric_bike","2023-06-26 22:15:20","2023-06-26 22:19:55",,,,,41.87,-87.63,41.87,-87.63,"member" 165 | "4E5C73913BACF2EF","electric_bike","2023-06-27 18:26:54","2023-06-27 18:34:07",,,,,41.91,-87.64,41.9,-87.63,"member" 166 | "800A2C86BB18686F","electric_bike","2023-06-22 18:50:37","2023-06-22 18:50:49",,,,,41.95,-87.65,41.95,-87.65,"member" 167 | "94B3E331E4550120","electric_bike","2023-06-22 18:51:13","2023-06-22 18:59:27",,,,,41.95,-87.65,41.95,-87.67,"member" 168 | "28E0D4994A0EFDFB","electric_bike","2023-06-30 19:47:11","2023-06-30 20:30:36",,,,,41.87,-87.62,41.87,-87.63,"member" 169 | "9077457B9D879EC2","electric_bike","2023-06-30 20:19:09","2023-06-30 20:33:48",,,,,41.93,-87.72,41.94,-87.69,"member" 170 | "FFEC9C838C060E4D","electric_bike","2023-06-29 10:20:59","2023-06-29 10:27:50",,,,,41.94,-87.65,41.94,-87.66,"member" 171 | "461519C869D54FE7","electric_bike","2023-06-30 22:09:55","2023-06-30 22:36:00",,,,,41.89,-87.65,41.97,-87.65,"member" 172 | "98EAD06CF60B652C","electric_bike","2023-06-20 08:58:57","2023-06-20 09:08:10",,,,,41.91,-87.7,41.92,-87.69,"member" 173 | "86457943EFAAE672","electric_bike","2023-06-25 22:48:48","2023-06-25 23:06:48",,,,,41.95,-87.65,41.98,-87.66,"member" 174 | "7C8586C270F91142","electric_bike","2023-06-26 18:11:29","2023-06-26 18:19:16",,,,,41.88,-87.64,41.89,-87.63,"member" 175 | "789AE04958309D80","electric_bike","2023-06-27 20:50:39","2023-06-27 20:57:28",,,,,41.94,-87.66,41.94,-87.65,"member" 176 | "849593E53D274F3E","electric_bike","2023-06-08 11:34:07","2023-06-08 11:38:56",,,,,41.98,-87.67,41.99,-87.67,"member" 177 | "FB87D5905C8C3874","electric_bike","2023-06-07 22:15:34","2023-06-07 22:22:30",,,,,42.01,-87.67,41.99,-87.68,"member" 178 | "3C1F3CC1D774BD60","electric_bike","2023-06-07 21:35:47","2023-06-07 21:42:51",,,,,41.99,-87.67,42.01,-87.67,"member" 179 | "3E07043BBF89854F","electric_bike","2023-06-08 16:33:11","2023-06-08 16:55:06",,,,,41.88,-87.66,41.88,-87.63,"member" 180 | "225B396CA51EE7AC","electric_bike","2023-06-13 11:19:13","2023-06-13 11:33:23",,,,,41.91,-87.67,41.89,-87.63,"member" 181 | "81B9B3294D100D0D","electric_bike","2023-06-07 18:04:10","2023-06-07 18:12:11",,,,,41.99,-87.65,41.97,-87.65,"member" 182 | "F92D556A1DFA76A4","electric_bike","2023-06-06 21:06:07","2023-06-06 21:47:09",,,,,41.87,-87.63,41.87,-87.63,"member" 183 | "56F792E1A698C21F","electric_bike","2023-06-07 17:39:29","2023-06-07 21:19:21",,,,,41.87,-87.63,41.87,-87.63,"member" 184 | "6E6313265B2746D8","electric_bike","2023-06-25 00:02:15","2023-06-25 00:19:21",,,,,41.89,-87.67,41.91,-87.72,"member" 185 | "8D53CFCF1E9B0C58","electric_bike","2023-06-25 00:45:05","2023-06-25 00:51:30",,,,,41.91,-87.72,41.93,-87.71,"member" 186 | "E08C8A011A6957F0","electric_bike","2023-06-25 12:30:38","2023-06-25 12:35:30",,,,,41.96,-87.65,41.96,-87.64,"member" 187 | "3CAF8982D118DB44","electric_bike","2023-06-25 17:23:43","2023-06-25 17:26:01",,,,,41.92,-87.72,41.91,-87.72,"member" 188 | "222115BC8D6057B1","electric_bike","2023-06-25 17:10:34","2023-06-25 17:17:12",,,,,41.93,-87.71,41.92,-87.72,"member" 189 | "C7FD208E76848B86","electric_bike","2023-06-10 14:11:49","2023-06-10 14:15:26",,,,,41.99,-87.65,41.98,-87.66,"member" 190 | "E060542AAB1DA602","electric_bike","2023-06-10 14:23:45","2023-06-10 14:27:12",,,,,41.98,-87.66,41.99,-87.65,"member" 191 | "4A70950871E6B4B1","electric_bike","2023-06-10 06:08:51","2023-06-10 06:18:50",,,,,41.8,-87.59,41.79,-87.6,"member" 192 | "67D01C6CEECE7F8B","electric_bike","2023-06-18 00:05:46","2023-06-18 00:09:15",,,,,41.93,-87.65,41.93,-87.66,"member" 193 | "B53254C6BDE989B1","electric_bike","2023-06-24 11:59:03","2023-06-24 12:06:37",,,,,41.95,-87.64,41.93,-87.63,"member" 194 | "9D2240D11C95D4BE","electric_bike","2023-06-24 08:28:59","2023-06-24 08:44:40",,,,,41.9,-87.63,41.95,-87.64,"member" 195 | "9FCD242001C22498","electric_bike","2023-06-24 13:12:03","2023-06-24 13:16:15",,,,,41.97,-87.64,41.98,-87.65,"member" 196 | "559EF42A84E245F9","electric_bike","2023-06-24 10:38:56","2023-06-24 10:42:43",,,,,41.98,-87.65,41.97,-87.64,"member" 197 | "812A7AE3A416E9EB","electric_bike","2023-06-23 22:21:53","2023-06-23 22:33:00",,,,,41.92,-87.64,41.94,-87.65,"member" 198 | "072871FEF28EC8CF","electric_bike","2023-06-05 08:43:01","2023-06-05 09:05:03",,,,,41.93,-87.64,41.88,-87.64,"member" 199 | "83C513A8A247D914","electric_bike","2023-06-03 21:02:27","2023-06-03 22:42:15",,,,,41.93,-87.65,41.95,-87.65,"member" 200 | "1E3EB4D1B41F6BDA","electric_bike","2023-06-30 16:59:09","2023-06-30 17:05:41",,,,,41.81,-87.6,41.81,-87.63,"member" 201 | "6C2FBC4AF18BBA4B","electric_bike","2023-06-29 20:38:31","2023-06-29 20:41:18",,,,,41.94,-87.64,41.94,-87.64,"member" 202 | "9131BD1299CE98FB","electric_bike","2023-06-30 03:07:18","2023-06-30 03:08:49",,,,,41.94,-87.64,41.94,-87.64,"member" 203 | "74AA28CC66071625","electric_bike","2023-06-29 20:48:14","2023-06-29 20:51:52",,,,,41.94,-87.64,41.94,-87.65,"member" 204 | "D24B16851C7E432B","electric_bike","2023-06-12 18:41:45","2023-06-12 18:59:31",,,,,41.88,-87.65,41.94,-87.64,"member" 205 | "83B229A5CB176534","electric_bike","2023-06-09 22:07:19","2023-06-09 22:20:28",,,,,41.92,-87.64,41.94,-87.64,"member" 206 | "7BCBC887F55EEF68","electric_bike","2023-06-10 16:04:06","2023-06-10 16:06:44",,,,,41.89,-87.62,41.89,-87.62,"member" 207 | "D1005D2FBE24B312","electric_bike","2023-06-10 10:52:57","2023-06-10 15:20:54",,,,,41.88,-87.63,41.91,-87.65,"member" 208 | "1657F54FF179AC86","electric_bike","2023-06-10 16:07:07","2023-06-10 17:28:54",,,,,41.89,-87.62,41.89,-87.63,"member" 209 | "F7EE447C66D0EFD8","electric_bike","2023-06-10 18:55:24","2023-06-10 19:03:38",,,,,41.98,-87.67,41.98,-87.67,"member" 210 | "3F8F414718443EFC","electric_bike","2023-06-10 00:25:27","2023-06-10 00:42:37",,,,,41.89,-87.67,41.91,-87.72,"member" 211 | "A6130D90302BEFD3","electric_bike","2023-06-09 19:32:35","2023-06-09 19:40:54",,,,,41.95,-87.65,41.96,-87.64,"member" 212 | "3E01E7E6219B6F0B","electric_bike","2023-06-09 21:24:01","2023-06-09 21:32:28",,,,,41.96,-87.64,41.95,-87.65,"member" 213 | "974584E345BFF379","electric_bike","2023-06-14 21:43:16","2023-06-14 22:09:26",,,,,41.91,-87.63,41.93,-87.71,"member" 214 | "4FC8029C0E48940C","electric_bike","2023-06-15 16:04:39","2023-06-15 16:10:48",,,,,41.79,-87.6,41.8,-87.59,"member" 215 | "13E37CB88EABAF88","electric_bike","2023-06-15 16:31:45","2023-06-15 16:34:09",,,,,41.8,-87.59,41.79,-87.59,"member" 216 | "FCDFA3BA47F94B53","electric_bike","2023-06-15 16:23:00","2023-06-15 16:24:57",,,,,41.8,-87.59,41.8,-87.59,"member" 217 | "50D7318051C284C2","electric_bike","2023-06-26 18:36:40","2023-06-26 18:44:51",,,,,41.91,-87.72,41.93,-87.71,"member" 218 | "4A4BC788EEF65C92","electric_bike","2023-06-26 16:55:07","2023-06-26 17:20:43",,,,,41.99,-87.67,41.94,-87.65,"member" 219 | "71B12C1E3644FADE","electric_bike","2023-06-26 16:01:40","2023-06-26 16:08:14",,,,,41.97,-87.67,41.99,-87.67,"member" 220 | "B99C01E70E4D15D8","electric_bike","2023-06-02 06:14:17","2023-06-02 06:23:26",,,,,41.91,-87.68,41.93,-87.68,"member" 221 | "3B1382E9C78DEB8C","electric_bike","2023-06-09 14:37:09","2023-06-09 14:45:51",,,,,41.97,-87.67,41.98,-87.67,"member" 222 | "5862AB43FE8B6296","electric_bike","2023-06-09 14:04:09","2023-06-09 14:12:46",,,,,41.7,-87.66,41.72,-87.67,"member" 223 | "27A3055021411FCA","electric_bike","2023-06-17 12:06:35","2023-06-17 12:16:47",,,,,41.94,-87.64,41.91,-87.63,"member" 224 | "C009FFF9472AA59D","electric_bike","2023-06-17 16:49:45","2023-06-17 16:59:39",,,,,41.91,-87.64,41.94,-87.64,"member" 225 | "8A079112A14A7DF1","electric_bike","2023-06-17 11:08:35","2023-06-17 11:25:30",,,,,42.07,-87.73,42.05,-87.7,"member" 226 | "125DDAA368F84F11","electric_bike","2023-06-17 11:07:50","2023-06-17 11:07:54",,,,,42.07,-87.73,42.07,-87.73,"member" 227 | "DC710F52E032623C","electric_bike","2023-06-16 20:20:25","2023-06-16 20:30:00",,,,,41.96,-87.64,41.95,-87.65,"member" 228 | "ED067F68AC37AE69","electric_bike","2023-06-09 18:08:29","2023-06-09 18:30:09",,,,,41.9,-87.67,41.93,-87.64,"member" 229 | "3C343326EF6ECC79","electric_bike","2023-06-09 18:53:29","2023-06-09 18:56:04",,,,,41.93,-87.66,41.93,-87.66,"member" 230 | "D39FC4BA869047D2","electric_bike","2023-06-09 09:43:10","2023-06-09 09:48:54",,,,,41.8,-87.59,41.79,-87.59,"member" 231 | "C8EADA40906782F3","electric_bike","2023-06-09 10:02:39","2023-06-09 10:09:18",,,,,41.79,-87.59,41.8,-87.59,"member" 232 | "A26E2243F0E665FE","electric_bike","2023-06-09 10:25:29","2023-06-09 10:45:44",,,,,41.91,-87.63,41.9,-87.62,"member" 233 | "71C65BA36A7B6832","electric_bike","2023-06-22 11:30:35","2023-06-22 11:37:20",,,,,41.97,-87.67,41.99,-87.67,"member" 234 | "9319F31B50FF18D5","electric_bike","2023-06-22 17:02:18","2023-06-22 17:29:30",,,,,41.99,-87.67,41.94,-87.65,"member" 235 | "490363BEDF7D8151","electric_bike","2023-06-22 16:07:44","2023-06-22 16:18:35",,,,,41.88,-87.64,41.89,-87.62,"member" 236 | "54318B34841B648B","electric_bike","2023-06-22 15:29:55","2023-06-22 15:30:30",,,,,41.89,-87.67,41.89,-87.67,"member" 237 | "2EC216217BD5622A","electric_bike","2023-06-22 15:30:50","2023-06-22 15:31:09",,,,,41.89,-87.67,41.89,-87.67,"member" 238 | "CF3EF20B553F200F","electric_bike","2023-06-22 06:34:10","2023-06-22 06:43:22",,,,,41.8,-87.58,41.79,-87.61,"member" 239 | "F0E1E6576AD13148","electric_bike","2023-06-22 16:20:23","2023-06-22 16:29:02",,,,,41.79,-87.61,41.8,-87.59,"member" 240 | "712A4D8F3099502B","electric_bike","2023-06-18 12:54:14","2023-06-18 12:56:03",,,,,41.89,-87.65,41.88,-87.65,"member" 241 | "540DB8DE9F2411DF","electric_bike","2023-06-25 13:58:49","2023-06-25 14:22:48",,,,,41.93,-87.69,41.95,-87.65,"member" 242 | "6AFEAB79432A3C5B","electric_bike","2023-06-25 18:54:08","2023-06-25 19:16:02",,,,,41.97,-87.65,41.93,-87.65,"member" 243 | "A89065AD296AA512","electric_bike","2023-06-25 14:17:00","2023-06-25 14:29:59",,,,,41.97,-87.65,41.97,-87.69,"member" 244 | "362D73C71FFE0ECD","electric_bike","2023-06-24 20:07:04","2023-06-24 20:19:05",,,,,41.97,-87.65,41.96,-87.7,"member" 245 | "A5C9680B753C50F1","electric_bike","2023-06-11 20:14:55","2023-06-11 20:20:53",,,,,41.95,-87.65,41.94,-87.64,"member" 246 | "FE1F3EBCC860653B","electric_bike","2023-06-12 03:22:24","2023-06-12 03:22:34",,,,,41.95,-87.66,41.95,-87.66,"member" 247 | "3A6E8720C209BB9F","electric_bike","2023-06-12 17:51:49","2023-06-12 17:58:17",,,,,41.89,-87.63,41.89,-87.63,"member" 248 | "E45EE944FCFB3B66","electric_bike","2023-06-12 17:58:35","2023-06-12 19:48:31",,,,,41.89,-87.63,41.87,-87.63,"member" 249 | "01AD949B840B9D8B","electric_bike","2023-06-03 12:21:05","2023-06-03 12:27:21",,,,,41.93,-87.63,41.92,-87.63,"member" 250 | "69A703FC78F8BCA5","electric_bike","2023-06-24 12:36:04","2023-06-24 12:42:52",,,,,42.0,-87.68,42.01,-87.67,"member" 251 | "FEDD0E95F07402B1","electric_bike","2023-06-05 11:38:12","2023-06-05 11:43:34",,,,,41.98,-87.67,41.99,-87.67,"member" 252 | "D1EFC11CD1C33AEF","electric_bike","2023-06-05 15:56:28","2023-06-05 15:56:42",,,,,41.89,-87.61,41.89,-87.61,"member" 253 | "8F2DD9FA122632E1","electric_bike","2023-06-22 20:51:58","2023-06-22 21:00:00",,,,,41.93,-87.67,41.91,-87.67,"member" 254 | "D10B629C79AB9237","electric_bike","2023-06-22 20:23:48","2023-06-22 20:36:52",,,,,41.93,-87.68,41.94,-87.66,"member" 255 | "2584767D9ABA8B2E","electric_bike","2023-06-22 19:06:19","2023-06-22 19:19:57",,,"California Ave & Milwaukee Ave","13084",41.94,-87.69,41.922695,-87.697153,"member" 256 | "271DF296420584D5","electric_bike","2023-06-23 08:32:00","2023-06-23 08:41:06",,,,,41.93,-87.68,41.9,-87.68,"member" 257 | "321A1EC6237AA055","electric_bike","2023-06-23 06:13:50","2023-06-23 06:22:02",,,,,41.9,-87.68,41.93,-87.68,"member" 258 | "00C5A9F6AF49958D","electric_bike","2023-06-23 17:22:29","2023-06-23 17:42:49",,,,,41.9,-87.62,41.9,-87.68,"member" 259 | "0FB4213BCC1BA618","electric_bike","2023-06-22 22:51:09","2023-06-22 22:58:14",,,,,41.96,-87.65,41.95,-87.65,"member" 260 | "B6B473E5F1115EE2","electric_bike","2023-06-22 23:12:53","2023-06-22 23:22:47",,,,,41.95,-87.65,41.96,-87.65,"member" 261 | "935D52E392E3A137","electric_bike","2023-06-23 00:15:17","2023-06-23 00:26:55",,,,,41.89,-87.63,41.9,-87.66,"member" 262 | "B59BE53E42581279","electric_bike","2023-06-23 18:32:25","2023-06-23 18:44:02",,,,,41.91,-87.63,41.92,-87.65,"member" 263 | "5A442D0FFD1CAE65","electric_bike","2023-06-23 16:51:38","2023-06-23 17:07:50",,,,,41.92,-87.64,41.95,-87.66,"member" 264 | "34445388472A24ED","electric_bike","2023-06-17 22:07:32","2023-06-17 22:14:52",,,,,41.93,-87.65,41.93,-87.67,"member" 265 | "4F090504E39675E7","electric_bike","2023-06-17 23:25:06","2023-06-17 23:28:11",,,,,41.89,-87.63,41.89,-87.63,"member" 266 | "C24D79C9A0E573D0","electric_bike","2023-06-18 15:17:10","2023-06-18 16:04:24",,,,,41.93,-87.63,41.8,-87.59,"member" 267 | "218C7F03EB8BB8DC","electric_bike","2023-06-18 12:47:41","2023-06-18 12:53:57",,,,,41.94,-87.64,41.93,-87.64,"member" 268 | "AFEBC6CD37EDDB3B","electric_bike","2023-06-16 11:39:28","2023-06-16 11:42:48",,,,,41.91,-87.72,41.92,-87.72,"member" 269 | "7E32A5B39914F3AB","electric_bike","2023-06-16 06:08:39","2023-06-16 06:15:46",,,,,41.9,-87.68,41.93,-87.68,"member" 270 | "83851AC79593024C","electric_bike","2023-06-16 08:22:32","2023-06-16 08:31:21",,,,,41.93,-87.68,41.9,-87.68,"member" 271 | "1DA59EF784EF93B3","electric_bike","2023-06-16 12:38:46","2023-06-16 12:46:27","Wood St & Chicago Ave","637",,,41.895600333333334,-87.6721275,41.9,-87.65,"member" 272 | "147C282C21A49077","electric_bike","2023-06-15 19:19:35","2023-06-15 19:33:34",,,,,41.91,-87.62,41.95,-87.65,"member" 273 | "C5939A89D09F43E8","electric_bike","2023-06-02 15:30:33","2023-06-02 15:39:41",,,,,41.89,-87.63,41.89,-87.65,"member" 274 | "5C94835F875A98FB","electric_bike","2023-06-01 19:29:23","2023-06-01 19:35:57",,,,,41.92,-87.65,41.91,-87.64,"member" 275 | "432BFA1125CE4E4D","electric_bike","2023-06-06 19:11:29","2023-06-06 19:11:32",,,,,41.92,-87.63,41.92,-87.63,"member" 276 | "B697FA2AEDA97A29","electric_bike","2023-06-06 19:14:10","2023-06-06 19:14:12",,,,,41.92,-87.63,41.92,-87.63,"member" 277 | "453CEA892F6E49FC","electric_bike","2023-06-06 19:14:55","2023-06-06 19:15:01",,,,,41.92,-87.63,41.92,-87.63,"member" 278 | "3A5EDDB4C382D5C1","electric_bike","2023-06-07 13:25:49","2023-06-07 13:36:03",,,,,41.94,-87.64,41.92,-87.65,"member" 279 | "427026A0423C1BB6","electric_bike","2023-06-12 18:23:45","2023-06-12 18:27:56",,,,,41.89,-87.66,41.9,-87.66,"member" 280 | "6D41583476740072","electric_bike","2023-06-11 20:11:34","2023-06-11 20:41:05","California Ave & Division St","13256",,,41.903025985,-87.697459459,41.94,-87.71,"member" 281 | "DBECBB187CD27A79","electric_bike","2023-06-22 15:52:56","2023-06-22 16:07:22",,,,,41.85,-87.61,41.86,-87.63,"member" 282 | "9EB625D49303DC6B","electric_bike","2023-06-10 14:56:05","2023-06-10 15:01:29",,,,,41.94,-87.65,41.95,-87.65,"member" 283 | "4BB9E88D713EE938","electric_bike","2023-06-29 14:10:51","2023-06-29 14:17:58",,,,,41.95,-87.68,41.94,-87.69,"member" 284 | "58D599B2DB417FF8","electric_bike","2023-06-18 20:38:28","2023-06-18 20:55:16",,,,,41.91,-87.63,41.89,-87.62,"member" 285 | "B8AE093EE0BE74D8","electric_bike","2023-06-19 09:20:24","2023-06-19 09:25:12",,,,,41.94,-87.64,41.93,-87.64,"member" 286 | "8568FA9B8C4EFEA2","electric_bike","2023-06-19 03:06:39","2023-06-19 03:09:49",,,,,41.94,-87.65,41.94,-87.64,"member" 287 | "03006E687E9DC77A","electric_bike","2023-06-11 08:42:06","2023-06-11 08:55:29",,,,,41.88,-87.66,41.88,-87.66,"member" 288 | "8F3BB1B9EA3219A1","electric_bike","2023-06-10 23:49:56","2023-06-11 00:05:06",,,,,41.9,-87.7,41.94,-87.71,"member" 289 | "D50EDC455530ECA9","electric_bike","2023-06-03 13:24:45","2023-06-03 13:25:23",,,,,41.98,-87.68,41.98,-87.68,"member" 290 | "AD6FB9E2A61677E0","electric_bike","2023-06-03 10:30:37","2023-06-03 10:47:31",,,,,41.84,-87.65,41.84,-87.65,"member" 291 | "CB1AA6714B106CB3","electric_bike","2023-06-01 18:12:49","2023-06-01 18:21:12",,,,,41.92,-87.65,41.91,-87.63,"member" 292 | "0BEC9DB0AC697896","electric_bike","2023-06-08 14:25:16","2023-06-08 14:35:05",,,,,41.93,-87.65,41.95,-87.66,"member" 293 | "9F856809D0552B58","electric_bike","2023-06-07 21:36:06","2023-06-07 21:49:11",,,,,41.92,-87.65,41.9,-87.68,"member" 294 | "31D81B658752D5FB","electric_bike","2023-06-07 21:23:02","2023-06-07 21:23:17",,,,,41.92,-87.65,41.92,-87.65,"member" 295 | "3E686A2C5195FEFF","electric_bike","2023-06-07 21:28:03","2023-06-07 21:28:51",,,,,41.92,-87.65,41.92,-87.65,"member" 296 | "B871118D711E7F08","electric_bike","2023-06-15 16:00:56","2023-06-15 16:02:23",,,,,41.95,-87.7,41.95,-87.7,"member" 297 | "992D208CC8A2DA58","electric_bike","2023-06-15 13:02:19","2023-06-15 13:07:26",,,,,41.93,-87.65,41.92,-87.65,"member" 298 | "13CBEC7083CFD51F","electric_bike","2023-06-15 13:48:52","2023-06-15 13:53:33","Wood St & Chicago Ave","637",,,41.895656705,-87.672073841,41.9,-87.68,"member" 299 | "54DA2F0E2FF60A68","electric_bike","2023-06-27 20:02:10","2023-06-27 20:04:42",,,,,41.94,-87.74,41.93,-87.74,"member" 300 | "EEF7C656BC2562DB","electric_bike","2023-06-03 17:06:15","2023-06-03 17:20:23","Kenosha & Wellington","361",,,41.93446333333333,-87.73381916666666,41.9,-87.73,"member" 301 | "22DCB6945DAA1D84","electric_bike","2023-06-01 18:53:59","2023-06-01 18:54:39",,,,,41.94,-87.68,41.94,-87.68,"member" 302 | "4E223B2494DFAF93","electric_bike","2023-06-07 17:12:07","2023-06-07 17:19:15",,,,,41.89,-87.67,41.88,-87.65,"member" 303 | "03B1D71E4B0BF1C8","electric_bike","2023-06-06 22:43:32","2023-06-06 23:00:29",,,,,41.89,-87.66,41.91,-87.72,"member" 304 | "1BF90DB48C2B3978","electric_bike","2023-06-07 11:31:03","2023-06-07 11:37:34",,,,,41.91,-87.72,41.93,-87.72,"member" 305 | "55EE090DF6635D64","electric_bike","2023-06-01 09:14:39","2023-06-01 09:17:41",,,,,41.87,-87.65,41.87,-87.65,"member" 306 | "2A63026A3AAAF39C","electric_bike","2023-06-01 16:56:09","2023-06-01 17:11:23",,,,,41.88,-87.65,41.9,-87.63,"member" 307 | "3263548897A0AEDA","electric_bike","2023-06-01 17:59:01","2023-06-01 18:00:37",,,,,41.89,-87.64,41.89,-87.64,"member" 308 | "6C7DCD00A7D9E95D","electric_bike","2023-06-30 18:49:40","2023-06-30 19:04:15",,,,,41.83,-87.61,41.8,-87.59,"member" 309 | "4027D1F8FEF18F96","electric_bike","2023-06-30 13:11:17","2023-06-30 13:18:15",,,,,41.81,-87.61,41.83,-87.61,"member" 310 | "7C0D7E03BEB32329","electric_bike","2023-06-20 12:06:06","2023-06-20 12:06:58",,,,,41.91,-87.75,41.91,-87.75,"member" 311 | "4644136872418478","electric_bike","2023-06-13 05:45:04","2023-06-13 05:53:41",,,,,41.8,-87.59,41.79,-87.6,"member" 312 | "19E37C9C084DDBEF","electric_bike","2023-06-12 19:30:30","2023-06-12 19:39:08",,,,,41.9,-87.66,41.88,-87.65,"member" 313 | "AACADA4B82A7209A","electric_bike","2023-06-21 10:33:33","2023-06-21 10:34:06",,,,,41.91,-87.67,41.91,-87.67,"member" 314 | "4AA44D0F7A4DF103","electric_bike","2023-06-05 19:17:44","2023-06-05 22:36:28",,,,,41.87,-87.63,41.87,-87.63,"member" 315 | "2F3CC3751CB1E5D8","electric_bike","2023-06-05 21:40:25","2023-06-05 21:50:52",,,,,41.92,-87.63,41.94,-87.65,"member" 316 | "3365E78B85BE3F8F","electric_bike","2023-06-01 23:46:23","2023-06-02 00:01:10",,,,,41.99,-87.67,41.95,-87.65,"member" 317 | "686E6A1775C1D714","electric_bike","2023-06-01 20:15:17","2023-06-01 21:29:41",,,,,41.87,-87.63,41.87,-87.63,"member" 318 | "A019E6A5DC46C9E9","electric_bike","2023-06-02 16:59:16","2023-06-02 17:02:20",,,,,41.98,-87.65,41.98,-87.65,"member" 319 | "3CEA4EA9CA3A6B15","electric_bike","2023-06-02 16:39:56","2023-06-02 16:52:39",,,,,41.95,-87.65,41.98,-87.65,"member" 320 | "7427289D68142252","electric_bike","2023-06-01 20:16:55","2023-06-01 20:21:55","California Ave & Milwaukee Ave","13084",,,41.922715,-87.69722016666667,41.92,-87.69,"member" 321 | "E86183BD5B8A75F1","electric_bike","2023-06-02 17:06:27","2023-06-02 17:25:10",,,,,41.89,-87.65,41.94,-87.64,"member" 322 | "E45A06CF120C4BF3","electric_bike","2023-06-24 07:24:15","2023-06-24 07:24:41",,,,,41.86,-87.62,41.86,-87.62,"member" 323 | "4BB8B8D177AA1BB5","electric_bike","2023-06-24 07:28:26","2023-06-24 08:02:04",,,,,41.86,-87.62,41.86,-87.62,"member" 324 | "1242ECD3FBF7884A","electric_bike","2023-06-24 17:55:40","2023-06-24 18:06:34",,,,,41.9,-87.68,41.92,-87.65,"member" 325 | "CFB9725D81B9E1EE","electric_bike","2023-06-05 01:06:43","2023-06-05 01:07:13",,,,,41.95,-87.65,41.95,-87.65,"member" 326 | "02973C000D74D92C","electric_bike","2023-06-10 08:51:32","2023-06-10 08:58:47",,,,,41.7,-87.66,41.69,-87.67,"member" 327 | "42CF65F6A956E043","electric_bike","2023-06-10 11:14:48","2023-06-10 11:23:41",,,,,41.94,-87.64,41.92,-87.63,"member" 328 | "82434E912D403063","electric_bike","2023-06-23 15:38:14","2023-06-23 15:42:36",,,,,41.94,-87.65,41.95,-87.66,"member" 329 | "8D26340EE4274599","electric_bike","2023-06-22 19:10:25","2023-06-22 19:17:54",,,,,41.92,-87.65,41.91,-87.63,"member" 330 | "F53FAA7D7EBDD481","electric_bike","2023-06-23 15:30:20","2023-06-23 15:33:43",,,,,41.93,-87.65,41.94,-87.65,"member" 331 | "90D4D77489C42AB6","electric_bike","2023-06-09 08:35:35","2023-06-09 08:39:00",,,,,41.92,-87.66,41.92,-87.65,"member" 332 | "BDE531001656E157","electric_bike","2023-06-09 11:42:53","2023-06-09 11:43:20",,,,,41.94,-87.65,41.94,-87.65,"member" 333 | "2442191EF333C789","electric_bike","2023-06-22 14:17:23","2023-06-22 14:42:29",,,"Wood St & Chicago Ave","637",41.95,-87.66,41.895634,-87.672069,"member" 334 | "A5F8C690C12E76DA","electric_bike","2023-06-02 10:29:20","2023-06-02 10:53:39",,,,,41.75,-87.67,41.75,-87.67,"member" 335 | "E115333E85B16B5A","electric_bike","2023-06-02 18:34:31","2023-06-02 19:09:58",,,,,41.89,-87.62,41.86,-87.61,"member" 336 | "C15BA0C41ED05042","electric_bike","2023-06-04 10:04:31","2023-06-04 10:10:18",,,,,41.92,-87.67,41.93,-87.66,"member" 337 | "AB92517FDDCAE297","electric_bike","2023-06-04 10:38:12","2023-06-04 10:43:42",,,,,41.93,-87.66,41.93,-87.67,"member" 338 | "E566342F284E389F","electric_bike","2023-06-29 20:41:58","2023-06-29 20:53:40",,,,,41.93,-87.64,41.94,-87.66,"member" 339 | "D81C1F3C52A0F7C3","electric_bike","2023-06-30 14:33:40","2023-06-30 14:37:55",,,,,41.98,-87.66,41.97,-87.66,"member" 340 | "2A27237C005CB5DB","electric_bike","2023-06-06 17:20:19","2023-06-06 17:29:36",,,,,41.91,-87.63,41.89,-87.63,"member" 341 | "6DC83DF98D810B20","electric_bike","2023-06-05 18:11:13","2023-06-05 18:34:17",,,,,41.91,-87.66,41.94,-87.72,"member" 342 | "4A4A8C32DF3348C4","electric_bike","2023-06-21 04:13:08","2023-06-21 04:19:04",,,,,41.95,-87.66,41.97,-87.67,"member" 343 | "DD70023E23EE5D41","electric_bike","2023-06-28 09:05:40","2023-06-28 09:33:41",,,,,41.97,-87.69,41.88,-87.67,"member" 344 | "7451F537B93E2872","electric_bike","2023-06-28 18:00:51","2023-06-28 18:03:03",,,,,41.88,-87.67,41.88,-87.67,"member" 345 | "FE286D3C556F08D9","electric_bike","2023-06-28 18:08:50","2023-06-28 18:36:39",,,,,41.88,-87.67,41.97,-87.7,"member" 346 | "CE83EF2AF62F952C","electric_bike","2023-06-15 14:03:16","2023-06-15 14:09:43",,,,,41.89,-87.63,41.88,-87.63,"member" 347 | "DEE331CAD7FB6044","electric_bike","2023-06-17 11:11:12","2023-06-17 11:24:52",,,,,41.89,-87.63,41.89,-87.65,"member" 348 | "285FD1B678145D67","electric_bike","2023-06-10 10:48:57","2023-06-10 10:57:05",,,,,41.94,-87.64,41.93,-87.63,"member" 349 | "5B5EA30597899954","electric_bike","2023-06-10 17:32:18","2023-06-10 17:52:39",,,,,41.98,-87.65,41.94,-87.65,"member" 350 | "3CBEF401DE31682C","electric_bike","2023-06-10 03:06:20","2023-06-10 03:08:55",,,,,41.94,-87.65,41.94,-87.64,"member" 351 | "5C0F17138517EEBA","electric_bike","2023-06-10 09:13:05","2023-06-10 09:20:05",,,,,41.89,-87.65,41.89,-87.63,"member" 352 | "DD692FA247EA99B5","electric_bike","2023-06-10 15:50:00","2023-06-10 15:54:10",,,,,41.89,-87.65,41.89,-87.65,"member" 353 | "45CD40DA9DA82A62","electric_bike","2023-06-10 16:27:46","2023-06-10 16:50:09",,,,,41.89,-87.65,41.95,-87.66,"member" 354 | "DD28FA649DEA2319","electric_bike","2023-06-10 09:09:32","2023-06-10 09:10:11",,,,,41.89,-87.65,41.89,-87.65,"member" 355 | "207E19673EA0EBD6","electric_bike","2023-06-01 18:52:20","2023-06-01 18:53:32",,,,,41.88,-87.65,41.88,-87.65,"member" 356 | "FFCB30F83A754B75","electric_bike","2023-06-02 20:27:32","2023-06-02 20:41:50",,,,,41.88,-87.65,41.91,-87.65,"member" 357 | "9421A75E9A0F09AB","electric_bike","2023-06-03 14:49:12","2023-06-03 15:02:30",,,,,41.91,-87.63,41.93,-87.63,"member" 358 | "9874E72FD7DBB751","electric_bike","2023-06-03 10:26:36","2023-06-03 10:38:12",,,,,41.93,-87.64,41.94,-87.66,"member" 359 | "A2546AB63648E27F","electric_bike","2023-06-18 19:28:40","2023-06-18 20:46:38",,,,,41.86,-87.63,41.87,-87.63,"member" 360 | "6B27E819569B8952","electric_bike","2023-06-19 16:48:46","2023-06-19 20:46:23",,,,,41.87,-87.63,41.87,-87.63,"member" 361 | "B67B05E14B2E712F","electric_bike","2023-06-02 18:05:24","2023-06-02 18:16:19",,,,,41.91,-87.64,41.92,-87.66,"member" 362 | "0899DBDA2EF6F2E8","electric_bike","2023-06-01 19:21:14","2023-06-01 19:21:41",,,,,41.92,-87.65,41.92,-87.65,"member" 363 | "E1CF949C83E5F9C6","electric_bike","2023-06-01 20:15:32","2023-06-01 20:46:10",,,,,41.88,-87.62,41.92,-87.64,"member" 364 | "0DA948CBA6CF4A55","electric_bike","2023-06-01 20:07:11","2023-06-01 20:14:44",,,,,41.88,-87.62,41.88,-87.62,"member" 365 | "6F4392B19E13524E","electric_bike","2023-06-03 11:58:43","2023-06-03 12:03:31",,,,,41.91,-87.65,41.9,-87.64,"member" 366 | "30E1E56DD7A2D1C5","electric_bike","2023-06-18 16:19:34","2023-06-18 16:29:05",,,,,41.94,-87.67,41.94,-87.64,"member" 367 | "D28FB67096E746BC","electric_bike","2023-06-09 18:37:18","2023-06-09 19:12:02",,,,,41.9,-87.63,41.9,-87.63,"member" 368 | "0EC60FFDEAFB483E","electric_bike","2023-06-09 18:56:15","2023-06-09 19:07:40",,,,,41.93,-87.66,41.94,-87.68,"member" 369 | "6236ABB9E213184E","electric_bike","2023-06-08 19:55:33","2023-06-08 20:03:00",,,,,41.86,-87.66,41.84,-87.65,"member" 370 | "CC5EEAE891F0D942","electric_bike","2023-06-24 19:40:35","2023-06-24 19:49:26",,,,,41.94,-87.72,41.92,-87.72,"member" 371 | "84BF398C9FBE3798","electric_bike","2023-06-25 04:34:46","2023-06-25 04:55:47",,,,,41.9,-87.63,41.9,-87.63,"member" 372 | "94B5AEA5996F3765","electric_bike","2023-06-25 11:32:47","2023-06-25 11:49:27",,,,,41.93,-87.65,41.93,-87.65,"member" 373 | "B870DA65D12B8F69","electric_bike","2023-06-28 12:29:29","2023-06-28 12:36:55",,,,,41.96,-87.66,41.96,-87.66,"member" 374 | "C2077099A7B5639B","electric_bike","2023-06-03 09:14:08","2023-06-03 09:32:46",,,,,41.96,-87.68,41.94,-87.72,"member" 375 | "3C2E1881FD2232AA","electric_bike","2023-06-03 16:16:50","2023-06-03 16:16:53",,,,,41.9,-87.62,41.9,-87.62,"member" 376 | "DB480B94BCD46D56","electric_bike","2023-06-16 16:45:06","2023-06-16 17:18:31",,,,,41.89,-87.65,41.94,-87.64,"member" 377 | "E8375B314EAD5BF9","electric_bike","2023-06-15 20:05:00","2023-06-15 20:07:12",,,,,41.94,-87.74,41.93,-87.74,"member" 378 | "2937187D498E00F5","electric_bike","2023-06-16 17:15:20","2023-06-16 17:17:42",,,,,41.94,-87.74,41.93,-87.74,"member" 379 | "4784BDAA642B6712","electric_bike","2023-06-16 07:51:03","2023-06-16 07:54:46",,,,,41.93,-87.74,41.94,-87.74,"member" 380 | "8639EEB8963A7263","electric_bike","2023-06-15 19:37:12","2023-06-15 19:44:16",,,,,41.93,-87.66,41.92,-87.64,"member" 381 | "FC832441168AB863","electric_bike","2023-06-15 19:49:58","2023-06-15 19:58:44",,,,,41.92,-87.64,41.91,-87.64,"member" 382 | "55E193457D082977","electric_bike","2023-06-16 13:11:31","2023-06-16 13:15:56",,,,,41.86,-87.69,41.87,-87.68,"member" 383 | "9A403A3C285D8798","electric_bike","2023-06-15 17:43:33","2023-06-15 17:44:40",,,,,41.89,-87.63,41.89,-87.63,"member" 384 | "4C29A36B8607915F","electric_bike","2023-06-05 20:42:36","2023-06-05 20:51:04",,,,,41.9,-87.68,41.91,-87.68,"member" 385 | "B92609CF6CF8199F","electric_bike","2023-06-23 20:35:57","2023-06-23 20:56:29",,,,,41.96,-87.64,41.94,-87.65,"member" 386 | "F94C4B0BC4CC2898","electric_bike","2023-06-24 17:25:12","2023-06-24 17:37:28",,,,,41.93,-87.63,41.9,-87.62,"member" 387 | "045091793F13780E","electric_bike","2023-06-24 12:27:34","2023-06-24 12:41:48",,,,,41.91,-87.68,41.93,-87.71,"member" 388 | "5FFFC8E221DE9745","electric_bike","2023-06-26 11:03:29","2023-06-26 11:08:31",,,,,41.8,-87.6,41.8,-87.6,"member" 389 | "578244D711703B58","electric_bike","2023-06-23 19:24:45","2023-06-23 19:27:13",,,,,41.91,-87.67,41.91,-87.67,"member" 390 | "9CEB28C9383367CC","electric_bike","2023-06-23 23:33:38","2023-06-23 23:55:17",,,,,41.93,-87.65,41.9,-87.68,"member" 391 | "6E803E23C2200EAF","electric_bike","2023-06-24 14:17:07","2023-06-24 14:19:55",,,,,41.9,-87.62,41.9,-87.62,"member" 392 | "B40154F75BD2D16A","electric_bike","2023-06-26 21:47:57","2023-06-26 21:52:06",,,,,41.93,-87.65,41.94,-87.65,"member" 393 | "88C5F7EAA7534BFD","electric_bike","2023-06-17 06:04:38","2023-06-17 06:06:41",,,,,41.94,-87.64,41.93,-87.64,"member" 394 | "1EB58304BF7ED6FC","electric_bike","2023-06-05 18:53:04","2023-06-05 18:59:59",,,,,41.8,-87.58,41.8,-87.58,"member" 395 | "97638600E5530DA7","electric_bike","2023-06-16 20:08:44","2023-06-16 20:32:46",,,,,41.92,-87.7,41.88,-87.65,"member" 396 | "DFA19170EF74D75D","electric_bike","2023-06-25 18:45:00","2023-06-25 19:20:13",,,,,41.89,-87.62,41.8,-87.59,"member" 397 | "9A02AB94FC5896F6","electric_bike","2023-06-08 11:11:00","2023-06-08 11:32:05",,,,,41.93,-87.7,41.89,-87.65,"member" 398 | "476610F030FE0DD0","electric_bike","2023-06-08 08:43:42","2023-06-08 08:51:16",,,,,41.88,-87.69,41.88,-87.67,"member" 399 | "03C730EF5EF9BF37","electric_bike","2023-06-12 19:48:41","2023-06-12 19:56:18",,,,,41.91,-87.63,41.93,-87.65,"member" 400 | "D6B2F74D3225EDCB","electric_bike","2023-06-16 22:11:21","2023-06-16 22:22:53",,,,,41.95,-87.65,41.94,-87.66,"member" 401 | "9DEF0E00961FB707","electric_bike","2023-06-16 22:51:53","2023-06-16 22:54:44",,,,,41.94,-87.65,41.94,-87.66,"member" 402 | "EBC0572C5184BA0D","electric_bike","2023-06-16 22:48:33","2023-06-16 22:51:02",,,,,41.94,-87.66,41.94,-87.65,"member" 403 | "77F2FB8E310AB53C","electric_bike","2023-06-03 12:34:44","2023-06-03 12:37:34",,,,,41.94,-87.64,41.94,-87.65,"member" 404 | "84C1D52FF0D6A86D","electric_bike","2023-06-03 09:23:23","2023-06-03 09:26:10",,,,,41.94,-87.64,41.94,-87.64,"member" 405 | "CA5FBD446E631CBB","electric_bike","2023-06-03 12:19:03","2023-06-03 12:24:04",,,,,41.93,-87.64,41.94,-87.64,"member" 406 | "B367227DAFE3A34B","electric_bike","2023-06-03 07:02:43","2023-06-03 07:07:33",,,,,41.8,-87.6,41.79,-87.6,"member" 407 | "3EAED4DD3E94A751","electric_bike","2023-06-03 16:21:40","2023-06-03 16:26:16",,,,,41.95,-87.7,41.95,-87.7,"member" 408 | "A124349F2D62EEF7","electric_bike","2023-06-02 20:13:00","2023-06-02 20:13:11",,,,,41.93,-87.65,41.93,-87.65,"member" 409 | "59BEFFF192A7E000","electric_bike","2023-06-02 21:58:55","2023-06-02 22:00:10",,,,,41.87,-87.61,41.87,-87.61,"member" 410 | "FC0AC73DA7E160C4","electric_bike","2023-06-05 09:23:47","2023-06-05 09:31:15",,,,,41.95,-87.68,41.95,-87.69,"member" 411 | "AE688D6E88AD4847","electric_bike","2023-06-20 22:18:34","2023-06-20 22:29:03",,,,,42.01,-87.67,41.99,-87.67,"member" 412 | "E73D332C5268A162","electric_bike","2023-06-21 11:47:12","2023-06-21 11:55:10",,,,,41.87,-87.63,41.87,-87.65,"member" 413 | "60B4A260FEC3A3BD","electric_bike","2023-06-10 16:18:04","2023-06-10 16:36:48",,,,,41.92,-87.64,41.94,-87.65,"member" 414 | "562D2B2CF2910B68","electric_bike","2023-06-10 17:36:17","2023-06-10 17:49:04",,,,,41.94,-87.71,41.9,-87.7,"member" 415 | "E6BF6DF7756BB9D0","electric_bike","2023-06-09 21:20:17","2023-06-09 21:20:51",,,,,41.89,-87.64,41.89,-87.64,"member" 416 | "16AB62F228425950","electric_bike","2023-06-24 10:02:39","2023-06-24 10:11:02",,,,,41.96,-87.65,41.97,-87.65,"member" 417 | "946A8CC6C8FBDEF8","electric_bike","2023-06-24 14:37:30","2023-06-24 14:48:27",,,,,41.91,-87.63,41.94,-87.64,"member" 418 | "921E71FF0AEC9DCE","electric_bike","2023-06-23 23:32:32","2023-06-23 23:47:02",,,,,41.93,-87.67,41.93,-87.7,"member" 419 | "3AC129E0CF695E0D","electric_bike","2023-06-24 01:36:30","2023-06-24 01:47:39",,,,,41.92,-87.7,41.9,-87.67,"member" 420 | "A099697D97D62389","electric_bike","2023-06-20 16:28:59","2023-06-20 16:32:45",,,,,41.88,-87.65,41.89,-87.65,"member" 421 | "A3D9BA3E46AA6D3F","electric_bike","2023-06-20 14:41:19","2023-06-20 14:45:04",,,,,41.94,-87.66,41.94,-87.65,"member" 422 | "E92D2024021FFEC2","electric_bike","2023-06-20 14:40:32","2023-06-20 14:45:49",,,,,41.8,-87.6,41.8,-87.59,"member" 423 | "A92B478E3043B944","electric_bike","2023-06-27 10:18:50","2023-06-27 10:25:05",,,,,41.93,-87.72,41.91,-87.72,"member" 424 | "78033D6CCB280B7A","electric_bike","2023-06-27 10:59:39","2023-06-27 11:04:51",,,,,41.79,-87.59,41.8,-87.59,"member" 425 | "257CFA8B00F13B89","electric_bike","2023-06-27 09:58:31","2023-06-27 10:02:02",,,,,41.8,-87.59,41.79,-87.59,"member" 426 | "91895A5C76F74733","electric_bike","2023-06-09 06:45:40","2023-06-09 07:16:13",,,,,41.9,-87.63,41.96,-87.63,"member" 427 | "2AD8EF4B0DAE9ABE","electric_bike","2023-06-09 17:47:06","2023-06-09 17:54:55",,,,,41.96,-87.65,41.97,-87.67,"member" 428 | "A36E8304E3A26D35","electric_bike","2023-06-17 17:15:10","2023-06-17 17:31:57",,,,,41.91,-87.71,41.93,-87.7,"member" 429 | "4216AEDB509A7C09","electric_bike","2023-06-12 08:43:18","2023-06-12 09:00:58",,,,,41.92,-87.66,41.88,-87.63,"member" 430 | "0534367D54CB1BA5","electric_bike","2023-06-01 12:15:34","2023-06-01 12:15:41",,,,,41.88,-87.63,41.88,-87.63,"member" 431 | "6F41D36B45006E54","electric_bike","2023-06-01 12:16:27","2023-06-01 12:26:46",,,,,41.88,-87.63,41.88,-87.65,"member" 432 | "A5C1F361AAB35551","electric_bike","2023-06-01 05:44:42","2023-06-01 05:49:27",,,,,41.94,-87.65,41.93,-87.65,"member" 433 | "1059320535F684D3","electric_bike","2023-06-01 07:12:39","2023-06-01 07:15:40",,,,,41.93,-87.65,41.93,-87.64,"member" 434 | "C55A061E8BEB1A81","electric_bike","2023-06-22 16:54:23","2023-06-22 16:58:35",,,,,41.88,-87.64,41.88,-87.65,"member" 435 | "4996678BBBA93D29","electric_bike","2023-06-22 18:40:18","2023-06-22 19:09:27",,,,,41.89,-87.67,41.95,-87.65,"member" 436 | "80E18823A32FFA1E","electric_bike","2023-06-22 18:14:27","2023-06-22 18:32:18",,,,,41.88,-87.65,41.89,-87.67,"member" 437 | "B5B9D55155DD7D1A","electric_bike","2023-06-30 21:31:14","2023-06-30 21:48:15",,,,,41.95,-87.73,41.95,-87.65,"member" 438 | "89B89628BD11C07A","electric_bike","2023-06-28 19:32:46","2023-06-28 19:32:56",,,,,41.9,-87.63,41.9,-87.63,"member" 439 | "DC073A359062F7C5","electric_bike","2023-06-28 19:32:17","2023-06-28 19:32:25",,,,,41.9,-87.63,41.9,-87.63,"member" 440 | "2E4A73F7DD0A6AB3","electric_bike","2023-06-28 19:21:25","2023-06-28 19:26:24",,,"California Ave & Division St","13256",41.9,-87.68,41.903029,-87.697474,"member" 441 | "D2CF59A44B52C50D","electric_bike","2023-06-30 19:46:44","2023-06-30 19:53:34",,,,,41.92,-87.69,41.9,-87.68,"member" 442 | "F1BB7C9DA20F073C","electric_bike","2023-06-30 19:11:52","2023-06-30 19:12:27",,,,,41.96,-87.72,41.96,-87.72,"member" 443 | "F21FFB0CD87279DB","electric_bike","2023-06-19 19:39:39","2023-06-19 19:42:03",,,,,41.79,-87.59,41.79,-87.59,"member" 444 | "D4D9F7057BBDDDBE","electric_bike","2023-06-18 18:03:08","2023-06-18 18:21:22",,,,,41.84,-87.65,41.81,-87.68,"member" 445 | "6B240C0C097308B4","electric_bike","2023-06-18 09:48:41","2023-06-18 10:16:30",,,,,41.96,-87.65,41.93,-87.7,"member" 446 | "D840D508B462D417","electric_bike","2023-06-18 12:59:56","2023-06-18 13:03:44",,,,,41.93,-87.69,41.93,-87.68,"member" 447 | "63A323C3ECA9749A","electric_bike","2023-06-26 19:00:56","2023-06-26 19:18:27",,,,,41.99,-87.66,42.02,-87.69,"member" 448 | "DD70713C65F6741C","electric_bike","2023-06-27 19:26:31","2023-06-27 19:32:06",,,,,41.86,-87.63,41.85,-87.62,"member" 449 | "57EE0599C2DE4891","electric_bike","2023-06-28 14:52:08","2023-06-28 14:56:47",,,,,41.93,-87.65,41.92,-87.66,"member" 450 | "F24D0D0969E80C01","electric_bike","2023-06-08 07:26:18","2023-06-08 07:28:18",,,,,41.93,-87.65,41.93,-87.64,"member" 451 | "9C54A45E3BC7DD34","electric_bike","2023-06-08 05:58:17","2023-06-08 06:02:26",,,,,41.94,-87.65,41.93,-87.65,"member" 452 | "88B934C39A8CA85D","electric_bike","2023-06-08 18:26:45","2023-06-08 18:31:02",,,,,41.94,-87.65,41.93,-87.65,"member" 453 | "C0BA0975F66B43F0","electric_bike","2023-06-08 08:15:02","2023-06-08 08:22:55",,,,,41.9,-87.63,41.88,-87.63,"member" 454 | "3E5433B080D6BCF5","electric_bike","2023-06-12 20:17:34","2023-06-12 20:23:12",,,,,41.89,-87.68,41.9,-87.67,"member" 455 | "31DCBC1F58D50093","electric_bike","2023-06-12 20:28:56","2023-06-12 20:34:35",,,,,41.9,-87.67,41.91,-87.66,"member" 456 | "9C9E9ABC4B72F32E","electric_bike","2023-06-12 20:43:41","2023-06-12 20:55:28",,,,,41.91,-87.66,41.89,-87.68,"member" 457 | "514D5686C5E74BA0","electric_bike","2023-06-13 08:48:19","2023-06-13 08:55:44",,,,,41.89,-87.68,41.9,-87.66,"member" 458 | "B244D61B610FE227","electric_bike","2023-06-13 11:23:07","2023-06-13 11:26:05",,,,,41.91,-87.67,41.9,-87.66,"member" 459 | "869402ED3F0CC730","electric_bike","2023-06-13 06:22:53","2023-06-13 06:27:04",,,,,41.9,-87.68,41.89,-87.68,"member" 460 | "074230DB6F729CC8","electric_bike","2023-06-13 06:16:21","2023-06-13 06:20:16",,,,,41.89,-87.68,41.9,-87.68,"member" 461 | "106525EC2233FFB5","electric_bike","2023-06-12 22:20:33","2023-06-12 22:23:15",,,,,41.9,-87.63,41.9,-87.63,"member" 462 | "48D5D03F7793129F","electric_bike","2023-06-13 07:55:07","2023-06-13 07:57:34",,,,,41.9,-87.63,41.9,-87.63,"member" 463 | "0CA62DD716E0F97E","electric_bike","2023-06-13 10:39:59","2023-06-13 11:00:31",,,,,41.91,-87.68,41.96,-87.73,"member" 464 | "05D3F55D259BCACE","electric_bike","2023-06-07 14:56:26","2023-06-07 15:07:56",,,,,41.89,-87.65,41.9,-87.67,"member" 465 | "323CD9FFB4DD2FDB","electric_bike","2023-06-12 10:02:48","2023-06-12 10:07:45",,,,,41.88,-87.69,41.87,-87.69,"member" 466 | "3A421E684864FF41","electric_bike","2023-06-12 11:03:28","2023-06-12 11:08:23",,,,,41.88,-87.68,41.89,-87.68,"member" 467 | "A430D8B9223B8BC6","electric_bike","2023-06-12 09:42:32","2023-06-12 09:47:15",,,,,41.89,-87.67,41.88,-87.69,"member" 468 | "EDD83CEB63965162","electric_bike","2023-06-12 10:42:01","2023-06-12 10:55:45",,,,,41.93,-87.64,41.93,-87.68,"member" 469 | "2A6878B861CD1730","electric_bike","2023-06-12 14:24:45","2023-06-12 14:49:15",,,,,41.91,-87.68,41.89,-87.66,"casual" 470 | "5E2C623AE482AD0C","electric_bike","2023-06-12 16:55:46","2023-06-12 17:00:49",,,,,41.89,-87.66,41.89,-87.65,"casual" 471 | "2A835588594F0AB7","electric_bike","2023-06-05 07:47:34","2023-06-05 08:02:17",,,,,41.9,-87.66,41.89,-87.63,"member" 472 | "632958CF263E8BAB","electric_bike","2023-06-17 17:19:54","2023-06-17 17:22:08",,,"Wood St & Chicago Ave","637",41.89,-87.68,41.895634,-87.672069,"member" 473 | "DAA4B34567FE9B7C","electric_bike","2023-06-17 17:28:37","2023-06-17 17:30:55","Wood St & Chicago Ave","637",,,41.895652413,-87.672255278,41.89,-87.68,"member" 474 | "9C29C03FD5BE1F51","electric_bike","2023-06-17 15:48:24","2023-06-17 15:50:12","Wood St & Chicago Ave","637",,,41.895705342,-87.672330379,41.89,-87.68,"member" 475 | "0FBC6E95B91CEFF0","electric_bike","2023-06-19 12:49:18","2023-06-19 13:14:19",,,,,41.9,-87.62,41.92,-87.63,"member" 476 | "54C2A1C2823887C8","electric_bike","2023-06-02 18:24:43","2023-06-02 18:56:47",,,,,41.92,-87.64,41.86,-87.61,"member" 477 | "B3EA92448AD57E7C","electric_bike","2023-06-02 12:31:49","2023-06-02 12:35:09",,,,,41.79,-87.6,41.79,-87.59,"member" 478 | "A3E4E0F5414830DD","electric_bike","2023-06-03 09:46:05","2023-06-03 09:49:31",,,,,41.95,-87.66,41.95,-87.65,"member" 479 | "F3320C92CE77398B","electric_bike","2023-06-03 13:11:52","2023-06-03 13:26:04",,,,,41.97,-87.65,41.94,-87.66,"member" 480 | "DDF464A24B9637AA","electric_bike","2023-06-23 13:12:54","2023-06-23 13:19:19",,,,,41.86,-87.69,41.87,-87.66,"member" 481 | "2E0A43BF7F953E90","electric_bike","2023-06-23 12:46:56","2023-06-23 13:05:20",,,,,41.87,-87.62,41.86,-87.69,"member" 482 | "EDE0A505CA008BA2","electric_bike","2023-06-23 12:46:23","2023-06-23 12:46:34",,,,,41.87,-87.62,41.87,-87.62,"member" 483 | "90A31FE3CE2167A2","electric_bike","2023-06-23 10:55:03","2023-06-23 11:03:47",,,,,41.96,-87.65,41.93,-87.64,"member" 484 | "9D7248EE022F34A9","electric_bike","2023-06-23 11:30:52","2023-06-23 11:31:15",,,,,41.93,-87.64,41.93,-87.64,"member" 485 | "4C08199B4E1817BA","electric_bike","2023-06-21 18:28:33","2023-06-21 18:45:31",,,,,41.93,-87.7,41.95,-87.7,"member" 486 | "6648FDCF8BE6F6DE","electric_bike","2023-06-21 10:13:10","2023-06-21 10:25:52",,,,,41.93,-87.7,41.9,-87.7,"member" 487 | "635845D0F27274AE","electric_bike","2023-06-21 10:33:59","2023-06-21 10:48:33",,,,,41.9,-87.7,41.93,-87.71,"member" 488 | "36B942E3C8992CAB","electric_bike","2023-06-21 08:36:49","2023-06-21 09:10:45",,,,,42.0,-87.67,41.9,-87.62,"member" 489 | "02927C3D67CAF576","electric_bike","2023-06-28 14:33:23","2023-06-28 14:46:39",,,,,41.94,-87.75,41.92,-87.71,"member" 490 | "BF19361D9166DFCE","electric_bike","2023-06-28 13:11:30","2023-06-28 13:24:01",,,,,41.92,-87.73,41.94,-87.75,"member" 491 | "842CEF972AD74232","electric_bike","2023-06-28 01:49:28","2023-06-28 02:21:59",,,,,41.79,-87.59,41.77,-87.58,"member" 492 | "B82DD3E7DCFBD802","electric_bike","2023-06-28 01:47:00","2023-06-28 01:48:27",,,,,41.8,-87.6,41.79,-87.59,"member" 493 | "803BB27E19E64520","electric_bike","2023-06-28 01:44:07","2023-06-28 01:45:01",,,,,41.8,-87.6,41.8,-87.6,"member" 494 | "4081FEF4F4C5BE82","electric_bike","2023-06-25 09:42:20","2023-06-25 10:04:36",,,,,41.97,-87.67,41.99,-87.71,"casual" 495 | "47BB3B9EAB5FBAFD","electric_bike","2023-06-25 14:31:35","2023-06-25 14:37:30",,,,,41.94,-87.65,41.93,-87.65,"member" 496 | "F44BAC9467BFCC9E","electric_bike","2023-06-24 22:09:33","2023-06-24 22:35:17",,,,,41.88,-87.62,41.95,-87.65,"member" 497 | "FE1531650C56ED13","electric_bike","2023-06-25 14:49:50","2023-06-25 14:58:31",,,,,41.94,-87.65,41.94,-87.65,"member" 498 | "16ABA165CF6D7955","electric_bike","2023-06-13 06:15:09","2023-06-13 06:20:10",,,,,41.94,-87.65,41.93,-87.65,"member" 499 | "83EA5013E24A951C","electric_bike","2023-06-13 07:45:20","2023-06-13 07:49:52",,,,,41.93,-87.65,41.93,-87.65,"member" 500 | "FC67E8A2FED1BEC1","electric_bike","2023-06-22 16:09:49","2023-06-22 16:15:56",,,,,41.89,-87.64,41.89,-87.62,"member" 501 | "A6748B1549843888","electric_bike","2023-06-21 21:01:13","2023-06-21 21:08:39",,,,,41.95,-87.66,41.94,-87.65,"member" 502 | "29D9F6835C898748","electric_bike","2023-06-20 11:40:09","2023-06-20 11:56:13",,,,,41.77,-87.58,41.8,-87.61,"member" 503 | "E4CB610149AAC0EE","electric_bike","2023-06-20 02:10:15","2023-06-20 03:49:16",,,,,41.8,-87.61,41.77,-87.58,"member" 504 | "77E7B2791EFDA5BC","electric_bike","2023-06-19 23:38:57","2023-06-19 23:49:08",,,,,41.83,-87.68,41.81,-87.68,"member" 505 | "6F6EE8AC144E06CE","electric_bike","2023-06-20 15:02:33","2023-06-20 15:05:44",,,,,41.79,-87.6,41.79,-87.6,"member" 506 | "7B07CF504025E4A8","electric_bike","2023-06-22 08:51:33","2023-06-22 09:14:50",,,,,41.9,-87.69,41.88,-87.63,"member" 507 | "38B261B464B9AEBC","electric_bike","2023-06-22 07:15:31","2023-06-22 07:43:39",,,,,41.89,-87.68,41.85,-87.61,"member" 508 | "11ABE838945514BB","electric_bike","2023-06-22 18:33:35","2023-06-22 18:45:01",,,,,41.97,-87.67,41.98,-87.65,"member" 509 | "1286FA83B52B1624","electric_bike","2023-06-21 21:48:24","2023-06-21 22:05:05",,,,,41.92,-87.63,41.93,-87.65,"member" 510 | "3A0B94BD2AF8841C","electric_bike","2023-06-30 18:46:01","2023-06-30 18:55:04",,,,,41.88,-87.64,41.89,-87.63,"member" 511 | "7544AA506FB6E184","electric_bike","2023-06-30 14:04:52","2023-06-30 14:06:59",,,,,41.95,-87.67,41.95,-87.66,"member" 512 | "DF0B3B07C1ECFCF6","electric_bike","2023-06-30 01:48:36","2023-06-30 02:35:40",,,,,41.8,-87.58,41.77,-87.58,"member" 513 | "3E7200EDE7745073","electric_bike","2023-06-30 10:44:46","2023-06-30 11:51:34",,,,,41.77,-87.58,41.79,-87.71,"member" 514 | "55A52B1A4C496C62","electric_bike","2023-06-30 10:44:19","2023-06-30 10:44:20",,,,,41.77,-87.58,41.77,-87.58,"member" 515 | "7413055DAC9FB5AC","electric_bike","2023-06-29 04:33:28","2023-06-29 04:42:59",,,,,41.94,-87.72,41.93,-87.71,"member" 516 | "1EF2B435CAEA3546","electric_bike","2023-06-25 11:27:58","2023-06-25 11:33:26",,,,,41.89,-87.68,41.91,-87.67,"member" 517 | "DC26C4789DFFFC96","electric_bike","2023-06-24 23:14:26","2023-06-24 23:15:20",,,,,41.89,-87.63,41.89,-87.63,"member" 518 | "A40FD80FDC63DDC4","electric_bike","2023-06-24 23:15:48","2023-06-24 23:16:11",,,,,41.89,-87.63,41.89,-87.63,"member" 519 | "F48281A88361A90D","electric_bike","2023-06-25 11:45:08","2023-06-25 11:52:54",,,,,41.92,-87.65,41.93,-87.65,"member" 520 | "D20FD92190B23FAE","electric_bike","2023-06-20 12:46:30","2023-06-20 12:51:42",,,,,41.92,-87.72,41.92,-87.71,"member" 521 | "3EA9A01A3B8BC778","electric_bike","2023-06-20 18:29:40","2023-06-20 19:05:51",,,,,41.9,-87.63,41.92,-87.72,"member" 522 | "80151BCCD855DDD1","electric_bike","2023-06-24 20:07:26","2023-06-24 20:32:40",,,,,41.92,-87.64,41.89,-87.61,"member" 523 | "3D6782047292DE2A","electric_bike","2023-06-01 14:43:05","2023-06-01 14:50:18",,,,,41.93,-87.65,41.92,-87.66,"member" 524 | "E3D1F98F2AF091C5","electric_bike","2023-06-01 09:49:17","2023-06-01 09:58:05",,,,,41.9,-87.67,41.88,-87.66,"member" 525 | "AF18C3AADE612A2F","electric_bike","2023-06-12 19:30:36","2023-06-12 19:36:05",,,,,41.99,-87.66,41.99,-87.67,"member" 526 | "BE7167CDDAEF5DB6","electric_bike","2023-06-13 08:35:25","2023-06-13 08:45:35",,,,,41.98,-87.67,41.97,-87.66,"member" 527 | "A6FD0971E88C4DCB","electric_bike","2023-06-10 02:26:55","2023-06-10 02:31:45",,,,,41.74,-87.67,41.75,-87.66,"member" 528 | "33DA1D804E1B2488","electric_bike","2023-06-10 11:10:57","2023-06-10 11:47:39",,,,,41.77,-87.58,41.77,-87.58,"member" 529 | "7753DC373B2FF2C9","electric_bike","2023-06-29 11:56:59","2023-06-29 12:20:57",,,,,41.78,-87.61,41.8,-87.59,"member" 530 | "D8BEDE9AB9E34092","electric_bike","2023-06-29 15:01:02","2023-06-29 15:06:27",,,,,41.89,-87.62,41.91,-87.63,"member" 531 | "323D7269E4C7DFE6","electric_bike","2023-06-13 11:52:13","2023-06-13 11:55:22",,,,,41.88,-87.64,41.88,-87.63,"member" 532 | "8BC9606306D17E73","electric_bike","2023-06-13 17:17:55","2023-06-13 17:28:31",,,,,41.9,-87.65,41.9,-87.69,"member" 533 | "BF6CAFD40F3D12B2","electric_bike","2023-06-10 13:07:38","2023-06-10 13:16:34",,,,,41.94,-87.67,41.93,-87.66,"member" 534 | "74DDC039055DF400","electric_bike","2023-06-10 13:54:50","2023-06-10 14:12:18",,,,,41.81,-87.68,41.84,-87.65,"member" 535 | "0293D0B1442ABEAD","electric_bike","2023-06-09 23:12:12","2023-06-09 23:16:44",,,,,41.8,-87.67,41.81,-87.68,"member" 536 | "B1F01601FE9A4737","electric_bike","2023-06-01 21:50:44","2023-06-01 22:07:50",,,,,41.92,-87.66,41.91,-87.64,"member" 537 | "E82C6C725A23CF45","electric_bike","2023-06-30 16:41:05","2023-06-30 16:52:45",,,,,41.88,-87.65,41.9,-87.64,"member" 538 | "F1687E0846111501","electric_bike","2023-06-17 23:25:39","2023-06-17 23:43:17",,,,,41.95,-87.76,41.93,-87.71,"member" 539 | "D92692F43D27EFF8","electric_bike","2023-06-18 02:46:39","2023-06-18 03:01:12",,,,,41.93,-87.71,41.95,-87.76,"member" 540 | "553FE22F354B5464","electric_bike","2023-06-06 21:11:22","2023-06-06 21:14:29",,,,,41.92,-87.65,41.93,-87.64,"member" 541 | "B27A78F4B4D51101","electric_bike","2023-06-06 20:45:10","2023-06-06 20:50:24",,,,,41.92,-87.64,41.92,-87.65,"member" 542 | "C992249AAFCEB630","electric_bike","2023-06-07 16:39:49","2023-06-07 16:43:19",,,,,41.88,-87.63,41.88,-87.63,"member" 543 | "CEE76A51203C401B","electric_bike","2023-06-11 19:54:15","2023-06-11 19:57:15",,,,,41.93,-87.67,41.93,-87.67,"member" 544 | "C94280BCE5FC5BA8","electric_bike","2023-06-17 07:45:46","2023-06-17 08:00:21",,,,,41.91,-87.63,41.88,-87.62,"member" 545 | "129A1AD5ADDBEB92","electric_bike","2023-06-16 19:20:06","2023-06-16 19:32:07",,,,,41.88,-87.62,41.87,-87.61,"member" 546 | "47982117D0FE462A","electric_bike","2023-06-17 07:25:46","2023-06-17 07:26:22",,,,,41.89,-87.65,41.89,-87.65,"member" 547 | "D7CF5B61BB4EF925","electric_bike","2023-06-04 19:35:04","2023-06-04 20:12:56",,,,,41.91,-87.71,41.99,-87.68,"member" 548 | "0E47454D2B1D769C","electric_bike","2023-06-05 08:27:10","2023-06-05 08:28:48",,,,,41.89,-87.62,41.89,-87.62,"member" 549 | "54AB608C5B953602","electric_bike","2023-06-04 06:50:42","2023-06-04 06:53:27",,,,,41.99,-87.66,41.99,-87.66,"member" 550 | "7B6551163A0675C8","electric_bike","2023-06-14 00:06:35","2023-06-14 00:13:07",,,,,41.94,-87.67,41.94,-87.65,"member" 551 | "772CA4B8B31AFA8A","electric_bike","2023-06-02 19:58:25","2023-06-02 20:02:50",,,,,41.89,-87.63,41.89,-87.64,"member" 552 | "AE83E8C062F65800","electric_bike","2023-06-05 21:02:13","2023-06-05 21:08:09",,,,,41.93,-87.69,41.92,-87.69,"member" 553 | "3278AC6B690BF0D0","electric_bike","2023-06-06 17:19:10","2023-06-06 17:35:45",,,,,41.88,-87.63,41.9,-87.62,"member" 554 | "0AB22D6BBB5EB6BC","electric_bike","2023-06-05 22:03:02","2023-06-05 22:10:29",,,,,41.97,-87.65,41.99,-87.66,"member" 555 | "D172570A1A4D5980","electric_bike","2023-06-05 20:14:33","2023-06-05 20:19:31",,,,,41.99,-87.65,41.98,-87.65,"member" 556 | "055E6783FCD761FD","electric_bike","2023-06-06 20:58:13","2023-06-06 21:04:00","California Ave & Milwaukee Ave","13084","California Ave & Division St","13256",41.922617674,-87.697106361,41.903029,-87.697474,"member" 557 | "C0161811D77C50F3","electric_bike","2023-06-17 10:19:11","2023-06-17 10:35:45",,,,,41.99,-87.66,41.95,-87.65,"member" 558 | "31BEA69865420BC2","electric_bike","2023-06-17 17:21:00","2023-06-17 17:28:32",,,,,41.94,-87.63,41.94,-87.64,"member" 559 | "6BBABBD20A6D2358","electric_bike","2023-06-17 12:45:28","2023-06-17 12:54:27",,,,,41.93,-87.64,41.95,-87.66,"member" 560 | "A0DFBF3283CDD6F1","unknown","2023-06-01 11:05:54","2023-06-01 11:40:18",,,,,41.88,-87.63,41.88,-87.64,"member" 561 | "794AC1C661A2731D","electric_bike","2023-06-01 05:40:08","2023-06-01 05:42:32",,,,,41.99,-87.66,41.99,-87.66,"member" 562 | "B825A3781D1398FA","electric_bike","2023-06-01 14:17:35","2023-06-01 14:39:54",,,,,41.94,-87.64,41.99,-87.66,"member" 563 | "EA0FC6145151DA16","electric_bike","2023-06-01 03:42:23","2023-06-01 04:39:47",,,,,41.98,-87.69,41.99,-87.66,"member" 564 | "BA28C56C81F1A92F","electric_bike","2023-06-01 11:10:20","2023-06-01 11:35:15",,,,,41.99,-87.66,41.94,-87.64,"member" 565 | "C84D5C9A813B5FBA","electric_bike","2023-06-26 19:09:37","2023-06-26 19:11:19",,,,,41.91,-87.65,41.91,-87.65,"member" 566 | "9207892EA631D6F9","electric_bike","2023-06-27 04:05:45","2023-06-27 04:12:29",,,,,41.98,-87.66,41.99,-87.66,"member" 567 | "A3EEDD4C68EBEE33","electric_bike","2023-06-30 19:14:23","2023-06-30 19:20:18",,,,,41.93,-87.64,41.94,-87.65,"member" 568 | "867F9035D558B2B7","electric_bike","2023-06-30 19:32:58","2023-06-30 19:54:58",,,,,41.93,-87.72,41.93,-87.68,"member" 569 | "0AA2BB6983BDCE6E","electric_bike","2023-06-28 19:00:20","2023-06-28 19:12:18",,,,,41.93,-87.67,41.91,-87.65,"member" 570 | "34E07719844E5C94","electric_bike","2023-06-28 20:51:08","2023-06-28 20:55:10",,,,,41.96,-87.73,41.95,-87.73,"member" 571 | "D556A64699A635D2","electric_bike","2023-06-20 09:58:59","2023-06-20 09:59:17",,,,,41.97,-87.71,41.97,-87.71,"member" 572 | "2298B37BA6865ECB","electric_bike","2023-06-20 14:03:00","2023-06-20 14:15:58",,,,,41.83,-87.62,41.81,-87.61,"member" 573 | "0AA1D7A33E0C1BB6","electric_bike","2023-06-20 09:59:49","2023-06-20 10:26:21",,,,,41.97,-87.71,41.97,-87.69,"member" 574 | "F3869992EE2F6B05","electric_bike","2023-06-20 13:41:31","2023-06-20 13:49:29",,,,,41.84,-87.63,41.83,-87.62,"member" 575 | "C48F8B5D428AAEBD","electric_bike","2023-06-19 20:20:21","2023-06-19 20:25:05",,,,,41.92,-87.63,41.93,-87.64,"member" 576 | "6F93AB36ADFD8214","electric_bike","2023-06-19 19:15:18","2023-06-19 19:24:40",,,,,41.93,-87.65,41.91,-87.62,"member" 577 | "DDD290BE31DE18A0","electric_bike","2023-06-19 20:39:36","2023-06-19 20:44:22",,,,,41.88,-87.76,41.88,-87.75,"member" 578 | "B143327542D31AEB","electric_bike","2023-06-20 10:09:22","2023-06-20 10:48:57",,,,,41.88,-87.76,41.88,-87.76,"member" 579 | "56249CF52E959303","electric_bike","2023-06-20 06:53:25","2023-06-20 07:00:50",,,,,41.9,-87.63,41.89,-87.62,"member" 580 | "15E9D06ECE39D580","electric_bike","2023-06-18 01:30:53","2023-06-18 01:35:58",,,,,41.99,-87.67,41.99,-87.67,"member" 581 | "58C0C36FF7C1EDCE","electric_bike","2023-06-26 13:30:14","2023-06-26 13:46:23",,,,,41.93,-87.63,41.95,-87.67,"member" 582 | "7445E5023B5B36F8","electric_bike","2023-06-28 09:31:44","2023-06-28 09:37:57",,,,,41.95,-87.73,41.96,-87.73,"member" 583 | "19C80BCCD752B7FF","electric_bike","2023-06-08 08:05:35","2023-06-08 08:11:48",,,,,41.96,-87.67,41.95,-87.66,"member" 584 | "B975B38E5D8D658A","electric_bike","2023-06-08 17:56:53","2023-06-08 18:11:04",,,,,41.87,-87.63,41.89,-87.64,"member" 585 | "1F2A8619ED4C704F","electric_bike","2023-06-13 18:12:01","2023-06-13 18:26:54",,,,,41.93,-87.67,41.94,-87.64,"member" 586 | "1D184B7C75A8A5F5","electric_bike","2023-06-13 06:18:02","2023-06-13 06:22:47",,,,,41.9,-87.67,41.9,-87.65,"member" 587 | "EC5FCE9AE5E37EE1","electric_bike","2023-06-19 11:48:33","2023-06-19 12:02:59",,,,,41.89,-87.63,41.88,-87.66,"member" 588 | "65F947FFC1DA6D0E","electric_bike","2023-06-19 06:23:40","2023-06-19 06:41:25",,,,,41.91,-87.63,41.95,-87.64,"member" 589 | "EC0F76C7C050C86D","electric_bike","2023-06-30 08:18:14","2023-06-30 08:26:27",,,,,42.0,-87.67,41.99,-87.66,"member" 590 | "DF37012B36D7A96D","electric_bike","2023-06-30 07:55:14","2023-06-30 08:01:32",,,,,41.99,-87.66,42.0,-87.67,"member" 591 | "44E12F943FDD5F27","electric_bike","2023-06-29 19:17:54","2023-06-29 19:28:54",,,,,41.99,-87.65,41.96,-87.66,"member" 592 | "24CD27A0C6FC12C9","electric_bike","2023-06-03 08:48:07","2023-06-03 09:02:00",,,,,41.91,-87.63,41.95,-87.64,"member" 593 | "2CC69E52A914879C","electric_bike","2023-06-03 08:26:54","2023-06-03 08:50:43",,,,,41.94,-87.64,41.88,-87.62,"member" 594 | "25314FD9DA41D7E4","electric_bike","2023-06-29 07:52:07","2023-06-29 08:05:45",,,,,41.91,-87.63,41.88,-87.63,"member" 595 | "ECBB3D10F843628C","electric_bike","2023-06-23 17:59:42","2023-06-23 18:04:40",,,,,41.91,-87.67,41.9,-87.66,"member" 596 | "8F21A56CE7A4CCBB","electric_bike","2023-06-09 12:37:34","2023-06-09 12:50:06",,,,,41.88,-87.62,41.88,-87.63,"member" 597 | "47EAE46BE95970D7","electric_bike","2023-06-08 20:15:49","2023-06-08 21:04:29",,,,,41.98,-87.65,41.89,-87.62,"member" 598 | "599584EA1DC8EDDC","electric_bike","2023-06-11 02:18:36","2023-06-11 02:21:52",,,,,41.92,-87.65,41.92,-87.65,"member" 599 | "51111359BDC3DE48","electric_bike","2023-06-22 15:03:38","2023-06-22 15:06:56",,,,,41.94,-87.64,41.95,-87.65,"member" 600 | "3C7569B912790B12","electric_bike","2023-06-22 18:15:28","2023-06-22 18:51:38",,,,,41.93,-87.65,41.85,-87.73,"member" 601 | "BA5838F551B9AB75","electric_bike","2023-06-02 11:13:53","2023-06-02 11:19:08",,,,,41.94,-87.64,41.95,-87.65,"member" 602 | "C56FCE7346640BAC","electric_bike","2023-06-02 18:13:46","2023-06-02 18:14:05",,,,,41.93,-87.64,41.93,-87.64,"member" 603 | "18844D9A25503785","electric_bike","2023-06-30 08:05:58","2023-06-30 08:33:54",,,,,41.96,-87.63,41.91,-87.63,"member" 604 | "DC0596565661A762","electric_bike","2023-06-30 06:40:11","2023-06-30 07:02:00",,,,,41.91,-87.63,41.96,-87.63,"member" 605 | "99B93E1F2A52AF7F","electric_bike","2023-06-29 21:33:51","2023-06-29 21:38:28",,,,,41.98,-87.65,41.97,-87.66,"member" 606 | "3A72BE7A352722CA","electric_bike","2023-06-04 23:20:06","2023-06-04 23:40:42",,,,,41.81,-87.62,41.78,-87.62,"member" 607 | "27E4ED501ACC3B42","electric_bike","2023-06-04 23:19:06","2023-06-04 23:19:20",,,,,41.81,-87.62,41.81,-87.62,"member" 608 | "52D8E0A3C70E327A","electric_bike","2023-06-24 11:26:05","2023-06-24 11:30:19",,,,,41.9,-87.68,41.9,-87.67,"member" 609 | "CBD49B38A7BEAA1C","electric_bike","2023-06-27 20:52:06","2023-06-27 21:25:48",,,,,41.95,-87.66,41.9,-87.66,"member" 610 | "EEAF7838E0367C62","electric_bike","2023-06-07 09:14:35","2023-06-07 09:24:59",,,,,41.91,-87.69,41.89,-87.68,"member" 611 | "ED492E920FE6B00A","electric_bike","2023-06-06 20:14:28","2023-06-06 20:14:45",,,,,41.89,-87.64,41.89,-87.64,"member" 612 | "F862449557B5B870","electric_bike","2023-06-06 20:13:28","2023-06-06 20:14:06",,,,,41.89,-87.64,41.89,-87.64,"member" 613 | "C74CCF5745EDFB84","electric_bike","2023-06-07 16:17:13","2023-06-07 17:16:40",,,,,41.91,-87.71,41.79,-87.59,"member" 614 | "2A3BF298028EE23C","electric_bike","2023-06-11 19:12:09","2023-06-11 19:18:48",,,,,41.96,-87.66,41.95,-87.65,"member" 615 | "E244CBD9345F511C","electric_bike","2023-06-17 18:02:54","2023-06-17 18:16:46",,,,,41.9,-87.62,41.9,-87.67,"member" 616 | "4D4B05CD51D4A3B8","electric_bike","2023-06-28 10:24:46","2023-06-28 10:33:06",,,,,41.99,-87.67,41.97,-87.67,"member" 617 | "90D3249A22EA194A","electric_bike","2023-06-28 17:14:26","2023-06-28 17:18:04",,,,,41.91,-87.64,41.91,-87.63,"member" 618 | "CBEEE0631F0E522D","electric_bike","2023-06-27 21:19:31","2023-06-27 21:33:40",,,,,41.89,-87.62,41.91,-87.64,"member" 619 | "5F26A4610061CF6D","electric_bike","2023-06-27 19:25:11","2023-06-27 19:44:14",,,,,41.89,-87.63,41.92,-87.69,"member" 620 | "0E6730347C347294","electric_bike","2023-06-27 19:18:11","2023-06-27 19:22:56",,,,,41.88,-87.62,41.89,-87.63,"member" 621 | "C63403905897070E","electric_bike","2023-06-09 18:12:41","2023-06-09 18:25:15",,,,,41.98,-87.67,41.97,-87.64,"member" 622 | "F95C5AD464CA7BFC","electric_bike","2023-06-09 05:40:47","2023-06-09 05:45:52",,,,,41.97,-87.66,41.98,-87.67,"member" 623 | "34A0007925C25BBD","electric_bike","2023-06-17 12:46:58","2023-06-17 12:56:07",,,,,41.94,-87.68,41.95,-87.68,"member" 624 | "646DA0F75F5EC80F","electric_bike","2023-06-17 13:24:29","2023-06-17 13:39:13",,,,,41.95,-87.68,41.97,-87.65,"member" 625 | "CC5BFA1DC5E7ECD0","electric_bike","2023-06-09 15:58:25","2023-06-09 16:03:28",,,,,42.05,-87.68,42.06,-87.68,"member" 626 | "5D33545B4F180F77","electric_bike","2023-06-09 06:26:34","2023-06-09 06:50:43",,,,,41.9,-87.64,41.96,-87.63,"member" 627 | "E5F4355DF25553FC","electric_bike","2023-06-09 10:35:06","2023-06-09 10:47:35",,,,,41.93,-87.66,41.91,-87.64,"member" 628 | "DA00610CC2C954B8","electric_bike","2023-06-22 11:07:18","2023-06-22 11:07:30",,,,,41.9,-87.66,41.9,-87.66,"member" 629 | "90BD58863A229B38","electric_bike","2023-06-25 12:52:46","2023-06-25 13:11:05",,,,,41.96,-87.65,41.94,-87.65,"member" 630 | "62F2A908D6BEFE72","electric_bike","2023-06-25 12:48:24","2023-06-25 12:50:19",,,,,41.96,-87.65,41.96,-87.65,"member" 631 | "7B8A6867E75A832E","electric_bike","2023-06-25 08:56:19","2023-06-25 09:12:13",,,,,41.94,-87.66,41.97,-87.64,"member" 632 | "EF2A558D3C62D298","electric_bike","2023-06-12 16:55:26","2023-06-12 17:02:27",,,,,42.03,-87.7,42.03,-87.69,"member" 633 | "C11B27864B7E6043","electric_bike","2023-06-12 16:43:43","2023-06-12 16:50:20",,,,,42.03,-87.69,42.03,-87.7,"member" 634 | "15473ED5BE446230","electric_bike","2023-06-12 17:18:54","2023-06-12 17:27:00",,,,,42.03,-87.69,42.03,-87.71,"member" 635 | "087A19336DB64966","electric_bike","2023-06-05 10:14:38","2023-06-05 10:24:02",,,,,41.93,-87.64,41.92,-87.67,"member" 636 | "DF5292D7561D32C2","electric_bike","2023-06-26 17:14:20","2023-06-26 17:23:45",,,,,41.88,-87.64,41.89,-87.64,"member" 637 | "ACFDF31885CBDBFA","electric_bike","2023-06-26 07:33:39","2023-06-26 07:43:19",,,,,41.87,-87.65,41.87,-87.67,"member" 638 | "6B82C54F7D9C05A2","electric_bike","2023-06-23 16:47:24","2023-06-23 16:53:06",,,"Wood St & Chicago Ave","637",41.9,-87.67,41.895634,-87.672069,"member" 639 | "6AB8A274A1FC127D","electric_bike","2023-06-23 16:24:09","2023-06-23 16:33:31","Wood St & Chicago Ave","637",,,41.895612955,-87.67218852,41.91,-87.67,"member" 640 | "45DD2C0D97C1F6B3","electric_bike","2023-06-18 18:53:24","2023-06-18 19:01:01",,,,,41.93,-87.63,41.92,-87.63,"member" 641 | "4D5475DBE11810CC","electric_bike","2023-06-17 19:54:48","2023-06-17 19:58:27",,,,,41.97,-87.66,41.98,-87.67,"member" 642 | "BAD833B4C3996838","electric_bike","2023-06-16 07:42:09","2023-06-16 07:55:09","Wood St & Chicago Ave","637",,,41.89566116666666,-87.67209333333334,41.9,-87.62,"member" 643 | "0264840A777F3762","electric_bike","2023-06-16 18:01:24","2023-06-16 18:08:40",,,,,41.79,-87.6,41.79,-87.6,"member" 644 | "CE6B913E264EB11C","electric_bike","2023-06-16 13:52:44","2023-06-16 14:09:57",,,,,41.86,-87.61,41.86,-87.61,"member" 645 | "B3E233CDBC30CA88","electric_bike","2023-06-15 20:36:23","2023-06-15 20:41:09",,,"Wood St & Chicago Ave","637",41.9,-87.67,41.895634,-87.672069,"member" 646 | "79D5C2530CB5A80C","electric_bike","2023-06-01 22:18:41","2023-06-01 22:18:56",,,,,41.94,-87.65,41.94,-87.65,"member" 647 | "D240F344F2DAFE58","electric_bike","2023-06-01 19:43:45","2023-06-01 19:56:51",,,,,41.91,-87.64,41.94,-87.65,"member" 648 | "0A20882EFCCB6CFF","electric_bike","2023-06-30 14:05:25","2023-06-30 14:13:58",,,,,42.01,-87.66,42.01,-87.66,"member" 649 | "D824A085044A1335","electric_bike","2023-06-30 15:47:14","2023-06-30 16:05:04",,,,,42.01,-87.71,42.05,-87.71,"member" 650 | "E841BD9CB4FBF16C","electric_bike","2023-06-30 18:00:16","2023-06-30 18:00:19",,,,,41.9,-87.63,41.9,-87.63,"member" 651 | "CA8EBD61365450A3","electric_bike","2023-06-13 09:02:54","2023-06-13 09:16:01",,,"Campbell Ave & Montrose Ave","15623",41.98,-87.66,41.961524,-87.691177,"member" 652 | "2E5D433A7F8DBE61","electric_bike","2023-06-13 13:29:13","2023-06-13 13:32:56",,,,,42.02,-87.68,42.02,-87.69,"member" 653 | "09CD00912BAA928D","electric_bike","2023-06-13 13:40:26","2023-06-13 13:43:58",,,,,42.02,-87.69,42.03,-87.69,"member" 654 | "30D802EC09A670BE","electric_bike","2023-06-13 09:06:28","2023-06-13 09:12:06",,,,,42.02,-87.68,42.01,-87.67,"member" 655 | "99526795104932DD","electric_bike","2023-06-12 19:32:56","2023-06-12 19:43:48",,,,,41.92,-87.63,41.9,-87.63,"member" 656 | "45DA392DE663B152","electric_bike","2023-06-10 19:08:47","2023-06-10 19:52:17",,,"La Villita Park (Albany/30th)","336",41.88,-87.69,41.839283,-87.70203716666667,"member" 657 | "E22119F0F0F3B052","electric_bike","2023-06-10 20:24:30","2023-06-10 20:38:51",,,,,41.98,-87.67,41.97,-87.65,"member" 658 | "3C56685373C934EB","electric_bike","2023-06-02 18:10:04","2023-06-02 18:39:43",,,,,41.9,-87.63,41.92,-87.72,"member" 659 | "953C256069F933F9","electric_bike","2023-06-06 18:28:57","2023-06-06 18:29:13",,,,,41.91,-87.63,41.91,-87.63,"member" 660 | "D61471501CFD63E2","electric_bike","2023-06-24 19:47:14","2023-06-24 20:29:39",,,,,41.94,-87.64,41.87,-87.62,"member" 661 | "38615237F2EDECEE","electric_bike","2023-06-04 10:30:35","2023-06-04 10:38:42",,,,,41.89,-87.7,41.89,-87.7,"member" 662 | "E8BC724228A72BA8","electric_bike","2023-06-04 09:57:06","2023-06-04 10:22:25",,,,,41.92,-87.64,41.89,-87.7,"member" 663 | "9395AF14E66A2506","electric_bike","2023-06-18 11:40:12","2023-06-18 11:41:45",,,,,42.03,-87.69,42.03,-87.69,"member" 664 | "CF3FA8B232556FEB","electric_bike","2023-06-12 19:12:18","2023-06-12 19:23:59",,,,,41.89,-87.63,41.92,-87.63,"member" 665 | "A97637AA85323A0F","electric_bike","2023-06-13 16:15:35","2023-06-13 16:24:05",,,,,41.89,-87.63,41.88,-87.64,"member" 666 | "63DC792C8CA04719","electric_bike","2023-06-30 16:10:31","2023-06-30 16:17:27",,,,,41.9,-87.66,41.91,-87.67,"member" 667 | "A3C2AA293A1A3568","electric_bike","2023-06-29 21:25:18","2023-06-29 21:30:09",,,,,41.94,-87.67,41.94,-87.66,"member" 668 | "622D6D8757158BDF","electric_bike","2023-06-30 07:46:02","2023-06-30 07:59:53",,,,,41.92,-87.69,41.89,-87.65,"member" 669 | "EDB0D766678E7C85","electric_bike","2023-06-30 13:02:51","2023-06-30 13:07:26",,,,,41.94,-87.65,41.94,-87.64,"member" 670 | "18226968A89B0E91","electric_bike","2023-06-25 12:41:22","2023-06-25 13:08:00",,,,,41.88,-87.64,41.83,-87.63,"member" 671 | "8592242E44DA61D4","electric_bike","2023-06-16 17:56:42","2023-06-16 17:58:54",,,,,41.92,-87.67,41.93,-87.67,"member" 672 | "FD5FA12A8258358B","electric_bike","2023-06-05 17:42:24","2023-06-05 17:42:36",,,,,41.92,-87.72,41.92,-87.72,"member" 673 | "BF669F835FDCFCEB","electric_bike","2023-06-05 17:43:49","2023-06-05 17:51:06",,,,,41.92,-87.72,41.92,-87.7,"member" 674 | "CCC767A11881808A","electric_bike","2023-06-18 20:34:34","2023-06-18 20:49:46",,,,,41.91,-87.66,41.92,-87.7,"member" 675 | "A8D62F45745D2B9B","electric_bike","2023-06-19 16:51:25","2023-06-19 16:52:22",,,,,41.91,-87.67,41.91,-87.67,"member" 676 | "1C7A34731E9402BE","electric_bike","2023-06-01 17:27:27","2023-06-01 17:38:05",,,,,41.86,-87.68,41.88,-87.66,"member" 677 | "3235A1D75DC07124","electric_bike","2023-06-01 17:40:47","2023-06-01 18:10:39",,,,,41.92,-87.66,41.93,-87.75,"member" 678 | "ADE3EC7F0A1BE834","electric_bike","2023-06-01 14:56:07","2023-06-01 15:30:16",,,,,41.89,-87.68,41.94,-87.68,"member" 679 | "F306AA38FE2CDF4C","electric_bike","2023-06-29 16:07:21","2023-06-29 16:15:25",,,,,41.97,-87.67,41.95,-87.68,"member" 680 | "FC85E147B9E98652","electric_bike","2023-06-28 19:22:33","2023-06-28 19:30:57",,,,,41.96,-87.68,41.95,-87.68,"member" 681 | "2881D3391DB0ACD9","electric_bike","2023-06-29 15:09:06","2023-06-29 15:13:04",,,,,41.89,-87.66,41.89,-87.65,"member" 682 | "32A80416C6FC1D26","electric_bike","2023-06-29 09:16:06","2023-06-29 09:40:43",,,,,41.94,-87.66,41.89,-87.65,"member" 683 | "F408FA36575F5B9B","electric_bike","2023-06-19 19:36:17","2023-06-19 19:53:20",,,,,41.9,-87.67,41.92,-87.65,"member" 684 | "A97F3A6AC9F7B11A","electric_bike","2023-06-20 18:21:14","2023-06-20 18:32:10",,,,,41.89,-87.67,41.91,-87.66,"member" 685 | "7F8536A846E4D503","electric_bike","2023-06-19 22:01:33","2023-06-19 22:19:23",,,,,41.92,-87.65,41.89,-87.67,"member" 686 | "7DF343A92BB05B82","electric_bike","2023-06-20 08:32:47","2023-06-20 08:33:18",,,,,41.89,-87.67,41.89,-87.67,"member" 687 | "3D056D671678CAE3","electric_bike","2023-06-07 17:19:54","2023-06-07 17:26:13",,,,,41.88,-87.65,41.88,-87.63,"member" 688 | "5A73AC8B9CA51D25","electric_bike","2023-06-17 15:05:29","2023-06-17 15:15:09","Wood St & Chicago Ave","637",,,41.895552278,-87.672136188,41.88,-87.65,"member" 689 | "7546C4EC2B4539B7","electric_bike","2023-06-17 16:03:15","2023-06-17 16:07:17",,,,,41.95,-87.65,41.96,-87.65,"member" 690 | "43D27837352E65E2","electric_bike","2023-06-07 20:43:52","2023-06-07 21:21:34",,,,,41.92,-87.63,41.9,-87.67,"member" 691 | "1AA1FA0CE9200919","electric_bike","2023-06-01 16:40:10","2023-06-01 16:48:43",,,,,41.9,-87.67,41.9,-87.69,"member" 692 | "9947A71A8E562DFD","electric_bike","2023-06-01 08:29:29","2023-06-01 08:52:17","California Ave & Division St","13256",,,41.903015333333336,-87.69754216666666,41.88,-87.63,"member" 693 | "80284B78387F6B3B","electric_bike","2023-06-01 08:39:27","2023-06-01 08:45:14",,,,,41.8,-87.6,41.79,-87.6,"member" 694 | "CF9DD4636E671CF0","electric_bike","2023-06-30 12:01:11","2023-06-30 12:14:01",,,,,41.78,-87.67,41.78,-87.67,"member" 695 | "526C38A53140AD30","electric_bike","2023-06-29 19:33:34","2023-06-29 19:45:18",,,,,41.78,-87.67,41.75,-87.65,"member" 696 | "CD06902FC29F4154","electric_bike","2023-06-29 22:08:41","2023-06-29 22:19:25",,,,,41.75,-87.65,41.78,-87.67,"member" 697 | "FE348D546170CF34","electric_bike","2023-06-14 15:27:46","2023-06-14 15:39:39",,,,,41.9,-87.62,41.91,-87.66,"member" 698 | "8C8A0AA32EE2101C","electric_bike","2023-06-10 20:21:32","2023-06-10 20:28:12",,,,,41.92,-87.69,41.93,-87.7,"member" 699 | "12302E888B4B1602","electric_bike","2023-06-10 21:18:57","2023-06-10 21:33:13",,,,,41.93,-87.7,41.9,-87.69,"member" 700 | "1CD7D3203EDAC7FE","electric_bike","2023-06-10 22:23:54","2023-06-10 22:32:22",,,,,41.98,-87.67,42.0,-87.66,"member" 701 | "65BFFD59257968D9","electric_bike","2023-06-11 13:47:01","2023-06-11 13:57:39",,,,,41.99,-87.67,41.97,-87.68,"member" 702 | "3EB8AA9EFB8CD398","electric_bike","2023-06-11 17:16:06","2023-06-11 17:23:47",,,,,41.97,-87.68,41.98,-87.67,"member" 703 | "E2F352F29BFC3168","electric_bike","2023-06-11 01:51:36","2023-06-11 02:04:02",,,,,42.0,-87.66,41.99,-87.66,"member" 704 | "3DCB117D50997F0A","electric_bike","2023-06-03 11:21:25","2023-06-03 11:29:46",,,,,41.97,-87.69,41.96,-87.68,"member" 705 | "9690AFDD83FD02DD","electric_bike","2023-06-01 09:57:37","2023-06-01 10:02:42",,,,,42.05,-87.68,42.06,-87.68,"member" 706 | "73F8734FC9469398","electric_bike","2023-06-01 14:12:54","2023-06-01 14:18:24",,,,,42.06,-87.67,42.05,-87.68,"member" 707 | "08C24E28A3881B1E","electric_bike","2023-06-14 20:27:28","2023-06-14 20:35:48",,,,,41.92,-87.63,41.93,-87.64,"member" 708 | "862F9F9C506B1F0F","electric_bike","2023-06-27 17:29:03","2023-06-27 17:32:21",,,,,41.9,-87.64,41.89,-87.63,"member" 709 | "65BC2A1FC12CFFA4","classic_bike","2023-06-28 18:21:26","2023-06-28 18:56:06","Cottage Grove Ave & 51st St","TA1309000067","Cottage Grove Ave & 51st St","TA1309000067",41.803038,-87.606615,41.803038,-87.606615,"member" 710 | "9493428ECAC65AFC","electric_bike","2023-06-07 19:21:02","2023-06-07 19:25:05",,,,,41.92,-87.63,41.93,-87.63,"member" 711 | "8DFFAA0BE6CB0DD5","electric_bike","2023-06-07 20:57:40","2023-06-07 21:11:49",,,,,41.87,-87.61,41.87,-87.62,"member" 712 | "F008E74855FAA661","electric_bike","2023-06-02 08:24:43","2023-06-02 08:26:18",,,,,41.92,-87.65,41.92,-87.65,"member" 713 | "1FEFAC7C807CC2CE","electric_bike","2023-06-02 11:01:05","2023-06-02 11:11:45",,,,,41.81,-87.68,41.82,-87.7,"member" 714 | "FD4C558F7285BD5E","electric_bike","2023-06-02 17:46:27","2023-06-02 18:05:56",,,,,41.91,-87.64,41.95,-87.66,"member" 715 | "C58F5E174B0EB840","electric_bike","2023-06-02 11:50:34","2023-06-02 11:56:06",,,,,41.93,-87.65,41.93,-87.64,"member" 716 | "7DA27FB915B72BB9","electric_bike","2023-06-02 14:33:58","2023-06-02 14:46:38",,,,,41.9,-87.64,41.93,-87.64,"member" 717 | "F301946307781772","electric_bike","2023-06-02 12:33:34","2023-06-02 12:40:59",,,,,41.93,-87.64,41.92,-87.65,"member" 718 | "5851E1FF1AEB9035","electric_bike","2023-06-01 20:17:14","2023-06-01 20:27:46",,,"Western Ave & Roscoe St","15634",41.95,-87.69,41.943034,-87.687288,"member" 719 | "BFC39C0E19FFBF45","electric_bike","2023-06-02 18:53:36","2023-06-02 19:19:16",,,,,41.91,-87.64,41.86,-87.61,"member" 720 | "34CB5BB14739F42E","electric_bike","2023-06-02 12:51:48","2023-06-02 13:14:38",,,,,41.92,-87.68,41.93,-87.65,"member" 721 | "6E2ABA0F52D6AD80","electric_bike","2023-06-02 14:15:29","2023-06-02 14:29:09",,,,,41.94,-87.65,41.93,-87.67,"member" 722 | "F41EEF2A308231FC","electric_bike","2023-06-24 14:03:46","2023-06-24 14:15:26",,,,,41.91,-87.63,41.9,-87.62,"member" 723 | "9ADCA496C924E328","electric_bike","2023-06-24 13:59:51","2023-06-24 14:03:04",,,,,41.92,-87.64,41.91,-87.63,"member" 724 | "81ED8FDBE66B79D3","electric_bike","2023-06-10 11:56:09","2023-06-10 12:01:05",,,,,41.92,-87.64,41.92,-87.63,"member" 725 | "C669F4A0BF5814F7","electric_bike","2023-06-10 17:40:42","2023-06-10 18:11:54",,,,,41.91,-87.63,41.92,-87.7,"member" 726 | "B3815A795E14589A","electric_bike","2023-06-10 15:49:52","2023-06-10 15:55:36",,,,,41.92,-87.64,41.91,-87.63,"member" 727 | "7D1F45BFD0769DCF","electric_bike","2023-06-09 19:52:36","2023-06-09 19:59:17",,,,,41.95,-87.65,41.94,-87.66,"member" 728 | "7477810C6451AE9A","electric_bike","2023-06-09 20:48:24","2023-06-09 20:48:28",,,,,41.94,-87.66,41.94,-87.66,"member" 729 | "3E30B13DE877D93B","electric_bike","2023-06-10 23:06:11","2023-06-10 23:37:25",,,,,41.95,-87.65,41.93,-87.7,"member" 730 | "1F4877729180FCF1","electric_bike","2023-06-11 08:49:33","2023-06-11 08:57:45",,,,,41.93,-87.64,41.92,-87.66,"member" 731 | "D3E98A816875F4EB","electric_bike","2023-06-10 20:35:41","2023-06-10 20:46:01",,,,,41.97,-87.76,42.0,-87.79,"member" 732 | "33CEE838E0E0612D","electric_bike","2023-06-04 11:48:05","2023-06-04 11:57:50",,,,,41.88,-87.65,41.9,-87.66,"member" 733 | "20B68B142032438C","electric_bike","2023-06-06 21:24:58","2023-06-06 21:30:20",,,,,41.94,-87.64,41.95,-87.65,"member" 734 | "97BC81C582DD461C","electric_bike","2023-06-07 00:26:52","2023-06-07 00:30:51",,,,,41.94,-87.64,41.93,-87.64,"member" 735 | "39505569DB8A389B","electric_bike","2023-06-07 00:08:59","2023-06-07 00:13:09",,,,,41.95,-87.65,41.94,-87.64,"member" 736 | "4F8A68A720CEFF9C","electric_bike","2023-06-06 19:38:46","2023-06-06 19:49:27",,,,,41.91,-87.63,41.9,-87.63,"member" 737 | "9D2E350E0DF1B606","electric_bike","2023-06-21 19:19:13","2023-06-21 19:31:54",,,,,41.91,-87.63,41.88,-87.62,"member" 738 | "ABFBEC51BF67D4CB","electric_bike","2023-06-22 18:37:55","2023-06-22 18:53:27",,,,,41.89,-87.61,41.93,-87.63,"member" 739 | "83D28C64533FD605","electric_bike","2023-06-21 21:09:30","2023-06-21 21:17:34",,,"Wood St & Chicago Ave","637",41.9,-87.68,41.895634,-87.672069,"member" 740 | "D23291934EEFE926","electric_bike","2023-06-22 17:27:00","2023-06-22 17:53:30",,,,,41.87,-87.63,41.93,-87.64,"member" 741 | "29070D5507977F5A","electric_bike","2023-06-28 19:20:16","2023-06-28 19:29:27",,,,,41.96,-87.69,41.94,-87.68,"member" 742 | "32D10F1065505CFC","electric_bike","2023-06-29 14:55:15","2023-06-29 15:06:32",,,,,41.92,-87.65,41.9,-87.64,"member" 743 | "8C1023BBF9151A66","electric_bike","2023-06-29 15:11:40","2023-06-29 15:24:55",,,,,41.9,-87.64,41.93,-87.64,"member" 744 | "8F7D83EC1971AE7F","electric_bike","2023-06-29 14:01:06","2023-06-29 14:08:29",,,,,41.93,-87.64,41.92,-87.65,"member" 745 | "621102C178BB25F9","electric_bike","2023-06-22 18:50:39","2023-06-22 19:03:45",,,,,41.95,-87.65,41.91,-87.63,"member" 746 | "84561BB76A090434","electric_bike","2023-06-22 14:18:42","2023-06-22 14:25:09",,,,,41.87,-87.65,41.87,-87.66,"member" 747 | "E42A0A4FC66A8656","electric_bike","2023-06-22 09:48:24","2023-06-22 09:54:29",,,,,41.87,-87.66,41.87,-87.65,"member" 748 | "C2F560243E608B1F","electric_bike","2023-06-21 23:49:29","2023-06-21 23:59:11",,,,,41.92,-87.65,41.95,-87.65,"member" 749 | "CE857EC37FF9792C","electric_bike","2023-06-15 17:00:24","2023-06-15 17:24:38",,,,,41.88,-87.65,41.88,-87.66,"member" 750 | "61AC92CC1129EC33","electric_bike","2023-06-15 17:28:48","2023-06-15 17:33:13",,,,,41.88,-87.66,41.88,-87.65,"member" 751 | "42B9D0FF1F51FE95","electric_bike","2023-06-15 18:43:49","2023-06-15 18:57:07",,,,,41.92,-87.65,41.94,-87.65,"member" 752 | "4CB8E02184545566","electric_bike","2023-06-30 20:25:00","2023-06-30 20:34:02",,,,,41.95,-87.77,41.95,-87.77,"member" 753 | "C7940AEDDA9A0008","electric_bike","2023-06-30 20:39:45","2023-06-30 20:43:14",,,,,41.95,-87.77,41.95,-87.77,"member" 754 | "4FEEB3CF066AAB04","electric_bike","2023-06-09 22:45:53","2023-06-09 22:53:16",,,,,41.95,-87.66,41.95,-87.66,"member" 755 | "8C9AB3C295DB9922","electric_bike","2023-06-10 17:30:22","2023-06-10 17:40:18",,,,,41.93,-87.67,41.95,-87.66,"member" 756 | "006DDC0991BF97A4","electric_bike","2023-06-10 16:20:11","2023-06-10 16:24:14",,,,,41.87,-87.67,41.87,-87.65,"member" 757 | "701B37AAEB6042DD","electric_bike","2023-06-10 17:05:16","2023-06-10 17:10:09",,,,,41.87,-87.65,41.87,-87.66,"member" 758 | "1073C3E284E77EEC","electric_bike","2023-06-10 16:55:10","2023-06-10 17:23:34",,,,,41.92,-87.7,41.95,-87.66,"member" 759 | "67567C622416565C","electric_bike","2023-06-07 17:27:25","2023-06-07 17:56:58",,,,,41.81,-87.7,41.87,-87.63,"member" 760 | "EF966A705DD71B79","electric_bike","2023-06-12 15:16:48","2023-06-12 15:25:31",,,,,41.8,-87.58,41.79,-87.6,"member" 761 | "D70B65F20E9D0CC8","electric_bike","2023-06-12 18:23:03","2023-06-12 18:30:22",,,,,41.93,-87.7,41.91,-87.69,"member" 762 | "AC3A30EA3EADA88E","electric_bike","2023-06-25 10:43:08","2023-06-25 10:50:53",,,,,41.95,-87.65,41.94,-87.64,"member" 763 | "B54A751235383E24","electric_bike","2023-06-25 12:34:59","2023-06-25 12:35:09",,,,,41.97,-87.66,41.97,-87.66,"member" 764 | "D6EBBF9DADED17F7","electric_bike","2023-06-25 12:35:59","2023-06-25 12:36:11",,,,,41.97,-87.66,41.97,-87.66,"member" 765 | "FB285F48D1F3770E","electric_bike","2023-06-25 12:37:15","2023-06-25 12:37:30",,,,,41.97,-87.66,41.97,-87.66,"member" 766 | "D19A7B39F3801352","electric_bike","2023-06-10 17:05:32","2023-06-10 17:20:39",,,,,41.92,-87.67,41.95,-87.66,"member" 767 | "194A7FDD42BBF1BE","electric_bike","2023-06-18 02:07:15","2023-06-18 02:15:08",,,,,41.91,-87.68,41.91,-87.7,"member" 768 | "5E05EE78A0A67C23","electric_bike","2023-06-24 13:31:22","2023-06-24 13:45:14",,,,,41.95,-87.65,41.93,-87.63,"member" 769 | "E0FAC8EE2B47362C","electric_bike","2023-06-24 17:29:06","2023-06-24 17:58:45",,,,,41.91,-87.63,41.97,-87.66,"member" 770 | "A0A39DB0C3EBBF23","electric_bike","2023-06-24 03:38:49","2023-06-24 04:17:03",,,,,41.93,-87.71,41.89,-87.66,"member" 771 | "0E3CFC7917C49AA8","electric_bike","2023-06-24 00:02:14","2023-06-24 00:10:48",,,,,41.91,-87.67,41.91,-87.7,"member" 772 | "C39B97285F9AD81A","electric_bike","2023-06-24 00:33:20","2023-06-24 00:41:27",,,,,41.94,-87.65,41.92,-87.65,"member" 773 | "36ACAE5CB534B6BA","electric_bike","2023-06-30 07:46:44","2023-06-30 08:00:32",,,,,41.96,-87.63,41.93,-87.63,"member" 774 | "2616B6ED482D3A04","electric_bike","2023-06-02 18:39:28","2023-06-02 18:51:47",,,,,41.91,-87.7,41.9,-87.68,"member" 775 | "DEF3EB22D07060B7","electric_bike","2023-06-01 19:01:32","2023-06-01 19:01:43",,,,,41.92,-87.65,41.92,-87.65,"member" 776 | "AA32AAFE42B3FB9F","electric_bike","2023-06-02 07:17:49","2023-06-02 07:21:26",,,,,41.92,-87.65,41.92,-87.65,"member" 777 | "DD85DA1F6B1DDE2D","electric_bike","2023-06-04 14:37:49","2023-06-04 14:44:51",,,,,41.93,-87.65,41.93,-87.64,"member" 778 | "EB1BD71C7C8602B6","electric_bike","2023-06-04 08:56:28","2023-06-04 09:05:42",,,,,41.93,-87.64,41.92,-87.66,"member" 779 | "45883EA62CD6B275","electric_bike","2023-06-04 17:48:36","2023-06-04 17:55:19",,,,,41.92,-87.65,41.93,-87.64,"member" 780 | "08B4FCAEF0BDB401","electric_bike","2023-06-04 21:03:12","2023-06-04 22:13:47",,,,,41.93,-87.65,41.79,-87.59,"member" 781 | "2B7C96982BDA9AA2","electric_bike","2023-06-12 07:29:51","2023-06-12 07:32:07",,,,,41.9,-87.63,41.9,-87.63,"member" 782 | "ACB4376A98760585","electric_bike","2023-06-12 13:34:04","2023-06-12 13:39:52",,,,,41.79,-87.59,41.8,-87.6,"member" 783 | "B1C6F8C2B550715E","electric_bike","2023-06-12 17:16:10","2023-06-12 17:23:11",,,,,41.99,-87.67,42.01,-87.67,"member" 784 | "8A9698DFDEC16CCC","electric_bike","2023-06-09 21:22:37","2023-06-09 21:31:40",,,,,41.96,-87.64,41.97,-87.66,"member" 785 | "6663EF9E3E48542C","electric_bike","2023-06-21 23:18:17","2023-06-21 23:32:16",,,,,41.94,-87.66,41.93,-87.66,"member" 786 | "853981F35B1CFE7B","electric_bike","2023-06-05 14:41:02","2023-06-05 14:49:04",,,,,41.92,-87.65,41.93,-87.64,"member" 787 | "987F8F172222894D","electric_bike","2023-06-05 07:57:54","2023-06-05 08:02:36",,,,,41.88,-87.65,41.88,-87.64,"member" 788 | "2B19E48E2C7AD2EA","electric_bike","2023-06-05 15:14:17","2023-06-05 15:18:44",,,,,41.82,-87.7,41.81,-87.7,"member" 789 | "A6851F6CD410BA9C","electric_bike","2023-06-05 15:28:28","2023-06-05 15:32:01",,,,,41.81,-87.7,41.82,-87.7,"member" 790 | "F1ED30DC871A95E5","electric_bike","2023-06-05 15:42:26","2023-06-05 15:43:21",,,,,41.82,-87.7,41.82,-87.7,"member" 791 | "F5DA765B63FC3DB7","electric_bike","2023-06-05 17:19:58","2023-06-05 17:24:45",,,,,42.05,-87.68,42.06,-87.68,"member" 792 | "B37C1F1CA19C551A","electric_bike","2023-06-05 11:11:57","2023-06-05 11:17:00",,,,,42.05,-87.68,42.06,-87.68,"member" 793 | "A22CFB7063B3FF63","electric_bike","2023-06-05 15:10:18","2023-06-05 15:16:59",,,,,42.06,-87.67,42.05,-87.68,"member" 794 | "5C9B004EE7DC32EB","electric_bike","2023-06-19 15:27:32","2023-06-19 15:27:35",,,,,41.97,-87.71,41.97,-87.71,"member" 795 | "13ECF8C9D2C60988","electric_bike","2023-06-19 15:29:40","2023-06-19 15:29:46",,,,,41.97,-87.71,41.97,-87.71,"member" 796 | "DC5FCE118481FE0F","electric_bike","2023-06-19 15:23:41","2023-06-19 15:23:49",,,,,41.97,-87.71,41.97,-87.71,"member" 797 | "2DC7D1BD729640E8","electric_bike","2023-06-19 15:28:25","2023-06-19 15:28:32",,,,,41.97,-87.71,41.97,-87.71,"member" 798 | "0C35EDB3EBA808AE","electric_bike","2023-06-19 15:22:15","2023-06-19 15:22:21",,,,,41.97,-87.71,41.97,-87.71,"member" 799 | "B6841A6F5D81EECC","electric_bike","2023-06-19 15:25:11","2023-06-19 15:25:14",,,,,41.97,-87.71,41.97,-87.71,"member" 800 | "B32A5800A13A10E3","electric_bike","2023-06-19 15:31:55","2023-06-19 15:32:00",,,,,41.97,-87.71,41.97,-87.71,"member" 801 | "CB1B686DC986B8A8","electric_bike","2023-06-19 15:49:23","2023-06-19 15:49:29",,,,,41.97,-87.71,41.97,-87.71,"member" 802 | "C3BB1818C47BC4BE","electric_bike","2023-06-19 15:27:03","2023-06-19 15:27:08",,,,,41.97,-87.71,41.97,-87.71,"member" 803 | "FFB70B74628CEC49","electric_bike","2023-06-19 15:25:53","2023-06-19 15:25:56",,,,,41.97,-87.71,41.97,-87.71,"member" 804 | "99B496999D1D95F1","electric_bike","2023-06-19 15:21:16","2023-06-19 15:21:23",,,,,41.97,-87.71,41.97,-87.71,"member" 805 | "174516A001B52EF9","electric_bike","2023-06-19 15:22:01","2023-06-19 15:22:05",,,,,41.97,-87.71,41.97,-87.71,"member" 806 | "A622AB2AA1ED33C6","electric_bike","2023-06-19 15:28:14","2023-06-19 15:28:17",,,,,41.97,-87.71,41.97,-87.71,"member" 807 | "7282CC3C43258FF9","electric_bike","2023-06-19 15:31:30","2023-06-19 15:31:33",,,,,41.97,-87.71,41.97,-87.71,"member" 808 | "51E7B010502B208F","electric_bike","2023-06-19 15:49:04","2023-06-19 15:49:11",,,,,41.97,-87.71,41.97,-87.71,"member" 809 | "49D35927679DC392","electric_bike","2023-06-19 15:26:23","2023-06-19 15:26:26",,,,,41.97,-87.71,41.97,-87.71,"member" 810 | "57212CB0F6D2DE1F","electric_bike","2023-06-19 15:28:42","2023-06-19 15:28:48",,,,,41.97,-87.71,41.97,-87.71,"member" 811 | "FE84CC6A1715D2B0","electric_bike","2023-06-19 15:22:31","2023-06-19 15:22:37",,,,,41.97,-87.71,41.97,-87.71,"member" 812 | "35EAC52928CDC44D","electric_bike","2023-06-19 15:24:33","2023-06-19 15:24:36",,,,,41.97,-87.71,41.97,-87.71,"member" 813 | "C07D62FDC308C06A","electric_bike","2023-06-19 15:27:44","2023-06-19 15:27:47",,,,,41.97,-87.71,41.97,-87.71,"member" 814 | "383678A5A058EAB9","electric_bike","2023-06-19 15:26:06","2023-06-19 15:26:12",,,,,41.97,-87.71,41.97,-87.71,"member" 815 | "D5F4E11DF4668AE6","electric_bike","2023-06-19 15:27:59","2023-06-19 15:28:02",,,,,41.97,-87.71,41.97,-87.71,"member" 816 | "7892F797A4C427AB","electric_bike","2023-06-19 15:51:16","2023-06-19 15:51:22",,,,,41.97,-87.71,41.97,-87.71,"member" 817 | "0346DEA5BEF5B8A1","electric_bike","2023-06-19 16:04:01","2023-06-19 16:20:10",,,,,41.97,-87.71,41.97,-87.76,"member" 818 | "9A6ECDF0DA56F411","electric_bike","2023-06-19 17:58:40","2023-06-19 18:30:18",,,,,41.97,-87.76,41.97,-87.71,"member" 819 | "9B37EB44ADA0212F","electric_bike","2023-06-19 15:24:01","2023-06-19 15:24:05",,,,,41.97,-87.71,41.97,-87.71,"member" 820 | "4706F4D02E8CB4EA","electric_bike","2023-06-19 15:21:44","2023-06-19 15:21:48",,,,,41.97,-87.71,41.97,-87.71,"member" 821 | "684A4D64817BE5C3","electric_bike","2023-06-19 15:22:47","2023-06-19 15:22:53",,,,,41.97,-87.71,41.97,-87.71,"member" 822 | "7AB73DD02660781E","electric_bike","2023-06-02 11:50:50","2023-06-02 11:55:08",,,,,41.92,-87.72,41.92,-87.71,"member" 823 | "E2CD199A69EEC3FF","electric_bike","2023-06-07 18:06:00","2023-06-07 18:06:50",,,,,41.89,-87.64,41.89,-87.64,"member" 824 | "E8E77F22CEE5F1FC","electric_bike","2023-06-07 18:46:13","2023-06-07 18:53:47",,,,,42.01,-87.67,41.99,-87.67,"member" 825 | "E3CD3102E6FC5517","electric_bike","2023-06-07 18:54:26","2023-06-07 18:54:57",,,,,41.99,-87.67,41.99,-87.67,"member" 826 | "986656987A228B93","electric_bike","2023-06-07 18:38:59","2023-06-07 18:41:19",,,,,41.87,-87.65,41.87,-87.64,"member" 827 | "A11F42010FF72B1B","electric_bike","2023-06-07 14:08:40","2023-06-07 14:41:00",,,,,41.91,-87.69,41.93,-87.64,"member" 828 | "7D234395BEB5D4E6","electric_bike","2023-06-07 14:46:51","2023-06-07 14:49:15",,,,,41.93,-87.64,41.92,-87.64,"member" 829 | "4BAD645474109946","electric_bike","2023-06-12 14:06:49","2023-06-12 14:24:53",,,,,41.91,-87.69,41.89,-87.67,"member" 830 | "371F6647C9991EB6","electric_bike","2023-06-23 07:52:54","2023-06-23 08:10:39",,,,,41.96,-87.64,41.94,-87.66,"member" 831 | "2003148F0B9D04E7","electric_bike","2023-06-22 20:44:57","2023-06-22 20:57:15",,,,,41.92,-87.64,41.95,-87.65,"member" 832 | "C95F6A0C4705048D","electric_bike","2023-06-29 19:21:06","2023-06-29 19:42:51",,,,,41.96,-87.72,41.92,-87.7,"member" 833 | "4D149B57532FE9C9","classic_bike","2023-06-30 09:53:16","2023-06-30 09:53:38","Western Ave & Roscoe St","15634","Western Ave & Roscoe St","15634",41.943034,-87.687288,41.943034,-87.687288,"member" 834 | "F00843572E9C5FF0","electric_bike","2023-06-30 12:35:33","2023-06-30 12:54:39",,,,,41.88,-87.65,41.93,-87.63,"member" 835 | "FEC6B415E3F17CCC","electric_bike","2023-06-18 22:11:18","2023-06-18 22:21:15",,,,,41.91,-87.71,41.9,-87.69,"member" 836 | "894E86867DCF7D08","electric_bike","2023-06-19 03:19:51","2023-06-19 03:25:30",,,,,41.9,-87.71,41.91,-87.71,"member" 837 | "E98618D233825F36","electric_bike","2023-06-18 21:22:36","2023-06-18 21:30:49",,,,,41.91,-87.68,41.91,-87.71,"member" 838 | "DD2C69ED0537CB94","electric_bike","2023-06-19 13:21:29","2023-06-19 13:28:50",,,,,41.93,-87.65,41.94,-87.64,"member" 839 | "45A7A401FE71035A","electric_bike","2023-06-19 10:02:52","2023-06-19 10:03:55",,,,,41.92,-87.69,41.92,-87.69,"member" 840 | "0957DD5A5669C518","electric_bike","2023-06-19 16:45:21","2023-06-19 17:00:35",,,,,41.96,-87.64,41.95,-87.65,"member" 841 | "B0DE863A9E67800C","electric_bike","2023-06-03 15:30:35","2023-06-03 15:30:47",,,,,41.9,-87.62,41.9,-87.62,"member" 842 | "2A37C5EC66AED696","electric_bike","2023-06-23 13:10:40","2023-06-23 13:17:15",,,,,41.89,-87.63,41.89,-87.64,"member" 843 | "5AEC49A51FB51236","electric_bike","2023-06-23 14:18:53","2023-06-23 14:27:42",,,,,42.01,-87.67,42.03,-87.68,"member" 844 | "F21F31696EF35B69","electric_bike","2023-06-21 11:38:52","2023-06-21 11:44:18",,,,,41.8,-87.6,41.79,-87.59,"member" 845 | "CD7A4D2384BE4978","electric_bike","2023-06-21 13:09:39","2023-06-21 13:14:15",,,,,41.79,-87.59,41.8,-87.6,"member" 846 | "BAE48AFCA5C36414","classic_bike","2023-06-21 13:23:57","2023-06-21 13:24:16","Cottage Grove Ave & 51st St","TA1309000067","Cottage Grove Ave & 51st St","TA1309000067",41.803038,-87.606615,41.803038,-87.606615,"member" 847 | "E3491C5273700783","classic_bike","2023-06-21 13:24:46","2023-06-21 13:40:47","Cottage Grove Ave & 51st St","TA1309000067","Cottage Grove Ave & 51st St","TA1309000067",41.803038,-87.606615,41.803038,-87.606615,"member" 848 | "5550AEC72AD22E15","electric_bike","2023-06-09 15:55:56","2023-06-09 16:08:19",,,,,41.96,-87.67,41.95,-87.66,"member" 849 | "C51BB928D744C12A","electric_bike","2023-06-09 13:08:57","2023-06-09 13:47:00",,,,,41.78,-87.73,41.77,-87.72,"member" 850 | "3677476890344658","electric_bike","2023-06-17 12:23:46","2023-06-17 12:33:30",,,,,41.92,-87.65,41.95,-87.65,"member" 851 | "642CBB8677973F99","electric_bike","2023-06-09 16:55:20","2023-06-09 17:19:14",,,,,41.93,-87.63,41.88,-87.65,"member" 852 | "F5E839DD56CC70A1","electric_bike","2023-06-09 18:56:24","2023-06-09 19:07:38",,,,,41.93,-87.66,41.94,-87.68,"member" 853 | "B369E52399C1D6B3","electric_bike","2023-06-22 16:34:53","2023-06-22 17:02:52",,,,,41.91,-87.71,41.94,-87.65,"member" 854 | "4AE5E4B5B30DBFEF","classic_bike","2023-06-02 23:39:41","2023-06-02 23:40:26","California Ave & Milwaukee Ave","13084","California Ave & Milwaukee Ave","13084",41.922695,-87.697153,41.922695,-87.697153,"member" 855 | "6C3680996BD154F4","electric_bike","2023-06-05 11:04:28","2023-06-05 11:08:48",,,,,41.91,-87.71,41.91,-87.71,"member" 856 | "67C8063477A3E2A2","electric_bike","2023-06-05 10:24:22","2023-06-05 10:30:10",,,"California Ave & Division St","13256",41.92,-87.7,41.903029,-87.697474,"member" 857 | "4B186E6FC54F5FCC","electric_bike","2023-06-04 23:18:48","2023-06-05 00:06:43",,,,,41.86,-87.61,41.93,-87.71,"member" 858 | "22ACA9D7AFA8C4DB","electric_bike","2023-06-05 11:13:31","2023-06-05 11:22:17",,,,,42.07,-87.7,42.05,-87.68,"member" 859 | "55F2060A13870947","electric_bike","2023-06-14 19:08:16","2023-06-14 19:12:43",,,,,41.88,-87.64,41.88,-87.64,"member" 860 | "546DDB685D646D1E","electric_bike","2023-06-14 19:15:27","2023-06-14 19:15:55",,,,,41.88,-87.64,41.88,-87.64,"member" 861 | "356EC74DB6DE34F5","electric_bike","2023-06-14 19:16:11","2023-06-14 19:16:26",,,,,41.88,-87.64,41.88,-87.64,"member" 862 | "1D70FB112A16A81D","electric_bike","2023-06-14 19:13:02","2023-06-14 19:13:24",,,,,41.88,-87.64,41.88,-87.64,"member" 863 | "F7BC201FAB69BC11","electric_bike","2023-06-26 18:13:27","2023-06-26 18:20:56",,,,,41.92,-87.67,41.91,-87.69,"member" 864 | "206CA7317C7F4D44","classic_bike","2023-06-26 13:39:20","2023-06-26 13:41:04","Cottage Grove Ave & 51st St","TA1309000067","Cottage Grove Ave & 51st St","TA1309000067",41.803038,-87.606615,41.803038,-87.606615,"member" 865 | "441BCE21B4840D75","electric_bike","2023-06-26 15:10:43","2023-06-26 15:28:04",,,,,41.94,-87.65,41.98,-87.67,"member" 866 | "C90EE28205C9FBD5","electric_bike","2023-06-26 14:49:28","2023-06-26 14:54:11",,,,,41.93,-87.64,41.94,-87.65,"member" 867 | "9BB69C000ECFC2BA","electric_bike","2023-06-26 09:27:35","2023-06-26 09:38:48",,,,,41.89,-87.71,41.88,-87.72,"member" 868 | "F909C621B76FE291","electric_bike","2023-06-26 18:55:58","2023-06-26 19:04:30",,,,,41.9,-87.66,41.9,-87.7,"member" 869 | "B15822214E693BF7","electric_bike","2023-06-22 20:01:26","2023-06-22 20:05:38",,,,,41.93,-87.64,41.93,-87.65,"member" 870 | "0003D125DF36D7EF","electric_bike","2023-06-23 11:44:31","2023-06-23 11:51:30",,,,,41.94,-87.65,41.93,-87.64,"member" 871 | "CF39609A22140F9F","electric_bike","2023-06-23 17:56:51","2023-06-23 18:12:52",,,,,41.89,-87.67,41.89,-87.67,"member" 872 | "425B854F42835415","electric_bike","2023-06-22 20:04:18","2023-06-22 20:17:05",,,,,41.94,-87.66,41.93,-87.64,"member" 873 | "9E1DC42737599EA8","electric_bike","2023-06-22 19:43:16","2023-06-22 19:47:44",,,,,41.95,-87.66,41.94,-87.66,"member" 874 | "1EAAB305FFF49583","electric_bike","2023-06-23 19:02:14","2023-06-23 19:19:48",,,,,41.91,-87.64,41.9,-87.69,"member" 875 | "3BEE664173152220","electric_bike","2023-06-22 22:13:42","2023-06-22 22:21:06",,,,,41.95,-87.66,41.93,-87.65,"member" 876 | "0841CEC74CC1114C","electric_bike","2023-06-22 19:56:35","2023-06-22 19:57:12",,,,,41.93,-87.65,41.93,-87.65,"member" 877 | "1AE0A89246D05AF9","electric_bike","2023-06-18 15:26:20","2023-06-18 15:49:23",,,,,41.95,-87.65,41.92,-87.69,"member" 878 | "0AE698CD3FDCEDEA","electric_bike","2023-06-16 10:31:19","2023-06-16 10:42:22",,,,,41.96,-87.67,41.94,-87.67,"member" 879 | "B417621DECC68674","electric_bike","2023-06-16 15:41:38","2023-06-16 15:41:48",,,,,42.0,-87.67,42.0,-87.67,"member" 880 | "1C021D33A741BB76","electric_bike","2023-06-16 15:24:40","2023-06-16 15:27:12",,,,,42.0,-87.67,42.0,-87.67,"member" 881 | "2C3D72874956F089","electric_bike","2023-06-16 16:29:41","2023-06-16 17:08:21",,,,,41.94,-87.67,42.01,-87.67,"member" 882 | "799B5EEFEF2F6B81","electric_bike","2023-06-16 15:48:58","2023-06-16 15:55:04",,,,,41.88,-87.64,41.89,-87.64,"member" 883 | "17873754EA815083","electric_bike","2023-06-16 08:07:30","2023-06-16 08:07:32",,,,,41.94,-87.65,41.94,-87.65,"member" 884 | "5D1AA14F3492419C","electric_bike","2023-06-16 08:08:23","2023-06-16 10:39:41",,,,,41.94,-87.65,41.99,-87.66,"member" 885 | "A238ED71AD458345","electric_bike","2023-06-16 18:50:09","2023-06-16 19:14:06",,,,,41.97,-87.72,41.92,-87.69,"member" 886 | "2AE45D58017B7BE9","electric_bike","2023-06-16 16:48:29","2023-06-16 17:06:04",,,,,41.91,-87.65,41.9,-87.7,"member" 887 | "CD8DA75D70D0D23A","electric_bike","2023-06-19 12:47:03","2023-06-19 12:54:15",,,,,41.93,-87.65,41.92,-87.65,"member" 888 | "A21D6DDEF4176F38","electric_bike","2023-06-19 18:20:03","2023-06-19 18:22:17",,,,,41.89,-87.63,41.89,-87.63,"member" 889 | "3670220E9CD6B423","electric_bike","2023-06-22 08:33:11","2023-06-22 08:38:49",,,,,41.88,-87.66,41.88,-87.64,"member" 890 | "8A65C8BD57758D7D","electric_bike","2023-06-30 09:13:40","2023-06-30 09:14:09",,,,,41.83,-87.68,41.83,-87.68,"member" 891 | "DACEB12B600117FE","electric_bike","2023-06-25 12:46:23","2023-06-25 12:55:25",,,,,41.89,-87.63,41.91,-87.65,"member" 892 | "EAF3D94EB2129575","electric_bike","2023-06-10 11:04:30","2023-06-10 11:12:07",,,,,41.91,-87.64,41.9,-87.64,"member" 893 | "6AB77069990FC9F9","electric_bike","2023-06-10 17:07:23","2023-06-10 17:20:40",,,,,41.92,-87.66,41.95,-87.66,"member" 894 | "FF5E5D42EF86256C","electric_bike","2023-06-21 21:17:19","2023-06-21 21:23:46",,,,,41.95,-87.66,41.94,-87.64,"member" 895 | "745CBDC1BE7506C2","electric_bike","2023-06-21 19:53:20","2023-06-21 20:01:48",,,,,41.94,-87.64,41.92,-87.63,"member" 896 | "6C486C1C4A26268F","electric_bike","2023-06-25 12:43:02","2023-06-25 12:46:13",,,,,41.87,-87.62,41.87,-87.63,"member" 897 | "CB668F75258A9C06","electric_bike","2023-06-25 12:37:59","2023-06-25 12:49:16",,,,,41.91,-87.64,41.91,-87.66,"member" 898 | "2EECABE0F31F50CC","electric_bike","2023-06-25 13:11:47","2023-06-25 13:19:58",,,,,41.91,-87.66,41.91,-87.64,"member" 899 | "A5FAD59F7829DC64","electric_bike","2023-06-14 08:02:24","2023-06-14 08:13:35",,,,,41.88,-87.65,41.89,-87.63,"member" 900 | "B05DF055883BB619","electric_bike","2023-06-14 16:38:44","2023-06-14 16:43:41",,,,,41.89,-87.64,41.9,-87.64,"member" 901 | "D2053967F2CB55B3","electric_bike","2023-06-23 16:45:39","2023-06-23 16:50:05",,,,,41.93,-87.64,41.93,-87.65,"member" 902 | "304D7043C9C72ED3","electric_bike","2023-06-23 18:22:35","2023-06-23 18:27:44",,,,,41.96,-87.65,41.96,-87.64,"member" 903 | "548E96A70A44E0FC","electric_bike","2023-06-23 16:42:03","2023-06-23 16:49:03",,,,,41.96,-87.65,41.96,-87.65,"member" 904 | "8889E88F7F069810","electric_bike","2023-06-22 21:34:34","2023-06-22 21:40:15",,,,,41.94,-87.65,41.96,-87.65,"member" 905 | "72944C353E4E42B9","electric_bike","2023-06-23 07:02:43","2023-06-23 07:25:11",,,,,41.96,-87.65,41.96,-87.65,"member" 906 | "58CCC7EF4AE85162","electric_bike","2023-06-11 08:36:21","2023-06-11 08:54:06",,,,,41.94,-87.72,41.97,-87.68,"member" 907 | "61CDF59994585DE8","electric_bike","2023-06-10 21:49:31","2023-06-10 22:29:39",,,,,41.95,-87.66,41.92,-87.69,"member" 908 | "CE8751A67525CBCE","electric_bike","2023-06-04 14:54:28","2023-06-04 15:00:48",,,,,41.93,-87.66,41.94,-87.66,"member" 909 | "3E929F7E0AD819E5","electric_bike","2023-06-21 19:23:26","2023-06-21 19:42:10",,,,,41.95,-87.66,41.97,-87.64,"member" 910 | "128258ADA7DADD68","electric_bike","2023-06-28 21:48:00","2023-06-28 21:59:30",,,,,41.95,-87.65,41.92,-87.65,"member" 911 | "C96E492CFA473832","electric_bike","2023-06-29 13:34:47","2023-06-29 13:49:01",,,,,41.88,-87.64,41.92,-87.65,"member" 912 | "B6D982447CDEA8BE","electric_bike","2023-06-22 00:10:12","2023-06-22 00:16:50",,,,,41.93,-87.65,41.94,-87.65,"member" 913 | "4905E7D9F069E3FA","electric_bike","2023-06-22 13:02:20","2023-06-22 13:02:45",,,,,41.91,-87.64,41.91,-87.64,"member" 914 | "6D6C6720DE3C34BC","electric_bike","2023-06-30 22:58:37","2023-06-30 23:18:37",,,,,41.85,-87.68,41.85,-87.65,"member" 915 | "603635D8951F5DAA","electric_bike","2023-06-10 15:58:05","2023-06-10 16:07:40",,,,,41.88,-87.65,41.9,-87.63,"member" 916 | "C049300EDDD8EA6C","electric_bike","2023-06-12 19:04:40","2023-06-12 19:18:35",,,,,41.88,-87.62,41.91,-87.63,"member" 917 | "5F625CE5D88231EB","electric_bike","2023-06-12 17:21:41","2023-06-12 17:43:13",,,,,41.88,-87.62,41.93,-87.65,"member" 918 | "FF3E0E8356DE91BB","electric_bike","2023-06-12 17:48:34","2023-06-12 18:06:13",,,,,41.91,-87.71,41.93,-87.69,"member" 919 | "4FBECB72D526B61F","electric_bike","2023-06-12 17:53:26","2023-06-12 18:10:36",,,,,41.94,-87.67,41.91,-87.63,"member" 920 | "697EF60D48C34B74","electric_bike","2023-06-23 18:36:06","2023-06-23 18:50:01",,,,,41.91,-87.72,41.93,-87.71,"member" 921 | "5963E1195202B425","electric_bike","2023-06-21 06:32:15","2023-06-21 06:36:01",,,,,41.94,-87.64,41.93,-87.64,"member" 922 | "CDDAFFDDD18D6E53","electric_bike","2023-06-16 23:05:51","2023-06-16 23:42:15",,,,,41.86,-87.61,41.88,-87.65,"member" 923 | "6568AB316211D385","electric_bike","2023-06-03 16:41:21","2023-06-03 16:51:13",,,,,41.98,-87.67,41.96,-87.67,"member" 924 | "675405D7477DCEBD","electric_bike","2023-06-03 13:24:51","2023-06-03 13:34:36",,,,,41.96,-87.67,41.98,-87.68,"member" 925 | "4CE7432659F81594","electric_bike","2023-06-23 17:06:35","2023-06-23 17:37:08",,,,,41.89,-87.61,41.89,-87.61,"member" 926 | "86EA4DA4E82BD73A","electric_bike","2023-06-21 16:57:04","2023-06-21 17:18:18",,,,,41.88,-87.64,41.91,-87.62,"member" 927 | "E09CD3A05C651DFA","electric_bike","2023-06-21 18:33:00","2023-06-21 19:00:56",,,,,41.91,-87.62,41.88,-87.65,"member" 928 | "49B535D2F9397EB4","electric_bike","2023-06-21 08:34:58","2023-06-21 08:41:04",,,,,41.88,-87.65,41.88,-87.64,"member" 929 | "35875FA2E21B85B9","electric_bike","2023-06-06 17:59:36","2023-06-06 18:02:01",,,,,41.92,-87.65,41.92,-87.64,"member" 930 | "EFC9C98D8659A014","electric_bike","2023-06-12 08:37:37","2023-06-12 08:56:31",,,,,41.94,-87.72,41.97,-87.68,"member" 931 | "55B0F3B73F86D0F3","electric_bike","2023-06-12 13:03:20","2023-06-12 13:29:52",,,,,41.96,-87.71,41.93,-87.68,"member" 932 | "74B53A77D21AB12C","electric_bike","2023-06-12 14:32:18","2023-06-12 14:49:14",,,,,41.91,-87.68,41.93,-87.68,"member" 933 | "58C8ABDFADB17E57","electric_bike","2023-06-12 10:28:36","2023-06-12 10:43:18",,,,,41.97,-87.67,41.96,-87.71,"member" 934 | "C1E0DD86D42ED922","electric_bike","2023-06-12 13:44:45","2023-06-12 14:04:08",,,,,41.93,-87.68,41.91,-87.68,"member" 935 | "A33DBD0E48D19E71","electric_bike","2023-06-12 09:59:25","2023-06-12 10:14:31",,,,,41.96,-87.65,41.97,-87.67,"member" 936 | "EDE360941073D3BC","electric_bike","2023-06-09 20:47:09","2023-06-09 21:05:43",,,,,41.91,-87.62,41.89,-87.62,"member" 937 | "E8325943F3DA865C","electric_bike","2023-06-22 08:52:25","2023-06-22 08:56:24",,,,,41.89,-87.62,41.89,-87.61,"member" 938 | "620322C0B4688942","electric_bike","2023-06-21 19:49:14","2023-06-21 21:09:04",,,,,41.93,-87.74,41.86,-87.68,"member" 939 | "46E381B83533A0A8","electric_bike","2023-06-15 18:40:56","2023-06-15 19:05:43",,,,,42.0,-87.7,41.95,-87.7,"member" 940 | "49E139C15F0C361C","electric_bike","2023-06-20 08:41:53","2023-06-20 09:02:02",,,,,41.94,-87.72,41.97,-87.68,"member" 941 | "135F623F6A384012","electric_bike","2023-06-20 10:24:32","2023-06-20 10:43:58",,,,,41.93,-87.66,41.9,-87.62,"member" 942 | "7E066C74D7C58B06","electric_bike","2023-06-17 17:56:36","2023-06-17 18:13:30","Campbell Ave & Montrose Ave","15623",,,41.96155433333333,-87.69110716666667,41.95,-87.65,"member" 943 | "419FE8EE47719D8E","electric_bike","2023-06-24 12:09:49","2023-06-24 12:28:48",,,,,41.91,-87.63,41.95,-87.66,"member" 944 | "2AAF13FFA808FEDB","electric_bike","2023-06-23 12:02:38","2023-06-23 12:19:29",,,,,41.88,-87.62,41.9,-87.63,"member" 945 | "34C7804583F37CBA","electric_bike","2023-06-23 09:08:33","2023-06-23 09:22:49",,,,,41.91,-87.63,41.88,-87.62,"member" 946 | "96411CAF0618A743","electric_bike","2023-06-23 15:06:53","2023-06-23 15:16:09",,,,,41.89,-87.61,41.89,-87.61,"member" 947 | "52845DF5F9DE49FF","electric_bike","2023-06-01 16:15:28","2023-06-01 16:32:53",,,"California Ave & Division St","13256",41.95,-87.71,41.903029,-87.697474,"member" 948 | "EA237955E734F1E3","electric_bike","2023-06-01 12:06:52","2023-06-01 12:10:48",,,,,41.91,-87.69,41.9,-87.7,"member" 949 | "958318166D58A573","electric_bike","2023-06-01 12:23:34","2023-06-01 12:27:05",,,,,41.9,-87.7,41.9,-87.69,"member" 950 | "AD1B6AAACB2901CC","electric_bike","2023-06-01 14:59:17","2023-06-01 15:11:39",,,,,41.77,-87.58,41.77,-87.63,"member" 951 | "49CEEB771EBEF8AA","electric_bike","2023-06-30 11:58:12","2023-06-30 12:01:23",,,,,41.95,-87.66,41.95,-87.65,"member" 952 | "503990FB96D3D61C","electric_bike","2023-06-20 16:45:35","2023-06-20 16:57:52",,,,,41.97,-87.69,41.95,-87.72,"member" 953 | "084BAFC97028894C","electric_bike","2023-06-19 11:49:44","2023-06-19 12:03:03",,,,,41.88,-87.62,41.9,-87.62,"member" 954 | "0CEF12D850F375E8","electric_bike","2023-06-19 18:01:54","2023-06-19 18:15:45",,,"Wood St & Chicago Ave","637",41.93,-87.68,41.895634,-87.672069,"member" 955 | "9638684AFC2CFBBF","electric_bike","2023-06-19 18:30:52","2023-06-19 18:37:45","Wood St & Chicago Ave","637",,,41.895640666666665,-87.67226933333333,41.91,-87.67,"member" 956 | "F4BA271D35E0838F","electric_bike","2023-06-19 14:52:26","2023-06-19 15:02:18",,,,,41.9,-87.63,41.92,-87.64,"member" 957 | "E18D7F418D1720F8","electric_bike","2023-06-09 22:48:43","2023-06-09 22:49:36",,,,,41.94,-87.65,41.94,-87.65,"member" 958 | "DFFCE7BB4D354B31","electric_bike","2023-06-10 12:08:56","2023-06-10 12:16:22",,,,,41.93,-87.64,41.93,-87.65,"member" 959 | "6031626B26131CD0","electric_bike","2023-06-23 06:53:05","2023-06-23 06:54:39",,,,,41.95,-87.64,41.95,-87.64,"member" 960 | "C3AEAB97753AD4D4","electric_bike","2023-06-02 11:05:11","2023-06-02 11:07:00",,,,,41.9,-87.63,41.9,-87.63,"member" 961 | "5AAC9A006DFBC84F","electric_bike","2023-06-06 20:56:28","2023-06-06 21:06:28",,,,,41.92,-87.63,41.89,-87.63,"member" 962 | "7936CC1D00C00E39","electric_bike","2023-06-06 21:15:07","2023-06-06 21:26:38",,,,,41.9,-87.62,41.93,-87.64,"member" 963 | "06C6A543926176A6","electric_bike","2023-06-13 20:31:00","2023-06-13 20:34:58",,,,,41.95,-87.67,41.95,-87.66,"member" 964 | "0BC0C84E385A47EC","electric_bike","2023-06-23 22:57:59","2023-06-23 23:06:46",,,,,41.91,-87.69,41.9,-87.7,"member" 965 | "3B87EA72719802BF","electric_bike","2023-06-19 12:05:39","2023-06-19 12:09:14",,,,,41.94,-87.64,41.94,-87.65,"member" 966 | "78A596CEEE525A09","electric_bike","2023-06-19 17:36:49","2023-06-19 17:45:21",,,,,41.92,-87.71,41.92,-87.68,"member" 967 | "21647CCADBA6B95B","electric_bike","2023-06-02 17:03:05","2023-06-02 17:38:32",,,,,41.87,-87.63,41.93,-87.63,"member" 968 | "2C39A1A6C32B7E06","electric_bike","2023-06-02 16:03:52","2023-06-02 16:19:43",,,,,41.93,-87.68,41.92,-87.7,"member" 969 | "F2623BD01E005294","electric_bike","2023-06-04 10:56:44","2023-06-04 11:46:27",,,,,41.92,-87.71,41.89,-87.61,"member" 970 | "F8D35B6233DB9B9F","electric_bike","2023-06-17 20:01:48","2023-06-17 20:10:11",,,,,41.8,-87.59,41.8,-87.58,"member" 971 | "60ADAAB26EC26279","electric_bike","2023-06-18 16:30:29","2023-06-18 16:37:31",,,,,41.95,-87.65,41.94,-87.64,"member" 972 | "A7C7552AD5CC495E","electric_bike","2023-06-09 13:45:35","2023-06-09 14:44:57",,,,,41.94,-87.64,41.89,-87.63,"casual" 973 | "3D9648EBF44F0065","electric_bike","2023-06-25 12:55:06","2023-06-25 12:55:09",,,,,41.9,-87.63,41.9,-87.63,"member" 974 | "DCA4A2BA67C6351B","electric_bike","2023-06-25 12:54:45","2023-06-25 12:54:52",,,,,41.9,-87.63,41.9,-87.63,"member" 975 | "7AB27E16F496EA80","electric_bike","2023-06-25 16:38:12","2023-06-25 16:50:00",,,,,41.95,-87.65,41.96,-87.69,"member" 976 | "BD1D8B2F61B639FA","electric_bike","2023-06-24 20:03:30","2023-06-24 20:03:52",,,,,41.9,-87.68,41.9,-87.68,"member" 977 | "17B35C38AB75DDA6","electric_bike","2023-06-12 19:56:11","2023-06-12 19:58:58",,,,,41.92,-87.66,41.92,-87.65,"member" 978 | "AED5B5FD471765D6","electric_bike","2023-06-18 17:28:19","2023-06-18 17:46:38",,,,,41.93,-87.7,41.94,-87.65,"member" 979 | "1758D7F2EBFEFC3A","electric_bike","2023-06-22 18:03:58","2023-06-22 18:17:14",,,,,41.94,-87.69,41.93,-87.65,"member" 980 | "A050684773DE95FD","electric_bike","2023-06-22 19:04:02","2023-06-22 19:09:52",,,,,41.93,-87.65,41.95,-87.66,"member" 981 | "385F532C42A9B0AB","electric_bike","2023-06-22 14:40:33","2023-06-22 14:56:04",,,,,41.91,-87.64,41.91,-87.64,"member" 982 | "35F3936E481BBE43","electric_bike","2023-06-22 19:38:43","2023-06-22 19:45:24",,,,,41.91,-87.63,41.92,-87.65,"member" 983 | "5FDAF0E4DFDD6A7E","electric_bike","2023-06-30 17:28:45","2023-06-30 17:41:13",,,,,41.99,-87.67,41.98,-87.65,"member" 984 | "1E1BA8971F280144","classic_bike","2023-06-30 18:05:47","2023-06-30 18:22:26","Cottage Grove Ave & 51st St","TA1309000067","Cottage Grove Ave & 51st St","TA1309000067",41.803038,-87.606615,41.803038,-87.606615,"member" 985 | "AEF740557DBAF5FB","electric_bike","2023-06-30 17:22:11","2023-06-30 17:30:13",,,,,41.94,-87.64,41.95,-87.65,"member" 986 | "BF268C8701A5C357","electric_bike","2023-06-25 16:12:30","2023-06-25 16:24:24",,,,,41.94,-87.65,41.94,-87.67,"member" 987 | "19CC4BD815ED9F9C","electric_bike","2023-06-25 13:50:59","2023-06-25 13:57:20",,,,,41.92,-87.65,41.91,-87.65,"member" 988 | "6744A8A4F8E29978","electric_bike","2023-06-25 11:31:06","2023-06-25 11:49:32",,,,,41.89,-87.63,41.91,-87.67,"member" 989 | "044563544082686B","electric_bike","2023-06-15 19:10:16","2023-06-15 19:26:55",,,,,41.91,-87.62,41.95,-87.65,"member" 990 | "45AB3FF3322CCF91","electric_bike","2023-06-15 19:00:06","2023-06-15 19:02:50",,,,,41.94,-87.65,41.95,-87.65,"member" 991 | "9706F067CB684910","electric_bike","2023-06-15 20:20:35","2023-06-15 20:30:55",,,,,42.01,-87.66,42.0,-87.67,"member" 992 | "2004439C75A26ED7","electric_bike","2023-06-03 21:31:01","2023-06-03 21:56:08",,,,,41.94,-87.64,41.94,-87.64,"member" 993 | "C7E19F4C9D05C906","electric_bike","2023-06-18 08:26:38","2023-06-18 08:28:01",,,,,41.97,-87.71,41.97,-87.72,"member" 994 | "51F75F9C0AAD2AD7","electric_bike","2023-06-18 08:43:21","2023-06-18 08:48:42",,,,,41.97,-87.73,41.97,-87.73,"member" 995 | "AD2AEDF27E9365A3","electric_bike","2023-06-18 11:36:41","2023-06-18 12:03:20",,,,,41.97,-87.73,41.91,-87.71,"member" 996 | "3B780A995A0219E3","electric_bike","2023-06-18 08:32:16","2023-06-18 08:39:34",,,,,41.97,-87.72,41.97,-87.73,"member" 997 | "73EAB52DC692D9A1","electric_bike","2023-06-18 01:07:38","2023-06-18 01:14:07",,,,,41.9,-87.67,41.92,-87.68,"member" 998 | "EAC18E1F19E5A05B","electric_bike","2023-06-17 20:24:58","2023-06-17 20:25:08",,,,,41.92,-87.68,41.92,-87.68,"member" 999 | "DB04F0278D4E085B","electric_bike","2023-06-18 17:47:30","2023-06-18 18:01:14","California Ave & Milwaukee Ave","13084",,,41.9227085,-87.69716033333333,41.9,-87.66,"member" 1000 | "E113CD59DB0D940A","electric_bike","2023-06-29 10:24:37","2023-06-29 10:30:05",,,,,41.94,-87.66,41.95,-87.66,"member" -------------------------------------------------------------------------------- /Exercises/Exercise-10/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3.9" 2 | services: 3 | test: 4 | image: "exercise-10" 5 | volumes: 6 | - .:/app 7 | command: python3 -m pytest 8 | run: 9 | image: "exercise-10" 10 | volumes: 11 | - .:/app 12 | command: /spark/bin/spark-submit main.py -------------------------------------------------------------------------------- /Exercises/Exercise-10/main.py: -------------------------------------------------------------------------------- 1 | from pyspark.sql import SparkSession 2 | from pyspark.sql.functions import ( 3 | col, 4 | to_timestamp, 5 | unix_timestamp, 6 | sum as _sum, 7 | date_format, 8 | ) 9 | from pyspark.sql.types import ( 10 | StructType, 11 | StructField, 12 | StringType, 13 | DoubleType, 14 | TimestampType, 15 | ) 16 | 17 | # Create a SparkSession 18 | spark = SparkSession.builder.appName("BikeRideDuration").getOrCreate() 19 | 20 | # Define the schema based on the provided CSV structure 21 | schema = StructType([ 22 | StructField("ride_id", StringType(), True), 23 | StructField("rideable_type", StringType(), True), 24 | StructField("started_at", StringType(), True), 25 | StructField("ended_at", StringType(), True), 26 | StructField("start_station_name", StringType(), True), 27 | StructField("start_station_id", StringType(), True), 28 | StructField("end_station_name", StringType(), True), 29 | StructField("end_station_id", StringType(), True), 30 | StructField("start_lat", DoubleType(), True), 31 | StructField("start_lng", DoubleType(), True), 32 | StructField("end_lat", DoubleType(), True), 33 | StructField("end_lng", DoubleType(), True), 34 | StructField("member_casual", StringType(), True), 35 | ]) 36 | 37 | input_csv_path = "data/202306-divvy-tripdata.csv" 38 | 39 | df = spark.read.csv( 40 | input_csv_path, 41 | header=True, 42 | schema=schema, 43 | mode="DROPMALFORMED" 44 | ) 45 | 46 | df = df.withColumn( 47 | "started_at", to_timestamp(col("started_at"), "yyyy-MM-dd HH:mm:ss") 48 | ).withColumn( 49 | "ended_at", to_timestamp(col("ended_at"), "yyyy-MM-dd HH:mm:ss") 50 | ) 51 | 52 | df = df.withColumn( 53 | "duration_seconds", 54 | unix_timestamp(col("ended_at")) - unix_timestamp(col("started_at")) 55 | ) 56 | 57 | df = df.withColumn( 58 | "date", date_format(col("started_at"), "yyyy-MM-dd") 59 | ) 60 | 61 | daily_durations = df.groupBy("date").agg( 62 | _sum("duration_seconds").alias("total_duration_seconds") 63 | ) 64 | 65 | output_parquet_path = "results/output_file.parquet" 66 | daily_durations.write.mode("overwrite").parquet(output_parquet_path) 67 | 68 | 69 | -------------------------------------------------------------------------------- /Exercises/Exercise-10/requirements.txt: -------------------------------------------------------------------------------- 1 | pytest 2 | great-expectations -------------------------------------------------------------------------------- /Exercises/Exercise-2/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:latest 2 | 3 | WORKDIR app 4 | COPY . /app 5 | 6 | RUN python3 -m pip install -r requirements.txt -------------------------------------------------------------------------------- /Exercises/Exercise-2/README.md: -------------------------------------------------------------------------------- 1 | ## Exercise #2 - WebScraping and File Downloading with Python. 2 | 3 | In this second exercise you will practice your Python skills again, 4 | we will extend upon the idea of downloading files from `HTTP` sources 5 | with Python, but add a twist. 6 | 7 | You will have to "web scrap" a `HTML` page looking for a date, and identifying 8 | the correct file to build a URL with which you can download said file. 9 | 10 | 11 | #### Setup 12 | 1. Change directories at the command line 13 | to be inside the `Exercise-2` folder `cd Exercises/Exercise-2` 14 | 15 | 2. Run `docker build --tag=exercise-2 .` to build the `Docker` image. 16 | 17 | 3. There is a file called `main.py` in the `Exercise-2` directory, this 18 | is where you `Python` code to complete the exercise should go. 19 | 20 | 4. Once you have finished the project or want to test run your code, 21 | run the following command `docker-compose up run` from inside the `Exercises/Exercise-2` directory 22 | 23 | #### Problems Statement 24 | You need to download a file of weather data from a government website. 25 | files that are sitting at the following specified location. 26 | 27 | https://www.ncei.noaa.gov/data/local-climatological-data/access/2021/ 28 | 29 | You are looking for the file that was `Last Modified` on `2024-01-19 10:27 `, you 30 | can't cheat and lookup the file number yourself. You must use Python to scrape 31 | this webpage, finding the corresponding file-name for this timestamp, `2024-01-19 10:27 ` 32 | 33 | Once you have obtained the correct file, and downloaded it, you must load the file 34 | into `Pandas` and find the record(s) with the highest `HourlyDryBulbTemperature`. 35 | Print these record(s) to the command line. 36 | 37 | Generally, your script should do the following ... 38 | 1. Attempt to web scrap/pull down the contents of `https://www.ncei.noaa.gov/data/local-climatological-data/access/2021/` 39 | 2. Analyze it's structure, determine how to find the corresponding file to `2024-01-19 10:27 ` using Python. 40 | 3. Build the `URL` required to download this file, and write the file locally. 41 | 4. Open the file with `Pandas` and find the records with the highest `HourlyDryBulbTemperature`. 42 | 5. Print this to stdout/command line/terminal. 43 | -------------------------------------------------------------------------------- /Exercises/Exercise-2/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3.9" 2 | services: 3 | test: 4 | image: "exercise-2" 5 | volumes: 6 | - .:/app 7 | command: python3 -m pytest 8 | run: 9 | image: "exercise-2" 10 | volumes: 11 | - .:/app 12 | command: python3 main.py -------------------------------------------------------------------------------- /Exercises/Exercise-2/main.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import pandas 3 | 4 | 5 | def main(): 6 | # your code here 7 | pass 8 | 9 | 10 | if __name__ == "__main__": 11 | main() 12 | -------------------------------------------------------------------------------- /Exercises/Exercise-2/requirements.txt: -------------------------------------------------------------------------------- 1 | requests==2.27.1 2 | pandas==2.2.3 -------------------------------------------------------------------------------- /Exercises/Exercise-3/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:latest 2 | 3 | WORKDIR app 4 | COPY . /app 5 | 6 | RUN python3 -m pip install -r requirements.txt -------------------------------------------------------------------------------- /Exercises/Exercise-3/README.md: -------------------------------------------------------------------------------- 1 | ## Exercise #3 - Boto3 AWS + s3 + Python. 2 | 3 | In this third exercise you will practice your Python skills again, 4 | we will extend upon the idea of downloading files and start by 5 | retrieving files from an `s3` cloud bucket on `aws` in a multi-step process. 6 | 7 | Working with the `Python` package `boto3` to interact with `aws` is very 8 | common, and this will ensure you get an introduction to that topic. 9 | 10 | 11 | #### Setup 12 | 1. Change directories at the command line 13 | to be inside the `Exercise-3` folder `cd Exercises/Exercise-3` 14 | 15 | 2. Run `docker build --tag=exercise-3 .` to build the `Docker` image. 16 | 17 | 3. There is a file called `main.py` in the `Exercise-3` directory, this 18 | is where you `Python` code to complete the exercise should go. 19 | 20 | 4. Once you have finished the project or want to test run your code, 21 | run the following command `docker-compose up run` from inside the `Exercises/Exercise-3` directory 22 | 23 | #### Problems Statement 24 | AWS puts out some "common crawl" web data, available on `s3` with no special 25 | permissions needed. http://commoncrawl.org/the-data/get-started/ 26 | 27 | Your task is two-fold, download a `.gz` file located in s3 bucket `commoncrawl` 28 | and key `crawl-data/CC-MAIN-2022-05/wet.paths.gz` using `boto3`. 29 | 30 | Once this file is downloaded, you must extract the file, open it, and 31 | download the file uri located on the first line using `boto3` again. Store the 32 | file locally and iterate through the lines of the file, printing each line to `stdout`. 33 | 34 | Generally, your script should do the following ... 35 | 1. `boto3` download the file from s3 located at bucket `commoncrawl` and key `crawl-data/CC-MAIN-2022-05/wet.paths.gz` 36 | 2. Extract and open this file with Python (hint, it's just text). 37 | 3. Pull the `uri` from the first line of this file. 38 | 4. Again, download the that `uri` file from `s3` using `boto3` again. 39 | 5. Print each line, iterate to stdout/command line/terminal. 40 | 41 | Extra Credit: 42 | 43 | 1. DO NOT load the entire final file into memory before printing each line, 44 | stream the file. 45 | 46 | 2. DO NOT download the initial `gz` file onto disk, download, extract, and read it in memory. 47 | -------------------------------------------------------------------------------- /Exercises/Exercise-3/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3.9" 2 | services: 3 | test: 4 | image: "exercise-3" 5 | volumes: 6 | - .:/app 7 | command: python3 -m pytest 8 | run: 9 | image: "exercise-3" 10 | volumes: 11 | - .:/app 12 | command: python3 main.py -------------------------------------------------------------------------------- /Exercises/Exercise-3/main.py: -------------------------------------------------------------------------------- 1 | import boto3 2 | 3 | 4 | def main(): 5 | # your code here 6 | pass 7 | 8 | 9 | if __name__ == "__main__": 10 | main() 11 | -------------------------------------------------------------------------------- /Exercises/Exercise-3/requirements.txt: -------------------------------------------------------------------------------- 1 | boto3==1.21.2 -------------------------------------------------------------------------------- /Exercises/Exercise-4/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:latest 2 | 3 | WORKDIR app 4 | COPY . /app 5 | 6 | RUN python3 -m pip install -r requirements.txt -------------------------------------------------------------------------------- /Exercises/Exercise-4/README.md: -------------------------------------------------------------------------------- 1 | ## Exercise #4 - Convert JSON to CSV + Ragged Directories. 2 | 3 | In this fourth exercise you will practice your Python skills again, 4 | we will be searching a ragged directory structure, trying to find `json` files. 5 | When `json` files are found, we will then convert them to `csv` files. 6 | 7 | We can work with three nice `Python` packages, `glob`, `json`, and `csv`. 8 | 9 | 10 | #### Setup 11 | 1. Change directories at the command line 12 | to be inside the `Exercise-4` folder `cd Exercises/Exercise-4` 13 | 14 | 2. Run `docker build --tag=exercise-4 .` to build the `Docker` image. 15 | 16 | 3. There is a file called `main.py` in the `Exercise-4` directory, this 17 | is where you `Python` code to complete the exercise should go. 18 | 19 | 4. Once you have finished the project or want to test run your code, 20 | run the following command `docker-compose up run` from inside the `Exercises/Exercise-4` directory 21 | 22 | #### Problems Statement 23 | There is a folder called `data` in this current directory, `Exercises/Exercise-4`. There are also 24 | `json` files located at various spots inside this directory structure. 25 | 26 | Your task is two use `Python` to find all the `json` files located in the `data` folder. 27 | Once you find them all, read them with `Python` and convert them to `csv` files, to do this 28 | you will have to flatten out some of the nested `json` data structures. 29 | 30 | For example there is a `{"type":"Point","coordinates":[-99.9,16.88333]}` that must flattened. 31 | 32 | Generally, your script should do the following ... 33 | 1. Crawl the `data` directory with `Python` and identify all the `json` files. 34 | 2. Load all the `json` files. 35 | 3. Flatten out the `json` data structure. 36 | 4. Write the results to a `csv` file, one for one with the json file, including the header names. -------------------------------------------------------------------------------- /Exercises/Exercise-4/data/enough_already/file-4.json: -------------------------------------------------------------------------------- 1 | {"name":"Acapulco","id":"10","nametype":"Valid","recclass":"Acapulcoite","mass":"1914","fall":"Fell","year":"1976-01-01T00:00:00.000","reclat":"16.883330","reclong":"-99.900000","geolocation":{"type":"Point","coordinates":[-99.9,16.88333]}} -------------------------------------------------------------------------------- /Exercises/Exercise-4/data/file-1.json: -------------------------------------------------------------------------------- 1 | {"name":"Aachen","id":"1","nametype":"Valid","recclass":"L5","mass":"21","fall":"Fell","year":"1880-01-01T00:00:00.000","reclat":"50.775000","reclong":"6.083330","geolocation":{"type":"Point","coordinates":[6.08333,50.775]}} -------------------------------------------------------------------------------- /Exercises/Exercise-4/data/other_folder/file-3.json: -------------------------------------------------------------------------------- 1 | {"name":"Abee","id":"6","nametype":"Valid","recclass":"EH4","mass":"107000","fall":"Fell","year":"1952-01-01T00:00:00.000","reclat":"54.216670","reclong":"-113.000000","geolocation":{"type":"Point","coordinates":[-113,54.21667]}} -------------------------------------------------------------------------------- /Exercises/Exercise-4/data/some_folder/other_folder/file-2.json: -------------------------------------------------------------------------------- 1 | {"name":"Aarhus","id":"2","nametype":"Valid","recclass":"H6","mass":"720","fall":"Fell","year":"1951-01-01T00:00:00.000","reclat":"56.183330","reclong":"10.233330","geolocation":{"type":"Point","coordinates":[10.23333,56.18333]}} -------------------------------------------------------------------------------- /Exercises/Exercise-4/data/some_folder/test.csv: -------------------------------------------------------------------------------- 1 | not a json file | data point 2 | 1, 2 3 | 4, 5 4 | 5, 7 -------------------------------------------------------------------------------- /Exercises/Exercise-4/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3.9" 2 | services: 3 | test: 4 | image: "exercise-4" 5 | volumes: 6 | - .:/app 7 | command: python3 -m pytest 8 | run: 9 | image: "exercise-4" 10 | volumes: 11 | - .:/app 12 | command: python3 main.py -------------------------------------------------------------------------------- /Exercises/Exercise-4/main.py: -------------------------------------------------------------------------------- 1 | import boto3 2 | 3 | 4 | def main(): 5 | # your code here 6 | pass 7 | 8 | 9 | if __name__ == "__main__": 10 | main() 11 | -------------------------------------------------------------------------------- /Exercises/Exercise-4/requirements.txt: -------------------------------------------------------------------------------- 1 | requests==2.27.1 -------------------------------------------------------------------------------- /Exercises/Exercise-5/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:latest 2 | 3 | WORKDIR app 4 | COPY . /app 5 | 6 | RUN python3 -m pip install -r requirements.txt -------------------------------------------------------------------------------- /Exercises/Exercise-5/README.md: -------------------------------------------------------------------------------- 1 | ## Exercise #5 - Data Modeling for Postgres + Python. 2 | 3 | In this fifth exercise you will work on a few different topics, 4 | data modeling, Python, and Postgres. These are common problems worked 5 | on in data engineering. 6 | 7 | #### Setup 8 | 1. Change directories at the command line 9 | to be inside the `Exercise-5` folder `cd Exercises/Exercise-5` 10 | 11 | 2. Run `docker build --tag=exercise-5 .` to build the `Docker` image. 12 | 13 | 3. There is a file called `main.py` in the `Exercise-5` directory, this 14 | is where you `Python` code to complete the exercise should go. 15 | 16 | 4. Once you have finished the project or want to test run your code, 17 | run the following command `docker-compose up run` from inside the `Exercises/Exercise-5` directory 18 | 19 | #### Problems Statement 20 | There is a folder called `data` in this current directory, `Exercises/Exercise-5`. There are also 21 | 3 `csv` files located in that folder. Open each one and examine it, the 22 | first task is to create a `sql` script with the `DDL` to hold 23 | a `CREATE` statement for each data file. Remember to think about data types. 24 | Also, this `CREATE` statements should include indexes for each table, as well 25 | as primary and foreign keys. 26 | 27 | After you have finished this `sql` scripts, we must connect to `Postgres` using the `Python` package 28 | called `psycopg2`. Once connected we will run our `sql` scripts against the database. 29 | 30 | Note: The default `main.py` script already has the Python connection configured to connect 31 | to the `Postgres` instance that is automatically spun up by `Docker` when you ran 32 | the `docker-compose up run` command (inside `Exercises/Exercise-5` directory). 33 | 34 | Finally, we will use `psycopg2` to insert the data in each `csv` file into the table you created. 35 | 36 | Generally, your script should do the following ... 37 | 1. Examine each `csv` file in `data` folder. Design a `CREATE` statement for each file. 38 | 2. Ensure you have indexes, primary and forgein keys. 39 | 3. Use `psycopg2` to connect to `Postgres` on `localhost` and the default `port`. 40 | 4. Create the tables against the database. 41 | 5. Ingest the `csv` files into the tables you created, also using `psycopg2`. 42 | -------------------------------------------------------------------------------- /Exercises/Exercise-5/data/accounts.csv: -------------------------------------------------------------------------------- 1 | customer_id, first_name, last_name, address_1, address_2, city, state, zip_code, join_date 2 | 4321, john, doe, 1532 East Main St., PO BOX 5, Middleton, Ohio, 50045, 2022/01/16 3 | 5677, jane, doe, 543 Oak Rd.,,BigTown, Iowa, 84432, 2021/05/07 -------------------------------------------------------------------------------- /Exercises/Exercise-5/data/products.csv: -------------------------------------------------------------------------------- 1 | product_id, product_code, product_description 2 | 345, 01, Widget Medium 3 | 241, 02, Widget Large -------------------------------------------------------------------------------- /Exercises/Exercise-5/data/transactions.csv: -------------------------------------------------------------------------------- 1 | transaction_id, transaction_date, product_id, product_code, product_description, quantity, account_id 2 | AS345-ASDF-31234-FDAAD-9345, 2022/06/01, 345, 01, Widget Medium, 5, 4321 3 | 9234A-JFDA-87654-BFAEA-0932, 2022/06/02, 241, 02, Widget Large, 1, 5677 -------------------------------------------------------------------------------- /Exercises/Exercise-5/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3.9" 2 | services: 3 | postgres: 4 | image: postgres:10.5 5 | restart: always 6 | environment: 7 | - POSTGRES_USER=postgres 8 | - POSTGRES_PASSWORD=postgres 9 | ports: 10 | - '5432:5432' 11 | volumes: 12 | - ./postgres-data:/var/lib/postgresql/data 13 | healthcheck: 14 | test: [ "CMD-SHELL", "pg_isready -U postgres" ] 15 | interval: 5s 16 | timeout: 5s 17 | retries: 5 18 | test: 19 | image: "exercise-5" 20 | volumes: 21 | - .:/app 22 | command: python3 -m pytest 23 | run: 24 | image: "exercise-5" 25 | depends_on: 26 | postgres: 27 | condition: service_healthy 28 | volumes: 29 | - .:/app 30 | command: python3 main.py 31 | -------------------------------------------------------------------------------- /Exercises/Exercise-5/main.py: -------------------------------------------------------------------------------- 1 | import psycopg2 2 | 3 | 4 | def main(): 5 | host = "postgres" 6 | database = "postgres" 7 | user = "postgres" 8 | pas = "postgres" 9 | conn = psycopg2.connect(host=host, database=database, user=user, password=pas) 10 | # your code here 11 | cur = conn.cursor() 12 | 13 | 14 | if __name__ == "__main__": 15 | main() 16 | -------------------------------------------------------------------------------- /Exercises/Exercise-5/requirements.txt: -------------------------------------------------------------------------------- 1 | psycopg2 -------------------------------------------------------------------------------- /Exercises/Exercise-6/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:18.04 2 | 3 | RUN apt-get update && \ 4 | apt-get install -y default-jdk scala wget vim software-properties-common python3.8 python3-pip curl unzip libpq-dev build-essential libssl-dev libffi-dev python3-dev && \ 5 | apt-get clean 6 | 7 | RUN wget https://archive.apache.org/dist/spark/spark-3.0.1/spark-3.0.1-bin-hadoop3.2.tgz && \ 8 | tar xvf spark-3.0.1-bin-hadoop3.2.tgz && \ 9 | mv spark-3.0.1-bin-hadoop3.2/ /usr/local/spark && \ 10 | ln -s /usr/local/spark spark && \ 11 | wget https://repo1.maven.org/maven2/com/amazonaws/aws-java-sdk-bundle/1.11.890/aws-java-sdk-bundle-1.11.890.jar && \ 12 | mv aws-java-sdk-bundle-1.11.890.jar /spark/jars && \ 13 | wget https://repo1.maven.org/maven2/org/apache/hadoop/hadoop-aws/3.2.0/hadoop-aws-3.2.0.jar && \ 14 | mv hadoop-aws-3.2.0.jar /spark/jars 15 | 16 | 17 | WORKDIR app 18 | COPY . /app 19 | 20 | RUN pip3 install markupsafe==1.1.1 cryptography==3.3.2 cython==0.29.21 numpy==1.18.5 && pip3 install -r requirements.txt 21 | 22 | ENV PYSPARK_PYTHON=python3 23 | ENV PYSPARK_SUBMIT_ARGS='--packages io.delta:delta-core_2.12:0.8.0 pyspark-shell' 24 | -------------------------------------------------------------------------------- /Exercises/Exercise-6/README.md: -------------------------------------------------------------------------------- 1 | ## Exercise 6 - Ingestion and Aggregation with PySpark. 2 | 3 | Here on our sixth exercise we will step it up a notch and start to use some 4 | more common Big Data tools, in this case Spark and PySpark. 5 | 6 | #### Setup 7 | 1. Change directories at the command line 8 | to be inside the `Exercise-6` folder `cd Exercises/Exercise-6` 9 | 10 | 2. Run `docker build --tag=exercise-6 .` to build the `Docker` image. 11 | 12 | 3. There is a file called `main.py` in the `Exercise-6` directory, this 13 | is where you `Python` code to complete the exercise should go. 14 | 15 | 4. Once you have finished the project or want to test run your code, 16 | run the following command `docker-compose up run` from inside the `Exercises/Exercise-6` directory 17 | 18 | #### Problems Statement 19 | There is a folder called `data` in this current directory, `Exercises/Exercise-6`. Inside this 20 | folder there are two `.zip`'d `csv` files, they should remain zipped for the duration of this 21 | exercise. 22 | 23 | Generally the files look like this ... 24 | ``` 25 | trip_id,start_time,end_time,bikeid,tripduration,from_station_id,from_station_name,to_station_id,to_station_name,usertype,gender,birthyear 26 | 25223640,2019-10-01 00:01:39,2019-10-01 00:17:20,2215,940.0,20,Sheffield Ave & Kingsbury St,309,Leavitt St & Armitage Ave,Subscriber,Male,1987 27 | 25223641,2019-10-01 00:02:16,2019-10-01 00:06:34,6328,258.0,19,Throop (Loomis) St & Taylor St,241,Morgan St & Polk St,Subscriber,Male,1998 28 | ``` 29 | 30 | Your job is to read this files with `PySpark` and answer the following questions. Each question 31 | should be output as a report in `.csv` format in a `reports` folder. 32 | 33 | 1. What is the `average` trip duration per day? 34 | 2. How many trips were taken each day? 35 | 3. What was the most popular starting trip station for each month? 36 | 4. What were the top 3 trip stations each day for the last two weeks? 37 | 5. Do `Male`s or `Female`s take longer trips on average? 38 | 6. What is the top 10 ages of those that take the longest trips, and shortest? 39 | 40 | Note: Your `PySpark` code should be encapsulated inside functions or methods. 41 | 42 | Extra Credit: Unit test your PySpark code. 43 | -------------------------------------------------------------------------------- /Exercises/Exercise-6/data/Divvy_Trips_2019_Q4.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danielbeach/data-engineering-practice/7fc2874f7bc21e0d5de555e5975db6150bbbe5fb/Exercises/Exercise-6/data/Divvy_Trips_2019_Q4.zip -------------------------------------------------------------------------------- /Exercises/Exercise-6/data/Divvy_Trips_2020_Q1.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danielbeach/data-engineering-practice/7fc2874f7bc21e0d5de555e5975db6150bbbe5fb/Exercises/Exercise-6/data/Divvy_Trips_2020_Q1.zip -------------------------------------------------------------------------------- /Exercises/Exercise-6/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3.9" 2 | services: 3 | test: 4 | image: "exercise-6" 5 | volumes: 6 | - .:/app 7 | command: python3 -m pytest 8 | run: 9 | image: "exercise-6" 10 | volumes: 11 | - .:/app 12 | command: /spark/bin/spark-submit main.py -------------------------------------------------------------------------------- /Exercises/Exercise-6/main.py: -------------------------------------------------------------------------------- 1 | from pyspark.sql import SparkSession 2 | 3 | 4 | def main(): 5 | spark = SparkSession.builder.appName("Exercise6").enableHiveSupport().getOrCreate() 6 | # your code here 7 | 8 | 9 | if __name__ == "__main__": 10 | main() 11 | -------------------------------------------------------------------------------- /Exercises/Exercise-6/requirements.txt: -------------------------------------------------------------------------------- 1 | pytest 2 | pyspark -------------------------------------------------------------------------------- /Exercises/Exercise-7/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:18.04 2 | 3 | RUN apt-get update && \ 4 | apt-get install -y default-jdk scala wget vim software-properties-common python3.8 python3-pip curl unzip libpq-dev build-essential libssl-dev libffi-dev python3-dev && \ 5 | apt-get clean 6 | 7 | RUN wget https://archive.apache.org/dist/spark/spark-3.5.0/spark-3.5.0-bin-hadoop3.tgz && \ 8 | tar xvf spark-3.5.0-bin-hadoop3.tgz && \ 9 | mv spark-3.5.0-bin-hadoop3/ /usr/local/spark && \ 10 | ln -s /usr/local/spark spark && \ 11 | wget https://repo1.maven.org/maven2/com/amazonaws/aws-java-sdk-bundle/1.11.890/aws-java-sdk-bundle-1.11.890.jar && \ 12 | mv aws-java-sdk-bundle-1.11.890.jar /spark/jars && \ 13 | wget https://repo1.maven.org/maven2/org/apache/hadoop/hadoop-aws/3.2.0/hadoop-aws-3.2.0.jar && \ 14 | mv hadoop-aws-3.2.0.jar /spark/jars 15 | 16 | 17 | WORKDIR app 18 | COPY . /app 19 | 20 | RUN pip3 install markupsafe==1.1.1 cryptography==3.3.2 cython==0.29.21 numpy==1.18.5 && pip3 install -r requirements.txt 21 | 22 | ENV PYSPARK_PYTHON=python3 23 | ENV PYSPARK_SUBMIT_ARGS='--packages io.delta:delta-core_2.12:0.8.0 pyspark-shell' 24 | -------------------------------------------------------------------------------- /Exercises/Exercise-7/README.md: -------------------------------------------------------------------------------- 1 | ## Exercise 7 -Using Various PySpark Functions 2 | 3 | In this exercise we are going to have some problems to solve that will require us to 4 | use various PySpark functions. You should only use functions provided in `spark.sql.functions`. 5 | Do not use UDF's or Python methods to solve the problems! We will be using open source 6 | hard-drive failure data files as our source data. 7 | 8 | #### Setup 9 | 1. Change directories at the command line 10 | to be inside the `Exercise-7` folder `cd Exercises/Exercise-7` 11 | 12 | 2. Run `docker build --tag=exercise-7 .` to build the `Docker` image. 13 | 14 | 3. There is a file called `main.py` in the `Exercise-7` directory, this 15 | is where your `PySpark` code to complete the exercise should go. 16 | 17 | 4. Once you have finished the project or want to test run your code, 18 | run the following command `docker-compose up run` from inside the `Exercises/Exercise-7` directory 19 | 20 | #### Problems Statement 21 | There is a folder called `data` in this current directory, `Exercises/Exercise-7`. Inside this 22 | folder there is a `.zip`'d `csv` file, it should remain zipped for the duration of this 23 | exercise. The file is called `hard-drive-2022-01-01-failures.csv.zip`. (This data is free 24 | from https://www.backblaze.com/b2/hard-drive-test-data.html) 25 | 26 | Generally the files look like this ... 27 | ``` 28 | date,serial_number,model,capacity_bytes,failure,smart_1_normalized,smart_1_raw,smart_2_normalized,smart_2_raw,smart_3_normalized,smart_3_raw,smart_4_normalized,smart_4_raw,smart_5_normalized,smart_5_raw,smart_7_normalized,smart_7_raw,smart_8_normalized,smart_8_raw,smart_9_normalized,smart_9_raw,smart_10_normalized,smart_10_raw,smart_11_normalized,smart_11_raw,smart_12_normalized,smart_12_raw,smart_13_normalized,smart_13_raw,smart_15_normalized,smart_15_raw,smart_16_normalized,smart_16_raw,smart_17_normalized,smart_17_raw,smart_18_normalized,smart_18_raw,smart_22_normalized,smart_22_raw,smart_23_normalized,smart_23_raw,smart_24_normalized,smart_24_raw,smart_160_normalized,smart_160_raw,smart_161_normalized,smart_161_raw,smart_163_normalized,smart_163_raw,smart_164_normalized,smart_164_raw,smart_165_normalized,smart_165_raw,smart_166_normalized,smart_166_raw,smart_167_normalized,smart_167_raw,smart_168_normalized,smart_168_raw,smart_169_normalized,smart_169_raw,smart_170_normalized,smart_170_raw,smart_171_normalized,smart_171_raw,smart_172_normalized,smart_172_raw,smart_173_normalized,smart_173_raw,smart_174_normalized,smart_174_raw,smart_175_normalized,smart_175_raw,smart_176_normalized,smart_176_raw,smart_177_normalized,smart_177_raw,smart_178_normalized,smart_178_raw,smart_179_normalized,smart_179_raw,smart_180_normalized,smart_180_raw,smart_181_normalized,smart_181_raw,smart_182_normalized,smart_182_raw,smart_183_normalized,smart_183_raw,smart_184_normalized,smart_184_raw,smart_187_normalized,smart_187_raw,smart_188_normalized,smart_188_raw,smart_189_normalized,smart_189_raw,smart_190_normalized,smart_190_raw,smart_191_normalized,smart_191_raw,smart_192_normalized,smart_192_raw,smart_193_normalized,smart_193_raw,smart_194_normalized,smart_194_raw,smart_195_normalized,smart_195_raw,smart_196_normalized,smart_196_raw,smart_197_normalized,smart_197_raw,smart_198_normalized,smart_198_raw,smart_199_normalized,smart_199_raw,smart_200_normalized,smart_200_raw,smart_201_normalized,smart_201_raw,smart_202_normalized,smart_202_raw,smart_206_normalized,smart_206_raw,smart_210_normalized,smart_210_raw,smart_218_normalized,smart_218_raw,smart_220_normalized,smart_220_raw,smart_222_normalized,smart_222_raw,smart_223_normalized,smart_223_raw,smart_224_normalized,smart_224_raw,smart_225_normalized,smart_225_raw,smart_226_normalized,smart_226_raw,smart_230_normalized,smart_230_raw,smart_231_normalized,smart_231_raw,smart_232_normalized,smart_232_raw,smart_233_normalized,smart_233_raw,smart_234_normalized,smart_234_raw,smart_235_normalized,smart_235_raw,smart_240_normalized,smart_240_raw,smart_241_normalized,smart_241_raw,smart_242_normalized,smart_242_raw,smart_244_normalized,smart_244_raw,smart_245_normalized,smart_245_raw,smart_246_normalized,smart_246_raw,smart_247_normalized,smart_247_raw,smart_248_normalized,smart_248_raw,smart_250_normalized,smart_250_raw,smart_251_normalized,smart_251_raw,smart_252_normalized,smart_252_raw,smart_254_normalized,smart_254_raw,smart_255_normalized,smart_255_raw 29 | 2022-01-01,ZLW18P9K,ST14000NM001G,14000519643136,0,73,20467240,,,90,0,100,12,100,0,87,495846641,,,89,9937,100,0,,,100,12,,,,,,,,,100,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,100,0,100,0,,,66,34,,,100,2,99,2641,34,34,,,,,100,0,100,0,200,0,10 30 | ``` 31 | 32 | Your job is to read this file with `PySpark` and answer the following questions. 33 | Answer each question by adding a new column with the answer. 34 | 35 | 1. Add the file name as a column to the DataFrame and call it `source_file`. 36 | 2. Pull the `date` located inside the string of the `source_file` column. Final data-type must be 37 | `date` or `timestamp`, not a `string`. Call the new column `file_date`. 38 | 3. Add a new column called `brand`. It will be based on the column `model`. If the 39 | column `model` has a space ... aka ` ` in it, split on that `space`. The value 40 | found before the space ` ` will be considered the `brand`. If there is no 41 | space to split on, fill in a value called `unknown` for the `brand`. 42 | 43 | 4. Inspect a column called `capacity_bytes`. Create a secondary DataFrame that 44 | relates `capacity_bytes` to the `model` column, create "buckets" / "rankings" for 45 | those models with the most capacity to the least. Bring back that 46 | data as a column called `storage_ranking` into the main dataset. 47 | 48 | 5. Create a column called `primary_key` that is `hash` of columns that make a record umique 49 | in this dataset. 50 | 51 | 52 | Note: Your `PySpark` code should be encapsulated inside functions or methods. 53 | 54 | Extra Credit: Unit test your PySpark code. 55 | -------------------------------------------------------------------------------- /Exercises/Exercise-7/data/hard-drive-2022-01-01-failures.csv.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danielbeach/data-engineering-practice/7fc2874f7bc21e0d5de555e5975db6150bbbe5fb/Exercises/Exercise-7/data/hard-drive-2022-01-01-failures.csv.zip -------------------------------------------------------------------------------- /Exercises/Exercise-7/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3.9" 2 | services: 3 | test: 4 | image: "exercise-7" 5 | volumes: 6 | - .:/app 7 | command: python3 -m pytest 8 | run: 9 | image: "exercise-7" 10 | volumes: 11 | - .:/app 12 | command: /spark/bin/spark-submit main.py -------------------------------------------------------------------------------- /Exercises/Exercise-7/main.py: -------------------------------------------------------------------------------- 1 | from pyspark.sql import SparkSession 2 | import pyspark.sql.functions as F 3 | 4 | 5 | def main(): 6 | spark = SparkSession.builder.appName("Exercise7").enableHiveSupport().getOrCreate() 7 | # your code here 8 | 9 | 10 | if __name__ == "__main__": 11 | main() 12 | -------------------------------------------------------------------------------- /Exercises/Exercise-7/requirements.txt: -------------------------------------------------------------------------------- 1 | pytest 2 | pyspark -------------------------------------------------------------------------------- /Exercises/Exercise-8/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:18.04 2 | 3 | RUN apt-get update && \ 4 | apt-get install -y vim software-properties-common python3.8 python3-pip libpq-dev build-essential libssl-dev libffi-dev python3-dev && \ 5 | apt-get clean 6 | 7 | WORKDIR app 8 | COPY . /app 9 | 10 | RUN pip3 install -r requirements.txt 11 | -------------------------------------------------------------------------------- /Exercises/Exercise-8/README.md: -------------------------------------------------------------------------------- 1 | ## Exercise 8 - Understanding and use DuckDB. 2 | 3 | In this exercise we are going to have some problems to solve that will require us to 4 | use various DuckDB functions and functionality. You can read through the documentation 5 | here https://duckdb.org/docs/ 6 | 7 | #### Setup 8 | 1. Change directories at the command line 9 | to be inside the `Exercise-8` folder `cd Exercises/Exercise-8` 10 | 11 | 2. Run `docker build --tag=exercise-8 .` to build the `Docker` image. 12 | 13 | 3. There is a file called `main.py` in the `Exercise-8` directory, this 14 | is where your `DuckDB` code to complete the exercise should go. 15 | 16 | 4. Once you have finished the project or want to test run your code, 17 | run the following command `docker-compose up run` from inside the `Exercises/Exercise-8` directory 18 | 19 | #### Problems Statement 20 | There is a folder called `data` in this current directory, `Exercises/Exercise-8`. Inside this 21 | folder there is a `csv` file. The file is called `electric-cars.csv`. This is an open source 22 | data set about electric vehicles in the state of Washington. 23 | 24 | Generally the files look like this ... 25 | ``` 26 | VIN (1-10),County,City,State,Postal Code,Model Year,Make,Model,Electric Vehicle Type,Clean Alternative Fuel Vehicle (CAFV) Eligibility,Electric Range,Base MSRP,Legislative District,DOL Vehicle ID,Vehicle Location,Electric Utility,2020 Census Tract 27 | 5YJ3E1EB4L,Yakima,Yakima,WA,98908,2020,TESLA,MODEL 3,Battery Electric Vehicle (BEV),Clean Alternative Fuel Vehicle Eligible,322,0,14,127175366,POINT (-120.56916 46.58514),PACIFICORP,53077000904 28 | 5YJ3E1EA7K,San Diego,San Diego,CA,92101,2019,TESLA,MODEL 3,Battery Electric Vehicle (BEV),Clean Alternative Fuel Vehicle Eligible,220,0,,266614659,POINT (-117.16171 32.71568),,06073005102 29 | 7JRBR0FL9M,Lane,Eugene,OR,97404,2021,VOLVO,S60,Plug-in Hybrid Electric Vehicle (PHEV),Not eligible due to low battery range,22,0,,144502018,POINT (-123.12802 44.09573),,41039002401 30 | ``` 31 | 32 | Your job is to complete each one of the tasks listed below, in order, as they depend on each other. 33 | 34 | 1. create a DuckDB Table including DDL and correct data types that will hold the data in this CSV file. 35 | - inspect data types and make DDL that makes sense. Don't just `String` everything. 36 | 37 | 2. Read the provided `CSV` file into the table you created. 38 | 39 | 3. Calculate the following analytics. 40 | - Count the number of electric cars per city. 41 | - Find the top 3 most popular electric vehicles. 42 | - Find the most popular electric vehicle in each postal code. 43 | - Count the number of electric cars by model year. Write out the answer as parquet files partitioned by year. 44 | 45 | 46 | Note: Your `DuckDB` code should be encapsulated inside functions or methods. 47 | 48 | Extra Credit: Unit test your `DuckDB` code. 49 | -------------------------------------------------------------------------------- /Exercises/Exercise-8/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3.9" 2 | services: 3 | test: 4 | image: "exercise-8" 5 | volumes: 6 | - .:/app 7 | command: python3 -m pytest 8 | run: 9 | image: "exercise-8" 10 | volumes: 11 | - .:/app 12 | command: python3 main.py -------------------------------------------------------------------------------- /Exercises/Exercise-8/main.py: -------------------------------------------------------------------------------- 1 | import duckdb 2 | 3 | 4 | def main(): 5 | pass 6 | 7 | 8 | if __name__ == "__main__": 9 | main() 10 | -------------------------------------------------------------------------------- /Exercises/Exercise-8/requirements.txt: -------------------------------------------------------------------------------- 1 | pytest 2 | duckdb -------------------------------------------------------------------------------- /Exercises/Exercise-9/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:18.04 2 | 3 | RUN apt-get update && \ 4 | apt-get install -y vim software-properties-common python3.8 python3-pip libpq-dev build-essential libssl-dev libffi-dev python3-dev && \ 5 | apt-get clean 6 | 7 | WORKDIR app 8 | COPY . /app 9 | 10 | RUN pip3 install -r requirements.txt 11 | -------------------------------------------------------------------------------- /Exercises/Exercise-9/README.md: -------------------------------------------------------------------------------- 1 | ## Exercise 9 - Learn Lazy computation for Polars. 2 | 3 | In this exercise we are to learn out work on larger than memory data sets. 4 | We will use Polars to do this. 5 | https://www.pola.rs/ 6 | 7 | #### Setup 8 | 1. Change directories at the command line 9 | to be inside the `Exercise-9` folder `cd Exercises/Exercise-9` 10 | 11 | 2. Run `docker build --tag=exercise-9 .` to build the `Docker` image. 12 | 13 | 3. There is a file called `main.py` in the `Exercise-9` directory, this 14 | is where your `Polars` code to complete the exercise should go. 15 | 16 | 4. Once you have finished the project or want to test run your code, 17 | run the following command `docker-compose up run` from inside the `Exercises/Exercise-9` directory 18 | 19 | #### Problems Statement 20 | There is a folder called `data` in this current directory, `Exercises/Exercise-9`. Inside this 21 | folder there is a `csv` file. The file is called `202306-divvy-tripdate.csv`. This is an open source 22 | data set bike trips. 23 | 24 | Generally the files look like this ... 25 | ``` 26 | "ride_id","rideable_type","started_at","ended_at","start_station_name","start_station_id","end_station_name","end_station_id","start_lat","start_lng","end_lat","end_lng","member_casual" 27 | "6F1682AC40EB6F71","electric_bike","2023-06-05 13:34:12","2023-06-05 14:31:56",,,,,41.91,-87.69,41.91,-87.7,"member" 28 | ``` 29 | 30 | Your job is to use the `Lazy` functionality of `Polars` to work on this data in a efficient manner. 31 | 32 | 1. Read the provided `CSV` file into a lazy Dataframe. 33 | 34 | 3. Calculate the following analytics/problems. 35 | - Convert all data types to the correct ones. 36 | - Count the number bike rides per day. 37 | - Calculate the average, max, and minimum number of rides per week of the dataset. 38 | - For each day, calculate how many rides that day is above or below the same day last week. 39 | -------------------------------------------------------------------------------- /Exercises/Exercise-9/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3.9" 2 | services: 3 | test: 4 | image: "exercise-9" 5 | volumes: 6 | - .:/app 7 | command: python3 -m pytest 8 | run: 9 | image: "exercise-9" 10 | volumes: 11 | - .:/app 12 | command: python3 main.py -------------------------------------------------------------------------------- /Exercises/Exercise-9/main.py: -------------------------------------------------------------------------------- 1 | import polars as pl 2 | 3 | 4 | def main(): 5 | pass 6 | 7 | 8 | if __name__ == "__main__": 9 | main() 10 | -------------------------------------------------------------------------------- /Exercises/Exercise-9/requirements.txt: -------------------------------------------------------------------------------- 1 | pytest 2 | polars -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Data Engineering Practice Problems 2 | 3 | One of the main obstacles of Data Engineering is the large 4 | and varied technical skills that can be required on a 5 | day-to-day basis. 6 | 7 | *** Note - If you email a link to your GitHub repo with all the completed 8 | exercises, I will send you back a free copy of my ebook Introduction to Data Engineering. *** 9 | 10 | This aim of this repository is to help you develop and 11 | learn those skills. Generally, here are the high level 12 | topics that these practice problems will cover. 13 | 14 | - Python data processing. 15 | - csv, flat-file, parquet, json, etc. 16 | - SQL database table design. 17 | - Python + Postgres, data ingestion and retrieval. 18 | - PySpark 19 | - Data cleansing / dirty data. 20 | 21 | ### How to work on the problems. 22 | You will need two things to work effectively on most all 23 | of these problems. 24 | - `Docker` 25 | - `docker-compose` 26 | 27 | All the tools and technologies you need will be packaged 28 | into the `dockerfile` for each exercise. 29 | 30 | For each exercise you will need to `cd` into that folder and 31 | run the `docker build` command, that command will be listed in 32 | the `README` for each exercise, follow those instructions. 33 | 34 | ### Beginner Exercises 35 | 36 | #### Exercise 1 - Downloading files. 37 | The [first exercise](https://github.com/danielbeach/data-engineering-practice/tree/main/Exercises/Exercise-1) tests your ability to download a number of files 38 | from an `HTTP` source and unzip them, storing them locally with `Python`. 39 | `cd Exercises/Exercise-1` and see `README` in that location for instructions. 40 | 41 | #### Exercise 2 - Web Scraping + Downloading + Pandas 42 | The [second exercise](https://github.com/danielbeach/data-engineering-practice/tree/main/Exercises/Exercise-2) 43 | tests your ability perform web scraping, build uris, download files, and use Pandas to 44 | do some simple cumulative actions. 45 | `cd Exercises/Exercise-2` and see `README` in that location for instructions. 46 | 47 | #### Exercise 3 - Boto3 AWS + s3 + Python. 48 | The [third exercise](https://github.com/danielbeach/data-engineering-practice/tree/main/Exercises/Exercise-3) tests a few skills. 49 | This time we will be using a popular `aws` package called `boto3` to try to perform a multi-step 50 | actions to download some open source `s3` data files. 51 | `cd Exercises/Exercise-3` and see `README` in that location for instructions. 52 | 53 | #### Exercise 4 - Convert JSON to CSV + Ragged Directories. 54 | The [fourth exercise](https://github.com/danielbeach/data-engineering-practice/tree/main/Exercises/Exercise-4) 55 | focuses more file types `json` and `csv`, and working with them in `Python`. 56 | You will have to traverse a ragged directory structure, finding any `json` files 57 | and converting them to `csv`. 58 | 59 | #### Exercise 5 - Data Modeling for Postgres + Python. 60 | The [fifth exercise](https://github.com/danielbeach/data-engineering-practice/tree/main/Exercises/Exercise-5) 61 | is going to be a little different than the rest. In this problem you will be given a number of 62 | `csv` files. You must create a data model / schema to hold these data sets, including indexes, 63 | then create all the tables inside `Postgres` by connecting to the database with `Python`. 64 | 65 | 66 | ### Intermediate Exercises 67 | 68 | #### Exercise 6 - Ingestion and Aggregation with PySpark. 69 | The [sixth exercise](https://github.com/danielbeach/data-engineering-practice/tree/main/Exercises/Exercise-6) 70 | Is going to step it up a little and move onto more popular tools. In this exercise we are going 71 | to load some files using `PySpark` and then be asked to do some basic aggregation. 72 | Best of luck! 73 | 74 | #### Exercise 7 - Using Various PySpark Functions 75 | The [seventh exercise](https://github.com/danielbeach/data-engineering-practice/tree/main/Exercises/Exercise-7) 76 | Taking a page out of the previous exercise, this one is focus on using a few of the 77 | more common build in PySpark functions `pyspark.sql.functions` and applying their 78 | usage to real-life problems. 79 | 80 | Many times to solve simple problems we have to find and use multiple functions available 81 | from libraries. This will test your ability to do that. 82 | 83 | #### Exercise 8 - Using DuckDB for Analytics and Transforms. 84 | The [eighth exercise](https://github.com/danielbeach/data-engineering-practice/tree/main/Exercises/Exercise-8) 85 | Using new tools is imperative to growing as a Data Engineer. DuckDB is one of those new tools. In this 86 | exercise you will have to complete a number of analytical and transformation tasks using DuckDB. This 87 | will require an understanding of the functions and documenation of DuckDB. 88 | 89 | #### Exercise 9 - Using Polars lazy computation. 90 | The [ninth exercise](https://github.com/danielbeach/data-engineering-practice/tree/main/Exercises/Exercise-9) 91 | Polars is a new Rust based tool with a wonderful Python package that has taken Data Engineering by 92 | storm. It's better than Pandas because it has both SQL Context and supports Lazy evalutation 93 | for larger than memory data sets! Show your Lazy skills! 94 | 95 | 96 | ### Advanced Exercises 97 | 98 | #### Exercise 10 - Data Quality with Great Expectations 99 | The [tenth exercise](https://github.com/danielbeach/data-engineering-practice/tree/main/Exercises/Exercise-10) 100 | This exercise is to help you learn Data Quality, specifically a tool called Great Expectations. You will 101 | be given an existing datasets in CSV format, as well as an existing pipeline. There is a data quality issue 102 | and you will be asked to implement some Data Quality checks to catch some of these issues. --------------------------------------------------------------------------------