{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "
\n", " \n", " \"QuantEcon\"\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": [ "

4 rows × 2 columns

commodprice
StringFloat64⍰
1crude4.2
2gas11.3
3gold12.1
4silvermissing
" ], "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": [ "

2 rows × 8 columns

variablemeanminmedianmaxnuniquenmissingeltype
SymbolUnion…AnyUnion…AnyUnion…Union…DataType
1commodcrudesilver4String
2price9.24.211.312.11Float64
" ], "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": [ "

5 rows × 2 columns

commodprice
StringFloat64⍰
1crude4.2
2gas11.3
3gold12.1
4silvermissing
5nickel5.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": [ "

2 rows × 2 columns

tcol1
Int64Float64
113.0
224.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": [ "

4 rows × 2 columns

tcol1
Int64Float64⍰
113.0
224.0
33missing
445.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": [ "

4 rows × 3 columns

tcol1col2
Int64Float64⍰Float64
113.09.0
224.016.0
330.00.0
445.126.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": [ "

4 rows × 2 columns

idy
Int64Categorical…
11old
22young
33young
44old
" ], "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": [ "

1 rows × 2 columns

namechildren
StringInt64
1Kirk2
" ], "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": [ "setosaversicolorvirginicaSpecies01234567PetalLength0.00.51.01.52.02.5PetalWidth" ], "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 }