
This video provides an overview of the entire course.
Go to Julia webpage and download version.
Install on computer
Make symbolic links
Get Julia Syntax Highlight.
Explore navigation
Introduce the Read Eval program loop interface.
Function and string completion
As a numerical language, numbers are central to Julia’s appeal. This video will be an introduction to numbers, but we will not go into the full depth, as that will require a complete understanding of the Julia type system.
Explore different ways to create or express numbers
Deal with integers and gotchas; bit sizes, division, and remainders
Perform common operations with numbers
In this video, we’ll cover how to use strings in the Julia programming language.
Explore different ways to create and format strings
Understand the different ways of accessing one or more characters in a string
Explain how UTF8 encoding affects the way strings are used
Arrays are a big topic in Julia, but this video will cover only the ways that are common to use arrays in mainstream languages. In Julia, we can do quite a lot more with arrays.
Create arrays in many different ways
Access one or more elements in an array in different ways
Perform common operations such as adding and removing elements
Control flow statements in Julia are quite similar to other mainstream languages. They are used to alter the sequence of evaluated expressions.
If statements and while loops should be familiar, except they are expressions
Look at all the ways we can iterate with a for loop
Create arrays from comprehensions
Functions are central to Julia, as there are no classes with methods. So all code is located in functions. This will just be an introduction to the different ways which we define functions in Julia.
Define simple one line functions
Understand anonymous functions
View an example of creating functions consisting of multiple source code lines
Variables in Julia are handled in similar ways to other dynamic languages. However, there are some unique differences in how types are handled.
Get to know naming rules, for example, characters you can use in an identifier
Understand type annotations, associating type information with a variable
Understand scoping rules, visibility of variables in different scopes
A dictionary is a versatile datatype with many uses. It is also known as a map in some other programming languages. It allows us to access values using keys, which would typically be strings or numbers.
Know the different ways of creating a dictionary
Understand the common dictionary operations
Loop over individual elements in the dictionary
We’ll solve some practical problems within the field of computational biology to get some practical experience building your own functions.
Understand the different ways of creating a dictionary
Know the common dictionary operations
Loop over individual elements in the dictionary
To learn more about types we need to develop some methods to inspect types and learn more about them. How are they related and what fields do they contain?
Learn how to find super types and subtypes of a particular type
Print out a type hierarchy
Inspect internals of a type such as byte size and contained fields
We will do a study of type hierarchies and the relationship between functions and types in Julia.
Introduce the concept of methods and their relationship to functions and types
Experiment with methods having different typed arguments
Experiment with methods having different number of arguments
This video is about conversion and promotion, concepts closely related to how programming languages deal with numbers of different types.
Learn about when conversion happens behind the scenes
We will build our own conversion function to learn how conversion works
Understand how promotion is implemented and how you can create your own promotion functionality
Learn how to create your own Julia types by building types and functions to handle some of the common operations in a 2D drawing package.
Create a concrete type to represent a circle
Create more types with a shared abstract type
Look at how abstract types can be leveraged when creating functions
To learn more about types we need to develop some methods to inspect types and learn more about them. How are they related and what fields do they contain?
Learn how to find super types and subtypes of a particular type
Print out a type hierarchy
Inspect internals of a type such as byte size and contained fields
This video will cover networking in Julia. It will be similar to file IO, using many of the same functions and abstract types. The major difference is the need to deal with latency.
Learn simple Unix tools to simulate simple clients and servers
Connect as a client to a server in Julia
Create a simple server in Julia by running code asynchronously
This video will cover how you read and write files storing tables of data, where the elements are delimited by tabs, comma, colon, and so on.
Read a tab delimited file containing strings and different number types
Read and write files with homogenous data, for example, only integers
Deal with descriptive headers for each data column in a CSV file
How do you manage a program made up of hundreds of functions and types so their names don’t collide and you don’t lose track of what is what?
You split the program into files which can be loaded individually
Organize the collections of files into separate modules to avoid naming conflicts
Import and use your modules in your main program
This video will cover networking in Julia. It will be similar to file IO, using many of the same functions and abstract types. The major difference is the need to deal with latency.
Learn simple Unix tools to simulate simple clients and servers
Connect as a client to a server in Julia
Create a simple server in Julia by running code asynchronously
This video will cover how you read and write files storing tables of data, where the elements are delimited by tabs, comma, colon, and so on.
Read a tab delimited file containing strings and different number types
Read and write files with homogenous data, for example, only integers
Deal with descriptive headers for each data column in a CSV file
Learn how to design common interfaces for multiple types in Julia, and use these interfaces to implement as well-known object-oriented design pattern.
Introduce expressions and expression trees
Design an interface to represent expressions
Contrast explicit Java style interfaces with implicit interfaces as in Julia
You will learn interfaces and object-oriented design further by building a maze using the object-oriented design pattern, builder.
Discuss interfaces for representing the components of a maze
Combine parts to build a maze without using the builder pattern
Show the advantages of using the builder pattern
We'll look at ways of implementing the state pattern by looking at an example of a graphics editor with tools for adding different geometric shapes.
Represent tool and shape objects
Switch between tools using the state pattern
Forward mouse and keyboard events to the right tool
In OOP, many problems are best solved with implementation inheritance. We'll continue our graphics editor example to explore alternatives in Julia to inheritance.
Discuss how many tools will have the much shared functionality
Avoid code duplication using implementation inheritance
Remove code duplication without using inheritance
Higher Order Functions, which are functions taking functions as arguments, is a central concept in Functional Programming.
Learn how we define our own higher order functions
Explore usefulness of higher order functions for collections
Understand Higher Order Functions, creating and returning functions
We'll look at an interesting and important property of all higher order functions operating on collections. They can almost always be abstracted to:
Mapping or transformation of each value in the collection
Reduction of all values in a collection to one
Filtering, to create a subset of a collection
How do we approach design patterns with a functional approach? We'll look at some classic OOP design patterns and implement them by focusing on functions rather than objects.
Make cars with the factory pattern
Implement calculator with the undo functionality using the patterncommand
Switch between different encryption algorithms using the strategy pattern
Putting it all together in a more elaborate example of combining functions to implement a classic OOP design pattern – Interpreter.
Represent expressions as functions
Use functions to make functions
Nest at any level, and make functions, making functions
Implement a linked list to explore common traits of all Julia collections.
Understand the iteration interface
Requirements to support common collection functionality
Give a collection a text representation
Collections fall into different categories depending on what you can do with them.
Know collections you can iterate over
Understand Associative Collections,random access by some kind of key
Also, understand Dequeues, adding and removing elements at the beginning and end
Arrays with multiple dimensions such as matrices.
Access elements in a multidimensional array
Get to know various ways of creating multidimensional arrays
Understand operations which can be performed on them
A collection type which only allows inclusion of unique elements and which can quickly check for the existence of an element.
Understand different ways of creating a set
Know the set operations, such as union and intersection
Useunicode to write set operations in an elegant way
We'll look at a way of combining types into a type, which can be a placeholder for several types, these type combinations are called type unions.
Know how to define a type union
Use them in type annotations and assertions
Type unions are interesting, but what can they be used for. What is the benefit for practical programming problems? Here are some of the practical applications we'll look at.
Understand the smart usage of types to catch bugs early
Reduce code duplication when dealing with similar looking types
Parametric types are types which can take a parameter as an argument to create a concrete type. This is common in languages such as Java and C++ but unusual in dynamically typed languages like Julia.
We’ll look at the motivation behind having them in Julia
A definition and explanation of what parametric types are
How they can be used
We'll go through two practical examples showing how parametric types can be used for creating generic collections.
A linked list which can contain any element type
An array of fixed size and the length is part of its type
Assumptions about types especially in relation to subtypes can easily prove wrong when working with parametric types.
What are the assumptions to look out for
Problems with functions taking type parameters
Julia doesn't have nil or null pointers, to get around this limitation Julia has the parametric type Nullable.
Create Nullable objects
Check if an object is null
Where and when it is useful to use Nullable objects
You got a bug in your program, how would you go about finding out how the programs behaves and what is wrong? We'll explore different ways of debugging a Julia program.
Simple printfor logging-based debugging
Utilize the Julia REPL to identify badly behaving code
Get a short intro to using debuggers
Get used to writing code, so that it is easy to catch mistakes or test it.
Write testable functions
Make it easy to inspect data and find problems
We'll expand on our binary search tree example and add tests of new functionality.
Get to know test sets
Create test data
Compare floating point values
We'll look at how Julia represents program code internally as this is necessary to understand how code can be made or manipulated at runtime.
Understand how code is parsed
Quote code to be able to store and manipulate it
Expressions and symbols the basic building blocks of code
Macros provide a mechanism for including generated code in your program. Will look at different topics.
How we can control code generation with macro arguments
How macros are invoked and used
Practical issues when creating macros
Julia allows us to generate code at runtime, so we can avoid boilerplate code. We'll look at how this is done with some examples.
Generate multiple kinds of expression objects in the interpreter pattern to avoid code duplication
Generate similar looking functions for similar geometry types such as points, 2D vectors, and unit vectors
Do understand how to optimize Julia code, it is useful to know how Julia compiles to machine code. We'll look at the different steps involved.
Turning high level Julia code to a simpler code through a process called lowering.
The Abstract Syntax Tree representing parsed Julia code.
Create a sort of abstract and typed assembly code called LLVMbitcode, before creating the final machine specific assembly.
Correct usage of abstract and concrete types have significant influence on performance.
Understand Boxing, a way of wrapping up values when the concrete types isn't known
Know memory layout for different types and performance implications
View different examples,for example, sorting concrete and abstract numbers, and comparing performance
Type stability is a term coined in the Julia community, and it is the core concept to understand to write high performance Julia code.
Understand how lack of type stability affects machine code generation.
Know the causes of type instability
Understand the approaches to diagnose and avoid type instability
This video gives an overview of the entire course.
In this video, we will explain ways in which you can handle files with the comma-separated values (CSV) file format.
Access and read CSV files into the REPL process
Deal with Julia DataFrame
TSV files are files whose contents are separated by commas(,)In this video, we will explain how to handle TSV files.
Access and read TSV files into the REPL process
Write data to TSV files from a Julia Data frame
This video will teach you how to interact with websites by sending and receiving data through HTTP requests.
Interact with the Web through the HTTP protocol and requests
Send and receive data
Autofill forms on the Internet,through HTTP requests
We will see Interpretation and representation of Julia programs.
Run Julia REPL
Learn about name function
Look at the dump function
Improve the tasks that need to process the string both time-and space-efficient.
Initiate the symbol command initially
Look at symbols in detail
Create an expression with a single argument.
See code inside the code
Verify the type of expression variable with the type of function
See quoting in detail and its working
Construction of Expression objects when having multiple objects and/or variables is difficult.
See Nested quoting
Splice of data structures into an expression construction
Look at interpolation concept in detail
Evaluating an expression object.
Look at examples for adding two variables
Create the necessary expressions by passing on the function
Learn more about the eval function in detail
Compilation of code directly rather than the conventional method of constructing expression statements and using the eval function.
Leap through examples in macros
Look at arguments macro that is created
See macros in detail
Metaprogramming techniques help speed up the process of dealing with data frames.
Install the DataArrays, DataFrames, and DataFrames Meta packages of Julia using the package.add function
Look at a macro that will help in row and column selection
Execute the @byrow macro
You will learn about doing statistics in Julia, along with common problems in handling data arrays, distributions, estimation, and sampling techniques.
Learn about the Stats Base package
Learn about weight vectors
Look at the general and geometric mean
Descriptive statistics helps us estimate the shape and features of data for model and algorithm selection.
Run the Variance() function
Execute the Kurtosis() function
Look at the summary function
Deviation metrics helps calculate the distance between two vectors. These metrics help us understand the relationship between the different vectors and the data in them.
Execute the count() function
Run the mean absolute deviationfunction
Know about mean squared deviation
Sampling is the process where sample units are selected from a large population for analysis.
Understand random sampling
Know direct sampling
Know the Knuth's algorithm
Correlation analysis is the process that indicates the similarity and relationship between two random variables.
Run the Autocov() function
Execute the Autocor()function
Compile the Crosscov()function
In this video, you will learn about the concept of dimensionality reduction.
Simulate about a hundred random observations
Fit the PCA algorithm on the simulated dataset
Know the total variance of the principal components of the instance
Data preprocessing is one of the most important parts of an analytics or a data science pipeline. We will deal with that in this video.
Learn to use data repetition
Use the repeach() function
Create and define dummy values for the mapped variables
Linear regression is a linear model that is used to determine and predict numerical values. We will deal with that in this video.
Perform a simple linear regression on two basic arrays
Use the glm(), stderr(), and predict() functions
Find the variance covariance matrix for the fit
Classification is one of the core concepts of data science and attempts to classify data intodifferent classes or groups. We will look into that in this video.
Explore score-based classification algorithms and techniques
Deal with the classification of matrices
Add the Reverse keyword to perform classification of reverse ordering
Analysis of performance is very important for any analytics and machine learning processes. In this video, we will deal with performance evaluation and model selection.
Define the predictions and the ground truths
Use the correctrate() function
Use the recall(r) function
In this video, we will deal with cross validation is one of the most underrated processes in the domain of data science andanalytics.
Deal with the k-fold cross-validation method
Deal with the leave-out-one cross validation
Check how to randomly subsample
In statistics, the distance between vectors or data sets are computed in various ways depending on the problem statement and the properties of the data. In this video, we will deal with distances.
Calculate the Euclidean distance
Use the pairwise() function
Calculate the distance metrics
In this video, we will deal with difference type of distribution.
Work with a normal distribution
Use the pdf, cdf, and percentile functions
Allow construction of mixture models
Time series is another very important form of data. This video deals with time series analysis.
Construct a TimeArray by constructing an array of elements
Build the TimeArray from the array of dates
Move the average values
Plotting of arrays is important in visualization as arrays are quick to store data.
Install the Gadfly library
Generatetwo random arrays
Add the geom.line argument
DataFrames are the best way for representing tabular data.
Execute the RDatasetspackage
Look at advantages ofstacked charts
Go through the stacked bar chart
Use several functions for both transforming and exploratory analytics steps and to plot separate functions as well as to stack several functions in a single plot.
Execute the sign function
Plot multiple functions in a single plot
Customize the function's aesthetics and styles
It is thorough the exploration of the data that we find any possible patterns that can be identified through basic statistics and the shape of the data using plots and visualizations.
Look at the Box plot
See the frequency plot
Watch the bar plot and histogram using plots
Line plotscan be used both to understand correlations and look at data trends.
See the basic line plots
Use aesthetics to make our plot look more informative
Scatter plots help in data distribution and see the relationship between the corresponding columns, which in turn helps identify some prominent patterns in the data.
See a simple scatter plot
Use aesthetics
Use gradient indicator with it to indicate some features
Histograms are one of the best ways for visualizing and finding out the three main statistics of a dataset—the mean, median, and mode.
We will see a basic histogram plot
Use color aesthetics
Look at some binning features in it
Customization of plot enhances the visualization of the plot even further.
Look at customization of limit on axes
See how to scale minimum and maximum values in the plot
Execute the Scale.x _discrete parameter function for scaling discrete data
This style of computation is used when handling large amounts of data and also while running complex algorithms over significantly large data.
Fire up Julia in the multi-processing mode in your terminal
Execute the remote call() function
Run the fetch() function
Optimize data movements as it is quite common and should be minimized due to the time and the network overhead.
Perform matrix computation using the @spawn macro
Execute @spawn macro directly instead of the initialization step
Learn about the famous Map-Reduce framework and why it is one of the most important ideas in the domains of big data and parallel computing and how to parallelize loops and use reducing functions on them through several CPUs and machines.
Write a function that takes and adds n random bits
Use spawn macro, to run the count heads function as separate processes
Channels are like background plumbing for parallel computing in Julia, They are the reservoirs from which the individual processes access their data.
Run your Julia. REPL in multiprocessing mode
Learn about use of fetch(),put!() and close() function in channels
Are you looking forward to get well versed with Julia? Then this is the perfect course for you!
Julia is a young language with limited documentation and although rapidly growing, a small user community. Most developers today will know the object oriented paradigm used in mainstream languages such as Python, Java and C++. This presents a challenge switching to Julia which is more functionally oriented.
With this comprehensive 2-in-1 course takes a practical and incremental approach. It teaches the fundamentals of Julia to developers with basic knowledge of programming. It is taught in a hands on approach, with simple programming examples the student can try themselves. Building on that, it will invite the user to a tour of the ecosystem of Julia through practical code examples.
By end of this course you will more productive and acquire all the skills to work with data more efficiently. Also help you quickly refresh your knowledge of functions, modules, and arrays & shows you how to utilize the Julia language to identify, retrieve, and transform data sets so you can perform data analysis and data manipulation & also get familiar with the concepts of package development and networking to solve numerical problems using the Julia platform.
Contents and Overview
This training program includes 2 complete courses, carefully chosen to give you the most comprehensive training possible.
The first course, Getting Started With Julia covers complete INSTALLATION AND SETUP along with basic of Julia. This course will not only introduce the language, but also explain how to think differently about problems with the Julia approach. This course also focuses various aspects such as Functional Programming in Julia, Metaprogramming, Debugging and Testing & much more.
The second course, Julia Solutions covers consist complete guide to programming with Julia for performing numerical computation will make you more productive and able to work with data more efficiently. The course starts with the main features of Julia to help you quickly refresh your knowledge of functions, modules, and arrays. We’ll also show you how to utilize the Julia language to identify, retrieve, and transform data sets so you can perform data analysis and data manipulation. Later on, you’ll see how to optimize data science programs with parallel computing and memory allocation. You’ll get familiar with the concepts of package development and networking to solve numerical problems using the Julia platform.
This course also includes videos on identifying and classifying data science problems, data modelling, data analysis, data manipulation, meta-programming, multidimensional arrays, and parallel computing. By the end of the course, you will acquire the skills to work more effectively with your data.
About the Authors:
Erik Engheim is a professional mobile developer with experience in many different programming languages, often in combination. Erik Engheim has worked with C/C#, Java, C++, Objective-C, and Swift before moving into Julia. His experience with Julia involves automation, and high performance processing of code strings.
Jalem Raj Rohit is an IIT Jodhpur graduate with a keen interest in machine learning, data science, data analysis, computational statistics, and natural language processing (NLP). Rohit currently works as a senior data scientist at Zomato, also having worked as the first data scientist at Kayako.He is part of the Julia project, where he develops data science models and contributes to the codebase. Additionally, Raj is also a Mozilla contributor and volunteer, and he has interned at Scimergent Analytics.