از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
طرح ویولن Seaborn – آموزش و نمونه
سرفصلهای مطلب
معرفی
متولد دریا یکی از پرکاربردترین کتابخانه های تجسم داده در پایتون، به عنوان پسوندی است Matplotlib. این یک API ساده، بصری و در عین حال بسیار قابل تنظیم برای تجسم داده ها ارائه می دهد.
در این آموزش، روش انجام این کار را بررسی خواهیم کرد طرح یک نقشه ویولن در Seaborn.
نمودارهای ویولن برای تجسم توزیع داده ها، نمایش محدوده، میانه و توزیع داده ها استفاده می شود.
نمودارهای ویولن همان آمار خلاصه را نشان می دهد که نمودارهای جعبه ای است، اما آنها نیز شامل می شوند تخمین تراکم هسته که شکل/توزیع داده ها را نشان می دهد.
وارد کردن داده ها
برای شروع، ما می خواهیم مجموعه داده ای را انتخاب کنیم که برای ایجاد طرح های ویولن مناسب باشد.
مجموعه داده باید دارای ویژگی های عددی و پیوسته باشد. این به این دلیل است که از Violin Plots برای تجسم توزیع داده های پیوسته استفاده می شود. آنها محدوده، میانه و توزیع داده ها را نمایش می دهند.
توطئههای ویولن اساساً همان آمار خلاصهای را به عنوان نمودارهای جعبه نشان میدهند، اما شامل اطلاعات اضافی نیز میشوند. شکل “ویولن” در طرح ویولن یک است تخمین چگالی هسته که شکل/توزیع داده ها را نشان می دهد.
برای این آموزش، ما با آن کار خواهیم کرد گپ مایندر مجموعه داده
ما با وارد کردن Seaborn، ماژول PyPlot از Matplotlib و Pandas شروع می کنیم:
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
سپس ما نیاز داریم import داده. خوب print سر مجموعه داده برای اطمینان از بارگیری صحیح داده ها و نگاهی به نام ستون ها/ویژگی ها.
همچنین بررسی میکنیم تا مطمئن شویم دادهای گم نشده است:
dataframe = pd.read_csv("gapminder_full.csv", error_bad_lines=False, encoding="ISO-8859-1")
print(dataframe.head())
print(dataframe.isnull().values.any())
این منجر به:
country year population continent life_exp gdp_cap
0 Afghanistan 1952 8425333 Asia 28.801 779.445314
1 Afghanistan 1957 9240934 Asia 30.332 820.853030
2 Afghanistan 1962 10267083 Asia 31.997 853.100710
3 Afghanistan 1967 11537966 Asia 34.020 836.197138
4 Afghanistan 1972 13079460 Asia 36.088 739.981106
ما ویژگی های پیوسته خود را انتخاب کرده و آنها را به عنوان متغیر ذخیره می کنیم تا به توابع Seaborn منتقل شوند:
country = dataframe.country
continent = dataframe.continent
population = dataframe.population
life_exp = dataframe.life_exp
gdp_cap = dataframe.gdp_cap
طرح یک نقشه ساده ویولن در Seaborn
اکنون که داده ها را بارگذاری کرده ایم و ویژگی های مورد نظر خود را انتخاب کرده ایم، می توانیم طرح ویولن را ایجاد کنیم.
برای ایجاد یک طرح ویولن، ما فقط از آن استفاده می کنیم violinplot()
عملکرد در Seaborn
ما در dataframe و همچنین متغیرهایی که می خواهیم تجسم کنیم، عبور می دهیم. ما می توانیم فقط متغیر X را وارد کنیم و تابع به طور خودکار مقادیر را محاسبه می کند روی محور Y:
sns.violinplot(x=life_exp)
plt.show()
از طرف دیگر، نیازی به استخراج ویژگی ها از قبل ندارید. با تامین data
آرگومان، و با اختصاص آن به DataFrame ما، می توانید به سادگی به نام متغیر ارجاع دهید، که سپس با مجموعه داده تطبیق داده می شود:
sns.violinplot(x="life_exp", data = dataframe)
این دقیقاً همان نتیجه را ایجاد می کند.
توجه داشته باشید: در این تصویر، Seaborn توزیع امید به زندگی در همه کشورها را ترسیم می کند، زیرا ما فقط life_exp
متغیر. بیشتر اوقات، ما می خواهیم متغیری مانند این را نیز جدا کنیم روی متغیر دیگری مانند country
یا continent
.
ترسیم پلات ویولن با متغیرهای X و Y
در اینجا یک متغیر X طبقهبندی و یک متغیر Y پیوسته را بررسی میکنیم، زیرا توزیع خاصی وجود دارد که میخواهیم آن را بر اساس نوع تقسیمبندی کنیم.
در این مجموعه داده، ما کشورهای زیادی داریم. اگر همه آنها را ترسیم کنیم، تعداد زیادی برای مشاهده عملی وجود خواهد داشت و رقم بسیار شلوغ خواهد بود. ما میتوانیم مجموعه داده را زیرمجموعه قرار دهیم و مثلاً 10 کشور را ترسیم کنیم.
در عوض، میتوانیم بر اساس قاره نیز نقشه بکشیم.
sns.violinplot(x=continent, y=life_exp, data=dataframe)
سفارشی کردن طرح
ما می توانیم طرح ویولن خود را به چند روش مختلف سفارشی کنیم.
برچسب های طرح ویولن را با Seaborn تغییر دهید
فرض کنید میخواهیم عناوین و برچسبهایی را به طرح خود اضافه کنیم تا به دیگران در تفسیر دادهها کمک کنیم. اگرچه Seaborn به طور خودکار محورهای X و Y را برچسب گذاری می کند، ممکن است بخواهیم برچسب ها را تغییر دهیم.
این را می توان با set_title()
و set_label()
پس از ایجاد یک شیء محور عمل می کند. ما فقط عنوانی را که می خواهیم طرح خود را به آن بدهیم، منتقل می کنیم set_title()
تابع.
برای برچسب زدن محورها از علامت استفاده می کنیم set()
عملکرد و ارائه برچسب به xlabel
و ylabel
آرگومان ها یا از wrapper استفاده کنید set_xlabel()
/set_ylabel()
کارکرد:
ax = sns.violinplot(x=continent, y=life_exp)
ax.set_title("Life Expectancy By Country")
ax.set_ylabel("Gapminder Life Expectancy")
ax.set_xlabel("Nations")
plt.show()
رنگ پلات ویولن را با Seaborn تغییر دهید
یکی از راه هایی که می توانیم طرح را سفارشی کنیم این است که رنگ های خاصی به آن اختصاص دهیم. ما می توانیم لیستی از رنگ های از پیش انتخاب شده ایجاد کرده و آنها را به آن ارسال کنیم palette
پارامتر:
colors_list = ('#78C850', '#F08030', '#6890F0', '#A8B820', '#F8D030', '#E0C068', '#C03028', '#F85888', '#98D8D8')
ax = sns.violinplot(x=continent, y=life_exp, palette=colors_list)
ax.set_title("Life Expectancy By Country")
ax.set_ylabel("Gapminder Life Expectancy")
ax.set_xlabel("Nations")
plt.show()
همپوشانی ازدحام بر روی طرح ویولن در Seaborn
ما حتی میتوانیم یک Swarmplot را روی پلات ویولن قرار دهیم تا توزیع و نمونههایی از نقاطی که آن توزیع را تشکیل میدهند، ببینیم. برای انجام این کار، فقط یک شیء شکل واحد ایجاد می کنیم و سپس دو نمودار مختلف ایجاد می کنیم:
colors_list = ('#78C850', '#F08030', '#6890F0', '#A8B820', '#F8D030', '#E0C068', '#C03028', '#F85888', '#98D8D8')
plt.figure(figsize=(10,6))
sns.violinplot(x=continent, y=life_exp,palette=colors_list)
sns.swarmplot(x=continent, y=life_exp, color="k", alpha=0.8)
plt.title("Life Expectancy By Country")
plt.ylabel("Gapminder Life Expectancy")
plt.xlabel("Nations")
plt.show()
تغییر سبک ویولن پلات با Seaborn
ما به راحتی می توانیم سبک و پالت رنگ طرح خود را با استفاده از آن تغییر دهیم set_style()
و set_palette()
به ترتیب توابع
Seaborn از تعدادی گزینه مختلف برای تغییر پشتیبانی می کند سبک و جعبه رنگ نقاشی از شکل:
plt.figure(figsize=(10,6))
sns.set_palette("RdBu")
sns.set_style("darkgrid")
sns.violinplot(x=continent, y=life_exp, data=dataframe)
sns.swarmplot(x=continent, y=life_exp, data=dataframe, color="k", alpha=0.8)
plt.title("Life Expectancy By Country")
plt.ylabel("Gapminder Life Expectancy")
plt.xlabel("Nations")
plt.show()
طرح های فرعی ویولن با Seaborn
در نهایت، اگر میخواهیم ستونها را به طرحهای فرعی خود تقسیم کنیم، میتوانیم این کار را با ایجاد یک شکل و سپس استفاده از add_gridspec()
تابعی برای ایجاد یک شبکه که در آن می توانیم طرح فرعی خود را قرار دهیم.
سپس فقط از آن استفاده می کنیم add_subplot()
تابع را تعیین کنید و مشخص کنید که در کجای شبکه میخواهیم نمودار فرعی فعلی را قرار دهیم و با استفاده از شی محورها، نمودار را همانطور که معمولاً انجام میدهیم ایجاد کنیم.
در اینجا، ما می توانیم هر دو را تنظیم کنیم y=variable
، یا استفاده کنید data=variable
.
fig = plt.figure(figsize=(6, 6))
gs = fig.add_gridspec(1, 3)
ax = fig.add_subplot(gs(0, 0))
sns.violinplot(data=population)
ax.set_xlabel("Population")
ax = fig.add_subplot(gs(0, 1))
sns.violinplot(data=life_exp)
ax.set_xlabel("Life Exp.")
ax = fig.add_subplot(gs(0, 2))
sns.violinplot(data=gdp_cap)
ax.set_xlabel("GDP Capacity")
fig.tight_layout()
plt.show()
گروه بندی توطئه های ویولن توسط Hue
یک کار واقعا مفید برای انجام طرح های ویولن، گروه بندی بر اساس رنگ است. اگر یک مقدار طبقه بندی دارید که دارای دو مقدار است (معمولاً، a true
/false
متغیر -style)، می توانید نمودارها را بر اساس رنگ گروه بندی کنید.
به عنوان مثال، شما می توانید مجموعه داده ای از افراد و یک employment
ستون، با employed
و unemployed
به عنوان ارزش ها سپس می توانید طرح های ویولن را بر اساس “رنگ” گروه بندی کنید – این دو طعم شغلی.
از آنجایی که مجموعه داده Gapminder ستونی مانند این ندارد، می توانیم خودمان آن را بسازیم. بیایید میانگین امید به زندگی را برای زیرمجموعه ای از کشورها محاسبه کنیم. مثلاً ما میانگین امید به زندگی کشورهای اروپایی را محاسبه می کنیم.
سپس، می توانیم a را اختصاص دهیم Yes
/No
مقدار یک ستون جدید – above_average_life_exp
برای هر کشور اگر میانگین امید به زندگی بالاتر از میانگین کل قاره باشد، این مقدار است Yes
، و بالعکس:
europe = dataframe.loc(dataframe("continent") == "Europe")
avg_life_exp = dataframe("life_exp").mean()
above_average_life_exp = ()
for index, row in europe.iterrows():
if row("life_exp") > avg_life_exp:
above_average_life_exp.append("Yes")
else:
above_average_life_exp.append("No")
europe("above_average_life_exp") = above_average_life_exp
حالا اگر ما print مجموعه داده ما، چیزی در امتداد خطوط زیر داریم:
country year population continent life_exp gdp_cap avle
12 Albania 1952 1282697 Europe 55.230 1601.056136 No
13 Albania 1957 1476505 Europe 59.280 1942.284244 No
14 Albania 1962 1728137 Europe 64.820 2312.888958 Yes
15 Albania 1967 1984060 Europe 66.220 2760.196931 Yes
16 Albania 1972 2263554 Europe 67.690 3313.422188 Yes
... ... ... ... ... ... ... ...
1603 United Kingdom 1987 56981620 Europe 75.007 21664.787670 Yes
1604 United Kingdom 1992 57866349 Europe 76.420 22705.092540 Yes
1605 United Kingdom 1997 58808266 Europe 77.218 26074.531360 Yes
1606 United Kingdom 2002 59912431 Europe 78.471 29478.999190 Yes
1607 United Kingdom 2007 60776238 Europe 79.425 33203.261280 Yes
نام متغیر به کوتاه شده است avle
به خاطر اختصار
اکنون، بیایید زیرمجموعه کوچکتری از این کشورها را با استفاده انتخاب کنیم europe.head()
و نمودارهای ویولن را با ستون جدیدی که درج کرده ایم گروه بندی کنید:
europe = europe.tail(50)
ax = sns.violinplot(x=europe.country, y=europe.life_exp, hue=europe.above_average_life_exp)
ax.set_title("Life Expectancy By Country")
ax.set_ylabel("Gapminder Life Expectancy")
ax.set_xlabel("Nations")
plt.show()
این در حال حاضر منجر به:
اکنون کشورهایی با امید به زندگی کمتر از حد متوسط با رنگ نارنجی رنگ آمیزی می شوند در حالی که سایر کشورها با رنگ آبی رنگ می شوند. اگرچه، حتی این هم همه چیز را به ما نمی گوید. شاید بخواهیم بررسی کنیم چند تا مردم ترکیه امید به زندگی کمتر از حد متوسط دارند.
اینجا کجاست تقسیم کردن لگد وارد می کند
تقسیم طرح های ویولن توسط Hue
توطئههای ویولن Seaborn به شما امکان میدهند از داخل آن عبور کنید split
آرگومان، که می توان آن را به هر یک از آنها تنظیم کرد True
یا False
.
اگر آن را تنظیم کنید True
، و الف hue
استدلال وجود دارد، ویولن ها را بین دو تقسیم می کند hue
ارزش های.
در مورد ما، یک طرف ویولن سمت چپ ویولن را به عنوان ورودی هایی با امید به زندگی بالاتر از متوسط نشان می دهد، در حالی که سمت راست برای ترسیم امید به زندگی کمتر از متوسط استفاده می شود:
نتیجه
در این آموزش، ما چندین روش را برای ترسیم طرح ویولن با استفاده از Seaborn و Python بررسی کردهایم. همچنین روش سفارشیسازی و تغییر برچسبها و رنگ، و همچنین پوشش Swarmplots، طرح فرعی چندین ویولن پلات، و در نهایت – روش گروهبندی طرحها بر اساس رنگ و ایجاد تقسیمبندی ویولن پلاتها را پوشش دادهایم. روی یک متغیر
اگر به تجسم دادهها علاقه دارید و نمیدانید از کجا شروع کنید، حتماً ما را بررسی کنید بسته کتاب روی تجسم داده ها در پایتون:
تجسم داده ها در پایتون با Matplotlib و Pandas کتابی است که طراحی شده است تا مبتدیان مطلق را با دانش پایه پایتون به Pandas و Matplotlib ببرد و به آنها اجازه دهد پایه ای قوی برای کار پیشرفته با این کتابخانه ها بسازند – از طرح های ساده گرفته تا طرح های سه بعدی متحرک با دکمه های تعاملی.
این به عنوان یک راهنمای عمیق عمل می کند که همه چیزهایی را که باید در مورد پانداها و Matplotlib بدانید، از جمله روش ساخت انواع طرح هایی که در خود کتابخانه تعبیه نشده اند را به شما آموزش می دهد.
تجسم داده ها در پایتون، کتابی برای توسعه دهندگان پایتون مبتدی تا متوسط، شما را در دستکاری ساده داده ها با پانداها راهنمایی می کند، کتابخانه های ترسیم هسته ای مانند Matplotlib و Seaborn را پوشش می دهد و به شما نشان می دهد که چگونه از کتابخانه های اعلامی و تجربی مانند Altair استفاده کنید. به طور خاص، در طول ۱۱ فصل، این کتاب ۹ کتابخانه پایتون را پوشش میدهد: Pandas، Matplotlib، Seaborn، Bokeh، Altair، Plotly، GGPlot، GeoPandas و VisPy.
این به عنوان یک راهنمای عملی و منحصر به فرد برای تجسم داده ها، در مجموعه ای از ابزارهایی که ممکن است در حرفه خود استفاده کنید، عمل می کند.
(برچسبها به ترجمه)# python
منتشر شده در 1403-01-13 16:24:08