tidyquant 0.2.0: Added Functionality for Financial Engineers and Business Analysts

Written on January 8, 2017

Free Data Science Course: Jumpstart with R

We've just launched Jumpstart with R, the perfect course to jumpstart your skills!

Start FREE Course Now

Free Jumpstart with R Course

tidyquant, version 0.2.0, is now available on CRAN. If your not already familiar, tidyquant integrates the best quantitative resources for collecting and analyzing quantitative data, xts, zoo, quantmod and TTR, with the tidy data infrastructure of the tidyverse allowing for seamless interaction between each. I’ll briefly touch on some of the updates. The package is open source, and you can view the code on the tidyquant github page.

Table of Contents

Who Will Benefit?

The tidyquant package was developed with two people in mind:

  1. Financial Engineers: These individuals systematically analyze financial securities (typically stocks) implementing technical trading rules such as MACD, Bollinger Bands, Moving Averages, etc to determine buy and sell signals in an automated way. Charting and implementing modelling algorithms are highly important.

  2. Financial / Business Analysts: These individuals systematically analyze financial securities, financial statements, key ratios such as valuation (e.g. price to earnings multiples), financial health (e.g. current ratio), efficiency (e.g. inventory turnover). Getting financial and key ratio data is highly important along with charting and to a lesser degree modelling.

For the financial engineer, the package is designed to integrate specialty financial functions within the tidyverse so the user doesn’t need to jump back and forth between tibbles (tidy data frames) / data frames and xts / zoo time-series objects. Methods like tq_transform() and tq_mutate() exist to apply the various xts, zoo, quantmod, and TTR functions to data frames, so you never need to leave the tidyverse. Further, if the user needs to switch object classes, coercion functions exist to easily convert (see as_tibble() for converting xts to tibbles / data frames, and as_xts() for converting data frames to xts).

For the financial analyst, the package is designed to enable retrieving key financial data fast and analyzing financial data easy and efficient. The core function, tq_get(), has the get argument that can be set to:

  • Stock Index: Retrieve a list of stock symbols for an entire index such as the S&P500 with tq_get("SP500", get = "stock.index"). 18 indexes are available.

  • Stock Prices: Retrieve the stock prices for an individual stock such as Apple with tq_get("AAPL", get = "stock.prices").

  • Financial Statements: Retrieve income statements, balance sheets, and cash flow statements for both annual and quarterly periods for an individual stock, tq_get("AAPL", get = "financials").

  • Key Ratios: Retrieve 10-years of historical key ratios (89 total available) for an individual stock, tq_get("AAPL", get = "key.ratios").

Most importantly, tidyquant is designed to work in the tidyverse. This means users can use dplyr and tidyr verbs to slice and dice data and purrr to map functions at scale. This enables new capabilities for both financial engineers and analysts. Instead of analyzing one stock at a time, you can now analyze as many stocks as you want at the same time and systematically compare each. See the S&P500 and the more advanced Russell 2000 posts for tutorials on mapping functions to stock lists.

Ok, enough about the benefits. You can read more about them in the vignette. Let’s discuss the updates, and I’ll go through some examples of the new functionality.


The major updates are:

  1. Key ratios from Morningstar: Users can now get 89 different key ratios that span 10 years historically. This is great for users that want to know how EPS, P/E, and even financials have changed over time. The source is Morningstar.

  2. zoo integration: The rollapply functions from the zoo package are now fully integrated with tq_transform and tq_mutate. This means you can calculate rolling averages, maximums, medians, and whatever else your heart desires.

  3. Making things more intuitive and hassle-free: These are small tweaks. The transform and mutate function arguments have changed slightly. The x_fun argument has been replaced with the more intuitive name ohlc_fun, so users know to enter a OHLC function such as Op to select the open price of stock prices. The .x and .y are replaced with x and y, which make more sense and don’t interfere with mapping functions in purrr.

Now, let’s go through some examples.


First, update tidyquant version 0.2.0. Note that you will need the development version for this post.

# install.packages("tidyquant")

Next, load tidyquant.

# Loads tidyquant, tidyverse, lubridate, quantmod, TTR, xts, zoo

I also recommend the open-source RStudio IDE, which makes R Programming easy and efficient.

Example 1: Getting and Visualizing Key Ratios

You will need to download the development version for this example due to an issue with retrieving key ratios from stocks listed on the NYSE exchange. Key ratios are only available for stocks listed on the NASDAQ exchange in 0.2.0. To continue, upgrade to using devtools::install_github("mdancho84/tidyquant") to get the latest development version.

Let’s say we want to compare the valuation over time using the price to earnings (P/E) multiple. This is often done when comparing several companies in the same industry to determine those that may be below normal valuation (i.e. the price may be at a discount to historical trends and to peers).

Hypothetically, we’ll select some big banks to visualize the P/E valuation: JP Morgan (JPM), Goldman Sachs (GS), Bank of America (BAC), and Citi Group (C). Before we can visualize all stocks, let’s first get the key ratios for one stock. Use tq_get(), which gets data, and set the get argument to “key.ratios”.

JPM_key_ratios <- tq_get("JPM", get = "key.ratios")
## [1] NA

Let’s check out the key ratios by unnesting.

JPM_key_ratios %>%
## Error in UseMethod("unnest_"): no applicable method for 'unnest_' applied to an object of class "logical"


NEW - Data Science Fundamentals Newsletter

We just launched a new initiative to help you take your data science skills to the next level. Every Tuesday we send you new resources, tips, and advice to accelerate your learning.

Data Science Fundamentals

Sign Up For Data Science Fundamentals Newsletter

Data Science for Business Curriculum

Business Science University is an educational platform that teaches how to apply data science to business. Our offering includes of a fully integrated, project-based 3-Course R-Track.

BSU R-Track Course Curriculum

Each course takes the student through their progression in a data science journey. Begin your journey with DS4B 101-R which teaches foundations using the tidyverse. Next, master machine learning for business with DS4B 201-R, where you learn H2O and many advanced R packages. Finish with DS4B 301-R where you learn to develop high-performing web applications using Shiny, a powerful framework for productionizing R code.

R-Track Curriculum Summary

Business Analysis with R (Beginner) - Data Science Foundations 7-Week course 12 tidyverse Packages 2 business projects
Data Science For Business with R (Intermediate/Advanced) - Machine Learning + Business Consulting 10-Week course H2O, LIME, recipes, and 10 more packages 1 end-to-end business project
Web Apps for Business with Shiny (Advanced) - Web Frameworks (Bootstrap, HTML/CSS) and Shiny 6-Week course Shiny, shinytest, shinyloadtest, profvis, and more! Take machine learning model into production

Join Business Science University Today

Stay Connected, Get Updates, Learn Data Science

If you like our Business Science Software (anomalize, tidyquant, tibbletime, timetk, and sweep), our courses, and our company, you can connect with us:

Start learning today! Business Science University

Subscribe and we'll keep you updated.