Bagan gelembung di python seaborn

Kerangka kerja Qt GUI digunakan untuk membuat antarmuka pengguna di seluruh platform. Kerangka kerja ini ditulis dalam C++ tetapi pustaka PyQt5 memungkinkannya untuk diimpor dan digunakan langsung dengan Python. Kemudahan penggunaannya menjadikannya salah satu aplikasi paling populer untuk membuat GUI dengan Python

PyQt5 memiliki banyak kegunaan dalam visualisasi data dengan Python, salah satunya adalah plot interaktif yang dibuat di matplotlib. Plot interaktif memungkinkan komunikasi data yang lebih kompleks dengan cara yang efektif. Pada artikel ini, saya akan mendemonstrasikan cara membuat plot gelembung interaktif sehingga pengguna dapat menyelami data

Persyaratan sistem

Saya menggunakan JupyterNotebook, tetapi IDE apa pun juga dapat digunakan. Matplotlib hanya dapat diintegrasikan dengan PyQt5 jika versinya adalah notebook matplotlib yang memungkinkan plot interaktif

Di Jupyter Notebook baris. %matplotlib notebook perlu dijalankan untuk mengubah preset karena %matplotlib inline tidak mengizinkan plot interaktif. Jika IDE sedang digunakan notebook matplotlib adalah pengaturan otomatis

Langkah 1. Buat Bagan Gelembung

Dataset yang akan saya gunakan adalah The World Factbook 2020 yang diterbitkan setiap tahun oleh CIA. Kumpulan data berisi informasi umum tentang masyarakat, ekonomi, dan pemerintahan setiap negara di dunia

Itu dapat diunduh di sini

https. // www. cia. gov/the-world-factbook/about/archives/download/factbook-2020. zip

Variabel yang digunakan dari dataset ini adalah

  • X. PDB per kapita
  • Y. Harapan hidup
  • Warna. Angka kelahiran
  • Ukuran. Populasi

Impor Perpustakaan

from matplotlib import pyplot as plt
import pandas as pd
import seaborn as sns

Pembersihan Data

Beberapa pembersihan data dan augmentasi data perlu diterapkan ke setiap variabel sebelum dapat digunakan dalam grafik

Variabel X. PDB per Kapita saat ini berupa string yang menyertakan koma dan simbol dolar yang keduanya harus dihapus untuk mengonversi string menjadi nilai integer

df = pd.read_csv(“factbook.csv”)df[“GDP per Capita”] = df[“GDP per capita”].str.replace(‘,’,’’).str.replace(‘$’,’’).astype(float).astype(int)
_

Variabel Y. Tingkat Kelahiran saat ini merupakan variabel kontinu tetapi karena digunakan untuk rona, ia perlu dibuat menjadi diskrit dengan membuat nampan

bi = []
for i in range(0,60,10):
bi.append(i)
df[‘Birth Rate’] =(pd.cut(df[‘ Birth rate’], bins = bi)

Variabel ukuran. Populasi saat ini berupa string yang terdiri dari koma dan untuk mengonversi ke bilangan bulat, koma harus dihapus

df[‘Population (M)’]=(df[‘Population’].str.replace(‘,’,’’)).astype(int)

Seaborn, pustaka visualisasi data yang dibangun di atas matplotlib, akan digunakan untuk membuat bagan gelembung ini. Pustaka matplotlib tradisional juga dapat digunakan

bubble = sns.scatterplot(data=df, x=”GDP per Capita”, y=”Life expectancy at birth”, size=”Population (M)”, hue=”Birth Rate”, legend= True, sizes=(10, 300))
_

Tambahkan legenda untuk ukuran dan warna, dan tunjukkan plotnya

bubble.legend()
plt.show()

Plot Seaborn

Grafik awal ini menunjukkan hubungan antara keempat variabel dengan jelas. Mencoba menambahkan variabel tambahan akan membuat visualisasi membingungkan, namun masih ada lima variabel lain dalam dataset ini. Dengan membuat visualisasi menjadi interaktif, pengguna dapat menyelam lebih jauh ke dalam data dengan melihat bagaimana berbagai variabel berinteraksi satu sama lain

Langkah 2. Siapkan PyQt5

Gunakan pernyataan impor di bawah untuk mengunduh semua pustaka dan dependensi untuk PyQt5

from PyQt5.QtWidgets import QDialog, QApplication, QPushButton, QVBoxLayout, QLabel, QComboBox, QSlider
from PyQt5.QtCore import Qt
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
import math
import sys
import re
_

Buat kelas dan konstruktor untuk memulai. Kemudian atur geometri (tentukan apa itu geometri) dari jendela popup. Saya memilih untuk melakukan (400.400.900.900) karena ini yang saya yakini cukup besar bagi pengguna untuk menangkap detail dari plot. Parameter untuk setGeometry® adalah x, y, width, dan height

class Window(QDialog):
# constructor
def __init__(self, parent=None):
self.setGeometry(400, 400, 900, 900)

Langkah 3. Tambahkan Widget di Konstruktor

Gawit 1. FigureCanvas

Widget gambar digunakan untuk menampilkan grafik dalam visualisasi

self.figure = plt.figure()
self.canvas = FigureCanvas(self.figure)
_

Wiget 2. QComboBox

Tambahkan kode di konstruktor untuk setiap ComboBox. Kode di bawah ini untuk yang pertama saya beri nama xComboBox untuk menangkap input pengguna untuk variabel yang digunakan untuk sumbu x. Pertama, inisialisasi dan beri nama ComboBox

self.xComboBox = QComboBox(self)
_

Untuk menambahkan item ke dalam ComboBox. addItems() digunakan dengan daftar yang menyertakan opsi. Dalam hal ini, semua nama kolom ditambahkan sebagai pilihan di ComboBox

df = pd.read_csv(“factbook.csv”)df[“GDP per Capita”] = df[“GDP per capita”].str.replace(‘,’,’’).str.replace(‘$’,’’).astype(float).astype(int)
_0

Wiget 3. QLabel

Label perlu dibuat untuk memungkinkan pengguna mengetahui widget lain akan digunakan untuk apa. Dalam hal ini, ini akan memungkinkan pengguna untuk mengetahui untuk apa nilai-nilai dalam ComboBox akan digunakan

df = pd.read_csv(“factbook.csv”)df[“GDP per Capita”] = df[“GDP per capita”].str.replace(‘,’,’’).str.replace(‘$’,’’).astype(float).astype(int)
_1

Label yang dibuat perlu ditautkan ke ComboBox untuk menjadikannya satu objek gabungan

df = pd.read_csv(“factbook.csv”)df[“GDP per Capita”] = df[“GDP per capita”].str.replace(‘,’,’’).str.replace(‘$’,’’).astype(float).astype(int)
_2

Wiget 4. QSlider

Penggeser digunakan untuk memungkinkan pengguna menyesuaikan nilai dalam visualisasi. Widget dalam PyQt5 adalah QSlider yang memiliki parameter orientasi yang diperlukan yang dapat berupa Qt. Horisontal atau Qt. Vertikal. Dalam hal ini, orientasi horizontal adalah yang paling menarik secara visual. Dalam visualisasi ini, penggeser akan mengubah variabel ukuran sehingga pengguna dapat menambah atau mengurangi gelembung untuk menentukan ukuran terbaik untuk visibilitas. (Lihat ini lagi)

df = pd.read_csv(“factbook.csv”)df[“GDP per Capita”] = df[“GDP per capita”].str.replace(‘,’,’’).str.replace(‘$’,’’).astype(float).astype(int)
_3

Geometri penggeser perlu disesuaikan agar sesuai dengan jendela GUI. Argumen untuk setGeometri sama seperti di atas, x, y, lebar, dan tinggi

df = pd.read_csv(“factbook.csv”)df[“GDP per Capita”] = df[“GDP per capita”].str.replace(‘,’,’’).str.replace(‘$’,’’).astype(float).astype(int)
_4

Fungsi perlu ditautkan ke penggeser untuk memanfaatkan nilainya dalam visualisasi. Pertama,. valueChanged[int] perlu digunakan untuk mendapatkan nilai saat ini berdasarkan posisi slider. connect() dengan nama fungsi yang akan digunakan. Fungsi yang digunakan juga akan digunakan di widget tombol di bawah ini dan akan dibahas di bagian ini

df = pd.read_csv(“factbook.csv”)df[“GDP per Capita”] = df[“GDP per capita”].str.replace(‘,’,’’).str.replace(‘$’,’’).astype(float).astype(int)
_5

Gawit 5. Tombol

Gunakan QPushButton untuk membuat widget tombol. Parameter dalam fungsi ini adalah nama tombol yang diteruskan sebagai string. Nama tombolnya adalah "Plot Current Attributes" dan setiap kali pengguna mengubah nilai slider atau nilai ComboBox, tombol ini harus ditekan untuk memperbarui grafik. Juga perlu ada fungsi yang terhubung ke tombol untuk memprogram tindakan yang sedang dilakukan saat ditekan. Saya membuat fungsi bernama changeValue yang digunakan untuk tombol dan penggeser

df = pd.read_csv(“factbook.csv”)df[“GDP per Capita”] = df[“GDP per capita”].str.replace(‘,’,’’).str.replace(‘$’,’’).astype(float).astype(int)
_6

ubahNilai. Fungsi Slider dan Tombol

Widget tombol dan penggeser perlu dihubungkan ke suatu fungsi untuk memanfaatkan nilainya dalam visualisasi. Fungsi changeValue yang saya buat dapat digunakan untuk tombol dan penggeser. Ini dimungkinkan dengan parameter *args yang memungkinkan sejumlah parameter dilewatkan. Untuk tombol, tidak ada parameter yang akan diteruskan saat memanggil fungsi, tetapi untuk penggeser, nilai posisi akan diteruskan. Fungsi ini berada di luar konstruktor

df = pd.read_csv(“factbook.csv”)df[“GDP per Capita”] = df[“GDP per capita”].str.replace(‘,’,’’).str.replace(‘$’,’’).astype(float).astype(int)
_7

Ambil semua nilai widget comboBox saat ini yang akan digunakan untuk scatterplot

df = pd.read_csv(“factbook.csv”)df[“GDP per Capita”] = df[“GDP per capita”].str.replace(‘,’,’’).str.replace(‘$’,’’).astype(float).astype(int)
_8

Kosongkan plot saat ini dan buat subplot baru

df = pd.read_csv(“factbook.csv”)df[“GDP per Capita”] = df[“GDP per capita”].str.replace(‘,’,’’).str.replace(‘$’,’’).astype(float).astype(int)
_9

Sesuaikan variabel ukuran dan warna. Variabel ukuran perlu dinormalisasi agar gelembung memiliki ukuran yang tepat

bi = []
for i in range(0,60,10):
bi.append(i)
df[‘Birth Rate’] =(pd.cut(df[‘ Birth rate’], bins = bi)
0

Variabel warna perlu dibuat diskrit

bi = []
for i in range(0,60,10):
bi.append(i)
df[‘Birth Rate’] =(pd.cut(df[‘ Birth rate’], bins = bi)
1

Setelah pengguna memilih nilai baru dari Kotak Kombo, setel ukuran baru dengan penggeser dan data baru disesuaikan, plot pencar dapat dibuat

bi = []
for i in range(0,60,10):
bi.append(i)
df[‘Birth Rate’] =(pd.cut(df[‘ Birth rate’], bins = bi)
2

Buat label khusus untuk legenda warna dan ukuran. Matplotlib menambahkan label secara otomatis, namun untuk variabel warna, rentang harus ditampilkan. Label otomatis hanya akan memberi label warna dari 1 hingga n, n adalah jumlah warna. Untuk ukuran, kami menormalkan data sehingga label otomatis akan ditampilkan dan kami ingin data sebenarnya dalam legenda. Ini adalah langkah opsional, jika data tidak diubah, tidak perlu melakukan ini karena label otomatis sudah benar

bi = []
for i in range(0,60,10):
bi.append(i)
df[‘Birth Rate’] =(pd.cut(df[‘ Birth rate’], bins = bi)
_3

Tambahkan legenda dengan label khusus dan format grafik. Ukuran grafik perlu diubah ukurannya agar legenda pas di luar grafik. Ini dilakukan dengan mengurangi tinggi dan lebar sebesar 10% dan memindahkan posisi y0 sedikit ke atas sehingga legenda warna dapat berada di bagian bawah grafik dan legenda ukuran di sisi kanan

bi = []
for i in range(0,60,10):
bi.append(i)
df[‘Birth Rate’] =(pd.cut(df[‘ Birth rate’], bins = bi)
_4

Gambar grafik baru dengan widget gambar

bi = []
for i in range(0,60,10):
bi.append(i)
df[‘Birth Rate’] =(pd.cut(df[‘ Birth rate’], bins = bi)
5

Langkah 4. Memformat Widget

Setelah semua widget dibuat, mereka perlu diformat. PyQt5 memiliki banyak tata letak yang berbeda, saya memilih untuk menggunakan QVBoxLayout(). Ini mengatur widget dalam kotak vertikal. Ada juga QHBoxLayout() yang mengatur widget dalam kotak horizontal, QGridLayout() mengatur widget dalam format grid dan QFormLayout() yang mengatur widget dalam dua kolom

Setiap widget dapat ditambahkan ke tata letak satu demi satu dan akan ditumpuk satu sama lain. Terakhir, setelah semua widget berada di tata letak, widget harus disetel sendiri. setLayout(LayoutName) nama layout saya adalah grid. Nama apa pun dapat digunakan, tetapi ini menginisialisasi objek tata letak dan perlu dipanggil untuk menambahkan widget ke tata letak spesifik tersebut

bi = []
for i in range(0,60,10):
bi.append(i)
df[‘Birth Rate’] =(pd.cut(df[‘ Birth rate’], bins = bi)
6

Langkah 5. Metode Utama

Metode main membuat instance kelas dan mengulang tanpa batas untuk mendapatkan perubahan apa pun yang dilakukan pada visualisasi

bi = []
for i in range(0,60,10):
bi.append(i)
df[‘Birth Rate’] =(pd.cut(df[‘ Birth rate’], bins = bi)
7

Hasil Akhir

GUI akhir

Ringkasan

Gabungkan semua langkah di atas untuk mendapatkan plot gelembung interaktif Anda. Saat fungsi dijalankan, GUI akan muncul di jendela terpisah. Kode lengkapnya ditautkan di bawah ini. Meskipun ini adalah contoh sederhana, PyQt5 dapat diintegrasikan ke dalam visualisasi matplotlib apa pun. Ini memungkinkan visualisasi dibuat yang menambahkan lapisan kedalaman dan informasi yang tidak dicapai dengan laporan umum atau visualisasi statis. Lagi pula, sebuah gambar bernilai seribu kata

Kode lengkap dapat ditemukan di sini. https. //github. com/kruthik109/Data-Visualisasi/blob/main/Interactive-Bubble-Plot/widgets. py

Sumber

Badan Intelijen Pusat. (2020, 6 April). Buku Fakta Dunia 2020. Badan Intelijen Pusat. Diakses 22 Februari 2022, dari https. // www. cia. gov/the-world-factbook/about/archives/

Apa itu bagan gelembung di Python?

Bagan gelembung menampilkan data sebagai kumpulan lingkaran . Data yang diperlukan untuk membuat bagan gelembung harus memiliki koordinat xy, ukuran gelembung, dan warna gelembung. Warna dapat disediakan oleh perpustakaan itu sendiri.

Bagaimana Anda merencanakan bagan gelembung?

Untuk membuat bagan gelembung, susun data Anda dalam baris atau kolom pada lembar kerja sehingga nilai x dicantumkan di baris atau kolom pertama dan nilai y yang sesuai serta nilai ukuran gelembung (z) dicantumkan di baris atau kolom yang berdekatan. Misalnya, atur data lembar kerja Anda seperti yang ditunjukkan pada gambar berikut

Apa yang bisa saya gunakan sebagai pengganti bagan gelembung?

Peta ubin dapat dianggap sebagai alternatif dari peta gelembung atau peta choropleth. Mereka sering digunakan untuk membandingkan data antara, misalnya, wilayah yang berbeda di suatu negara.

Apa tujuan dari grafik gelembung?

Bagan gelembung terutama digunakan untuk menggambarkan dan menunjukkan hubungan antara variabel numerik . Mereka adalah alat yang hebat untuk membangun hubungan antara variabel dan memeriksa hubungan antara indikator bisnis utama, seperti biaya, nilai, dan risiko.