Bagaimana cara membuat histogram dari daftar dengan python?

Alat berikut memvisualisasikan apa yang dilakukan komputer langkah demi langkah saat menjalankan program tersebut

Editor Kode Python

 

Punya cara lain untuk menyelesaikan solusi ini?

Sebelumnya. Tulis program Python untuk memeriksa apakah nilai yang ditentukan terkandung dalam sekelompok nilai
Lanjut. Tulis program Python untuk menggabungkan semua elemen dalam daftar menjadi string dan mengembalikannya

Berapa tingkat kesulitan latihan ini?

Mudah Sedang Keras

Uji keterampilan Pemrograman Anda dengan kuis w3resource



Ikuti kami di Facebook dan Twitter untuk pembaruan terbaru.

Piton. Kiat Hari Ini

Deque

Deque atau (Double Ended Queue) adalah objek Python dua ujung yang dengannya Anda dapat melakukan operasi tertentu dari kedua ujungnya

Ini dapat digunakan saat kumpulan diperlukan untuk dioperasikan di kedua ujungnya dan dapat memberikan efisiensi dan kesederhanaan dibandingkan struktur data tradisional seperti daftar

Dalam tutorial ini, Anda akan diperlengkapi untuk membuat plot histogram Python berkualitas produksi dan siap presentasi dengan serangkaian pilihan dan fitur

Jika Anda memiliki pengantar untuk pengetahuan menengah dalam Python dan statistik, maka Anda dapat menggunakan artikel ini sebagai toko serba ada untuk membangun dan merencanakan histogram dengan Python menggunakan perpustakaan dari tumpukan ilmiahnya, termasuk NumPy, Matplotlib, Pandas, dan Seaborn

Histogram adalah alat yang hebat untuk menilai dengan cepat distribusi probabilitas yang dipahami secara intuitif oleh hampir semua audiens. Python menawarkan beberapa opsi berbeda untuk membangun dan merencanakan histogram. Kebanyakan orang mengetahui histogram dari representasi grafisnya, yang mirip dengan grafik batang

Bagaimana cara membuat histogram dari daftar dengan python?

Artikel ini akan memandu Anda membuat plot seperti di atas serta yang lebih kompleks. Inilah yang akan Anda bahas

  • Membangun histogram dengan Python murni, tanpa menggunakan perpustakaan pihak ketiga
  • Membangun histogram dengan NumPy untuk meringkas data yang mendasarinya
  • Merencanakan histogram yang dihasilkan dengan Matplotlib, Pandas, dan Seaborn

Bonus Gratis. Singkat waktu?

Histogram dalam Python Murni

Saat Anda bersiap untuk memplot histogram, paling mudah untuk tidak memikirkan tempat sampah melainkan melaporkan berapa kali setiap nilai muncul (tabel frekuensi). Python sangat cocok untuk tugas ini

>>> ________0______

>>> from collections import Counter

>>> recounted = Counter(a)
>>> recounted
Counter({0: 1, 1: 3, 3: 1, 2: 1, 7: 2, 23: 1})
_9 mengembalikan kamus dengan elemen unik dari urutan sebagai kunci dan frekuensinya (dihitung) sebagai nilai. Dalam perulangan
>>> recounted.items() == counted.items()
True
0,
>>> recounted.items() == counted.items()
True
1 mengatakan, “untuk setiap elemen urutan, tingkatkan nilai yang sesuai di
>>> recounted.items() == counted.items()
True
2 dengan 1. ”

Faktanya, inilah yang dilakukan oleh kelas

>>> recounted.items() == counted.items()
True
3 dari pustaka standar Python, yang merupakan kamus Python dan menggantikan metode
>>> recounted.items() == counted.items()
True
4-nya

>>>

>>> from collections import Counter

>>> recounted = Counter(a)
>>> recounted
Counter({0: 1, 1: 3, 3: 1, 2: 1, 7: 2, 23: 1})
_

Anda dapat memastikan bahwa fungsi buatan tangan Anda melakukan hal yang hampir sama dengan

>>> recounted.items() == counted.items()
True
3 dengan menguji kesetaraan antara keduanya

>>>

>>> recounted.items() == counted.items()
True
_

Detil Teknis. Pemetaan dari

>>> from collections import Counter

>>> recounted = Counter(a)
>>> recounted
Counter({0: 1, 1: 3, 3: 1, 2: 1, 7: 2, 23: 1})
_9 di atas default ke yang lebih dioptimalkan jika tersedia. Di dalam fungsi Python
>>> from collections import Counter

>>> recounted = Counter(a)
>>> recounted
Counter({0: 1, 1: 3, 3: 1, 2: 1, 7: 2, 23: 1})
_9, salah satu optimasi mikro yang dapat Anda lakukan adalah mendeklarasikan
>>> recounted.items() == counted.items()
True
8 sebelum for-loop. Ini akan mengikat metode ke variabel untuk panggilan yang lebih cepat dalam loop

Membangun fungsi yang disederhanakan dari awal dapat membantu sebagai langkah pertama untuk memahami fungsi yang lebih kompleks. Mari kita sedikit menemukan kembali roda dengan histogram ASCII yang memanfaatkan Python

