Back to Blog
March 7, 2024
Pratyusha
en

Top 15 Python Projects for 2024 - Code Available

Data Science
Python
Top 15 Python Projects for 2024 - Code Available

Scientific computing, machine learning, and data analysis all heavily rely on Python, making it an essential tool for data science experts. 

Python remains the second most-used programming language on GitHub. Interestingly, Python's use grew more than 22% year over year, with more than four million developers on GitHub. source

{% module_block module "widget_11ecd362-512c-49ee-bd11-e1207b10d60f" %}{% module_attribute "child_css" is_json="true" %}{% raw %}{}{% endraw %}{% end_module_attribute %}{% module_attribute "css" is_json="true" %}{% raw %}{}{% endraw %}{% end_module_attribute %}{% module_attribute "definition_id" is_json="true" %}{% raw %}null{% endraw %}{% end_module_attribute %}{% module_attribute "field_types" is_json="true" %}{% raw %}{"link":"text","text":"text"}{% endraw %}{% end_module_attribute %}{% module_attribute "label" is_json="true" %}{% raw %}null{% endraw %}{% end_module_attribute %}{% module_attribute "link" is_json="true" %}{% raw %}"https://www.odinschool.com/blog/python-jobs-2024"{% endraw %}{% end_module_attribute %}{% module_attribute "module_id" is_json="true" %}{% raw %}135590387735{% endraw %}{% end_module_attribute %}{% module_attribute "path" is_json="true" %}{% raw %}"/OdinSchool_V3/modules/Blog/blog - source links"{% endraw %}{% end_module_attribute %}{% module_attribute "schema_version" is_json="true" %}{% raw %}2{% endraw %}{% end_module_attribute %}{% module_attribute "smart_objects" is_json="true" %}{% raw %}null{% endraw %}{% end_module_attribute %}{% module_attribute "smart_type" is_json="true" %}{% raw %}"NOT_SMART"{% endraw %}{% end_module_attribute %}{% module_attribute "tag" is_json="true" %}{% raw %}"module"{% endraw %}{% end_module_attribute %}{% module_attribute "text" is_json="true" %}{% raw %}"Python Jobs [2024]"{% endraw %}{% end_module_attribute %}{% module_attribute "type" is_json="true" %}{% raw %}"module"{% endraw %}{% end_module_attribute %}{% module_attribute "wrap_field_tag" is_json="true" %}{% raw %}"div"{% endraw %}{% end_module_attribute %}{% end_module_block %}

The process of improving your Python programming abilities never ends, regardless of your level of experience. Hence, its important to join a comprehensive data science course whose curriculum is always updated as per the industry standards.

The best example would be that of Sourav Karmakar, who used his bench time at TCS to practice Python, and here he is, a successful data scientist with Tiger Analytics, drawing almost 6 times the salary he used to get before the transition.

OdinGrad | Sourav-Karmakar

This article will help you practice more by providing code along with the top Python projects.

Beginner-level Python Projects

#1. Personal Budget Manager

A command-line application to manage your personal finances. You can add expenses and income, categorize them, and see summaries of your financial activities.

import json

def load_transactions():
    try:
        with open('transactions.json', 'r') as file:
            return json.load(file)
    except FileNotFoundError:
        return []

def save_transactions(transactions):
    with open('transactions.json', 'w') as file:
        json.dump(transactions, file, indent=4)

def add_transaction(transactions, type, amount, category):
    transactions.append({"type": type, "amount": amount, "category": category})
    save_transactions(transactions)

def show_summary(transactions):
    income = sum(t['amount'] for t in transactions if t['type'] == 'income')
    expense = sum(t['amount'] for t in transactions if t['type'] == 'expense')
    balance = income - expense
    print(f"Total Income: {income}, Total Expense: {expense}, Balance: {balance}")

transactions = load_transactions()

# Example usage
add_transaction(transactions, 'income', 500, 'salary')
add_transaction(transactions, 'expense', 100, 'groceries')
show_summary(transactions)

#2. Simple Chatbot

A simple chatbot that can perform basic interactions with the user, using predefined responses to simulate conversation.

def chatbot_response(message):
    message = message.lower()
    if "hello" in message:
        return "Hello there! How can I help you?"
    elif "how are you" in message:
        return "I'm a bot, so I'm always doing well, thanks!"
    elif "bye" in message:
        return "Goodbye! Have a nice day!"
    else:
        return "I'm not sure how to respond to that. Can you ask something else?"

