In [19]:
# 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 [ ]:
#Cargo los datos de los viajes pero sin el casteo a de fecha a Date
trip = pd.read_csv('trip.csv', low_memory=False)
In [ ]:
#Observacion de los tipos de los datos
trip.dtypes
In [20]:
#Cargo los datos nuevamente pero parseando las fechas a DataTime
trip2 = pd.read_csv('trip.csv', parse_dates=['start_date','end_date'])
In [21]:
#Observacion de los tipos de datos
trip2.head(10)
Out[21]:
In [4]:
#A cada dato de la columna de comienzo del viaje (fecha) le aplico una funcion para saber en que dia de la semana fueron
#realizados los viajes y se calculan la cantidad por mes
#dayofweek nos da los dias ordenados desde 0(lunes) hasta 6(domingo)
trip2['start_date'].apply(lambda x: x.dayofweek).value_counts()
Out[4]:
In [5]:
#Realizo un plot de barras para visualizar lo calculado en el paso anterior
plt = trip2['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)
#plt.ylabel('Cantidad de viajes ')
#plt.xlabel('dias de la semana')
#plt.show()
Out[5]:
In [ ]:
plt.set_ylabel('start_date')
In [ ]:
contadorPorDia = trip2['start_date'].apply(lambda x: x.dayofweek).value_counts()
contadorPorDia
In [ ]:
tripAgrupadoPorDias = trip2[['start_date']]
tripAgrupadoPorDias
In [ ]:
tripAgrupadoPorDias['diaDeLaSemana'] = tripAgrupadoPorDias['start_date'].apply(lambda x: x.dayofweek)
In [ ]:
agrupacion = tripAgrupadoPorDias.groupby('diaDeLaSemana').count
agrupacion
In [6]:
#Realizo un plot en el cual observamos la cantidad de viajes segun el mes del año
plt = trip2['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 dia de la semana')
Out[6]:
In [25]:
agrupacion = trip2[['start_date']]
agrupacion['cantidad'] = 1
agrupacion = agrupacion.groupby('start_date').aggregate(sum)
agrupacion
agrupacion.plot(rot=90,xticks=range(2013,2015),linewidth=2,figsize=(12,8),label='Viajes Realizados');
#Primero agrupamos por start_date
#agrupacion = trip2.groupby('start_date').aggregate(sum)
#agrupacion
#plt.figure(
#trip2.groupby('start_date').sum().loc[:,'start_date'].plot(rot=90,xticks=range(2013,2015),linewidth=2,figsize=(12,8),label='Viajes Realizados');
#plt.legend();
Out[25]:
In [34]:
#Intento fallido de poner los horas y minutos en 0 para despues agrupar en base a dia mes y año
trip2_con_casteo_por_dia = trip2[trip2['start_date'].apply(lambda x: x.replace(hour=0,minute=0))]
agrupacion2 = pd.DataFrame({'Count' : trip2.groupby(['start_date'])['id'].count()}).reset_index()
agrupacion2
#plt.figure.Figure()
#agrupacion.plot(rot=90,xticks=range(2013,2015),linewidth=2,figsize=(12,8),label='Viajes Realizados');
#plt.legend();
In [41]:
trip_con_fecha_en_columnas= trip2 [['start_date']]
trip_con_fecha_en_columnas['dia'] = trip_con_fecha_en_columnas['start_date'].apply(lambda x: x.day)
trip_con_fecha_en_columnas['mes'] = trip_con_fecha_en_columnas['start_date'].apply(lambda x: x.month)
trip_con_fecha_en_columnas['anio'] = trip_con_fecha_en_columnas['start_date'].apply(lambda x: x.year)
#trip_con_fecha_en_columnas['hora'] = trip_con_fecha_en_columnas['start_date'].apply(lambda x: x.hour)
#trip_con_fecha_en_columnas['minutos'] = trip_con_fecha_en_columnas['start_date'].apply(lambda x: x.minute)
trip_con_fecha_en_columnas
Out[41]:
In [44]:
#agrupamos por dia mes y anio
trip3 =trip_con_fecha_en_columnas.groupby(['anio','mes','dia']).count()
trip3
Out[44]:
In [3]:
#Podemos ver en base al dataframe obtenido anteriormente que la fechas de los viajes que tenemos son entre Agosto de 2013 y agosto de 2015
trip_con_horayminutos_en_columnas= trip2 [['start_date']]
trip_con_horayminutos_en_columnas['hora'] = trip_con_horayminutos_en_columnas['start_date'].apply(lambda x: x.hour)
#trip_con_horayminutos_en_columnas['minutos'] = trip_con_fecha_en_columnas['start_date'].apply(lambda x: x.minute)
trip_con_horayminutos_en_columnas
Out[3]:
In [55]:
trip4 =trip_con_horayminutos_en_columnas.groupby('hora').count()
trip4
Out[55]:
In [59]:
trip4.index.count_values().plot('area')
In [5]:
#Este grafico esta bien, nos muestra la cantidad de viajes segun el dia hora minuto, habria que realizar uno que sea de dia a dia
import seaborn as sns
%matplotlib inline
trip2.groupby('start_date').count()['duration'].plot(figsize=(14,4));
In [7]:
trip5 = pd.read_csv('trip.csv')
trip5['DiaMesAnio'] = trip5['start_date'].str.extract(r'(\d+/\d+/\d+)',expand=False)
trip5.head(5)
Out[7]:
In [10]:
trip5.groupby('DiaMesAnio').count()['id'].plot(figsize=(14,4));
In [15]:
#Visualizacion de cantidad de viajes segun la hora del viaje
trip_con_horayminutos_en_columnas.groupby('hora').count().plot(figsize=(14,4));
In [7]:
#Visualizacion de cantidad de viajes segun la hora del viaje
trip_con_horayminutos_en_columnas.groupby('hora').count()['start_date'].plot('bar');
In [22]:
#Cambiamos la duracion a minutos
trip2['duration'] = trip2['duration'].apply(lambda x: x/60)
trip2.head(5)
#Realizamos un plot para ver la cantidad de viajes segun los minutos
#trip2.groupby('duration').count()['id'].plot(figsize=(14,4));
Out[22]:
In [27]:
trip2.groupby('duration').count()['id'].plot('bar')
Out[27]:
In [34]:
#Cantidad de viajes segun la duracion (en minutos). Visualizacion de la cantidad de viajes segun la duracion del viaje
trip2['duration'].value_counts()[:20].plot('bar')
Out[34]:
In [37]:
maximo_valor = trip2['duration'].max()
minimo_valor = trip2['duration'].min()
maximo_valor
#minimo_valor
Out[37]:
In [36]:
#Cantidad de viajes segun la duracion (en minutos). Visualizacion de la cantidad de viajes segun la duracion del viaje
#En si este grafico mucho no sirve porque nos muestra viajes unicos con ese minuto particular
trip2['duration'].value_counts().tail(20).plot('bar')
Out[36]:
In [38]:
station = pd.read_csv('station.csv', low_memory=False)
station.rename(columns={'id': 'start_station_id'}, inplace=True)
station.head(10)
Out[38]:
In [39]:
arch_unidos = pd.merge(trip2, station, on='start_station_id', how='inner')
arch_unidos.head(10)
Out[39]:
In [40]:
#Visulizacion de la cantidad de viajes segun la ciudad
arch_unidos['city'].value_counts().plot('bar')
Out[40]:
In [41]:
#Visulizacion de la cantidad de viajes segun la estacion
arch_unidos['start_station_name'].value_counts().tail(20).plot('bar')
Out[41]:
In [ ]: