StockStats: A Shiny Web App for Investors
I have always been interested in analyzing stocks on websites such as Yahoo Finance or Marketwatch. As I began taking statistics, I wanted to better understand the statistical properties of these stocks I had been looking at. However, I just was not able to find such in-depth tools on most major finance websites, especially for free. Therefore, after having gained proficiency in R, I decided to make use of my skills and build something that hopefully not only benefits myself but also other curious data enthusiasts.
The idea behind StockStats is to build a web app that enables everybody with Internet access to build dashboards with statistical analyses and visualizations of stocks. These dashboards can then be saved or revisited at a later point for comparison.
While preparing for this project, I looked at many Shiny dashboards. Although Shiny, an R package, is mainly used to build data visualization dashboards, there is much more one can theoretically achieve with it. My main issues with most dashboards I explored were:
- Most dashboards allowed for interactive data visualizations, however, the data they were based on was static and did not adapt/change
- As a result, there was little incentive to revisit them after having taken a look at the data once
In order to avoid these two pitfalls, I used the quantmod package to dynamically retrieve stock data. In doing so, I was able to enable users to update their dashboards whenever they revisit the web app. To tackle the second issue of lacking incentives for users to return, I also decided not to use the widely applied Shiny Dashboards framework for my UI design and instead challenged myself by implementing semantic.dashboard, an R package released in April of 2018. semantic.dashboard comes with full integration of Semantic UI, a modern front-end development framework, powered by LESS and jQuery, thus providing more options for UI design.
Because the package was relatively new, working with semantic.dashboard proved to be a challenging yet rewarding experience due to the many options it provides. On top, it also enabled me to push the framework provided by Shiny to create a fully-functional website and not only a dashboard.
The best way to explain what StockStats can do is to demonstrate an example use case. After opening the web app, the user lands on an introductory page, explaining what StockStats is as well as offering several links to other related resources that might be of use.
To continue, click on the "Menu" button on the top left of the website. After doing so, a menu sidebar will show up, providing an overview of the services StockStats offers:
The main feature of StockStats is its dashboard tab. After clicking on it, the user will find a blank dashboard as well as instructions on how to use the dashboard. In building the web app, I focused on making StockStats as usable as possible for a wide range of potential users by inserting descriptions, helpful links, and instructions.
Now, after having typed in a stock symbol and set a date range, the user can begin exploring the stock in question. Sticking with the default, I am going to demonstrate how to use the dashboard using Apple's stock data from 2013 onwards. To gain an overview, one can tick the "Show Stock Price Plots" checkbox. A plot displaying the opening, closing, highest, lowest, and adjusted price, as well as the traded volume, will show up. The size of the plot can be adjusted. Additionally, the user can zoom in on the adjusted price by also checking the "Only Adjusted" checkbox. After doing so, the dashboard will look like this:
Depending on what the user is interested in, additional plots can be added to the dashboard by checking additional checkboxes. Several plots, such as the "Log Returns Adjusted" plots were created using plotly and provide additional interactivity by allowing the user to hover over the plot and retrieve more information as well as enabling users to zoom into specific parts of plots.
After adding and dragging plots/statistical measures around and arranging a personalized dashboard, the user might look at something like this:
Besides the dashboard, StockStats also allows users to take a look at the stock data for further investigation. To do so, select the "Data" tab in the menu. An interactive data frame will be displayed that users can then search for specific dates or values of interest:
Finally, StockStats also includes menu tabs describing the current state as well as future goals for the project. On top, I have included a short bio in the "About" tab as well as a more detailed description of my motivation.
To put it in a nutshell, Shiny is capable of so much more than what it is mostly used for. While StockStats is a web app for data enthusiasts, similar adaptions in companies could benefit employees by giving them a tool that does not only provide aesthetically pleasing visualizations but also offers long-term value while saving them the effort to code themselves.
StockStats can be accessed here: https://lksfr.shinyapps.io/Shiny/