5 مهر 1402
تهران، خیابان آزادی، تقاطع قریب
برنامه نویسی نرم افزار برنامه نویسی وب

تمرین پروژه پایتون | آموزش پیشرفته + سورس کد

تمرین پروژه پایتون | پروژه‌های پیشرفته + سورس کد

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

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

حالا بیایید آموزش را شروع کنیم!

آموزش برنامه نویسی پایتون: تحقیق کلمات کلیدی

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

من در این تمرین پروژه پایتون، برای دسترسی به Google Trends ، از Google API استفاده خواهم کرد که این کار با استفاده از کتابخانه Pytrends در پایتون، ممکن است. pytrends را می‌توان به راحتی با استفاده از دستور pip نصب کرد:

				
					pip install pytrends
				
			

امیدوارم به راحتی این پکیج را نصب کنید. حالا بیایید کار تحقیق درباره کلمات کلیدی گوگل را شروع کنیم.

تحقیق کلمات کلیدی با پایتون

ابتدا در گوگل Log in کنید، زیرا به دنبال دریافت موضوعات پرطرفدار از Google Trends هستیم. برای این کار، باید متدی به نام TrendReq را از متد pytrends.request وارد کنیم:

				
					import pandas as pd
from pytrends.request import TrendReq
import matplotlib.pyplot as plt
trends = TrendReq()
				
			

کلمات کلیدی محبوب بر اساس مناطق

بیایید اصطلاحاتی را ببینیم که در همه مکان‌های جهان محبوب هستند. من برای جستجو، عبارتی به نام Data Science را وارد می‌کنم:

				
					trends.build_payload(kw_list=["Data Science"])
data = trends.interest_by_region()
print(data.sample(10))
				
			
				
					Data Science
geoName
Malaysia 29
Canada 35
Bolivia 0
Gabon 0
Panama 0
United Kingdom 30
Isle of Man 0
French Southern Territories 0
Eswatini 0
Israel 23
				
			

مقادیر در مقیاس بین 0 تا 100 محاسبه می‌شوند. 100 به عنوان محبوب‌ترین مکان در جاهایی است که آن کلمه را سرچ می‌کنند. 50 نشان دهنده نصف این مقدار است. حالا بیایید نتایج جستجوی بالا را تصویرسازی کنیم تا دید بهتری به این موضوع داشته باشیم:

				
					df = data.sample(15)
df.reset_index().plot(x="geoName", y="Data Science", figsize=(120,16), kind="bar")
plt.show()
				
			

تحقیق کلمات کلیدی پایتون بر اساس ترندهای جستجوی روزانه

اکنون بیایید نگاهی به برترین ترندهای جستجوی روزانه در سراسر جهان بیندازیم. برای این کار باید از متد ()trending_searches استفاده کنیم:

				
					data = trends.trending_searches(pn="india")
print(data.head(10))
				
			
				
					0 Indian flag
1 SPB
2 Independence Day speech
3 Happy Independence Day 2020
4 Happy Independence Day Images
5 Prashant Bhushan
6 Niharika Konidela
7 UGC
8 August 15
9 Flag
				
			

پیشنهاد کلمات کلیدی گوگل (Google Keyword Suggestion)

اکنون بیایید ببینیم چگونه می‌توانیم در این پروژه از تمرین پروژه پایتون، Google Keyword Suggestion را برای تحقیق درباره کلمات کلیدی دریافت کنیم. کلمات کلیدی آن دسته از کلماتی که هستند که کاربران به دفعات بالا آن‌ها را برای یافتن موضوعی خاص در موتور جستجو تایپ می‌کنند:

				
					keyword = trends.suggestions(keyword="Programming")
data = pd.DataFrame(keyword)
print(data.head())
				
			
				
					 mid                              title                  type
0    /m/01t6b                                  C  Programming language
1  /m/025sbhf               Software development                 Topic
2  /m/07sbkfb                               Java  Programming language
3     /m/0z5n  Application programming interface      Kind of software
4    /m/01mf_               Computer programming                 Topic
				
			

تمرین پروژه پایتون: تحلیل داده‌های ویکی‌پدیا

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

بر خلاف سایر منابع اطلاعاتی وب سایت‌ها، ویکی‌پدیا API خود را برای تحلیل داده‌های مقالاتش دارد. پایتون نیز یک زبان برنامه نویسی همه منظوره است که تقریباً برای هر کاری یک پکیج ارائه می‌دهد. بنابراین ما یک پکیج به نام ویکی‌پدیا برای پایتون داریم که می‌توانیم از آن برای تحلیل داده‌های مقالات ویکی‌پدیا استفاده کنیم.

تحلیل داده‌های ویکی‌پدیا (Scrape WikiPedia) با پایتون چگونه ممکن است؟

برای تحلیل داده‌های مفید ویکی‌پدیا، باید پکیجی به نام Wikipedia را نصب کنید که این کار با استفاده از دستور pip به راحتی ممکن است:

				
					pip install wikipedia
				
			

امیدواریم این کار را به سادگی انجام دهید. حالا اجازه دهید نوشتن این برنامه را با وارد کردن پکیج لازم برای این کار شروع کنیم:

				
					import wikipedia as wiki

				
			

