Saya memiliki dataset dalam struktur berikut yang disisipkan dalam file CSV:
BananaWaterRiceRiceWaterBreadBananaJuice
Setiap baris menunjukkan koleksi barang yang dibeli bersama. Misalnya, baris pertama menunjukkan bahwa item Banana, Waterdan Ricedibeli bersama-sama.
Saya ingin membuat visualisasi seperti berikut:
Ini pada dasarnya adalah bagan kotak tetapi saya memerlukan beberapa alat (mungkin Python atau R) yang dapat membaca struktur input dan menghasilkan bagan seperti di atas sebagai output.
Saya pikir apa yang Anda inginkan adalah versi diskrit dari peta panas. Sebagai contoh, lihat di bawah. Warna merah menunjukkan yang paling umum dibeli bersama, sedangkan sel hijau tidak pernah dibeli bersama.
Ini sebenarnya cukup mudah untuk disatukan dengan Pandas DataFrames dan 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')
Banyak terima kasih :) Dapatkah saya membuat ini menggunakan Spark Mllib?
João_testeSW
@ João_testeSW Anda mungkin bisa, tapi saya tidak terbiasa dengan Spark.
apnorton
apakah Anda merekomendasikan IDE untuk menjalankan kode ini?
João_testeSW
@ João_testeSW Jika Anda menyimpan ini dalam file sebagai "somescript.py", Anda dapat menjalankannya dengan "python3 somescript.py" di terminal. Tidak diperlukan IDE, tetapi jika Anda memuatnya ke beberapa IDE yang mampu Python, ia harus dijalankan.
apnorton
terima kasih;) Saya akan melihat apakah saya dapat menggunakannya ke Pyspark, jika ya maka saya dapat mengedit posting dengan solusinya;)
João_testeSW
3
Sebab R, Anda bisa menggunakan perpustakaan ArulesViz. Ada dokumentasi yang bagus dan di halaman 12, ada contoh cara membuat visualisasi semacam ini.
Anda dapat melakukan ini dalam python dengan perpustakaan visualisasi seaborn (dibangun di atas 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()
Sebab
R
, Anda bisa menggunakan perpustakaanArulesViz
. Ada dokumentasi yang bagus dan di halaman 12, ada contoh cara membuat visualisasi semacam ini.Kode untuk itu sesederhana ini:
sumber
Dengan Bahasa Wolfram di Mathematica .
Dapatkan penghitungan berpasangan.
Dapatkan indeks untuk kutu bernama.
Plot dengan
MatrixPlot
menggunakanSparseArray
. Bisa juga digunakanArrayPlot
.Perhatikan bahwa ini adalah segitiga atas.
Semoga ini membantu.
sumber
Anda dapat melakukan ini dalam python dengan perpustakaan visualisasi seaborn (dibangun di atas matplotlib).
Kerangka data akhir
df
terlihat seperti ini:dan visualisasi yang dihasilkan adalah:
sumber