HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-21
1 <p><a>#статьи</a></p>
1 <p><a>#статьи</a></p>
2 <ul><li>22 янв 2021</li>
2 <ul><li>22 янв 2021</li>
3 <li>0</li>
3 <li>0</li>
4 </ul><p>Всё ещё не знаете, как готовить данные? Тогда мы идём к вам.</p>
4 </ul><p>Всё ещё не знаете, как готовить данные? Тогда мы идём к вам.</p>
5 <p> vlada_maestro / shutterstock</p>
5 <p> vlada_maestro / shutterstock</p>
6 <p>Кандидат философских наук, специалист по математическому моделированию. Пишет про Data Science, AI и программирование на Python.</p>
6 <p>Кандидат философских наук, специалист по математическому моделированию. Пишет про Data Science, AI и программирование на Python.</p>
7 <p>Типичная ситуация в работе дата-сайентиста: данные есть, но хранятся в таком виде, что модели машинного обучения их не поймут, - например, в таблице Excel.</p>
7 <p>Типичная ситуация в работе дата-сайентиста: данные есть, но хранятся в таком виде, что модели машинного обучения их не поймут, - например, в таблице Excel.</p>
8 <p>Преобразуем эти данные в удобный для компьютеров формат с помощью популярной Python-библиотеки Pandas. Для этого:</p>
8 <p>Преобразуем эти данные в удобный для компьютеров формат с помощью популярной Python-библиотеки Pandas. Для этого:</p>
9 <ul><li><strong>Превратим</strong>таблицу Excel в <em>датафрейм</em>Pandas в бесплатном сервисе<em>Google Colab</em>;</li>
9 <ul><li><strong>Превратим</strong>таблицу Excel в <em>датафрейм</em>Pandas в бесплатном сервисе<em>Google Colab</em>;</li>
10 <li><strong>Изучим</strong>данные с помощью атрибутов и методов .head (), .describe (), .info ();</li>
10 <li><strong>Изучим</strong>данные с помощью атрибутов и методов .head (), .describe (), .info ();</li>
11 <li><strong>Преобразуем</strong>нечисловые данные в числа, понятные компьютеру.</li>
11 <li><strong>Преобразуем</strong>нечисловые данные в числа, понятные компьютеру.</li>
12 </ul><p>Pandas, без преувеличения, главная библиотека в Data Science: она предназначена для работы с данными в виде таблиц и рядов. Название Pandas происходит от сокращения panel data (англ. "панельные данные"). Это термин из социологии и эконометрики, означающий результаты серии наблюдений за одними и теми же объектами в определённый период.</p>
12 </ul><p>Pandas, без преувеличения, главная библиотека в Data Science: она предназначена для работы с данными в виде таблиц и рядов. Название Pandas происходит от сокращения panel data (англ. "панельные данные"). Это термин из социологии и эконометрики, означающий результаты серии наблюдений за одними и теми же объектами в определённый период.</p>
13 <p>Таблицу возьмём с одного из наших<a>вебинаров</a>. Она содержит тысячу строк учебных данных, в которых собраны сведения о туристах и их поездках:</p>
13 <p>Таблицу возьмём с одного из наших<a>вебинаров</a>. Она содержит тысячу строк учебных данных, в которых собраны сведения о туристах и их поездках:</p>
14 <ul><li>ежемесячный доход (salary);</li>
14 <ul><li>ежемесячный доход (salary);</li>
15 <li>родной город (city);</li>
15 <li>родной город (city);</li>
16 <li>возраст (age);</li>
16 <li>возраст (age);</li>
17 <li>предпочитаемый вид отпуска (vacation preference);</li>
17 <li>предпочитаемый вид отпуска (vacation preference);</li>
18 <li>предпочитаемый вид транспорта (transport preference);</li>
18 <li>предпочитаемый вид транспорта (transport preference);</li>
19 <li>количество членов семьи (family members);</li>
19 <li>количество членов семьи (family members);</li>
20 <li>и, наконец, город, который турист в итоге выбрал для поездки (target).</li>
20 <li>и, наконец, город, который турист в итоге выбрал для поездки (target).</li>
21 </ul><p>Работать будем в бесплатном сервисе Google Colab, он позволяет писать и запускать код для обработки данных прямо в браузере, без установки дополнительных программ. Прочитайте<a>нашу статью</a>, чтобы узнать, как начать его использовать.</p>
21 </ul><p>Работать будем в бесплатном сервисе Google Colab, он позволяет писать и запускать код для обработки данных прямо в браузере, без установки дополнительных программ. Прочитайте<a>нашу статью</a>, чтобы узнать, как начать его использовать.</p>
22 <p>Для того чтобы работать с Pandas, эту библиотеку сначала надо<em>импортировать -</em>то есть загрузить её в наш проект, чтобы воспользоваться её преимуществами. Пишем в новой ячейке код и запускаем его на выполнение с помощью кнопки "Запустить" слева от ячейки:</p>
22 <p>Для того чтобы работать с Pandas, эту библиотеку сначала надо<em>импортировать -</em>то есть загрузить её в наш проект, чтобы воспользоваться её преимуществами. Пишем в новой ячейке код и запускаем его на выполнение с помощью кнопки "Запустить" слева от ячейки:</p>
23 <p>Далее нам нужно прочитать файл с нашей Excel-таблицей и сохранить данные из него в отдельную переменную, с которой и будем работать.</p>
23 <p>Далее нам нужно прочитать файл с нашей Excel-таблицей и сохранить данные из него в отдельную переменную, с которой и будем работать.</p>
24 <p>Всегда оставляйте исходные данные нетронутыми.</p>
24 <p>Всегда оставляйте исходные данные нетронутыми.</p>
25 <p>Добавим новую ячейку с помощью кнопки "+ Код". Переменную назовём trips_df (trips - путешествия, а df - от dataframe).</p>
25 <p>Добавим новую ячейку с помощью кнопки "+ Код". Переменную назовём trips_df (trips - путешествия, а df - от dataframe).</p>
26 trips_df = pandas.read_excel('trips_data.xlsx', index_col=0)<p>В этой строчке мы записали в переменную trips_df таблицу, которую библиотека pandas c помощью метода read_excel () прочитала из файла trips_data.xlsx. Параметр index_col указали равным 0. Это означает, что индексной, то есть самой левой колонкой в таблице, где обычно идут номера строк, мы назначаем колонку с номером 0 из считываемого файла.</p>
26 trips_df = pandas.read_excel('trips_data.xlsx', index_col=0)<p>В этой строчке мы записали в переменную trips_df таблицу, которую библиотека pandas c помощью метода read_excel () прочитала из файла trips_data.xlsx. Параметр index_col указали равным 0. Это означает, что индексной, то есть самой левой колонкой в таблице, где обычно идут номера строк, мы назначаем колонку с номером 0 из считываемого файла.</p>
27 <p>В программировании и data science принято, что нумерация очерёдности идёт не с единицы, а с нуля.</p>
27 <p>В программировании и data science принято, что нумерация очерёдности идёт не с единицы, а с нуля.</p>
28 <p>Введём и запустим следующий код:</p>
28 <p>Введём и запустим следующий код:</p>
29 <p>Что мы сделали? Наша переменная trips_df имеет тип данных DataFrame. У каждого типа данных есть свои<em>методы</em>обращения с ними. Чтобы метод сработал, пишут его через точку от переменной, а в скобки методу передают подходящий параметр. В данном случае мы написали там 10 - и это означает, что метод .head () покажет нам первые десять строк, содержащиеся в таблице trips_df.</p>
29 <p>Что мы сделали? Наша переменная trips_df имеет тип данных DataFrame. У каждого типа данных есть свои<em>методы</em>обращения с ними. Чтобы метод сработал, пишут его через точку от переменной, а в скобки методу передают подходящий параметр. В данном случае мы написали там 10 - и это означает, что метод .head () покажет нам первые десять строк, содержащиеся в таблице trips_df.</p>
30 <p>Метод .head () выводит голову таблицы. Есть аналогичный метод .tail () - по-английски "хвост". Он тоже выводит строки, но уже с конца таблицы.</p>
30 <p>Метод .head () выводит голову таблицы. Есть аналогичный метод .tail () - по-английски "хвост". Он тоже выводит строки, но уже с конца таблицы.</p>
31 <p>Кроме методов, у датафреймов есть неотъемлемые свойства, которые называются<strong>атрибутами.</strong>В отличие от методов, они вызываются без скобок в конце.</p>
31 <p>Кроме методов, у датафреймов есть неотъемлемые свойства, которые называются<strong>атрибутами.</strong>В отличие от методов, они вызываются без скобок в конце.</p>
32 trips_df.salary # выведется только колонка salary<p>Как видим, можно посмотреть каждую колонку отдельно. И уже к этой колонке применить метод:</p>
32 trips_df.salary # выведется только колонка salary<p>Как видим, можно посмотреть каждую колонку отдельно. И уже к этой колонке применить метод:</p>
33 trips_df.salary.describe() # описание данных из одной колонки<p>Вывод будет таким:</p>
33 trips_df.salary.describe() # описание данных из одной колонки<p>Вывод будет таким:</p>
34 count 1000.000000 mean 111935.000000 std 54580.049073 min 0.000000 25% 68000.000000 50% 99000.000000 75% 161000.000000 max 250000.000000 Name: salary, dtype: float64<p>Метод .describe (), применённый к колонке salary таблицы trips_df, показал нам следующее.</p>
34 count 1000.000000 mean 111935.000000 std 54580.049073 min 0.000000 25% 68000.000000 50% 99000.000000 75% 161000.000000 max 250000.000000 Name: salary, dtype: float64<p>Метод .describe (), применённый к колонке salary таблицы trips_df, показал нам следующее.</p>
35 <p><strong>count</strong>- количество строк: 1 000.</p>
35 <p><strong>count</strong>- количество строк: 1 000.</p>
36 <p><strong>mean</strong>- средний доход составляет 111 935 рублей. Неплохо!</p>
36 <p><strong>mean</strong>- средний доход составляет 111 935 рублей. Неплохо!</p>
37 <p><strong>std</strong> - под этим сокращением скрыто так называемое стандартное (среднеквадратичное) отклонение, которое показывает величину разброса значений. В нашем случае оно довольно большое, почти 55 000 рублей. Это означает, что доходы у людей в таблице очень разные.</p>
37 <p><strong>std</strong> - под этим сокращением скрыто так называемое стандартное (среднеквадратичное) отклонение, которое показывает величину разброса значений. В нашем случае оно довольно большое, почти 55 000 рублей. Это означает, что доходы у людей в таблице очень разные.</p>
38 <p><strong>min</strong> - минимальное значение доходов из таблицы. Ноль значит, что есть как минимум один человек с нулевым доходом.</p>
38 <p><strong>min</strong> - минимальное значение доходов из таблицы. Ноль значит, что есть как минимум один человек с нулевым доходом.</p>
39 <p>В математической статистике процентиль, или перцентиль (ударение на последний слог), - это, если по-простому, пара чисел. Первое из них - процентная доля тех значений рассматриваемой величины, которые не превышают второго числа. Например, фраза "двадцать пятый процентиль доходов туристов составляет 68 000 рублей в месяц" означает, что у 25% наших туристов доход не превышает этой суммы. А у остальных, что очевидно, доход больше.</p>
39 <p>В математической статистике процентиль, или перцентиль (ударение на последний слог), - это, если по-простому, пара чисел. Первое из них - процентная доля тех значений рассматриваемой величины, которые не превышают второго числа. Например, фраза "двадцать пятый процентиль доходов туристов составляет 68 000 рублей в месяц" означает, что у 25% наших туристов доход не превышает этой суммы. А у остальных, что очевидно, доход больше.</p>
40 <p><strong>25%</strong>- вот он, тот самый двадцать пятый процентиль. Часто его ещё называют "нижний квартиль".</p>
40 <p><strong>25%</strong>- вот он, тот самый двадцать пятый процентиль. Часто его ещё называют "нижний квартиль".</p>
41 <p><strong>50%</strong>- пятидесятый процентиль, или медиана. В примере она равна 99000, и это значит, что одна половина людей из таблицы получает меньше этой суммы, а другая - больше.</p>
41 <p><strong>50%</strong>- пятидесятый процентиль, или медиана. В примере она равна 99000, и это значит, что одна половина людей из таблицы получает меньше этой суммы, а другая - больше.</p>
42 <p><strong>75%</strong>- семьдесят пятый процентиль, который также часто называют "верхний квартиль". Означает, что у 75% людей доход меньше 161 000 рублей, а у оставшихся 25% - больше.</p>
42 <p><strong>75%</strong>- семьдесят пятый процентиль, который также часто называют "верхний квартиль". Означает, что у 75% людей доход меньше 161 000 рублей, а у оставшихся 25% - больше.</p>
43 <p><strong>max</strong>- здесь всё понятно. В нашей таблице есть как минимум один человек с доходом 250 000 рублей в месяц - наверняка это какой-нибудь дата-сайентист: -).</p>
43 <p><strong>max</strong>- здесь всё понятно. В нашей таблице есть как минимум один человек с доходом 250 000 рублей в месяц - наверняка это какой-нибудь дата-сайентист: -).</p>
44 <p><strong>Name: salary, dtype: float64</strong>- служебная информация: название колонки и тип данных в ней.</p>
44 <p><strong>Name: salary, dtype: float64</strong>- служебная информация: название колонки и тип данных в ней.</p>
45 <p>Методы .head (), .tail (), .describe (), .describe (include=’all’), .info (), а также атрибуты .dtypes, .columns - это первые команды, которые нужны для знакомства с новыми данными. Они помогают понять, что скрыто за цифрами и строками, и, как говорят, поймать инсайт.</p>
45 <p>Методы .head (), .tail (), .describe (), .describe (include=’all’), .info (), а также атрибуты .dtypes, .columns - это первые команды, которые нужны для знакомства с новыми данными. Они помогают понять, что скрыто за цифрами и строками, и, как говорят, поймать инсайт.</p>
46 <p>Колонка salary очень удобна с точки зрения машинного обучения, потому что содержит числа и ничего, кроме чисел. Но кроме неё в нашей таблице есть и непонятные для машины колонки с городами, видами отпуска, транспортными предпочтениями и целевым городом - всё это так называемые<strong>категориальные признаки.</strong></p>
46 <p>Колонка salary очень удобна с точки зрения машинного обучения, потому что содержит числа и ничего, кроме чисел. Но кроме неё в нашей таблице есть и непонятные для машины колонки с городами, видами отпуска, транспортными предпочтениями и целевым городом - всё это так называемые<strong>категориальные признаки.</strong></p>
47 <p>Эти признаки, состоящие из слов, нам надо превратить в числовые. Поэтому каждое значение признака мы преобразуем в отдельную колонку, и каждую получившуюся колонку добавим к исходной таблице.</p>
47 <p>Эти признаки, состоящие из слов, нам надо превратить в числовые. Поэтому каждое значение признака мы преобразуем в отдельную колонку, и каждую получившуюся колонку добавим к исходной таблице.</p>
48 <p>Так, в колонке city у нас имеется 11 городов. Значит, к исходной таблице добавится 11 колонок с их названиями. Если какой-то турист, например, был из Ярославля, то в одной из новых колонок city_Ярославль у него будет стоять единица, а в других десяти "городовых" колонках - нули.</p>
48 <p>Так, в колонке city у нас имеется 11 городов. Значит, к исходной таблице добавится 11 колонок с их названиями. Если какой-то турист, например, был из Ярославля, то в одной из новых колонок city_Ярославль у него будет стоять единица, а в других десяти "городовых" колонках - нули.</p>
49 <p>Процесс превращения слов в числа называется<strong>кодированием категориальных признаков.</strong>Способ, который мы применим, называется<strong>прямым кодированием,</strong>или, по-английски,<strong>one-hot encoding</strong>. Есть и другие, более изощрённые способы преобразования нечисловых колонок.</p>
49 <p>Процесс превращения слов в числа называется<strong>кодированием категориальных признаков.</strong>Способ, который мы применим, называется<strong>прямым кодированием,</strong>или, по-английски,<strong>one-hot encoding</strong>. Есть и другие, более изощрённые способы преобразования нечисловых колонок.</p>
50 <p>Точно так же мы поступим с колонками предпочтений видов отпуска и транспорта: если какому-то туристу больше нравится поезд, во вновь созданной колонке transport_preference_Поезд будет единица, а в других - нули.</p>
50 <p>Точно так же мы поступим с колонками предпочтений видов отпуска и транспорта: если какому-то туристу больше нравится поезд, во вновь созданной колонке transport_preference_Поезд будет единица, а в других - нули.</p>
51 <p>Для прямого кодирования в Pandas имеется функция get_dummies ():</p>
51 <p>Для прямого кодирования в Pandas имеется функция get_dummies ():</p>
52 trips_df_2 = pandas.get_dummies(trips_df, columns=['city', 'vacation_preference', 'transport_preference'])<p>Что тут произошло? В новую переменную trips_df_2 с помощью Pandas-функции .get_dummies () мы положили содержимое нашей старой переменной trips_df, но при этом значения колонок 'city', 'vacation_preference', 'transport_preference' превратили в новые колонки.</p>
52 trips_df_2 = pandas.get_dummies(trips_df, columns=['city', 'vacation_preference', 'transport_preference'])<p>Что тут произошло? В новую переменную trips_df_2 с помощью Pandas-функции .get_dummies () мы положили содержимое нашей старой переменной trips_df, но при этом значения колонок 'city', 'vacation_preference', 'transport_preference' превратили в новые колонки.</p>
53 <p>В итоге у нас получилась таблица из 24 колонок. Выведем список только из их названий с помощью атрибута .columns:</p>
53 <p>В итоге у нас получилась таблица из 24 колонок. Выведем список только из их названий с помощью атрибута .columns:</p>
54 <p>Видим, что старые колонки дохода, возраста и количества членов семьи сохранились, а вместо категориальных признаков появилось много новых, числовых.</p>
54 <p>Видим, что старые колонки дохода, возраста и количества членов семьи сохранились, а вместо категориальных признаков появилось много новых, числовых.</p>
55 <p>С помощью библиотеки Pandas мы превратили сырую таблицу Excel, содержащую категориальные признаки, в <em>датафрейм</em>с числовыми данными, понятный для модели машинного обучения.</p>
55 <p>С помощью библиотеки Pandas мы превратили сырую таблицу Excel, содержащую категориальные признаки, в <em>датафрейм</em>с числовыми данными, понятный для модели машинного обучения.</p>
56 <p>Исходная таблица с данными находится по <a>этой ссылке</a>, а ноутбук с кодом можно просмотреть<a>здесь</a>. Чтобы скопировать его себе на диск, воспользуйтесь главным меню Colab: "Файл → Создать копию на Диске".</p>
56 <p>Исходная таблица с данными находится по <a>этой ссылке</a>, а ноутбук с кодом можно просмотреть<a>здесь</a>. Чтобы скопировать его себе на диск, воспользуйтесь главным меню Colab: "Файл → Создать копию на Диске".</p>
57 <a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>
57 <a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>