ویژوالیزیشن با پایتون

یک تصویر  به اندازه هزار کلمه ارزش دارد.

این موضوع به ویژه زمانی صدق می‌کند که صحبت از نمایش داده‌ها به میان می‌آید. اگر با داده‌ها کار می‌کنید، نیاز به ایجاد ویژوالیزیشن‌ها اجتناب‌ناپذیر است گاهی بهتر است به جای توضیح، آن را نشان دهید.

ایجاد ویژوالیزیشن هم علم است و هم هنر. در این مقاله، به تکنیک‌های کلیدی در اکتشاف داده و ویژوالیزیشن با پایتون می‌پردازیم و به شما کمک می‌کنیم تا داده‌ها را به داستان‌های بصری جذاب تبدیل کنید.

پس بدون هیچ مقدمه‌ بیشتری، بیایید به دنیای وسیع ویژوالیزیشن با پایتون نگاهی بیندازیم!

ویژوالیزیشن‌های ابتدایی و تحلیل اکتشافی داده

برای نمایش ویژوالیزیشن‌های ابتدایی، به داده نیاز داریم و چه منبعی بهتر از Kaggle برای یافتن آن؟

برای ویژوالیزیشن‌های ابتدایی، من از مجموعه داده Red Wine استفاده کردم که یکی از مجموعه داده‌های پرطرفدار در Kaggle است. می‌توانید مجموعه داده‌های پرطرفدار را اینجا پیدا کنید

10 محبوب ترین مجموعه داده درKaggle

درباره مجموعه داده کیفیت شراب قرمز

(توضیحات از Kaggle)

این مجموعه داده مربوط به انواع قرمز شراب پرتغالی «وینهو ورد» است. به دلیل مسائل حریم خصوصی و لجستیکی، فقط متغیرهای فیزیکوشیمیایی (ورودی‌ها) و حسی (خروجی) در دسترس هستند (برای مثال، داده‌ای درباره انواع انگور، برند شراب، قیمت فروش شراب و غیره وجود ندارد).

این مجموعه داده را می‌توان به عنوان یک مساله دسته‌بندی یا رگرسیون مشاهده کرد. کلاس‌ها به ترتیب مرتب شده‌اند و متوازن نیستند (به عنوان مثال، شراب‌های معمولی نسبت به شراب‌های عالی یا ضعیف بیشتر هستند).

متغیرهای ورودی (براساس آزمایشات فیزیکوشیمیایی):

– اسیدیته ثابت

– اسیدیته فرار

– اسید سیتریک

– قند باقی‌مانده

– کلریدها

– دی‌اکسید گوگرد آزاد

– دی‌اکسید گوگرد کل

– چگالی

pH

– سولفات‌ها

– الکل

متغیر خروجی (براساس داده‌های حسی):

کیفیت (امتیاز بین 0 تا 10)

بیایید یک تمرین گرم کردن ساده انجام دهیم

توضیحات مجموعه داده

Pairplot  بین volatile_acidity و quality

				
					sns.pairplot(data, vars=["volatile_acidity", "quality"], hue="quality")

				
			

بیایید با pairplot خلاقیت به خرج دهیم و متغیرهای بیشتری را نمایش دهیم.

Pairplot یک شبکه از نمودارها نمایش می‌دهد که هر یک رابطه بین دو ویژگی (متغیر) در مجموعه داده را نشان می‌دهد

کاربرد: شناسایی ویژگی‌ها و نقاط پرت.

				
					sns.set(style="whitegrid")
pairplot = sns.pairplot(data, vars=["volatile_acidity", "citric_acid", "residual_sugar", "quality"],
                        hue="quality", palette="Spectral", markers=["o", "s", "D", "P", "X", "*"],
                        diag_kind="kde", height=3, aspect=1.2, plot_kws={'alpha':0.6})

# Adding a title to the figure
pairplot.fig.suptitle("Pairplot of Wine Quality Features", y=1.02)

# Display the plot
plt.show()

				
			
ویژوالیزیشن نمودار

بیایید چند Histogram ببینیم!

Histogram: نشان می‌دهد که هر محدوده از مقادیر (که به آن‌ها “bins” می‌گویند) چند بار در داده‌ها ظاهر می‌شوند. ستون‌های بلندتر نشان‌دهنده تکرار بیشتر یک مقدار هستند.

کاربرد: بررسی کیفیت داده و مقایسه توزیع‌ها در گروه‌های مختلف.

				
					# Create a 4x3 grid of subplots
fig, axes = plt.subplots(nrows=4, ncols=3, figsize=(20, 20))

# Modify the color list to match the number of columns in your dataset
colors = ['#491D8B', '#6929C4', '#8A3FFC', '#A56EFF',
          '#7D3AC1', '#AF4BCE', '#DB4CB2', '#EB548C',
          '#EC96E0', '#A2128E', '#E8D9F3', '#641811']

# Loop through each column in the red wine dataset
for index, column in enumerate(data.columns):
    if index < 12:  # Limit the iteration to the number of subplots
        ax = axes.flatten()[index]
        ax.hist(data[column], color=colors[index], bins=20, edgecolor='black', alpha=0.7, label=column)
        ax.legend(loc="best", fontsize=12)
        ax.set_title(f"Distribution of {column}", fontsize=14)
        ax.set_xlabel(column, fontsize=12)
        ax.set_ylabel("Frequency", fontsize=12)
        ax.grid(True, linestyle='--', alpha=0.6)

plt.suptitle("Wine Dataset Histograms", size=24, y=1.02)
plt.tight_layout(rect=[0, 0, 1, 0.98])
plt.show()
				
			
ویژوالیزیشن هیستوگرام

BoxPlot ها!!!

BoxPlot: توزیع داده را براساس خلاصه پنج‌عددی نمایش می‌دهد. خلاصه‌ای بصری از تمایل مرکزی، تغییرپذیری و نقاط پرت احتمالی داده‌ها ارائه می‌دهد.

خلاصه پنج‌عددی حداقل، چارک اول (Q1)، میانه (Q2)، چارک سوم (Q3) و حداکثر. از «سبیل پایین» تا «سبیل بالا».

کاربرد: عالی برای شناسایی نقاط پرت و همچنین درک کجی/پراکندگی توزیع داده‌ها.

				
					plt.figure(figsize=(8, 6))
sns.set_theme(style="darkgrid")
sns.boxplot(x='quality', y='alcohol', data=data, palette='viridis')
plt.title('Alcohol Content vs Wine Quality')
plt.show()

plt.figure(figsize=(8, 6))
sns.set_theme(style="darkgrid")
sns.boxplot(x='quality', y='density', data=data, palette='viridis')
plt.title('Alcohol Density vs Wine Quality')
plt.show()
				
			

حالا بیایید کمی متفاوت عمل کنیم

نمودار پراکندگی سه‌بعدی با رنگ‌های تصادفی

نمودار پراکندگی: رابطه بین دو متغیر پیوسته را با نمایش آن‌ها به‌صورت نقاط روی یک صفحه دکارتی نشان می‌دهد (همبستگی و ارتباط بین متغیرها).

کاربرد: شناسایی خوشه‌های نقاط داده و نقاط پرت.

				
					# 3D scatter plot with random color mapping
fig = plt.figure(figsize=(12, 10))
ax = fig.add_subplot(111, projection='3d')

# Generate a random color array
colors = np.random.rand(len(data))

# Scatter plot
scatter = ax.scatter(data['alcohol'], data['pH'], data['sulphates'], 
                     c=colors, cmap='hsv', s=100, alpha=0.7)

# Add color bar
fig.colorbar(scatter)

ax.set_title('3D Scatter Plot with Random Colors')
ax.set_xlabel('Alcohol')
ax.set_ylabel('pH')
ax.set_zlabel('Sulphates')
plt.show()
				
			
ویژوالیزیشن نمودار پراکندگی

هیستوگرام مارپیچی!

