通过本项目学习者有机会完成体验整个数据分析过程,从收集数据到清理和分析数据,最后进行可视化分析。
数据来自推特帐号 ‘We Rate Dogs’ 以诙谐幽默的方式对人们的宠物狗评分。这些评分通常以 10 作为分母。但是分子则一般大于 10:11/10、12/10、13/10 ,因此可以让大多数狗的评分高于10分
源代码和数据集:https://github.com/DongDongGe1/EDA
1. Gathering Data
我们有三个数据集文件
- twitter_archive_enhanced WeRateDogs twitter 的主要数据,从2015年到2017年
- image_archive_master WeRateDogs twitter 的图像机器学习算法的结果
- tweet_data 额外的 twitter 数据集,包括每条推文的转发次数,收藏次数等
# 导入相关工具包
import numpy as np
import pandas as pd
import requests
import json
import matplotlib.pyplot as plt
import seaborn as sns
plt.style.use('ggplot')
%matplotlib inline
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False # 显示负数
twitter_df = pd.read_csv('../data/twitter-archive-enhanced.csv')
twitter_df.head()
twi_pred_df = pd.read_csv(’…/data/tweet-predictions.tsv’,sep=’\t’)
twi_pred_df.head()
with open('../data/tweet_data.txt','r') as f:
data = json.load(f)
scrapped_df = pd.DataFrame(data)
scrapped_df.head()
2. Assessing The Data
我们的三个 data frames 是 twitter_df, twi_pred_df, scrapped_df
1.
twitter_df['in_reply_to_status_id'].count()
# 输出 78
twitter_df.info()
plt.figure(figsize=(20,8))
sns.heatmap(twitter_df.isnull(), cbar=False)
plt.show()
twi_pred_df.info()
scrapped_df.info()
- 这些都是大数据集,所以我们可以清楚的看到一些问题,twitter_df 中的retweeted 需要删除。
- twitter_df 中有 2 列少于 100 行,缺失值太多,也需要删除。
- 三个数据框的行数都不同,scrapped_df 中有2342个,twi_pred_df 中有2075个,twitter_df 中有2356个,所以需要进行内连接。
通过缺失值热力图可视化分析,我们可以看到 source 和 expanded_urls 应该被删除,因为它们包含我们不需要的数据,所有网址都是独一无二的。doggo,floofer,pupper,puppo 代表狗的四个阶段,可以合为一列
2.
twitter_df[twitter_df['expanded_urls'].duplicated()].count()
twitter_df['expanded_urls'].value_counts()
expanded url 可以让我知道 tweets 是重复的。所以 137 条 tweet 是重复的,为了证明这一点,我打开数据集发现有些 expanded url 有两条
twi_pred_df[twi_pred_df['jpg_url'].duplicated()].count()
predictions 的情况也一样,有66个重复行,不需要检查 scrapped_df,因为它将与twitter_df 合并,因此不会考虑重复的值。
3.
len(twi_pred_df) - len(twi_pred_df[(twi_pred_df['p1_dog']== True) & (twi_pred_df['p2_dog'] == True) & (twi_pred_df['p3_dog'] == True)])
# 输出 832
len(twi_pred_df) - len(twi_pred_df[(twi_pred_df['p1_dog']== True) | (twi_pred_df['p2_dog'] == True) | (twi_pred_df['p3_dog'] == True)])
# 输出 324
在 2075 项记录中,有 832 张可能是狗的图像。有 324 项,三个预测图像都不是狗,可以观察这 324 行,但可以肯定的是 342 张图肯定不是狗的图像
temp_df = twi_pred_df[(twi_pred_df['p1_dog']== False) | (twi_pred_df['p2_dog'] == False) | (twi_pred_df['p3_dog'] == False)]
temp_df.head()
打开第一个网址查看
from IPython.display import IFrame
IFrame('https://pbs.twimg.com/media/CT5KoJ1WoAAJash.jpg',width='100%', height=500)
很明显是乌龟
scrapped_df.info()
4.
twi_pred_df['p1'].value_counts()
5.
sns.distplot(twitter_df['rating_numerator'], kde=False, rug=True) # 评分分子
plt.show()