Путь Змеи

Совет и хитрости Pythonic - Извлечение частоты

Как построить DataFrame из списка

Python - отличный язык для изучения начинающими программистами. Его интуитивно понятный характер позволяет большинству людей быстро понять, что на самом деле делают коды и алгоритмы. В этой и многих других статьях в будущем мы рассмотрим множество способов использования Python для решения упражнений для начинающих и решения более сложных задач. Обратите внимание, что для всех этих статей я буду использовать Jupyter Notebook, чтобы показать результаты кода.

Давайте начнем!

Итак, давайте представим, что вам дали список слов и вы должны извлечь из него определенные показатели. Как бы вы это сделали?

Слова

wordy_list = ['dog cat bear tiger tiger tiger dog dog cat cat bear   
               tiger tiger panda panda panda iguana iguana']

Первое, что вы можете заметить, это то, что приведенный выше список не очень хорошо поддается анализу данных. Ключевой проблемой является то, что данные хранятся в виде одной строки. Тогда наш первый шаг - разбить строку на список слов. Для этого мы используем надежную функцию split () в Python.

list_of_words = wordy_list.split()

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

list_of_words = wordy_list[0].split()

Отлично, этот список хорошо подходит для анализа данных. Итак, давайте начнем с некоторых основных задач.

Подсчитайте, сколько раз встречается каждое слово

Частотный анализ - это довольно простая задача, с которой вы будете сталкиваться много раз на протяжении всего пути к науке о данных. Следующая функция вернет все элементы списка в виде набора кортежей с (element, element frequency):

def word_counter(word_list):
    new_list = []
    for w in word_list:
        number = word_list.count(w)
        datapoint = (w, number)
        new_list.append(datapoint)
    return set(new_list)
counted_list = word_counter(list_of_words)

Отлично, задача выполнена!

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

def word_counter(word_list):
    return set([(element, word_list.count(element)) 
               for element in word_list])
counted_list = word_counter(list_of_words)

Мы видим, что функция теперь сведена к одной строке кода. Код не только сохраняет всю свою функциональность, но и выглядит просто, но элегантно.

Подсчитайте, сколько раз встречается каждое слово, И расположите вывод от наиболее частого к наименее частому

Теперь ваш босс хочет, чтобы вы построили счетчик частоты, НО ТАКЖЕ хочет, чтобы вы возвращали данные, упорядоченные от наиболее часто встречающегося слова к наименее часто встречающемуся. Конечно, мы можем просто обработать данные после их возврата, но для экономии времени давайте встроим эту функцию в функцию. Для этого давайте воспользуемся функцией sorted (), а также лямбда-функцией.

def word_counter(word_list):
    new_list = [(element, word_list.count(element)) 
                for element in set(word_list)]
    return sorted(new_list, key = lambda j: j[1], reverse  = True)
counted_list = word_counter(list_of_words)

Отлично, мы выполнили задачу.

ПОСЛЕДНИЕ ИЗМЕНЕНИЯ !!!

Допустим, ваш начальник звонит вам в 7 утра и срочно просит вас изменить код.

"В чем проблема?" Вы можете спросить.

«Нам нужны данные, упорядоченные от наиболее частых к наименее частым, И ЗАТЕМ в алфавитном порядке, нам также нужно, чтобы они были сохранены в виде фрейма данных», - говорит ваш начальник.

Поверьте, такие сценарии довольно распространены в мире науки о данных. Выполним просьбу. Приведенный ниже код гарантирует, что вывод упорядочен от наиболее часто встречающихся к наименее частым элементам, И ЗАТЕМ элементы сортируются в алфавитном порядке. Дополнительно мы загружаем данные в DataFrame pandas. Обратите внимание, что мы должны импортировать модуль pandas.

import pandas as pd
def word_counter(word_list):
    new_list = [(element, word_list.count(element)) 
                for element in set(word_list)]
    return pd.DataFrame(sorted(new_list, 
                               key=lambda x:(-x[1], x[0])),
                        columns = ['element', 'frequency_count'])
df_counted = word_counter(list_of_words)

Отлично, это должно удовлетворить нашего босса и других заинтересованных лиц.

В заключение

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