我正在尝试绘制具有ccdf
和x
值的数据集的双变量y
。
单变量我可以很好地绘制,下面是输入,代码用于非传统数据集。
输入:这些只是数据点的前20行。输入有1000行,其中col[1]
和col[3]
需要绘制,因为它们拥有用户和关键字频率关系。
tweetcricscore 34 #afgvssco 51
tweetcricscore 23 #afgvszim 46
tweetcricscore 24 #banvsire 12
tweetcricscore 456 #banvsned 46
tweetcricscore 653 #canvsnk 1
tweetcricscore 789 #cricket 178
tweetcricscore 625 #engvswi 46
tweetcricscore 86 #hkvssco 23
tweetcricscore 3 #indvsban 1
tweetcricscore 87 #sausvsvic 8
tweetcricscore 98 #wt20 56
代码:univeriate dataset
import numpy as np
import matplotlib.pyplot as plt
from pylab import*
import math
from matplotlib.ticker import LogLocator
data = np.genfromtxt('keyword.csv', delimiter=',', comments=None)
d0=data[:,1]
X0 = np.sort(d0)
cdf0 = np.arange(len(X0))/float(len(X0))
ccdf0 = 1 - cdf0
plt.plot(X0,ccdf0, color='b', marker='.', label='Keywords')
plt.legend(loc='upper right')
plt.xlabel('Freq (x)')
plt.ylabel('ccdf(x)')
plt.gca().set_xscale("log")
#plt.gca().set_yscale("log")
plt.show()
我正在寻找双变量数据点的一些选项。我提到Seaborn Bivariate Distribution但是我无法将其放在我的数据集的适当上下文中。
欢迎使用python,matplotlib,seaborn中的任何其他建议。 提前致谢。
答案 0 :(得分:2)
您尝试描述的双变量分布通常是连续的,例如房屋的大小(输入,x)和它的价格(输出,y)。在您的情况下,没有有意义的关系(我认为)在关键字的数量上,因为它可能只是分配给关键字的ID吗?
在你的情况下,似乎你有类别(关键字)。每个类别似乎有两个数字tweetcricscore
和keyword
个数字。 \
您的代码在这里:
cdf0 = np.arange(len(X0))/float(len(X0))
对我来说,你的x范围只是他们的标签而不是有意义的价值。
可以找到更好的分类图来源here。
要创建双变量分布,假设您仍然想要阅读该分布,请使用上述数据以数据为例进行以下操作:
import numpy as np
import seaborn as sns
col_1 = np.array([34, 23, 24, 456, 653, 789, 625, 86, 3, 87, 98])
col_3 = np.array([51, 46, 12, 46, 1, 178, 46, 23, 1, 8, 56])
sns.jointplot(x=col_3, y=col_1)
这产生了非常荒谬的人物:
您必须手动添加x和y标签;这是因为您传递了numpy
array
而不是pandas
Dataframes
,这可以被认为是dictionaries
,其中字典中的每个键都是列的标题,以及numpy数组的值。
这是从文档中获取的示例。
import numpy as np
import seaborn as sns
import pandas as pd
mean, cov = [0, 1], [(1, .5), (.5, 1)]
data = np.random.multivariate_normal(mean, cov, 200)
df = pd.DataFrame(data, columns=["x", "y"])
sns.jointplot(x="x", y="y", data=df);
这给出了这个:
图表顶部的条形图可以被视为单变量图表(您可能已生成的图表),因为它们只描述了一个或另一个变量(x,或y,col_3或col_1)的分布< / p>