Soundtracks of My Life

Introduction to Research

Ever wondered what it’d look like to do your own Spotify Wrapped? Look no further than this post! This personal data story analyzes my listening trends from October 2024, to November 2025. I wanted to see what trends I could uncover with my listening that wasn’t from a Wrapped. Some questions I wanted to answer was which artists were in my top 10, What time during the day I listen to music the most, and what days of the week did I listen on the most? Something that I can get out of this is potentially changing my music habits, like what artists I listen to, or maybe even changing the times that I listen to music.

Dataset and Variables

I got my data through a request from Spotify. It came in a bunch of Jsons and I used python to extract the table that I wanted which housed my listening data for music (I don’t listen to podcasts so I didn’t extract that). The main meat and potatoes of the data set comes with 4 columns for us to work with. These columns being endTime,(which only tells you when the song ended), artistName, trackName, msPlayed (How long you listened to the song). Through this though, I was able to make a few of my own custom variables. One of them categorized songs that I listened to for more than 60 seconds which I used to give a rough idea of which songs I skipped and didn’t skip. The other variable I made simply was used so that I could showcase my song listening trends by the hour of the day.

Visualizations

To start off, I was curious which Artists I listened to the most, and honestly, Seeing Tory Lanez, Lil Nas X and Daniel Caesar as my top 3 wasn’t as surprising, although, I did expect Lil Nas X to be on top, but this may be recency bias, as I’ve listened to him quite frequently over the last few months and his recent album was my 2nd most listened album.

This list surprised me. I didn’t expect for 2 songs that released a few months ago to be my number one songs, but this made sense as Daniel Caesar was my #2 listened to artist for my Spotify Wrapped.

There are 3 giant spikes for this chart, one in December 2024 which is around when Pharrell Williams release his Auto-Biography movie made using Legos by Piece by Piece, and his sound track was to die for, and the other 2 in April and June 2025 was me preparing to go concerts so I was listening to those artists’ discography!

I seem to be a night owl with my music! My peak hours were from 7pm-11pm (19-23) During this time I’m either studying or to myself so I listen to music as a relaxation method.

This chart may seem simple, but it was one of the few custom variables I made. For this, I made a categorical variable that separated songs that I spent more than 60 seconds listened to and created a Skipped before a minute and didn’t skip before a minute. Out of all my songs, I didn’t skip 13,200, and skipped about 6900 songs

Conclusion

All in all, it seems like my trends of Spotify listening data was pretty specific. It turns out that I mainly listen to music during the evening/night. Additionally I uncovered that I tend to heavily prepare for concerts by listening to a lot of music from that artist before seeing them so that I’m able to sing the lyrics to my hearts content. It also seems that compared to my previous spotify wraps, my top artists are the same with some minor deviances towards the end of my top 10. Some changes that I’d like to make is listening to music more during the day, and trying to diversify my catalog with something other than Tory Lanez, Daniel Caesar and Lil Nas X.

League of Devaughn: An Analysis of my previous League of Legends Games

What is League of Legends?

League of Legends (LoL) is a competitive multiplayer online battle arena game where two teams of five players battle to destroy the opposing team’s base. Each player controls a unique character, called a “champion,” that fulfills specific roles in the team. The roles are as follows:

  • Top Lane: Usually features durable champions who excel in one-on-one fights and can split-push objectives.
  • Jungle: Moves around the map defeating neutral monsters and helping other lanes by setting up ambushes (called “ganks”).
  • Mid Lane: Often plays champions that deal high burst damage and can influence multiple parts of the map.
  • Bot Lane (ADC): Focuses on consistent ranged damage and relies heavily on gold and positioning.
  • Support: Aids the team with healing, shielding, or crowd control, often paired with the ADC in the bot lane.

Victory depends on coordination, individual performance, and strategic decisions throughout the match. This analysis seeks to determine which champions yield the highest win rates in my gameplay and uncover insights into how I can improve my overall performance. Within league, I primarily play support, so most of the games seen in my analysis will comprise of champions that fit that role.

Dataset and Variables

The visualizations in this report were created from an API pulled Dataset from Riot games. Below is the code used to extract the data used.

