2016-05-05 2 views
1

Я пытаюсь построить двумерный ccdf набора данных, который имеет x и y значения обоих.Bivariate CDF/CCDF Distribution Python

Univariate Я могу построить очень хорошо, ниже вход и код для унифицированного набора данных.

Ввод: Это только первые 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 набор данных

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

ваш пример имеет только одно отличное значение в одном из столбцов, поэтому я не уверен, что вижу точку двумерной оценки плотности. –

+0

Я упомянул, что это только первые 20 строк. Данные отсортированы уже. Оба столбца имеют разные значения. –

+0

Затем вы должны обновить свой пример, чтобы быть более представительным. Случайных данных должно быть достаточно. –

ответ

2

Бивариантные распределения, которые вы пытаетесь описать, часто непрерывны, например размер дома (вход, x) и его цена (выход, y.). В вашем случае нет значимых отношений (я думаю,) в числе ключевых слов, так как это, вероятно, просто идентификатор, присвоенный ключевому слову, право?

В вашем случае мне кажется, что у вас есть категории (ключевые слова). каждая категория, по-видимому, имеет два числа a tweetcricscore и номер keyword. \

Ваш код здесь:

cdf0 = np.arange(len(X0))/float(len(X0)) 

мне предположить, что ваши х диапазоны только их метки и не значимая ценность.

Лучший источник для категориальных участков можно найти 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) 

который производит очень бессмысленными рисунок здесь:

enter image description here

Вы должны добавить х и у меток вручную; это потому, что вы проезжаете array s вместо pandasDataframes, о котором можно думать как 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); 

Что дает это:

enter image description here

Гистограмма на верхней части диаграммы можно рассматривать как однотонный мерный карт (то, что вы, вероятно, произвели), потому что они просто описывают распределение одна или другая переменная (x или y, col_3 или col_1)

+0

Спасибо за анс. Об отношениях между пользователем и ключевым словом да, когда мы видим ввод, мы не видим его напрямую. Моя цель состоит в том, чтобы показать взаимосвязь между действительностью пользователя freq 'col [1]' и частотой ключевых слов 'col [3]', используемой одним и тем же пользователем. Ex User 'tweetcricscore' его общая активность freq -' 789', из которого он использовал ключевое слово '# cricket'' 178' раз. Поэтому я хочу показать природу этих отношений. Если бы я, возможно, поставил неправильный вопрос, скажи мне, но это то, что я искал, и не мог найти ничего подходящего. –

+0

Итак, если я правильно понимаю, есть много пользователей Twitter (например, 'tweetcricscore') и многие хэштеги. Что представляет собой его «общая частота активности»? – mburke05

+0

Да твиттер пользователей и ключевые слова .. И частота действий - это количество сообщений пользователей, ретвитов или ответов кому-то еще. Сколько раз пользователь делает видимость .. –