美文网首页
Tweets数据清理报告

Tweets数据清理报告

作者: RossH | 来源:发表于2019-04-14 23:55 被阅读0次

    数据整理

    收集

    首先是收集各个数据集。将twitter-archive-enhanced.csvimage-predictions.tsvtweet_json.txt加载为DataFrame
    其中image-predictions.tsv需要从网络上获取,用urllib.requesturlretrieve方法获取。
    三个DataFrame分别命名为twitter_archiveimage_predictextra_data

    评估

    目测评估

    用肉眼分别观察三个数据集。首先是twitter_archive表,很明显可以看到列['in_reply_to_status_id', 'in_reply_to_user_id', 'retweeted_status_id', 'retweeted_status_user_id', 'retweeted_status_timestamp', 'doggo', 'floofer', 'pupper', 'puppo']都有很多空值(NaNNone)。
    观察timestamp列,发现每个值后面都带有+0000,但这不是我们需要的。还有就是值是由日期加时间组成的,例如2017-07-30 15:58:51。在我看来应该拆分成两列,一列为date日期,一列为time时间。
    接下来观察image_predict表,列名p1[2,3], p1[2,3]_conf,p1[2,3]_dog中p意义不明。应该写成predict更加意思明确的单词。
    extra_data表目测评估没看出来问题。

    编程评估

    编程评估主要是用DataFrameinfo()describe()方法打印整体表格信息,然后用value_counts()方法打印单个字段信息,以及视情况用其它代码进行评估。以下为评估结果。

    • 日期应该为datetime类型
    • 数据中包含了转发的数据(retweeted_status_id非空)
    • rating_numeratorrating_denominator有三位数和四位数,且数据类型为int
    • 考虑增加一列rating存放\frac{rating\_numerator}{rating\_denominator}
    • source不需要标签和链接等,保留文本内容即可
    • name缺少部分数据,且有一些名字为aanthe
    • 缺失值填充为None,没有被当成空值

    最终结果

    质量

    twitter_archive table

    • column ['in_reply_to_status_id', 'in_reply_to_user_id', 'retweeted_status_id', 'retweeted_status_user_id', 'retweeted_status_timestamp', 'doggo', 'floofer', 'pupper', 'puppo'] 缺少数据
    • timestamp后面多了+0000
    • timestamp应该为datetime类型
    • 数据中包含了转发的数据(retweeted_status_id非空)
    • rating_numeratorrating_denominator有三位数和四位数,且数据类型为int
    • 考虑增加一列rating存放\frac{rating\_numerator}{rating\_denominator}
    • source不需要标签和链接等,保留文本内容即可
    • name缺少部分数据,且有一些名字为aanthe
    • 缺失值填充为None,没有被当成空值
    整洁度
    • twitter_archive表中的timestamp应该拆分成两列datetime
    • image_predict字段名p1,p2,p3意义不明
    • extra_datafavorite_countretweet_count应合入twitter_archive表格中
    • image_predicttwitter_archive合并

    清理

    清理第一步是要将各个DataFrame备份好。然后再按照前面评估结果清洗数据。
    首先是缺失值的处理。列['in_reply_to_status_id', 'in_reply_to_user_id', 'retweeted_status_id', 'retweeted_status_user_id', 'retweeted_status_timestamp', 'doggo', 'floofer', 'pupper', 'puppo']都有很多空值,其中['doggo', 'floofer', 'pupper', 'puppo']填充的是None,且宠物狗的地位数据未确定是否进行分析,暂时保留。而另外几列是不加入分析的,考虑丢弃掉。用drop()丢弃不要的列之后,再进行测试,看代码是否有效。后面的步骤都是类似,清洗后进行测试,知道都有这个步骤就行,后面不再赘述。
    timestamp用切片舍弃+0000,保留日期和时间。
    str.splittimestamp拆分成两列datetime,然后用drop删除timestamp列。
    to_datetime将列date的类型转换成datetime类型。time保持字符串(object类型),后面方便提取数据。
    过滤retweeted_status_id非空的行,将转发的数据都过滤掉,然后丢弃retweeted_status_id
    rating_numeratorrating_denominator转换成正确的数字,且数据类型改为float
    计算\frac{rating\_numerator}{rating\_denominator}并存到新列rating
    str.extract提取并保留source的文本内容
    replacename列中的a,an等不是名字的单词替换成np.NaN
    replace方法将所有None替换成np.NaN
    replace将p1,p2,p3改为predict1,predict2,predict3
    mergetwitter_archiveimage_predictextra_data三表合并

    再评估

    经过前面的数据清洗之后,需要再进行一次评估,确保数据是干净的。结果发现合并完的数据集还有三个数据质量问题。

    质量

    • 关于狗的地位的信息只有317条,远小于总条数
    • name缺失过多数据
    • source应该为category类型

    再清理

    text中提取狗的地位存放到stage,然后删掉4列狗的地位
    text中提取狗的名字
    astypesource的数据类型换成category

    最后的检查

    最后再检查一下,发现从text提取狗狗地位的时候,空值并不是np.NaN。所以需要将狗的地位为空的记录替换成np.NaN

    保存

    最终用pandas.to_csv保存为csv文件。也可以选择保存为Excel文件或者保存到数据库。

    相关文章

      网友评论

          本文标题:Tweets数据清理报告

          本文链接:https://www.haomeiwen.com/subject/puaewqtx.html