Εμφάνιση αναρτήσεων με ετικέτα R. Εμφάνιση όλων των αναρτήσεων
Εμφάνιση αναρτήσεων με ετικέτα R. Εμφάνιση όλων των αναρτήσεων

Τρίτη, 24 Ιουλίου 2018

Σε αυτή την στάση κατεβαίνω...

Εκεί στα τέλη του 2014, επηρεασμένος από το hype που κυριαρχούσε (και κυριαρχεί ακόμα) και από τη θέληση μου για εξέλιξη, προσωπική κι επαγγελματική, αποφάσισα να ανέβω στο τρένο που λέγεται Data Sciense... Μέχρι τότε είχα μια δεκαετή καριέρα ως DWH/ETL Developer, είχα μόλις εισέλθει στον κόσμο των Analytics (βλέπε Qlikview) και είχα διάθεση για κάτι νέο και μεγάλο, κατάλληλο για την νέα επαγγελματική αρχή που είχα κάνει από την αρχή εκείνης της χρονιάς στην Τράπεζα Πειραιώς...Είχαν προηγηθεί άρθρα που ανακήρυτταν την δουλειά του Data Scientist ως την πιο sexy του 21ου αιώνα, καινούργια buzzwords που συναντούσες όλο και συχνότερα όπως Big Data, Hadoop, MapReduce και η υπόσχεση ότι το Data Sciense θα διαμορφώσει το μέλλον τόσο σε προσωπικό όσο και παγκόσμιο επίπεδο... 

Ασχολήθηκα πολύ με αυτό, επένδυσα και χρήμα και χρόνο... Ξόδεψα τουλάχιστον 2 χρόνια από τη ζωή μου σε αυτή την υπόθεση προσπαθώντας να γίνω όσο καλύτερος γινόταν... Ήξερα από την αρχή ότι η Στατιστική, ένα βασικό όπλο στο οπλοστάσιο ενός Data Scientist, όχι δεν ήταν απλά το δυνατό μου σημείο αλλά είχα μια βασική αντιπάθεια σε αυτή, πίστευα όμως ότι θα καταφέρω να προσεγγίσω τον ρόλο δίνοντας βάρος στο programming, το άλλο βασικό skill ενός Data Scientist... Έκανα πράγματα για τα οποία είμαι περήφανος (link, link) και σίγουρα έμαθα να σκέφτομαι και με τρόπους που ως τότε αγνοούσα... 

Προσπάθησα να φέρω αυτή τη νέα γνώση στον χώρο εργασίας μου αλλά δυστυχώς δεν τα κατάφερα... Δεν έχω απάντηση σε αυτή την ερώτηση, το γιατί δεν τα κατάφερα... Ίσως δεν ήταν ώριμες οι συνθήκες στον οργανισμό που εργαζόμουν τότε, ίσως εγώ δεν κατάφερα να πείσω τους σωστούς ανθρώπους για την χρησιμότητα της γνώσης μου, τα social και communication skills δεν ήταν ποτέ το δυνατό μου σημείο... Η αλήθεια είναι ότι ήδη από τότε είχα δεύτερες σκέψεις για αυτό που προσπαθούσα να εξελίξω σαν μια νέα καριέρα... Το αντικείμενο μου φαινόταν υπέρ το δέον ακαδημαϊκό σε πολλά πράγματα ενώ στηριζόταν σε ένα mindset αρκετά διαφορετικό από αυτό που μου ήταν οικείο... Ο ρόλος του Data Scientist είναι ένας ρόλος που ακροβατεί μεταξύ του business και του IT αλλά πατάει πιο γερά στην business πλευρά του... Αυτό δεν μου άρεσε... Ξέρω τι είμαι, τι θέλω να είμαι και αυτό δεν είναι ακόμα ένας χαρτογιακάς... Πιστεύω ακράδαντα ότι η ουσία βρίσκεται κυρίως στη δημιουργία του προϊόντος, είτε αυτό λέγεται software είτε αυτοκίνητο, και όχι στην διαχείριση του, παρόλα αυτά συνέχισα να προσπαθώ... 

