图12所示两个矩阵只有划圈的地方所有不同,图三四所示最小奇异值也并无过大差距,为何图56最小奇异值对应的两列V矩阵差距这么大?
user_df的数据不需要清洗,来看df。
随便从text中抽一条看看:
可见里面主要信息为中文,其余还有一些字符、@、英文,特别要注意的是,这是微博数据,也就是说[]里的内容并不是真正的文本,而是表情,如果没有注意这个,那提取关键词的时候这些表情就会变成最多的词,因为表情才是用户发的最多的,什么[哈哈]、[哭]什么的。
值得注意的是,除了这些之外,在观察了text文本数据内容,并且在后面提取了关键词后我们会发现,“转发微博”、“微博”、“哈哈”、“啊”这些词出现的频率很高,但是并没有实际含义,而且“哈哈”和“啊”这类词的长度不定,可以是任意个“哈”和“啊”,所以不能在停用词里去掉。所以根据这些,我们来清洗text文本数据。
df.text.replace(r'\[.*?\]','',regex=True,inplace=True)
df.text.replace(r'转发微博','',regex=True,inplace=True)
df.text.replace(r'轉發微博','',regex=True,inplace=True)
df.text.replace(r'微博','',regex=True,inplace=True)
df.text.replace(r'转发','',regex=True,inplace=True)
df.text.replace(r'哈*','',regex=True,inplace=True)
df.text.replace(r'啊*','',regex=True,inplace=True)
df['text']=df['text'].str.replace(r'[^\u4e00-\u9fa5]','')
df
得到的结果里只包含中文。但是有些行已经为空了,防止对我们后续造成影响,我们将这些空行去掉。首先填充Nan:
df.text=df.text.astype(str)
df.replace(to_replace=r'^\s*$',value=np.nan,regex=True,inplace=True)
df
然后去掉带Nan的行并将索引重排:
df.dropna(subset=['text'],axis=0,how='any',inplace=True)
df.reset_index(drop=True,inplace=True)
df
到这里为止数据就算是清理好了。