विज़ुअलाइज़िंग आइटम अक्सर एक साथ खरीदे जाते हैं


10

CSV फ़ाइल में सम्मिलित संरचना में मेरा डेटासेट है:

Banana  Water   Rice
Rice    Water
Bread   Banana  Juice

प्रत्येक पंक्ति उन वस्तुओं के संग्रह को इंगित करती है जिन्हें एक साथ खरीदा गया था। उदाहरण के लिए, पहली पंक्ति का अर्थ है कि आइटम Banana, Waterऔर Riceएक साथ खरीदे गए थे।

मैं निम्नलिखित की तरह एक दृश्य बनाना चाहता हूं:

उदाहरण दृश्य

यह मूल रूप से एक ग्रिड चार्ट है, लेकिन मुझे कुछ टूल (शायद पायथन या आर) की आवश्यकता है जो इनपुट संरचना को पढ़ सकते हैं और आउटपुट के रूप में उपरोक्त की तरह एक चार्ट का उत्पादन कर सकते हैं।

जवाबों:


6

मुझे लगता है कि आप जो चाहते हैं, वह हीट मैप का असतत संस्करण है। उदाहरण के लिए, नीचे देखें। लाल रंग सबसे अधिक एक साथ खरीदे जाने का संकेत देते हैं, जबकि हरे रंग की कोशिकाओं को कभी एक साथ नहीं खरीदा जाता है। गर्मी के नक्शे

यह वास्तव में पंडों डेटाफ्रैम और मैटलोट्लिब के साथ एक साथ रखना काफी आसान है।

import numpy as np
from pandas import DataFrame
import matplotlib
matplotlib.use('agg') # Write figure to disk instead of displaying (for Windows Subsystem for Linux)
import matplotlib.pyplot as plt

####
# Get data into a data frame
####
data = [
  ['Banana', 'Water', 'Rice'],
  ['Rice', 'Water'],
  ['Bread', 'Banana', 'Juice'],
]

# Convert the input into a 2D dictionary
freqMap = {}
for line in data:
  for item in line:
    if not item in freqMap:
      freqMap[item] = {}

    for other_item in line:
      if not other_item in freqMap:
        freqMap[other_item] = {}

      freqMap[item][other_item] = freqMap[item].get(other_item, 0) + 1
      freqMap[other_item][item] = freqMap[other_item].get(item, 0) + 1

df = DataFrame(freqMap).T.fillna(0)
print (df)

#####
# Create the plot
#####
plt.pcolormesh(df, edgecolors='black')
plt.yticks(np.arange(0.5, len(df.index), 1), df.index)
plt.xticks(np.arange(0.5, len(df.columns), 1), df.columns)
plt.savefig('plot.png')

बहुत धन्यवाद :) क्या मैं स्पार्क मेलिब का उपयोग करके इसे बना सकता हूं?
João_testeSW

@ João_testeSW आप शायद कर सकते हैं, लेकिन मैं स्पार्क से अपरिचित हूं।
एपनॉर्टन

क्या आपने इस कोड को निष्पादित करने के लिए किसी आईडीई की सिफारिश की थी?
João_testeSW

@ João_testeSW यदि आप इसे "somescript.py" के रूप में किसी फ़ाइल में सहेजते हैं, तो आप इसे टर्मिनल पर "python3 somescript.py" से चला सकते हैं। कोई आईडीई की जरूरत नहीं है, लेकिन अगर आप इसे कुछ पायथन-सक्षम आईडीई में लोड करते हैं तो इसे चलना चाहिए।
एपर्टोर्टन

धन्यवाद;) मैं देखूंगा कि क्या मैं इसका उपयोग Pyspark में कर सकता हूं, यदि हां, तो मैं इस पोस्ट को समाधान के साथ संपादित कर सकता हूं;)
João_testeSW

3

के लिए R, आप लाइब्रेरी का उपयोग कर सकते हैं ArulesViz। अच्छा प्रलेखन है और पृष्ठ 12 पर, इस तरह के विज़ुअलाइज़ेशन को बनाने के लिए उदाहरण है।

उस के लिए कोड इस प्रकार सरल है:

plot(rules, method="grouped")

हालांकि यह नहीं है कि ओपी क्या देख रहा है, यहां इस लाइब्रेरी का उपयोग करके एक महान उदाहरण दृश्य है: algobeans.com/2016/04/01/…
user35581

0

मैथेमेटिका में वोल्फ्राम भाषा के साथ ।

data = {{"Banana", "Water", "Rice"},
        {"Rice", "Water"},
        {"Bread", "Banana", "Juice"}};

जोड़ीदार गिनती प्राप्त करें।

counts = Sort /@ Flatten[Subsets[#, {2}] & /@ data, 1] // Tally
{{{"Banana", "Water"}, 1}, {{"Banana", "Rice"}, 1}, 
 {{"Rice", "Water"}, 2}, {{"Banana", "Bread"}, 1}, 
 {{"Bread", "Juice"}, 1}, {{"Banana", "Juice"}, 1}}

नामित टिक्स के लिए सूचकांक प्राप्त करें।

indices = Thread[# -> Range[Length@#]] &@Sort@DeleteDuplicates@Flatten[data]
{"Banana" -> 1, "Bread" -> 2, "Juice" -> 3, "Rice" -> 4, "Water" -> 5}

MatrixPlotका उपयोग करके प्लॉट करें SparseArray। भी इस्तेमाल कर सकते हैं ArrayPlot

MatrixPlot[
 SparseArray[Rule @@@ counts /. indices, ConstantArray[Length@indices, 2]],
 FrameTicks -> With[{t = {#2, #1} & @@@ indices}, {{t, None}, {t, None}}],
 PlotLegends -> Automatic
 ]

यहाँ छवि विवरण दर्ज करें

ध्यान दें कि यह ऊपरी-त्रिकोणीय है।

उम्मीद है की यह मदद करेगा।


0

आप इसे समुद्री दृश्य दृश्य पुस्तकालय (मैटप्लोटलिब के शीर्ष पर निर्मित) के साथ अजगर में कर सकते हैं।

data = [
  ['Banana', 'Water', 'Rice'],
  ['Rice', 'Water'],
  ['Bread', 'Banana', 'Juice'],
]

# Pull out combinations
from itertools import combinations
data_pairs = []
for d in data:
    data_pairs += [list(sorted(x)) + [1] for x in combinations(d, 2)]
    # Add reverse as well (this will mirror the heatmap)
    data_pairs += [list(sorted(x))[::-1] + [1] for x in combinations(d, 2)]

# Shape into dataframe
import pandas as pd
df = pd.DataFrame(data_pairs)
df_zeros = pd.DataFrame([list(x) + [0] for x in combinations(df[[0, 1]].values.flatten(), 2)])
df = pd.concat((df, df_zeros))
df = df.groupby([0, 1])[2].sum().reset_index().pivot(0, 1, 2).fillna(0)

import seaborn as sns
from matplotlib.pyplot import plt
sns.heatmap(df, cmap='YlGnBu')
plt.show()

अंतिम डेटाफ़्रेम dfइस तरह दिखता है:

यहाँ छवि विवरण दर्ज करें

और परिणामस्वरूप दृश्य है:

यहाँ छवि विवरण दर्ज करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.