Welcome πŸ‘‹

Hi, I'm Jan Jacek Wejchert

Full Stack Developer

Based in Madrid, Spain

About Me

I am an ambitious student raised in Warsaw, Poland, with a long-standing passion for mathematics and analytical thinking. From an early stage, mathematics stood out to me as the most fundamental discipline for understanding the world around us, which led me to pursue Mathematics and Further Mathematics at A-level. I strongly believe that mathematical thinking provides one of the most solid foundations for problem-solving across any field. Alongside mathematics, I began exploring coding through summer schools, where I was first exposed to the creative and logical aspects of programming. This early experience sparked a growing interest that would later become a central part of my academic and professional direction. To build a broad and rigorous foundation, I chose to pursue an undergraduate degree in Economics at the University of St Andrews. I viewed economics as a strong baseline discipline β€” one that combines quantitative reasoning with real-world decision-making and general business knowledge. During my time at St Andrews, I continued to deepen my mathematical background by taking multiple mathematics modules in my first and second years, while also exploring other areas such as philosophy, which helped me develop critical and abstract thinking. It was during university that coding truly captured my attention. Through coursework and projects, I found myself genuinely enjoying spending hours working through programming challenges and building solutions β€” a clear signal that this was an area I wanted to pursue more seriously. At that point, I set out to find a path that combined my three core interests: mathematics, economics, and programming. This led me to pursue a Master’s degree in Business Analytics and Data Science β€” a decision that has proven to be exactly the right one. I am currently completing this degree, and I find the work both challenging and deeply engaging. For the first time, I feel I have a clear and coherent direction for my foreseeable future. Through this program, I am developing strong skills in coding, data analysis, and modern data architectures, and I am highly motivated to continue expanding this knowledge. I am excited to find an opportunity where I can apply these skills in practice, contribute meaningfully, and demonstrate the value I can bring in a professional setting. Outside of academics and technology, sport plays a central role in my life. It is essential to my mental well-being and one of my favourite ways to connect with others through shared passion and competition. While studying at St Andrews, I was fortunate to have access to the Old Course, allowing me to play golf regularly, and I was also part of a competitive tennis team representing the university against other institutions across Scotland β€” an experience I found both rewarding and formative. Overall, I consider myself a highly motivated and compassionate individual. When I discover something that genuinely interests me, I commit to it fully and with intensity. I work well in collaborative environments, value teamwork, and always aim to contribute meaningfully to group efforts.

Technical Skills

Technologies and tools I work with

Programming & Analytical Languages

