Saya mencoba memahami kode hitam. Apakah mungkin untuk memiliki bingkai data kamus?

def plot_dists(num_samples, mu=0, sigma=1):

  norm_samples = numpy.random.normal(
      loc=mu, scale=sigma, size=num_samples)
  poisson_samples = numpy.random.poisson(
      lam=sigma**2, size=num_samples)  
  
  dists = pandas.DataFrame({
      'norm': norm_samples,
      'poisson': poisson_samples,
  })

  min_x = dists.min().min()
  max_x = dists.max().max()
  bw = (max_x - min_x) / 60
  pyplot.hist(dists.norm, width=bw, bins=60,
              label='N(%.1f, %.1f)' % (mu, sigma), alpha=.5, normed=True)
  pyplot.hist(dists.poisson, width=bw, bins=60,
              label='Poisson(%.1f)' % sigma, alpha=.5, normed=True)
  pyplot.legend()
  
plot_dists(100000)

Blok berikut membuat saya terlempar:

  dists = pandas.DataFrame({
      'norm': norm_samples,
      'poisson': poisson_samples,
  })

Apakah ini kerangka data kamus? Semua yang saya baca online memberi tahu saya cara mengonversi kamus ke bingkai data atau bingkai data ke kamus. Saya tidak yakin apakah ini adalah bingkai data kamus di dalamnya atau bagaimana cara kerjanya. Jika Anda ada yang dapat membantu saya memahami kode sedikit lebih baik, itu akan sangat dihargai. Terima kasih sebelumnya

0
Greg Sullivan 23 Juli 2020, 21:14

1 menjawab

Jawaban Terbaik

Pandas dataframe adalah cara untuk merepresentasikan data tabular. jika Anda membaca dokumentasi, parameter pertama dari konstruktor kelas (data ) menerima ndarray, Iterable, dict, atau DataFrame.

[https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html]

Jadi untuk membuat bingkai data Anda dapat melewatkan kamus sebagai parameter untuk contoh ini akan terlihat seperti ini: (baris pertama saja)

|   | norm | poisson  |   
|---|------|----------|
| 0 |0.455 |     2    |   

Anda dapat melihat bahwa kunci kamus (norma dan poisson) masing-masing adalah nama kolom.

Saya mereproduksi kode Anda menggunakan google colab:


import matplotlib.pyplot as pyplot
import numpy
import pandas

 
def  plot_dists(num_samples, mu=0, sigma=1):
    norm_samples = numpy.random.normal(
    loc=mu, scale=sigma, size=num_samples)
    poisson_samples = numpy.random.poisson(

    lam=sigma**2, size=num_samples)
    dist = {'norm': norm_samples,
            'poisson': poisson_samples}
    
    dists = pandas.DataFrame(dist)
    
    min_x = dists.min().min()
    max_x = dists.max().max()
    bw = (max_x - min_x) / 60
    
    #normed is deprecated i think use density instead
    pyplot.hist(dists.norm, width=bw, bins=60,
    label='N(%.1f, %.1f)' % (mu, sigma), alpha=.5, density =True)
    
    pyplot.hist(dists.poisson, width=bw, bins=60,
    label='Poisson(%.1f)' % sigma, alpha=.5, density =True)
    pyplot.legend()
    
    #return the dataframe for debugging and visualization. 
    return dists

 
dists = plot_dists(100000)
dists.tail()
0
Adel Bennaceur 23 Juli 2020, 19:00