मैं पायथन में एक इंटरैक्टिव पीसीए स्कैल्पलॉट कैसे बना सकता हूं?


11

Matplotlib पुस्तकालय विशेष रूप से Jupyter नोटबुक के अंदर बहुत सक्षम है, लेकिन interactiveness का अभाव है,। मुझे एक अच्छा ऑफ़लाइन प्लॉटिंग टूल पसंद आएगा


3
मैं इस तरह की चीजों से अच्छी तरह वाकिफ नहीं हूं, इसलिए मैं वास्तव में एक अच्छा जवाब नहीं लिख सकता, लेकिन आप पर एक नज़र डाल सकते हैं ipywidgets(उदाहरण github.com/ipython/ipywidgets/blob/master/docs/source/examples पर) /… ) या bokeh( bokeh.pydata.org/en/latest )।
तोर्बजोरन टी।

जवाबों:


10

MPLD3 नामक एक भयानक पुस्तकालय है जो इंटरैक्टिव डी 3 भूखंडों को उत्पन्न करता है।

यह कोड लोकप्रिय आईरिस डेटासेट का एक HTML इंटरैक्टिव प्लॉट बनाता है जो जुपिटर नोटबुक के साथ संगत है। जब तूलिका का चयन किया जाता है, तो यह आपको सभी भूखंडों के बीच हाइलाइट किए जाने वाले डेटा के सबसेट का चयन करने की अनुमति देता है। जब क्रॉस-तीर का चयन किया जाता है, तो यह आपको डेटा बिंदु को माउसओवर करने और मूल डेटा के बारे में जानकारी देखने की अनुमति देता है। खोजपूर्ण डेटा विश्लेषण करते समय यह कार्यक्षमता बहुत उपयोगी है।

प्लेट के रूप में आयात matplotlib.pyplot
आयात एनपीपी के रूप में सुन्न
पीडी के रूप में आयात पांडा
sb के रूप में आयात करें
आयात mpld3
mpld3 आयात प्लगइन्स से
% मटलपोटलिब इनलाइन

iris = sb.load_dataset ('आईरिस')
Sklearn.preprocessing आयात से StandardScaler
X = pd.get_dummies (iris)
X_scal = StandardScaler ()। Fit_transform (X)

मंद = ३
sklearn.decomposition से PCA आयात करें
pca = PCA (n_compenders = dim)
Y_sklearn = pca.fit_transform (X_scal)

# हमारे कस्टम लेबल को नियंत्रित करने के लिए कुछ CSS को परिभाषित करें
css = "" "
तालिका
{
  सीमा-पतन: पतन;
}
वें
{
  रंग: #ffffff;
  पृष्ठभूमि-रंग: # 000000;
}
टीडी
{
  पृष्ठभूमि-रंग: #cccccc;
}
तालिका, वें, td
{
  फ़ॉन्ट-परिवार: एरियल, हेल्वेटिका, सैन्स-सेरिफ़;
  सीमा: 1px ठोस काला;
  पाठ-संरेखण: सही;
}
"" "

अंजीर, कुल्हाड़ी = plt.subplots (मंद, मंद, अंजीर = (6,6))
fig.subplots_adjust (hspace = .4, wspace =4)
टूलटिप = [कोई नहीं] * मंद

एन = 200
सूचकांक = np.random.choice (रेंज (Y_sklearn.shape [0]), आकार = एन)

मीटर के लिए सीमा में (मंद):
    एन में सीमा के लिए (एम + 1):
        कुल्हाड़ी [एम, एन] .ग्रिड (सच, अल्फा = 0.3)
        तितर बितर = कुल्हाड़ी [मीटर, एन]। कांच (Y_sklearn [सूचकांक, मीटर], Y_sklearn [सूचकांक, एन], अल्फा = .05)

        लेबल = []
        सूचकांक में मैं के लिए:
            लेबल = X.ix [[i]:]। T.astype (int)
            label.columns = ['रो {0}'। स्वरूप (X.index [i]))
            labels.append (एसटीआर (label.to_html ()))

        ax [m, n] .set_xlabel ('घटक' + str (m))
        ax [m, n] .set_ylabel ('घटक' + str (n))
        #ax [m, n] .set_title ('HTML टूलटिप्स', आकार = 20)

        टूलटिप [m] = plugins.PointHTML टूलटिप (बिखराव, लेबल,)
                                           voffset = 20, hoffset = 20, css = css)
        plugins.connect (अंजीर, टूलटिप [एम])

