python - 熊猫中没有正确可视化箱线图
问题描述
有一个清晰的、准备好的可视化数据集。
category_id views likes dislikes comment_count
0 politics/celebrities 34785 308 26 413
1 talk show 69844 3417 33 160
2 talk show 1496225 16116 236 605
3 talk show 1497519 15504 353 1084
4 various video 225286 1731 193 206
... ... ... ... ... ...
4119 music clips 6004782 210802 4166 15169
4120 talk show 5564576 46351 2295 2861
4121 music clips 5534278 45128 1591 806
4122 music clips 23502572 676467 15993 52432
4123 talk show 1066451 48068 1032 3992
当试图在箱线图上用
data.boxplot('views')
采取不正确的可视化
而不是普通的箱线图类型。在数据集的一小部分(数据 [0:10])上它工作正常,但在整个集合上 - 不。怎么了?
解决方案
正如我在评论中所说,您views
可能遵循Zipf 定律分布。
为了用一个可重现的例子来说明,让我们使用维基百科在en.wikipedia.org
一天内排名前 1000 的文章的页面浏览量:
import urllib.request, json
url = 'https://wikimedia.org/api/rest_v1/metrics/pageviews/top/en.wikipedia.org/all-access/2021/04/11'
with urllib.request.urlopen(url) as f:
data = json.loads(f.read().decode())
df = pd.json_normalize(data, ['items', 'articles'])
请注意,仅绘制箱线图views
与您观察到的非常相似:
df.boxplot('views')
现在这里是 loglog 图,它显示了该数据的 Zipf 定律的独特说明:
(事实证明,排名已经包含在上面的维基百科数据中,但为了通用性,我们将再次计算它)。
plt.loglog(df['views'].rank(ascending=False), df['views'])
plt.grid(True)
plt.xlabel('rank')
plt.ylabel('views')
plt.title('en.wikipedia views of top 1000 articles\non 2020-04-11')
考虑到这一点,您可以看到“异常值”的概念是如何难以为幂律定义的。再多的过滤也无助于您的箱线图,因为这样的分布大致是尺度不变的。
推荐阅读
- excel-formula - 如果 A 在 B 中有匹配,则将与 B 相关的值添加到 C
- java - 将对象序列化为字符串
- python - 在检查括号是否平衡时,我得到了不正确的结果(即,我知道输入字符串是平衡的,但输出是不平衡的)
- postgresql - 如何将 FeatureCollection 转换为 GeometryCollection 或 MultiPolygon?
- botframework - 创建团队频道对话失败并出现 ConversationNotFound 错误代码
- pandas - 如何让熊猫将 csv 输入读取为字符串,而不是 url
- kotlin-coroutines - 超时后如何取消协程作业
- hibernate-search - Hibernate Search 中 BigDecimal 的范围查询
- python-3.x - 当我们附加数据框时指定行的来源
- api - GET请求返回单个ID信息