Η αλλαγή χώρου εργασίας και industry πριν από 1,5 χρόνο ήταν μια δεύτερη ευκαιρία να παίξω ξανά με το χαρτί που λεγόταν Data Sciense, το είδος της εταιρείας που εργάζομαι πλέον είναι από τα ιδανικότερα για την ανάπτυξη αυτού του ρόλου... Δυστυχώς τα πράγματα δεν εξελίχθηκαν όπως έλπιζα να εξελιχθούν για λόγους που δεν είναι της παρούσης να αναλύσουμε, ίσως να είναι ίδιοι και με αυτούς που δεν μου επέτρεψαν να ασκήσω τον ρόλο του Data Scientist και στην Τράπεζα, ίσως και όχι... Η ουσία είναι ότι το Data Sciense και η R μπήκαν στον ράφι, παρά τις απέλπιδες προσπάθειες μου να κρατήσω την γνώση μου και το ενδιαφέρον  μου ζωντανό παρακολουθώντας κι άλλα courses (επί πληρωμή) και στοχεύοντας σε νέα certifications... Είμαι τύπος learn by doing κι επίσης τύπος που χρειάζεται να ασχολείται με κάτι για να μην το χάσει/ξεχάσει, η μνήμη μου σε πολλά πράγματα είναι μνήμη χρυσόψαρου... 

Παρά τις προσπάθειές μου να κρατήσω την φλόγα αναμμένη, όλα μου φώναζαν παραίτηση κι έτσι συνεπικουρούμενος και από τις δύσκολες καταστάσεις που ζω από το Πάσχα και μετά, πήρα την απόφαση να ξεγράψω τα λεφτά που έχω δώσει μέχρι τώρα και να διακόψω το δεύτερο certification μου το οποίο έκανα εδώ κι ένα χρόνο, στην κυριολεξία μια στροφή πριν το τέλος... Ξέρω πολύ καλά ότι για αυτή την περίοδο τουλάχιστον δεν θέλω να ξανά ασχοληθώ με predictive models, machine learning, recommendation systems και τράβα κορδέλα... Κάνω μια επιλογή, ενδεχομένως λανθασμένη, αφού στον χώρο που κινούμαι όντως το Data Sciense και το Machine Learning είναι τα απόλυτα trends αλλά δεν μπορώ να κάνω αλλιώς, δεν το σηκώνει ο οργανισμός μου για να το πω απλά, στο μέλλον ίσως να το ξαναπροσπαθήσω, τώρα δεν θέλω... 

Αυτό που κάνω τώρα αυτές τις μέρες είναι να παρακολουθώ το curriculum του freeCodeCamp και όπου με βγάλει... Πολλοί ίσως να σκεφτούν ότι αργά θυμήθηκα να κάνω καριέρα web developer, αφενός ποτέ δεν ξέρεις κι αφετέρου με βοηθάει να κρατάω το μυαλό μου σε εγρήγορση (θα μου ήταν χρήσιμο να μάθω λίγη Javascript) χωρίς να με αγχώνει αφού είναι self paced και δωρεάν.... Άσε που ότι και να μάθεις είναι πάντα για καλό ...

Παρασκευή, 3 Ιουνίου 2016

R - Πρόσβαση σε μια βάση δεδομένων με το package RODBC ...

Μπορεί δουλεύοντας με την R να χρησιμοποιούμε σε πολύ μεγάλο βαθμό ως data sources διάφορα flat files και γενικότερα αδόμητη πληροφορία αλλά θα έρθει η στιγμή εκείνη που θα χρειαστεί να κάνουμε την R να "μιλήσει" με μια ή περισσότερες βάσεις δεδομένων... Υπάρχουν διάφορα packages που παρέχουν τη διεπαφή μεταξύ της R και μιας συγκεκριμένης βάσης δεδομένων όπως το RMySQL ή το ROracle, υπάρχει όμως ένα package το οποίο δεν database specific αλλά υποστηρίζει τη διεπαφή με όλες τις βάσεις δεδομένων, συμπεριλαμβανομένων του SQL Server και της DB2, αρκεί να υπάρχει ένα σχετικό ODBC connection...