def ascii_histogram(seq) -> None:
    """A horizontal frequency-table/histogram plot."""
    counted = count_elements(seq)
    for k in sorted(counted):
        print('{0:5d} {1}'.format(k, '+' * counted[k]))

Fungsi ini membuat plot frekuensi yang diurutkan di mana jumlah direpresentasikan sebagai penghitungan plus (

>>> recounted.items() == counted.items()
True
9) simbol. Memanggil
def ascii_histogram(seq) -> None:
    """A horizontal frequency-table/histogram plot."""
    counted = count_elements(seq)
    for k in sorted(counted):
        print('{0:5d} {1}'.format(k, '+' * counted[k]))
0 pada kamus mengembalikan daftar kunci yang diurutkan, dan kemudian Anda mengakses nilai yang sesuai untuk masing-masing dengan
def ascii_histogram(seq) -> None:
    """A horizontal frequency-table/histogram plot."""
    counted = count_elements(seq)
    for k in sorted(counted):
        print('{0:5d} {1}'.format(k, '+' * counted[k]))
1. Untuk melihat aksinya, Anda dapat membuat kumpulan data yang sedikit lebih besar dengan modul
def ascii_histogram(seq) -> None:
    """A horizontal frequency-table/histogram plot."""
    counted = count_elements(seq)
    for k in sorted(counted):
        print('{0:5d} {1}'.format(k, '+' * counted[k]))
2 Python

>>>

>>> # No NumPy .. yet
>>> import random
>>> random.seed(1)

>>> vals = [1, 3, 4, 6, 8, 9, 10]
>>> # Each number in `vals` will occur between 5 and 15 times.
>>> freq = (random.randint(5, 15) for _ in vals)

>>> data = []
>>> for f, v in zip(freq, vals):
..     data.extend([v] * f)

>>> ascii_histogram(data)
    1 +++++++
    3 ++++++++++++++
    4 ++++++
    6 +++++++++
    8 ++++++
    9 ++++++++++++
   10 ++++++++++++
_

Di sini, Anda mensimulasikan pencabutan dari

def ascii_histogram(seq) -> None:
    """A horizontal frequency-table/histogram plot."""
    counted = count_elements(seq)
    for k in sorted(counted):
        print('{0:5d} {1}'.format(k, '+' * counted[k]))
3 dengan frekuensi yang diberikan oleh
def ascii_histogram(seq) -> None:
    """A horizontal frequency-table/histogram plot."""
    counted = count_elements(seq)
    for k in sorted(counted):
        print('{0:5d} {1}'.format(k, '+' * counted[k]))
4 (ekspresi generator). Data sampel yang dihasilkan mengulangi setiap nilai dari
def ascii_histogram(seq) -> None:
    """A horizontal frequency-table/histogram plot."""
    counted = count_elements(seq)
    for k in sorted(counted):
        print('{0:5d} {1}'.format(k, '+' * counted[k]))
3 beberapa kali antara 5 dan 15

Catatan. digunakan untuk menyemai, atau menginisialisasi, generator nomor acak semu (PRNG) yang mendasari yang digunakan oleh

def ascii_histogram(seq) -> None:
    """A horizontal frequency-table/histogram plot."""
    counted = count_elements(seq)
    for k in sorted(counted):
        print('{0:5d} {1}'.format(k, '+' * counted[k]))
2. Ini mungkin terdengar seperti sebuah oxymoron, tapi ini adalah cara membuat data acak dapat direproduksi dan deterministik. Artinya, jika Anda menyalin kode di sini apa adanya, Anda akan mendapatkan histogram yang persis sama karena panggilan pertama ke
def ascii_histogram(seq) -> None:
    """A horizontal frequency-table/histogram plot."""
    counted = count_elements(seq)
    for k in sorted(counted):
        print('{0:5d} {1}'.format(k, '+' * counted[k]))
8 setelah penyemaian generator akan menghasilkan data "acak" identik menggunakan Mersenne Twister

Hilangkan iklan

Membangun Dari Dasar. Perhitungan Histogram di NumPy

Sejauh ini, Anda telah bekerja dengan apa yang paling baik disebut "tabel frekuensi". ” Tapi secara matematis, histogram adalah pemetaan tempat sampah (interval) ke frekuensi. Lebih teknis, ini dapat digunakan untuk mendekati fungsi kepadatan probabilitas (PDF) dari variabel yang mendasarinya

Beranjak dari “tabel frekuensi” di atas, histogram sebenarnya pertama-tama “mengumpulkan” rentang nilai dan kemudian menghitung jumlah nilai yang masuk ke setiap nampan. Inilah fungsi

def ascii_histogram(seq) -> None:
    """A horizontal frequency-table/histogram plot."""
    counted = count_elements(seq)
    for k in sorted(counted):
        print('{0:5d} {1}'.format(k, '+' * counted[k]))
_9 NumPy, dan ini adalah dasar untuk fungsi lain yang akan Anda lihat nanti di pustaka Python seperti Matplotlib dan Pandas

Pertimbangkan sampel pelampung yang diambil dari distribusi Laplace. Distribusi ini memiliki ekor yang lebih gemuk daripada distribusi normal dan memiliki dua parameter deskriptif (lokasi dan skala)

