input: Write a python function to load a dataset, encode labels, split the data into training and testing sets, train a Naive Bayes model, and evaluate its accuracy.
  assert 'df' in load_and_prepare_data('dataset.csv')
  assert 'accuracy' in load_and_prepare_data('dataset.csv')
  assert isinstance(load_and_prepare_data('dataset.csv')['accuracy'], float)
output: def load_and_prepare_data(filepath):
      import pandas as pd
      from sklearn.model_selection import train_test_split
      from sklearn.preprocessing import LabelEncoder
      from sklearn.naive_bayes import GaussianNB
      from sklearn.metrics import accuracy_score
  
      # Load dataset
      df = pd.read_csv(filepath)
      
      # Encode labels
      le = LabelEncoder()
      df['label'] = le.fit_transform(df['label'])
      
      # Split data into features and labels
      X = df.drop('label', axis=1)
      y = df['label']
      
      # Split data into training and testing sets
      X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
      
      # Train Naive Bayes model
      model = GaussianNB()
      model.fit(X_train, y_train)
      
      # Make predictions
      y_pred = model.predict(X_test)
      
      # Evaluate accuracy
      accuracy = accuracy_score(y_test, y_pred)
      
      return {'df': df, 'accuracy': accuracy}