Оформете вашата рамка с данни, за да я направите по-привлекателна и информативна

Pandas е много ефективен при анализ на данни и задачи за манипулиране. Той предоставя множество функции и методи за безпроблемна работа с таблични данни. Въпреки това, всичко, което виждаме, са обикновени числа в таблична форма.

Ами ако интегрираме няколко визуални компонента в рамки с данни на Pandas? Мисля, че това ги прави да изглеждат по-привлекателни и информативни в много случаи.

Можем да постигнем това, като използваме свойството Style на рамки с данни на pandas. Свойството Style връща обект styler, който предоставя много опции за форматиране и показване на кадри с данни. Обектът на styler е основно рамка с данни с известен стил. В тази статия ще прегледаме 10 примера, за да овладеем как работи стилизирането.

Ще използваме „набор от данни“ за оттегляне на клиенти, който е наличен в Kaggle, а също така ще създадем някои примерни кадри с данни.

churn = pd.read_csv(
"/home/soner/Downloads/datasets/BankChurners.csv",
usecols=np.arange(1,10))
churn.head()

Екранната снимка по-горе показва само част от рамката с данни. Наборът от данни съдържа подходяща информация за клиентите на банката и дали те са се отказали (т.е. напуснали банката).

Пример 1

Да разгледаме случай, в който искаме да видим средната възраст на клиента за всяка категория в колоната за ниво на образование. Тази задача може да се изпълни с помощта на групата по функция.

Можем да добавим някои стилове за връщането на група по функция. Например, можем да подчертаем минималната стойност.

churn[['Education_Level','Months_on_book']].\
groupby(['Education_Level'], as_index=False).mean().\
style.highlight_min(color='red')

Ние прилагаме функциите заедно със свойството style на Pandas. Основният синтаксис е както следва:

pandas.DataFrame.style

В този пример сме използвали една от вградените функции за стилизиране, която е highlight_min. Има и други вградени функции, както ще видим в следващите примери.

Пример 2

Можем да приложим множество функции за стилизиране, като ги свържем заедно. Например, възможно е да маркирате както минимални, така и максимални стойности.

churn[['Education_Level','Customer_Age']].\
groupby(['Education_Level'], as_index=False).mean().\
style.highlight_min(color='red').highlight_max(color='blue')

Пример 3

Функциите в първите два примера подчертават максималните и минималните стойности на колоните. Можем също да използваме за маркиране на стойности по ред. Няма смисъл за предишните случаи, защото има само една колона.

Нека създадем примерна рамка с данни с множество колони и да приложим тези функции за стилизиране.

df = pd.DataFrame(np.random.randint(100, size=(6,8)))
df.style.highlight_min(color='red',axis=1)\
.highlight_max(color='green', axis=1)

Маркираните стойности са максималните и минималните стойности на редовете.

Пример 4

Друга вградена функция за оформяне е лентата. Той показва цветна лента във всяка клетка, чиято дължина е пропорционална на стойността в тази клетка.

churn[['Attrition_Flag','Gender','Customer_Age']].\
groupby(['Attrition_Flag','Gender'], as_index=False).mean().\
style.bar(color='green')

Изчислихме средната възраст на клиентите за всяка група в колони за флаг за изтощение и пол. Лентовата функция ни предоставя визуален преглед на стойностите. Можем лесно да осъзнаем минималните и максималните стойности, както и реда на стойностите между тях.

Пример 4

В този пример ще видим разширено използване на функцията лента. Да разгледаме случай, в който имаме както положителни, така и отрицателни стойности в колони. Можем да зададем 0 като референтна точка и да използваме ленти с различни цветове за отрицателни и положителни стойности.

df = pd.DataFrame((np.random.randint(20, size=(6,3)) - 8) * 3.2)
df.style.bar(align='mid', color=['red','green'])

Това улеснява визуалното разграничаване на положителните и отрицателните стойности.

Пример 5