# Example interaction with the chatbot
user_message = input("You: ")
print("Bot:", chatbot_response(user_message))

#3. Email Slicer

An application that takes an email address and extracts the username and domain name.

Key Concepts Covered

  1. String manipulation and methods

  2. Working with user input

def email_slicer(email):
    username, domain = email.split('@')
    return username, domain

email = input("Enter your email: ").strip()
username, domain = email_slicer(email)
print(f"Username: {username}, Domain: {domain}")

{% module_block module "widget_221c84f5-9dd8-4ca9-9d6f-842fd28a436c" %}{% module_attribute "child_css" is_json="true" %}{% raw %}{}{% endraw %}{% end_module_attribute %}{% module_attribute "css" is_json="true" %}{% raw %}{}{% endraw %}{% end_module_attribute %}{% module_attribute "definition_id" is_json="true" %}{% raw %}null{% endraw %}{% end_module_attribute %}{% module_attribute "field_types" is_json="true" %}{% raw %}{"image_desktop":"image","image_link":"link","image_mobile":"image"}{% endraw %}{% end_module_attribute %}{% module_attribute "image_desktop" is_json="true" %}{% raw %}{"alt":"data science course","height":600,"loading":"lazy","max_height":500,"max_width":2000,"size_type":"auto_custom_max","src":"https://odinschool-20029733.hs-sites.com/hubfs/1-2.webp","width":2400}{% endraw %}{% end_module_attribute %}{% module_attribute "image_link" is_json="true" %}{% raw %}{"no_follow":false,"open_in_new_tab":true,"rel":"noopener","sponsored":false,"url":{"content_id":null,"href":"https://www.odinschool.com/data-science-course","href_with_scheme":"https://www.odinschool.com/data-science-course","type":"EXTERNAL"},"user_generated_content":false}{% endraw %}{% end_module_attribute %}{% module_attribute "image_mobile" is_json="true" %}{% raw %}{"alt":"DS - Mobile-version-of-blog-ads-_2_","height":600,"loading":"lazy","max_height":600,"max_width":1000,"size_type":"auto","src":"https://odinschool-20029733.hs-sites.com/hubfs/DS%20-%20Mobile-version-of-blog-ads-_2_.webp","width":1000}{% endraw %}{% end_module_attribute %}{% module_attribute "label" is_json="true" %}{% raw %}null{% endraw %}{% end_module_attribute %}{% module_attribute "module_id" is_json="true" %}{% raw %}132581904694{% endraw %}{% end_module_attribute %}{% module_attribute "path" is_json="true" %}{% raw %}"/OdinSchool_V3/modules/Blog/Blog Responsive Image"{% endraw %}{% end_module_attribute %}{% module_attribute "schema_version" is_json="true" %}{% raw %}2{% endraw %}{% end_module_attribute %}{% module_attribute "smart_objects" is_json="true" %}{% raw %}null{% endraw %}{% end_module_attribute %}{% module_attribute "smart_type" is_json="true" %}{% raw %}"NOT_SMART"{% endraw %}{% end_module_attribute %}{% module_attribute "tag" is_json="true" %}{% raw %}"module"{% endraw %}{% end_module_attribute %}{% module_attribute "type" is_json="true" %}{% raw %}"module"{% endraw %}{% end_module_attribute %}{% module_attribute "wrap_field_tag" is_json="true" %}{% raw %}"div"{% endraw %}{% end_module_attribute %}{% end_module_block %}

 

#4. Desktop Notifier App

A desktop notifier app that sends you a notification at scheduled intervals.

Key Concepts Covered

  1. Working with external libraries (plyer)

  2. Scheduling tasks

from plyer import notification
import time

def send_notification(title, message):
    notification.notify(
        title=title,
        message=message,
        timeout=10
    )

while True:
    # Send a notification every hour
    send_notification("Reminder", "Stretch your legs! It's been an hour.")
    time.sleep(3600)  # Sleep for 1 hour

#5. Currency Converter

A simple currency converter that uses an API to fetch the latest exchange rates and perform currency conversion.

Key Concepts Covered
  1. API requests

  2. Handling JSON data

  3. User input and error handling

import requests

def convert_currency(amount, from_currency, to_currency, api_key):
    url = f"https://api.exchangerate-api.com/v4/latest/{from_currency}"
    response = requests.get(url)
    data = response.json()
    rates = data['rates']
    converted_amount = amount * rates[to_currency]
    return converted_amount

