美文网首页
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