import requests
import pandas as pd
import openpyxl
import time
import json
#Getting puuid
api_key = "RGAPI-d495340f-90ee-4c2c-845a-8f46e26c603c"
puuid_apiurl= "https://americas.api.riotgames.com/riot/account/v1/accounts/by-riot-id/Lil%20Dev/NA1?api_key="+api_key
resp= requests.get(puuid_apiurl)
player_info = resp.json()
puuid=player_info['puuid']
print(puuid)

#Getting Last 100 Matches
match_apiurl= "https://americas.api.riotgames.com/lol/match/v5/matches/by-puuid/g1x4Ag2D0oWbkoegi0OfgOvPJq3OgAzSVqPzt4eUg8obAM-c0noIlkr6pLJMa89MHT7iH9YU2kJbTg/ids?start=0&count=100&api_key="+api_key
resp_matches = requests.get(match_apiurl)
matches=resp_matches.json()
print(matches)

#Getting match info
match_info = "https://americas.api.riotgames.com/lol/match/v5/matches/"
classic_matches = []

for i in matches:
    resp_matchinfo = requests.get(match_info + i + "?api_key=" + api_key)
    time.sleep(.83333)
    match_data = resp_matchinfo.json()
    if match_data['info'].get('gameMode') != 'CLASSIC':
        continue
    puuid_index=match_data['metadata']['participants'].index(puuid)
    my_matches=match_data['info']['participants'][puuid_index]
    game_duration= match_data['info']['gameDuration']
    time_stamp= match_data['info']['gameCreation']
    my_matches['gameDuration']=game_duration
    my_matches['Date']=time_stamp
    classic_matches.append(my_matches)

#exporting my data
df=pd.DataFrame(classic_matches)
df.to_excel("Lolol.xlsx",'plzwork')

This code extracts all of my games labeled as classic, which riot describes as any game played on the normal summoners rift map. The specific variables within this data set that I used are (The Dataset will be available to download at the end):

  • Champion Name – Which Champion I played
  • Champ Level
  • Number of Games Played – How many games did I play
  • Wins
  • Win Rate – Wins/total number of games
  • Role – What role did I play that game
  • Kill/Death Average – A ratio that determines how many kills I get per death. (Calculated by adding up my kills and assists, and then dividing by my deaths. A higher number is better)
  • Average Game Duration (In Minutes)

Visualizations

In this Pie chart, it shows my total win rate overall, at a whopping 58.54%. This is over the course of 41 Games.
This Stacked Bar chart highlights my win rates on all of the different champions found in my match history. The Champs with more than 1 game give a better representation of my performance compared to 1 off games.
As mentioned in my introduction, my main role is support. In league you pick 2 roles that you want to play and more often than not you are drafted to that role. Had I performed this analysis 4 years ago, most of my roles would be mid/top rather than support.
This Colored bar chart shows my KDA by champion in my match history, along with the amount of games dictated by a darker bar. Karma and Talon are high because I played 1 game with them and died 1 time or less with them. Higher Values as a KDA means on average you get more kills than deaths.
This line graph shows my average game time by champion in my match history. In league, ending a game earlier could mean that your team severely outperformed the enemy, so they surrendered. So a lower average is good! Some averages are high because I only played one game with that champion and the game got drawn out. (Like Milio)

Conclusion

This analysis highlights clear patterns in my gameplay, that I win most consistently on a few key champions, I’m strongest in the Support role and my most decisive games tend to be the shortest. These trends give me a concrete direction for improvement, to lean into my best champions, gather more data where sample sizes are small, and examine what leads to longer, less successful games. As I continue adding matches to this dataset, I’ll be able to refine these insights and track my progress over time. Ultimately, this project shows how even casual gaming data can reveal meaningful patterns and help guide better gameplay decisions

Mosquitoes in NYC: A 311 Analysis

Introduction to Research

From May 2016 to September 2025, I sought out to understand if certain boroughs in New York City had more mosquito complaints for longer periods during the year. However, doing some preliminary data analysis made me realize that this question alone doesn’t do the data any justice. Ultimately, my findings led me to additionally ask, how long, on average, do 311 complaints about mosquitoes stay open, which location type had the most complaints, and how does the Department of Health and Mental Hygiene decide when to close a request? 

