In [1]:
# magic function para hacer que los graficos de matplotlib se renderizen en el notebook.
%matplotlib inline
import datetime as datetime
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('default') # Make the graphs a bit prettier
plt.rcParams['figure.figsize'] = (15, 5)
In [2]:
#Cargo los datos pero parseando las fechas a DataTime
trip = pd.read_csv('trip.csv', parse_dates=['start_date','end_date'])
In [3]:
#Observacion de los datos
trip.head(10)
Out[3]:
In [4]:
#A cada dato de la columna de comienzo del viaje (start_date) le aplico una funcion para saber en que dia de la semana fueron
#realizados los viajes
#Aclaracion: dayofweek nos da los dias ordenados desde 0(lunes) hasta 6(domingo)
#Realizo un plot de barras para visualizar lo calculado en el paso anterior
plt = trip['start_date'].apply(lambda x: x.dayofweek).value_counts().plot('bar')
plt.set_xlabel('Dias de la semana')
plt.set_ylabel('Cantidad')
plt.set_title('Cantidad de viajes por dia de la semana')
plt.set_xticklabels(['Martes','Miercoles','Jueves','Lunes','Viernes','Sabado','Domingo'], fontdict=None, minor=False)
Out[4]:
In [5]:
#A cada dato de la columna de comienzo del viaje (start_date) le aplico una funcion para saber en que mes fueron
#realizados los viajes
#Realizo un plot en el cual observamos la cantidad de viajes segun el mes del año
plt = trip['start_date'].apply(lambda x: x.month).value_counts().plot('bar')
plt.set_xlabel('meses')
plt.set_ylabel('Cantidad de viajes')
plt.set_title('Cantidad de viajes por mes');
In [6]:
#Ahora para hacer un visualizacion de todos los viajes a traves del tiempo creamos una nueva columa en la cual tendremos
#la fecha pero sin la hora ni los minutos
trip['start_date_without_time']=trip.start_date.dt.date
trip.head(10)
Out[6]:
In [7]:
#Realizamos una visualizacion de los viajes a traves del tiempo
#Quiero aclarar que se realizo una agrupacion dia a dia para realizar este plot
plt = trip.groupby('start_date_without_time').count()['id'].plot(figsize=(14,4));
plt.set_xlabel('Fecha')
plt.set_ylabel('Cantidad de viajes')
plt.set_title('Cantidad de viajes a traves del tiempo');
In [8]:
#Ahora añadiremos otra columna la cual tendra solo la hora en la que se realiza el viaje
trip['hora'] = trip['start_date'].apply(lambda x: x.hour)
#Realizo una visualizacion en base a la hora en que se realiza el viaje
plt = trip.groupby('hora').count()['id'].plot('bar');
plt.set_xlabel('Hora del dia')
plt.set_ylabel('Cantidad de viajes')
plt.set_title('Cantidad de viajes dependiendo de la hora');
In [9]:
#Cambiamos la duracion a minutos
trip['duration'] = trip['duration'].apply(lambda x: x/60)
#Cantidad de viajes segun la duracion (en minutos). Visualizacion de la cantidad de viajes segun la duracion del viaje
plt = trip['duration'].value_counts()[:20].plot('bar')
plt.set_xlabel('Cantidad de minutos del viajes')
plt.set_ylabel('Cantidad de viajes')
plt.set_title('Cantidad de viajes dependiendo de su duracion');
In [10]:
#Cargamos los datos de station.csv y le cambiamos el nombre a una de sus columnas para un posterior procesamiento
station = pd.read_csv('station.csv', low_memory=False)
station.rename(columns={'id': 'start_station_id'}, inplace=True)
station.head(10)
Out[10]:
In [11]:
#Realizamos un join entre trip y station en base a la columna start_station_id
arch_unidos = pd.merge(trip, station, on='start_station_id', how='inner')
arch_unidos.head(10)
Out[11]:
In [12]:
#Visulizacion de la cantidad de viajes segun la ciudad
plt = arch_unidos['city'].value_counts().plot('bar')
plt.set_xlabel('Ciudad')
plt.set_ylabel('Cantidad de viajes')
plt.set_title('Cantidad de viajes dependiendo de la ciudad');
In [16]:
#Visulizacion de la cantidad de viajes segun la estacion
#Solo mostramos las 20 ciudades con mas cantidad de viajes
plt = arch_unidos['start_station_name'].value_counts().tail(20).plot('bar')
plt.set_xlabel('Estacion de bicicleta')
plt.set_ylabel('Cantidad de viajes')
plt.set_title('Top20 de estaciones con menos cantidad de viajes');
In [17]:
#Visulizacion de la cantidad de viajes segun la estacion
#Solo mostramos las 20 ciudades con mas menos de viajes
plt = arch_unidos['start_station_name'].value_counts().head(20).plot('bar')
plt.set_xlabel('Estacion de bicicleta')
plt.set_ylabel('Cantidad de viajes')
plt.set_title('Top20 de estaciones con mas cantidad de viajes');
In [18]:
#ACLARO QUE ESTE GRAFICO SOLO NOS MUESRTA DATOS INCORRECTOS, HABRIA QUE DECIDIR SI PONERLO O NO
# Duracion de viajes por bicicleta.
plt = trip.groupby('bike_id').sum()['duration'].plot(figsize=(14,4));
plt.set_xlabel('ID de Bicicleta')
plt.set_ylabel('Duracion')
plt.set_title('Cantidad de viajes por bicicleta');
In [19]:
#Filtramos los viajes para que solo queden los de duracion menor a 5000
trip_con_duracion_filtrada = trip[trip['duration'] < 5000 ]
# Duracion de viajes por bicicleta.
plt = trip_con_duracion_filtrada.groupby('bike_id').sum()['duration'].plot(figsize=(14,4));
plt.set_xlabel('ID de Bicicleta')
plt.set_ylabel('Duracion')
plt.set_title('Cantidad de viajes por bicicleta');
In [ ]: