编程-科技

# 加载必要的依赖库
import re # for regular expressions
import pandas as pd
pd.set_option("display.max_colwidth", 200)
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import string
import nltk # for text manipulation
import warnings
warnings.filterwarnings("ignore", category=DeprecationWarning) # 不显示警告

# 1.读取数据。读取训练数据和测试数据
train = pd.read_csv("train.csv")
test = pd.read_csv("test.csv")

# 2.数据概览。查看并展示数据集中的指定数据信息。
train.head() # 查看训练数据的前五行

可以看到,数据包含三列,id,label和tweet。label是一个二进制数值,tweet包含了我们需要文本的内容。 看了头部数据之后,我们大概可以开始清理数据了,清理大概可以从下面几个方面入手:

由于隐私保护的问题,Twitter的用户名已经被隐去,取而代之的是‘@user’。 这个标签没有任何实际意义。
我们也考虑去掉标点符号,数字甚至特殊字符,他们对数据分析起不到任何作用。
大多数太短的词起不到什么作用,比如‘pdx’,‘his’,‘all’。所以我们也把这些词去掉。
在第四个数据中,有一个单词‘love’.与此同时,在余下的语料中我们可能会有更多的单词,例如loves,loving,lovable等等。这些词其实都是一个词。如果我们能把这些词都归到它们的根源上,也就是都转换成love,那么我们就可以大大降低不同单词的数量,而不会损失太多信息。

可以看到,数据包含三列,id,label和tweet。label是一个二进制数值,tweet包含了我们需要文本的内容。 看了头部数据之后,我们大概可以开始清理数据了,清理大概可以从下面几个方面入手:

  • 由于隐私保护的问题,Twitter的用户名已经被隐去,取而代之的是‘@user’。 这个标签没有任何实际意义。
  • 我们也考虑去掉标点符号,数字甚至特殊字符,他们对数据分析起不到任何作用。
  • 大多数太短的词起不到什么作用,比如‘pdx’,‘his’,‘all’。所以我们也把这些词去掉。
  • 在第四个数据中,有一个单词‘love’.与此同时,在余下的语料中我们可能会有更多的单词,例如loves,loving,lovable等等。这些词其实都是一个词。如果我们能把这些词都归到它们的根源上,也就是都转换成love,那么我们就可以大大降低不同单词的数量,而不会损失太多信息。

(1)去除‘@user’等无效字符

如上所述,这些文本内容包含很多Twitter标记,这些都是Twitter上面的用户信息。我们需要把这些内容删掉,他们对于数据分析没有什么帮助。 方便起见,先把训练集和测试集合起来,避免在训练集和测试集上重复操作的麻烦。

combi = train._append(test, ignore_index=True) # 将训练集和测试集合并

下面是一个自定义的方法,用于正则匹配删除文本中不想要的内容。它需要两个参数,一个是原始文本,一个是正则规则。这个方法的返回值是原始字符串清除匹配内容后剩下的字符。

def remove_pattern(input_txt, pattern):
r = re.findall(pattern, input_txt)
for i in r:
input_txt = re.sub(i, ”, input_txt)

return input_txt

现在,我们新建一列tidy_tweet ,用于存放处理后的内容,就是上面说的去掉Twitter标记的内容,并查看。

combi[“tidy_tweet”] = np.vectorize(remove_pattern)(combi[“tweet”], “@[\w]*”)
combi.head() # 查看combi的前五行数据

(2)去除标点符号、数字和特殊字符

这些字符都是没有意义的。跟上面的操作一样,我们把这些字符也都剔除掉。 使用替换方法,去掉这些非字母内容

