Визуализация на данни с 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 е паркиран засега и ние също ще го вземем много скоро. За предишни статии от тази серия, моля, използвайте връзките по-долу. Приятна визуализация!

РЕДАКТИРАНЕ: Ето съдържанието на ресурса (списък на всички части от тази серия).

Визуализация на данни с Python и Seaborn — част 3

Визуализация на данни с Python и Seaborn — част 5