Think there's an issue with your model here - your confusion matrix is showing that your model never identifies an email as being 'spam' (it never predicts any 1's).
In essence, your model is simply stating 'all emails aren't spam' - so whilst your accuracy is 74% it isn't learning any new information.
My best guess is that in your first bit of code, where you're saving 'cleaned_data.csv' that you've somehow saved a version of the data filtered for only non-spam emails and used that for training.
However, nice article overall :)