Как делать таблицу распределения частот с python?

Я работаю с распределением частот, я сделал простой но очень избыточный рукописный шрифт, который позволяет мне получать относительное распределение частот неких данных, но я не думаю, что это лучшее осуществление, ищет из-за сети, но я не нашел много относительно как делать эти подмостки (я не схватил гистограмм частоты)

Моя общая идея эта:

mujeres.txt

76 
72
88 
60 
72 
68 
80 
64 
68 
68 
80 
76 
68 
72 
96 
72 
68 
72 
64 
80
64 
80 
76 
76 
76 
80 
104 
88 
60 
76 
72 
72 
88 
80 
60 
72 
88 
88 
124 
64

codigo.py

import numpy as np
from math import ceil

datos = np.genfromtxt('mujeres.txt')

def distribucion_frecuencias_relativas(datos, numero_clases):

    anchura_clase = (max(datos) - min(datos)) / numero_clases # anchura de clase = (valor más alto) - (valor más bajo) / numero de clases
    anchura_clase = ceil(anchura_clase)
    clases = [] # ejemplo: clases[[inferior, superior]]
    limite_inferior = min(datos)
    limite_superior = anchura_clase - 1
    frecuencia = []

    for i in range(numero_clases):
        if len(clases) == 0:
            clases.append([limite_inferior, (limite_inferior + limite_superior)])
        else:
            limite_inferior += anchura_clase
            clases.append([limite_inferior, (limite_inferior + limite_superior)])
        frecuencia.append([])

    for valor in datos:
        for i in range(0, numero_clases):
            if valor >= clases[i][0] and valor <= clases[i][1]:
                frecuencia[i].append(valor)
                break   

    print(" Pulso\t\t", "Frecuencia")
    for i in range(0, numero_clases):
        print("{0}-{1}\t {2:.1f}%".format(clases[i][0], clases[i][1], ((len(frecuencia[i]) / len(datos)) * 100) ))

Как он мог бы упрощать это и делать это правильным способом и большим количеством pythonica? я захотел сделать это помогая немного больше numpy, но в конце концов это не сделал из-за того, что не знал, как сравнивать данные с рангами классов. Также пробуйте с пандами, но я не знал, как производить пределы каждого класса.

Приветствие.

3
задан 24.12.2016, 07:11
5 ответов

Numpy - книжный магазин, который содержит большое количество функций вычисления númerico, а следовательно Вы ищете уже эту осуществленную.

import numpy as np 
import matplotlib.pyplot as plt

filename = "mujeres.txt"
data = np.loadtxt(filename)
hist, bin_edges = np.histogram(data, 10)
plt.hist(data, bins=bin_edges)
plt.show()

introducir la descripción de la imagen aquí

4
ответ дан 03.12.2019, 17:59
  • 1
    Если точно с гистограммой у него не было проблем, я осведомлялся о таблице, но я верю в то, что это será гораздо лучше, спасибо. –  24.12.2016, 19:24
  • 2
    Уже я играл со стоимостью и проверил documentació n np.histogram уже я смог строить таблицу, спасибо снова. –  24.12.2016, 20:54

Если то, что желается, состоит в том, чтобы создавать только таблицу частот, возможно делать:

import pandas as pd
import numpy as np
# Crear un array numpy
data = np.array([[2, 6, 4, 8], [10, 5, 2, 6], [8, 4, 6, 2], 
                 [6, 2, 5, 8], [5, 4, 14, 2] ])
# Crear un dataframe con un  numpy array
datos_1 = pd.DataFrame({'Column1': data[:, 0], 'Column2': data[:, 1], 'Column3': data[:, 2], 'Column4': data[:, 3] })
# Deuelve una lista por cada fila
lista_variables = datos_1.values.tolist()
# Ordenación de los datos.
lista_ordenada_variables = np.sort(lista_variables, axis=None)
frecuencias = pd.Series(lista_ordenada_variables).value_counts()
print ("\nVariable (X) - Frecuencias absolutas (f)\n" ,dicc(frecuencias)) 

Тем не менее оценил, что твой проект - mГЎs честолюбиво, так как ВїquizГЎs ты стремишься к тому, чтобы установить tambiГ©n классы и помечаешь класса?. В этом случае, ты был бы должен изменять tГ-tulo.

0
ответ дан 24.11.2019, 11:53

Если то, что мы хотим, состоит в том, чтобы создавать интервалы класса, известные lГ-mite ниже первого интервала и tamaГ±o c = 6 из каждого интервала класса, мы можем делать

datos = np.zeros((6, 2))
df = pd.DataFrame(datos, columns = ["LimInf", "LimSup"] )

df.iloc[0,0] = 13
c = 6
df.iloc[0, 1] = 13 + c -1
for i in range (1, df.shape[0]):
    df.iloc[i,0] = df.iloc[i-1,1] + 1
    df.iloc[i, 1] = df.iloc[i,0] + c -1
df

Нас возвращает

    LimInf  LimSup
0   13.0    18.0
1   19.0    24.0
2   25.0    30.0
3   31.0    36.0
4   37.0    42.0
5   43.0    48.0
0
ответ дан 24.11.2019, 11:53

Другая opciГіn, используя ее "lista_ordenada_variables" ранее упомянутая:

df =np.array(lista_ordenada_variables)
df1 = pd.value_counts(df).to_frame().reset_index()
df1.rename(columns={"index":"Variable_X",0:"frecuencia_f"})
0
ответ дан 24.11.2019, 11:53

Отметка класса мы она можем aГ±adir в колонне

df["MarcaClase"] = (df["LimSup"] + df["LimInf"]) / 2
df

он возвращает Нам

    LimInf  LimSup  MarcaClase
0   13  18  15.5
1   19  24  21.5
2   25  30  27.5
3   31  36  33.5
4   37  42  39.5
5   43  48  45.5
0
ответ дан 24.11.2019, 11:53

Если ты ищешь в этой Веб "Интервалы класса и абсолютной частоты", ты найдешь следующую soluciГіn в проблему.

import numpy as np
import pandas as pd
import math


data = np.array(
    [[15, 38, 14, 13, 29, 25], [20, 13, 16, 32, 44, 39],
     [45, 46, 19, 23, 24, 18], [19, 20, 21, 18, 25, 33],
     [13, 18, 22, 24, 27, 27]]
    )

pd.set_option('precision', 2)
datos = data[:,:].flatten()


k = 1 + 3.322 * math.log10(len(datos))
periodos = math.ceil(k)

inf = datos.min()        # Limite inferior del primer intervalo
dif = datos.max()
sup = datos.max() + 1    # Limite superior del último intervalo

intervals = pd.interval_range(
    start=inf,
    end=sup,
    periods=k,
    name="Intervalo",
    closed="left")

df = pd.DataFrame(index=intervals)
df["FreqAbs"] = pd.cut(datos, bins=df.index).value_counts()
df["Marca"]  = df.index.mid

df["LimInf"] = df.index.left
df["LimSup"] = df.index.right
df

, Которые возвращают:

    FreqAbs     Marca   LimInf  LimSup
Intervalo               
[13.0, 19.8)    11  16.4    13.0    19.8
[19.8, 26.6)    9   23.2    19.8    26.6
[26.6, 33.4)    5   30.0    26.6    33.4
[33.4, 40.2)    2   36.8    33.4    40.2
[40.2, 47.0)    3   43.6    40.2    47.0

В счастье pГЎgina encontrarГЎs mГЎs объяснения.

0
ответ дан 24.11.2019, 11:53

Теги

Похожие вопросы