Topic: Dopo Python? J!  (Letto 2611 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline caronte

  • python erectus
  • ***
  • Post: 221
  • Punti reputazione: 0
    • Mostra profilo
Re:Dopo Python? J!
« Risposta #30 il: Ottobre 25, 2017, 23:23 »
Premetto di non essere un programmatore, comunque faccio riferimento alla mia esperienza con R
È chiaro che R non è lineare e/o coerente come Python…ed infatti non è che ci fai , per dire, software con R.…R nasce con un unico scopo…
Comunque provo a commentare, magari poi qualcuno piu dotato, farà ulteriormente luce:

“”- = e <- sono uguali, tranne in un caso, molto specifico.””
Non vedo il dramma…

“”- implementazione standard particolarmente lenta””..
Non ho capito…ma dipende da cosa ci devi fare..ad es. non ha le list comprehension ma funzioni dedicate..in R se usi un for loop probabilente sei fuori strada .

“”- importare una libreria puo' cambiare le funzioni "built-in", (apply(ice.cream, 2, is.numeric) da' un risultato sbagliato, mentre aggiungere library(Hmisc) sopra lo fa funzionare)””
Vero..ma in rari casi (ed Hmisc non è uno di questi)..piu che altro sono le librerie esterne che si pestano i piedi in questo senso..ma invero  ti avverte durante il loading..
ps. Basta cmq chiamare la funzione col suo name’scope “library::fucntion()

“” conversioni implicite. apply(...) converte automaticamente gli argomenti in matrici/vettori, anche se sono dataframe (che sono una bestia diversa).””

Giusto per puntualizzare:  apply non può ritornare alcuna matrice(quella è sapply), al max apply ti ritorna , all’occorrenza, una lista..
Ma comunque,  scusami per cosa l’usavi R? è chiaro che se usi apply vuoi applicare una funzione alle rows o column di un df, o a liste o su array, che alla  fine lavori con  vettori)., invece di looparci direttamente: quindi cosa ti aspetti che ti ritorni? Se ti riserve il dataframe ci crei su una wrapper…

“- 4/5 (non ricordo) modi per accedere ad una colonna di un dataframe.”
Vero..di base sono 3, ma possono tornare utili a seconda dei casi..(ma stiamo parlando dei moduli base..ci sono librerie dedicate che consentono approcci piu funzionali e performanti)

“”- N/A dappertutto quando si importano dati non completi, ma nessun warning. NaN e' una cosa diversa ma is.na(x) ritorna TRUE se x e' NaN. “”
Perché mai dovrebbe darti un warning quando carichi ad esempio dei dati – o dataframes che hanno NA in alcune celle?..Na ti indica chiaramente che per quella particolare osservazione relativamente ad una variabile, non sono stati potuti osservare o prelevare dei valori, ma questo fa parte dell’analisi iniziale ed è piazzato li da chi gli ha raccolti; e comunque sono info che ti accompagneranno nel workflow,  quando deciderai se è il caso di imputare i dati mancanti (scegliendo la modalità piu consona al caso) o no…
NaN invece …può essere dovuto a diversi errori di compilazione delle tabelle o altri problemi..quindi è chiaro che la prima cosa da fare quando carichi i dati è un summary che ti dice tutte queste belle  cose; poi cambi i valori di Nan in NA e prosegui..tanto alla  fine li tratti alla stessa maniera.

- mille funzioni con nomi tipo sapply, tapply, vapply, etc.
# ognuna fa cose differeni, magari  servono...

- oop particolarmente orrenda (direte voi: e' un linguaggio funzionale, cosa pretendi? Posso rispondere sia con CLOS sia con OCaml).
Scabrosa direi…boh..,prova  a fare data analysis con OCaml ..
ps. attendiamo OR  :)

- e, ultimo, aggiungere parentesi in piu' attorno alle operazioni rallenta l'esecuzione.
È chiaro…dillo a Lisp

