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

Двухэтажные название колонок

После комплексной группировки таблицы pandas Pynhon dataframe командой groupby напрмер применив такую строку

# сколько заказов у каждого покупателя
agg_func_count = {'order_id': ['count'],
                    'sum_product': [ 'sum']}
count_orders_customer = df.groupby('customer_id')['order_id', 'sum_product'].agg(agg_func_count).reset_index()

Получаем двухэтажное название колонок в итоговой таблице.

Ещё они называются иерархические индексы

Пример dataframe с двухэтажными колонками

Выглядит это очень красиво. Но при попытке обратиться к колонке по названию, возникает сложность.

Что же делать?

Трансформировать иерархические названия столбцов pandas

Вот непонятная, но эффективная строка для этого

count_orders_customer.columns = ['_'.join(col).rstrip('_') for col in count_orders_customer.columns.values]

И получим результат сглаживания

Не земетили подвох?
Статья понравилась?

Как прочесть csv файл с Яндекс Диска в pandas

Яндекс.Диск официально не предоставляет сервис прямого считывания файлов по прямой ссылке.

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

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

Самый популярный в РФ ресурс для хранения файлов сейчас – это Яндекс.Диск.

Вот пример кода на Python для чтения файла:

import pandas as pd 
import requests 
from urllib.parse import urlencode 
 
# используем api 
base_url = 'https://cloud-api.yandex.net/v1/disk/public/resources/download?' 
public_key = 'https://disk.yandex.ru/d/c_JZSSJSnqWYzA' 
 
# получаем url 
final_url = base_url + urlencode(dict(public_key=public_key)) 
response = requests.get(final_url) 
download_url = response.json()['href'] 
 
# загружаем файл в df 
download_response = requests.get(download_url) 
df = pd.read_csv(download_url, sep='\t') 

Конечно же, может потребоваться подбор кодовой страницы файла и разделителя.

Ну это как для любого файла csv .

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

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

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

Ура!
В списке задач дипломной работы есть построение дашборда в программе 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
Статья понравилась?