Το package αυτό ονομάζεται RODBC και μπορείτε να το βρείτε και να το εγκαταστήσετε από το CRAN... Είναι πολύ απλό και straightforward στην χρήση του, τα βασικά functions του μπορείτε να τα δείτε κι εδώ... Όπως θα δείτε, δίνει δυνατότητες πλήρους manipulation της βάσης (insert, update, delete) κι όχι μόνο ανάγνωση των δεδομένων... Το χρησιμοποίησα στα πλαίσια ενός project που απαιτούσε την χρήση ενός μεγάλου όγκου δεδομένων τα οποία βρίσκονται σε μια DB2 στημένη πάνω σε ένα σύστημα AS/400 και λειτούργησε άψογα, με πολύ καλό performance... Το script που χρησιμοποίησα ήταν κάπως έτσι:


Για να εξηγήσω λίγο τι έχω κάνει, έχω περάσει τα credentials του χρήστη που χρησιμοποιώ για να συνδεθώ στη βάση σε ένα tab delimited αρχείο με συγκεκριμένη γραμμογράφηση και αφού τα διαβάσω τα περνάω σε variables που χρησιμοποιώ μετά στο connection string... Επίσης, δεν έχω περάσει το SQL query απευθείας στην function sqlQuery, προτίμησα λόγω του μεγέθους του που θα κατέστρεφε την εικόνα του κώδικα και θα τον έκανε πολύ δυσανάγνωστο, να το έχω σε ένα txt αρχείο το οποίο διαβάζω με την readLines και κατόπιν δημιουργώ το query σαν ένα μεγάλο string... Εδώ θα χρειαστεί λίγο προσοχή με τα spaces και τα line breaks στο πως θα περάσετε τον SQL κώδικα στο txt αρχείο, θυμηθείτε ότι δημιουργούμε ένα string που θα πρέπει να μπορεί να το κάνει parse η SQL...

Θυμηθείτε να κλείνετε πάντα το connection όταν τελειώνετε τη δουλειά σας, είναι σημαντικό για να μην προκαλέσετε καθυστερήσεις και προβλήματα στη βάση...

Ελπίζω να βρείτε χρήσιμο το RODBC, καλή δουλειά!

Πέμπτη, 26 Μαΐου 2016

Κοίτα μαμά, τα κατάφερα, είμαι Data Scientist...

17 μήνες μετά, με ξενύχτια, με διάβασμα, με κούραση, με πολλές ώρες πάνω από τον υπολογιστή, είτε στο σπίτι είτε στα Starbucks της πλατείας όπου κατέφευγα για λίγη ησυχία για να μπορέσω να μελετήσω... Αυτό που ξεκίνησε το Γενάρη του 2015 τελείωσε σήμερα το πρωί, κατάφερα και ολοκλήρωσα το Data Sciense Specialization που προσφέρεται από το Coursera και το JHU με βαθμό 95% , όχι κι άσχημα νομίζω... :)

Ήταν μια πολύ ωραία εμπειρία, το ευχαριστήθηκα πολύ, έμαθα καινούργια πράγματα, απέκτησα μια διαφορετική οπτική πάνω στην έννοια της πληροφορίας όπως την γνώριζα από την μέχρι τώρα επαγγελματική μου εμπειρία, ήταν η επίτευξη ενός στόχου που είχα θέσει στον εαυτό μου για να αναπληρώσω (ως ένα βαθμό τουλάχιστον) το μεταπτυχιακό που δεν έκανα ποτέ μου...

Certification

Υ.Γ. Το πιστοποιητικό, προφανώς, έχει τροποποιηθεί λιιιιιίγο... :)

Τετάρτη, 18 Μαΐου 2016

R - Πώς να δημιουργήσεις ένα κενό plot...

Έστω ότι για κάποιο λόγο, προγραμματίζοντας σε R, σε κάποια στιγμή υπάρχει η ανάγκη να δημιουργήσετε ένα κενό plot, κάτι σαν place holder ή για να αποτρέψετε την εφαρμογή σας να δείχνει ασυναρτησίες ή errors στο "κανονικό" σας plot... Σε εμένα η ανάγκη προέκυψε όταν φτιάχνοντας ένα Shiny application, ήθελα ένα συγκεκριμένο plot να μην δείχνει τιμές όταν το input περιλαμβάνει συγκεκριμένες τιμές που δεν θα είχαν έτσι κι αλλιώς νόημα.... 