Poi ***Aezio : bhe si il  recycling può diventare un problema..ma se lo conosci..

Puoi chiamare la funzione anche senza gli argomenti?
Si ok, ma non la vedo drammatica, chiaro è che se chiami una funzione con piu argomenti del previsto di solleva errore..
Essi  ci sono anche tante altre “sottigliezze” ;)) ma alla fine sono aspetti con cui impari a convivere tranquillamente…
Diciamo che la vera forza di R sta nelle sue librerye…lo stesso data frame, ripreso da pandas, è stato rimpiazzato (anche se molti metodi lo richiedono ancora) dal tibble o dal data.table…molto piu snelli e nettamente  piu “veloci”…
Inoltre la situazione si sta stabilizzando con librerie potenti come tydiverse/magrittr (che raccoglie tidyr, dplyr, e compari…) per manipolare strutture come tibble…anche se pandas effettivamente in questa direzione gli sta appresso. Comunque  per il preprocessing dei dati trovo R molto piu veloce ed elastico.

La cosa che vede R molto piu avanti di Python sono chiaramente le numerose librerie statistiche dedicate..e soprattutto la visualizzazione  / grafici dei dati..li R indubbiamente si beve Python..che sta cercando di avvicinarsi se non sbaglio con plotine o roba del genere all’ inarrivabile ggplot2.

Inutile precisare che  tutto questo discorso è relegato esclusivamente all'ambito dell'analisi dati e compagnia bella

Offline riko

  • python deus
  • *
  • moderatore
  • Post: 7.453
  • Punti reputazione: 12
    • Mostra profilo
    • RiK0 Tech Temple
Re:Dopo Python? J!
« Risposta #31 il: Ottobre 29, 2017, 00:40 »
Senti... reitero. R, come linguaggio, e' uno scherzo. Ed e' inevitabile. E' come fare disegnare un API ad un fisico teorico abituato a matlab.
Appena provi ad usarla fuori da una repl, ti chiedi se il tizio fosse ubriaco.

Tutta la lista di "diffetti"... sopravvivere si sopravvive con tutto. Il punto fondamentale e' che quando tu compari un linguaggio a Python, come "pulizia" mi viene in mente un solo linguaggio che batte Python dove Python si dichiara forte, e alcuni altri linguaggi che competono (stesso focus sulla semplicita', diversa definizione di semplicita'). E in particolare R pulito pulito non e'.  Cioe'... qualcuno ha deciso che puoi fare override del "blocco". Che ovviamente e' un'idea geniale perche' apre ad una serie di tecniche di metaprogrammazione volte fondamentalmente a creare DLS snelli.

Solo che scrivere DSL snelli e' un bel vantaggio quando piu' o meno vivi nella REPL (oppure ti trovi a macinare problemi ben definiti "in batch" evolutisi dalla REPL). Che e' l'ambito di R. E che va bene. Poi cominci a farci del software engineering e cominciano le lacrime.

Ed e' una filosofia pervasiva. Al tipo che fa analisi numerica tipicamente interessa fare gestione dell'errore pass-through. Tipicamente non avere fallimenti, e piuttosto avere un po' di dati a nan. Al tizio che fa sistemi di produzione vanno bene invece cose che vengono giu' rapidamente in modo spettacolare, perche' i gray failures sono una minaccia e c'e' sempre lo spettro di corrompere dati. Ambiti diversi.

Offline caronte

  • python erectus
  • ***
  • Post: 221
  • Punti reputazione: 0
    • Mostra profilo
Re:Dopo Python? J!
« Risposta #32 il: Ottobre 29, 2017, 20:32 »
Wuè attenzione, forse mi sono spiegato male, non ho mai affermato che R è un linguaggio superiore a Python..e ci mancherebbe pure; R non ha la sua( di Python) coerenza., ma comqunue nel suo habitat non lo vedrei proprio come "skerzo"  :).

