У меня есть набор данных в следующей структуре, вставленной в файл CSV:
BananaWaterRiceRiceWaterBreadBananaJuice
Каждая строка указывает коллекцию предметов, которые были куплены вместе. Например, первая строка обозначает, что элементыBanana , Waterи Riceбыли приобретены вместе.
Я хочу создать визуализацию следующим образом:
Это в основном сеточная диаграмма, но мне нужен какой-то инструмент (возможно, Python или R), который может прочитать структуру ввода и создать диаграмму, подобную приведенной выше, в качестве вывода.
Я думаю, что вы, вероятно, хотите, это дискретная версия тепловой карты. Например, см. Ниже. Красные цвета обозначают наиболее часто покупаемые вместе, тогда как зеленые ячейки никогда не покупаются вместе.
На самом деле это довольно легко собрать вместе с Pandas DataFrames и matplotlib.
import numpy as np
from pandas importDataFrameimport 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:ifnot item in freqMap:
freqMap[item]={}for other_item in line:ifnot 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')
Большое спасибо :) Могу ли я создать это с помощью Spark Mllib?
João_testeSW
@ João_testeSW Вы, вероятно, можете, но я не знаком со Spark.
Апнортон
Вы рекомендовали какую-либо IDE для выполнения этого кода?
João_testeSW
@ João_testeSW Если вы сохраните это в файле как «somescript.py», вы можете запустить его с «python3 somescript.py» на терминале. IDE не требуется, но если вы загрузите ее в какую-либо Python-совместимую IDE, она должна работать.
Апнортон
спасибо;) Я посмотрю, смогу ли я использовать его в Pyspark, если да, тогда я могу отредактировать пост с решением;)
João_testeSW
3
Для R, вы можете использовать библиотеку ArulesViz. Есть хорошая документация, и на странице 12 есть пример, как создать этот вид визуализации.
Вы можете сделать это на python с помощью библиотеки визуализации seaborn (построенной поверх matplotlib).
data =[['Banana','Water','Rice'],['Rice','Water'],['Bread','Banana','Juice'],]# Pull out combinationsfrom 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 dataframeimport 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()
Для
R
, вы можете использовать библиотекуArulesViz
. Есть хорошая документация, и на странице 12 есть пример, как создать этот вид визуализации.Код для этого так просто:
источник
С Wolfram Language в Mathematica .
Получить попарные счета.
Получить индексы для названных тиков.
Участок с
MatrixPlot
использованиемSparseArray
. Можно также использоватьArrayPlot
.Обратите внимание, что это верхнетреугольный.
Надеюсь это поможет.
источник
Вы можете сделать это на python с помощью библиотеки визуализации seaborn (построенной поверх matplotlib).
Конечный кадр данных
df
выглядит так:и полученная визуализация:
источник