هیستوگرام مارپیچی: یک هیستوگرام که توزیع فراوانی داده‌ها را نشان می‌دهد، اما به‌صورت یک الگوی مارپیچی قرار می‌گیرد.

کاربرد: این نوع هیستوگرام اغلب برای جذابیت بصری ایجاد می‌شود، اما زمانی که داده‌ها ماهیت چرخه‌ای یا دوره‌ای دارند، به‌ویژه اگر الگوهای فصلی داشته باشند، می‌تواند کاربردی باشد.

				
					# Create a spiral histogram
theta = np.linspace(0, 4 * np.pi, 100)
r = np.linspace(0, 1, 100)

fig = plt.figure(figsize=(12, 8))
ax = fig.add_subplot(111, projection='polar')

for index, column in enumerate(data.columns[:12]):
    values = data[column].values[:100]
    bars = ax.bar(theta, values, width=0.2, color=plt.cm.inferno(np.linspace(0, 1, len(values))), alpha=0.7)
    theta += 0.3  # Increment the angle for each set of bars

ax.set_title('Spiral Histogram', va='bottom')
plt.show()
				
			
ویژوالیزیشن مارپیچی

هیستوگرام مارپیچی سه بعدی!!

				
					# Generate the parameters for the spiral
theta = np.linspace(0, 4 * np.pi, 100)
z = np.linspace(-2, 2, 100)  # Adjusted to give a 3D effect
r = np.linspace(0.1, 1, 100)  # Radius changes as we move along the spiral

fig = plt.figure(figsize=(14, 10))
ax = fig.add_subplot(111, projection='3d')

# Color list for each column
colors = plt.cm.plasma(np.linspace(0, 1, 12))

# Iterate over the first 12 columns of the dataset and create bars in 3D
for index, column in enumerate(data.columns[:12]):
    values = data[column].values[:100]
    x = r * np.sin(theta)
    y = r * np.cos(theta)
    
    # Plot the bars on the spiral path
    ax.bar3d(x, y, z, dx=0.05, dy=0.05, dz=values, color=colors[index], alpha=0.7)
    
    # Adjust theta to create a spiraling effect for the next column
    theta += 0.3
    z += 0.4  # Increment z to move up in the 3D space

# Set more meaningful labels and title
ax.set_title('3D Spiral Histogram of Wine Dataset', fontsize=20)
ax.set_xlabel('Acidity and Sugar Levels')
ax.set_ylabel('Density and Sulphates')
ax.set_zlabel('Wine Quality Features')

# Adjust the view angle for better visualization
ax.view_init(elev=30, azim=120)

plt.show()
				
			
ویژوالیزیشن مارپیچی سه بعدی

Heatmap ها!!

Heatmap: رابطه بین متغیرها یا توزیع مقادیر در یک مجموعه داده را نشان می‌دهد.

کاربرد: مشاهده همبستگی بین متغیرها.

				
					plt.figure(figsize=(12, 8))
sns.heatmap(data.corr(), annot=True, cmap='coolwarm', linewidths=0.5)
plt.title('Data Correlation Heatmap')
plt.show()
				
			
ویژوالیزیشن هیتمپ

حالا بیایید کمی بیشتر کار کنیم – خارج از جعبه!!

تولید گرافیک!

 ایجاد گرافیک با Mat و Sea متولد شده برای ترسیم

در اینجا یک گرافیک ایجاد شده با استفاده از Matplotlib نشان داده می شود.

شبیه کندوی عسل است، اینطور نیست؟ این کد آن است. 

				
					from matplotlib.patches import RegularPolygon

# Data and labels
labels = ['PANDAS', 'NUMPY', 'MATPLOTLIB', 'SEABORN', 'PLOTLY', 'SCIKITLEARN']
colors = ['#FFD700', '#9ACD32', '#1E90FF', '#3CB371', '#FFA07A', '#FFC1CC']

# Plotting
fig, ax = plt.subplots()
ax.axis('equal')  # Equal aspect ratio ensures that pie is drawn as a circle.