До този момент използвахме вградените функции за стилизиране. Възможно е да използваме собствени функции. След като създадем наш собствен стайлер, можем да го приложим с помощта на функциите apply или applymap на Pandas.

Например функцията по-долу подчертава стойностите на колона, които са по-високи от средната стойност на колоната.

def above_mean(col):
  is_above = col > col.mean()
  return ['background-color: green' if v else '' for v in is_above]

Използваме функцията за прилагане, за да направим стилизиране по колони.

churn[['Marital_Status','Gender','Customer_Age',
'Dependent_count']].groupby(['Marital_Status','Gender']).mean().\
style.apply(above_mean)

Изчислихме средната стойност за всяка категория в графите за семейно положение и пол. Функцията above_mean се прилага към резултатите, за да подчертае стойностите, които са по-високи от средната стойност на колоната.

Пример 7

Възможно е стилизирането да се приложи само за някои от колоните. Параметърът subset се използва за избор на желаните колони.

Например, следният код ще приложи функцията above_mean само към колоната за възрастта на клиента.

churn[['Marital_Status','Gender','Customer_Age',
'Dependent_count']].groupby(['Marital_Status','Gender']).mean().\
style.apply(above_mean, subset=['Customer_Age'])

Предаваме списъка с колони, които искаме да стилизираме, към параметъра подмножество на функцията apply.

Пример 8

Функцията за прилагане се използва за стилизиране по колони. Ако искаме да направим стилизиране по елементи, се използва функцията applymap.

Например функцията above_zero по-долу оцветява по различен начин положителните и отрицателните стойности в рамка с данни.

def above_zero(val):
  color = 'green' if val > 0 else 'red'
  return 'color: %s' % color

Можем да използваме функцията applymap, за да направим стилизиране по елементи с функцията above_zero.

df.style.applymap(above_zero)

Пример 9

Функцията set_properties на атрибута Styler позволява комбиниране на различни операции за стилизиране.

Например, можем да изберем конкретни цветове за фона и героите.

df = pd.DataFrame(np.random.randint(100, size=(6,8)))
df.style.set_properties(**{'background-color': 'yellow',
                           'color':'black'})

Пример 10

Стиловите функции, които използвахме тук, са доста прости. Въпреки това можем да създадем и по-сложни стилови функции, които подобряват информативната сила.

Може да искаме да използваме един и същ стил няколко пъти. Pandas предлага начин за прехвърляне на стилове между кадри с данни.

Обектът styler се връща, когато приложим функцията style. Можем да запазим този стилистичен обект в променлива и след това да го използваме за прехвърляне на стила.

df = pd.DataFrame(np.random.randint(100, size=(6,8)) - 50)
df.iloc[-1,-1] = np.nan
style1 = df.style.highlight_min(color='red')\
 .highlight_max(color='blue')\
 .highlight_null(null_color='green')

Променливата style1 е стилистичен обект, който основно е рамка от данни със стил. Ето как изглежда:

Нека създадем друг стилистичен обект на базата на различна рамка от данни.

df2 = pd.DataFrame(np.random.randint(50, size=(6,8)))
df2.iloc[-1,-1] = np.nan
style2 = df2.style

Style2 е стилистичен обект, който изглежда по-долу:

Вече можем да прехвърлим стила на обекта style1 към обекта style2.

style2.use(style1.export())

Ето как изглежда обектът style2 сега:

Заключение

Видяхме как да използваме вградената функция за стил, както и да създадем такава по поръчка.

Ние също използвахме функциите apply и applymap, за да приложим действително направените по поръчка стилове върху кадрите с данни. Видяхме също как да прехвърляме стилове от един стилистичен обект към друг.

Има други налични опции за стил и форматиране, които могат да бъдат достъпни в раздела за стилизиране на ръководството за потребителя на pandas.

Благодаря ви, че прочетохте. Моля, уведомете ме, ако имате отзиви.