{"id":3243,"date":"2026-05-09T12:20:21","date_gmt":"2026-05-09T10:20:21","guid":{"rendered":"https:\/\/geekosas.com\/?p=3243"},"modified":"2026-05-23T12:48:31","modified_gmt":"2026-05-23T10:48:31","slug":"comparison-between-julia-python-and-r","status":"publish","type":"post","link":"https:\/\/geekosas.com\/index.php\/2026\/05\/09\/comparison-between-julia-python-and-r\/","title":{"rendered":"Comparison between Julia, Python, and R"},"content":{"rendered":"<p>The discussion about which language is best for data analysis can lead to conversations more passionate than topics like religion or politics. But as Data Scientists we must focus on empirical evidence; the dimensions for comparison are many: Community, Performance, Editors, Package Manager, Code Encapsulation, etc. I have evaluated several of these dimensions and find it hard to say which is best\u2014some win in one area, others in another.<\/p>\n<p><!--more--><\/p>\n<p>Of all the dimensions, I believe there are 3 that make a Data Analysis language effective, and the rest will come thanks to their communities:<br \/>\n1) Existence of a REPL console, to be able to run tests.<br \/>\n2) Performance, because if it is slow, we won&#8217;t be able to execute anything.<br \/>\n3) Number of lines to execute, because trial and error are the parents of science and each experiment cannot take too much time.<br \/>\nThere are more than three languages that meet these conditions, such as Ruby or Kotlin, but we will focus on Python, R, and Julia.<br \/>\n<strong>Python<\/strong> is a multi-purpose object-oriented language on which packages for data analysis have been developed, such as pandas for tables, scikit for Machine Learning, and Numpy for matrices, among others. Its main strength is that since any development can be done in Python, it greatly facilitates integrating models into production applications.<br \/>\n<strong>R<\/strong> is a functional language invented for data analysis. Its main data structure is DataFrames (in-memory tables) and the entire language revolves around them. Although R is focused on manipulating tables, thanks to its huge community, today you can do completely different and unexpected things with it, such as web pages (in Shiny) or REST APIs (Plumber).<br \/>\n<strong>Julia<\/strong> is another functional language, very new, similar to R but not so centered on DataFrames. Its focus is on being fast and distributed, achieving performance close to C++. The interesting thing is that while the efficient libraries of R and Python are programmed in another language, Julia is mainly written in Julia.<br \/>\nThe three languages above are <strong>high-level and have a REPL console<\/strong>, so through 4 experiments we will focus on dimensions <strong>2) Performance<\/strong> and <strong>3) Number of lines<\/strong>; on the other hand, since Julia is very new, we will have results for Julia current and 6 months ago.<\/p>\n<h3> Experiment 1 <\/h3>\n<p><strong>Aggregation on a DataFrame of 10 million records<\/strong>. Some languages have more than one library to do this, so there will be more than one result for each.<br \/>\nIn the following graph we see the times for different libraries to execute the same aggregation, where:<br \/>\n<strong>data.table<\/strong> is a library for manipulating tables programmed in C and focused mainly on being fast.<br \/>\n<strong>data.table + setkey<\/strong> &#8211; data.tables allow creating indexes; in this case, an index was created on the column that was aggregated.<br \/>\n<strong>DataFrames<\/strong> is one of the libraries for manipulating tables in Julia.<br \/>\n<strong>JuliaDB<\/strong> is one of the libraries for manipulating tables in Julia.<br \/>\n<strong>pandas<\/strong> is the library for manipulating tables in Python, based on Numpy.<br \/>\n<strong>Queryverse<\/strong> is one of the libraries for manipulating tables in Julia and aims to imitate Tidyverse.<br \/>\n<strong>tidyverse<\/strong> is actually dplyr, which, due to its easy notation, is the most popular library for manipulating tables in R.<br \/>\n<strong>Bar Plot of Execution Times<\/strong><\/p>\n<p><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"2847\" data-permalink=\"https:\/\/geekosas.com\/index.php\/es\/2020\/04\/07\/comparativa-entre-julia-python-y-r\/agregacion-2\/\" data-orig-file=\"https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2020\/04\/agregacion.png?fit=2731%2C1696&amp;ssl=1\" data-orig-size=\"2731,1696\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"agregacion\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2020\/04\/agregacion.png?fit=1024%2C636&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/www.geekosas.com\/wp-content\/uploads\/2020\/04\/agregacion-1024x636.png?resize=810%2C503&#038;ssl=1\" alt=\"\" width=\"810\" height=\"503\" class=\"alignnone size-large wp-image-2847\" srcset=\"https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2020\/04\/agregacion.png?resize=1024%2C636&amp;ssl=1 1024w, https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2020\/04\/agregacion.png?resize=300%2C186&amp;ssl=1 300w, https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2020\/04\/agregacion.png?resize=768%2C477&amp;ssl=1 768w, https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2020\/04\/agregacion.png?resize=1536%2C954&amp;ssl=1 1536w, https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2020\/04\/agregacion.png?resize=2048%2C1272&amp;ssl=1 2048w\" sizes=\"auto, (max-width: 810px) 100vw, 810px\" \/><\/p>\n<p>Clearly Julia is not the fastest; <strong>Python, which has recently optimized pandas a lot<\/strong>, was. But it is worth noting that in the last 6 months it has improved a lot, catching up with data.tables (data.tables + setkey only considers the aggregation time, not the index creation time, so it cannot be considered the winner). It should also be noted that since <strong>Julia is written in Julia, these aggregations can be programmed in a loop without losing speed<\/strong>. An example will be shown at the end in the code section.<br \/>\nThe codes to perform each of these aggregations are as follows:<br \/>\n<strong>data.table<\/strong><br \/>\n<code> dt[,list(valor = mean(valor)),by='categoria'] <\/code><br \/>\n<strong>data.table + setkey<\/strong><br \/>\n<code> setkey(dt,categoria)<br \/>\ndt[,list(valor = mean(valor)),by='categoria'] <\/code><br \/>\n<strong>DataFrames<\/strong><br \/>\n<code> aggregate(datos,:categoria,[mean]) <\/code><br \/>\nor <code> by(datos,:categoria,x-&gt;(promedio = mean(x.valor))) <\/code><br \/>\n<strong>JuliaDB<\/strong><br \/>\n<code> JuliaDB.groupby(mean, indexed, :categoria, select =:valor) <\/code><br \/>\n<strong>pandas<\/strong><br \/>\n<code> datos.groupby(['categoria']).aggregate(np.mean) <\/code><br \/>\n<strong>Queryverse<\/strong><br \/>\n<code> datos |&gt; @groupby(<em>.categoria) |&gt; @map({categoria = key(<\/em>),promedio = mean(_.valor)}) |&gt; DataFrame <\/code><br \/>\n<strong>tidyverse<\/strong><br \/>\n<code> datos %&gt;% group_by(categoria) %&gt;% summarise(valor = mean(valor)) <\/code><br \/>\n<strong>Julia using a Loop<\/strong><br \/>\n<code>  results = []<br \/>\nfor slice in groupby(datos,:categoria)<br \/>\npush!(results,(promedio = slice.categoria[1], valor =  mean(slice.valor)))<br \/>\nend<br \/>\nDataFrame(results)<\/code><br \/>\nAll are similar in length, but the syntax of Queryverse and Tidyverse are the clearest and most flexible. On the other hand, the last example with Julia has the performance of DataFrames, with maximum flexibility, but not efficiency in the number of lines.<\/p>\n<h3> Experiment 2 <\/h3>\n<p><strong> Recursion <\/strong>, specifically <strong>Fibonacci<\/strong> series programmed in a recursive function. A recursive function is one that calls itself several times to obtain a result, so this experiment measures efficiency in explicit code, without libraries.<br \/>\nIn particular, we compute Fibonacci(100), which forces us to call the function 100 times.<br \/>\nAll codes are very similar, so I will only show the code in Python:<br \/>\n<code>def fico(n,contador = 2, ant = 1, antant = 0):<br \/>\nif(n &lt;= 1):<br \/>\nreturn n<br \/>\nif(n == contador):<br \/>\nreturn ant + antant<br \/>\nelse:<br \/>\nreturn fico(n,contador+1,ant + antant,ant)<\/code><br \/>\nWhat is not so similar is the execution time. Below are the execution times for each language at two different dates. The clear loser is Python from 2020\/08\/01, which corresponded to Python 3.7.<\/p>\n<p><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"2857\" data-permalink=\"https:\/\/geekosas.com\/index.php\/es\/2020\/04\/07\/comparativa-entre-julia-python-y-r\/fibonacci\/\" data-orig-file=\"https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2019\/09\/fibonacci.png?fit=2731%2C1696&amp;ssl=1\" data-orig-size=\"2731,1696\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"fibonacci\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2019\/09\/fibonacci.png?fit=1024%2C636&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/www.geekosas.com\/wp-content\/uploads\/2019\/09\/fibonacci-1024x636.png?resize=810%2C503&#038;ssl=1\" alt=\"\" width=\"810\" height=\"503\" class=\"alignnone size-large wp-image-2857\" srcset=\"https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2019\/09\/fibonacci.png?resize=1024%2C636&amp;ssl=1 1024w, https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2019\/09\/fibonacci.png?resize=300%2C186&amp;ssl=1 300w, https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2019\/09\/fibonacci.png?resize=768%2C477&amp;ssl=1 768w, https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2019\/09\/fibonacci.png?resize=1536%2C954&amp;ssl=1 1536w, https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2019\/09\/fibonacci.png?resize=2048%2C1272&amp;ssl=1 2048w\" sizes=\"auto, (max-width: 810px) 100vw, 810px\" \/><\/p>\n<p>Now if we look at the results on a logarithmic scale (log10), we see that all three languages have improved in the last 6 months and Julia is the clear winner by more than 2 orders of magnitude. On the other hand, Python 3.8 improved a lot compared to the previous version, managing to be on par with R.<\/p>\n<p><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"2856\" data-permalink=\"https:\/\/geekosas.com\/index.php\/es\/2020\/04\/07\/comparativa-entre-julia-python-y-r\/fibonacci_log-2\/\" data-orig-file=\"https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2019\/09\/fibonacci_log-1.png?fit=2731%2C1696&amp;ssl=1\" data-orig-size=\"2731,1696\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"fibonacci_log\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2019\/09\/fibonacci_log-1.png?fit=1024%2C636&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/www.geekosas.com\/wp-content\/uploads\/2019\/09\/fibonacci_log-1-1024x636.png?resize=810%2C503&#038;ssl=1\" alt=\"\" width=\"810\" height=\"503\" class=\"alignnone size-large wp-image-2856\" srcset=\"https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2019\/09\/fibonacci_log-1.png?resize=1024%2C636&amp;ssl=1 1024w, https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2019\/09\/fibonacci_log-1.png?resize=300%2C186&amp;ssl=1 300w, https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2019\/09\/fibonacci_log-1.png?resize=768%2C477&amp;ssl=1 768w, https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2019\/09\/fibonacci_log-1.png?resize=1536%2C954&amp;ssl=1 1536w, https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2019\/09\/fibonacci_log-1.png?resize=2048%2C1272&amp;ssl=1 2048w\" sizes=\"auto, (max-width: 810px) 100vw, 810px\" \/><\/p>\n<p>Frankly, the times for each language were small, so I would only recommend Julia if your model requires calling a user-defined function many times, for example in Optimization using the gradient method.<\/p>\n<h3> Experiment 3 <\/h3>\n<p><strong>Performance on Matrices<\/strong><br \/>\nAll three languages are very powerful in matrix handling; many operations can be performed on matrices, but I chose eigenvalue decomposition to run the test. This is a relatively heavy operation.<br \/>\n<strong>Bar Plot of Times to Compute Eigenvalues<\/strong><\/p>\n<p><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"2863\" data-permalink=\"https:\/\/geekosas.com\/index.php\/es\/2020\/04\/07\/comparativa-entre-julia-python-y-r\/svd-3\/\" data-orig-file=\"https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2019\/09\/svd.png?fit=2421%2C1696&amp;ssl=1\" data-orig-size=\"2421,1696\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"svd\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2019\/09\/svd.png?fit=1024%2C717&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/www.geekosas.com\/wp-content\/uploads\/2019\/09\/svd-1024x717.png?resize=810%2C567&#038;ssl=1\" alt=\"\" width=\"810\" height=\"567\" class=\"alignnone size-large wp-image-2863\" srcset=\"https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2019\/09\/svd.png?resize=1024%2C717&amp;ssl=1 1024w, https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2019\/09\/svd.png?resize=300%2C210&amp;ssl=1 300w, https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2019\/09\/svd.png?resize=768%2C538&amp;ssl=1 768w, https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2019\/09\/svd.png?resize=1536%2C1076&amp;ssl=1 1536w, https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2019\/09\/svd.png?resize=2048%2C1435&amp;ssl=1 2048w\" sizes=\"auto, (max-width: 810px) 100vw, 810px\" \/><\/p>\n<p>We see that Julia is the fastest, but very close to R. Python, on the other hand, lags behind.<br \/>\nOn the other hand, the notation for all three cases is very similar, but I will show it both ways.<br \/>\n<strong>R<\/strong><br \/>\n<code>mat = matrix(runif(1000*1000),nrow=1000)<br \/>\nsvd(mat)<\/code><br \/>\n<strong>Julia<\/strong><br \/>\n<code>mat = rand(1000,1000)<br \/>\nsvd(mat)<\/code><br \/>\n<strong>Python<\/strong> is a bit different because it is object-oriented:<br \/>\n<code>mat = np.random.rand(1000,1000)<br \/>\nnp.linalg.svd(mat)<\/code><\/p>\n<h1>Experiment 4<\/h1>\n<p>Time to modify elements of a matrix inside a loop.<br \/>\nIn this case, in a loop we will fill the previous matrix with mat[i,j] = i + j. The times are shown in the following graph:<\/p>\n<p><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"2864\" data-permalink=\"https:\/\/geekosas.com\/index.php\/es\/2020\/04\/07\/comparativa-entre-julia-python-y-r\/fill\/\" data-orig-file=\"https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2019\/09\/fill.png?fit=2421%2C1696&amp;ssl=1\" data-orig-size=\"2421,1696\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"fill\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2019\/09\/fill.png?fit=1024%2C717&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/www.geekosas.com\/wp-content\/uploads\/2019\/09\/fill-1024x717.png?resize=810%2C567&#038;ssl=1\" alt=\"\" width=\"810\" height=\"567\" class=\"alignnone size-large wp-image-2864\" srcset=\"https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2019\/09\/fill.png?resize=1024%2C717&amp;ssl=1 1024w, https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2019\/09\/fill.png?resize=300%2C210&amp;ssl=1 300w, https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2019\/09\/fill.png?resize=768%2C538&amp;ssl=1 768w, https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2019\/09\/fill.png?resize=1536%2C1076&amp;ssl=1 1536w, https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2019\/09\/fill.png?resize=2048%2C1435&amp;ssl=1 2048w\" sizes=\"auto, (max-width: 810px) 100vw, 810px\" \/><\/p>\n<p>Python is by far the slowest, although it has improved in Python 3.8. On the other hand, since R objects are immutable, I expected worse results.<br \/>\nAgain the codes are similar, but I want to share an honorable mention in Python that allows iterating over two variables with a for loop:<br \/>\n<code>import itertools<br \/>\nfor i,j in itertools.product(range(1000),range(1000)):<br \/>\nmat[i,j] = i+j<\/code><\/p>\n<h1>Footnote<\/h1>\n<p>I did this analysis because I remembered that the last time I tried to use Julia, it was very annoying that importing libraries took a long time. This has improved, but they still take a while, especially for large libraries like Queryverse. Still, it is an interesting project.<br \/>\nOn the other hand, in general the languages are similar, but I think the main difference is Python&#8217;s object orientation, which is very evident in how Pandas DataFrames are manipulated.<br \/>\nFinally, although the performance differences may seem large, when compared to Excel, all three alternatives are fast and efficient.<br \/>\nGreetings!<\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"mh-excerpt\"><p>The discussion about which language is best for data analysis can lead to conversations more passionate than topics like religion or politics. But as Data <a class=\"mh-excerpt-more\" href=\"https:\/\/geekosas.com\/index.php\/2026\/05\/09\/comparison-between-julia-python-and-r\/\" title=\"Comparison between Julia, Python, and R\">[&#8230;]<\/a><\/p>\n<\/div>","protected":false},"author":1,"featured_media":2866,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[1],"tags":[],"class_list":["post-3243","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sin-categoria"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2019\/09\/external-content.duckduckgo.com_.jpg?fit=474%2C312&ssl=1","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p8vjqF-Qj","jetpack-related-posts":[{"id":3296,"url":"https:\/\/geekosas.com\/index.php\/2017\/05\/23\/i-will-teach-an-r-course\/","url_meta":{"origin":3243,"position":0},"title":"I will teach an R course.","author":"Daniel Fischer","date":"2017-05-23","format":false,"excerpt":"The course will be at Microsoft Chile on September 22: The R Intensive is an event designed for those who have data analysis and modeling needs in their work and want to gain in 1 day the theoretical and practical knowledge to start solving their analytical challenges with this tool.\u2026","rel":"","context":"In &quot;Sin categor\u00eda&quot;","block_context":{"text":"Sin categor\u00eda","link":"https:\/\/geekosas.com\/index.php\/category\/sin-categoria\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2016\/11\/RStudio-Ball.png?fit=1000%2C1000&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2016\/11\/RStudio-Ball.png?fit=1000%2C1000&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2016\/11\/RStudio-Ball.png?fit=1000%2C1000&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2016\/11\/RStudio-Ball.png?fit=1000%2C1000&ssl=1&resize=700%2C400 2x"},"classes":[]},{"id":3323,"url":"https:\/\/geekosas.com\/index.php\/2018\/05\/23\/what-does-machine-learning-see\/","url_meta":{"origin":3243,"position":1},"title":"What does Machine Learning see?","author":"Daniel Fischer","date":"2018-05-23","format":false,"excerpt":"Machine learning algorithms can understand problems with hundreds or sometimes thousands of dimensions, thus seeing things that the human eye could not otherwise see. But how do these methods compare when the human eye can actually see? That is why we generated a series of experiments in 2 dimensions and\u2026","rel":"","context":"In &quot;Sin categor\u00eda&quot;","block_context":{"text":"Sin categor\u00eda","link":"https:\/\/geekosas.com\/index.php\/category\/sin-categoria\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2018\/08\/1_2UjSSQwW0bns1lPIuRxccQ.png?fit=1200%2C629&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2018\/08\/1_2UjSSQwW0bns1lPIuRxccQ.png?fit=1200%2C629&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2018\/08\/1_2UjSSQwW0bns1lPIuRxccQ.png?fit=1200%2C629&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2018\/08\/1_2UjSSQwW0bns1lPIuRxccQ.png?fit=1200%2C629&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2018\/08\/1_2UjSSQwW0bns1lPIuRxccQ.png?fit=1200%2C629&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":3235,"url":"https:\/\/geekosas.com\/index.php\/2020\/05\/23\/best-practices-when-programming-with-code\/","url_meta":{"origin":3243,"position":2},"title":"Best Practices When Programming (with code)","author":"Daniel Fischer","date":"2020-05-23","format":false,"excerpt":"Best Practices When Programming (with code) Many enjoy programming and solving algorithmic mazes in their favorite language, but what nobody likes is diving into old code or even worse, code written by someone else. I've had to do it several times, sometimes it was bad, other times worse, many times\u2026","rel":"","context":"In &quot;Sin categor\u00eda&quot;","block_context":{"text":"Sin categor\u00eda","link":"https:\/\/geekosas.com\/index.php\/category\/sin-categoria\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2022\/05\/logo.png?fit=1200%2C600&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2022\/05\/logo.png?fit=1200%2C600&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2022\/05\/logo.png?fit=1200%2C600&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2022\/05\/logo.png?fit=1200%2C600&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2022\/05\/logo.png?fit=1200%2C600&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":3274,"url":"https:\/\/geekosas.com\/index.php\/2016\/05\/23\/segment-customers-step-by-step\/","url_meta":{"origin":3243,"position":3},"title":"Segment customers step by step","author":"Daniel Fischer","date":"2016-05-23","format":false,"excerpt":"Previously I wrote about neural networks (click here to see it). Neural networks and all other \"supervised methods\" are used when you have a sample of values to predict. But when you know what you want to achieve but do not have a sample of the value to predict, the\u2026","rel":"","context":"In &quot;Sin categor\u00eda&quot;","block_context":{"text":"Sin categor\u00eda","link":"https:\/\/geekosas.com\/index.php\/category\/sin-categoria\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2016\/05\/kmenas6.png?fit=620%2C539&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2016\/05\/kmenas6.png?fit=620%2C539&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/geekosas.com\/wp-content\/uploads\/2016\/05\/kmenas6.png?fit=620%2C539&ssl=1&resize=525%2C300 1.5x"},"classes":[]},{"id":3291,"url":"https:\/\/geekosas.com\/index.php\/2017\/05\/23\/movies-2016\/","url_meta":{"origin":3243,"position":4},"title":"Movies 2016","author":"Daniel Fischer","date":"2017-05-23","format":false,"excerpt":"Movies make us laugh, cry, and some... sleep, so I decided to do a small analysis on 2016 movies. As with Video Games and Data Science, we did web scraping from www.metacritic.com to generate a database, in which, for each movie we obtained the following information: Country of Origin Genres\u2026","rel":"","context":"In &quot;Sin categor\u00eda&quot;","block_context":{"text":"Sin categor\u00eda","link":"https:\/\/geekosas.com\/index.php\/category\/sin-categoria\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.geekosas.com\/wp-content\/uploads\/2017\/03\/histogramas-300x120.png?resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.geekosas.com\/wp-content\/uploads\/2017\/03\/histogramas-300x120.png?resize=350%2C200 1x, https:\/\/i0.wp.com\/www.geekosas.com\/wp-content\/uploads\/2017\/03\/histogramas-300x120.png?resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.geekosas.com\/wp-content\/uploads\/2017\/03\/histogramas-300x120.png?resize=700%2C400 2x"},"classes":[]},{"id":3321,"url":"https:\/\/geekosas.com\/index.php\/2018\/05\/23\/separate-effects-and-cohort-analysis\/","url_meta":{"origin":3243,"position":5},"title":"Separate Effects and Cohort Analysis","author":"Daniel Fischer","date":"2018-05-23","format":false,"excerpt":"In subscription businesses (Newspapers, Cell Phones, Insurance, etc...), the business is always the same: acquire a customer and then receive cash flows associated with a service provided by the company. The day the customer cancels the service is called CHURN, and the customer becomes inactive, suspending both revenue and service.\u2026","rel":"","context":"In &quot;Sin categor\u00eda&quot;","block_context":{"text":"Sin categor\u00eda","link":"https:\/\/geekosas.com\/index.php\/category\/sin-categoria\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.geekosas.com\/wp-content\/uploads\/2018\/06\/pressent-value.png?resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.geekosas.com\/wp-content\/uploads\/2018\/06\/pressent-value.png?resize=350%2C200 1x, https:\/\/i0.wp.com\/www.geekosas.com\/wp-content\/uploads\/2018\/06\/pressent-value.png?resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.geekosas.com\/wp-content\/uploads\/2018\/06\/pressent-value.png?resize=700%2C400 2x"},"classes":[]}],"_links":{"self":[{"href":"https:\/\/geekosas.com\/index.php\/wp-json\/wp\/v2\/posts\/3243","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/geekosas.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/geekosas.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/geekosas.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/geekosas.com\/index.php\/wp-json\/wp\/v2\/comments?post=3243"}],"version-history":[{"count":1,"href":"https:\/\/geekosas.com\/index.php\/wp-json\/wp\/v2\/posts\/3243\/revisions"}],"predecessor-version":[{"id":3244,"href":"https:\/\/geekosas.com\/index.php\/wp-json\/wp\/v2\/posts\/3243\/revisions\/3244"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/geekosas.com\/index.php\/wp-json\/wp\/v2\/media\/2866"}],"wp:attachment":[{"href":"https:\/\/geekosas.com\/index.php\/wp-json\/wp\/v2\/media?parent=3243"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/geekosas.com\/index.php\/wp-json\/wp\/v2\/categories?post=3243"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/geekosas.com\/index.php\/wp-json\/wp\/v2\/tags?post=3243"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}