# Function to create hexagonal patches
def create_hexagon(ax, center, radius, color, label, fontsize=10):
    hexagon = RegularPolygon(center, numVertices=6, radius=radius, orientation=np.deg2rad(30), facecolor=color, edgecolor='black')
    ax.add_patch(hexagon)
    
    # Label placement
    ax.text(center[0], center[1], label, ha='center', va='center', fontsize=fontsize, weight='bold', color='black', rotation_mode='anchor')

# Coordinates for the center of each hexagon, spaced out
distance = 3.5  # Adjust this value to space out the hexagons
centers = [
    (0, 0),  # Center
    (distance * np.cos(np.deg2rad(90)), distance * np.sin(np.deg2rad(90))),  # Top
    (distance * np.cos(np.deg2rad(150)), distance * np.sin(np.deg2rad(150))),  # Top-left
    (distance * np.cos(np.deg2rad(210)), distance * np.sin(np.deg2rad(210))),  # Bottom-left
    (distance * np.cos(np.deg2rad(270)), distance * np.sin(np.deg2rad(270))),  # Bottom
    (distance * np.cos(np.deg2rad(330)), distance * np.sin(np.deg2rad(330))),
    (distance * np.cos(np.deg2rad(390)), distance * np.sin(np.deg2rad(390))),# Bottom-right
]

# Plotting hexagons
radius = 1.7
for i, center in enumerate(centers):
    if i == 0:
        create_hexagon(ax, center, radius * 1.2, '#8cbed6', 'VISUALIZATION', fontsize=11)  # Larger central hexagon
    else:
        create_hexagon(ax, center, radius, colors[i-1], labels[i-1])

# Set limits and remove axes
ax.set_xlim(-5, 5)
ax.set_ylim(-5, 5)
ax.axis('off')

plt.show()
				
			

نمودار حلقه چطور؟

				
					from matplotlib.patches import Wedge, Circle

# Create figure and axis
fig, ax = plt.subplots(figsize=(6, 6))

# Add RGB Labels
percentage = 35
colors = ['#FF0000', '#00CC66', '#0080FF']
labels = ['RED', 'GREEN', 'BLUE']

# Plotting the ring chart
outer_radius = 0.8
inner_radius = 0.5

# Divide the circle into three equal parts (each 120 degrees)
angle_per_patch = 360 / 3

# Create the wedges for the ring with equal angles
ax.add_patch(Wedge(center=(0, 0), r=outer_radius, theta1=0, theta2=angle_per_patch, facecolor=colors[0]))
ax.add_patch(Wedge(center=(0, 0), r=outer_radius, theta1=angle_per_patch, theta2=2*angle_per_patch, facecolor=colors[1]))
ax.add_patch(Wedge(center=(0, 0), r=outer_radius, theta1=2*angle_per_patch, theta2=360, facecolor=colors[2]))

# Create the inner circle to form the ring
ax.add_patch(Circle((0, 0), radius=inner_radius, facecolor='black'))

# Add the text inside the circle
ax.text(0, 0, "RGB", ha='center', va='center', fontsize=18, color='white')

# Add circular text around each wedge
r_text = (outer_radius + inner_radius) / 2  # Radius for the circular text

for i, label in enumerate(labels):
    theta = (angle_per_patch * i + angle_per_patch / 2)  # Angle for the text
    x_text = r_text * np.cos(np.deg2rad(theta))
    y_text = r_text * np.sin(np.deg2rad(theta))
    
    # Add text with rotation aligned with the wedge
    ax.text(x_text, y_text, label, ha='center', va='center', rotation=theta-90, rotation_mode='anchor', fontsize=12, color='white', weight='bold')

# Set aspect ratio to equal for a perfect circle
ax.set_aspect('equal')

# Set the limits to ensure the full chart is visible
ax.set_xlim(-1, 1)
ax.set_ylim(-1, 1)

# Remove axes
ax.axis('off')

plt.show()
				
			

نمودارهای ون چطور؟

به این منظور باید آن را نصب کنید.

				
					pip install matplotlib-venn
				
			

