آشنایی با ترسیم داده ها (رسم نمودار) در پایتون

ترسیم و تجسم داده ها و اطلاعات، تلاش برای ایجاد نظم و انضباط دیداری در راستای درک بهتر الگوها، روندها و همبستگی بین داده ها می باشد. شناسایی ویژگی های داده ممکن است به روش های دیگر قابل کشف نباشند.
زبان برنامه نویسی #پایتون چندین کتابخانه گرافیکی عالی با ویژگی های گوناگون را ارائه می نماید. اگر می خواهید یک نمایش تعاملی، پویا و بسیار سفارشی از داده ها ایجاد کنید، پایتون کتابخانه های بسیار کاربردی را برای این منظور فراهم نموده است.


در اینجا برخی از محبوب ترین کتابخانه های گرافیکی پایتون برای آشنایی معرفی می شوند.

Matplotlib: رابط کاربری سطح پایین با انعطاف بالا
Pandas Visualization: رابط کاربری آسان، ساخته شده در Matplotlib
Seaborn: رابط کاربری سطح بالا ، سبک های پیش فرض عالی
Plotly: رابط کاربری سطح بالا، امکان ارتباط تعاملی

در این مقاله یاد خواهیم گرفت که چگونه با استفاده از این کتابخانه ها و همچنین نحوه استفاده از برخی از ویژگی های خاص هر کتابخانه، نمایش گرافیکی مناسبی را ایجاد کنیم.

وارد کردن مجموعه داده (Importing Datasets)
برای وارد کردن مجموعه داده با فرمت csv می توان از تابع read_csv از کتابخانه Pandas استفاده نمود. در این مقاله از مجموعه داده استاندارد iris استفاده کرده ایم.

import pandas as pd
iris = pd.read_csv('iris.csv', names=['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'class'])
print(iris.head())
Iris Dataset head
Iris Dataset head


کتابخانه Matplotlib:

کتابخانه Matplotlib محبوب ترین کتابخانه ترسیم نمودار در زبان برنامه نویسی پایتون است. این کتابخانه رابط کاربری شبیه نرم افزار Matlab دارد که انعطاف و آزادی زیادی را با تعداد کم نوشتن خط کد ارائه می دهد.

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

pip install matplotlib

کتابخانه Matplotlib بطور خاص برای رسم و ایجاد نمودارهای پایه ای مانند نمودار خطی، نمودار ستونی، هیستوگرام و بسیاری موارد دیگر استفاده نمود. این کتابخانه را به روش زیر در زبان برنامه نویسی پایتون وارد می نماییم.

import matplotlib.pyplot as plt


نمودار پراکندگی (Scatter Plot)

برای ایجاد یک نمودار پراکندگی در Matplotlib می توانیم از تابع scatter استفاده کنیم و همچنین با استفاده از تابع subplots می توانیم عنوان نمودار و نام محورها را تعیین نماییم.

# create a figure and axis
fig, ax = plt.subplots()

# scatter the sepal_length against the sepal_width ax.scatter(iris['sepal_length'], iris['sepal_width'])
# set a title and labels
ax.set_title('Iris Dataset')
ax.set_xlabel('sepal_length')
ax.set_ylabel('sepal_width')
Scatter Plot
Scatter Plot

برای اینکه مفهوم بیشتری به نمودار اضافه کنیم می توانیم از رنگ ها برای هر دسته یا کلاس داده کمک بگیریم. برای این منظور یک نوع داده دیکشنری ایجاد می کنیم و برای هر دسته از داده های یک رنگ بخصوص را نگاشت می نماییم. سپس با یک حلقه for هر رنگ را به یک نقطه اختصاص میدهیم.

# create color dictionary
colors = {'Iris-setosa':'r', 'Iris-versicolor':'g', 'Iris-virginica':'b'}
# create a figure and axis
fig, ax = plt.subplots()
# plot each data-point
for i in range(len(iris['sepal_length'])):
ax.scatter(iris['sepal_length'][i], iris['sepal_width'][i],color=colors[iris['class'][i]])
# set a title and labels
ax.set_title('Iris Dataset')
ax.set_xlabel('sepal_length')
ax.set_ylabel('sepal_width')
Scatter Plot colored by class
Scatter Plot colored by class


نمودار خطی (Line Chart)

در کتابخانه Matplotlib ما می توانیم یک نمودار خطی با فراخوانی تابع plot ایجاد نماییم. همچنین می توانیم چند نمودار خطی را در یک صفحه از نمودار نمایش دهیم البته به شرطی که محور افقی نمودار ثابت باشد یا بیان دیگر جدول داده چند ستون مجزا داشته باشد.

# get columns to plot
columns = iris.columns.drop(['class'])
# create x data
x_data = range(0, iris.shape[0])
# create figure and axis
fig, ax = plt.subplots()
# plot each column
for column in columns:
ax.plot(x_data, iris[column], label=column)
# set title and legend
ax.set_title('Iris Dataset')
ax.legend()
Line Chart
Line Chart


نمودار هیستوگرام (Histogram)

در کتابخانه Matplotlib ما می توانیم یک نمودار هیستوگرام با فراخوانی تابع hist ایجاد نماییم. اگر کلاس های داده ای که در هر ستون مقدار خاصی درج شده است را در نظر بگیریم، نمودار هیستوگرام به طور خودکار میزان رخداد هر کلاس را محاسبه می کند.

# create figure and axis
fig, ax = plt.subplots()
# plot histogram
ax.hist(iris['sepal_length'], bins=12)
# set title and labels
ax.set_title('sepal_length')
ax.set_xlabel('Points')
ax.set_ylabel('Frequency')
Histogram
Histogram


نمودار میله ای (Bar Chart)

یک نمودار میله ای می تواند توسط تابع bar در کتابخانه Matplotlib ایجاد شود. نمودار میله ای بطور خودکار نمی تواند فراوانی هر دسته را محاسبه نماید. بنابراین ما از تابع value_counts کتابخانه pandas برای این کار استفاده می نماییم. نمودار میله ای برای داده های طبقه بندی شده که تعداد طبقه های آن زیاد نباشد (کمتر از 30) بسیار کاربردی است. در صورتیکه تعداد طبقه ها زیاد باشد نمودار بسیار شلوغ می شود قابلیت خوانایی و وضوح خود را از دست می دهد.

# create a figure and axis
fig, ax = plt.subplots()
# count the occurrence of each class
data = iris['class'].value_counts()
# get x and y data
points = data.index
frequency = data.values
# create bar chart
ax.bar(points, frequency)
# set title and labels
ax.set_title('Iris Class')
ax.set_xlabel('Points')
ax.set_ylabel('Frequency')
Bar Chart
Bar Chart


در مقاله های بعدی به معرفی کتابخانه های بصری دیگر پایتون خواهیم پرداخت.