برای این که توضیح دهیم این پکیج چگونه کار می‌کند، باید داده‌هایی را به وسیله پایتون تحلیل کنیم. پس بیایید این کار را با تحلیل داده‌های ویکی‌پدیا انجام دهیم. کد زیر تمام پیشنهادات جستجوی ورودی ما را دریافت می‌کند. در این تمرین پروژه پایتون، این کد پیشنهادات جستجوی پایتون را برمی‌گرداند:

				
					print(wiki.search("Python"))

				
			
				
					['Python (programming language)', 'Python', 'Monty Python', 'Ball python', 'Setuptools', 'PYTHON', 'Burmese python', 'Python (missile)', 'History of Python', 'Reticulated python']
				
			

حالا بیایید ببینیم آیا موتور جستجوی ویکی‌پدیا، اگر چند حرف از پایتون را تایپ کنیم، آیا آن را به ما پیشنهاد می‌دهد یا خیر:

				
					print(wiki.suggest("Pyth"))

				
			
				
					python
				
			

بله. کار می‌کند! حالا بیایید ببینیم چگونه می‌توانیم به خلاصه یک مقاله در ویکی‌پدیا دسترسی پیدا کنیم:

				
					print(wiki.summary("Python"))

				
			
				
					Python is an interpreted, high-level, general-purpose programming language. Created by Guido van Rossum and first released in 1991, Python's design philosophy emphasizes code readability with its notable use of significant whitespace. Its language constructs and object-oriented approach aim to help programmers write clear, logical code for small and large-scale projects.Python is dynamically typed and garbage-collected. It supports multiple programming paradigms, including structured (particularly, procedural), object-oriented, and functional programming. Python is often described as a "batteries included" language due to its comprehensive standard library.Python was conceived in the late 1980s as a successor to the ABC language. Python 2.0, released in 2000, introduced features like list comprehensions and a garbage collection system with reference counting. Python 3.0, released in 2008, was a major revision of the language that is not completely backward-compatible, and much Python 2 code does not run unmodified on Python 3. The Python 2 language was officially discontinued in 2020 (first planned for 2015), and "Python 2.7.18 is the last Python 2.7 release and therefore the last Python 2 release." No more security patches or other improvements will be released for it. With Python 2's end-of-life, only Python 3.5.x and later are supported. Python interpreters are available for many operating systems. A global community of programmers develops and maintains CPython, a free and open-source reference implementation. A non-profit organization, the Python Software Foundation, manages and directs resources for Python and CPython development.

				
			

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

				
					wiki.set_lang("fr")
print(wiki.summary("Python"))
				
			
				
					Python (/ˈpaɪ.θɑn/) est un langage de programmation interprété, multi-paradigme et multiplateformes. Il favorise la programmation impérative structurée, fonctionnelle et orientée objet. Il est doté d'un typage dynamique fort, d'une gestion automatique de la mémoire par ramasse-miettes et d'un système de gestion d'exceptions ; il est ainsi similaire à Perl, Ruby, Scheme, Smalltalk et Tcl. Le langage Python est placé sous une licence libre proche de la licence BSD et fonctionne sur la plupart des plates-formes informatiques, des smartphones aux ordinateurs centraux, de Windows à Unix avec notamment GNU/Linux en passant par macOS, ou encore Android, iOS, et peut aussi être traduit en Java ou .NET. Il est conçu pour optimiser la productivité des programmeurs en offrant des outils de haut niveau et une syntaxe simple à utiliser. Il est également apprécié par certains pédagogues qui y trouvent un langage où la syntaxe, clairement séparée des mécanismes de bas niveau, permet une initiation aisée aux concepts de base de la programmation.
				
			

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

				
					wiki.set_lang("en")
p = wiki.page("Python")
				
			

برای دریافت عنوان (Title):

				
					print(p.title)

				
			
				
					Python (programming language)

				
			

برای دریافت URL مقاله:

				
					print(p.url)

				
			
				
					https://en.wikipedia.org/wiki/Python_(programming_language)
				
			

برای تحلیل داده‌های مقاله کامل:

				
					print(p.content)

				
			

برای دریافت تمام عکس‌های موجود در مقاله:

				
					print(p.images)

				
			

و برای دریافت تمام ارجاعاتی که ویکی‌پدیا در این مقاله استفاده کرده است:

				
					print(p.links)

				
			

امیدوارم این تمرین پروژه پایتون برای تحلیل داده‌های ویکی‌پدیا مورد پسندتان واقع شده باشد. اگر پرسشی دارید، در کامنت‌ها بپرسید.

تمرین پروژه پایتون: Web Scrapingبرای ایجاد CSV

Web Scraping به معنای جمع آوری داده‌ها از اینترنت است. به عنوان یک فرد مبتدی در کار با Data Science ، قطعاً فایل‌های CSV که در اینترنت را دیده‌اید که توسط برخی از وب‌سایت‌های محبوب مانند Kaggle و دیگر وب‌سایت‌های govt توزیع می‌شوند. داده‌ها با جمع آوری و نوشتن با استفاده از متدهای استاندارد، یا با Scraping آن‌ها از اینترنت تهیه می‌شوند. در این پروژه از آموزش برنامه نویسی پایتون، من با استفاده از BeautifulSoup شما را با Web Scraping آشنا خواهم کرد.

من داده‌ها را از Flipkart جمع آوری و یک فایل CSV از آن‌ها ایجاد می‌کنم. این کار آنقدرها هم که به نظر می‌رسد سخت نیست. برای ایجاد یک فایل CSV با پایتون، باید کارمان را با Web Scraping شروع کنیم. من کارم را با وارد کردن پکیج‌هایی که برای این کار نیاز دارم شروع می‌کنم. پس بیایید شروع کنیم.

Web Scraping برای ایجاد فایل CSV چگونه انجام می‌شود؟