>>>

>>> import numpy as np
>>> # `numpy.random` uses its own PRNG.
>>> np.random.seed(444)
>>> np.set_printoptions(precision=3)

>>> d = np.random.laplace(loc=15, scale=3, size=500)
>>> d[:5]
array([18.406, 18.087, 16.004, 16.221,  7.358])
_

Dalam hal ini, Anda bekerja dengan distribusi berkelanjutan, dan tidak akan sangat membantu untuk menghitung setiap pelampung secara terpisah, hingga ke desimal kesekian kali. Sebagai gantinya, Anda dapat membuang atau "mengumpulkan" data dan menghitung pengamatan yang termasuk dalam setiap kotak. Histogram adalah jumlah nilai yang dihasilkan dalam setiap nampan

>>>

>>> hist, bin_edges = np.histogram(d)

>>> hist
array([ 1,  0,  3,  4,  4, 10, 13,  9,  2,  4])

>>> bin_edges
array([ 3.217,  5.199,  7.181,  9.163, 11.145, 13.127, 15.109, 17.091,
       19.073, 21.055, 23.037])
_

Hasil ini mungkin tidak langsung intuitif.

>>> # No NumPy .. yet
>>> import random
>>> random.seed(1)

>>> vals = [1, 3, 4, 6, 8, 9, 10]
>>> # Each number in `vals` will occur between 5 and 15 times.
>>> freq = (random.randint(5, 15) for _ in vals)

>>> data = []
>>> for f, v in zip(freq, vals):
..     data.extend([v] * f)

>>> ascii_histogram(data)
    1 +++++++
    3 ++++++++++++++
    4 ++++++
    6 +++++++++
    8 ++++++
    9 ++++++++++++
   10 ++++++++++++
_0 secara default menggunakan 10 nampan berukuran sama dan mengembalikan Tuple dari jumlah frekuensi dan tepi nampan yang sesuai. Mereka adalah tepian dalam arti bahwa akan ada satu tepi bin lebih banyak daripada jumlah anggota histogram

>>>

>>> hist.size, bin_edges.size
(10, 11)
_

Detil Teknis. Semua kecuali nampan terakhir (paling kanan) setengah terbuka. Artinya, semua tempat sampah kecuali yang terakhir adalah [inklusif, eksklusif), dan tempat sampah terakhir adalah [inklusif, inklusif]

Rincian yang sangat padat tentang bagaimana tempat sampah dibangun terlihat seperti ini

>>>

>>> # The leftmost and rightmost bin edges
>>> first_edge, last_edge = a.min(), a.max()

>>> n_equal_bins = 10  # NumPy's default
>>> bin_edges = np.linspace(start=first_edge, stop=last_edge,
..                         num=n_equal_bins + 1, endpoint=True)
...
>>> bin_edges
array([ 0. ,  2.3,  4.6,  6.9,  9.2, 11.5, 13.8, 16.1, 18.4, 20.7, 23. ])
_

Kasus di atas sangat masuk akal. 10 nampan dengan jarak yang sama pada rentang puncak ke puncak 23 berarti interval lebar 2. 3

Dari sana, fungsi didelegasikan ke

>>> # No NumPy .. yet
>>> import random
>>> random.seed(1)

>>> vals = [1, 3, 4, 6, 8, 9, 10]
>>> # Each number in `vals` will occur between 5 and 15 times.
>>> freq = (random.randint(5, 15) for _ in vals)

>>> data = []
>>> for f, v in zip(freq, vals):
..     data.extend([v] * f)

>>> ascii_histogram(data)
    1 +++++++
    3 ++++++++++++++
    4 ++++++
    6 +++++++++
    8 ++++++
    9 ++++++++++++
   10 ++++++++++++
1 atau
>>> # No NumPy .. yet
>>> import random
>>> random.seed(1)

>>> vals = [1, 3, 4, 6, 8, 9, 10]
>>> # Each number in `vals` will occur between 5 and 15 times.
>>> freq = (random.randint(5, 15) for _ in vals)

>>> data = []
>>> for f, v in zip(freq, vals):
..     data.extend([v] * f)

>>> ascii_histogram(data)
    1 +++++++
    3 ++++++++++++++
    4 ++++++
    6 +++++++++
    8 ++++++
    9 ++++++++++++
   10 ++++++++++++
2.
>>> # No NumPy .. yet
>>> import random
>>> random.seed(1)

>>> vals = [1, 3, 4, 6, 8, 9, 10]
>>> # Each number in `vals` will occur between 5 and 15 times.
>>> freq = (random.randint(5, 15) for _ in vals)

>>> data = []
>>> for f, v in zip(freq, vals):
..     data.extend([v] * f)

>>> ascii_histogram(data)
    1 +++++++
    3 ++++++++++++++
    4 ++++++
    6 +++++++++
    8 ++++++
    9 ++++++++++++
   10 ++++++++++++
3 itu sendiri dapat digunakan untuk secara efektif membangun "tabel frekuensi" yang Anda mulai dengan di sini, dengan perbedaan bahwa nilai dengan kejadian nol disertakan

>>>

>>> bcounts = np.bincount(a)
>>> hist, _ = np.histogram(a, range=(0, a.max()), bins=a.max() + 1)

