از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
کتابخانه Seaborn برای تجسم داده ها در پایتون: قسمت 2
سرفصلهای مطلب
در مقاله قبلی Seaborn Library for Data Visualization in Python: Part 1، ما به چگونگی کتابخانه Seaborn برای ترسیم نمودارهای توزیعی و طبقه بندی استفاده می شود. در این مقاله ما به بحث خود ادامه خواهیم داد و برخی از قابلیت های دیگر ارائه شده توسط Seaborn برای ترسیم انواع مختلف طرح ها را مشاهده خواهیم کرد. ما بحث خود را با Matrix Plots آغاز خواهیم کرد.
توطئه های ماتریسی
نمودارهای ماتریسی نوع نمودارهایی هستند که داده ها را به صورت سطر و ستون نشان می دهند. نقشه های حرارتی نمونه های اصلی نمودارهای ماتریسی هستند.
نقشه های حرارتی
نقشههای حرارتی معمولاً برای ترسیم همبستگی بین ستونهای عددی در قالب یک ماتریس استفاده میشوند. در اینجا ذکر این نکته ضروری است که برای ترسیم نمودارهای ماتریسی باید اطلاعات معناداری داشته باشید روی ردیف ها و همچنین ستون ها. در ادامه موضوع مقاله گذشته، پنج ردیف اول مجموعه داده تایتانیک را ترسیم می کنیم تا ببینیم آیا سطرها و سرصفحه ستون ها اطلاعات معنی داری دارند یا خیر. اسکریپت زیر را اجرا کنید:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
dataset = sns.load_dataset('titanic')
dataset.head()
در خروجی، نتیجه زیر را مشاهده خواهید کرد:
از خروجی، می توانید ببینید که سرصفحه های ستون حاوی اطلاعات مفیدی مانند مسافران زنده مانده، سن آنها، کرایه و غیره است. با این حال سرصفحه های ردیف فقط حاوی شاخص های 0، 1، 2 و غیره هستند. برای ترسیم نمودارهای ماتریس، به اطلاعات مفیدی نیاز داریم. روی هر دو ستون و سرصفحه سطر. یکی از راه های انجام این کار این است که با آن تماس بگیرید corr()
روش روی مجموعه داده را corr()
تابع همبستگی بین تمام ستون های عددی مجموعه داده را برمی گرداند. اسکریپت زیر را اجرا کنید:
dataset.corr()
در خروجی مشاهده خواهید کرد که هم ستون ها و هم سطرها دارای اطلاعات هدر معنی دار هستند، همانطور که در زیر نشان داده شده است:
اکنون برای ایجاد یک نقشه حرارتی با این مقادیر همبستگی، باید آن را فراخوانی کنید heatmap()
تابع و آن را به چارچوب داده همبستگی خود منتقل کنید. به اسکریپت زیر نگاه کنید:
corr = dataset.corr()
sns.heatmap(corr)
خروجی به شکل زیر است:
از خروجی، می توان دریافت که کاری که Heat Map اساسا انجام می دهد این است که یک کادر برای هر ترکیبی از مقادیر سطر و ستون ترسیم می کند. رنگ جعبه به گرادیان بستگی دارد. به عنوان مثال، در تصویر بالا اگر همبستگی بالایی بین دو ویژگی وجود داشته باشد، سلول یا کادر مربوطه سفید است، روی از طرف دیگر اگر همبستگی وجود نداشته باشد، سلول مربوطه سیاه می ماند.
مقادیر همبستگی را نیز می توان رسم کرد روی نقشه حرارتی با عبور True
برای annot
پارامتر. اسکریپت زیر را برای مشاهده در عمل اجرا کنید:
corr = dataset.corr()
sns.heatmap(corr, annot=True)
خروجی:
همچنین میتوانید رنگ نقشه حرارتی را با ارسال آرگومان تغییر دهید cmap
پارامتر. در حال حاضر، فقط به اسکریپت زیر نگاه کنید:
corr = dataset.corr()
sns.heatmap(corr, cmap='winter')
خروجی به شکل زیر است:
علاوه بر استفاده ساده از همبستگی بین تمام ستون ها، می توانید از آن نیز استفاده کنید pivot_table
تابعی را برای تعیین شاخص، ستون و مقادیری که میخواهید مطابق با شاخص و ستونها ببینید، مشخص کنید. برای دیدن pivot_table
در عمل، از مجموعه داده “پروازها” استفاده خواهیم کرد که حاوی اطلاعات مربوط به سال، ماه و تعداد مسافرانی است که در آن ماه سفر کرده اند.
اسکریپت زیر را اجرا کنید import مجموعه داده و دیدن پنج ردیف اول مجموعه داده:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
dataset = sns.load_dataset('flights')
dataset.head()
خروجی:
در حال حاضر با استفاده از pivot_table
تابع، ما می توانیم یک نقشه حرارتی ایجاد کنیم که تعداد مسافرانی را که در یک ماه خاص از یک سال خاص سفر کرده اند را نشان می دهد. برای انجام این کار، عبور خواهیم کرد month
به عنوان ارزش برای index
پارامتر. ویژگی index مربوط به ردیف ها است. بعد باید عبور کنیم year
به عنوان ارزش برای column
پارامتر. و در نهایت برای values
پارامتر را پاس می کنیم passengers
ستون اسکریپت زیر را اجرا کنید:
data = dataset.pivot_table(index='month', columns='year', values='passengers')
sns.heatmap(data)
خروجی به شکل زیر است:
از خروجی مشهود است که در سالهای اولیه تعداد مسافرانی که از این پروازها استفاده می کردند کمتر بود. با گذشت سالها، تعداد مسافران افزایش می یابد.
در حال حاضر مشاهده می کنید که جعبه ها یا سلول ها در برخی موارد با هم همپوشانی دارند و تمایز بین مرزهای سلول ها چندان واضح نیست. برای ایجاد یک مرز واضح بین سلول ها، می توانید از آن استفاده کنید linecolor
و linewidths
مولفه های. به اسکریپت زیر دقت کنید:
data = dataset.pivot_table(index='month', columns='year', values='passengers' )
sns.heatmap(data, linecolor='blue', linewidth=1)
در اسکریپت بالا، “آبی” را به عنوان مقدار برای گذراندیم linecolor
پارامتر، در حالی که linewidth
پارامتر روی 1 تنظیم شده است. در خروجی یک مرز آبی در اطراف هر سلول خواهید دید:
شما می توانید ارزش را افزایش دهید linewidth
اگر می خواهید مرزهای ضخیم تری داشته باشید.
نقشه خوشه ای
علاوه بر نقشه حرارتی، یکی دیگر از نمودارهای ماتریسی که معمولا استفاده می شود، نقشه خوشه ای است. نقشه خوشه ای اساسا استفاده می کند خوشه بندی سلسله مراتبی برای خوشه بندی سطرها و ستون های ماتریس.
بیایید یک نقشه خوشه ای برای تعداد مسافرانی که در یک ماه خاص از یک سال خاص سفر کرده اند ترسیم کنیم. اسکریپت زیر را اجرا کنید:
data = dataset.pivot_table(index='month', columns='year', values='passengers')
sns.clustermap(data)
برای ترسیم نقشه خوشه ای، clustermap
تابع استفاده می شود، و مانند تابع نقشه حرارتی، مجموعه داده ارسال شده باید دارای هدرهای معنی دار برای سطرها و ستون ها باشد. خروجی اسکریپت بالا به شکل زیر است:
در خروجی، میتوانید ماهها و سالها را به صورت خوشهای با هم ببینید روی بر اساس تعداد مسافرانی که در یک ماه خاص سفر کرده اند.
با این، بحث خود را در مورد توطئه های ماتریکس به پایان می رسانیم. در بخش بعدی بحث خود را در مورد قابلیت های شبکه کتابخانه Seaborn آغاز خواهیم کرد.
Seaborn Grids
گریدها در Seaborn به ما این امکان را میدهند که بر اساس ویژگیهای مورد استفاده در نمودارها، طرحهای فرعی را دستکاری کنیم.
جفت گرید
در قسمت 1 این سری مقاله، دیدیم که چگونه می توان از نمودارهای زوج برای ترسیم نمودارهای پراکنده برای همه ترکیبات ممکن از ستون های عددی در مجموعه داده استفاده کرد.
بیایید قبل از اینکه بتوانیم حرکت کنیم، طرح جفت را در اینجا تجدید نظر کنیم روی به شبکه جفت. مجموعه داده ای که می خواهیم برای بخش شبکه جفت استفاده کنیم مجموعه داده “iris” است که به طور پیش فرض هنگام دانلود دانلود می شود. seaborn
کتابخانه اسکریپت زیر را برای بارگذاری مجموعه داده iris اجرا کنید:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
dataset = sns.load_dataset('iris')
dataset.head()
پنج ردیف اول مجموعه داده عنبیه به شکل زیر است:
حالا بیایید یک طرح جفت رسم کنیم روی مجموعه داده عنبیه اسکریپت زیر را اجرا کنید:
sns.pairplot(dataset)
یک عکس فوری از بیرون به این شکل است:
حالا بیایید یک شبکه جفت رسم کنیم و تفاوت بین نمودار جفت و شبکه جفت را ببینیم. برای ایجاد یک شبکه جفت، شما به سادگی باید مجموعه داده را به شبکه ارسال کنید PairGrid
عملکرد، همانطور که در زیر نشان داده شده است:
sns.PairGrid(dataset)
خروجی:
در خروجی می توانید شبکه های خالی را ببینید. این در اصل کاری است که تابع شبکه جفت انجام می دهد. یک مجموعه خالی از شبکهها را برای همه ویژگیهای مجموعه داده برمیگرداند.
در مرحله بعد، باید با شماره تماس بگیرید map
تابع روی آبجکتی که توسط تابع شبکه جفت برگردانده می شود و نوع نموداری را که می خواهید رسم کنید به آن ارسال کنید روی شبکه ها بیایید یک نمودار پراکندگی را با استفاده از شبکه جفت ترسیم کنیم.
grids = sns.PairGrid(dataset)
grids.map(plt.scatter)
خروجی به شکل زیر است:
می توانید نمودارهای پراکندگی را برای همه ترکیبات ستون های عددی در مجموعه داده “عنبیه” مشاهده کنید.
همچنین می توانید انواع مختلف نمودارها را رسم کنید روی همان شبکه جفت به عنوان مثال، اگر می خواهید یک طرح “توزیع” ترسیم کنید روی مورب، یک “kdeplot” روی نیمه بالایی مورب، و طرح “پراکندگی”. روی قسمت پایینی مورب را می توانید استفاده کنید map_diagonal
، map_upper
، و map_lower
توابع، به ترتیب. نوع نموداری که باید ترسیم شود به عنوان پارامتر به این توابع ارسال می شود. به اسکریپت زیر دقت کنید:
grids = sns.PairGrid(dataset)
grids.map_diag(sns.distplot)
grids.map_upper(sns.kdeplot)
grids.map_lower(plt.scatter)
خروجی اسکریپت بالا به شکل زیر است:
می توانید قدرت واقعی تابع شبکه جفت را از تصویر بالا مشاهده کنید. در مورب ها نمودارهای توزیع داریم، روی در نیمه بالایی، نمودارهای چگالی هسته را داریم، در حالی که روی در نیمه پایینی نمودارهای پراکندگی داریم.
شبکه های وجهی
شبکههای وجهی برای ترسیم دو یا بیشتر از دو ویژگی طبقهبندی در برابر دو یا بیش از دو ویژگی عددی استفاده میشوند. بیایید یک شبکه وجهی ترسیم کنیم که نمودار توزیعی جنسیت در مقابل زنده را با توجه به سن مسافران ترسیم می کند.
برای این بخش، ما دوباره از مجموعه داده تایتانیک استفاده خواهیم کرد. اسکریپت زیر را برای بارگیری مجموعه داده تایتانیک اجرا کنید:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
dataset = sns.load_dataset('titanic')
برای ترسیم یک شبکه وجهی، FacetGrid()
تابع استفاده می شود. اولین پارامتر تابع مجموعه داده است، پارامتر دوم col
ویژگی برای رسم را مشخص می کند روی ستون ها در حالی که row
پارامتر ویژگی را مشخص می کند روی ردیف ها را FacetGrid()
تابع یک شی را برمی گرداند. مانند شبکه جفت، می توانید از آن استفاده کنید map
تابع برای تعیین نوع نموداری که می خواهید ترسیم کنید.
اسکریپت زیر را اجرا کنید:
grid = sns.FacetGrid(data=dataset, col='alive', row='sex')
grid.map(sns.distplot, 'age')
در اسکریپت فوق، طرح توزیعی را برای سن ترسیم می کنیم روی شبکه وجهی خروجی به شکل زیر است:
از خروجی می توانید چهار نمودار را مشاهده کنید. یکی برای هر ترکیبی از جنسیت و بقای مسافر. ستون ها حاوی اطلاعاتی در مورد بقا هستند در حالی که ردیف ها حاوی اطلاعاتی در مورد جنسیت هستند، همانطور که توسط علامت مشخص شده است FacetGrid()
تابع.
سطر اول و ستون اول شامل توزیع سنی مسافرانی است که جنسیت آنها مذکر است و مسافران زنده نمانده اند. ردیف اول و ستون دوم شامل توزیع سنی مسافرانی است که جنسیت آنها مرد است و مسافران زنده مانده اند. به طور مشابه، ردیف دوم و ستون اول شامل توزیع سنی مسافرانی است که جنسیت آنها زن است و مسافران زنده نماندهاند، در حالی که ردیف دوم و ستون دوم شامل توزیع سنی مسافرانی است که جنسیت آنها زن است و مسافران زنده ماندهاند.
علاوه بر نمودارهای توزیعی برای یک ویژگی، می توانیم نمودارهای پراکنده ای را نیز ترسیم کنیم که شامل دو ویژگی است روی شبکه وجهی
به عنوان مثال، اسکریپت زیر طرح پراکندگی را برای سن و کرایه برای هر دو جنسیت مسافرانی که جان سالم به در بردهاند و کسانی که زنده ماندهاند ترسیم میکند.
grid = sns.FacetGrid(data= dataset, col= 'alive', row = 'sex')
grid.map(plt.scatter, 'age', 'fare')
خروجی اسکریپت بالا به شکل زیر است:
نمودارهای رگرسیون
همانطور که از نام آن پیداست از نمودارهای رگرسیون برای اجرا استفاده می شود تجزیه و تحلیل رگرسیون بین دو یا چند متغیر
در این بخش، طرح مدل خطی را مطالعه خواهیم کرد که یک رابطه خطی بین دو متغیر را به همراه بهترین خط رگرسیون بر اساس داده ها ترسیم می کند.
مجموعه داده ای که قرار است برای این بخش استفاده کنیم مجموعه داده “diamonds” است که به طور پیش فرض با دانلود می شود seaborn
کتابخانه اسکریپت زیر را برای بارگذاری مجموعه داده اجرا کنید:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
dataset = sns.load_dataset('diamonds')
dataset.head()
مجموعه داده به شکل زیر است:
مجموعه داده شامل ویژگی های مختلف یک الماس مانند وزن به قیراط، رنگ، وضوح، قیمت و غیره است.
بیایید یک رابطه خطی بین قیراط و قیمت الماس ترسیم کنیم. در حالت ایدهآل، هر چه الماس سنگینتر باشد، قیمت آن بالاتر خواهد بود. بیایید ببینیم که آیا این واقعاً بر اساس واقعیت است یا خیر روی اطلاعات موجود در مجموعه داده الماس
برای رسم مدل خطی، lmplot()
تابع استفاده می شود. اولین پارامتر ویژگی است که می خواهید رسم کنید روی محور x، در حالی که متغیر دوم مشخصه ای است که می خواهید ترسیم کنید روی محور y آخرین پارامتر مجموعه داده است. اسکریپت زیر را اجرا کنید:
sns.lmplot(x='carat', y='price', data=dataset)
خروجی به شکل زیر است:
شما همچنین می توانید چندین مدل خطی را بر اساس رسم کنید روی یک ویژگی طبقه بندی شده نام ویژگی به عنوان مقدار به hue
پارامتر. به عنوان مثال، اگر می خواهید چندین مدل خطی برای رابطه بین قیراط و ویژگی قیمت ترسیم کنید، بر اساس آن روی برش الماس را می توانید استفاده کنید lmplot
عملکرد به شرح زیر است:
sns.lmplot(x='carat', y='price', data=dataset, hue='cut')
خروجی به شکل زیر است:
از خروجی، می توانید ببینید که رابطه خطی بین قیراط و قیمت الماس برای الماس تراش ایده آل همانطور که انتظار می رود شیب بیشتری دارد و مدل خطی کم عمق ترین برای الماس تراش منصفانه است.
علاوه بر ترسیم داده های ویژگی برش با رنگ های مختلف، می توانیم برای هر برش یک نمودار نیز داشته باشیم. برای انجام این کار، باید نام ستون را به آن ارسال کنید cols
صفت. به اسکریپت زیر دقت کنید:
sns.lmplot(x='carat', y='price', data=dataset, col='cut')
در خروجی، یک ستون جداگانه برای هر مقدار در ستون برش مجموعه داده الماس، مانند شکل زیر مشاهده خواهید کرد:
شما همچنین می توانید اندازه و نسبت ابعاد نمودارها را با استفاده از aspect
و size
مولفه های. به اسکریپت زیر دقت کنید:
sns.lmplot(x='carat', y = 'price', data= dataset, col = 'cut', aspect = 0.5, size = 8 )
را aspect
پارامتر نسبت ابعاد بین عرض و ارتفاع را تعریف می کند. نسبت ابعاد 0.5 به این معنی است که عرض نیمی از ارتفاع است که در خروجی نشان داده شده است.
می بینید که اگرچه اندازه طرح تغییر کرده است، اما اندازه فونت هنوز بسیار کوچک است. در قسمت بعدی روش کنترل فونت ها و استایل پلات های Seaborn را خواهیم دید.
طرح طرح
کتابخانه Seaborn با گزینه های مختلف طراحی ارائه می شود. در این قسمت تعدادی از آنها را مشاهده خواهیم کرد.
تنظیم سبک
را set_style()
تابع برای تنظیم سبک شبکه استفاده می شود. شما می توانید عبور کنید darkgrid
، whitegrid
، dark
، white
و ticks
به عنوان پارامترهای به set_style
تابع.
برای این بخش، ما دوباره از “دادههای تایتانیک” استفاده خواهیم کرد. برای دیدن اسکریپت زیر را اجرا کنید darkgrid
سبک.
sns.set_style('darkgrid')
sns.distplot(dataset('fare'))
خروجی به این شکل است؛
در خروجی می بینید که ما یک پس زمینه تیره با شبکه ها داریم. ببینیم چیه whitegrid
به نظر می رسد. اسکریپت زیر را اجرا کنید:
sns.set_style('whitegrid')
sns.distplot(dataset('fare'))
خروجی به شکل زیر است:
اکنون می بینید که ما هنوز شبکه هایی در پس زمینه داریم اما پس زمینه خاکستری تیره قابل مشاهده نیست. پیشنهاد می کنم امتحان کنید و با بقیه گزینه ها بازی کنید و ببینید کدام سبک به شما می آید.
تغییر اندازه شکل
از آنجایی که Seaborn از توابع Matplotlib در پشت صحنه استفاده می کند، می توانید از Matplotlib استفاده کنید pyplot
بسته برای تغییر اندازه شکل مطابق شکل زیر:
plt.figure(figsize=(8,4))
sns.distplot(dataset('fare'))
در اسکریپت بالا، عرض و ارتفاع طرح را به ترتیب 8 و 4 اینچ قرار دادیم. خروجی اسکریپت بالا به شکل زیر است:
متن را تنظیم کنید
جدای از notebook، ممکن است لازم باشد برای پوسترها طرح هایی ایجاد کنید. برای این کار می توانید از set_context()
عملکرد و آن را پاس کنید poster
به عنوان تنها ویژگی که در زیر نشان داده شده است:
sns.set_context('poster')
sns.distplot(dataset('fare'))
در خروجی باید نموداری با مشخصات پوستر مطابق شکل زیر مشاهده کنید. به عنوان مثال، می توانید ببینید که فونت ها در مقایسه با نمودارهای معمولی بسیار بزرگتر هستند.
نتیجه
کتابخانه Seaborn یک کتابخانه پیشرفته پایتون برای تجسم داده ها است. این مقاله قسمت 2 از سری مقالات است روی Seaborn برای تجسم داده در پایتون. در این مقاله روش رسم نمودارهای رگرسیون و ماتریسی در Seaborn را دیدیم. ما همچنین دیدیم که چگونه استایل های نمودار را تغییر دهیم و از توابع شبکه برای دستکاری نمودارهای فرعی استفاده کنیم. در مقاله بعدی خواهیم دید که چگونه می توان از قابلیت های داخلی کتابخانه Pandas پایتون برای تجسم داده ها استفاده کرد.
(برچسبها به ترجمه)# python
منتشر شده در 1403-01-25 21:51:05