Μια καλή λύση είναι όταν έρχονται αυτές οι συγκεκριμένες τιμές να μην γίνεται render το "κανονικό" plot αλλά ένα άλλο, κενό που απλά θα καταλαμβάνει τον σχετικό χώρο πάνω στο application...

Η λύση αυτή μπορεί να επιτευχθεί είτε δημιουργώντας ένα κενό plot το οποίο λειτουργεί σαν ένα place holder:


...είτε δημιουργώντας ένα plot χωρίς observations το οποίο όμως γίνεται κανονικά visualized όπως για παράδειγμα υλοποιεί ο παρακάτω κώδικας:


Ενημερωτικά, εγώ χρησιμοποίησα το πρώτο code snippet διότι θεωρώ ότι ταίριαζε καλύτερα σε αυτό που προσπαθούσα να παρουσιάσω... :)

Κυριακή, 17 Απριλίου 2016

Data Science specialisation capstone project...

Αύριο ξεκινάει το τελευταίο μέρος της προσπάθειας που ξεκίνησε τον Ιανουάριο του 2015 με στόχο το Data Science specialisation από το Coursera και το JHU... Για τους επόμενους δύο μήνες θα δουλεύω πάνω στο capstone project  του course, της πτυχιακής εργασίας όπως θα λέγαμε ελληνιστί... Ελπίζω να πάνε όλα καλά, χωρίς απρόοπτα και στα μέσα του Ιουνίου να έχω αποκτήσει τον τίτλο του Data Scientist...

Παρασκευή, 19 Φεβρουαρίου 2016

Outersect(), το αντίστροφο της function intersect() της R...

Πρόσφατα κατά τη διάρκεια μιας ανάλυσης έπρεπε να συγκρίνω δύο data frames για να εξακριβώσω αν υπήρχαν variables που δεν ήταν κοινά και στα δύο... Γνώριζα ότι υπάρχει η intersect() η οποία βρίσκει τα κοινά στοιχεία μεταξύ δυο vectors και η setdiff() η οποία βρίσκει τα μη κοινά στοιχεία ενός vector ως προς ένα άλλο, εγώ όμως ήθελα μια function που να εντοπίζει τα μη κοινά στοιχεία και των δύο vectors... 

"Google is your friend", λένε και η λύση βρέθηκε σε ένα άρθρο που διάβασα στο R - bloggers... Σε αυτό το άρθρο λοιπόν παρουσιάζεται μια custom function η outersect() η οποία χρησιμοποιώντας την sort() και την setdiff() κάνει αυτό ακριβώς που χρειαζόμουν, εντοπίζει τα μη κοινά στοιχεία δυο vectors... Η σύνταξη της είναι πολύ απλή και κατανοητή και η χρήση της πανεύκολη, τρεις γραμμούλες κώδικα που λύνουν τα χέρια...

Δευτέρα, 9 Νοεμβρίου 2015

Πώς να καθαρίσουμε το workspace με ένα μόνο command - R...

Θα υπάρξουν φορές δουλεύοντας με την R που θα βρεθείτε με ένα workspace γεμάτο variables τις οποίες δεν χρειάζεστε αλλά θέλετε να συνεχίσετε τη δουλειά σας με ένα άδειο workspace... 

Υπάρχουν δυο τρόποι να το κάνετε αυτό...

Ο πρώτος είναι να κλείσετε το session που δουλεύετε χωρίς να σώσετε τα περιεχόμενα του workspace στο .RData file... Ο τρόπος αυτός όμως έχει τα μειονεκτήματα ότι πρέπει να ξαναφορτώσετε από την αρχή όλα τα packages τα οποία είναι απαραίτητα για την ανάλυσή σας και ότι πρέπει να ξαναδηλώσετε το working directory...

Ο δεύτερος τρόπος είναι πιο απλός και σύντομος και περιλαμβάνει μόνο το παρακάτω command:


Το command αυτό διαγράφει μόνο τα variables που περιέχει το workspace αφήνοντας το απολύτως κενό χωρίς όμως να επηρεάζει τα loaded packages ή άλλα preferences που σχετίζονται με το current session θέλει όμως προσοχή στην χρήση του καθώς όπως είπαμε διαγράφει πλήρως το workspace...