ما برای این کار به دو پکیج اصلی نیاز داریم: BeautifulSoup و urllib. هر دوی این پکیج‌ها با استفاده از دستور pip قابل نصب هستند:

				
					pip install bs4
pip install urllib

				
			

پس از نصب موفقیت آمیز این بسته‌ها، کار بعدی که باید انجام دهید این است که پکیج‌ها را وارد کنید. پس بیایید این پکیج‌ها را وارد کنیم و لینکی را که برای جمع آوری داده‌ها نیاز داریم، Scrape کنیم:

				
					from bs4 import BeautifulSoup as soup
from urllib.request import urlopen as uReq

my_url="https://www.flipkart.com/search?q=samsung+mobiles&sid=tyy%2C4io&as=on&as-show=on&otracker=AS_QueryStore_HistoryAutoSuggest_0_2&otracker1=AS_QueryStore_HistoryAutoSuggest_0_2&as-pos=0&as-type=HISTORY&as-searchtext=sa"

uClient = uReq(my_url)
page_html = uClient.read()
uClient.close()
page_soup = soup(page_html, "html.parser")
				
			

حالا بیایید ببینیم چند HTML container در این لینک وجود دارد:

				
					containers = page_soup.findAll("div", { "class": "_3O0U0u"})
print(len(containers))
				
			
				
					24
				
			
				
					print(soup.prettify(containers[0]))

				
			
				
					<div class="_3O0U0u">
 <div data-id="MOBFRZZHMHQVNDFA" style="width:100%">
  <div class="_1UoZlX">
   <a class="_31qSD5" href="/samsung-galaxy-m01-blue-32-gb/p/itmc068b26305a0d?pid=MOBFRZZHMHQVNDFA&lid=LSTMOBFRZZHMHQVNDFAZXGBO6&marketplace=FLIPKART&srno=s_1_1&otracker=AS_QueryStore_HistoryAutoSuggest_0_2&otracker1=AS_QueryStore_HistoryAutoSuggest_0_2&fm=organic&iid=f9a57085-7ab9-4aba-b59d-5a4cbecd03e9.MOBFRZZHMHQVNDFA.SEARCH&ssid=zu9bg122ao0000001596818422200&qH=0258c7d48242959a" rel="noopener noreferrer" target="_blank">
    <div class="_3SQWE6">
     <div class="_1OCn9C">
      <div>
       <div class="_3BTv9X" style="height:200px;width:200px">
        <img alt="Samsung Galaxy M01 (Blue, 32 GB)" class="_1Nyybr" src="//img1a.flixcart.com/www/linchpin/fk-cp-zion/img/placeholder_9951d0.svg"/>
       </div>
      </div>
     </div>
     <div class="_2lesQu">
      <div class="_1O_CiZ">
       <span class="_1iHA1p">
        <div class="_2kFyHg">
         <label>
          <input class="_3uUUD5" readonly="" type="checkbox"/>
          <div class="_1p7h2j">
          </div>
         </label>
        </div>
       </span>
       <label class="_10TB-Q">
        <span>
         Add to Compare
        </span>
       </label>
      </div>
     </div>
     <div class="_3gDSOa _32A6AP">
      <div class="DsQ2eg">
       <svg class="_2oLiqr" height="16" viewbox="0 0 20 16" width="16" xmlns="http://www.w3.org/2000/svg">
        <path class="_35Y7Yo" d="M8.695 16.682C4.06 12.382 1 9.536 1 6.065 1 3.219 3.178 1 5.95 1c1.566 0 3.069.746 4.05 1.915C10.981 1.745 12.484 1 14.05 1 16.822 1 19 3.22 19 6.065c0 3.471-3.06 6.316-7.695 10.617L10 17.897l-1.305-1.215z" fill="#2874F0" fill-rule="evenodd" opacity=".9" stroke="#FFF">
        </path>
       </svg>
      </div>
     </div>
    </div>
    <div class="_1-2Iqu row">
     <div class="col col-7-12">
      <div class="_3wU53n">
       Samsung Galaxy M01 (Blue, 32 GB)
      </div>
      <div class="niH0FQ">
       <span class="_2_KrJI" id="productRating_LSTMOBFRZZHMHQVNDFAZXGBO6_MOBFRZZHMHQVNDFA_">
        <div class="hGSR34">
         4.2
         <img class="_2lQ_WZ" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMyIgaGVpZ2h0PSIxMiI+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTYuNSA5LjQzOWwtMy42NzQgMi4yMy45NC00LjI2LTMuMjEtMi44ODMgNC4yNTQtLjQwNEw2LjUuMTEybDEuNjkgNC4wMSA0LjI1NC40MDQtMy4yMSAyLjg4Mi45NCA0LjI2eiIvPjwvc3ZnPg=="/>
        </div>
       </span>
       <span class="_38sUEc">
        <span>
         <span>
          5,040 Ratings
         </span>
         <span class="_1VpSqZ">
          &
         </span>
         <span>
          371 Reviews
         </span>
        </span>
       </span>
      </div>
      <div class="_3ULzGw">
       <ul class="vFw0gD">
        <li class="tVe95H">
         3 GB RAM | 32 GB ROM | Expandable Upto 512 GB
        </li>
        <li class="tVe95H">
         14.48 cm (5.7 inch) HD+ Display
        </li>
        <li class="tVe95H">
         13MP + 2MP | 5MP Front Camera
        </li>
        <li class="tVe95H">
         4000 mAh Lithium-ion Battery
        </li>
        <li class="tVe95H">
         Qualcomm Snapdragon (SDM439) Octa Core Processor
        </li>
        <li class="tVe95H">
         1 Year Manufacturer Warranty for Phone and 6 Months Warranty for in the Box Accessories
        </li>
       </ul>
      </div>
     </div>
     <div class="col col-5-12 _2o7WAb">
      <div class="_6BWGkk">
       <div class="_1uv9Cb">
        <div class="_1vC4OE _2rQ-NK">
         ₹9,899
        </div>
       </div>
      </div>
      <div class="_3n6o0t">
       <img height="21" src="//img1a.flixcart.com/www/linchpin/fk-cp-zion/img/fa_8b4b59.png"/>
      </div>
     </div>
    </div>
   </a>
  </div>
 </div>
