Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Форматирование таблиц в Pandas. Учебно-методическое пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
21
Рис. 2.2. Таблица названий цветов
Цвета, представленные на рис. 2.1и 2.2, поддерживаются и при
выделении элементов таблиц. При использовании цветов для выделе­ния элементов таблицы сокращенные названия не используются: вме­сто r надо писать red и т. д.
Цвет можно задавать и с помощью кодов. Шестнадцатеричный
код цвета состоит из шести символов. Каждая пара значений представ­ляет собой описание одного из компонентов цвета. Это, соответ­ственно, компоненты Red (красный), Green (зеленый) и Blue (Синий). Например, значение #ffffff представляет белый цвет. Если пара значе­ний в описании одного компонента цвета идентична, одно из таких зна­чений можно убрать. Так, в примере с белым цветом его можно было задать так: #FFF. Аналогично цвет #AABBCC идентичен #ABC. При форматировании таблиц этот цвет задается как color='#ABC'.
При использовании цветовой модели RGB (Red, Green, Blue –
красный, зеленый, синий) цвета представляют тремя значениями, опи­сывающими цветовые каналы – соответственно красный, зеленый и си­ний канал. Каждое из значений можно представить числом, находя­щимся в диапазоне от 0 до 255, или процентным значением – от 0 до 100 %. В этой модели черный цвет задают так: если три значения равны 0, то получится черный цвет. А если все три цветовых компонента уста­новлены в значение 255, то получится белый. То же самое справедливо и при использовании процентных значений. Примеры задания цвета: color='rgb(0,0,0)', color='rgb(10%,50%,50%)'. Проценты берутся от мак­симального значения. Последняя запись практически эквивалентна
color='rgb(26,128,128)'.
22
При описании цветов с использованием цветовой модели RGB
можно, помимо цветовых компонентов, указывать и значение, соответ­ствующее альфа-каналу, которое позволяет управлять непрозрачностью цвета. Для этого используют функцию rgba(). Параметр непрозрачно­сти – число, лежащее в интервале [0, 1]. Запись color='rgba(50,0,0,1)' эк­вивалентна заданию цвета color='rgb(50,0,0)'. Возможны и такие вари­анты: color= 'rgb(0 250 0)' или color= 'rgb(0 0 0 / .3)'. В последнем случае задана непрозрачность, которую можно задать и в процентах:
color= 'rgb(0 0 0 / 30%)'.
Таблицу HTML-цветов вместе с их названиями, HEX- и RGB-ко-
дами можно найти, например, на сайте2. Имена цветов в HTML нечув­ствительны к регистру и могут записываться в любой форме. Следует отметить, что при имеющихся 147 различных ключевых словах с назва­ниями цветов HTML не все цвета в этом списке уникальны. Некоторые имена обозначают один и тот же цвет. Так, например, и grey, и gray обо­значают 50-процентный серый цвет #808080, а magenta – это лишь си­ноним HTML цвета fuchsia и ссылается на шестнадцатеричный код цвета #FF00FF.
Цветовое пространство HSL – это цветовая модель, где цвет созда-
ется с помощью трех составляющих – тона, насыщенности и яркости: hue – цветовой тон (оттенок), saturation – насыщенность, a lightness – яр­кость. Этим оно отличается от цветового пространства RGB, где любой цвет получается при смешивании трех цветов: зеленого, красного или синего. Обе модели работают только в виртуальных пространствах, по­скольку фактически нельзя получить белый цвет, если смешать на бу­маге зеленую, красную и синюю краски. Вживую – нет, но на компью­тере – да. То же касается и модели HSL.
Hue отвечает за цвет, с которым пользователь будет работать.
За отправную точку разработчики модели предлагают красный, пурпур- ный, синий, лазурный, зеленый, желтый цвета. В конвертерах Capture One Lightroom и Adobe Camera RAW к этому списку добавлен оранжевый.
С помощью параметра saturation можно сделать цвет сочным или
приглушенным. Его используют, чтобы сделать цвет более тусклым, менее заметным, но не менять при этом оттенок. Максимальная насы­щенность – цвет сочный, неоновый, а минимальная – цвет серый. Если
2
HTML ЦВЕТА: сайт. URL: https://colorscheme.ru/html-colors.html
23
убрать насыщенность из всех цветов на картинке, получится черно-бе­лая фотография.
Lightness – параметр, отвечающий за яркость, за то, насколько
светлым является цвет. Если повысить значение lightness до максимума, то цвет станет чисто-белым, а если уменьшить – то черным: 0 % осве­щенности – это всегда черный цвет, 100 % – всегда белый. Если нужен яркий, живой цвет, параметр lightness лучше задать равным 50 %, ровно между черным и белым.
В цветовой модели HSL два последних параметра – saturation
и lightness – задаются в процентах. Оттенок – это градус цветового круга. Параметр принимает значения от 0 до 360. При этом 0 (или 360) соответствует красному цвету, 120 – зеленому, 240 – синему. Насыщен­ность, или интенсивность цвета – это процентное значение от 0 до 100 %. Причем 100 % гарантирует полноцветное изображение, без от­тенков серого, 50 % – это 50 % серого. При значении параметра 0 % цвет полностью серый; он становится невидимым. Яркость цвета меня­ется от 0 до 100 %: 0 % означает отсутствие яркости (темный), 50 % – 50 % яркости, а 100 % – полную яркость. Пример задания цвета в мо­дели HSL: color='hsl(170, 50%, 50%)'.
LCH – это цветовое пространство, обладающее некоторыми пре-
имуществами в сравнении с цветовыми пространствами RGB/HSL, с которыми обычно работают в CSS. LCH нацелен на то, чтобы воспри­ниматься всеми людьми одинаково. Два цвета с равной «освещенно­стью» должны ощущаться одинаково светлыми. В HSL насыщенность меняется от 0 % (нет насыщенности) до 100 % (полностью насыщен­ный). А вот LCH не привязан к конкретному цветовому пространству, и не известно, где верхний предел насыщенности, так как он постоянно меняется. С появлением новых мониторов пользователь сможет видеть новые цвета в таких пространствах. LCH будет автоматически способен показывать такие цвета с увеличением значения интенсивности. Значе­ние насыщенности может значительно превышать значение 100 %, т. е. возможен, например, такой вариант: background: lch(50% 500 20).
В цветовой модели LCH параметры задаются в процентах. Значе-
ния первого обычно задают в пределах от 0 до 360 %, остальных – от 0 до 100 %, хотя параметры модели могут и выходить за указанные пре­делы. При использовании модели можно задавать коэффициент непро­зрачности. Примеры использования: color='lch(53 90 0)' или
color='lch(53% 90 0)', color='lch(53% 110% 190 / .7)'.
24
Цветовая модель OKLCH (Lightness, Chroma, Hue) – новый спо-
соб определять цвета в CSS, обладает многими преимуществами:
1. В отличие от rgb(), OKLCH легко интерпретировать. По задан-
ным значениям параметров цветовой модели oklch() можно без труда определить записанный цвет. По удобству он схож с форматом HSL, но в то же время HSL не передает яркости так, как ее видит человек.
2. OKLCH() лучше подходит для изменения цвета, чем hsl().
Он правильно передает яркость – она не меняется при смене оттенка.
3. Многие современные электронные устройства (например,
от Apple) поддерживают больше цветов, чем старые мониторы sRGB. OKLCH позволяет использовать эти цвета.
В OKLCH(LCH) или OKLCH(LCH/a) яркость (0–100 %) переда-
ется так, как ее видит глаз, в отличие от яркости в HSL(); C – насыщен­ность, варьируется от серого до наиболее интенсивного оттенка; H – оттенок, угол поворота на цветовом круге (0–360); a – непрозрачность
(0–1 или 0%–100%). Примеры использования: 'oklch(80% 20% 180)', 'oklch(53% 70% 280/.6)', color= 'oklch(80% .2 100)'.
Однако при работе с OKLCH следует помнить, что при задании
значений L, C и H есть риск получить цвет, выходящий за пределы воз­можностей экрана.
2 . 2 . М е т о д h i g h l i g h t _ n u l l
С помощью метода highlight_null можно выделить желаемым
цветом ячейки таблицы, в которых нет данных. Синтаксис метода:
Styler.highlight_null(color='red', subset=None, props=None)
Параметры метода:
color – строка. Цвет фона, используемый для выделения, по умол-
чанию красный;
subset – метка, объект array-like или IndexSlice. Необязательный па-
раметр, предназначенный для выбора определенных строк и столбцов;
props – строка. Значение по умолчанию – None. Параметр, зада-
ющий свойства CSS, используемые для выделения. Если параметр
25
props задан, параметр color не используется. Значение параметра props по умолчанию – None.
Пример. Создать датафрейм с одним отсутствующим значением
и закрасить ячейку, содержащую этот элемент. Код программы:
import pandas as pd import numpy as np df=pd.DataFrame({'A':np.linspace(2,10000,4)}) df=pd.concat([df,pd.DataFrame(np.random.randn(4,4), columns= list('BCDE'))], axis=1) df.iloc[0,3]=np.nan df.style.highlight_null(color='pink')
Результат:
В коде был использован лишь один параметр для изменения цвета эле­ментов nan с красного (по умолчанию) на розовый. Можно закрасить отсутствующие значения только в заданных строках и/или столбцах, использовав параметр subset. Применим некоторые свойства к ячейкам, содержащим пропущенные значения. Например, сделаем цвет текста белым и выровняем текст (nan) по центру ячейки, саму ячейку закрасим фиолетовым цветом, уменьшив непрозрачность:
df.style.highlight_null(props='color:white;\ opacity: 90%; background: purple; text-align: center')
Результат:
26
2.3 . М е т о д ы b a c k g r o u n d _ g r a d i e n t и t e x t _ g r a d i e n t
С помощью метода background_gradient можно создавать тепло-
вые карты.
Синтаксис метода:
Styler.background_gradient(cmap='PuBu', low=0, high=0, axis=0, sub­set=None, text_color_threshold=0.408, vmin=None, vmax=None, gmap=None)
Параметры метода:
cmap – строка или цветовая карта. Цвет фона определяется в со-
ответствии с данными в каждом столбце, строке, фрейме данных или по заданной карте градиента;
low, high – параметры, позволяющие при их задании при преоб-
разовании цветов не использовать весь диапазон палитры. Обычно зна­чения выбирают из интервала [0, 1], значения по умолчанию – 0;
axis – ось. Указывает область применения: к каждому столбцу
(axis=0 или 'index'), к каждой строке (axis=1 или 'columns'), ко всему да­тафрейму сразу (axis=None);
subset – метка, объект array-like или IndexSlice. Необязательный па-
раметр, предназначенный для выбора определенных строк и столбцов;
text_color_threshold – число. Порог яркости для определения
цвета текста в интервале [0, 1]. Облегчает видимость текста при различ­ных цветах фона. Весь текст в ячейках темный, если значение равно 0, и светлый – если значение равно 1. При промежуточных значениях между 0 и 1 цвет текста в ячейке подбирается в зависимости от цвета ячейки. Значение по умолчанию – 0.408;
vmin, vmax – число типа float. Минимальное (максимальное) зна-
чение данных соответствует минимальному (максимальному) значе­нию цветовой карты. Если не указано иное, будет использоваться ми­нимальное значение данных (при отсутствии параметра gmap);
gmap – данные типа array-like. Карта градиента для определения
цветов фона. Если параметр не указан, то будут использоваться базовые данные из строк, столбцов или фрейма данных. Если значение задано в виде ndarray или списка, оно должно иметь форму, идентичную форме базовых данных, с учетом оси и параметра subset. Если значение задано с помощью элементов DataFrame или Series, они должны иметь одинаковые метки индексов и столбцов с учетом оси и параметра subset. По умолчанию используется палитра, имеющая голубой оттенок, а ячейки с большими значениями закрашиваются более темными цветами.
27
Код программы с примером применения метода background_gra-
dient без параметров:
import pandas as pd; import numpy as np df=pd.DataFrame(np.random.randn(4,4), columns= list('BCDE')) df.iloc[0,3]=np.nan df.style.background_gradient()
Результат:
Не обязательно раскрашивать весь набор данных – параметр
subset позволяет ограничить список столбцов для закраски, например, так: df.style.background_gradient(subset=['B', "C"]).
Применим к столбцу С карту градиента, заданную с помощью па-
раметра gmap:
df.style.background_gradient(subset=["C"], gmap=[0, 4, 7, 1])
В этом случае самыми темными цветами будут выделены ячейки вто­рой и первой строк столбца С, а самыми светлыми – ячейки нулевой и третьей строк. Значения столбца С при выборе цвета в этом случае не играют роли. Результат работы кода:
Цветовую карту, установленную по умолчанию, можно изменить:
s = df.style.background_gradient(cmap='RdYlGn_r'); s Результат:
28
Применим к столбцу С цветовую карту, заданную парамет-
ром cmap. Правила закрашивания ячеек этого столбца зададим парамет- ром gmap. Код программы:
s = df.style.background_gradient(subset=["C"], gmap=[4,4,8,12],cmap='Spectral') s
Выполнив код, получили:
В силу одинаковых значений в списке gmap данные первых двух
строк закрасились одним цветом.
Так можно применить метод background_gradient к одной строке:
df.style.background_gradient(subset=(1,), axis=1)
Результат:
Метод background_gradient принимает аргументы low и high,
например: df.style.background_gradient(cmap='RdYlGn_r', low=.1, high=.8). В этом случае при преобразовании цветов весь диапазон палитры не при­меняется. Это может помочь в том случае, если при использовании всей палитры текст становится трудночитаемым.
Можно применить к датафрейму оба рассмотренных метода –
background_gradient и highlight_null, ограничив в первом случае диапа­зон палитры:
df.style.background_gradient(cmap='bwr_r', low=.4, high=0.9) \ .highlight_null('purple')
Результат:
29
Приведем более сложный пример использования функций стили-
зации таблицы для преобразования исходного датафрейма. Создадим датафрейм с данными о погоде в двух городах Китая. Код программы:
import pandas as pd day_weather_df = pd.DataFrame([[11, 6],[19, 13],[25, 19], [29, 23], [30, 25]], index=pd.date_range(start="2022-03-01", freq='M', periods=5), columns=["Пекин", "Гуанчжоу"]) display(day_weather_df)
Выполнив код, получили таблицу:
Создадим две функции. Первая из них (temperature_condition) бу-
дет заменять числовые значения температуры вербальными. С помо­щью второй сформируем объект Styler, в котором создадим заголовок таблицы, изменим стиль вывода даты и с помощью выбранной цвето­вой шкалы в зависимости от температуры каждую ячейку таблицы за­красим своим цветом. Код создания описанных функций:
import pandas as pd day_weather_df = pd.DataFrame([[11, 6],[19, 13],[25, 19], [29, 23], [30, 25]], index=pd.date_range(start="2022-03-01", freq='M', periods=5), columns=["Пекин", "Гуанчжоу"]) display(day_weather_df) def temperature_condition(v): if v < 15: return "Холодно" elif v < 20: return "Прохладно" elif v < 28: return "Тепло" return "Жарко"
30
def make_pretty(styler): styler.set_caption("Температурные условия") styler.format(temperature_condition) styler.format_index(lambda v: v.strftime("%B")) styler.background_gradient(axis=None, vmin=0, vmax=35, cmap="YlOrRd") return styler Вывод получившейся таблицы осуществим методом style.pipe: day_weather_df.style.pipe(make_pretty)
Результат выполнения объединенного кода:
В качестве цветовой карты можно выбрать одно из значений:
'Accent', 'Accent_r', 'Blues', 'Blues_r', 'BrBG', 'BrBG_r', 'BuGn', 'BuGn_r', 'BuPu', 'BuPu_r', 'CMRmap', 'CMRmap_r', 'Dark2', 'Dark2_r', 'GnBu', 'GnBu_r', 'Greens', 'Greens_r', 'Greys', 'Greys_r', 'OrRd', 'OrRd_r', 'Oranges', 'Oranges_r', 'PRGn', 'PRGn_r', 'Paired', 'Paired_r', 'Pastel1', 'Pastel1_r', 'Pastel2', 'Pastel2_r', 'PiYG', 'PiYG_r', 'PuBu', 'PuBuGn', 'PuBuGn_r', 'PuBu_r', 'PuOr', 'PuOr_r', 'PuRd', 'PuRd_r', 'Purples', 'Purples_r', 'RdBu', 'RdBu_r', 'RdGy', 'RdGy_r', 'RdPu', 'RdPu_r', 'RdYlBu', 'RdYlBu_r', 'RdYlGn', 'RdYlGn_r', 'Reds', 'Reds_r', 'Set1', 'Set1_r', 'Set2', 'Set2_r', 'Set3', 'Set3_r', 'Spectral', 'Spectral_r', 'Wistia', 'Wistia_r', 'YlGn', 'YlGnBu', 'YlGnBu_r', 'YlGn_r', 'YlOrBr', 'YlOrBr_r', 'YlOrRd', 'YlOrRd_r', 'afmhot', 'afmhot_r', 'autumn', 'autumn_r', 'binary', 'binary_r', 'bone', 'bone_r', 'brg', 'brg_r', 'bwr', 'bwr_r', 'cividis', 'cividis_r', 'cool', 'cool_r', 'coolwarm', 'coolwarm_r', 'copper', 'copper_r', 'cubehelix', 'cubehelix_r', 'flag', 'flag_r', 'gist_earth', 'gist_earth_r', 'gist_gray', 'gist_gray_r', 'gist_heat', 'gist_heat_r', 'gist_ncar', 'gist_ncar_r', 'gist_rainbow', 'gist_rainbow_r', 'gist_stern', 'gist_stern_r', 'gist_yarg', 'gist_yarg_r', 'gnuplot', 'gnuplot2', 'gnuplot2_r',
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]