Flask API & RethinkDB
Date: October - December 2019
Emphasis: Data Acquisition, Data Persistence, Data API Programming
Description: Directed through my Systems and Analytics Programming course, this independent project was an exploration into data acquisition, data persistence, data value, data exposure, and API programming using Python.
Source Code: View
REPORT
Data Acquisition
The data I chose to collect is from REI's Mountain Project Data API. Mountain Project (MP) is an online application dedicated to helping rock climbers find climbing routes, mark routes they have climbed, and find climbing partners. As an avid climber, I utilize MP pretty frequently and decided to use it as my data source.
The data is in JSON format. The Python script allows the user to input latitude, longitude, maxDistance (specifies mile radius), and maxResults (specifies how many routes to return). I used two test inputs to pull a total of 1000 routes from MP. The private key was generated under one of my accounts.
Additionally, here are the fields:
- id: route ID
- name: name of the route
- type: type of climbing (i.e. sport, boulder, trad)
- rating: route difficulty
- stars: climber rating of the route
- starVotes: how many people rated the route
- pitches: number of pitches on the route
- location: where the route is
Data Persistence
The database I used is RethinkDB. It is hosted locally.
I chose RethinkDB because of its straightforward setup and its specialization with hosting JSON data, which is the data type returned from my Python script in the data acquisition section. I chose to host the server locally because of the ease and compatibility with my current level of skills.
Note: The server is named “applesauce”.
To view RethinkDB in the browser, type localhost:8080 in the URL bar.
Data Value
I did not use a Python script to add value to the data. Instead, the data was converted from a .JSON file to a .CSV file via an online converter. Following this process, I uploaded the data to Power BI and made all data value changes from there.
The column labeled “url” was changed to Data Category: Web URL so I could include it as a hyperlink in the visual report. The columns “imgSqSmall”, “imgSmall”, “imgSmallMed”, and “imgMedium” were changed to Data Category: Image URL for the same reason as the “url” column change.
The column “starVotes” was changed in the visual report (but not in the backend) to “Number of Votes” for better clarity.
All other value was emphasized through the visual report. The visual report is a Power BI dashboard highlighting the data.
Data Exposure
Flask was used as the data API. The API does not allow for users to do anything but view the data originally collected from the data acquisition section.
To view the Flask API and receive the URL address for the data, type this in the browser: http://127.0.0.1:5001/
WriterWorkshop.com
Date: September - December 2019
Emphasis: Web Development with HTML / CSS / JS
Description: This group project was conducted through my Designing Graphical User Interfaces for Electronic Commerce course. It was a semester-long production emphasizing user interface design, HTML structuring, CSS implementation, and JavaScript development.
Source Code: View
OVERVIEW
WriterWorkshop.com
The web application we designed is called WriterWorkshop.com. This website enables users to post their creative writing on a forum and receive feedback from other writers. It provides writers with a resource they can utilize to better their original pieces.
Objectives
The project objective is altruism. Below are three ways this will be accomplished:
Give writers a platform for sharing and receiving constructive feedback.
Users can post their comments and suggestions to other writers’ submitted work. This will aid in writing development and improvement, as the web application aims to create a platform that gives users a space to freely express their thoughts on other people’s writing. Users will depend on honest and genuine answers from a community of writers and editors.
Host a healthy environment for writers to communicate with other writers in a general forum.
For users who don’t want to post something but want to brainstorm or start a conversation, there is a general forum that allows writers to collaborate and discuss ideas. The goal is to create a web application that users can trust in order to bring their thoughts to light.
Provide a free, open resource.
The altruistic approach of this web application is rooted in the fact that this is free for all users. By providing a no-pay forum that is open to the community, it allows everyone to share their writing and ideas without money being a concern.
Webpages
There is a master CSS file [master.css] that dictates a consistent style among every page.
- About Us - This page provides some background information regarding the creation and reputation of WriterWorkshop.com. It includes a brief history of the web application’s development, as well as user reviews and contact information.
- Forgot Password - This page offers the user the option to reset his/her password.
- Forum - This page hosts user discussions involving all things writing. It contains user-generated topics and conversations and allows the community to interact with one another.
- Forum Submission - This page allows the user to create a new forum post.
- Homepage - This page is the introductory face of the site. It gives the user a brief synopsis of how to get started as well as provides previews of user content.
- Login - This page allows a user to either sign in or create an account.
- New Works - This page gives users the ability to submit a new work to the site.
- Post History - This page lists all of a user’s posts to the site.
- User Profile (My Account) - This page details the user’s profile and lists stats specific to the site. There are some graphic visualizations as well.
- User Submission - This page highlights an example of a user submission. It provides basic functionality for nominating if a comment is credible (helpful) or not, as well as a place to enter one’s own comment(s).
- Works - This page lists all works that were posted on the site. These can be filtered down so users can find exactly what they are looking for.
Web Scraping & Parsing Data
Date: September - October 2019
Emphasis: Web Scraping, Data Parsing
Description: For my machine learning class, this project required an independent reproduction of the professor’s research project. Using the Pandas, BeautifulSoup, and requests libraries, index files were scraped from the sec.gov website and then converted into CSV files so the user could download specific 10-K forms.
Source Code: View
KPI Dashboard
Date: May - August 2019
Emphasis: Business Intelligence (BI), Report Development, Database Administration
Description: The highlight of my BI internship, this project required building front-end CRM software for data entry and SQL queries. On top of that, a corporate-distributed KPI dashboard was designed using Power BI to outline employee attrition, company cost-savings per team, manager ratings, and time spent on client projects.
*Note: All data and the dashboard are protected by MarketStar.
PSTRMI
Date: January - April 2019
Emphasis: Project Management, Database Administration, Application Development
Description: This project was created with a small team for Steiny’s Family Sports Bar and Grill in Logan, UT. Designed to track, organize, and view inventory levels, PSTRMI (Programmable System for Tracking and Recording Modifications to Inventory) is a desktop application developed with Visual Basic and Microsoft SQL Server.
Full Report: View
SYSTEM REQUEST
Goal Statement
By April 18, 2019, JLI will deliver an inventory tracking desktop application for Steiny’s Family Sports Grill that can help reduce inventory input error and/or calculation error by 25% at little or no cost to the client.
Business Needs
Due to the fact that the current inventory system is out of date and disorganized, with very limited information/data being generated, Steiny’s needs a new inventory tracking system. Inventory orders are placed with mistakes and ingredients run out before the next inventory order due to errors made by employees when they are “just looking for what is low.” A reconciliation between what is purchased and what has actually been used is not available (i.e. no idea how much free food is given away). Also, there are no alerts when an ingredient is low (i.e. down to one package).
Business Requirements
- Show current level of inventory.
- Notify manager when items are running low.
- Update ingredient levels based on menu items sold.
Business Value
The inventory tracking system will help Steiny’s reduce inventory error by 25%, which will increase accuracy and efficiency. The system will also reduce costs in the form of wasted and/or expired inventory (food). Customer satisfaction will increase due to an organized inventory. The company will save $280/month in free/voided/stolen food purchases (20% of a monthly average total of $1400) as well as save $150 in wasted food (calculated from JJ’s estimate).
Special Issues
Possible issues could include compatibility issues that result from off-menu or custom orders and user error when data is inputted into the inventory system.
Data Analytics Consulting Project
Date: August - December 2017
Emphasis: Big Data Analytics, Data Modeling, Business Intelligence (BI)
Description: This project required working with a small group to address business issues regarding advertising, hiring, and company costs using data analysis techniques. The project emphasized the use of data programs such as RapidMiner and Microsoft SQL Server to run various analyses in order to provide data-centric recommendations for a client.
Full Report: View
EXECUTIVE SUMMARY
This report is the result of a request from Atomyak to utilize their sales, customers, products, and employee data to produce data-centric recommendations on how they can increase their profits by changing how they conduct some aspects of their business.
The first concern that Atomyak had us analyze with was their advertising targeting and messaging. Through a k-Means clustering analysis we were able to identify four customer sets and specific messages that we recommend Atomyak use to target their messaging and advertisement using their 25-million-dollar budget.
The second issue we worked on was reducing the number of kayaks that needed to be sent to the in-house shop to add trims; a long process whose wait time frustrated and even deterred some customers from buying altogether. To solve this, we analyzed sales data using association rules in order to determine if there was a trim combination purchased often enough to justify making that combination a standard model for stores to have in stock. We found four combinations, described them, and explained how to market them to customers. We recommend that the shops should keep these preconfigured models in stock to cut back on the wait time for custom kayaks.
The third inefficiency they noted was hiring, retaining, and promoting sales staff. We conducted a linear regression to find the 'BestEmployee' and 'PotentialHire' using MgrScore, SC Rank, HelpScore, and Lawsuit. From the model we were able to form two formulas (on a scale from 1 to 5) that Atomyak can use to determine who to hire, retain, and promote.
Finally, Atomyak was concerned about the amount of money being spent on sending damaged kayaks through the diagnostics bay before being sent to their required service departments. Through a decision tree analysis, we determined three problems that could be predicted well enough through our model to financially justify skipping the diagnostics bay and instead sending them straight to their required service departments. We recommend running problems observed in the shop through our model and skipping the diagnostics bay if the model outputs a “reactor”, “electrical”, or “other” result.