</div>
				
			

حالا بیایید اولین مورد موجود در صفحه را ببینیم:

				
					container = containers[0]
print(container.div.img["alt"])
				
			
				
					Samsung Galaxy M01 (Blue, 32 GB)


				
			

بنابراین اولین داده‌ای که از صفحه وب Flipkart ، Scrape کرده‌ایم، گوشی هوشمند Samsung Galaxy M01 است. حال بیایید نگاهی به قیمت این گوشی هوشمند بیندازیم:

				
					price = container.findAll("div", {"class": "col col-5-12 _2o7WAb"})
print(price[0].text)
				
			
				
					₹9,899
				
			

حالا بیایید نگاهی به امتیاز مشتریان به این گوشی بیندازیم:

				
					ratings = container.findAll("div", {"class": "niH0FQ"})
print(ratings[0].text)
				
			
				
					4.25,040 Ratings & 371 Reviews
				
			

حالا بیایید یک فایل CSV ایجاد کنیم و تمام گوشی‌های موبایل، نام، قیمت و امتیاز آن‌ها را در آن ذخیره کنیم:

				
					filename = "products.csv"
f = open(filename, "w")
headers = "Product_Name, Pricing, Ratings \n"
f.write(headers)
				
			
				
					32
				
			

حالا بیایید نگاهی به آن‌چه که فایل CSV ما پس از Web Scraping وب سایت Flipkart ذخیره کرده است، بیندازیم:

				
					for container in containers:
    product_name = container.div.img["alt"]
    price_container = container.findAll("div", {"class": "col col-5-12 _2o7WAb"})
    price = price_container[0].text.strip()

    rating_container = container.findAll("div", {"class": "niH0FQ"})
    rating = rating_container[0].text
    print("Product_Name:"+ product_name)
    print("Price: " + price)
    print("Ratings:" + rating)
				
			
				
					Product_Name:Samsung Galaxy M01 (Blue, 32 GB)
Price: ₹9,899
Ratings:4.25,040 Ratings & 371 Reviews
Product_Name:Samsung Galaxy A71 (Haze Crush Silver, 128 GB)
Price: ₹30,999₹34,99911% offNo Cost EMIUpto ₹13,150 Off on Exchange
Ratings:4.41,311 Ratings & 140 Reviews
Product_Name:Samsung Galaxy A31 (Prism Crush Black, 128 GB)
Price: ₹20,999₹23,99912% offNo Cost EMIUpto ₹13,150 Off on Exchange
Ratings:4.32,905 Ratings & 272 Reviews
Product_Name:Samsung Galaxy M11 (Violet, 32 GB)
Price: ₹11,899₹12,6996% off
Ratings:4.24,469 Ratings & 381 Reviews
Product_Name:Samsung Galaxy A31 (Prism Crush Blue, 128 GB)
Price: ₹20,999₹23,99912% offNo Cost EMIUpto ₹13,150 Off on Exchange
Ratings:4.32,905 Ratings & 272 Reviews
Product_Name:Samsung Galaxy A31 (Prism Crush White, 128 GB)
Price: ₹20,999₹23,99912% offNo Cost EMIUpto ₹13,150 Off on Exchange
Ratings:4.32,905 Ratings & 272 Reviews
Product_Name:Samsung Galaxy A21s (White, 64 GB)
Price: ₹15,999₹17,99911% offUpto ₹13,150 Off on Exchange
Ratings:4.23,257 Ratings & 301 Reviews
Product_Name:Samsung Galaxy A21s (Black, 64 GB)
Price: ₹15,999₹17,99911% offUpto ₹13,150 Off on Exchange
Ratings:4.23,257 Ratings & 301 Reviews
Product_Name:Samsung Galaxy A21s (Blue, 64 GB)
Price: ₹15,999₹17,99911% offUpto ₹13,150 Off on Exchange
Ratings:4.23,257 Ratings & 301 Reviews
Product_Name:Samsung Galaxy M11 (Violet, 64 GB)
Price: ₹13,970₹14,2792% off
Ratings:4.22,817 Ratings & 231 Reviews
Product_Name:Samsung Galaxy M31 (Space Black, 64 GB)
Price: ₹18,922No Cost EMI
Ratings:4.4351 Ratings & 30 Reviews
Product_Name:Samsung Galaxy M11 (Metallic Blue, 64 GB)
Price: ₹13,988₹14,8505% off
Ratings:4.22,817 Ratings & 231 Reviews
Product_Name:Samsung Galaxy M11 (Metallic Blue, 32 GB)
Price: ₹11,925
Ratings:4.24,469 Ratings & 381 Reviews
Product_Name:Samsung Galaxy A71 (Prism Crush Black, 128 GB)
Price: ₹30,999₹34,99911% offNo Cost EMIUpto ₹13,150 Off on Exchange
Ratings:4.41,311 Ratings & 140 Reviews
Product_Name:Samsung Galaxy A51 (Prism Crush Black, 128 GB)
Price: ₹23,999₹25,9997% offNo Cost EMIUpto ₹13,150 Off on Exchange
Ratings:4.44,117 Ratings & 470 Reviews
Product_Name:Samsung Galaxy A51 (Prism Crush White, 128 GB)
Price: ₹27,299₹28,9995% off
Ratings:4.4517 Ratings & 33 Reviews
Product_Name:Samsung Guru FM Plus SM-B110E/D
Price: ₹1,662No Cost EMI
Ratings:4.348,448 Ratings & 5,198 Reviews
Product_Name:Samsung Galaxy A51 (Prism Crush Blue, 128 GB)
Price: ₹23,999₹25,9997% offNo Cost EMIUpto ₹13,150 Off on Exchange
Ratings:4.44,117 Ratings & 470 Reviews
Product_Name:Samsung Galaxy M01 (Black, 32 GB)
Price: ₹9,779₹9,9992% off
Ratings:4.25,040 Ratings & 371 Reviews
Product_Name:Samsung Galaxy M11 (Black, 32 GB)
Price: ₹11,865
Ratings:4.24,469 Ratings & 381 Reviews
Product_Name:Samsung Galaxy M30S (Black, 128 GB)
Price: ₹17,736₹17,9961% offNo Cost EMI
Ratings:4.33,317 Ratings & 295 Reviews
Product_Name:Samsung Galaxy M40 (Seawater Blue, 128 GB)
Price: ₹21,490No Cost EMI
Ratings:4.2691 Ratings & 50 Reviews
Product_Name:Samsung Galaxy S10 Lite (Prism Blue, 128 GB)
Price: ₹42,999₹43,9992% offNo Cost EMIUpto ₹13,150 Off on Exchange
Ratings:4.59,675 Ratings & 2,410 Reviews
Product_Name:Samsung Galaxy A21s (Blue, 64 GB)
Price: ₹17,499₹19,99912% offUpto ₹13,150 Off on Exchange
Ratings:4.31,268 Ratings & 118 Reviews
				
			

