{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
" \n",
"
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Data and Statistics Packages"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Contents\n",
"\n",
"- [Data and Statistics Packages](#Data-and-Statistics-Packages) \n",
" - [Overview](#Overview) \n",
" - [DataFrames](#DataFrames) \n",
" - [Statistics and Econometrics](#Statistics-and-Econometrics) "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Overview\n",
"\n",
"This lecture explores some of the key packages for working with data and doing statistics in Julia\n",
"\n",
"In particular, we will examine the `DataFrame` object in detail (i.e., construction, manipulation, querying, visualization, and nuances like missing data)\n",
"\n",
"While Julia is not an ideal language for pure cookie-cutter statistical analysis, it has many useful packages to provide those tools as part of a more general solution\n",
"\n",
"This list is not exhaustive, and others can be found in organizations such as [JuliaStats](https://github.com/JuliaStats), [JuliaData](https://github.com/JuliaData/), and [QueryVerse](https://github.com/queryverse)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Setup"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"hide-output": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[32m\u001b[1mActivated\u001b[0m /home/qebuild/repos/lecture-source-jl/_build/website/jupyter/Project.toml\u001b[39m\n",
"\u001b[36m\u001b[1mInfo\u001b[0m quantecon-notebooks-julia 0.1.0 activated, 0.2.0 requested\u001b[39m\n"
]
}
],
"source": [
"using InstantiateFromURL\n",
"github_project(\"QuantEcon/quantecon-notebooks-julia\", version = \"0.2.0\")"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"hide-output": true
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"┌ Info: Recompiling stale cache file /home/qebuild/.julia/compiled/v1.2/RDatasets/JyIbx.ji for RDatasets [ce6b1742-4840-55fa-b093-852dadbb1d8b]\n",
"└ @ Base loading.jl:1240\n"
]
}
],
"source": [
"using LinearAlgebra, Statistics\n",
"using DataFrames, RDatasets, DataFramesMeta, CategoricalArrays, Query, VegaLite\n",
"using DataVoyager, GLM"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## DataFrames\n",
"\n",
"A useful package for working with data is [DataFrames.jl](https://github.com/JuliaStats/DataFrames.jl)\n",
"\n",
"The most important data type provided is a `DataFrame`, a two dimensional array for storing heterogeneous data\n",
"\n",
"Although data can be heterogeneous within a `DataFrame`, the contents of the columns must be homogeneous\n",
"(of the same type)\n",
"\n",
"This is analogous to a `data.frame` in R, a `DataFrame` in Pandas (Python) or, more loosely, a spreadsheet in Excel\n",
"\n",
"There are a few different ways to create a DataFrame"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Constructing a DataFrame\n",
"\n",
"The first is to set up columns and construct a dataframe by assigning names"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"hide-output": false
},
"outputs": [
{
"data": {
"text/html": [
"commod price String Float64⍰ 4 rows × 2 columns
1 crude 4.2 2 gas 11.3 3 gold 12.1 4 silver missing
"
],
"text/latex": [
"\\begin{tabular}{r|cc}\n",
"\t& commod & price\\\\\n",
"\t\\hline\n",
"\t& String & Float64⍰\\\\\n",
"\t\\hline\n",
"\t1 & crude & 4.2 \\\\\n",
"\t2 & gas & 11.3 \\\\\n",
"\t3 & gold & 12.1 \\\\\n",
"\t4 & silver & \\\\\n",
"\\end{tabular}\n"
],
"text/plain": [
"4×2 DataFrame\n",
"│ Row │ commod │ price │\n",
"│ │ \u001b[90mString\u001b[39m │ \u001b[90mFloat64⍰\u001b[39m │\n",
"├─────┼────────┼──────────┤\n",
"│ 1 │ crude │ 4.2 │\n",
"│ 2 │ gas │ 11.3 │\n",
"│ 3 │ gold │ 12.1 │\n",
"│ 4 │ silver │ \u001b[90mmissing\u001b[39m │"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"using DataFrames, RDatasets # RDatasets provides good standard data examples from R\n",
"\n",
"# note use of missing\n",
"commodities = [\"crude\", \"gas\", \"gold\", \"silver\"]\n",
"last_price = [4.2, 11.3, 12.1, missing]\n",
"df = DataFrame(commod = commodities, price = last_price)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Columns of the `DataFrame` can be accessed by name using a symbol `df[!, :col]` or a struct-style `df.col`, as below"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"hide-output": false
},
"outputs": [
{
"data": {
"text/plain": [
"4-element Array{Union{Missing, Float64},1}:\n",
" 4.2 \n",
" 11.3 \n",
" 12.1 \n",
" missing"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df[!, :price]"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"hide-output": false
},
"outputs": [
{
"data": {
"text/plain": [
"4-element Array{Union{Missing, Float64},1}:\n",
" 4.2 \n",
" 11.3 \n",
" 12.1 \n",
" missing"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.price"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note that the type of this array has values `Union{Missing, Float64}` since it was created with a `missing` value"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"hide-output": false
},
"outputs": [
{
"data": {
"text/plain": [
"4-element Array{String,1}:\n",
" \"crude\" \n",
" \"gas\" \n",
" \"gold\" \n",
" \"silver\""
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.commod"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The `DataFrames.jl` package provides a number of methods for acting on `DataFrame`’s, such as `describe`"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"hide-output": false
},
"outputs": [
{
"data": {
"text/html": [
"variable mean min median max nunique nmissing eltype Symbol Union… Any Union… Any Union… Union… DataType 2 rows × 8 columns
1 commod crude silver 4 String 2 price 9.2 4.2 11.3 12.1 1 Float64
"
],
"text/latex": [
"\\begin{tabular}{r|cccccccc}\n",
"\t& variable & mean & min & median & max & nunique & nmissing & eltype\\\\\n",
"\t\\hline\n",
"\t& Symbol & Union… & Any & Union… & Any & Union… & Union… & DataType\\\\\n",
"\t\\hline\n",
"\t1 & commod & & crude & & silver & 4 & & String \\\\\n",
"\t2 & price & 9.2 & 4.2 & 11.3 & 12.1 & & 1 & Float64 \\\\\n",
"\\end{tabular}\n"
],
"text/plain": [
"2×8 DataFrame. Omitted printing of 1 columns\n",
"│ Row │ variable │ mean │ min │ median │ max │ nunique │ nmissing │\n",
"│ │ \u001b[90mSymbol\u001b[39m │ \u001b[90mUnion…\u001b[39m │ \u001b[90mAny\u001b[39m │ \u001b[90mUnion…\u001b[39m │ \u001b[90mAny\u001b[39m │ \u001b[90mUnion…\u001b[39m │ \u001b[90mUnion…\u001b[39m │\n",
"├─────┼──────────┼────────┼───────┼────────┼────────┼─────────┼──────────┤\n",
"│ 1 │ commod │ │ crude │ │ silver │ 4 │ │\n",
"│ 2 │ price │ 9.2 │ 4.2 │ 11.3 │ 12.1 │ │ 1 │"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"DataFrames.describe(df)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"While often data will be generated all at once, or read from a file, you can add to a `DataFrame` by providing the key parameters"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"hide-output": false
},
"outputs": [
{
"data": {
"text/html": [
"commod price String Float64⍰ 5 rows × 2 columns
1 crude 4.2 2 gas 11.3 3 gold 12.1 4 silver missing 5 nickel 5.1
"
],
"text/latex": [
"\\begin{tabular}{r|cc}\n",
"\t& commod & price\\\\\n",
"\t\\hline\n",
"\t& String & Float64⍰\\\\\n",
"\t\\hline\n",
"\t1 & crude & 4.2 \\\\\n",
"\t2 & gas & 11.3 \\\\\n",
"\t3 & gold & 12.1 \\\\\n",
"\t4 & silver & \\\\\n",
"\t5 & nickel & 5.1 \\\\\n",
"\\end{tabular}\n"
],
"text/plain": [
"5×2 DataFrame\n",
"│ Row │ commod │ price │\n",
"│ │ \u001b[90mString\u001b[39m │ \u001b[90mFloat64⍰\u001b[39m │\n",
"├─────┼────────┼──────────┤\n",
"│ 1 │ crude │ 4.2 │\n",
"│ 2 │ gas │ 11.3 │\n",
"│ 3 │ gold │ 12.1 │\n",
"│ 4 │ silver │ \u001b[90mmissing\u001b[39m │\n",
"│ 5 │ nickel │ 5.1 │"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"nt = (commod = \"nickel\", price= 5.1)\n",
"push!(df, nt)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Named tuples can also be used to construct a `DataFrame`, and have it properly deduce all types"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"hide-output": false
},
"outputs": [
{
"data": {
"text/html": [
"t col1 Int64 Float64 2 rows × 2 columns
1 1 3.0 2 2 4.0
"
],
"text/latex": [
"\\begin{tabular}{r|cc}\n",
"\t& t & col1\\\\\n",
"\t\\hline\n",
"\t& Int64 & Float64\\\\\n",
"\t\\hline\n",
"\t1 & 1 & 3.0 \\\\\n",
"\t2 & 2 & 4.0 \\\\\n",
"\\end{tabular}\n"
],
"text/plain": [
"2×2 DataFrame\n",
"│ Row │ t │ col1 │\n",
"│ │ \u001b[90mInt64\u001b[39m │ \u001b[90mFloat64\u001b[39m │\n",
"├─────┼───────┼─────────┤\n",
"│ 1 │ 1 │ 3.0 │\n",
"│ 2 │ 2 │ 4.0 │"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"nt = (t = 1, col1 = 3.0)\n",
"df2 = DataFrame([nt])\n",
"push!(df2, (t=2, col1 = 4.0))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Working with Missing\n",
"\n",
"As we discussed in [fundamental types](https://lectures.quantecon.org/getting_started_julia/fundamental_types.html#missing), the semantics of `missing` are that mathematical operations will not silently ignore it\n",
"\n",
"In order to allow `missing` in a column, you can create/load the `DataFrame`\n",
"from a source with `missing`’s, or call `allowmissing!` on a column"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"hide-output": false
},
"outputs": [
{
"data": {
"text/html": [
"t col1 Int64 Float64⍰ 4 rows × 2 columns
1 1 3.0 2 2 4.0 3 3 missing 4 4 5.1
"
],
"text/latex": [
"\\begin{tabular}{r|cc}\n",
"\t& t & col1\\\\\n",
"\t\\hline\n",
"\t& Int64 & Float64⍰\\\\\n",
"\t\\hline\n",
"\t1 & 1 & 3.0 \\\\\n",
"\t2 & 2 & 4.0 \\\\\n",
"\t3 & 3 & \\\\\n",
"\t4 & 4 & 5.1 \\\\\n",
"\\end{tabular}\n"
],
"text/plain": [
"4×2 DataFrame\n",
"│ Row │ t │ col1 │\n",
"│ │ \u001b[90mInt64\u001b[39m │ \u001b[90mFloat64⍰\u001b[39m │\n",
"├─────┼───────┼──────────┤\n",
"│ 1 │ 1 │ 3.0 │\n",
"│ 2 │ 2 │ 4.0 │\n",
"│ 3 │ 3 │ \u001b[90mmissing\u001b[39m │\n",
"│ 4 │ 4 │ 5.1 │"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"allowmissing!(df2, :col1) # necessary to add in a for col1\n",
"push!(df2, (t=3, col1 = missing))\n",
"push!(df2, (t=4, col1 = 5.1))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can see the propagation of `missing` to caller functions, as well as a way to efficiently calculate with non-missing data"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"hide-output": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"mean(df2.col1) = missing\n",
"mean(skipmissing(df2.col1)) = "
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"4.033333333333333\n"
]
},
{
"data": {
"text/plain": [
"4.033333333333333"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"@show mean(df2.col1)\n",
"@show mean(skipmissing(df2.col1))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"And to replace the `missing`"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"hide-output": false
},
"outputs": [
{
"data": {
"text/plain": [
"4-element Array{Union{Missing, Float64},1}:\n",
" 3.0\n",
" 4.0\n",
" 0.0\n",
" 5.1"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df2.col1 .= coalesce.(df2.col1, 0.0) # replace all missing with 0.0"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Manipulating and Transforming DataFrames\n",
"\n",
"One way to do an additional calculation with a `DataFrame` is to tuse the `@transform` macro from `DataFramesMeta.jl`"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"hide-output": false
},
"outputs": [
{
"data": {
"text/html": [
"t col1 col2 Int64 Float64⍰ Float64 4 rows × 3 columns
1 1 3.0 9.0 2 2 4.0 16.0 3 3 0.0 0.0 4 4 5.1 26.01
"
],
"text/latex": [
"\\begin{tabular}{r|ccc}\n",
"\t& t & col1 & col2\\\\\n",
"\t\\hline\n",
"\t& Int64 & Float64⍰ & Float64\\\\\n",
"\t\\hline\n",
"\t1 & 1 & 3.0 & 9.0 \\\\\n",
"\t2 & 2 & 4.0 & 16.0 \\\\\n",
"\t3 & 3 & 0.0 & 0.0 \\\\\n",
"\t4 & 4 & 5.1 & 26.01 \\\\\n",
"\\end{tabular}\n"
],
"text/plain": [
"4×3 DataFrame\n",
"│ Row │ t │ col1 │ col2 │\n",
"│ │ \u001b[90mInt64\u001b[39m │ \u001b[90mFloat64⍰\u001b[39m │ \u001b[90mFloat64\u001b[39m │\n",
"├─────┼───────┼──────────┼─────────┤\n",
"│ 1 │ 1 │ 3.0 │ 9.0 │\n",
"│ 2 │ 2 │ 4.0 │ 16.0 │\n",
"│ 3 │ 3 │ 0.0 │ 0.0 │\n",
"│ 4 │ 4 │ 5.1 │ 26.01 │"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"using DataFramesMeta\n",
"f(x) = x^2\n",
"df2 = @transform(df2, col2 = f.(:col1))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Categorical Data\n",
"\n",
"For data that is [categorical](https://juliadata.github.io/DataFrames.jl/stable/man/categorical.html#Categorical-Data-1)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"hide-output": false
},
"outputs": [
{
"data": {
"text/html": [
"id y Int64 Categorical… 4 rows × 2 columns
1 1 old 2 2 young 3 3 young 4 4 old
"
],
"text/latex": [
"\\begin{tabular}{r|cc}\n",
"\t& id & y\\\\\n",
"\t\\hline\n",
"\t& Int64 & Categorical…\\\\\n",
"\t\\hline\n",
"\t1 & 1 & old \\\\\n",
"\t2 & 2 & young \\\\\n",
"\t3 & 3 & young \\\\\n",
"\t4 & 4 & old \\\\\n",
"\\end{tabular}\n"
],
"text/plain": [
"4×2 DataFrame\n",
"│ Row │ id │ y │\n",
"│ │ \u001b[90mInt64\u001b[39m │ \u001b[90mCategorical…\u001b[39m │\n",
"├─────┼───────┼──────────────┤\n",
"│ 1 │ 1 │ old │\n",
"│ 2 │ 2 │ young │\n",
"│ 3 │ 3 │ young │\n",
"│ 4 │ 4 │ old │"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"using CategoricalArrays\n",
"id = [1, 2, 3, 4]\n",
"y = [\"old\", \"young\", \"young\", \"old\"]\n",
"y = CategoricalArray(y)\n",
"df = DataFrame(id=id, y=y)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"hide-output": false
},
"outputs": [
{
"data": {
"text/plain": [
"2-element Array{String,1}:\n",
" \"old\" \n",
" \"young\""
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"levels(df.y)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Visualization, Querying, and Plots\n",
"\n",
"The `DataFrame` (and similar types that fulfill a standard generic interface) can fit into a variety of packages\n",
"\n",
"One set of them is the [QueryVerse](https://github.com/queryverse)\n",
"\n",
"**Note:** The QueryVerse, in the same spirit as R’s tidyverse, makes heavy use of the pipeline syntax `|>`"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"hide-output": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"g(f(x)) = 2.1972245773362196\n",
"(x |> f) |> g = 2.1972245773362196\n"
]
}
],
"source": [
"x = 3.0\n",
"f(x) = x^2\n",
"g(x) = log(x)\n",
"\n",
"@show g(f(x))\n",
"@show x |> f |> g; # pipes nest function calls"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To give an example directly from the source of the LINQ inspired [Query.jl](http://www.queryverse.org/Query.jl/stable/)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"hide-output": false
},
"outputs": [
{
"data": {
"text/html": [
"name children String Int64 1 rows × 2 columns
1 Kirk 2
"
],
"text/latex": [
"\\begin{tabular}{r|cc}\n",
"\t& name & children\\\\\n",
"\t\\hline\n",
"\t& String & Int64\\\\\n",
"\t\\hline\n",
"\t1 & Kirk & 2 \\\\\n",
"\\end{tabular}\n"
],
"text/plain": [
"1×2 DataFrame\n",
"│ Row │ name │ children │\n",
"│ │ \u001b[90mString\u001b[39m │ \u001b[90mInt64\u001b[39m │\n",
"├─────┼────────┼──────────┤\n",
"│ 1 │ Kirk │ 2 │"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"using Query\n",
"\n",
"df = DataFrame(name=[\"John\", \"Sally\", \"Kirk\"], age=[23., 42., 59.], children=[3,5,2])\n",
"\n",
"x = @from i in df begin\n",
" @where i.age>50\n",
" @select {i.name, i.children}\n",
" @collect DataFrame\n",
"end"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"While it is possible to just use the `Plots.jl` library, there may be better options for displaying tabular data – such as [VegaLite.jl](https://github.com/queryverse/VegaLite.jl)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"hide-output": false
},
"outputs": [
{
"data": {
"application/vnd.vegalite.v3+json": {
"data": {
"values": [
{
"PetalLength": 1.4,
"PetalWidth": 0.2,
"SepalLength": 5.1,
"SepalWidth": 3.5,
"Species": "setosa"
},
{
"PetalLength": 1.4,
"PetalWidth": 0.2,
"SepalLength": 4.9,
"SepalWidth": 3.0,
"Species": "setosa"
},
{
"PetalLength": 1.3,
"PetalWidth": 0.2,
"SepalLength": 4.7,
"SepalWidth": 3.2,
"Species": "setosa"
},
{
"PetalLength": 1.5,
"PetalWidth": 0.2,
"SepalLength": 4.6,
"SepalWidth": 3.1,
"Species": "setosa"
},
{
"PetalLength": 1.4,
"PetalWidth": 0.2,
"SepalLength": 5.0,
"SepalWidth": 3.6,
"Species": "setosa"
},
{
"PetalLength": 1.7,
"PetalWidth": 0.4,
"SepalLength": 5.4,
"SepalWidth": 3.9,
"Species": "setosa"
},
{
"PetalLength": 1.4,
"PetalWidth": 0.3,
"SepalLength": 4.6,
"SepalWidth": 3.4,
"Species": "setosa"
},
{
"PetalLength": 1.5,
"PetalWidth": 0.2,
"SepalLength": 5.0,
"SepalWidth": 3.4,
"Species": "setosa"
},
{
"PetalLength": 1.4,
"PetalWidth": 0.2,
"SepalLength": 4.4,
"SepalWidth": 2.9,
"Species": "setosa"
},
{
"PetalLength": 1.5,
"PetalWidth": 0.1,
"SepalLength": 4.9,
"SepalWidth": 3.1,
"Species": "setosa"
},
{
"PetalLength": 1.5,
"PetalWidth": 0.2,
"SepalLength": 5.4,
"SepalWidth": 3.7,
"Species": "setosa"
},
{
"PetalLength": 1.6,
"PetalWidth": 0.2,
"SepalLength": 4.8,
"SepalWidth": 3.4,
"Species": "setosa"
},
{
"PetalLength": 1.4,
"PetalWidth": 0.1,
"SepalLength": 4.8,
"SepalWidth": 3.0,
"Species": "setosa"
},
{
"PetalLength": 1.1,
"PetalWidth": 0.1,
"SepalLength": 4.3,
"SepalWidth": 3.0,
"Species": "setosa"
},
{
"PetalLength": 1.2,
"PetalWidth": 0.2,
"SepalLength": 5.8,
"SepalWidth": 4.0,
"Species": "setosa"
},
{
"PetalLength": 1.5,
"PetalWidth": 0.4,
"SepalLength": 5.7,
"SepalWidth": 4.4,
"Species": "setosa"
},
{
"PetalLength": 1.3,
"PetalWidth": 0.4,
"SepalLength": 5.4,
"SepalWidth": 3.9,
"Species": "setosa"
},
{
"PetalLength": 1.4,
"PetalWidth": 0.3,
"SepalLength": 5.1,
"SepalWidth": 3.5,
"Species": "setosa"
},
{
"PetalLength": 1.7,
"PetalWidth": 0.3,
"SepalLength": 5.7,
"SepalWidth": 3.8,
"Species": "setosa"
},
{
"PetalLength": 1.5,
"PetalWidth": 0.3,
"SepalLength": 5.1,
"SepalWidth": 3.8,
"Species": "setosa"
},
{
"PetalLength": 1.7,
"PetalWidth": 0.2,
"SepalLength": 5.4,
"SepalWidth": 3.4,
"Species": "setosa"
},
{
"PetalLength": 1.5,
"PetalWidth": 0.4,
"SepalLength": 5.1,
"SepalWidth": 3.7,
"Species": "setosa"
},
{
"PetalLength": 1.0,
"PetalWidth": 0.2,
"SepalLength": 4.6,
"SepalWidth": 3.6,
"Species": "setosa"
},
{
"PetalLength": 1.7,
"PetalWidth": 0.5,
"SepalLength": 5.1,
"SepalWidth": 3.3,
"Species": "setosa"
},
{
"PetalLength": 1.9,
"PetalWidth": 0.2,
"SepalLength": 4.8,
"SepalWidth": 3.4,
"Species": "setosa"
},
{
"PetalLength": 1.6,
"PetalWidth": 0.2,
"SepalLength": 5.0,
"SepalWidth": 3.0,
"Species": "setosa"
},
{
"PetalLength": 1.6,
"PetalWidth": 0.4,
"SepalLength": 5.0,
"SepalWidth": 3.4,
"Species": "setosa"
},
{
"PetalLength": 1.5,
"PetalWidth": 0.2,
"SepalLength": 5.2,
"SepalWidth": 3.5,
"Species": "setosa"
},
{
"PetalLength": 1.4,
"PetalWidth": 0.2,
"SepalLength": 5.2,
"SepalWidth": 3.4,
"Species": "setosa"
},
{
"PetalLength": 1.6,
"PetalWidth": 0.2,
"SepalLength": 4.7,
"SepalWidth": 3.2,
"Species": "setosa"
},
{
"PetalLength": 1.6,
"PetalWidth": 0.2,
"SepalLength": 4.8,
"SepalWidth": 3.1,
"Species": "setosa"
},
{
"PetalLength": 1.5,
"PetalWidth": 0.4,
"SepalLength": 5.4,
"SepalWidth": 3.4,
"Species": "setosa"
},
{
"PetalLength": 1.5,
"PetalWidth": 0.1,
"SepalLength": 5.2,
"SepalWidth": 4.1,
"Species": "setosa"
},
{
"PetalLength": 1.4,
"PetalWidth": 0.2,
"SepalLength": 5.5,
"SepalWidth": 4.2,
"Species": "setosa"
},
{
"PetalLength": 1.5,
"PetalWidth": 0.2,
"SepalLength": 4.9,
"SepalWidth": 3.1,
"Species": "setosa"
},
{
"PetalLength": 1.2,
"PetalWidth": 0.2,
"SepalLength": 5.0,
"SepalWidth": 3.2,
"Species": "setosa"
},
{
"PetalLength": 1.3,
"PetalWidth": 0.2,
"SepalLength": 5.5,
"SepalWidth": 3.5,
"Species": "setosa"
},
{
"PetalLength": 1.4,
"PetalWidth": 0.1,
"SepalLength": 4.9,
"SepalWidth": 3.6,
"Species": "setosa"
},
{
"PetalLength": 1.3,
"PetalWidth": 0.2,
"SepalLength": 4.4,
"SepalWidth": 3.0,
"Species": "setosa"
},
{
"PetalLength": 1.5,
"PetalWidth": 0.2,
"SepalLength": 5.1,
"SepalWidth": 3.4,
"Species": "setosa"
},
{
"PetalLength": 1.3,
"PetalWidth": 0.3,
"SepalLength": 5.0,
"SepalWidth": 3.5,
"Species": "setosa"
},
{
"PetalLength": 1.3,
"PetalWidth": 0.3,
"SepalLength": 4.5,
"SepalWidth": 2.3,
"Species": "setosa"
},
{
"PetalLength": 1.3,
"PetalWidth": 0.2,
"SepalLength": 4.4,
"SepalWidth": 3.2,
"Species": "setosa"
},
{
"PetalLength": 1.6,
"PetalWidth": 0.6,
"SepalLength": 5.0,
"SepalWidth": 3.5,
"Species": "setosa"
},
{
"PetalLength": 1.9,
"PetalWidth": 0.4,
"SepalLength": 5.1,
"SepalWidth": 3.8,
"Species": "setosa"
},
{
"PetalLength": 1.4,
"PetalWidth": 0.3,
"SepalLength": 4.8,
"SepalWidth": 3.0,
"Species": "setosa"
},
{
"PetalLength": 1.6,
"PetalWidth": 0.2,
"SepalLength": 5.1,
"SepalWidth": 3.8,
"Species": "setosa"
},
{
"PetalLength": 1.4,
"PetalWidth": 0.2,
"SepalLength": 4.6,
"SepalWidth": 3.2,
"Species": "setosa"
},
{
"PetalLength": 1.5,
"PetalWidth": 0.2,
"SepalLength": 5.3,
"SepalWidth": 3.7,
"Species": "setosa"
},
{
"PetalLength": 1.4,
"PetalWidth": 0.2,
"SepalLength": 5.0,
"SepalWidth": 3.3,
"Species": "setosa"
},
{
"PetalLength": 4.7,
"PetalWidth": 1.4,
"SepalLength": 7.0,
"SepalWidth": 3.2,
"Species": "versicolor"
},
{
"PetalLength": 4.5,
"PetalWidth": 1.5,
"SepalLength": 6.4,
"SepalWidth": 3.2,
"Species": "versicolor"
},
{
"PetalLength": 4.9,
"PetalWidth": 1.5,
"SepalLength": 6.9,
"SepalWidth": 3.1,
"Species": "versicolor"
},
{
"PetalLength": 4.0,
"PetalWidth": 1.3,
"SepalLength": 5.5,
"SepalWidth": 2.3,
"Species": "versicolor"
},
{
"PetalLength": 4.6,
"PetalWidth": 1.5,
"SepalLength": 6.5,
"SepalWidth": 2.8,
"Species": "versicolor"
},
{
"PetalLength": 4.5,
"PetalWidth": 1.3,
"SepalLength": 5.7,
"SepalWidth": 2.8,
"Species": "versicolor"
},
{
"PetalLength": 4.7,
"PetalWidth": 1.6,
"SepalLength": 6.3,
"SepalWidth": 3.3,
"Species": "versicolor"
},
{
"PetalLength": 3.3,
"PetalWidth": 1.0,
"SepalLength": 4.9,
"SepalWidth": 2.4,
"Species": "versicolor"
},
{
"PetalLength": 4.6,
"PetalWidth": 1.3,
"SepalLength": 6.6,
"SepalWidth": 2.9,
"Species": "versicolor"
},
{
"PetalLength": 3.9,
"PetalWidth": 1.4,
"SepalLength": 5.2,
"SepalWidth": 2.7,
"Species": "versicolor"
},
{
"PetalLength": 3.5,
"PetalWidth": 1.0,
"SepalLength": 5.0,
"SepalWidth": 2.0,
"Species": "versicolor"
},
{
"PetalLength": 4.2,
"PetalWidth": 1.5,
"SepalLength": 5.9,
"SepalWidth": 3.0,
"Species": "versicolor"
},
{
"PetalLength": 4.0,
"PetalWidth": 1.0,
"SepalLength": 6.0,
"SepalWidth": 2.2,
"Species": "versicolor"
},
{
"PetalLength": 4.7,
"PetalWidth": 1.4,
"SepalLength": 6.1,
"SepalWidth": 2.9,
"Species": "versicolor"
},
{
"PetalLength": 3.6,
"PetalWidth": 1.3,
"SepalLength": 5.6,
"SepalWidth": 2.9,
"Species": "versicolor"
},
{
"PetalLength": 4.4,
"PetalWidth": 1.4,
"SepalLength": 6.7,
"SepalWidth": 3.1,
"Species": "versicolor"
},
{
"PetalLength": 4.5,
"PetalWidth": 1.5,
"SepalLength": 5.6,
"SepalWidth": 3.0,
"Species": "versicolor"
},
{
"PetalLength": 4.1,
"PetalWidth": 1.0,
"SepalLength": 5.8,
"SepalWidth": 2.7,
"Species": "versicolor"
},
{
"PetalLength": 4.5,
"PetalWidth": 1.5,
"SepalLength": 6.2,
"SepalWidth": 2.2,
"Species": "versicolor"
},
{
"PetalLength": 3.9,
"PetalWidth": 1.1,
"SepalLength": 5.6,
"SepalWidth": 2.5,
"Species": "versicolor"
},
{
"PetalLength": 4.8,
"PetalWidth": 1.8,
"SepalLength": 5.9,
"SepalWidth": 3.2,
"Species": "versicolor"
},
{
"PetalLength": 4.0,
"PetalWidth": 1.3,
"SepalLength": 6.1,
"SepalWidth": 2.8,
"Species": "versicolor"
},
{
"PetalLength": 4.9,
"PetalWidth": 1.5,
"SepalLength": 6.3,
"SepalWidth": 2.5,
"Species": "versicolor"
},
{
"PetalLength": 4.7,
"PetalWidth": 1.2,
"SepalLength": 6.1,
"SepalWidth": 2.8,
"Species": "versicolor"
},
{
"PetalLength": 4.3,
"PetalWidth": 1.3,
"SepalLength": 6.4,
"SepalWidth": 2.9,
"Species": "versicolor"
},
{
"PetalLength": 4.4,
"PetalWidth": 1.4,
"SepalLength": 6.6,
"SepalWidth": 3.0,
"Species": "versicolor"
},
{
"PetalLength": 4.8,
"PetalWidth": 1.4,
"SepalLength": 6.8,
"SepalWidth": 2.8,
"Species": "versicolor"
},
{
"PetalLength": 5.0,
"PetalWidth": 1.7,
"SepalLength": 6.7,
"SepalWidth": 3.0,
"Species": "versicolor"
},
{
"PetalLength": 4.5,
"PetalWidth": 1.5,
"SepalLength": 6.0,
"SepalWidth": 2.9,
"Species": "versicolor"
},
{
"PetalLength": 3.5,
"PetalWidth": 1.0,
"SepalLength": 5.7,
"SepalWidth": 2.6,
"Species": "versicolor"
},
{
"PetalLength": 3.8,
"PetalWidth": 1.1,
"SepalLength": 5.5,
"SepalWidth": 2.4,
"Species": "versicolor"
},
{
"PetalLength": 3.7,
"PetalWidth": 1.0,
"SepalLength": 5.5,
"SepalWidth": 2.4,
"Species": "versicolor"
},
{
"PetalLength": 3.9,
"PetalWidth": 1.2,
"SepalLength": 5.8,
"SepalWidth": 2.7,
"Species": "versicolor"
},
{
"PetalLength": 5.1,
"PetalWidth": 1.6,
"SepalLength": 6.0,
"SepalWidth": 2.7,
"Species": "versicolor"
},
{
"PetalLength": 4.5,
"PetalWidth": 1.5,
"SepalLength": 5.4,
"SepalWidth": 3.0,
"Species": "versicolor"
},
{
"PetalLength": 4.5,
"PetalWidth": 1.6,
"SepalLength": 6.0,
"SepalWidth": 3.4,
"Species": "versicolor"
},
{
"PetalLength": 4.7,
"PetalWidth": 1.5,
"SepalLength": 6.7,
"SepalWidth": 3.1,
"Species": "versicolor"
},
{
"PetalLength": 4.4,
"PetalWidth": 1.3,
"SepalLength": 6.3,
"SepalWidth": 2.3,
"Species": "versicolor"
},
{
"PetalLength": 4.1,
"PetalWidth": 1.3,
"SepalLength": 5.6,
"SepalWidth": 3.0,
"Species": "versicolor"
},
{
"PetalLength": 4.0,
"PetalWidth": 1.3,
"SepalLength": 5.5,
"SepalWidth": 2.5,
"Species": "versicolor"
},
{
"PetalLength": 4.4,
"PetalWidth": 1.2,
"SepalLength": 5.5,
"SepalWidth": 2.6,
"Species": "versicolor"
},
{
"PetalLength": 4.6,
"PetalWidth": 1.4,
"SepalLength": 6.1,
"SepalWidth": 3.0,
"Species": "versicolor"
},
{
"PetalLength": 4.0,
"PetalWidth": 1.2,
"SepalLength": 5.8,
"SepalWidth": 2.6,
"Species": "versicolor"
},
{
"PetalLength": 3.3,
"PetalWidth": 1.0,
"SepalLength": 5.0,
"SepalWidth": 2.3,
"Species": "versicolor"
},
{
"PetalLength": 4.2,
"PetalWidth": 1.3,
"SepalLength": 5.6,
"SepalWidth": 2.7,
"Species": "versicolor"
},
{
"PetalLength": 4.2,
"PetalWidth": 1.2,
"SepalLength": 5.7,
"SepalWidth": 3.0,
"Species": "versicolor"
},
{
"PetalLength": 4.2,
"PetalWidth": 1.3,
"SepalLength": 5.7,
"SepalWidth": 2.9,
"Species": "versicolor"
},
{
"PetalLength": 4.3,
"PetalWidth": 1.3,
"SepalLength": 6.2,
"SepalWidth": 2.9,
"Species": "versicolor"
},
{
"PetalLength": 3.0,
"PetalWidth": 1.1,
"SepalLength": 5.1,
"SepalWidth": 2.5,
"Species": "versicolor"
},
{
"PetalLength": 4.1,
"PetalWidth": 1.3,
"SepalLength": 5.7,
"SepalWidth": 2.8,
"Species": "versicolor"
},
{
"PetalLength": 6.0,
"PetalWidth": 2.5,
"SepalLength": 6.3,
"SepalWidth": 3.3,
"Species": "virginica"
},
{
"PetalLength": 5.1,
"PetalWidth": 1.9,
"SepalLength": 5.8,
"SepalWidth": 2.7,
"Species": "virginica"
},
{
"PetalLength": 5.9,
"PetalWidth": 2.1,
"SepalLength": 7.1,
"SepalWidth": 3.0,
"Species": "virginica"
},
{
"PetalLength": 5.6,
"PetalWidth": 1.8,
"SepalLength": 6.3,
"SepalWidth": 2.9,
"Species": "virginica"
},
{
"PetalLength": 5.8,
"PetalWidth": 2.2,
"SepalLength": 6.5,
"SepalWidth": 3.0,
"Species": "virginica"
},
{
"PetalLength": 6.6,
"PetalWidth": 2.1,
"SepalLength": 7.6,
"SepalWidth": 3.0,
"Species": "virginica"
},
{
"PetalLength": 4.5,
"PetalWidth": 1.7,
"SepalLength": 4.9,
"SepalWidth": 2.5,
"Species": "virginica"
},
{
"PetalLength": 6.3,
"PetalWidth": 1.8,
"SepalLength": 7.3,
"SepalWidth": 2.9,
"Species": "virginica"
},
{
"PetalLength": 5.8,
"PetalWidth": 1.8,
"SepalLength": 6.7,
"SepalWidth": 2.5,
"Species": "virginica"
},
{
"PetalLength": 6.1,
"PetalWidth": 2.5,
"SepalLength": 7.2,
"SepalWidth": 3.6,
"Species": "virginica"
},
{
"PetalLength": 5.1,
"PetalWidth": 2.0,
"SepalLength": 6.5,
"SepalWidth": 3.2,
"Species": "virginica"
},
{
"PetalLength": 5.3,
"PetalWidth": 1.9,
"SepalLength": 6.4,
"SepalWidth": 2.7,
"Species": "virginica"
},
{
"PetalLength": 5.5,
"PetalWidth": 2.1,
"SepalLength": 6.8,
"SepalWidth": 3.0,
"Species": "virginica"
},
{
"PetalLength": 5.0,
"PetalWidth": 2.0,
"SepalLength": 5.7,
"SepalWidth": 2.5,
"Species": "virginica"
},
{
"PetalLength": 5.1,
"PetalWidth": 2.4,
"SepalLength": 5.8,
"SepalWidth": 2.8,
"Species": "virginica"
},
{
"PetalLength": 5.3,
"PetalWidth": 2.3,
"SepalLength": 6.4,
"SepalWidth": 3.2,
"Species": "virginica"
},
{
"PetalLength": 5.5,
"PetalWidth": 1.8,
"SepalLength": 6.5,
"SepalWidth": 3.0,
"Species": "virginica"
},
{
"PetalLength": 6.7,
"PetalWidth": 2.2,
"SepalLength": 7.7,
"SepalWidth": 3.8,
"Species": "virginica"
},
{
"PetalLength": 6.9,
"PetalWidth": 2.3,
"SepalLength": 7.7,
"SepalWidth": 2.6,
"Species": "virginica"
},
{
"PetalLength": 5.0,
"PetalWidth": 1.5,
"SepalLength": 6.0,
"SepalWidth": 2.2,
"Species": "virginica"
},
{
"PetalLength": 5.7,
"PetalWidth": 2.3,
"SepalLength": 6.9,
"SepalWidth": 3.2,
"Species": "virginica"
},
{
"PetalLength": 4.9,
"PetalWidth": 2.0,
"SepalLength": 5.6,
"SepalWidth": 2.8,
"Species": "virginica"
},
{
"PetalLength": 6.7,
"PetalWidth": 2.0,
"SepalLength": 7.7,
"SepalWidth": 2.8,
"Species": "virginica"
},
{
"PetalLength": 4.9,
"PetalWidth": 1.8,
"SepalLength": 6.3,
"SepalWidth": 2.7,
"Species": "virginica"
},
{
"PetalLength": 5.7,
"PetalWidth": 2.1,
"SepalLength": 6.7,
"SepalWidth": 3.3,
"Species": "virginica"
},
{
"PetalLength": 6.0,
"PetalWidth": 1.8,
"SepalLength": 7.2,
"SepalWidth": 3.2,
"Species": "virginica"
},
{
"PetalLength": 4.8,
"PetalWidth": 1.8,
"SepalLength": 6.2,
"SepalWidth": 2.8,
"Species": "virginica"
},
{
"PetalLength": 4.9,
"PetalWidth": 1.8,
"SepalLength": 6.1,
"SepalWidth": 3.0,
"Species": "virginica"
},
{
"PetalLength": 5.6,
"PetalWidth": 2.1,
"SepalLength": 6.4,
"SepalWidth": 2.8,
"Species": "virginica"
},
{
"PetalLength": 5.8,
"PetalWidth": 1.6,
"SepalLength": 7.2,
"SepalWidth": 3.0,
"Species": "virginica"
},
{
"PetalLength": 6.1,
"PetalWidth": 1.9,
"SepalLength": 7.4,
"SepalWidth": 2.8,
"Species": "virginica"
},
{
"PetalLength": 6.4,
"PetalWidth": 2.0,
"SepalLength": 7.9,
"SepalWidth": 3.8,
"Species": "virginica"
},
{
"PetalLength": 5.6,
"PetalWidth": 2.2,
"SepalLength": 6.4,
"SepalWidth": 2.8,
"Species": "virginica"
},
{
"PetalLength": 5.1,
"PetalWidth": 1.5,
"SepalLength": 6.3,
"SepalWidth": 2.8,
"Species": "virginica"
},
{
"PetalLength": 5.6,
"PetalWidth": 1.4,
"SepalLength": 6.1,
"SepalWidth": 2.6,
"Species": "virginica"
},
{
"PetalLength": 6.1,
"PetalWidth": 2.3,
"SepalLength": 7.7,
"SepalWidth": 3.0,
"Species": "virginica"
},
{
"PetalLength": 5.6,
"PetalWidth": 2.4,
"SepalLength": 6.3,
"SepalWidth": 3.4,
"Species": "virginica"
},
{
"PetalLength": 5.5,
"PetalWidth": 1.8,
"SepalLength": 6.4,
"SepalWidth": 3.1,
"Species": "virginica"
},
{
"PetalLength": 4.8,
"PetalWidth": 1.8,
"SepalLength": 6.0,
"SepalWidth": 3.0,
"Species": "virginica"
},
{
"PetalLength": 5.4,
"PetalWidth": 2.1,
"SepalLength": 6.9,
"SepalWidth": 3.1,
"Species": "virginica"
},
{
"PetalLength": 5.6,
"PetalWidth": 2.4,
"SepalLength": 6.7,
"SepalWidth": 3.1,
"Species": "virginica"
},
{
"PetalLength": 5.1,
"PetalWidth": 2.3,
"SepalLength": 6.9,
"SepalWidth": 3.1,
"Species": "virginica"
},
{
"PetalLength": 5.1,
"PetalWidth": 1.9,
"SepalLength": 5.8,
"SepalWidth": 2.7,
"Species": "virginica"
},
{
"PetalLength": 5.9,
"PetalWidth": 2.3,
"SepalLength": 6.8,
"SepalWidth": 3.2,
"Species": "virginica"
},
{
"PetalLength": 5.7,
"PetalWidth": 2.5,
"SepalLength": 6.7,
"SepalWidth": 3.3,
"Species": "virginica"
},
{
"PetalLength": 5.2,
"PetalWidth": 2.3,
"SepalLength": 6.7,
"SepalWidth": 3.0,
"Species": "virginica"
},
{
"PetalLength": 5.0,
"PetalWidth": 1.9,
"SepalLength": 6.3,
"SepalWidth": 2.5,
"Species": "virginica"
},
{
"PetalLength": 5.2,
"PetalWidth": 2.0,
"SepalLength": 6.5,
"SepalWidth": 3.0,
"Species": "virginica"
},
{
"PetalLength": 5.4,
"PetalWidth": 2.3,
"SepalLength": 6.2,
"SepalWidth": 3.4,
"Species": "virginica"
},
{
"PetalLength": 5.1,
"PetalWidth": 1.8,
"SepalLength": 5.9,
"SepalWidth": 3.0,
"Species": "virginica"
}
]
},
"encoding": {
"color": {
"field": "Species",
"type": "nominal"
},
"x": {
"field": "PetalLength",
"type": "quantitative"
},
"y": {
"field": "PetalWidth",
"type": "quantitative"
}
},
"mark": "point"
},
"image/png": "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",
"image/svg+xml": [
"setosa versicolor virginica Species 0 1 2 3 4 5 6 7 PetalLength 0.0 0.5 1.0 1.5 2.0 2.5 PetalWidth "
],
"text/plain": [
"VegaLite.VLSpec{:plot}"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"using RDatasets, VegaLite\n",
"iris = dataset(\"datasets\", \"iris\")\n",
"\n",
"iris |> @vlplot(\n",
" :point,\n",
" x=:PetalLength,\n",
" y=:PetalWidth,\n",
" color=:Species\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Another useful tool for exploring tabular data is [DataVoyager.jl](https://github.com/queryverse/DataVoyager.jl)"
]
},
{
"cell_type": "markdown",
"metadata": {
"hide-output": false
},
"source": [
"```julia\n",
"using DataVoyager\n",
"iris |> Voyager()\n",
"```\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The `Voyager()` function creates a separate window for analysis"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Statistics and Econometrics\n",
"\n",
"While Julia is not intended as a replacement for R, Stata, and similar specialty languages, it has a growing number of packages aimed at statistics and econometrics\n",
"\n",
"Many of the packages live in the [JuliaStats organization](https://github.com/JuliaStats/)\n",
"\n",
"A few to point out\n",
"\n",
"- [StatsBase](https://github.com/JuliaStats/StatsBase.jl) has basic statistical functions such as geometric and harmonic means, auto-correlations, robust statistics, etc. \n",
"- [StatsFuns](https://github.com/JuliaStats/StatsFuns.jl) has a variety of mathematical functions and constants such as pdf and cdf of many distributions, softmax, etc. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### General Linear Models\n",
"\n",
"To run linear regressions and similar statistics, use the [GLM](http://juliastats.github.io/GLM.jl/latest/) package"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"hide-output": false
},
"outputs": [
{
"data": {
"text/plain": [
"StatsModels.TableRegressionModel{LinearModel{GLM.LmResp{Array{Float64,1}},GLM.DensePredChol{Float64,Cholesky{Float64,Array{Float64,2}}}},Array{Float64,2}}\n",
"\n",
"y ~ 1 + x\n",
"\n",
"Coefficients:\n",
"──────────────────────────────────────────────────────────────────────────\n",
" Estimate Std. Error t value Pr(>|t|) Lower 95% Upper 95%\n",
"──────────────────────────────────────────────────────────────────────────\n",
"(Intercept) 0.268432 0.0135617 19.7934 <1e-35 0.24152 0.295345\n",
"x 0.904374 0.0130551 69.2735 <1e-84 0.878467 0.930281\n",
"──────────────────────────────────────────────────────────────────────────"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"using GLM\n",
"\n",
"x = randn(100)\n",
"y = 0.9 .* x + 0.5 * rand(100)\n",
"df = DataFrame(x=x, y=y)\n",
"ols = lm(@formula(y ~ x), df) # R-style notation"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To explore data use the interactive DataVoyager and VegaLite"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"hide-output": false
},
"outputs": [
{
"ename": "UndefVarError",
"evalue": "UndefVarError: cigar not defined",
"output_type": "error",
"traceback": [
"UndefVarError: cigar not defined",
"",
"Stacktrace:",
" [1] top-level scope at In[20]:1"
]
}
],
"source": [
"# cigar |> Voyager()\n",
"\n",
"cigar |> @vlplot(\n",
" :point,\n",
" x=:Price,\n",
" y=:Sales,\n",
" color=:Year,\n",
" size=:NDI\n",
")"
]
}
],
"metadata": {
"filename": "data_statistical_packages.rst",
"kernelspec": {
"display_name": "Julia 1.2",
"language": "julia",
"name": "julia-1.2"
},
"language_info": {
"file_extension": ".jl",
"mimetype": "application/julia",
"name": "julia",
"version": "1.2.0"
},
"title": "Data and Statistics Packages"
},
"nbformat": 4,
"nbformat_minor": 2
}