Come hai detto tu, R “vive” nella sua REPL..non vedo chi voglia fare del software engineering con R, non avrebbe senso…R è un tool , un ottimo tool, in mano a per lo piu statistici e loro derivati e che serve SOLO a fare quello; in questo ambito R e Python ormai la fanno da padroni..(Python è cresciuto sempre piu come utilizzo, non v’è dubbio, e spesso in taluni ambienti (vedi i kernel su Kaggle) ha pure superato R)
Ma proprio perché R ha il suo scope, è chiaro che è steroidizzato, passatemela, con numerose librerie di statistica , e data analysis in generale, che Python ovviamente non ha e che rendono il”lavoro” molto piu veloce, immediato per certi tasks.
Per quanto riguarda la manipolazione dei dati, pandas è molto vicino a R ormai..tant’è che numerosi metodi sono gli stessi..nel senso che hanno pure lo stesso nome, solo che Python usa la dot, R le pipe... 8);  cioè quello che fai con pandas lo fai con R..ma sinceramente trovo , per alcuni aspetti, piu immediato farle con R, sebbene la sintassi di Python sia pura  “lasagna”…
Poi, mi ripeto ancora, c’è la visualizzazione grafica dei dati, che vede R al momento, molto piu flessibile e potente delle librerie in dotazione a Python..ovvero con ggplot2.

Devo dire che ultimamente mi sto ridigendo su Python, e al cosa mi aggrada parecchio, dove molti algoritmi di deep learning sono stati ottimizzati “su misura”…sebbene anche in questo caso, Keras, una wrapper per tensorflow e theano, sia stata implementata, guarda un po, anche in R; --> quindi , per exzembio, se mi serve un modello di DL mi rivolgo piu volentieri al  :py:

Offline riko

  • python deus
  • *
  • moderatore
  • Post: 7.453
  • Punti reputazione: 12
    • Mostra profilo
    • RiK0 Tech Temple
Re:Dopo Python? J!
« Risposta #33 il: Ottobre 31, 2017, 15:51 »
Wuè attenzione, forse mi sono spiegato male, non ho mai affermato che R è un linguaggio superiore a Python..e ci mancherebbe pure; R non ha la sua( di Python) coerenza., ma comqunue nel suo habitat non lo vedrei proprio come "skerzo"  :).

Si, certo. Ma non e' che questo renda i difetti qualcos'altro. Restano difetti, non cosi' critici in quell'ambito, e controbilanciati da cose molto positive (che hai menzionato). Quindi la gente lo usa e fa bene a farlo.

Pero' resta il fatto che io R me lo sono pure studiato e lo ho usato. Ci ho anche fatto hacking spinto con la metaprogrammazione. Pero' tutt'ora ~ rimane un po' magico per me. Magari ho studiato sui testi sbagliati o mi sono focalizzato sulle cose sbagliate.

Offline caronte

  • python erectus
  • ***
  • Post: 221
  • Punti reputazione: 0
    • Mostra profilo
Re:Dopo Python? J!
« Risposta #34 il: Ottobre 31, 2017, 22:47 »
“” Pero' tutt'ora ~ rimane un po' magico per me. Magari ho studiato sui testi sbagliati o mi sono focalizzato sulle cose sbagliate.””

beh.. non credo proprio..è chiaro che tu l’abbia  studiato probabilmente da “software engineer” ed è altrettanto chiaro che ti siano  saltate all’occhio  tutte quelle --chiamiamole pure “magagne” --, che agli occhi di un programmatore avanzato e /o appunto di un SE, sicuramente  possono fare anche ribrezzo..questo non lo metto indubbio;

cioè   io neanche ci penso  a farci su metaprogrammazione (al di la del fatto che non ne avrei le “competenze”)….quindi è chiaro che mi limito ad usarlo da “pseudo-analista”, ovvero sfrutto i numerosi tools che mi mette a disposizione ;
x es.  grazie appunto alle ottime librerie,  spesso le cose “si risolvono” in una sola chiamata a funzione …no, per dire...