2010-08-03 2 views
1

В Excel есть функция частоты:python: есть ли функция частоты?

частотную функцию Excel Эта полезная функция может анализировать ряд значений и суммировать их в числа указанных диапазонов. Для пример высоты некоторых детей можно сгруппировать в четыре категории из [менее 150 см]; [151 - 160 см]; [161 - 170 см]; [Более 170 см].

Хотели бы вы узнать больше?

Excel 2003 Формулы по Джону Уолкенбаха (с CD)

ЧАСТОТЫ() является необычным массивом функции, и она работает по-разному, чтобы большинство других обычных функций. Он может не просто вводиться в ячейку, либо даже введен правильно, используя мастер функций Excel .

Обратите внимание, что эта функция не анализирует значения по категориям, например. Расходы домашних хозяйств на группы, такие как как газ, электричество, вода, ставки и т. Д. Для проведения такого анализа может быть уместен фильтр .

Частотная функция имеет два аргумента - первый - диапазон , содержащий значения, которые должны быть проанализированы; второй - диапазон , содержащий верхние значения для каждой групповой обвязки. например = ЧАСТОТЫ (А3: А120, В6: В10)

Второй аргумент (группа верхние пределы ) будут исключать любые значения, которые превышают самую высокую категорию или полосатость. Эта функция позволяет вам учесть это и расширить диапазон анализа до категории , которая содержит все значения , которые превышают указанный верхний предел.

http://www.meadinkent.co.uk/xlfreq.htm

есть такая вещь в Python?

+1

(. У меня нет Excel атм) Есть ли 'FREQUENCY' просто подсчитать количество точек в каждом ведре, или это ведро данные сами указывает? То есть, 'FREQUENCY ([145, 155])' означает дать '{'Менее 150 см': 1, ...}' или '{'Менее 150 см': 145, ...'? – katrielalex

+1

Если последний, 'numpy.histogram' является вашим другом. – katrielalex

+0

спасибо! как его включить? –

ответ

4
import numpy 
numpy.histogram([ <data> ], [ <bins> ]) 

Docs:

numpy.histogram(a, bins=10, range=None, normed=False, weights=None) 

Compute гистограмма набора данных. Параметры:

a: array_like Входные данные. Гистограмма вычисляется по сплющенному массиву.

bins: INT или последовательность скаляров, по желанию Если бункеры является INT, она определяет количество равных по ширине контейнеров в заданном диапазоне (10 по умолчанию).Если ячейки представляют собой последовательность, она определяет края бункера , включая крайний правый край, , допускающий неравномерность ширины бункера.

range: (поплавок, поплавок), опционально Нижний и верхний диапазоны бункеров. Если не указано, диапазон просто (a.min(), a.max()). Значения вне диапазона игнорируются.

normed: bool, optional Если False, результат будет содержать количество выборок в каждом bin. Если True, результатом является значение функции плотности вероятности в ячейке , нормализованное таким образом, что интеграл по диапазону равен 1. Примечание о том, что сумма значений гистограммы не будет равна 1, если ячейки выбрана единичная ширина; это не функция массы вероятности .

weights: array_like, optional Массив весов такой же формы, как и. Каждое значение в единственном вносит свой собственный вес в сторону счета bin (вместо 1). Если нормированный является Правдой, вес нормализуется, так что интеграл от плотности в диапазоне остается 1

Возвратов:

hist: массив Значения гистограммы. См. Нормированные и весовые для описания возможной семантики.

bin_edges: массив dtype float Верните края бункера (длина (высота) +1).

Возможно, у вас должно быть install numpy.

1

на основе того, что ссылочные страницы http://www.meadinkent.co.uk/xlfreq.htm состояния я написал функцию я уверен, что есть более быстрые способы сделать это, но я уверен, что это один правильный

def FREQUENCY(values, bands, max=None): 
    counts = [0]*(len(bands)+1) 
    for v in values: 
     for i,b in enumerate(bands): 
      if v <= b: 
       counts[i] += 1 
       break 
      else if v > max: 
       counts[-1] += 1 
       break 
    return counts 
+0

FREQUENCY Excel возвращает массив, который является одним элементом длиннее, чем полосы. В этой версии нет. –

3

Наилучшим вариантом является использование numpy.histogram, но если вы не хотите, чтобы установить NumPy, вот один, который работает так же, как Excel:

def frequency(data, bins): 
    # work with local sorted copy of bins for performance 
    bins = bins[:] 
    bins.sort() 
    freqs = [0] * (len(bins)+1) 
    for item in data: 
     for i, bin_val in enumerate(bins): 
      if item <= bin_val: 
       freqs[i] += 1 
       break 
     else: 
      freqs[len(bins)] += 1 
    return freqs 

Вот пример в справке Excel перевела на питоне:

>>> data = [79, 85, 78, 85, 50, 81, 95, 88, 97] 
... bins = [70, 79, 89] 
... print frequency(data, bins) 
[1, 2, 4, 2] 

Существует одна незначительная разница. В Excel, если bins пуст, длина данных возвращается как целое число. Эта версия python возвращает это целое число в списке. Причина этого в том, что версия Python вернет согласованный тип данных (и все равно даст правильный ответ).

1

Я не знаю, есть ли такая функция в Python, но, очевидно, вы можете написать это:

def frequency(values, groups): 
    # Build the solution 
    toret = dict() 
    toret[ None ] = list() 

    # Sort them 
    values.sort() 
    groups.sort() 

    # Run over groups 
    i = 0 
    for maxValue in groups: 
     while ((values[ i ] < maxValue) and (i < len(values))): 
      if (toret.get(maxValue) == None): 
       toret[ maxValue ] = list() 
      toret[ maxValue ].append(values[ i ]) 
      i += 1 

     if (i >= len(values)): 
      break 

    if (i < len(values)): 
     while(i < len(values)): 
      toret[ None ].append(values[ i ]) 
      i += 1 

    return toret 


l=[ 15,9,3,5,6,4,8,2,1,7,11,12 ] 
g=[ 3,6,9 ] 
print(frequency(l, g)) 

Результат здесь есть словарь, в котором каждый элемент является одним из максимальных значений в список групп. Вы можете найти частоту, вычислив длину каждого списка.

Результат:

{None: [9, 11, 12, 15], 9: [6, 7, 8], 3: [1, 2], 6: [3, 4, 5]} 
+1

Почему все круглые скобки? –

+0

Если вы ссылаетесь на скобки в предложениях, например: «print (frequency (l, g))», то они связаны с использованием Python 3. ЕСЛИ вы ссылаетесь на них в «if (i Baltasarq

Смежные вопросы