از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
مقدمه ای کوتاه بر matplotlib برای تجسم داده ها
سرفصلهای مطلب
معرفی
پایتون طیف گسترده ای از بسته های مفید برای یادگیری ماشین و تجزیه و تحلیل آماری مانند TensorFlow، NumPy، scikit-یادگیری، پانداها، و بیشتر. یکی از بسته هایی که برای اکثر پروژه های علم داده ضروری است این است matplotlib.
برای هر توزیع پایتون موجود است، می توان آن را نصب کرد روی پایتون 3 با pip
. روش های دیگر نیز موجود است، بررسی کنید https://matplotlib.org/ برای جزئیات بیشتر
نصب و راه اندازی
اگر از سیستم عاملی با a terminal، دستور زیر matplotlib را با آن نصب می کند pip:
$ python3 -m pip install matplotlib
واردات و محیط زیست
در یک فایل پایتون، ما می خواهیم import را pyplot
تابعی که به ما اجازه می دهد با یک محیط ترسیم مانند MATLAB ارتباط برقرار کنیم. ما همچنین import آ lines
تابعی که به ما اجازه می دهد خطوطی را به نمودارها اضافه کنیم:
import matplotlib.pyplot as plt
import matplotlib.lines as mlines
اساساً، این محیط رسم به ما اجازه می دهد تا ارقام و ویژگی های آنها را به عنوان متغیر ذخیره کنیم. سپس می توان این نمودارها را با یک دستور ساده چاپ و مشاهده کرد. به عنوان مثال، میتوانیم به قیمت سهام گوگل نگاهی بیندازیم: به طور خاص تاریخ، باز کن، بستن، جلد، و قیمت بسته تنظیم شده (تاریخ به صورت یک ذخیره می شود np.datetime64
) برای 250 روز اخیر:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cbook as cbook
with cbook.get_sample_data('goog.npz') as datafile:
price_data = np.load(datafile)('price_data').view(np.recarray)
price_data = price_data(-250:)
سپس داده ها را به گونه ای تبدیل می کنیم که اغلب برای سری های زمانی و غیره انجام می شود. $d_i$
بین هر مشاهده و مشاهده قبل از آن:
$$d_i = y_i - y_{i - 1} $$
delta1 = np.diff(price_data.adj_close) / price_data.adj_close(:-1)
همچنین می توانیم به تبدیل متغیرهای مختلف مانند جلد و قیمت بسته شدن:
volume = (15 * price_data.volume(:-2) / price_data.volume(0))**2
close = 0.003 * price_data.close(:-2) / 0.003 * price_data.open(:-2)
طرح یک طرح پراکنده
برای رسم واقعی این داده ها، می توانید از subplots()
توابع از plt
(matplotlib.pyplot
). به طور پیش فرض این مساحت شکل و محورهای یک نمودار را ایجاد می کند.
در اینجا ما یک نمودار پراکنده از تفاوت بین روزهای متوالی خواهیم ساخت. برای توضیح بیشتر، ایکس تفاوت روز است من و روز قبل y تفاوت روز است i+1 و روز قبل (من):
fig, ax = plt.subplots()
ax.scatter(delta1(:-1), delta1(1:), c=close, s=volume, alpha=0.5)
ax.set_xlabel(r'$\Delta_i$', fontsize=15)
ax.set_ylabel(r'$\Delta_{i+1}$', fontsize=15)
ax.set_title('Volume and percent change')
ax.grid(True)
fig.tight_layout()
plt.show()
سپس برچسب هایی برای آن ایجاد می کنیم ایکس و y محورها، و همچنین عنوانی برای طرح. ما انتخاب میکنیم که این دادهها را با شبکهها و یک چیدمان فشرده ترسیم کنیم.
plt.show()
طرح را برای ما نمایش می دهد.
اضافه کردن یک خط
ما می توانیم با ارائه یک خط به این طرح اضافه کنیم ایکس و y مختصات به عنوان لیست به a Line2D
نمونه، مثال:
import matplotlib.lines as mlines
fig, ax = plt.subplots()
line = mlines.Line2D((-.15,0.25), (-.07,0.09), color='red')
ax.add_line(line)
ax.scatter(delta1(:-1), delta1(1:), c=close, s=volume, alpha=0.5)
ax.set_xlabel(r'$\Delta_i$', fontsize=15)
ax.set_ylabel(r'$\Delta_{i+1}$', fontsize=15)
ax.set_title('Volume and percent change')
ax.grid(True)
fig.tight_layout()
plt.show()
ترسیم هیستوگرام ها
برای ترسیم یک هیستوگرام، مشابه را دنبال می کنیم process و استفاده کنید hist()
تابع از pyplot
. ما 10000 نقطه داده تصادفی تولید خواهیم کرد، ایکس، با میانگین 100 و انحراف معیار 15.
این hist
تابع داده ها را می گیرد، ایکس، تعداد bin ها و آرگومان های دیگر مانند تراکم، که داده ها را به یک چگالی احتمال عادی می کند، یا آلفا، که شفافیت هیستوگرام را تنظیم می کند.
از کتابخانه هم استفاده خواهیم کرد mlab برای اضافه کردن یک خط نشان دهنده یک تابع چگالی نرمال با میانگین و انحراف استاندارد یکسان:
import numpy as np
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt
mu, sigma = 100, 15
x = mu + sigma*np.random.randn(10000)
n, bins, patches = plt.hist(x, 30, density=1, facecolor='blue', alpha=0.75)
y = mlab.normpdf( bins, mu, sigma)
l = plt.plot(bins, y, 'r--', linewidth=4)
plt.xlabel('IQ')
plt.ylabel('Probability')
plt.title(r'$\mathrm{Histogram\ of\ IQ:}\ \mu=100,\ \sigma=15$')
plt.axis((40, 160, 0, 0.03))
plt.grid(True)
plt.show()
نمودار میله
در حالی که هیستوگرام ها به ما در چگالی بصری کمک می کنند، نمودار میله ای به ما کمک می کند تا تعداد داده ها را مشاهده کنیم. برای رسم نمودار میله ای با matplotlib، از عبارت استفاده می کنیم bar()
تابع. این تعداد و برچسب های داده را به عنوان در نظر می گیرد ایکس و y، همراه با استدلال های دیگر.
به عنوان مثال، میتوانیم به نمونهای از تعداد برنامهنویسانی که از زبانهای مختلف استفاده میکنند نگاه کنیم:
import numpy as np
import matplotlib.pyplot as plt
objects = ('Python', 'C++', 'Java', 'Perl', 'Scala', 'Lisp')
y_pos = np.arange(len(objects))
performance = (10,8,6,4,2,1)
plt.bar(y_pos, performance, align='center', alpha=0.5)
plt.xticks(y_pos, objects)
plt.ylabel('Usage')
plt.title('Programming language usage')
plt.show()
ترسیم تصاویر
تجزیه و تحلیل تصاویر در پایتون بسیار رایج است. جای تعجب نیست که ما می توانیم استفاده کنیم matplotlib برای مشاهده تصاویر ما استفاده می کنیم cv2 کتابخانه برای خواندن در تصاویر
این read_image()
خلاصه عملکرد در زیر آمده است:
- فایل تصویری را می خواند
- کانال های رنگی را تقسیم می کند
- آنها را به RGB تغییر می دهد
- اندازه تصویر را تغییر می دهد
- ماتریسی از مقادیر RGB را برمی گرداند
بقیه کد در پنج تصویر اول از گربه ها و سگ ها از داده های استفاده شده در تشخیص تصویر CNN خوانده می شود. تصاویر هستند به هم پیوسته و چاپ شد روی همان محور:
import matplotlib.pyplot as plt
import numpy as np
import os, cv2
cwd = os.getcwd()
TRAIN_DIR = cwd + '/data/train/'
ROWS = 256
COLS = 256
CHANNELS = 3
train_images = (TRAIN_DIR+i for i in os.listdir(TRAIN_DIR))
train_dogs = (TRAIN_DIR+i for i in os.listdir(TRAIN_DIR) if 'dog' in i)
train_cats = (TRAIN_DIR+i for i in os.listdir(TRAIN_DIR) if 'cat' in i)
def read_image(file_path):
img = cv2.imread(file_path, cv2.IMREAD_COLOR)
b,g,r = cv2.split(img)
img2 = cv2.merge((r,g,b))
return cv2.resize(img2, (ROWS, COLS), interpolation=cv2.INTER_CUBIC)
for a in range(0,5):
cat = read_image(train_cats(a))
dog = read_image(train_dogs(a))
pair = np.concatenate((cat, dog), axis=1)
plt.figure(figsize=(10,5))
plt.imshow(pair)
plt.show()
نتیجه
در این پست معرفی مختصری از روش استفاده را دیدیم matplotlib برای رسم داده ها در نمودارهای پراکنده، هیستوگرام و نمودار میله ای. ما همچنین خطوطی را به این طرح ها اضافه کردیم. در نهایت، روش خواندن در تصاویر را با استفاده از cv2 کتابخانه و استفاده می شود matplotlib برای ترسیم تصاویر
(برچسبها به ترجمه)# python
منتشر شده در 1403-01-26 20:46:05