Dataset and Variables

My data set came from 311’s mega-list of complaints on NYC Open Data. The data is maintained through New York City’s Office of Technology and Innovation, which they update daily. Every row means that there was a 311 service request. The subset of data that I extracted from this mega-list was all the service requests that had the complaint type “Mosquitoes.” There were 5,180 complaint types that matched “Mosquitoes.” The variables that I focused on mainly were borough, created date and closed date, complaint type, location type, and I made my own variable using the created date and closed date called “Duration of Requests (in hours)“. Additionally, the data used subsets of the created date columns to see differences between years, and even months. You can find the original data set here MosquitosNYC. 

Visualizations

Within this dataset, I looked into which borough had the most complaints and shockingly Queens had more than half of the complaints whether the request was open or closed at 2,245 (43.41%)

For each borough, we took a look into the top 5 location types where complaints came from. Overwhelmingly, the complaints came from Residential Properties for all boroughs, with Street area and Public Park/Garden alternating between 2nd and 3rd for all other boroughs.

For this chart, we looked at the time periods by month in which each borough has their “mosquito season.” Ubiquitously, each borough’s mosquito season is April through October. All of the 4 boroughs aside from Manhattan peak in August, while Manhattan has their peak complaints in September.

The following 2 charts made me rethink how I wanted to visualize this data. I had hypotheses that were proven wrong and this opened up more in depth research which made me think that the Department of Health and Mental Hygiene aren’t taking these mosquito reports seriously. Upon sharing this data with colleagues, and seeing their research for example, I learned that other 311 complaint types had different resolution texts. In my dataset however, the only response that the DOHMH has given is “Thank you for your report. The Department of Health and Mental Hygiene will use the information that you provided to help track and control mosquito populations throughout the City. No further information will be available from 311 on your report.”

This chart opened my eyes to the way the data is handled for Mosquito complaints. I had assumed that all of the complaints that was open would be more recent. This chart showcases the amount of open/closed complaints for each year. The orange line in this chart represents Open complaints. There are no open complaints in 2025 (Aside from ones that are made each day and are closed almost immediately). All of the open requests are older than 2018.

The findings in the above graph were shocking. What steps are DOHMH taking to ensure that people’s complaints about mosquitoes are being met aside from their sporadic mosquito sprayings? One would think that they would take more action rather than a repeated response for almost 10 years. Upon doing more research, I learned that every year since 1999, Mosquitoes in NYC have tested positive for West Nile Virus. Additionally, in 2025, mosquitoes have tested positive for Jamestown Canyon Virus for the first time.

This chart corroborates what made me expand my horizons on this dataset. For something like mosquitoes, I expected that the average for how long a request took to be resolved would for the most part look similar between each year. However, from 2018 up until 2021, for some reason the complaints were open for much longer. In 2018, requests were open on average for 12,000 hours This made me begin to question the Department of Mental Health and Hygiene’s methodology as to when they decide a request has been “resolved.” Additionally, for 2025 the average time for a request to be open was about 30 minutes.

Improvements

Some limitations to this report that could be improved on in future research is more cross examination on if there’s other entities that also deal with mosquito control aside from DOHMH. Additionally, a geographic visual to showcase where complaints were made would have made this report a bit more personalized. Lastly, This report would have benefitted from a cross analysis of community boards, and if there are any meetings where they discuss mosquitos, and what actions were taken as a result.

Conclusion

This section of research was mainly a passion project as someone that recently moved to Brooklyn from The Bronx 2 months ago. In the Bronx, I never saw mosquitoes, but moving to Brooklyn I see mosquitoes all the time and they have become the bane of my existence. I was interested to see what was being done about it through 311complaints. This quickly turned into a call for action research project after seeing that there are data discrepancies, and resolutions from the DOHMH that are vague in how they are satisfying Resident Complaints about Mosquitoes. There needs to be more done, pest control coming from DOHMH that takes a personalized approach to mosquito complaints. The DOHMH can contact local businesses that specialize in mosquito extermination and use them as a dispatch squad for personal complaints. Taking these steps, amongst others would ensure that mosquito complaints are treated not just as data points, but as real concerns affecting the daily lives of New Yorkers.