تمرین پروژه پایتون: تحلیل داده‌های اینستاگرام (Scraping Instagram)

تا اینجا حتماً با مفهوم Web Scraping آشنا شده‌اید. در این تمرین پروژه پایتون، ما کار متفاوتی با این تسک انجام می‌دهیم، یعنی Scraping Instagram با پایتون. تا زمانی که در نوشتن نام کاربری و رمز عبور خود ارور دریافت نکنید، این کار سختی نیست. در این‌جا چند تکنیک به شما نشان خواهم داد که با روشی بسیار آسان، به شما در Scraping Instagram کمک می‌کند.

برای Scraping Instagram ، از کتابخانه‌ای به نام instaloader استفاده می‌کنیم که یک API برای این کار در اختیار ما قرار می‌دهد. شما می‌توانید این کتابخانه را با استفاده از متد pip در ترمینال خود نصب کنید:

				
					pip install instaloader
				
			

حالا اگر این پکیج را نصب کرده‌اید، بیایید کارمان را شروع کنیم:

Scraping Instagram با پایتون چگونه است؟

اول از همه، باید بگویم که اگر در حال یادگیری Data Science هستید، Scraping Instagram در به دست آوردن ترندهای جدید کسب و کارها به شما کمک می‌کند. به طوری که می‌توانید سرنخ‌های بیشتری ایجاد کرده و به مشتریان بالقوه جدیدی دست پیدا کنید. حالا بیایید کار خود را با Scraping پروفایل کاربران اینستاگرام در این تمرین پروژه پایتون شروع کنیم:

				
					# Import the module
!pip install instaloader
import instaloader

# Create an instance of Instaloader class
bot = instaloader.Instaloader()

# Load a profile from an Instagram handle
profile = instaloader.Profile.from_username(bot.context, 'aman.kharwal')

print(type(profile))
				
			
				
					<Profile aman.kharwal (1986707800)>


				
			

حالا بیایید ببینیم چگونه می‌توانیم از پروفایل اینستاگرام این افراد، اطلاعات ارزشمندی استخراج کنیم:

				
					print("Username: ", profile.username)
print("User ID: ", profile.userid)
print("Number of Posts: ", profile.mediacount)
print("Followers: ", profile.followers)
print("Followees: ", profile.followees)
print("Bio: ", profile.biography,profile.external_url)
				
			
				
					Username: aman.kharwal User ID: 1986707800 Number of Posts: 105 Followers: 521 Followees: 154 Bio: Data Scientist thecleverprogrammer.com Data Science | Machine Learning | AI | Python https://thecleverprogrammer.com/2020/07/20/next-word-prediction-model/
				
			

حالا بیایید ببینیم چگونه می‌توانید با استفاده از پایتون وارد پروفایل اینستاگرام خود شوید:

				
					# Login with username and password in the script
bot.login(user="your username",passwd="your password")

# Interactive login on terminal
bot.interactive_login("your username") # Asks for password in the terminal
				
			

فکر می‌کنید چگونه وارد سیستم شدید؟ ورود به سیستم برای بسیاری از متدها بسیار مهم است. پس بهتر است آن را بیشتر بررسی کنیم.

Scraping فالوورها و فالووینگ‌های اینستاگرام

Scraping فالوورها و فالووینگ‌ها به شما کمک می‌کند تا لیستی از نام‌های کاربری آن‌ها را به دست آورید. این کاری است که شما در یک محیط حرفه‌ای Data Science باید انجام دهید:

				
					# Retrieve the usernames of all followers