چه چیزی یک فیلم خوب را می سازد؟ اینها مواد تشکیل دهنده هستند!

و این کد آن است:

				
					from matplotlib_venn import venn3

# Create a figure
fig, ax = plt.subplots(figsize=(10, 10))

# Set colors for each circle
colors = ['#FF9999', '#66B2FF', '#99FF99']

# Create the Venn diagram
venn = venn3(
    subsets=(1, 1, 1, 1, 1, 1, 1),
    set_labels=('VISUALS', 'SCREENPLAY', 'STORY')
)

# Customize colors
venn.get_patch_by_id('100').set_color(colors[0])
venn.get_patch_by_id('010').set_color(colors[1])
venn.get_patch_by_id('001').set_color(colors[2])
venn.get_patch_by_id('110').set_color('#66C2A5')
venn.get_patch_by_id('101').set_color('#FC8D62')
venn.get_patch_by_id('011').set_color('#8DA0CB')
venn.get_patch_by_id('111').set_color('#E78AC3')

# Set transparency
for patch in venn.patches:
    patch.set_alpha(0.7)

# Add custom labels to the overlaps
venn.get_label_by_id('100').set_text('PROTAGONIST')
venn.get_label_by_id('010').set_text('ANTAGONIST')
venn.get_label_by_id('001').set_text('LOVE INTEREST')
venn.get_label_by_id('110').set_text('LOSS')
venn.get_label_by_id('101').set_text('MENTOR')
venn.get_label_by_id('011').set_text('SIDEKICK')
venn.get_label_by_id('111').set_text('MCGUFFIN')

# Customize the main text labels
for label in venn.set_labels:
    label.set_fontsize(16)
    label.set_fontweight('bold')

# Set axis limits and hide axes
ax.set_xlim(-0.7, 0.7)
ax.set_ylim(-0.7, 0.7)
ax.axis('off')

# Display the plot
plt.show()
				
			

اکتشاف Matplotlib و Seaborn مانند رفتن به یک لانه خرگوش هیجان‌انگیز است. امکانات بسیار هیجان‌انگیزی برای ایجاد ویژوالیزیشن‌های اطلاعاتی و جذاب وجود دارد. می‌توانم بگویم که اگر شما در این دو کتابخانه مهارت داشته باشید و Plotly را نیز به مهارت‌های خود اضافه کنید، آنگاه ویژوالیزیشن‌هایی که ایجاد می‌کنید، شما را به یک افسانه در محیط کار تبدیل خواهد کرد.

اگر با داده‌ها سر و کار دارید، اینجا دلایلی برای ضروری بودن توانایی ایجاد ویژوالیزیشن‌ها وجود دارد:

  • ویژوالیزیشن‌ها برای کسب سریع بینش در مورد ساختار و توزیع داده‌ها ضروری هستند.
  • آن‌ها در شناسایی الگوها، روندها، نقاط پرت و روابط درون داده‌ها کمک می‌کنند که برای ساخت مدل‌های دقیق بسیار حیاتی هستند.
  • کیفیت داده را ارزیابی می‌کنند، از جمله بررسی داده‌های گمشده، ناسازگاری‌ها و ناهنجاری‌ها.
  • برای ارتباط یافته‌ها به ذینفعانی که ممکن است زمینه‌های فنی نداشته باشند.

خواه شما در حال پردازش داده‌ها برای کیفیت باشید یا آن‌ها را برای آموزش یک مدل یادگیری ماشین آماده کنید، ویژوالیزیشن داده‌ها یک روش عالی برای تأیید و اصلاح داده‌ها است.

پس باید آن را به‌خوبی یاد بگیرید!

برای دیدن پست قبلی سایت بنو در مورد اسکریپت‌های خودکار پایتون، به این لینک مراجعه کنین!

این پست از سایت مرکز هوش مصنوعی بنو برگرفته از نوشته ی لینک زیر میباشد!

📊📈Creating Amazing Visualizations with Python | by Ritesh Shergill | Medium

 

بدون دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *


seven × = 28