I worked in an Agile/Scrum environment to build an application demonstrating proficiency with Python in Django.
I created a program that allowed the user to take a personality test from the Big 5 theory of personality using questions from the International Personality Item Pool and to save their results to a database. They can create profiles for themselves as well as friends or whoever they're interesting in comparing personalities with.
I gave the app useful CRUD functionality and other features utilizing APIs and Web Scraping. We used Azure DevOps to manage our repositories and user stories. I developed a productive workflow after familiarizing myself with the tools at my disposal.
Over the two week sprint I had many opportunities to learn what it means to work as part of a team on a single project.
Here are some of the highlights from the project:
I first worked on setting up the most basic features essential for any program that enables the user to interact with a database. After basic CRUD functionality was completed I created the test element to the creation process of a profile.
I created a function in the view and a simple interface for the user to create a profile. After data was being added to the database I need the user to be able to view the contents. I added another function to the view as well as another template for viewing the data.
Creating Profile:
Creation Template:
Page for creating a profile and taking a test to determine personality.
Display Data Template:
Page for viewing all profiles and can click to access an individual profile and have access to other features including sorting and a quick delete mode for faster removal of profiles.
I implemented updating and deleting profiles and their information.
This is the details page where the user can view the results of a specific profile as well as make changes to their information.
I utilized web scraping to provide useful information about the personality traits and about the theory behind them by gathering information from Wikipedia. This information is gathered at runtime and will change as the Wikipedia page updates.
I also wanted the user to be able to quickly generate realistic profiles. I found a page containing many names for males and females to use for this purpose. When the user generates a profile it downloads the page and selects a random name to be used for the creation of the profile.
For the sake of accuracy, I calculated the mean and the standard deviation for each of the traits in the general population in order to generate values on the normal distribution for each trait respectively.
I wanted the user to derive useful information from their personality results. I implemented a simple algorithm that determines which job is most fitting for people with a given personality makeup. The results determined the terms that would be set as parameters for the query to the API that accesses data from the employment website Indeed. The user provides a location and then they are redirected to a table of relevant jobs that may interest them as well as a link to the corresponding page from Indeed.
I had created a straightforward program of creating user profiles, editing information, and displaying data, but wanted to make the results the user recieved to be more meaningful. I found a publicly available csv file containing over 300,000 profiles with data using the same theory of personality I derived from to create my test. I enabled the user to download a sample from this data and to view it.
I used the data to provide the user with a percentile score to give them perspective about their personality's relationship to the rest of the world.
After completing all essential functionality for my application I increased user-friendliness and improved aesthetic experience. I made some simple design choices and optimizations. I wanted the data to be presented beautifully to the user and to provide a seemless bug-free service. These changes are included in the screenshots above.
I gained a great deal of perspective from this project. I got a lot of practice with Python, Django, CRUD, APIs and Webscraping. I have become more comfortable with existing in a place where I do not know everything.
This project gave me the opportunity to practice how to approach a complex problem and to decide when I need to spend time researching a concept or to experiment with what I know.
I also learned that for a project to come together and to provide a useful service it is important to have a vision of the end product and to spend time planning to enable you to develop most efficiently and effectively.