followers = [follower.username for follower in profile.get_followers()]

# Retrieve the usernames of all followees
followees = [followee.username for followee in profile.get_followees()]
print(followers)
				
			

دانلود پست‌ها از یک پروفایل دیگر

دریافت پست از پروفایل‌های دیگر، کار سختی در پایتون نیست. فقط باید از ()get_posts استفاده کنیم. من این متد را در پروفایل شخص دیگری انجام می‌دهم. برای دانلود هر پست، باید با استفاده از متد ()download_post روی generator object حلقه بزنیم. حالا بیایید این کار را مرور کنیم:

				
					# Load a new profile
profile = instaloader.Profile.from_username(bot.context, 'wwe')

# Get all posts in a generator object
posts = profile.get_posts()

# Iterate and download
for index, post in enumerate(posts, 1):
    bot.download_post(post, target=f"{profile.username}_{index}")
				
			

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

تمرین پروژه پایتون: فیلتر کردن تصویر با یادگیری ماشین

فیلتر کردن تصویر به منظور بهبود تصاویر و کاهش نویز انجام می‌شود. این فناوری تقریباً در تمام گوشی‌های هوشمند وجود دارد. بهبود تصویر با استفاده از تکنیک‌های فیلترینگ، می‌تواند به فرآیند تشخیص اشیا، تشخیص چهره و تمام تسک‌های مربوط به Computer Vision کمک کند. در این تمرین پروژه پایتون، من شما را با چند روش در پایتون برای فیلتر کردن تصاویر با یادگیری ماشین آشنا می‌کنم.

فیلتر کردن تصویر با استفاده از Mean Filter

Mean Filter برای ایجاد افکت blur در یک تصویر برای حذف نویز موجود استفاده می‌شود. این روش mean پیکسل‌ها را در متد n×n تعیین می‌کند. سپس intensity پیکسل‌ها را با mean جایگزین می‌کند. این کار مقداری از نویز موجود در تصویر را کاهش می‌دهد و آستانه‌های تصویر (edges) را بهبود می‌بخشد.

بیایید فیلتر کردن تصویر با استفاده از متد mean filter را مرور کنیم. من در این تمرین پروژه پایتون، این کار را با وارد کردن تمام کتابخانه‌ها و تصویری از CM Punk ، سوپراستار کشتی کچ شروع می‌کنم تا تکنیک‌های فیلترینگ تصویر در یادگیری ماشین را بررسی کنم.

				
					import numpy as np
import cv2
from matplotlib import pyplot as plt
from PIL import Image, ImageFilter
%matplotlib inline
image = cv2.imread('cm.jpg') # reads the image
image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) # convert to HSV
figure_size = 9 # the dimension of the x and y axis of the kernal.
new_image = cv2.blur(image,(figure_size, figure_size))
plt.figure(figsize=(11,6))
plt.subplot(121), plt.imshow(cv2.cvtColor(image, cv2.COLOR_HSV2RGB)),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(cv2.cvtColor(new_image, cv2.COLOR_HSV2RGB)),plt.title('Mean filter')
plt.xticks([]), plt.yticks([])
plt.show()
				
			
فیلتر کردن تصویر با استفاده از Mean Filter

شکل بالا نشان می‌دهد که مقداری از نویز کاهش یافته، اما اکنون علائمی در تصویر وجود دارند که قبلاً نبودند. بیایید ببینیم اگر تصویر را در مقیاس grayscale فیلتر کنیم، این علائم همچنان ظاهر می‌شوند یا خیر:

				
					# The image will first be converted to grayscale
image2 = cv2.cvtColor(image, cv2.COLOR_HSV2BGR)
image2 = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY)
figure_size = 9
new_image = cv2.blur(image2,(figure_size, figure_size))
plt.figure(figsize=(11,6))
plt.subplot(121), plt.imshow(image2, cmap='gray'),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(new_image, cmap='gray'),plt.title('Mean filter')
plt.xticks([]), plt.yticks([])
plt.show()
				
			
تمرین پروژه پایتون - grayscale کردن تصویر mean

همانطور که می‌بینید، پس از فیلتر کردن این تصویر در مقیاس grayscale ، علائم دیگر ظاهر نمی‌شوند. با این حال، ما کمی از صافی تصویر را از دست داده‌ایم که باید با استفاده از یک فیلتر دیگر، آن را برطرف کنیم.

فیلتر کردن تصویر با استفاده از Gaussian Filter

Gaussian Filter بسیار شبیه به Mean Filter است، اما شامل weighted mean پیکسل‌ها با پارامتری به عنوان sigma است. بیایید از طریق این روش، تصویرمان را فیلتر کنیم:

				
					new_image = cv2.GaussianBlur(image, (figure_size, figure_size),0)
plt.figure(figsize=(11,6))
plt.subplot(121), plt.imshow(cv2.cvtColor(image, cv2.COLOR_HSV2RGB)),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(cv2.cvtColor(new_image, cv2.COLOR_HSV2RGB)),plt.title('Gaussian Filter')
plt.xticks([]), plt.yticks([])
plt.show()
				
			
فیلتر کردن تصویر با استفاده از Gaussian Filter

شکل بالا در مقایسه با Mean Filter ، بهتر فیلتر شده است. اگرچه هنوز برخی از علائمی که در Mean Filter می‌دیدیم، در آن وجود دارند. حالا بیایید ببینیم که آیا Gaussian Filter وقتی به مقیاس grayscale تبدیل می‌شود، علائم را حذف می‌کند یا خیر.

				
					new_image_gauss = cv2.GaussianBlur(image2, (figure_size, figure_size),0)