Python SQL R (RStudio Stata Mathematica

Tools & Environments

Jupyter Notebokk PyCharm GitHub VS Code RStudio SQL development environments

Databases & Storage

Relational databases (DB2, MySQL) MongoDB HDFS & object storage (S3) Data lakes

Data Analysis & Modeling

Data cleaning & preparation Exploratory data analysis Time series analysis Forecasting

Education

My academic background

Master of Science in Business Analytics and Data Science

IE School of Science and Technology, Madrid, Spain

Running GPA: 3,92 out of 4

2025 - 2026

Bachelor of Science in Economics

University of St Andrews, St Andrews, Scotland

Graduated with Honours of the Second Class (Division l)

2021 - 2025

International A Levels

Akademeia High School, Warsaw, Poland

Economics, Mathematics, Further Mathematics, Polish (A*, A*, A*, A)

2019 - 2021

Projects

A showcase of my recent work and side projects

Data Analysis

F1 Data Project

Fun project conducted for python class to play with f1 data set and to come up with some story from the given data

Comeback King Decade Champions Who will come out on top
AI/ML

Analytics Dashboard

Data visualization platform with machine learning insights for business intelligence.

Python TensorFlow D3.js
Mobile

Social Media App

Mobile-first social platform with real-time messaging and personalized feeds.

React Native Firebase Redux
Performance

Real-Time Monitoring

System monitoring tool with real-time alerts and performance analytics.

Go WebSocket Docker

Experience

My professional journey

Senior Full Stack Developer

Tech Company Inc.

Led development of microservices architecture and mentored junior developers

2022 - Present
React Node.js AWS Docker

Full Stack Developer

Startup XYZ

Built customer-facing web applications and improved system performance by 40%

2020 - 2022
Vue.js Python PostgreSQL

Junior Developer

Digital Agency

Developed responsive websites and collaborated with design team

2018 - 2020
JavaScript HTML/CSS WordPress

Blog

Thoughts, tutorials, and insights

Tutorial Dec 15, 2024

Building Scalable Microservices with Node.js

Learn how to architect and deploy microservices that can handle millions of requests...

Opinion Dec 10, 2024

The Future of Web Development in 2025

My thoughts on emerging trends and technologies that will shape web development...

Guide Dec 5, 2024

Complete Guide to React Performance Optimization

Practical tips and techniques to make your React applications lightning fast...

Resume

Download or view my full resume

Download PDF

Your Name

Full Stack Developer

πŸ“§ your.email@example.com πŸ“ Madrid, Spain 🌐 yourwebsite.com

Professional Summary

Experienced Full Stack Developer with 5+ years of expertise in building scalable web applications. Proficient in modern JavaScript frameworks, cloud technologies, and agile methodologies. Passionate about creating efficient, user-centric solutions that drive business value.

Technical Skills

Frontend

React, TypeScript, Next.js, Tailwind CSS, Vue.js

Backend

Node.js, Python, Express, Django, REST APIs

Database

PostgreSQL, MongoDB, Redis, MySQL

DevOps

Docker, AWS, CI/CD, Kubernetes

The Comeback King: F1's Greatest Position-Gainer

A Python data analysis project exploring F1 driver comeback performance

Download Presentation

Project Overview

This project analyzes Formula 1 historical data to identify the greatest "comeback driver" in F1 history - the driver who gained the most positions during races across their career. Using a multi-category scoring system and a decade-based knockout competition, we crowned Sebastian Vettel as the ultimate Comeback King.

Language
Python
Tools
Pandas, Jupyter Notebook
Winner
Sebastian Vettel

Methodology

Categories for Evaluation:

1.
Average positions gained per race - includes dropped positions
2.
Total positions gained in all races - includes dropped positions
3.
Record positions gained within one race
4.
Circuits with highest average positions gained
5.
Circuit records for most positions gained
6.
Comeback Rate - percentage of races with positive position gain

Scoring System:

In each category, points were awarded to top 3 drivers:

  • 1st place: 3 points
  • 2nd place: 2 points
  • 3rd place: 1 point
  • Ties: All tied drivers receive points for that position

Competition Structure:

Drivers were grouped by decade (1950s-2020s), with decade winners advancing through knockout rounds until a final champion was crowned.

Python Code

1. Filter drivers with at least 24 races (1 season)

f1new = f1.groupby("driver")[["grid_starting_position"]].count().reset_index()
f1_group = f1new[f1new["grid_starting_position"] >= 24]["driver"]
f1_filtered = f1[f1["driver"].isin(f1_group)]

2. Calculate positions gained and filter by decade

race_finishers = f1_filtered[~f1_filtered["final_position"].isna()].copy()
race_finishers["positions_gained"] = race_finishers["grid_starting_position"] - race_finishers["final_position"]
race_finishers = race_finishers[(race_finishers["year"] >= 1960) & (race_finishers["year"] < 1970)]

3. Set up scoring system

from collections import defaultdict

driver_points = defaultdict(int)  # driver -> total points
rank_to_points = {1: 3, 2: 2, 3: 1}

4. Function to add points from race results

def add_points_from_series(ser, points_dict):
    current_rank = 0
    last_value = object()  # something that can't equal a real value
    for driver, value in ser.items():
        # new distinct value -> new place (1st, 2nd, 3rd, ...)
        if value != last_value:
            current_rank += 1
            last_value = value
        # only 1st/2nd/3rd place get points
        if current_rank > 3:
            break
        points_dict[driver] += rank_to_points[current_rank]

5. Evaluate all categories

# Category 1: Average positions gained per race
s1 = race_finishers.groupby("driver")["positions_gained"].mean().sort_values(ascending=False).head()
add_points_from_series(s1, driver_points)

# Category 2: Total positions gained in all races
s2 = race_finishers.groupby("driver")["positions_gained"].count().sort_values(ascending=False).head()
add_points_from_series(s2, driver_points)

# Category 3: Record positions gained within one race
s3 = race_finishers.groupby("driver")["positions_gained"].max().sort_values(ascending=False)
add_points_from_series(s3, driver_points)

# Category 4: Circuits with highest average positions gained
avg_gains = race_finishers.groupby(["circuit_name", "driver"])["positions_gained"].mean().reset_index()
best_avg = avg_gains.groupby("circuit_name")["positions_gained"].max().reset_index().rename(
    columns={"positions_gained": "max_avg_positions_gained"})
result = avg_gains.merge(best_avg, on="circuit_name")
result = result[result["positions_gained"] == result["max_avg_positions_gained"]]
s4 = result["driver"].value_counts().head(20)
add_points_from_series(s4, driver_points)

# Category 5: Circuit records for most positions gained
max_gains = race_finishers.groupby("circuit_name")["positions_gained"].max().reset_index().rename(
    columns={"positions_gained": "max_positions_gained"})
result = race_finishers.merge(max_gains, on="circuit_name")
result = result[result["positions_gained"] == result["max_positions_gained"]]
s5 = result["driver"].value_counts().head(10)
add_points_from_series(s5, driver_points)

# Category 6: Comeback Rate (percentage of races with positive position gain)
comeback_rate = race_finishers.assign(
    comeback = race_finishers["positions_gained"] > 0
).groupby("driver")["comeback"].mean() * 100
s6 = comeback_rate.sort_values(ascending=False).head(10)
add_points_from_series(s6, driver_points)

6. Determine decade winner

champion = dict(driver_points)
print(champion)

max_value = max(champion.values())
keys_with_max_value = [k for k, v in champion.items() if v == max_value]
print(keys_with_max_value)

Competition Results

Decade Champions

1950s
Johnny Claes
1960s
Carel Godin de Beaufort
1970s
Hector Rebaque
1980s
Marc Surer
1990s
Alex Caffi
2000s
Tarso Marques
2010s
Sebastian Vettel
2020s
Max Verstappen

Final Winner

πŸ† Sebastian Vettel πŸ†
The Comeback King