Архив метки: pandas

Дашборды в новых условиях

Мой курс Анализ данных на платформе Яндекс.практикум добрался до финального проекта.

Ура!
В списке задач дипломной работы есть построение дашборда в программе tableau.

Что такое dashboard? В прямом переводе – это приборная панель. В современном мире это ещё и панель показателей.

Вот пример на tableau:

https://clck.ru/hH2bd

Но недавно, вдруг, стали появляться в этой программе сообщения о недоступности сервиса в нашем регионе.

Какие есть альтернативы?

Гугл

https://datastudio.google.com/s/nwXIk03nfBU

Яндекс

https://datalens.yandex/tivsy1aesdgal

Самописный сайт на PlotLy

http://dashboards.eddydewrussia.ru/
Статья понравилась?

Как переименовать подписи осей к графику Python Plot

Часто в прикладных задачах машинного обучения, данные из понятных человеку словесных, переводятся намеренно в более понятный для компьютера числовой формат.

И тогда простые значения типа “женат”, “в разводе”, “холост”, превращаются в безликие “1”, “2”, “3”.

Для задач обучения моделей машинного интеллекта и последующего прогнозирования это – как раз то, что нужно.

Но вот после получение результатов, их надо представить заказчикам. А заказчики – это обычные люди. Им намного органичнее видеть значения в первоначальном, символьном, виде.

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

...
ax = plt.subplot(1,3,j)
ax.set_xticks([0, 1], labels=['остался', 'ушел'])
...
plt.show()
Статья понравилась?

Как вывести на печать матрицу графиков Python

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

Вывод графиков в сетке я уже не один раз делал.

На в этом задаче машинного обучения это особенно пригодилось.

Вообще, задача категоризации относится к задачам машинного обучения “без учителя”.

Это означает то ,что мы заранее не знаем, какой получится результат.

Сколько и какие категории в выборке данных сформируются.

# импорт библиотек и общие настройки
import pandas as pd
import seaborn as sns
import math
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
import itertools

# отключаем некритичные уведомления
import warnings
warnings.filterwarnings('ignore')
# показывать до 40ка колонок
pd.set_option('display.max.columns', 40)
# установка формата вывода на дисплей численных значений
pd.options.display.float_format = '{:,.2f}'.format
# чтение данных
try:
    # Yandex path
    data = pd.read_csv('/datasets/gym_churn.csv')
except:
        # local path !! в кавычках укажите свой путь к файлу !!!
        data = pd.read_csv(r"C:\Users\eddyd\Downloads\Praktikum\Datas_Eleventh_Project\gym_churn.csv")

# убираем колонку с признаком **оттока**
data_clusters = data.drop(columns=['Churn'])
# создаём объект класса scaler (нормализатор)
scaler = StandardScaler()
# обучаем нормализатор и преобразуем набор данных
x_sc = scaler.fit_transform(data_clusters)
# задаём число кластеров, равное 5, и фиксируем значение random_state для воспроизводимости результата
km = KMeans(n_clusters=5, random_state=0) 
labels = km.fit_predict(x_sc) # применяем алгоритм к данным и формируем вектор кластеров
# сохраняем метки кластера в поле нашего датасета
data_clusters['cluster_km'] = labels
# setup size plot
sns.set(rc = {'figure.figsize':(20,5)})
plt.rcParams.update({'font.size': 12})
# список колонок
col_pairs = list(itertools.combinations(data_clusters.drop('cluster_km', axis=1).columns, 2))
# количество графиков
qty_plots = len(col_pairs)
# получим количество строк в сетке, разделив все на 4 c округлением ВВЕРХ
qty_str = math.ceil(qty_plots / 4 )
# строим qty_plots графиков по 4 в ряд 
col=0 # порядковый номер колонки (для графика)
for i in range(qty_str): # строки в матрице графиков
    # проверим, не достигли ли мы окончания списка колонок
    # если col  НЕ больше qty_plots то идём в цикл
    # если больше то выходим
    if col <= (qty_plots-1):
        for j in [1,2, 3, 4]:
             # если col  НЕ больше qty_plots то идём в цикл
             # если больше то выходим
            if col <= (qty_plots-1):
                # определяем колонку
                pair = col_pairs[col]
           
                # первый график в строке
                plt.subplot(1,4,j)
                sns.scatterplot(
                    data_clusters[pair[0]], data_clusters[pair[1]], hue=data_clusters['cluster_km'], palette='Paired'
                );
                plt.title('{} vs {}'.format(pair[0], pair[1]))
                #переход к следующей платформе для следующего графика
                col += 1
                # закрываем цикл построения строки
      
    plt.show()
        # переход к следующей колонке для следующего графика

В результате выполнения этой программе на языке Python получается примерно вот это:

Сетка графиков Python
Статья понравилась?

Скоро скоро уж финал…

Сегодня закончил последнюю теоретическую часть в программе обучения Анализ данных на Яндекс.Практикуме.

Эта часть далась мне нелегко. Было очень много непонятных слов и действий.

Но, зато, очень интересно. Ведь это были Начала машинного обучения.

Нам рассказали и на практике показали, как устроено обучение машинного моделирования на основе накопленных данных для прогнозирования результатов будущих периодов.

Например

Есть фитнес-центр. Администраторы этого предприятия ведут учёт того, как клиенты его посещают.

  • Как часто приходят
  • Посещают ли дополнительные группы
  • Покупают ли индивидуальные консультации
  • Живут или работают рядом
  • Когда заканчивается срок действия абонемента
  • И … когда перестали пользоваться услугами компании.

Аналитик данных:

  • проводит подготовку собранной статистики методами pandas на python
  • выбирает методы прогнозирования из библиотеки sklearn
  • обучает компьютер методом scaler.fit
  • выбирает самый точный алгоритм прогнозирования по результату сравнения параметров оценки точности предсказания из sklearn.metrics
  • помогает настроить систему, которая на основе новых данных за месяц, строит прогноз оттока

Администрация:

  • На основе полученного прогноза активно стимулирует клиентов из рисковой группы. Чтобы они не бросали занятия )))

Так решаем главную задачу:

Удержание клиентов

Photo by Clay Banks on Unsplash
Статья понравилась?

Информация про датафрейм

Как вывести полную информацию про данные в таблице

import pandas as pd
dash_visits = pd.read_csv('https://eddydewrussia.ru/download/dash_visits/?wpdmdl=5230&masterkey=nLdyJ3VbW1PZ2e_TA4xbcsuZHTYHaoPLnQHpPVvTMozIw3dkLuxX5-CJKOi30tWiqjk_HX_E17pTlXEe1qE2IcJXZM099Ooh0bYFK4HBug4')
# функция для вывода информации о данных
def dataset_info(data):
    print('\033[1m' + 'Строки - полные дубликаты:' + '\033[0m')
    display(data[data.duplicated(keep=False)])
    print('\033[1m' + 'Названия колонок:' + '\033[0m')
    print(data.columns)
    print()
    print('\033[1m' + 'Первые строки:' + '\033[0m')
    display(data.head(3))
    print('\033[1m' + 'Информация о датафрэйм:' + '\033[0m')
    display(data.info())
    print('\033[1m' + "describe" + '\033[0m')
    display(data.describe())
    print('\033[1m' + "Количества и доли отсутствующих значений" + '\033[0m')
    display(pd.concat([data.isna().sum(), data.isna().mean()], axis=1)\
    .rename(columns={0:'кол-во', 1:'доля'})\
    .style.format({'кол-во':'{:.0f}', 'доля':'{:.2%}'}))
# применение функции
dataset_info(dash_visits)

Результат

Строки - полные дубликаты:
Unnamed: 0record_iditem_topicsource_topicage_segmentdtvisits
Названия колонок:
Index(['Unnamed: 0', 'record_id', 'item_topic', 'source_topic', 'age_segment',
       'dt', 'visits'],
      dtype='object')
Первые строки:
Unnamed: 0record_iditem_topicsource_topicage_segmentdtvisits
001040597ДеньгиАвто18-252019-09-24 18:32:003
111040598ДеньгиАвто18-252019-09-24 18:35:001
221040599ДеньгиАвто18-252019-09-24 18:54:004
Информация о датафрэйм:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 30745 entries, 0 to 30744
Data columns (total 7 columns):
 #   Column        Non-Null Count  Dtype 
---  ------        --------------  ----- 
 0   Unnamed: 0    30745 non-null  int64 
 1   record_id     30745 non-null  int64 
 2   item_topic    30745 non-null  object
 3   source_topic  30745 non-null  object
 4   age_segment   30745 non-null  object
 5   dt            30745 non-null  object
 6   visits        30745 non-null  int64 
dtypes: int64(3), object(4)
memory usage: 1.6+ MB
None
describe
Unnamed: 0record_idvisits
count30745.000003.074500e+0430745.000000
mean15372.000001.055969e+0610.089673
std8875.461358.875461e+0319.727601
min0.000001.040597e+061.000000
25%7686.000001.048283e+061.000000
50%15372.000001.055969e+063.000000
75%23058.000001.063655e+0610.000000
max30744.000001.071341e+06371.000000
Количества и доли отсутствующих значений
 кол-водоля
Unnamed: 000.00%
record_id00.00%
item_topic00.00%
source_topic00.00%
age_segment00.00%
dt00.00%
visits00.00%

pandas python dataframe

Статья понравилась?