>>> np.array_equal(hist, bcounts)
True

>>> # Reproducing `collections.Counter`
>>> dict(zip(np.unique(a), bcounts[bcounts.nonzero()]))
{0: 1, 1: 3, 2: 1, 3: 1, 7: 2, 23: 1}
_

Catatan.

>>> recounted.items() == counted.items()
True
2 di sini benar-benar menggunakan tempat sampah dengan lebar 1. 0 daripada jumlah "diskrit". Karenanya, ini hanya berfungsi untuk menghitung bilangan bulat, bukan float seperti
>>> # No NumPy .. yet
>>> import random
>>> random.seed(1)

>>> vals = [1, 3, 4, 6, 8, 9, 10]
>>> # Each number in `vals` will occur between 5 and 15 times.
>>> freq = (random.randint(5, 15) for _ in vals)

>>> data = []
>>> for f, v in zip(freq, vals):
..     data.extend([v] * f)

>>> ascii_histogram(data)
    1 +++++++
    3 ++++++++++++++
    4 ++++++
    6 +++++++++
    8 ++++++
    9 ++++++++++++
   10 ++++++++++++
5

Memvisualisasikan Histogram dengan Matplotlib dan Pandas

Sekarang setelah Anda melihat cara membangun histogram di Python dari bawah ke atas, mari kita lihat bagaimana paket Python lainnya dapat melakukan pekerjaan itu untuk Anda. Matplotlib menyediakan fungsionalitas untuk memvisualisasikan histogram Python di luar kotak dengan pembungkus serbaguna di sekitar

def ascii_histogram(seq) -> None:
    """A horizontal frequency-table/histogram plot."""
    counted = count_elements(seq)
    for k in sorted(counted):
        print('{0:5d} {1}'.format(k, '+' * counted[k]))
9 NumPy

>>> from collections import Counter

>>> recounted = Counter(a)
>>> recounted
Counter({0: 1, 1: 3, 3: 1, 2: 1, 7: 2, 23: 1})
_0

Bagaimana cara membuat histogram dari daftar dengan python?

Seperti yang didefinisikan sebelumnya, plot histogram menggunakan tepi kotaknya pada sumbu x dan frekuensi yang sesuai pada sumbu y. Pada bagan di atas, melewati

>>> # No NumPy .. yet
>>> import random
>>> random.seed(1)

>>> vals = [1, 3, 4, 6, 8, 9, 10]
>>> # Each number in `vals` will occur between 5 and 15 times.
>>> freq = (random.randint(5, 15) for _ in vals)

>>> data = []
>>> for f, v in zip(freq, vals):
..     data.extend([v] * f)

>>> ascii_histogram(data)
    1 +++++++
    3 ++++++++++++++
    4 ++++++
    6 +++++++++
    8 ++++++
    9 ++++++++++++
   10 ++++++++++++
_7 memilih antara dua algoritme untuk memperkirakan jumlah tempat sampah yang “ideal”. Pada level tinggi, tujuan algoritme adalah memilih lebar bin yang menghasilkan representasi data yang paling tepat. Untuk informasi lebih lanjut tentang hal ini, yang bisa sangat teknis, lihat Memilih Sampah Histogram dari dokumen Astropy

Tetap di tumpukan ilmiah Python, Pandas

>>> # No NumPy .. yet
>>> import random
>>> random.seed(1)

>>> vals = [1, 3, 4, 6, 8, 9, 10]
>>> # Each number in `vals` will occur between 5 and 15 times.
>>> freq = (random.randint(5, 15) for _ in vals)

>>> data = []
>>> for f, v in zip(freq, vals):
..     data.extend([v] * f)

>>> ascii_histogram(data)
    1 +++++++
    3 ++++++++++++++
    4 ++++++
    6 +++++++++
    8 ++++++
    9 ++++++++++++
   10 ++++++++++++
8 untuk menggambar histogram Matplotlib dari Seri masukan

>>> from collections import Counter

>>> recounted = Counter(a)
>>> recounted
Counter({0: 1, 1: 3, 3: 1, 2: 1, 7: 2, 23: 1})
_1

Bagaimana cara membuat histogram dari daftar dengan python?

>>> import numpy as np
>>> # `numpy.random` uses its own PRNG.
>>> np.random.seed(444)
>>> np.set_printoptions(precision=3)

>>> d = np.random.laplace(loc=15, scale=3, size=500)
>>> d[:5]
array([18.406, 18.087, 16.004, 16.221,  7.358])
_0 mirip tetapi menghasilkan histogram untuk setiap kolom data dalam DataFrame

Hilangkan iklan

Merencanakan Estimasi Kepadatan Kernel (KDE)

Dalam tutorial ini, Anda telah bekerja dengan sampel, secara statistik. Apakah datanya diskrit atau kontinu, diasumsikan berasal dari populasi yang memiliki distribusi yang benar dan tepat yang dijelaskan oleh beberapa parameter saja

Estimasi kepadatan kernel (KDE) adalah cara untuk memperkirakan fungsi kepadatan probabilitas (PDF) dari variabel acak yang "mendasari" sampel kami. KDE adalah sarana perataan data

