আইটেমগুলি ঘন ঘন একসাথে কেনা ual


10

আমার কাছে সিএসভি ফাইলে নিম্নলিখিত কাঠামোতে একটি ডেটাসেট রয়েছে:

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

@ জোও_টেসটিএসডাব্লু আপনি সম্ভবত পারেন তবে আমি স্পার্কের সাথে অপরিচিত।
Apnorton

আপনি এই কোডটি কার্যকর করার জন্য কোনও আইডিই সুপারিশ করেছিলেন?
João_testeSW

@ জোও_টেসটিএসডাব্লু যদি আপনি "সোর্সস্ক্রিপ্ট.পি" হিসাবে কোনও ফাইলে এটি সংরক্ষণ করেন তবে আপনি এটি টার্মিনালে "পাইথন 3 সোর্সস্ক্রিপ্ট.পি" দিয়ে চালাতে পারেন। কোনও আইডিই দরকার নেই, তবে আপনি যদি এটি পাইথন-সক্ষম আইডিইতে লোড করেন তবে এটি চালানো উচিত।
Apnorton

ধন্যবাদ;) আমি এটি পিসপার্কে ব্যবহার করতে পারি কিনা তা আমি দেখতে পাচ্ছি, যদি হ্যাঁ তবে আমি সমাধানটি দিয়ে পোস্টটি সম্পাদনা করতে পারি;)
João_testeSW

3

জন্য R, আপনি গ্রন্থাগার ব্যবহার করতে পারেন ArulesViz। এখানে দুর্দান্ত ডকুমেন্টেশন রয়েছে এবং 12 পৃষ্ঠায় রয়েছে, এই ধরণের ভিজ্যুয়ালাইজেশন কীভাবে তৈরি করা যায় তার উদাহরণ রয়েছে।

এর জন্য কোডটি এই হিসাবে সহজ:

plot(rules, method="grouped")

ওপি যা সন্ধান করছে তা নয়, এখানে এই লাইব্রেরিটি ব্যবহার করে একটি দুর্দান্ত উদাহরণের ভিজ্যুয়ালাইজেশন রয়েছে: algobeans.com/2016/04/01/…
ব্যবহারকারী 35581

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
 ]

এখানে চিত্র বর্ণনা লিখুন

নোট করুন এটি উচ্চ-ত্রিভুজাকৃতির is

আশাকরি এটা সাহায্য করবে.


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দেখাচ্ছে:

এখানে চিত্র বর্ণনা লিখুন

এবং ফলস্বরূপ দৃশ্যটি হ'ল:

এখানে চিত্র বর্ণনা লিখুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.