plt.figure(figsize=(11,6))
plt.subplot(121), plt.imshow(image2, cmap='gray'),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(new_image_gauss, cmap='gray'),plt.title('Gaussian Filter')
plt.xticks([]), plt.yticks([])
plt.show()
				
			
تمرین پروژه پایتون - grayscale کردن تصویر gausian

همانطور که می‌بینید، علائم در افکت grayscale حذف می‌شوند. حالا بیایید به روش بعدی فیلتر کردن تصویر در این تمرین پروژه پایتون برویم.

فیلتر کردن تصویر با استفاده از Median Filter

Median Filter ، به محاسبه median موجود در intensity پیکسل‌ها می‌پردازد. سپس norm را با intensity مربوط به mean پیکسل‌ها جایگزین می‌کند. بیایید این تکنیک را مرور کنیم:

				
					new_image = cv2.medianBlur(image, figure_size)
plt.figure(figsize=(11,6))
plt.subplot(121), plt.imshow(cv2.cvtColor(image, cv2.COLOR_HSV2RGB)),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(cv2.cvtColor(new_image, cv2.COLOR_HSV2RGB)),plt.title('Median Filter')
plt.xticks([]), plt.yticks([])
plt.show()
				
			
فیلتر کردن تصویر با استفاده از Median Filter

افکت median با حذف نویز تصویر، خروجی بهتری به جای می‌گذارد. همچنین هیچ کدام از علائمی را که در فیلتر کردن تصویر به روش‌های بالا دیدیم، به جای نمی‌گذارد. حالا بیایید آن را به یک تصویر grayscale تبدیل کنیم:

				
					new_image = cv2.medianBlur(image2, figure_size)
plt.figure(figsize=(11,6))
plt.subplot(121), plt.imshow(image2, cmap='gray'),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(new_image, cmap='gray'),plt.title('Median Filter')
plt.xticks([]), plt.yticks([])
plt.show()
				
			
تمرین پروژه پایتون - grayscale کردن تصویر median

در خروجی می‌بینیم که Median Filter نویز را حذف کرده و همچنین آستانه‌ها را هنگام تبدیل به یک تصویر grayscale حفظ می‌کند. حالا که فیلترهای مختلف را امتحان کردیم، من یک تابع برای طراحی فیلتر تصویر خودم ایجاد می‌کنم.

ساخت فیلتر خودمان

حالا من فیلتر خودم را برای فیلتر کردن تصاویر می‌سازم تا بتوانم کیفیت تصاویر و شفافیت آن‌ها را بالا ببرم. در ابتدا، باید یک تابع برای طراحی فیلتر تصویر خودم ایجاد کنم:

				
					def aman_effect(data, filter_size):
  temp = []
  indexer = filter_size // 2
  new_image = data.copy()
  nrow, ncol = data.shape
  for i in range(nrow):
    for j in range(ncol):
      for k in range(i-indexer, i+indexer+1):
        for m in range(j-indexer, j+indexer+1):
          if (k &gt; -1) and (k &lt; nrow):
            if (m &gt; -1) and (m &lt; ncol):
              temp.append(data[k,m])
      temp.remove(data[i,j])
      max_value = max(temp)
      min_value = min(temp)
      if data[i,j] &gt; max_value:
        new_image[i,j] = max_value
      elif data[i,j] &lt; min_value:
        new_image[i,j] = min_value
        temp =[]
    return new_image.copy()
				
			

حالا بیایید از فیلتر خود برای بهبود کیفیت تصویر grayscale استفاده کنیم:

				
					new_image = aman_effect(image2,5)
plt.figure(figsize=(11,6))
plt.subplot(121), plt.imshow(image2, cmap='gray'),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(new_image, cmap='gray'),plt.title('Image Filteration')
plt.xticks([]), plt.yticks([])
plt.show()
				
			
ساخت فیلتر شخصی در تمرین پروژه پایتون

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

تمرین پروژه پایتون: پردازش صدا

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

همه این موارد را می‌توان در یک تمرین پروژه پایتون انجام داد. پایتون یک زبان برنامه نویسی منعطف است و تقریباً برای هر کاری که تا به حال به گوشتان خورده، کتابخانه‌ خاصی دارد. پایتون برای پردازش صدا، کتابخانه Pydub را ارائه می‌دهد که یک ماژول بسیار ساده بوده و به خوبی طراحی شده است.

نصب Pydub

درست مانند همه ماژول‌های دیگر پایتون، Pydub را هم می‌توان به راحتی و با استفاده از یک دستور ساده نصب کرد:

				
					pip install pydub
				
			

پردازش صدا: Loading و Playing

AudioSegment کلاس والد Pydub است. این کلاس نقش یک container را بازی می‌کند که می‌تواند فایل‌های صوتی را بارگیری، دستکاری و ذخیره نماید. بیایید اولین فایل صوتی خود را با پایتون بسازیم. برای این کار، به یک فایل آزمایشی نیاز داریم که می‌تواند در هر فرمتی مثل WAV ، MP3 یا غیره باشد. در این مقاله، من یک فایل صوتی دقیقاً مانند داده‌هایی که می‌توانیم از وب Scrape کنیم را دانلود می‌کنم:

				
					import urllib.request
from pydub import AudioSegment
from pydub.playback import play
# Download an audio file
urllib.request.urlretrieve("https://tinyurl.com/wx9amev", "metallic-drums.wav")
# Load into PyDub
loop = AudioSegment.from_wav("metallic-drums.wav")
# Play the result
play(loop)
				
			

