Skip to content

Instantly share code, notes, and snippets.

@bondeabhijeet
Last active March 5, 2025 03:45
Show Gist options
  • Save bondeabhijeet/3c40bdf1bebe0bb93ac004a42c5045d3 to your computer and use it in GitHub Desktop.
Save bondeabhijeet/3c40bdf1bebe0bb93ac004a42c5045d3 to your computer and use it in GitHub Desktop.
Chat with AI

The chat involves a user interacting with GitHub Copilot to solve a problem. Below is a summary of the input and output for each request in the chat:

Request 1:

Input:

import the data file that we have written just now, and then select the following fields course, days, times and save that to a dataframe

Output:

import pandas as pd

# Load the CSV file
file_path = 'c:/Users/bonde/Downloads/filtered_df.csv'
df = pd.read_csv(file_path)

# Select the specified fields
selected_fields_df = df[['Course', 'Days', 'Times']]

# Display the resulting dataframe
print(selected_fields_df)

Request 2:

Input:

since the times column has intervals of time for the classes, separate the start time and end time for the classes

Output:

import pandas as pd

# Load the CSV file
file_path = 'c:/Users/bonde/Downloads/filtered_df.csv'
df = pd.read_csv(file_path)

# Select the specified fields
selected_fields_df = df[['Course', 'Days', 'Times']]

# Separate the start time and end time
selected_fields_df[['Start Time', 'End Time']] = selected_fields_df['Times'].str.split('-', expand=True)

# Display the resulting dataframe
print(selected_fields_df)

Request 3:

Input:

now we want to schedule the maximum number of courses that can be taken without scheduling conflicts (including time conflicts and course conflicts, the days column contains R (Thursday), TR (Tuesday and Thursday) or MWF (Monday, Wednesday, and Friday).

Output:

import pandas as pd

# Load the CSV file
file_path = 'c:/Users/bonde/Downloads/filtered_df.csv'
df = pd.read_csv(file_path)

# Select the specified fields
selected_fields_df = df[['Course', 'Days', 'Times']]

# Separate the start time and end time
selected_fields_df[['Start Time', 'End Time']] = selected_fields_df['Times'].str.split('-', expand=True)

# Convert Start Time and End Time to datetime for comparison
selected_fields_df['Start Time'] = pd.to_datetime(selected_fields_df['Start Time'], format='%I:%M%p')
selected_fields_df['End Time'] = pd.to_datetime(selected_fields_df['End Time'], format='%I:%M%p')

# Sort courses by end time
sorted_courses = selected_fields_df.sort_values(by='End Time')

# Function to check if two courses conflict
def courses_conflict(course1, course2):
    days1 = set(course1['Days'])
    days2 = set(course2['Days'])
    if days1 & days2:  # Check if there are common days
        if course1['End Time'] > course2['Start Time'] and course1['Start Time'] < course2['End Time']:
            return True
    return False

# Schedule courses without conflicts
scheduled_courses = []
last_selected_course = None

for index, course in sorted_courses.iterrows():
    if last_selected_course is None or not courses_conflict(last_selected_course, course):
        scheduled_courses.append(course)
        last_selected_course = course

# Convert the list of scheduled courses to a DataFrame
scheduled_courses_df = pd.DataFrame(scheduled_courses)

# Display the resulting dataframe
print(scheduled_courses_df)

Request 4:

Input:

write a Python program by using BeautifulSoup to process an HTML file. also display the first few rows of the schedule as a pandas DataFrame. Also, add messages to explain what’s happening at each and every step

Output:

from bs4 import BeautifulSoup
import pandas as pd

# File path where the HTML file is located
file_path = "Class Schedule - Department of Computer Science and Engineering - University at Buffalo.html"

# Open and read the HTML file, handling potential errors with a try-except block
try:
    with open(file_path, "r", encoding="utf-8") as file:
        content = file.read()  # Read the entire content
        soup = BeautifulSoup(content, "html.parser")  # Parse the HTML content with BeautifulSoup
except FileNotFoundError:
    print(f"Error: The file at {file_path} was not found.")
    soup = None  # Assign None to soup if the file isn't found

# Check if the soup object is populated, which means the file was read successfully
if soup:
    # Find all tables in the parsed HTML
    tables = soup.find_all("table")
    
    # Check if at least one table is found
    if tables:
        # Trying to be extra cautious by checking for the structure of the table
        first_table = tables[0]
        if first_table.find('th'):  # Ensure the table has headers
            print("First table contains headers, proceeding to extract data.")
            df = pd.read_html(str(first_table))[0]  # Directly convert the first table to DataFrame
        else:
            print("The first table does not contain headers. Skipping conversion.")
            df = pd.DataFrame()  # Empty DataFrame if headers are missing
    else:
        print("No tables were found in the HTML.")
        df = pd.DataFrame()  # Empty DataFrame if no tables are found
else:
    df = pd.DataFrame()  # If soup is None (file not read), return an empty DataFrame

# Displaying the first few rows of the DataFrame to verify the result
if not df.empty:
    print("Displaying the first few rows of the extracted class schedule:")
    print(df.head())  # Display first few rows to inspect
else:
    print("The extracted table is empty or not found.")

Input:

select courses that are 5xx

Output:

import re

# Filter rows where the 'Course Code' column matches the pattern 'CSE 5xx'
pattern = re.compile(r'CSE 5\d{2}')
filtered_df = df[df['Course'].apply(lambda x: bool(pattern.match(x)))]

# Display the filtered DataFrame
filtered_df.head()

Input:

drop the course that has course as 'Internship'

Output:

# Drop the internship course
filtered_df = filtered_df[~filtered_df['Title'].str.contains('Internship', case=False)]

# Display the filtered DataFrame
filtered_df.head()

Input:

save the dataframe to a csv file

Output:

filtered_df.to_csv('filtered_df.csv', index=False)

Input:

re-read the file that was written moments ago and display head

Output:

import pandas as pd

# Read the CSV file
imported_df = pd.read_csv('filtered_df.csv')

# Display the first few rows of the imported DataFrame
imported_df.head()

Input:

Drop all the columns except Course, Days, times

Output:

imported_df = imported_df[['Course', 'Days', 'Times']]

# Display the updated DataFrame
imported_df.head()

Input:

Split the times into start and end time based by spliting based on -

Output:

# Split the 'Times' column into 'Start Time' and 'End Time' columns
imported_df[['Start Time', 'End Time']] = imported_df['Times'].str.split('-', expand=True)

# Display the updated DataFrame
imported_df.head()

Input:

Change the 12 hour format for the columns start and end time to 24 hours

Output:

# Convert 'Start Time' and 'End Time' columns to 24-hour format
imported_df['Start Time'] = pd.to_datetime(imported_df['Start Time']).dt.strftime('%H:%M:%S')
imported_df['End Time'] = pd.to_datetime(imported_df['End Time']).dt.strftime('%H:%M:%S')

# Display the updated DataFrame
imported_df.head()

Input:

Based on the output of my last result, make a gantt chart in my account and save it to my local directory named ImageNew.png

Output:

Gantt Chart successfully createdOutput saved to "C:\Users\bonde\Downloads\ImageNew.png"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment