Kiko es un gurú en numpy no necesitas a nadie mas XD

El 14 de mayo de 2014, 8:16, AGTUGO <agt...@gmail.com> escribió:

> Completamente de acuerdo, en este momento no le podre meter mucho tiempo a
> mejorar el performance pero lo haré en un futuro y les comunico mis
> resultados. Es extraño que nadie más este en la discusión. ¿Será pandas y
> numpy poco usado por esta comunidad?
>
>
> 2014-05-14 1:36 GMT-05:00 Kiko <kikocorre...@gmail.com>:
>
>
>>
>>
>> El 14 de mayo de 2014, 1:50, AGTUGO <agt...@gmail.com> escribió:
>>
>> Sí lo unico que me causa un poco de ruido es usar el ciclo for para crear
>>> los renglones, siempre trato de evitarlos y usar streaming, indexing,
>>> slicing. Pero pues ya cambie mi forma de las combinaciones por tu método.
>>>
>>>
>> Sigo considerando que deberías usar numpy arrays y una vez tengas los
>> datos crear el DataFrame final. Modificar un DataFrame puede ser costoso,
>> computacionalmente hablando, sobretodo insertar cosas línea a línea (aunque
>> usando el método 'loc' remedie en parte eso).
>>
>> Saludos.
>>
>>
>>>
>>> 2014-05-13 14:49 GMT-05:00 Kiko <kikocorre...@gmail.com>:
>>>
>>>
>>>>
>>>>
>>>> El 13 de mayo de 2014, 20:52, AGTUGO <agt...@gmail.com> escribió:
>>>>
>>>> Pues aqui  tengo el siguiente codigo donde no necesito crear un array
>>>>> intermedio.
>>>>>
>>>>> Creo que la mejor opcion es simplemente usar ix para tener indexing
>>>>> tipo numpy,
>>>>> ¿Que opinas Kiko?
>>>>>
>>>>> import numpy as np
>>>>> import itertools
>>>>> ## tamaño de los renglones y columnas de los datos tabulados
>>>>>
>>>>> rows = 10
>>>>> columns =5
>>>>> ## informacion proporcionada en forma tabulada aqui estoy simulando el
>>>>> csv
>>>>> data = np.arange(rows*columns).reshape(rows,columns)
>>>>> data_pa = pd.DataFrame(data, columns = ('A','B','C','D','E'))
>>>>> display(data_pa)
>>>>>
>>>>> ## lo siguiente crea los indices de las combinaciones
>>>>>
>>>>> to_mix = np.arange(rows)
>>>>> mixed = list(itertools.product(to_mix,to_mix))
>>>>> combination = [x for x in mixed if (x[0]< x[1])]
>>>>> combination = np.array(combination)
>>>>>
>>>>>
>>>>> # separo los indices en dos variables
>>>>> index1_comb = combination[:,0]
>>>>> index2_comb = combination[:,1]
>>>>>
>>>>> #creo dos dataframes con los indices y despues los junto
>>>>>
>>>>> first_c=data_pa.iloc[index1_comb].reset_index(drop=True)
>>>>> second_c=data_pa.iloc[index2_comb].reset_index(drop=True)
>>>>> final_data_pandas = pd.concat((first_c,second_c),axis=1)
>>>>> display(final_data_pandas )
>>>>>
>>>>>
>>>> En las versiones que te he dejado no uso en ningún momento numpy. ¿No
>>>> te valen como opción?
>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> 2014-05-13 13:09 GMT-05:00 Kiko <kikocorre...@gmail.com>:
>>>>>
>>>>>
>>>>>>
>>>>>>
>>>>>> El 13 de mayo de 2014, 20:05, AGTUGO <agt...@gmail.com> escribió:
>>>>>>
>>>>>>
>>>>>>> Muchas gracias, no es para clase. Es un programa para calcular la
>>>>>>> vida minima de un componente mecánico, entonces debo buscar la vida 
>>>>>>> minima
>>>>>>> buscando todas las posibles combinaciones y despues hacer calculos. Esta
>>>>>>> rutina la hago varias veces con algunas variaciones, y con el dataframe 
>>>>>>> es
>>>>>>> mas facil visualizar.
>>>>>>>
>>>>>>> Cuando paso a un array pierdo un poco de informacion de los headers,
>>>>>>> y la tengo que extraer y volver a meter. En mi opinion estar cambiando 
>>>>>>> de
>>>>>>> tipos de datos aumenta la probabilidad de errores y la lectura 
>>>>>>> posterior.
>>>>>>> Es más o menos el ya discutido problema de evitar el tipo matrix en 
>>>>>>> numpy y
>>>>>>> solamente usar arrays aunque sea no tan transparente las operaciones
>>>>>>> matriciales.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>> Pues si te ha funcionado, perfecto, y si no es lo que buscabas
>>>>>> seguimos iterando.
>>>>>>
>>>>>> Saludos.
>>>>>>
>>>>>>
>>>>>>> 2014-05-13 12:16 GMT-05:00 Kiko <kikocorre...@gmail.com>:
>>>>>>>
>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> El 13 de mayo de 2014, 18:31, AGTUGO <agt...@gmail.com> escribió:
>>>>>>>>
>>>>>>>>  Entiendo el punto pero tengo que pasar por un array intermedio. La
>>>>>>>>> idea es agarrar un archivo csv direcatamente a un dataframe y de ahi 
>>>>>>>>> sacar
>>>>>>>>> el dataframe con las combinaciones, el método actual sería:
>>>>>>>>>
>>>>>>>>> 1.- Importar csv en dataframe
>>>>>>>>> 2.- Crear un array del dataframe
>>>>>>>>> 3.- Crear los indices de las combinaciones
>>>>>>>>> 4.- Usar la notacion de indices para crear el array
>>>>>>>>> 5.- Crear el dataset a partir del array
>>>>>>>>>
>>>>>>>>> Método buscado:
>>>>>>>>>
>>>>>>>>> 1.- Importar csv en dataframe
>>>>>>>>> 2.- Crear indices de las combinaciones
>>>>>>>>> 3.- Usar "algo" usando los indices para crear el dataframe nuevo a
>>>>>>>>> partir del dataframe viejo
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> import pandas as pd
>>>>>>>> from itertools import combinations
>>>>>>>>
>>>>>>>> #Suponemos que este dataframe viene de leerlo con un pd.read_csv()
>>>>>>>> #Lo dejo así por simplificar
>>>>>>>> df0 = pd.DataFrame([list(range(i,i+5)) for i in range(0,50,5)],
>>>>>>>> columns = range(5))
>>>>>>>>
>>>>>>>> #creamos el dataframe de destino con 10 columnas
>>>>>>>> df1 = pd.DataFrame(columns = range(10))
>>>>>>>>
>>>>>>>> # De esta forma estás usando los índices del dataframe df0 para
>>>>>>>> hacer las combinaciones
>>>>>>>> for i,j in enumerate(combinations(df0.index,2)):
>>>>>>>>     df1.loc[i] = np.append(df0.ix[j[0]], df0.ix[j[1]])
>>>>>>>>
>>>>>>>> El dataframe df1 tendría todas las combinaciones. Me sigue
>>>>>>>> pareciendo complicado e innecesario lo que quieres hacer (a no ser que 
>>>>>>>> sea
>>>>>>>> un ejercicio para clase y entonces podría entender lo rebuscado del 
>>>>>>>> asunto).
>>>>>>>>
>>>>>>>> Saludos.
>>>>>>>>
>>>>>>>>
>>>>>>>>>
>>>>>>>>> 2014-05-13 2:12 GMT-05:00 Kiko <kikocorre...@gmail.com>:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> El 13 de mayo de 2014, 7:23, AGTUGO <agt...@gmail.com> escribió:
>>>>>>>>>>
>>>>>>>>>> Hola,
>>>>>>>>>>>
>>>>>>>>>>> He estado tratando de hacer implementacion solamente con panda
>>>>>>>>>>> de lo siguiente que ya tengo con numpy, pero no me ha salido nada 
>>>>>>>>>>> bien.
>>>>>>>>>>> Para los mas entradillos con pandas espero que lo siguiente sea 
>>>>>>>>>>> trivial.
>>>>>>>>>>>
>>>>>>>>>>> La entrada son datos tabulados de dos dimensiones o una matrix,
>>>>>>>>>>> la idea es formar todas las combinaciones, sin repetir y sin 
>>>>>>>>>>> sustitución,
>>>>>>>>>>> de los renglones. La pareja de renglones se ponen en un solo 
>>>>>>>>>>> renglon.
>>>>>>>>>>>
>>>>>>>>>>> Mi algoritmo actual es crear los indices de las combinaciones
>>>>>>>>>>> posibles, y despues crear la mezcla usando los indices. En codigo 
>>>>>>>>>>> sería lo
>>>>>>>>>>> siguiente.
>>>>>>>>>>>
>>>>>>>>>>> #### combinaciones.py
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> import numpy as np
>>>>>>>>>>> import itertools
>>>>>>>>>>> rows = 10
>>>>>>>>>>> columns =5
>>>>>>>>>>> data = np.arange(rows*columns).reshape(rows,columns)
>>>>>>>>>>> print('\n===Data===\n')
>>>>>>>>>>> print(data)
>>>>>>>>>>> to_mix = np.arange(rows)
>>>>>>>>>>> mixed = list(itertools.product(to_mix,to_mix))
>>>>>>>>>>> combination = [x for x in mixed if (x[0]< x[1])]
>>>>>>>>>>> combination = np.array(combination)
>>>>>>>>>>> print('\n===Combination===\n')
>>>>>>>>>>> print(combination)
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> final_data =
>>>>>>>>>>> np.hstack((data[combination[:,0],:],data[combination[:,1],:]))
>>>>>>>>>>> print('\n===Final Data===\n')
>>>>>>>>>>> print(final_data)
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>> No entiendo muy bien qué quieres hacer. Si tienes Pandas, tienes
>>>>>>>>>> Numpy.¿Por qué no simplemente haces un DataFrame usando el numpy 
>>>>>>>>>> array
>>>>>>>>>> final que has obtenido?
>>>>>>>>>>
>>>>>>>>>> Sin usar numpy (que deberías tener instalado porque tienes Pandas
>>>>>>>>>> instalado, repito):
>>>>>>>>>>
>>>>>>>>>> from itertools import combinations
>>>>>>>>>>
>>>>>>>>>> lista = [list(range(i,i+5)) for i in range(0,50,5)]
>>>>>>>>>> final = []
>>>>>>>>>> for i in combinations(range(10),2):
>>>>>>>>>>     final.append(lista[i[0]]+lista[i[1]])
>>>>>>>>>> df = pd.DataFrame(final, columns = range(10))
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Resultado:
>>>>>>>>>>>
>>>>>>>>>>> ===Data===
>>>>>>>>>>>
>>>>>>>>>>> [[ 0  1  2  3  4]
>>>>>>>>>>>  [ 5  6  7  8  9]
>>>>>>>>>>>  [10 11 12 13 14]
>>>>>>>>>>>  ...,
>>>>>>>>>>>  [35 36 37 38 39]
>>>>>>>>>>>  [40 41 42 43 44]
>>>>>>>>>>>  [45 46 47 48 49]]
>>>>>>>>>>>
>>>>>>>>>>> ===Combination===
>>>>>>>>>>>
>>>>>>>>>>> [[0 1]
>>>>>>>>>>>  [0 2]
>>>>>>>>>>>  [0 3]
>>>>>>>>>>>  ...,
>>>>>>>>>>>  [7 8]
>>>>>>>>>>>  [7 9]
>>>>>>>>>>>  [8 9]]
>>>>>>>>>>>
>>>>>>>>>>> ===Final Data===
>>>>>>>>>>>
>>>>>>>>>>> [[ 0  1  2 ...,  7  8  9]
>>>>>>>>>>>  [ 0  1  2 ..., 12 13 14]
>>>>>>>>>>>  [ 0  1  2 ..., 17 18 19]
>>>>>>>>>>>  ...,
>>>>>>>>>>>  [35 36 37 ..., 42 43 44]
>>>>>>>>>>>  [35 36 37 ..., 47 48 49]
>>>>>>>>>>>  [40 41 42 ..., 47 48 49]]
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Al parecer no es tan sencillo crear un nuevo dataframe usando
>>>>>>>>>>> los indices en panda. Espero que me puedan dar una orientación 
>>>>>>>>>>> saludos.
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> --
>>>>>>>>>>> Arturo Muñoz Tolosa
>>>>>>>>>>>
>>>>>>>>>>> _______________________________________________
>>>>>>>>>>> Python-es mailing list
>>>>>>>>>>> Python-es@python.org
>>>>>>>>>>> https://mail.python.org/mailman/listinfo/python-es
>>>>>>>>>>> FAQ: http://python-es-faq.wikidot.com/
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> _______________________________________________
>>>>>>>>>> Python-es mailing list
>>>>>>>>>> Python-es@python.org
>>>>>>>>>> https://mail.python.org/mailman/listinfo/python-es
>>>>>>>>>> FAQ: http://python-es-faq.wikidot.com/
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> Arturo Muñoz Tolosa
>>>>>>>>>
>>>>>>>>> _______________________________________________
>>>>>>>>> Python-es mailing list
>>>>>>>>> Python-es@python.org
>>>>>>>>> https://mail.python.org/mailman/listinfo/python-es
>>>>>>>>> FAQ: http://python-es-faq.wikidot.com/
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> Python-es mailing list
>>>>>>>> Python-es@python.org
>>>>>>>> https://mail.python.org/mailman/listinfo/python-es
>>>>>>>> FAQ: http://python-es-faq.wikidot.com/
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Arturo Muñoz Tolosa
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> Python-es mailing list
>>>>>>> Python-es@python.org
>>>>>>> https://mail.python.org/mailman/listinfo/python-es
>>>>>>> FAQ: http://python-es-faq.wikidot.com/
>>>>>>>
>>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> Python-es mailing list
>>>>>> Python-es@python.org
>>>>>> https://mail.python.org/mailman/listinfo/python-es
>>>>>> FAQ: http://python-es-faq.wikidot.com/
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Arturo Muñoz Tolosa
>>>>>
>>>>> _______________________________________________
>>>>> Python-es mailing list
>>>>> Python-es@python.org
>>>>> https://mail.python.org/mailman/listinfo/python-es
>>>>> FAQ: http://python-es-faq.wikidot.com/
>>>>>
>>>>>
>>>>
>>>> _______________________________________________
>>>> Python-es mailing list
>>>> Python-es@python.org
>>>> https://mail.python.org/mailman/listinfo/python-es
>>>> FAQ: http://python-es-faq.wikidot.com/
>>>>
>>>>
>>>
>>>
>>> --
>>> Arturo Muñoz Tolosa
>>>
>>> _______________________________________________
>>> Python-es mailing list
>>> Python-es@python.org
>>> https://mail.python.org/mailman/listinfo/python-es
>>> FAQ: http://python-es-faq.wikidot.com/
>>>
>>>
>>
>> _______________________________________________
>> Python-es mailing list
>> Python-es@python.org
>> https://mail.python.org/mailman/listinfo/python-es
>> FAQ: http://python-es-faq.wikidot.com/
>>
>>
>
>
> --
> Arturo Muñoz Tolosa
>
> _______________________________________________
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
>


-- 
*monoBOT*
Visite mi sitio(Visit my site): monobotblog.alvarezalonso.es
_______________________________________________
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Responder a