Python 规范化/绘制文本数据,并在大型数据集上测试有效性
这是经过反复试验后得出的结论。我不太相信我的模型,但如果有人想要它,我很乐意提供它,以及原始数据。它目前在BigQuery中,但我可以导出它并将它放在某个地方。我有2019年上半年6天的数据,每个月一次,总计约164MM行。不管怎样,我打算晚些时候把它放在Kaggle上Python 规范化/绘制文本数据,并在大型数据集上测试有效性,python,pandas,seaborn,Python,Pandas,Seaborn,这是经过反复试验后得出的结论。我不太相信我的模型,但如果有人想要它,我很乐意提供它,以及原始数据。它目前在BigQuery中,但我可以导出它并将它放在某个地方。我有2019年上半年6天的数据,每个月一次,总计约164MM行。不管怎样,我打算晚些时候把它放在Kaggle上 | actor_gender | sentiment | author_gender ---|--------------|--------------------|--------------|---
| actor_gender | sentiment | author_gender
---|--------------|--------------------|--------------|---
0 | Male | __label__terse | Male |
1 | Female | __label_positive | Male |
2 | Male | __label_negative | Male |
我使用了groupby()
(仅在作者(性别)上-交叉情绪将是一个极好的奖励)来产生以下结果:
author_gender sentiment
Female __label__helpful 351809
__label__negative 500718
__label__neutral 508554
__label__positive 513237
__label__terse 478805
Male __label__helpful 3121180
__label__negative 4549122
__label__neutral 4631527
__label__positive 4679315
__label__terse 4328896
然后我用sklearn将其规范化:
array([[0. , 0. ],
[0.9224484 , 0.91644306],
[0.97099016, 0.96933 ],
[1. , 1. ],
[0.78670367, 0.77510357]])
编辑:这是MinMax,回想起来,它不像以前那样正确-我想我需要将它应用于整个数据帧,而不是groupby
我想做的是以一种准确表示数据的方式绘制它——我想可能是一种分类图,轴是(情绪,计数),性别是色调,但如果有更好的方法,我洗耳恭听。我不知道我需要如何将数据转换成Seaborn可以使用的东西
最后,我需要根据作者的性别(也许还有演员)对情绪分布没有影响这一无效假设来检验数据。我已经读过关于T检验、Z检验和卡方检验的书,老实说,我不知道这里哪一个是合适的。我猜使用normalize,您的意思是百分比,可能类似于堆叠条形图,因此我们可以先生成一个表,以允许后续的测试:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
lab = ["__label__helpful","__label__negative","__label__neutral",
"__label__positive","__label__terse"]
df = pd.DataFrame({'author_gender':np.random.choice(["Female","Male"],1000),
'sentiment':np.random.choice(lab,1000)})
tab = pd.crosstab(df['sentiment'],df['author_gender'],normalize='index')
这是表格的外观:
author_gender Female Male
sentiment
__label__helpful 0.510753 0.489247
__label__negative 0.487685 0.512315
__label__neutral 0.568807 0.431193
__label__positive 0.525773 0.474227
__label__terse 0.542714 0.457286
绘图:
对于测试,您使用卡方检验,在本例中,因为数据是模拟的,所以得到的p值接近1
from scipy.stats import chi2_contingency
chi2, p, dof, ex = chi2_contingency(tab, correction=False)
p
0.9999710076066467
我创建了一个用于根据视口自动聚合绘图的程序,这样它仍然是快速和交互式的。您可以选择哪些方法将接收数据的一部分,并根据您认为合适的内容对其进行聚合
基本上,这允许您使用仍然会产生大量数据(百万分之十)的聚合器,所以在可视化数据时应该仍然相当准确。通过规范化,我的意思是缩放数据,因为实际分布是严重倾斜的。不过,我能理解这一部分。谢谢你的交叉表解释,这对我来说是新的。
from scipy.stats import chi2_contingency
chi2, p, dof, ex = chi2_contingency(tab, correction=False)
p
0.9999710076066467