combi[“tidy_tweet”] = combi[“tidy_tweet”].str.replace(“[^a-zA-Z#]”, ” “)
combi.head(5) # 使用head()方法查看前五行数据

(3)移除短单词

这里要注意到底多长的单词应该移除掉。我们选择小于等于三的都去掉。例如hmm,oh这样的都没啥用,删掉这些内容好一些。

combi[“tidy_tweet”] = combi[“tidy_tweet”].apply(lambda x: ” “.join([w for w in x.split() if len(w)>3]))
combi.head() # 查看前五行数据

4)符号化

下面我们要把清洗后的数据集符号化。符号指的是一个个的单词,符号化的过程就是把字符串切分成符号的过程。

tokenized_tweet = combi[‘tidy_tweet’].apply(lambda x: x.split()) # tokenizing
tokenized_tweet.head() # 查看前五行数据

(5)提取词干

提取词干说的是基于规则从单词中去除后缀的过程。例如,play,player,played,plays,playing都是play的变种。

from nltk.stem.porter import *
stemmer = PorterStemmer()

tokenized_tweet = tokenized_tweet.apply(lambda x: [stemmer.stem(i) for i in x]) # stemming
tokenized_tweet.head() # 查看前五行数据

现在,我们把这些符号重新拼回去。

for i in range(len(tokenized_tweet)):
tokenized_tweet[i] = ” “.join(tokenized_tweet[i])

combi[“tidy_tweet”] = tokenized_tweet
combi.head() # 查看前五行数据

以上,我们的数据便处理结束了,tidy_tweet便是我们要提取特征的文本,label则是我们的标签。

2.从清洗后的推文中提取特征

要分析清洗后的数据,就要把它们转换成特征。根据用途来说,文本特征可以使用很多种算法来转换。比如词袋模型(Bag-Of-Words),TF-IDF,word Embeddings之类的方法。 在本文中,我们TF-IDF这个方法。

TF-IDF是基于词频的。它跟词袋模型的区别在于,主要是它还考虑了一个单词在整个语料库上的情况而不是单一文章里的情况。 TF-IDF方法会降低常用单词的权重,同时对于某些在整个数据集上出现较少,但是在部分文章中表现较好的词给予了较高的权重。 让我们来深入了解一下TF-IDF:

  • TF = 单词t在一个文档中出现的次数 / 文档中全部单词的数目
  • IDF = log(N/n),N是全部文档数目,n是单词t出现的文档数目
  • TF-IDF = TF*IDF

下面我们来进行TF-IDF特征提取:

from sklearn.feature_extraction.text import TfidfVectorizer
tfidf_vectorizer = TfidfVectorizer(max_df=0.90, min_df=2, max_features=1000, stop_words=”english”)
# TF-IDF feature matrix
tfidf = tfidf_vectorizer.fit_transform(combi[“tidy_tweet”])

3.使用特征进行数据分析模型训练

from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import f1_score

# 选择特征输入
train_tfidf = tfidf[:31962,:]
test_tfidf = tfidf[31962:,:]

# 对数据进行划分
xtrain_tfidf, xvalid_tfidf, ytrain, yvalid = train_test_split(train_tfidf, train[‘label’],
random_state=42,
test_size=0.3)
# 调用逻辑回归函数进行训练
lreg = LogisticRegression()
lreg.fit(xtrain_tfidf, ytrain) # training the model

输出:LogisticRegression()

4.数据分析模型预测

from sklearn.metrics import roc_auc_score
from sklearn.metrics import classification_report

#对于测试集x_test进行预测
prediction = lreg.predict_proba(xvalid_tfidf)
prediction_int = prediction[:,1] >= 0.25
prediction_int = prediction_int.astype(np.int_)

# 其他指标计算
print(classification_report(yvalid, prediction_int))

# auc计算
auc=roc_auc_score(yvalid, prediction[:,1])
print(“auc的值:{}”.format(auc))

编程-科技

125jz网原创文章。发布者:江山如画,转载请注明出处:http://www.125jz.com/12309.html

(1)
江山如画的头像江山如画管理团队
AdaGrad算法—随机梯度下降算法
上一篇 2023年10月9日 下午2:47
下一篇 2023年10月28日 下午9:08

99%的人还看了以下文章

  • 出现这6种情况,你的手机该换了

    每个月都有新机发布,配置越来越高,价格越来越低,要不要换手机呢? 对于搞机爱好者,经济条件允许的人来说,他们是跟机玩潮流,有了心动的新品手机,立马更换。有钱人更是,用的苹果iPhone,一看出新品了,也好不犹豫。但对大多数用户来说,我们什么时候该换手机呢? 如果你只是打电话、发短信,用些日常软件,如QQ,微信等,只要系统不是很卡,电池续航还可以,完全没必要换…

    2020年2月25日
    3.1K0
  • 真好用!数据处理-将一组数据归一化到任意区间范围的方法

    将数据归一化到任意区间范围的方法 一般常见的数据归一化,是归一化到0~1,或者-1~1的区间,但在一些特殊场合下,我们需要根据实际情况归一化到其他任意区间。  将数据归一化到[a,b]区间范围的方法 如一组数据实际最小值为70,最大值为99,要将这组数据归一化到80-95区间。 (1)首先找到样本数据Y的最小值Min    70及最大值Max   99 (2…

    2023年7月11日
    11.1K1
  • 微信不显示最新消息,收到信息不提示怎么办

    微信不显示最新消息,收到信息不提示怎么办微信不显示最新消息,收到信息不提示怎么办微信不显示最新消息,收到信息不提示怎么办微信不显示最新消息,收到信息不提示怎么办

    微信不显示最新消息,通知栏不显示消息怎么办呢?如果有消息过来不显示,我们很可能把重要的消息给漏掉了。 出现微信不显示最新消息,收到信息不提示的可能原因有两个: 一、微信软件的设置 出现这种问题,是我们在微信中把接收新消息通知给关了,这样一来,通知栏不会显示最新消息的。 解决办法: 在微信的设置中进入到消息,然后在下图中,把接收新消息通知从已关闭改为开启。二、…

    2020年3月15日 科技
    8.1K0
  • 新版北大核心期刊目录(2017第八版,2018~2022适用):淘汰173本期刊,晋升171本

    最新北京大学核心期刊目录(2017第八版,2018~2022适用) 最新版北大核心目录(2018.12),被淘汰期刊如下所示: 降级的刊物名称 1 安徽农业大学学报 被刷 2 北方论丛 被刷 3 北京交通大学学报(社会科学版) 被刷 4 北京文学《精彩阅读》 被刷 5 北京舞蹈学院学报 被刷 6 草业科学 被刷 7 城市交通 被刷 8 大学物理 被刷 9 当…

    2018年12月24日
    16.5K0
  • 发明专利申请官费,年费收费标准及减免条件(详)

    中华人民共和国专利法规定可以获得专利保护的发明创造有发明、实用新型和外观设计三种,其中发明专利是最主要的一种。 发明专利申请官费是多少 发明专利申请官费官费原价3450元包含:申请费:900元,文件印刷费:50元,实质审查费:2500元。 减缓85%之后需要560元,包含:申请费:135元,文件印刷费:50元,实质审查费:375元。 减缓70%之后需要107…

    2019年10月29日
    17.0K0
  • 我国高校人工智能学院:现状、问题及发展方向

    我国高校人工智能学院:现状、问题及发展方向我国高校人工智能学院:现状、问题及发展方向我国高校人工智能学院:现状、问题及发展方向我国高校人工智能学院:现状、问题及发展方向

    关键词: 新一代人工智能;人工智能学院;高质量发展;新工科 首见:机器学习研究会 转载自:《 现代远距离教育》2019年第3期 总第183期 人工智能是新一轮科技革命和产业变革的核心驱动力,给我国经济社会带来了极其深远的影响,既为促进经济建设注入了新动能,又为服务社会发展带来了新机遇。当前,我国政府高度重视发展人工智能,并从国家战略高度全面推进人工智能领域发…

    2019年7月5日 科技
    8.6K0

发表回复

登录后才能评论