پردازش صوتی پایه (Basic Audio Processing)

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

				
					# Repeat 2 times
loop2 = loop * 2
# Get length in milliseconds
length = len(loop2)
# Set fade time
fade_time = int(length * 0.5)
# Fade in and out
faded = loop2.fade_in(fade_time).fade_out(fade_time)
				
			

لایه بندی صدا (Layering Audio)

کاری که در بالا انجام دادیم، تکرار صدا به سادگی هر چه تمام‌تر بود. حالا بیایید بخش‌های مختلف صدا را با سطوح مختلف دستکار، لایه‌بندی کرده و میکس کنیم:

				
					# Download another loop
urllib.request.urlretrieve("https://tinyurl.com/yx3k5kw5", "beat.wav")
# Load into PyDub
beat = AudioSegment.from_wav("beat.wav")
# Mix with our original loop
mixed = beat[:length].overlay(loop2)
				
			

پردازش صدا: اعمال فیلترها

حالا بیایید با استفاده از فیلترها و معکوس کردن جلوه‌های صوتی، همه چیز را در کنار هم قرار دهیم:

				
					# Filter the beat at 3kHz
filtered = beat.low_pass_filter(3000)
# Mix loop2 with a reversed, panned version
loop = loop2.reverse().pan(-0.5).overlay(loop2.pan(0.5))
# Mix our filtered beat with the new loop at -3dB
final = filtered.overlay(loop2 - 3, loop=True)
				
			

اکنون اگر می‌خواهید فایل صوتی خود را ذخیره کنید، می‌توانید این کار را به راحتی به صورت زیر انجام دهید:

				
					final.export("final.mp3", format="mp3")

				
			

Synthesizing Tunes

به جز تمام مراحل دستکاری صدا که در این تمرین پروژه پایتون توضیح دادیم، می‌توانیم آهنگ‌های جدیدی را نیز synthesize کنیم. این آهنگ‌ها می‌توانند سینوسی، مربعی و به صورت امواج دستکاری‌شده در هر فرکانسی باشند. ما همچنین می‌توانیم نویز سفید (white noise) را اجرا کنیم. در مثال زیر، من متد سینوسی (sine method) را برای تولید tuning سینوسی برای 15 بازه اولیه به صورت هارمونیک، نشان خواهم داد:

				
					# Create an empty AudioSegment
result = AudioSegment.silent(duration=0)
# Loop over 0-14
for n in range(15):
    # Generate a sine tone with frequency 200 * n
    gen = Sine(200 * n)
    # AudioSegment with duration 200ms, gain -3
    sine  = gen.to_audio_segment(duration=200).apply_gain(-3)
    # Fade in / out
    sine = sine.fade_in(50).fade_out(100)
    # Append the sine to our result
    result += sine
# Play the result
play(result)
				
			

تمرین پروژه پایتون: ساعت آنالوگ

تمرین پروژه پایتون: ساعت آنالوگ

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

در این تمرین پروژه پایتون، من یک GUI ساعت آنالوگ ساده با استفاده از Tkinter خواهم ساخت.

فایل‌های مورد نیاز را می‌تونید از این‌جا دانلود کنید:

ساعت / دانلود

				
					try:
	import Tkinter
except:
	import tkinter as Tkinter

import math	# Required For Coordinates Calculation
import time	# Required For Time Handling
#
#
# class
class main(Tkinter.Tk):
	def __init__(self):
		Tkinter.Tk.__init__(self)
		self.x=150	# Center Point x
		self.y=150	# Center Point
		self.length=50	# Stick Length
		self.creating_all_function_trigger()

	# Creating Trigger For Other Functions
	def creating_all_function_trigger(self):
		self.create_canvas_for_shapes()
		self.creating_background_()
		self.creating_sticks()
		return

	# Creating Background
	def creating_background_(self):
		self.image=Tkinter.PhotoImage(file='clock.gif')
		self.canvas.create_image(150,150, image=self.image)
		return

	# creating Canvas
	def create_canvas_for_shapes(self):
		self.canvas=Tkinter.Canvas(self, bg='black')
		self.canvas.pack(expand='yes',fill='both')
		return

	# Creating Moving Sticks
	def creating_sticks(self):
		self.sticks=[]
		for i in range(3):
			store=self.canvas.create_line(self.x, self.y,self.x+self.length,self.y+self.length,width=2, fill='red')
			self.sticks.append(store)
		return

	# Function Need Regular Update
	def update_class(self):
		now=time.localtime()
		t = time.strptime(str(now.tm_hour), "%H")
		hour = int(time.strftime( "%I", t ))*5
		now=(hour,now.tm_min,now.tm_sec)
		# Changing Stick Coordinates
		for n,i in enumerate(now):
			x,y=self.canvas.coords(self.sticks[n])[0:2]
			cr=[x,y]
			cr.append(self.length*math.cos(math.radians(i*6)-math.radians(90))+self.x)
			cr.append(self.length*math.sin(math.radians(i*6)-math.radians(90))+self.y)
			self.canvas.coords(self.sticks[n], tuple(cr))
		return

# Main Function Trigger
if __name__ == '__main__':
	root=main()

	# Creating Main Loop
	while True:
		root.update()
		root.update_idletasks()
		root.update_class()
				
			
{{ reviewsTotal }}{{ options.labels.singularReviewCountLabel }}
{{ reviewsTotal }}{{ options.labels.pluralReviewCountLabel }}
{{ options.labels.newReviewButton }}
{{ userData.canReview.message }}
X