Tetap menggunakan perpustakaan Pandas, Anda dapat membuat dan melapisi plot kepadatan menggunakan

>>> import numpy as np
>>> # `numpy.random` uses its own PRNG.
>>> np.random.seed(444)
>>> np.set_printoptions(precision=3)

>>> d = np.random.laplace(loc=15, scale=3, size=500)
>>> d[:5]
array([18.406, 18.087, 16.004, 16.221,  7.358])
1, yang tersedia untuk objek
>>> import numpy as np
>>> # `numpy.random` uses its own PRNG.
>>> np.random.seed(444)
>>> np.set_printoptions(precision=3)

>>> d = np.random.laplace(loc=15, scale=3, size=500)
>>> d[:5]
array([18.406, 18.087, 16.004, 16.221,  7.358])
2 dan
>>> import numpy as np
>>> # `numpy.random` uses its own PRNG.
>>> np.random.seed(444)
>>> np.set_printoptions(precision=3)

>>> d = np.random.laplace(loc=15, scale=3, size=500)
>>> d[:5]
array([18.406, 18.087, 16.004, 16.221,  7.358])
3. Tapi pertama-tama, mari buat dua sampel data yang berbeda untuk perbandingan

>>>

>>> from collections import Counter

>>> recounted = Counter(a)
>>> recounted
Counter({0: 1, 1: 3, 3: 1, 2: 1, 7: 2, 23: 1})
2

Sekarang, untuk memplot setiap histogram pada sumbu Matplotlib yang sama

>>> from collections import Counter

>>> recounted = Counter(a)
>>> recounted
Counter({0: 1, 1: 3, 3: 1, 2: 1, 7: 2, 23: 1})
_3

Bagaimana cara membuat histogram dari daftar dengan python?

Metode ini memanfaatkan

>>> import numpy as np
>>> # `numpy.random` uses its own PRNG.
>>> np.random.seed(444)
>>> np.set_printoptions(precision=3)

>>> d = np.random.laplace(loc=15, scale=3, size=500)
>>> d[:5]
array([18.406, 18.087, 16.004, 16.221,  7.358])
4 SciPy, yang menghasilkan PDF yang tampak lebih halus

Jika Anda melihat lebih dekat pada fungsi ini, Anda dapat melihat seberapa baik ini mendekati PDF "sebenarnya" untuk sampel 1000 poin data yang relatif kecil. Di bawah ini, pertama-tama Anda dapat membuat distribusi "analitik" dengan

>>> import numpy as np
>>> # `numpy.random` uses its own PRNG.
>>> np.random.seed(444)
>>> np.set_printoptions(precision=3)

>>> d = np.random.laplace(loc=15, scale=3, size=500)
>>> d[:5]
array([18.406, 18.087, 16.004, 16.221,  7.358])
5. Ini adalah instance kelas yang merangkum distribusi normal standar statistik, momennya, dan fungsi deskriptif. PDF-nya "tepat" dalam arti didefinisikan persis sebagai
>>> import numpy as np
>>> # `numpy.random` uses its own PRNG.
>>> np.random.seed(444)
>>> np.set_printoptions(precision=3)

>>> d = np.random.laplace(loc=15, scale=3, size=500)
>>> d[:5]
array([18.406, 18.087, 16.004, 16.221,  7.358])
6

Membangun dari sana, Anda dapat mengambil sampel acak 1000 titik data dari distribusi ini, lalu mencoba kembali ke estimasi PDF dengan

>>> import numpy as np
>>> # `numpy.random` uses its own PRNG.
>>> np.random.seed(444)
>>> np.set_printoptions(precision=3)

>>> d = np.random.laplace(loc=15, scale=3, size=500)
>>> d[:5]
array([18.406, 18.087, 16.004, 16.221,  7.358])
7

>>> from collections import Counter

>>> recounted = Counter(a)
>>> recounted
Counter({0: 1, 1: 3, 3: 1, 2: 1, 7: 2, 23: 1})
_4

Bagaimana cara membuat histogram dari daftar dengan python?

