网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
在这里我使用的是colab内置环境,完整代码文末获取。
额外的所需包如下,大家自行安装
nltk
streamlit
pickle
1.数据收集和加载
我们将使用kaggle提供的数据集:数据集
该数据集 包含一组带有标记的短信文本,这些消息被归类为正常短信和垃圾短信。 每行包含一条消息。每行由两列组成:v1 带有标签,(spam 或 ham),v2 是文本内容。
df=pd.read_csv('/content/spam/spam.csv',encoding='latin-1')#这里encoding需要指定为latin-1
# 查看一下数据基本情况
df.head()
v1 | v2 | Unnamed: 2 | Unnamed: 3 | Unnamed: 4 | |
---|---|---|---|---|---|
0 | ham | Go until jurong point, crazy… Available only … | NaN | NaN | NaN |
1 | ham | Ok lar… Joking wif u oni… | NaN | NaN | NaN |
2 | spam | Free entry in 2 a wkly comp to win FA Cup fina… | NaN | NaN | NaN |
3 | ham | U dun say so early hor… U c already then say… | NaN | NaN | NaN |
4 | ham | Nah I don’t think he goes to usf, he lives aro… | NaN | NaN | NaN |
该数据包含一组带有标记的短信数据,其中:
- v1表示短信标签,ham表示正常信息,spam表示垃圾信息
- v2是短信的内容
#去除不需要的列
df=df.iloc[:,:2]
#重命名列
df=df.rename(columns={"v1":"label","v2":"message"})
df.head()
label | message | |
---|---|---|
0 | ham | Go until jurong point, crazy… Available only … |
1 | ham | Ok lar… Joking wif u oni… |
2 | spam | Free entry in 2 a wkly comp to win FA Cup fina… |
3 | ham | U dun say so early hor… U c already then say… |
4 | ham | Nah I don’t think he goes to usf, he lives aro… |
# 将lable进行one-hot编码,其中0:ham,1:spam
from sklearn.preprocessing import LabelEncoder
encoder = LabelEncoder()
df['label']=encoder.fit_transform(df['label'])
df['label'].value_counts()
0 4825
1 747
Name: label, dtype: int64
可以看出一共有747个垃圾短信
# 查看缺失值
df.isnull().sum()
# 数据没有缺失值
label 0
message 0
dtype: int64