Email Spam Detection

Mon 30 June 2025
import pandas as pd  
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
import streamlit as st  
data = pd.read_csv('C:/Users/HP/Desktop/OIB-SIP/emailspam/dataset-mail/spam.csv', encoding='latin-1')
print("Original Shape:", data.shape)
Original Shape: (5572, 5)
print(data.head())
     v1                                                 v2 Unnamed: 2  \
0   ham  Go until jurong point, crazy.. Available only ...        NaN   
1   ham                      Ok lar... Joking wif u oni...        NaN   
2  spam  Free entry in 2 a wkly comp to win FA Cup fina...        NaN   
3   ham  U dun say so early hor... U c already then say...        NaN   
4   ham  Nah I don't think he goes to usf, he lives aro...        NaN

  Unnamed: 3 Unnamed: 4  
0        NaN        NaN  
1        NaN        NaN  
2        NaN        NaN  
3        NaN        NaN  
4        NaN        NaN
data = data[['v1', 'v2']]
data.drop_duplicates(inplace=True)
data.dropna(inplace=True)
print("\nCleaned Shape:", data.shape)
Cleaned Shape: (5169, 2)
data['v1'] = data['v1'].replace(['ham', 'spam'], ['Not Spam', 'Spam'])
data.rename(columns={'v1': 'Category', 'v2': 'Message'}, inplace=True)
print("\nLabel Distribution:\n", data['Category'].value_counts())
Label Distribution:
 Category
Not Spam    4516
Spam         653
Name: count, dtype: int64
mess = data['Message']
cat = data['Category']
mess_train, mess_test, cat_train, cat_test = train_test_split(mess, cat, test_size=0.2, random_state=0, stratify=cat)
cv = CountVectorizer(stop_words='english')
features_train = cv.fit_transform(mess_train)
features_test = cv.transform(mess_test)
model = MultinomialNB()
model.fit(features_train, cat_train)
MultinomialNB()
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
print("Accuracy:", model.score(features_test, cat_test))
Accuracy: 0.9825918762088974
def predict(message):
  message = cv.transform([message]).toarray()
  result = model.predict(message)
  return result
st.header("Email Spam Detector")
2025-06-30 02:04:29.811 WARNING streamlit.runtime.scriptrunner_utils.script_run_context: Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.
2025-06-30 02:04:30.274 
  Warning: to view this Streamlit app on a browser, run it with the following
  command:

    streamlit run C:\Users\HP\miniconda3\envs\py312\Lib\site-packages\ipykernel_launcher.py [ARGUMENTS]
2025-06-30 02:04:30.276 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.
2025-06-30 02:04:30.277 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.





DeltaGenerator()
output = predict("WINNER!! This is the secret code to unlock the money: C3421.")
print(output)
['Spam']
input_message=st.text_input("Enter a message")
2025-06-30 02:04:30.306 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.
2025-06-30 02:04:30.310 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.
2025-06-30 02:04:30.311 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.
2025-06-30 02:04:30.314 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.
2025-06-30 02:04:30.317 Session state does not function when running a script without `streamlit run`
2025-06-30 02:04:30.318 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.
2025-06-30 02:04:30.320 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.
2025-06-30 02:04:30.321 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.
if st.button('Go'):
    output=predict(input_message)
    st.text(output)
else:
    pass
2025-06-30 02:04:30.333 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.
2025-06-30 02:04:30.335 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.
2025-06-30 02:04:30.335 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.
2025-06-30 02:04:30.336 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.
2025-06-30 02:04:30.337 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.
2025-06-30 02:04:30.339 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.



Score: 20

Category: pandas-work