Визуализация на данни с Python и Seaborn — Част 4: LM Plot & Reg Plot
Надяваме се, че вече сте прегледали предишната статия за Визуализация на данни със Seaborn, а ако не сте, моля, вижте връзките в долната част на тази статия! В тази статия ще разгледаме концепцията за изчертаване на графика на анализ на данни с линейна регресия, който е много често срещан метод в бизнес разузнаването и науката за данни домейн в частност. Като начало, първо ще се опитаме да получим статистически преглед на концепцията за линейна регресия.
Тъй като намерението ни не е да се потопим дълбоко във всяка статистическа концепция, вместо това ще избера подбран набор от данни (може също да се обърнете тук към подбран списък с ресурси за наука за данни) и ще покажа различни начини в които можем да визуализираме каквото изведем по време на нашия анализ. Използвайки Seaborn, има два важни типа фигури, които можем да начертаем, за да изпълним нуждите на нашия проект. Единият е известен като „LM Plot“, а другият е „Reg Plot“. Визуално те имат доста подобен външен вид, но имат функционална разлика, която ще подчертая в детайли за по-добро разбиране.
Линейната регресия е статистическа концепция за предсказуем анализ, където основният дневен ред е основно да се изследват три аспекта:
- Набор от предикторни променливи върши ли добра работа при прогнозиране на резултатна (зависима) променлива?
- Кои променливи по-специално са значими предиктори за променливата на резултата?
- По какъв начин те (указани от големината и знака на бета оценките) влияят върху променливата на резултата? Тези Бета оценки са само стандартизираните коефициенти, получени в резултат на регресионен анализ, които са стандартизирани, така че дисперсиите на зависими em> и независимите променливи са 1.
Нека започнем с импортиране на библиотеките, от които може да се нуждаем в нашето пътуване и това е нещо, което ще правим в началото на всяка статия от тази серия, така че да не се налага да се притесняваме за зависимостите:
Нека сега генерираме малко данни, с които да си поиграем, използвайки Numpy за два въображаеми класа точки. Моля, обърнете внимание, че в цялата илюстрация не бих обяснявал генерирането на данни, тъй като това е компонент на Анализ на данни (а не визуализация). С това казано, нека се опитаме да начертаем нещо тук:
Seaborn Lmplots:
Всеки парцел в Seaborn има набор от фиксирани параметри. За sns.lmplot()
имаме три задължителни параметъра, а останалите са незадължителни, които можем да използваме според нашите изисквания. Тези 3 параметъра са стойности за ос X, стойности за ос Y и препратка към набор от данни. Тези 3 се виждат предимно в почти всички графики на Seaborn и в допълнение има незадължителен параметър, който бих искал да запомните, тъй като е много полезен. Това е параметър hue и той приема категориални колони и донякъде ни помага да групираме диаграмата на данните според стойностите на параметрите hue. Нека видим как работи:
Нека сега разберем какво виждаме на екрана, преди да преминем към добавянето на параметри. Тази линейна линия през нашия график е най-доброто налично прилягане към тенденцията на бакшиша, който обикновено дават клиентите по отношение на общата сметка, която се генерира . И точките от данни, които виждаме най-горе вдясно, които са далеч от тази линия, са известни като отклонения в набора от данни. Можем да мислим за отклоненията като изключения.
Целта на Data Science е да предвиди най-доброто решение за разбиране на тенденцията в поведението на посещаващите клиенти и нашият алгоритъм винаги трябва да бъде проектиран съответно. Може да намерим това за често срещан сценарий, докато прилагаме обобщени линейни модели в машинното обучение. Ако забележим много внимателно, има тази сянка, събираща се в центъра, където има част от нашите данни. Тази конвергентна точка всъщност е статистическата средна стойност или с по-прости думи, обобщената прогноза за стойността на бакшиша в този ресторант на дневна база.
В този случай, разглеждайки този график, можем да кажем, че ако общата сметка е около $20,00, тогава ще получите бакшиш от около $3,00. Нека усъвършенстваме тази визуализация още повече, като добавим повече функции към графиката и за тази цел нека се опитаме да разберем дали пушач като цяло бакшиш повече или по-малко :
Отразява, че Пушачите, които виждаме в син цвят, са малко по-щедри, но не са толкова съвместими с навика си да дават бакшиши, тъй като точките с данни са доста неясно разпределени. И така, добавянето на 3-тия параметър на hue ни помогна да визуализираме тази разлика в отделно цветно изобразяване и също така добави легенда с Да, Не за удобно тълкуване. Нека разгледаме други често използвани параметри, за да персонализираме допълнително този график:
Тук зададохме стила на маркера на точките за данни, променихме оцветяването и решихме да премахнем легендата, която по подразбиране винаги е там. В момента, независимо дали е за пушач или за непушач, представянето е на един и същи график, така че нека го представим на отделни аспекти :
Има много неща, с които можем да експериментираме, като използваме различни незадължителни параметри, но в обвивката основното представяне със задължителни аргументи остава същото. Нека визуализираме още един върху вградения набор от данни Съвети:
Горният график в 4 отделни аспекта се задълбочава във визуализирането на данните, където все още показваме съвета, даден срещу общата сметка, но сега също е сегментиран според това дали е Време за обяд или не заедно със зависимостта от пола. Ще има много случаи, в които бихме искали да визуализираме такова по-широко сегментиране. В момента разполагаме с малък набор от данни, така че все още сме с вързани ръце, но с изследване на набор от данни в реалния свят тази визуализация става неограничена.
Сега общо използване на lmplot(), където ще генерираме произволни точки от данни и след това ще напаснем регресионна линия през тях. Показвам тази реализация само за да дам общ преглед на това как обикновено изглежда в производствена среда и ако сте начинаещ и не сте толкова опитен в програмирането на Python, не е нужно да се стресирате, защото с времето ще придобиете команда над него. Моля, обърнете внимание, че фокусът ни е само върху визуализацията, така че няма да навлизаме в използването на модула NumPy. Да започваме:
Тук виждаме разбъркани точки от данни на графиката с линейно монтирана линия, минаваща през нея, като по този начин отразява най-доброто съответствие за съществуващата тенденция според набора от данни. Като цяло бих препоръчал винаги да запазите последователността от параметри непокътната според официалната документация sns.lmplot(), която изглежда почти като:
seaborn.lmplot(x, y, data, hue=None, col=None, row=None, palette=None, col_wrap=None, size=5, aspect=1, markers='o', sharex=True, sharey=True, hue_order=None, col_order=None, row_order=None, legend=True, legend_out=True, x_estimator=None, x_bins=None, x_ci='ci', scatter=True, fit_reg=True, ci=95, n_boot=1000, units=None, order=1, logistic=False, lowess=False, robust=False, logx=False, x_partial=None, y_partial=None, truncate=False, x_jitter=None, y_jitter=None, scatter_kws=None, line_kws=None)
Тук стойностите, които виждаме спрямо няколко незадължителни параметри, са там по подразбиране, освен ако изрично не променим това в нашия код. Също така трябва винаги да се уверяваме, че стойностите на характеристиките x
и y
винаги трябва да бъдат низове, за да поддържаме подреден формат на данните. Ако се чувствате любопитни да научите в дълбочина за подредените данни, предлагам да прочетете изследователска статия на Хадли Уикхам, озаглавена „Journal of Statistical Software“.
Seaborn Regplots:
По отношение на основната функционалност, reglot()
е доста подобен на lmplot()
и решава подобна цел за визуализиране на линейна връзка, определена чрез Регресия. При най-простото извикване и двете функции чертаят точкова диаграма на две променливи, x
и y
, и след това напасват регресионния модел y ~ x
; и начертайте получената регресионна линия и 95% доверителен интервал за тази регресия. Всъщност regplot()
притежава подгрупа от lmplot()'s
функции.
Важно е да се отбележи разликата между тези две функции, за да изберете правилния график за вашата употреба.
- Много очевидна разлика е формата на графиката, която ще разгледаме скоро.
- Второ, regplot() има задължителна гъвкавост на входните параметри. Това означава, че променливите
x
иy
НЕ изискват непременно низове като вход. За разлика отlmplot()
, тези два параметъра трябва да приемат и други формати като прости NumPy масиви, обекти Pandas Series или като препратки към променливи в Pandas DataFrame обект, предаван на входни данни.
Параметрите за regplot()
според официалната му документация с всички негови параметри изглеждат така:
seaborn.regplot(x, y, data=None, x_estimator=None, x_bins=None, x_ci='ci', scatter=True, fit_reg=True, ci=95, n_boot=1000, units=None, order=1, logistic=False, lowess=False, robust=False, logx=False, x_partial=None, y_partial=None, truncate=False, dropna=True, x_jitter=None, y_jitter=None, label=None, color=None, marker='o', scatter_kws=None, line_kws=None, ax=None)
Няма голяма визуална разлика, така че нека бързо да начертаем regplot()
, за да го разберем по-добре. Но преди да направя това, бих искал да отбележите факта, че Seaborn regplot()
или lmplot()
не поддържат регресия спрямо данни за дата, така че ако имаме работа с Време- серияалгоритмимоля, направете внимателен избор. Също така имайте предвид, че lmplot()
, което току-що приключихме с обсъждането, е само обвивка около regplot()
и facetgrid()
За промяна, нека се опитаме също да начертаем сNumPy масиви:
Наборите от данни, с които сме работили досега, имат точки от данни, доста добре подредени и следователно представянето на логистично съответствие не е толкова тромаво, но нека сега да разгледаме няколко сложни сценария. Първият, с който ще се занимаваме, е да напаснем непараметрична регресия с помощта на ниско изглаждане.
Това е компютърно интензивен процес, тъй като е стабилен и следователно в бекенда не приема ci
параметър, т.е. доверителен интервал под внимание. Тук линията се огъва, за да получите по-точна оценка според разпространението на точките от данни, както се вижда. Нека получим още един вграден набор от данни, достъпен със Seaborn, за да имаме по-добър изглед на сценариите на приложена логистична регресия:
Това до голяма степен помага за справяне с извънредните стойности в нашия набор от данни, за да се побере в полиномиален регресионен модел за изследване на прости видове нелинейни тенденции, тъй като линейната връзка е същата, но нашият прост график не би са успели да го проследят. Нека покажа как би изглеждало:
С цялото това разбиране, единственото нещо, с което най-накрая ще се запознаем, са често използваните незадължителни параметри:
- Параметри като
x_jitter
иy_jitter
се използват за добавяне на шум към нашия набор от данни. - Параметърът
color
ви помага да получите цвят в стил Matplotlib. dropna
помага за премахване на NaN (NULL) стойности.- Параметърът
x_estimator
е полезен с дискретни променливи. ci
представлява размера на доверителния интервал, използван при изчертаване на централна тенденция за дискретни стойности на x.label
се използва за присвояване на подходящо име на нашия Scatterplot (в легенди) или Регресионна линия .
Благодарим ви за търпението в тази визуално изчерпателна статия и се надяваме да се видим в следващата, където ще се задълбочим в Диаграми на разсейване и съвместни графики. надълго и нашироко преминахме през два важни аспекта на регресията. Третият, т.е. facetgrid е паркиран засега и ние също ще го вземем много скоро. За предишни статии от тази серия, моля, използвайте връзките по-долу. Приятна визуализация!