Ini adalah potongan kode yang lebih besar, jadi mari luangkan waktu sejenak untuk menyentuh beberapa baris kunci

  • Subpaket
    >>> import numpy as np
    >>> # `numpy.random` uses its own PRNG.
    >>> np.random.seed(444)
    >>> np.set_printoptions(precision=3)
    
    >>> d = np.random.laplace(loc=15, scale=3, size=500)
    >>> d[:5]
    array([18.406, 18.087, 16.004, 16.221,  7.358])
    
    _8 SciPy memungkinkan Anda membuat objek Python yang mewakili distribusi analitik yang dapat Anda ambil sampelnya untuk membuat data aktual. Jadi
    >>> import numpy as np
    >>> # `numpy.random` uses its own PRNG.
    >>> np.random.seed(444)
    >>> np.set_printoptions(precision=3)
    
    >>> d = np.random.laplace(loc=15, scale=3, size=500)
    >>> d[:5]
    array([18.406, 18.087, 16.004, 16.221,  7.358])
    
    _9 mewakili variabel acak kontinu normal, dan Anda menghasilkan angka acak darinya dengan
    >>> hist, bin_edges = np.histogram(d)
    
    >>> hist
    array([ 1,  0,  3,  4,  4, 10, 13,  9,  2,  4])
    
    >>> bin_edges
    array([ 3.217,  5.199,  7.181,  9.163, 11.145, 13.127, 15.109, 17.091,
           19.073, 21.055, 23.037])
    
    0
  • Untuk mengevaluasi PDF analitik dan Gaussian KDE, Anda memerlukan larik
    >>> hist, bin_edges = np.histogram(d)
    
    >>> hist
    array([ 1,  0,  3,  4,  4, 10, 13,  9,  2,  4])
    
    >>> bin_edges
    array([ 3.217,  5.199,  7.181,  9.163, 11.145, 13.127, 15.109, 17.091,
           19.073, 21.055, 23.037])
    
    1 kuantil (deviasi standar di atas/di bawah rata-rata, untuk distribusi normal).
    >>> hist, bin_edges = np.histogram(d)
    
    >>> hist
    array([ 1,  0,  3,  4,  4, 10, 13,  9,  2,  4])
    
    >>> bin_edges
    array([ 3.217,  5.199,  7.181,  9.163, 11.145, 13.127, 15.109, 17.091,
           19.073, 21.055, 23.037])
    
    2 mewakili perkiraan PDF yang perlu Anda evaluasi pada larik untuk menghasilkan sesuatu yang bermakna secara visual dalam kasus ini
  • Baris terakhir berisi beberapa LaTex, yang terintegrasi dengan baik dengan Matplotlib

Alternatif Mewah dengan Seaborn

Mari kita bawa satu lagi paket Python ke dalam campuran. Seaborn memiliki fungsi

>>> hist, bin_edges = np.histogram(d)

>>> hist
array([ 1,  0,  3,  4,  4, 10, 13,  9,  2,  4])

>>> bin_edges
array([ 3.217,  5.199,  7.181,  9.163, 11.145, 13.127, 15.109, 17.091,
       19.073, 21.055, 23.037])
_3 yang memplot histogram dan KDE untuk distribusi univariat dalam satu langkah. Menggunakan larik NumPy
>>> hist, bin_edges = np.histogram(d)

>>> hist
array([ 1,  0,  3,  4,  4, 10, 13,  9,  2,  4])

>>> bin_edges
array([ 3.217,  5.199,  7.181,  9.163, 11.145, 13.127, 15.109, 17.091,
       19.073, 21.055, 23.037])
_4 dari sebelumnya

>>> from collections import Counter

>>> recounted = Counter(a)
>>> recounted
Counter({0: 1, 1: 3, 3: 1, 2: 1, 7: 2, 23: 1})
_5

Bagaimana cara membuat histogram dari daftar dengan python?

Panggilan di atas menghasilkan KDE. Ada juga pilihan untuk menyesuaikan distribusi tertentu dengan data. Ini berbeda dari KDE dan terdiri dari estimasi parameter untuk data umum dan nama distribusi tertentu

>>> from collections import Counter

>>> recounted = Counter(a)
>>> recounted
Counter({0: 1, 1: 3, 3: 1, 2: 1, 7: 2, 23: 1})
_6

Bagaimana cara membuat histogram dari daftar dengan python?

Sekali lagi, perhatikan sedikit perbedaannya. Dalam kasus pertama, Anda memperkirakan beberapa PDF yang tidak diketahui;

Hilangkan iklan

Alat Lain di Panda

Selain alat perencanaannya, Panda juga menawarkan metode

>>> hist, bin_edges = np.histogram(d)

>>> hist
array([ 1,  0,  3,  4,  4, 10, 13,  9,  2,  4])

>>> bin_edges
array([ 3.217,  5.199,  7.181,  9.163, 11.145, 13.127, 15.109, 17.091,
       19.073, 21.055, 23.037])
5 yang nyaman yang menghitung histogram nilai non-null ke Panda
>>> import numpy as np
>>> # `numpy.random` uses its own PRNG.
>>> np.random.seed(444)
>>> np.set_printoptions(precision=3)

>>> d = np.random.laplace(loc=15, scale=3, size=500)
>>> d[:5]
array([18.406, 18.087, 16.004, 16.221,  7.358])
2

>>>

>>> from collections import Counter

>>> recounted = Counter(a)
>>> recounted
Counter({0: 1, 1: 3, 3: 1, 2: 1, 7: 2, 23: 1})
7

Di tempat lain,

>>> hist, bin_edges = np.histogram(d)

>>> hist
array([ 1,  0,  3,  4,  4, 10, 13,  9,  2,  4])

>>> bin_edges
array([ 3.217,  5.199,  7.181,  9.163, 11.145, 13.127, 15.109, 17.091,
       19.073, 21.055, 23.037])
7 adalah cara mudah untuk membuang nilai ke dalam interval arbitrer. Katakanlah Anda memiliki beberapa data tentang usia individu dan ingin memasukkannya dengan bijaksana

>>>

>>> from collections import Counter

>>> recounted = Counter(a)
>>> recounted
Counter({0: 1, 1: 3, 3: 1, 2: 1, 7: 2, 23: 1})
8

