2016-05-05 10 views
1

Ich versuche, eine bivariate ccdf des Datensatzes zu plotten, die beide x und y Werte hat.Bivariate CDF/CCDF Verteilung Python

Univariate Ich kann sehr gut plotten, unten ist die Eingabe und der Code ist für universellen Datensatz.

Eingabe: Dies sind nur die ersten 20 Zeilen der Datenpunkte. Die Eingabe hat 1000 Zeilen, von denen col[1] und col[3] geplottet werden müssen, da sie eine Benutzer- und Schlüsselwort-Häufigkeitsbeziehung besitzen.

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 

Code: univeriate-Datensatz

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() 

ich für bivariate Datenpunkte für einige Option suchen. Ich habe Seaborn Bivariate Distribution verwiesen, aber ich kann es nicht in den richtigen Zusammenhang mit meinem Datensatz setzen.

Jeder alternative Vorschlag in Python, Matplotlib, Seaborn sind willkommen .. Vielen Dank im Voraus.

+0

Ihr Beispiel hat nur einen bestimmten Wert in einer der Spalten, daher bin ich mir nicht sicher, ob ich den Punkt der bivariaten Dichteabschätzung sehe. –

+0

Ich habe erwähnt, es ist nur die ersten 20 Zeilen .. Die Daten sind bereits sortiert .. Beide Spalten haben unterschiedliche Werte –

+0

Dann sollten Sie Ihr Beispiel aktualisieren, um repräsentativer zu sein. Zufällige Daten sollten ausreichen. –

Antwort

2

Bivariate Verteilungen die Art, die Sie versuchen zu beschreiben sind oft kontinuierlich, zum Beispiel die Größe eines Hauses (Eingabe, x) und es ist Preis (Ausgabe, y.) In Ihrem Fall gibt es keine sinnvolle Beziehung (denke ich) in der Nummer des Schlüsselworts, da es wahrscheinlich nur eine ID ist, die dem Schlüsselwort richtig zugeordnet ist?

In Ihrem Fall scheint es, als ob Sie Kategorien (Keywords) haben. Jede Kategorie scheint zwei Nummern zu haben: eine tweetcricscore und eine keyword Nummer. \

Ihr Code hier:

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

Für mich deutet darauf hin, dass Ihre x-Bereich ihre Etiketten einfach ist und kein sinnvoller Wert.

Eine bessere Quelle für kategorische Plots finden Sie here.

Um eine bivariate Verteilung zu erstellen, das ist nach wie vor davon aus, was Sie, dass gelesen zu wollen, sollten Sie folgendermaßen vorgehen Ihre Daten als ein Beispiel unter Verwendung von Daten von oben mit:

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) 

, die die sehr unsinnig produziert Abbildung hier:

enter image description here

hier finden Sie die x- und y-Etiketten manuell hinzufügen müssen; Das liegt daran, dass Sie numpy s anstelle von pandasDataframes übergeben, was wie dictionaries aussehen könnte, wobei jeder Schlüssel im Wörterbuch der Titel einer Spalte und der Wert das numpy Array ist.

Verwenden Sie Zufallszahlen, um zu zeigen, wie es mit einem zufälligeren, kontinuierlichen, verwandten Datensatz aussehen könnte.

Dies ist das Beispiel aus der Dokumentation.

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); 

Das macht den:

enter image description here

Die Balkendiagramme auf oberen Rand des Diagramms kann als Univariat Charts gedacht werden (was Sie wahrscheinlich produziert haben), weil sie nur die Verteilung von beschreiben die eine oder andere Variable (x, oder y, col_3 oder col_1)

+0

Danke für die Ans. Über die Beziehung zwischen Benutzer und Schlüsselwort Ja, wenn wir die Eingabe sehen, sehen wir sie nicht direkt. Mein Zweck ist es, die Beziehung zwischen der Benutzeraktivität freq 'col [1]' und der Häufigkeit von Schlüsselwörtern 'col [3]' zu zeigen, die von demselben Benutzer verwendet werden. Ex User 'tweetcricscore' seine Gesamtaktivität freq ist' 789', von der er das '# cricket' Keyword' 178' mal benutzt hat. Also möchte ich die Natur dieser Beziehung zeigen. Wenn ich eine falsche Frage gestellt habe, bitte korrigieren Sie mich, aber das ist etwas, das ich gesucht habe und nichts relevantes finden konnte. –

+0

Also, wenn ich richtig verstehe, gibt es viele Twitter-Benutzer (ex. 'Tweetcricscore') und viele Hashtags. Was repräsentiert seine "Gesamtaktivitätshäufigkeit"? – mburke05

+0

Ja twitter users und keywords .. Und die Häufigkeit der Aktivitäten ist die Anzahl der Male, die der Benutzer Beiträge, Retweets oder Antworten auf jemand anderes .. Wie oft der Benutzer Erscheinungen .. –