Оформете вашата рамка с данни, за да я направите по-привлекателна и информативна
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.
Благодаря ви, че прочетохте. Моля, уведомете ме, ако имате отзиви.