Apa yang baik adalah bahwa kedua operasi ini pada akhirnya menggunakan kode Cython yang membuatnya kompetitif dalam kecepatan sambil mempertahankan fleksibilitasnya

Baiklah, Jadi Mana Yang Harus Saya Gunakan?

Pada titik ini, Anda telah melihat lebih dari beberapa fungsi dan metode yang dapat dipilih untuk memplot histogram Python. Bagaimana mereka membandingkan? . Berikut adalah rekap dari fungsi dan metode yang telah Anda bahas sejauh ini, yang semuanya berhubungan dengan memecah dan merepresentasikan distribusi di Python

Anda Memiliki/Ingin Mempertimbangkan MenggunakanNote(s)Data integer bersih yang disimpan dalam struktur data seperti daftar, tuple, atau set, dan Anda ingin membuat histogram Python tanpa mengimpor pustaka pihak ketiga mana pun. dari pustaka standar Python menawarkan cara yang cepat dan mudah untuk mendapatkan jumlah frekuensi dari wadah data. Ini adalah tabel frekuensi, jadi tidak menggunakan konsep binning seperti yang dilakukan histogram "sebenarnya". Array data yang besar, dan Anda ingin menghitung histogram "matematis" yang mewakili tempat sampah dan frekuensi yang sesuai.

>>> # No NumPy .. yet
>>> import random
>>> random.seed(1)

>>> vals = [1, 3, 4, 6, 8, 9, 10]
>>> # Each number in `vals` will occur between 5 and 15 times.
>>> freq = (random.randint(5, 15) for _ in vals)

>>> data = []
>>> for f, v in zip(freq, vals):
..     data.extend([v] * f)

>>> ascii_histogram(data)
    1 +++++++
    3 ++++++++++++++
    4 ++++++
    6 +++++++++
    8 ++++++
    9 ++++++++++++
   10 ++++++++++++
0 dan
>>> # No NumPy .. yet
>>> import random
>>> random.seed(1)

>>> vals = [1, 3, 4, 6, 8, 9, 10]
>>> # Each number in `vals` will occur between 5 and 15 times.
>>> freq = (random.randint(5, 15) for _ in vals)

>>> data = []
>>> for f, v in zip(freq, vals):
..     data.extend([v] * f)

>>> ascii_histogram(data)
    1 +++++++
    3 ++++++++++++++
    4 ++++++
    6 +++++++++
    8 ++++++
    9 ++++++++++++
   10 ++++++++++++
1 NumPy berguna untuk menghitung nilai histogram secara numerik dan tepi nampan yang sesuai. Untuk lebih lanjut, lihat
>>> hist.size, bin_edges.size
(10, 11)
1. Data tabular dalam objek
>>> import numpy as np
>>> # `numpy.random` uses its own PRNG.
>>> np.random.seed(444)
>>> np.set_printoptions(precision=3)

>>> d = np.random.laplace(loc=15, scale=3, size=500)
>>> d[:5]
array([18.406, 18.087, 16.004, 16.221,  7.358])
_2 atau
>>> import numpy as np
>>> # `numpy.random` uses its own PRNG.
>>> np.random.seed(444)
>>> np.set_printoptions(precision=3)

>>> d = np.random.laplace(loc=15, scale=3, size=500)
>>> d[:5]
array([18.406, 18.087, 16.004, 16.221,  7.358])
3 Panda. Metode panda seperti
>>> hist.size, bin_edges.size
(10, 11)
4,
>>> hist.size, bin_edges.size
(10, 11)
5,
>>> hist.size, bin_edges.size
(10, 11)
6, dan
>>> hist.size, bin_edges.size
(10, 11)
7, serta
>>> hist.size, bin_edges.size
(10, 11)
8 dan
>>> hist.size, bin_edges.size
(10, 11)
9. Lihat dokumen visualisasi Panda untuk mendapatkan inspirasi. Buat plot yang sangat dapat disesuaikan dan disesuaikan dari struktur data apa pun.
>>> # The leftmost and rightmost bin edges
>>> first_edge, last_edge = a.min(), a.max()

>>> n_equal_bins = 10  # NumPy's default
>>> bin_edges = np.linspace(start=first_edge, stop=last_edge,
..                         num=n_equal_bins + 1, endpoint=True)
...
>>> bin_edges
array([ 0. ,  2.3,  4.6,  6.9,  9.2, 11.5, 13.8, 16.1, 18.4, 20.7, 23. ])
0 adalah fungsi plot histogram yang digunakan secara luas yang menggunakan
>>> # No NumPy .. yet
>>> import random
>>> random.seed(1)

>>> vals = [1, 3, 4, 6, 8, 9, 10]
>>> # Each number in `vals` will occur between 5 and 15 times.
>>> freq = (random.randint(5, 15) for _ in vals)

>>> data = []
>>> for f, v in zip(freq, vals):
..     data.extend([v] * f)

>>> ascii_histogram(data)
    1 +++++++
    3 ++++++++++++++
    4 ++++++
    6 +++++++++
    8 ++++++
    9 ++++++++++++
   10 ++++++++++++