Κυριακή, 8 Νοεμβρίου 2015

Αναζητώντας χώρο και χρόνο...

Ο ήλιος λάμπει, η Μεσογείων είναι άδεια και έτοιμη να υποδεχτεί σε λίγες ώρες του πρώτους δρομείς που θα φτάσουν από τον Μαραθώνα... Πριν από δύο χρόνια τέτοια μέρα είχα πάρει το ποδήλατο και κατέβηκα μέχρι το Καλλιμάρμαρο για να δω τον τερματισμό και να νιώσω το vibe της ημέρας, σήμερα είμαι από τις 9 παρά στο Starbucks της Αγίας Παρασκευής και κάνω μια απέλπιδα προσπάθεια να παραδώσω την εργασία μου για την πρώτη εβδομάδα του course Regression Models... Το να βρεις χώρo και χρόνο για επιμόρφωση όταν έχεις δύο μικρά παιδιά, μερικές φορές είναι δύσκολο... :)

Δευτέρα, 26 Οκτωβρίου 2015

Data manipulation χρησιμοποιώντας SQL statements στην R - sqldf...

Το να μάθεις μια καινούργια γλώσσα προγραμματισμού ή ένα καινούργιο framework, σημαίνει κάποιες φορές ότι πρέπει να μάθεις να σκέφτεσαι με διαφορετικό τρόπο από αυτόν που έχεις συνηθίσει να σκέφτεσαι μέχρι τώρα... H απόφαση μου να μάθω R και να μπω στον κόσμο του statistical programming σήμαινε ότι έπρεπε να βγω από το comfort zone που βρισκόμουν τόσα χρόνια και να μάθω καινούργια κόλπα... Για εμένα και πολλούς άλλους που προερχόμαστε από ένα κόσμο γεμάτο databases και data warehouses το να γράψουμε ένα SQL script ή κάποια prodecure για να διαχειριστούμε τα δεδομένα μας είναι πολύ απλό, όταν όμως προσπαθείς να κάνεις κάτι τέτοιο μέσα από την R, τότε πρέπει να σκεφτείς και να πράξεις με διαφορετικό τρόπο... Υπάρχουν όμως στιγμές που θες να κάνεις κάτι γρήγορα και δεν έχεις χρόνο για να εκπαιδεύσεις τον εαυτό σου να σκέφτεται με R τρόπο και ίσως δεν θέλεις κιόλας να το κάνεις διότι θεωρείς ότι ο R τρόπος δεν είναι ούτε γρήγορος, ούτε αποδοτικός... Ευτυχώς υπάρχει το sqldf  που μας λύνει τα χέρια...

Το sqldf  όπως λέει και τo Introduction του πακέτου στο GitHub είναι:
...sqldf is an R package for runing SQL statements on R data frames, optimized for convenience. The user simply specifies an SQL statement in R using data frame names in place of table names and a database with appropriate table layouts/schema is automatically created, the data frames are automatically loaded into the database, the specified SQL statement is performed, the result is read back into R and the database is deleted all automatically behind the scenes making the database's existence transparent to the user who only specifies the SQL statement...
Με λίγα λόγια, το sqldf μας δίνει τη δυνατότητα να χειριστούμε τα data frames μας σαν πίνακες μιας σχεσιακής βάσης δεδομένων και να τους προσπελάσουμε γράφοντας κλασσικά και αγαπημένα SQL queries...

Ένα μικρό παράδειγμα είναι το παρακάτω...

Έστω ότι θέλουμε να προσθέσουμε μια επιπλέον κολόνα στο data frame που δουλεύουμε για να χαρακτηρίσουμε κάθε observation ανάλογα με το περιεχόμενο μιας συγκεκριμένης variable...

Χρησιμοποιώντας την R, χωρίς κάποιο πρόσθετο package, θα μπορούσαμε να το κάνουμε κάπως έτσι:



Χρησιμοποιώντας το sqldf  θα μπορούσαμε να το κάνουμε έτσι:


Το πώς θα δουλέψει τελικά ο καθένας είναι θέμα γούστου και εξοικείωσης...

Αν θέλετε λεπτομέρειες, documentation και source κώδικα θα βρείτε το sqldf  τόσο στο GitHub όσο και στο CRAN...