# Example usage (You'll need a valid API key)
amount = 100
from_currency = 'USD'
to_currency = 'EUR'
api_key = 'YOUR_API_KEY_HERE'
print(f"{amount} {from_currency} is equal to {convert_currency(amount, from_currency, to_currency, api_key)} {to_currency}")

Steps to get API key

  1. Visit the ExchangeRate-API website: Go to the ExchangeRate-API website.

  2. Sign Up for an Account: You will need to sign up for an account by providing your email address and creating a password. ExchangeRate-API usually offers a free tier, which might be sufficient for basic usage or testing purposes.

  3. Get Your API Key: After signing up, you will be given an API key. This is a unique identifier that allows you to make requests to their service.

  4. Use Your API Key in the Code: Replace 'YOUR_API_KEY_HERE' in your code with the actual API key you received. Note, however, that your current code snippet does not utilize the api_key variable in the request. To properly use the API key, you'll likely need to adjust your code according to the API's documentation, as some APIs require the key to be included in the request headers or as a query parameter.

#6. Simple File Organizer

A script that organizes files in a directory into subdirectories based on file type.
Key Concepts Covered

  1. File and directory operations

  2. Working with paths

  3. Automating routine tasks

import os
from pathlib import Path

def organize_directory(path):
    for item in os.listdir(path):
        item_path = Path(path) / item
        if item_path.is_file():
            file_type = item.split('.')[-1]
            directory = Path(path) / file_type
            directory.mkdir(exist_ok=True)
            item_path.rename(directory / item)

# Example usage
organize_directory('path/to/your/directory')

quote
He found Python much easier to learn when compared to other languages. Shubham explored further and learnt different Python tools like Pandas, Numpy, etc. At this stage, he wanted a certification in it.

OdinGrad - Shubham success story

Python Projects for Intermediate Level

#1. Real-time Face Recognition System

Develop a Python application that can identify and label faces in a video stream in real-time.

import face_recognition

import cv2

import numpy as np

# Load a sample picture and learn how to recognize it.

your_image = face_recognition.load_image_file("your_image.jpg")

your_face_encoding = face_recognition.face_encodings(your_image)[0]

# Create arrays of known face encodings and their names

known_face_encodings = [your_face_encoding]

known_face_names = ["Your Name"]

# Initialize some variables

face_locations = []

face_encodings = []

face_names = []

process_this_frame = True

# Capture video from the first webcam

video_capture = cv2.VideoCapture(0)

while True:

    # Grab a single frame of video

    ret, frame = video_capture.read()

    # Resize frame of video to 1/4 size for faster face recognition processing

    small_frame = cv2.resize(frame, (0, 0), fx=0.25, fy=0.25)

    # Convert the image from BGR color (which OpenCV uses) to RGB color (which face_recognition uses)

    rgb_small_frame = small_frame[:, :, ::-1]

    # Only process every other frame of video to save time

    if process_this_frame:

        # Find all the faces and face encodings in the current frame of video

        face_locations = face_recognition.face_locations(rgb_small_frame)

        face_encodings = face_recognition.face_encodings(rgb_small_frame, face_locations)

        face_names = []

        for face_encoding in face_encodings:

            # See if the face is a match for the known face(s)

            matches = face_recognition.compare_faces(known_face_encodings, face_encoding)

            name = "Unknown"

            # Use the known face with the smallest distance to the new face

            face_distances = face_recognition.face_distance(known_face_encodings, face_encoding)

            best_match_index = np.argmin(face_distances)

            if matches[best_match_index]:

                name = known_face_names[best_match_index]

            face_names.append(name)

    process_this_frame = not process_this_frame

    # Display the results

    for (top, right, bottom, left), name in zip(face_locations, face_names):

        # Scale back up face locations since the frame we detected in was scaled to 1/4 size

        top *= 4

        right *= 4

        bottom *= 4

        left *= 4

        # Draw a box around the face

        cv2.rectangle(frame, (left, top), (right, bottom), (0, 255, 0), 2)

        # Draw a label with a name below the face

        cv2.rectangle(frame, (left, bottom - 35), (right, bottom), (0, 255, 0), cv2.FILLED)

        font = cv2.FONT_HERSHEY_DUPLEX

        cv2.putText(frame, name, (left + 6, bottom - 6), font, 0.5, (255, 255, 255), 1)

    # Display the resulting image

    cv2.imshow('Video', frame)

    # Hit 'q' on the keyboard to quit!

    if cv2.waitKey(1) & 0xFF == ord('q'):

        break