plugins.connect (अंजीर, plugins। लिक्डब्रश (बिखराव))
परीक्षण = mpld3.fig_to_html (अंजीर = अंजीर)

खुले ("Output.html", "w") को text_file के रूप में:
    text_file.write (परीक्षण)

इसे मेरे ब्लॉग पर कार्रवाई में देखें

अद्यतन [९ जुलाई २०१६]: मुझे अभी पता चला है कि प्लॉट.लाइन में एक ऑफ़लाइन मोड है और अब खुला स्रोत है। इसमें बहुत सी घंटियाँ और सीटी बजती हैं, लेकिन MPLD3 अभी भी कुछ मामलों में उपयुक्त हो सकता है।


3

मैं उत्तर के बजाय यह टिप्पणी करना पसंद करूंगा, क्योंकि मेरा इरादा प्लग / विज्ञापन करने का नहीं है, लेकिन मैं वर्तमान में अपनी थीसिस पर काम कर रहा हूं, जो आपके लिए ब्याज की हो सकती है क्योंकि यह उस तरह का है जो आप चाहते हैं। वास्तव में यह एक क्लस्टरिंग विज़ुअलाइज़ेशन टूल है, लेकिन यदि आप k = 1 के साथ k- साधनों का उपयोग करते हैं, तो आपके पास एक इंटरैक्टिव प्लॉट है जहां आप शब्दों को खोज सकते हैं, एक क्षेत्र का चयन कर सकते हैं और प्रत्येक नोड की सामग्री और अन्य सामान देख सकते हैं। एक बार देख लो और देखो कि यह आपके लिए काम करता है!

https://github.com/Lilykos/clusterix


ठंडा! मैं एक बार नजर डालूँगा।
जुलाई को scottlittle

0

एक बहुत अच्छा विकल्प है, अलग तरह से ...

मेरे मामले में, मैं कौशल के आधार पर समान पदनाम की साजिश रचने की कोशिश कर रहा था, जहां कौशल 300 आयामों का एक शब्द 2vec एम्बेडिंग था; इसे 3 आयाम वाले सदिश स्थान पर लाया, और स्कैटरली 3 डी का उपयोग करते हुए, मैं उसी के लिए 3 डी स्कैप्लेट को प्लॉट करने में सक्षम था।

एट वियोला !! होवर और विस्तार कार्यक्षमता के साथ, एक भयानक 3 आयाम ग्राफ मिला। और सबसे अच्छी बात यह है कि इसे एक html फ़ाइल के रूप में निर्यात किया जा सकता है, यह एक प्लग बनाता है और किसी अन्य पीसी के लिए उपयुक्त है, बस एक ब्राउज़र में खींचें और छोड़ें (नीचे दिए गए कोड में शामिल है)।

क्या बीईई अब और सरल हो सकता है

from plotly.offline import plot
from plotly.graph_objs import *
import numpy as np

# x = np.random.randn(2000)
# y = np.random.randn(2000)

# Instead of simply calling plot(...), store your plot as a variable and pass it to displayHTML().
# Make sure to specify output_type='div' as a keyword argument.
# (Note that if you call displayHTML() multiple times in the same cell, only the last will take effect.)

p = plot(
  [
    Scatter3d(x=skills_df[0], y=skills_df[1], z=skills_df[2], text= skills_df['designation'], mode='markers', marker=Marker(color=skills_df['cluster_number'], size=3, opacity=0.5, colorscale='Viridis'))
  ],
  output_type='div'
#   filename='/dbfs/FileStore/tables/lnkdn_jobroles_viridis.html' turn it on to save the file
)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.