0 dan merupakan dasar untuk fungsi plot Panda. Matplotlib, dan terutama kerangka kerja berorientasi objeknya, sangat bagus untuk menyempurnakan detail histogram. Antarmuka ini membutuhkan sedikit waktu untuk dikuasai, tetapi pada akhirnya memungkinkan Anda untuk sangat tepat dalam mengatur visualisasi apa pun. Desain dan integrasi pra-kalengan.
>>> # The leftmost and rightmost bin edges
>>> first_edge, last_edge = a.min(), a.max()

>>> n_equal_bins = 10  # NumPy's default
>>> bin_edges = np.linspace(start=first_edge, stop=last_edge,
..                         num=n_equal_bins + 1, endpoint=True)
...
>>> bin_edges
array([ 0. ,  2.3,  4.6,  6.9,  9.2, 11.5, 13.8, 16.1, 18.4, 20.7, 23. ])
2 Seaborn, untuk menggabungkan plot histogram dan KDE atau pemasangan distribusi plot. Pada dasarnya "pembungkus di sekitar pembungkus" yang memanfaatkan histogram Matplotlib secara internal, yang pada gilirannya menggunakan NumPy

Bonus Gratis. Singkat waktu?

Anda juga dapat menemukan cuplikan kode dari artikel ini bersama-sama dalam satu skrip di halaman materi Real Python

Dengan itu, semoga berhasil membuat histogram di alam liar. Semoga salah satu alat di atas sesuai dengan kebutuhan Anda. Apa pun yang Anda lakukan, jangan gunakan diagram lingkaran

Tandai sebagai Selesai

Tonton Sekarang Tutorial ini memiliki kursus video terkait yang dibuat oleh tim Real Python. Tonton bersama dengan tutorial tertulis untuk memperdalam pemahaman Anda. Merencanakan Histogram Python. NumPy, Matplotlib, Panda, dan Seaborn

🐍 Trik Python 💌

Dapatkan Trik Python singkat & manis yang dikirim ke kotak masuk Anda setiap beberapa hari. Tidak pernah ada spam. Berhenti berlangganan kapan saja. Dikuratori oleh tim Real Python

Bagaimana cara membuat histogram dari daftar dengan python?

Kirimi Saya Trik Python »

Tentang Brad Solomon

Bagaimana cara membuat histogram dari daftar dengan python?
Bagaimana cara membuat histogram dari daftar dengan python?

Brad adalah seorang insinyur perangkat lunak dan anggota Tim Tutorial Python Sejati

» Lebih lanjut tentang Brad


Setiap tutorial di Real Python dibuat oleh tim pengembang sehingga memenuhi standar kualitas tinggi kami. Anggota tim yang mengerjakan tutorial ini adalah

Bagaimana cara membuat histogram dari daftar dengan python?

Adriana

Bagaimana cara membuat histogram dari daftar dengan python?

Dan

Bagaimana cara membuat histogram dari daftar dengan python?

Joanna

Master Keterampilan Python Dunia Nyata Dengan Akses Tanpa Batas ke Python Nyata

Bergabunglah dengan kami dan dapatkan akses ke ribuan tutorial, kursus video langsung, dan komunitas pakar Pythonista

Tingkatkan Keterampilan Python Anda »

Guru Keterampilan Python Dunia Nyata
Dengan Akses Tak Terbatas ke Real Python

Bergabunglah dengan kami dan dapatkan akses ke ribuan tutorial, kursus video langsung, dan komunitas ahli Pythonista

Tingkatkan Keterampilan Python Anda »

Bagaimana menurut anda?

Nilai artikel ini

Tweet Bagikan Bagikan Email

Apa takeaway # 1 Anda atau hal favorit yang Anda pelajari?

Kiat Berkomentar. Komentar yang paling berguna adalah yang ditulis dengan tujuan belajar dari atau membantu siswa lain. dan dapatkan jawaban atas pertanyaan umum di portal dukungan kami

Bagaimana Anda memplot histogram dari daftar?

Kita dapat memplot histogram menggunakan data dalam daftar dengan meneruskan daftar ke metode hist. .
dataVariable- Variabel apa pun yang menyimpan sekumpulan data. .
bins- Ini dapat digunakan untuk mengelompokkan data dalam DataVariable

Bagaimana cara membuat histogram dengan Python?

Di Matplotlib, kami menggunakan fungsi hist() untuk membuat histogram. Fungsi hist() akan menggunakan array angka untuk membuat histogram, array dikirim ke fungsi sebagai argumen.

Bagaimana Anda membuat histogram dengan banyak variabel di Python?

Jika Anda memiliki beberapa variabel numerik dan ingin memvisualisasikan distribusinya bersama-sama, Anda memiliki 2 opsi. plot pada sumbu yang sama atau manfaatkan matplotlib. Gambar dan matplotlib. Axes objek untuk menyesuaikan gambar Anda .

Bagaimana Anda membuat grafik daftar dengan Python?

Langkah-langkah berikut diikuti. .
Tentukan sumbu x dan nilai sumbu y yang sesuai sebagai daftar
Plot di atas kanvas menggunakan. plot() fungsi
Beri nama sumbu x dan sumbu y menggunakan. xlabel() dan. fungsi ylabel()
Beri judul pada plot Anda menggunakan. judul() fungsi
Terakhir, untuk melihat plot Anda, kami menggunakan. tampilkan() fungsi