# Release handle to the webcam

video_capture.release()

cv2.destroyAllWindows()

{% module_block module "widget_9dffdfae-174e-417b-9074-3af5364c070d" %}{% module_attribute "child_css" is_json="true" %}{% raw %}{}{% endraw %}{% end_module_attribute %}{% module_attribute "css" is_json="true" %}{% raw %}{}{% endraw %}{% end_module_attribute %}{% module_attribute "definition_id" is_json="true" %}{% raw %}null{% endraw %}{% end_module_attribute %}{% module_attribute "field_types" is_json="true" %}{% raw %}{"image_desktop":"image","image_link":"link","image_mobile":"image"}{% endraw %}{% end_module_attribute %}{% module_attribute "image_desktop" is_json="true" %}{% raw %}{"alt":"1-2","height":600,"loading":"lazy","max_height":500,"max_width":2000,"size_type":"auto_custom_max","src":"https://odinschool-20029733.hs-sites.com/hubfs/1-2.webp","width":2400}{% endraw %}{% end_module_attribute %}{% module_attribute "label" is_json="true" %}{% raw %}null{% endraw %}{% end_module_attribute %}{% module_attribute "module_id" is_json="true" %}{% raw %}132581904694{% endraw %}{% end_module_attribute %}{% module_attribute "path" is_json="true" %}{% raw %}"/OdinSchool_V3/modules/Blog/Blog Responsive Image"{% endraw %}{% end_module_attribute %}{% module_attribute "schema_version" is_json="true" %}{% raw %}2{% endraw %}{% end_module_attribute %}{% module_attribute "smart_objects" is_json="true" %}{% raw %}null{% endraw %}{% end_module_attribute %}{% module_attribute "smart_type" is_json="true" %}{% raw %}"NOT_SMART"{% endraw %}{% end_module_attribute %}{% module_attribute "tag" is_json="true" %}{% raw %}"module"{% endraw %}{% end_module_attribute %}{% module_attribute "type" is_json="true" %}{% raw %}"module"{% endraw %}{% end_module_attribute %}{% module_attribute "wrap_field_tag" is_json="true" %}{% raw %}"div"{% endraw %}{% end_module_attribute %}{% end_module_block %}

 

#2. Sentiment Analysis Tool

The goal of this project is to create a Python application that can determine the sentiment of a given piece of text. The application will analyze text inputs (such as sentences, paragraphs, or entire documents) and classify the sentiment as positive, negative, or neutral.

Skills Developed:

  1. Natural Language Processing (NLP): Learn the basics of NLP, including how to work with textual data, tokenize words, and analyze sentiment.

  2. Data Analysis: Practice handling and processing data, potentially working with large datasets of text.

  3. Libraries and APIs: Gain experience with Python libraries like textblob and pandas, and learn how to leverage them for sentiment analysis and data manipulation.

from textblob import TextBlob

# Example text
text = "Python is amazing, but learning it can be challenging."

# Analyze sentiment
blob = TextBlob(text)
print(blob.sentiment)
# Output: Sentiment(polarity=0.21666666666666667, subjectivity=0.5833333333333334)

# For a dataset, read using pandas and apply sentiment analysis on each row
# df = pd.read_csv('your_dataset.csv')
# df['sentiment'] = df['text_column'].apply(lambda x: TextBlob(x).sentiment.polarity)

#3. Custom Command-Line Tool

Develop a versatile command-line tool for a specific task, such as batch processing files, text manipulation, or generating reports from datasets. This tool will accept various command-line arguments to perform its functions dynamically.

Skills Developed:

  1. Command-Line Interface (CLI) Design: Learn how to design and implement a user-friendly CLI, including parsing command-line arguments and providing useful feedback to users.

  2. File and Data Processing: Enhance your skills in reading from and writing to files, as well as performing operations on data (e.g., filtering, sorting, transforming).

  3. Automation: Understand how to automate repetitive tasks, improving efficiency and productivity.

import sys

def process_command(command):
    # Example functionality: print reversed command
    print(command[::-1])

if __name__ == "__main__":
    if len(sys.argv) > 1:
        process_command(sys.argv[1])
    else:

Related Articles