मुख्य सामग्री पर जाएं

Python (और Beautiful Soup) का उपयोग करके वेब स्क्रैपिंग

इस ट्यूटोरियल में, आप वेब से डेटा निकालना, Python की Pandas लाइब्रेरी से डेटा में बदलाव और सफाई करना, और Python की Matplotlib लाइब्रेरी से डेटा विज़ुअलाइज़ करना सीखेंगे।
अपडेट किया गया 24 सित॰ 2026  · 14 मि॰ पढ़ें

AI के साथ खोजें

ChatGPTClaudePerplexity

वेब स्क्रैपिंग वह प्रक्रिया है जिसमें किसी प्रोग्राम या एल्गोरिदम का उपयोग करके वेब से बड़े पैमाने पर डेटा निकाला और प्रोसेस किया जाता है। चाहे आप डेटा साइंटिस्ट हों, इंजीनियर हों, या बड़े डेटासेट का विश्लेषण करने वाले कोई भी पेशेवर हों—वेब से डेटा स्क्रैप करने की क्षमता एक उपयोगी कौशल है। मान लीजिए आपको वेब पर डेटा मिलता है और उसे सीधे डाउनलोड करने का कोई तरीका नहीं है, तो Python का उपयोग करके वेब स्क्रैपिंग ऐसा कौशल है जिसकी मदद से आप डेटा को ऐसे रूप में निकाल सकते हैं जिसे आयात किया जा सके।

इस ट्यूटोरियल में, आप निम्नलिखित सीखेंगे:

  • Python के Beautiful Soup मॉड्यूल का उपयोग करके वेब से डेटा निकालना
  • Python की Pandas लाइब्रेरी का उपयोग करके डेटा में बदलाव और सफाई
  • Python की Matplotlib लाइब्रेरी का उपयोग करके डेटा विज़ुअलाइज़ेशन

इस ट्यूटोरियल में उपयोग किया गया डेटासेट जून 2017 में Hillsboro, OR में आयोजित 10K रेस से लिया गया है। विशेष रूप से, आप 10K धावकों के प्रदर्शन का विश्लेषण करेंगे और निम्नलिखित प्रश्नों के उत्तर देंगे:

  • धावकों का औसत फिनिश समय क्या था?
  • क्या धावकों के फिनिश समय सामान्य वितरण का पालन करते थे?
  • क्या विभिन्न आयु समूहों में पुरुषों और महिलाओं के प्रदर्शन में कोई अंतर था?

Beautiful Soup का उपयोग करके वेब स्क्रैपिंग

Jupyter Notebook का उपयोग करते हुए, आपको आवश्यक मॉड्यूल (pandas, numpy, matplotlib.pyplot, Seaborn) इम्पोर्ट करके शुरू करना चाहिए। यदि आपके पास Jupyter Notebook इंस्टॉल नहीं है, तो मैं इंटरनेट पर उपलब्ध Anaconda Python डिस्ट्रीब्यूशन के जरिए इसे इंस्टॉल करने की सलाह देता/देती हूं। प्लॉट्स को आसानी से दिखाने के लिए, नीचे दिखाए अनुसार लाइन %matplotlib inline शामिल करना सुनिश्चित करें।

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

वेब स्क्रैपिंग करने के लिए, आपको नीचे दिखाए गए लाइब्रेरी भी इम्पोर्ट करनी चाहिए। urllib.request मॉड्यूल URLs खोलने के लिए उपयोग किया जाता है। BeautifulSoup पैकेज html फाइलों से डेटा निकालने के लिए उपयोग होता है। BeautifulSoup लाइब्रेरी का नाम bs4 है, जिसका अर्थ है BeautifulSoup, संस्करण 4।

from urllib.request import urlopen
from bs4 import BeautifulSoup

आवश्यक मॉड्यूल इम्पोर्ट करने के बाद, आपको डेटासेट वाला URL निर्दिष्ट करना चाहिए और पेज का html पाने के लिए उसे urlopen() में पास करना चाहिए।

url = "http://www.hubertiming.com/results/2017GPTR10K"
html = urlopen(url)

पेज का html पाना सिर्फ पहला चरण है। अगला चरण html से एक BeautifulSoup ऑब्जेक्ट बनाना है। यह BeautifulSoup() फंक्शन में html पास करके किया जाता है। BeautifulSoup पैकेज html को पार्स करने के लिए उपयोग होता है, यानी कच्चे html टेक्स्ट को लेकर उसे Python ऑब्जेक्ट्स में तोड़ना। दूसरा आर्ग्युमेंट lxml एक html पार्सर है, जिसकी बारीकियों की चिंता आपको अभी करने की ज़रूरत नहीं है।

soup = BeautifulSoup(html, 'lxml')
type(soup)
bs4.BeautifulSoup

soup ऑब्जेक्ट आपको उस वेबसाइट के बारे में रोचक जानकारी निकालने देता है जिसे आप स्क्रैप कर रहे हैं—जैसे कि नीचे दिखाए अनुसार पेज का शीर्षक प्राप्त करना।

# Get the title
title = soup.title
print(title)
<title>2017 Intel Great Place to Run 10K \ Urban Clash Games Race Results</title>

आप वेबपेज का टेक्स्ट भी ले सकते हैं और जल्दी से प्रिंट कर सकते हैं ताकि जांच सकें कि यह वैसा ही है जैसा आप अपेक्षा करते हैं।

# Print out the text
text = soup.get_text()
#print(soup.text)

आप वेबपेज का html देखने के लिए वेबपेज पर कहीं भी राइट-क्लिक करके "Inspect" चुन सकते हैं। परिणाम कुछ ऐसा दिखता है।

beautiful soup के साथ एक्सट्रैक्शन के लिए गुण पहचानने हेतु वेबपेज इंस्पेक्ट करें

आप वेबपेज के भीतर उपयोगी html टैग्स निकालने के लिए soup की find_all() मेथड का उपयोग कर सकते हैं। उपयोगी टैग्स के उदाहरणों में हाइपरलिंक के लिए < a >, तालिकाओं के लिए < table >, टेबल रो के लिए < tr >, टेबल हेडर के लिए < th >, और टेबल सेल्स के लिए < td > शामिल हैं। नीचे दिया गया कोड वेबपेज के भीतर सभी हाइपरलिंक्स निकालना दिखाता है।

soup.find_all('a')
[<a class="btn btn-primary btn-lg" href="/results/2017GPTR" role="button">5K</a>,
 <a href="http://hubertiming.com">Huber Timing Home</a>,
 <a href="#individual">Individual Results</a>,
 <a href="#team">Team Results</a>,
 <a href="mailto:timing@hubertiming.com">timing@hubertiming.com</a>,
 <a href="#tabs-1" style="font-size: 18px">Results</a>,
 <a name="individual"></a>,
 <a name="team"></a>,
 <a href="http://www.hubertiming.com"><img height="65" src="/sites/all/themes/hubertiming/images/clockWithFinishSign_small.png" width="50"/>Huber Timing</a>,
 <a href="http://facebook.com/hubertiming"><img src="/results/FB-f-Logo__blue_50.png"/></a>]

जैसा कि आप ऊपर के आउटपुट से देख सकते हैं, html टैग्स कभी-कभी class, src आदि जैसे एट्रिब्यूट्स के साथ आते हैं। ये एट्रिब्यूट्स html एलिमेंट्स के बारे में अतिरिक्त जानकारी प्रदान करते हैं। आप एक for लूप और get("href") मेथड का उपयोग करके केवल हाइपरलिंक्स निकालकर प्रिंट कर सकते हैं।

all_links = soup.find_all("a")
for link in all_links:
    print(link.get("href"))
/results/2017GPTR
http://hubertiming.com/
#individual
#team
mailto:timing@hubertiming.com
#tabs-1
None
None
http://www.hubertiming.com/
http://facebook.com/hubertiming/

सिर्फ टेबल की रो प्रिंट करने के लिए, soup.find_all() में tr आर्ग्युमेंट पास करें।

# Print the first 10 rows for sanity check
rows = soup.find_all('tr')
print(rows[:10])
[<tr><td>Finishers:</td><td>577</td></tr>, <tr><td>Male:</td><td>414</td></tr>, <tr><td>Female:</td><td>163</td></tr>, <tr class="header">
<th>Place</th>
<th>Bib</th>
<th>Name</th>
<th>Gender</th>
<th>City</th>
<th>State</th>
<th>Chip Time</th>
<th>Chip Pace</th>
<th>Gender Place</th>
<th>Age Group</th>
<th>Age Group Place</th>
<th>Time to Start</th>
<th>Gun Time</th>
<th>Team</th>
</tr>, <tr>
<td>1</td>
<td>814</td>
<td>JARED WILSON</td>
<td>M</td>
<td>TIGARD</td>
<td>OR</td>
<td>00:36:21</td>
<td>05:51</td>
<td>1 of 414</td>
<td>M 36-45</td>
<td>1 of 152</td>
<td>00:00:03</td>
<td>00:36:24</td>
<td></td>
</tr>, <tr>
<td>2</td>
<td>573</td>
<td>NATHAN A SUSTERSIC</td>
<td>M</td>
<td>PORTLAND</td>
<td>OR</td>
<td>00:36:42</td>
<td>05:55</td>
<td>2 of 414</td>
<td>M 26-35</td>
<td>1 of 154</td>
<td>00:00:03</td>
<td>00:36:45</td>
<td>INTEL TEAM F</td>
</tr>, <tr>
<td>3</td>
<td>687</td>
<td>FRANCISCO MAYA</td>
<td>M</td>
<td>PORTLAND</td>
<td>OR</td>
<td>00:37:44</td>
<td>06:05</td>
<td>3 of 414</td>
<td>M 46-55</td>
<td>1 of 64</td>
<td>00:00:04</td>
<td>00:37:48</td>
<td></td>
</tr>, <tr>
<td>4</td>
<td>623</td>
<td>PAUL MORROW</td>
<td>M</td>
<td>BEAVERTON</td>
<td>OR</td>
<td>00:38:34</td>
<td>06:13</td>
<td>4 of 414</td>
<td>M 36-45</td>
<td>2 of 152</td>
<td>00:00:03</td>
<td>00:38:37</td>
<td></td>
</tr>, <tr>
<td>5</td>
<td>569</td>
<td>DEREK G OSBORNE</td>
<td>M</td>
<td>HILLSBORO</td>
<td>OR</td>
<td>00:39:21</td>
<td>06:20</td>
<td>5 of 414</td>
<td>M 26-35</td>
<td>2 of 154</td>
<td>00:00:03</td>
<td>00:39:24</td>
<td>INTEL TEAM F</td>
</tr>, <tr>
<td>6</td>
<td>642</td>
<td>JONATHON TRAN</td>
<td>M</td>
<td>PORTLAND</td>
<td>OR</td>
<td>00:39:49</td>
<td>06:25</td>
<td>6 of 414</td>
<td>M 18-25</td>
<td>1 of 34</td>
<td>00:00:06</td>
<td>00:39:55</td>
<td></td>
</tr>]

इस ट्यूटोरियल का लक्ष्य किसी वेबपेज से एक तालिका लेकर उसे Python के जरिए आसान हेरफेर हेतु एक डेटाफ़्रेम में बदलना है। वहां तक पहुंचने के लिए, पहले आपको सभी टेबल रो एक सूची के रूप में लेनी चाहिए और फिर उस सूची को डेटाफ़्रेम में बदलना चाहिए। नीचे एक for लूप दिया गया है जो टेबल रो पर इटेरेट करता है और रो की कोशिकाओं (सेल्स) को प्रिंट करता है।

for row in rows:
    row_td = row.find_all('td')
print(row_td)
type(row_td)
[<td>14TH</td>, <td>INTEL TEAM M</td>, <td>04:43:23</td>, <td>00:58:59 - DANIELLE CASILLAS</td>, <td>01:02:06 - RAMYA MERUVA</td>, <td>01:17:06 - PALLAVI J SHINDE</td>, <td>01:25:11 - NALINI MURARI</td>]

bs4.element.ResultSet

ऊपर का आउटपुट दिखाता है कि प्रत्येक रो html टैग्स के साथ प्रिंट होती है। यह वह नहीं है जो आप चाहते हैं। आप Beautiful Soup या रेगुलर एक्सप्रेशंस का उपयोग करके html टैग्स हटा सकते हैं।

html टैग्स हटाने का सबसे आसान तरीका BeautifulSoup का उपयोग करना है, और यह सिर्फ एक लाइन कोड से हो जाता है। इच्छित स्ट्रिंग को BeautifulSoup() में पास करें और get_text() मेथड का उपयोग करके बिना html टैग्स के टेक्स्ट निकालें।

str_cells = str(row_td)
cleantext = BeautifulSoup(str_cells, "lxml").get_text()
print(cleantext)
[14TH, INTEL TEAM M, 04:43:23, 00:58:59 - DANIELLE CASILLAS, 01:02:06 - RAMYA MERUVA, 01:17:06 - PALLAVI J SHINDE, 01:25:11 - NALINI MURARI]

रेगुलर एक्सप्रेशंस का उपयोग करना काफ़ी हतोत्साहित किया जाता है क्योंकि इसमें कई लाइनों का कोड लगता है और गलती करना आसान है। इसके लिए re (रेगुलर एक्सप्रेशंस) मॉड्यूल इम्पोर्ट करना होता है। नीचे दिया गया कोड दिखाता है कि कैसे एक रेगुलर एक्सप्रेशन बनाया जाए जो < td > html टैग्स के भीतर के सभी कैरेक्टर्स ढूंढे और हर टेबल रो के लिए उन्हें खाली स्ट्रिंग से बदल दे। पहले, re.compile() में मिलान करने वाली स्ट्रिंग पास करके रेगुलर एक्सप्रेशन कम्पाइल करें। डॉट, स्टार और प्रश्नचिह्न (.*?) एक प्रारंभिक एंगल ब्रैकेट, उसके बाद कुछ भी, और फिर समापन एंगल ब्रैकेट से मेल खाएगा। यह नॉन-ग्रीडी ढंग से टेक्स्ट मैच करता है, यानी सबसे छोटा संभव स्ट्रिंग। यदि आप प्रश्नचिह्न हटा दें, तो यह पहले ओपनिंग एंगल ब्रैकेट और आखिरी क्लोज़िंग एंगल ब्रैकेट के बीच का सारा टेक्स्ट मैच करेगा। रेगुलर एक्सप्रेशन कम्पाइल करने के बाद, आप re.sub() मेथड का उपयोग करके उन सभी सबस्ट्रिंग्स को खोजते हैं जहां रेगुलर एक्सप्रेशन मैच करता है और उन्हें खाली स्ट्रिंग से बदलते हैं। नीचे दिया गया पूरा कोड एक खाली सूची बनाता है, प्रत्येक रो के html टैग्स के बीच का टेक्स्ट निकालता है, और उसे निर्दिष्ट सूची में जोड़ता है।

import re

list_rows = []
for row in rows:
    cells = row.find_all('td')
    str_cells = str(cells)
    clean = re.compile('<.*?>')
    clean2 = (re.sub(clean, '',str_cells))
    list_rows.append(clean2)
print(clean2)
type(clean2)
[14TH, INTEL TEAM M, 04:43:23, 00:58:59 - DANIELLE CASILLAS, 01:02:06 - RAMYA MERUVA, 01:17:06 - PALLAVI J SHINDE, 01:25:11 - NALINI MURARI]

str

अगला चरण सूची को डेटाफ़्रेम में बदलना है और Pandas का उपयोग करके पहले 10 रो का एक त्वरित दृश्य प्राप्त करना है।

df = pd.DataFrame(list_rows)
df.head(10)
  0
0 [Finishers:, 577]
1 [Male:, 414]
2 [Female:, 163]
3 []
4 [1, 814, JARED WILSON, M, TIGARD, OR, 00:36:21...
5 [2, 573, NATHAN A SUSTERSIC, M, PORTLAND, OR, ...
6 [3, 687, FRANCISCO MAYA, M, PORTLAND, OR, 00:3...
7 [4, 623, PAUL MORROW, M, BEAVERTON, OR, 00:38:...
8 [5, 569, DEREK G OSBORNE, M, HILLSBORO, OR, 00...
9 [6, 642, JONATHON TRAN, M, PORTLAND, OR, 00:39...

लोकप्रिय कोर्स

Python में Web Scraping

BasicSkill Level
4 घंटा
94.2K learners
इंटरनेट से जानकारी प्राप्त और पार्स करना सीखें Python लाइब्रेरी scrapy का उपयोग करके।
See DetailsRight Arrow
Start Course

डेटा में बदलाव और सफाई

डेटाफ़्रेम मनचाहे प्रारूप में नहीं है। इसे साफ करने के लिए, आपको "0" कॉलम को कॉमा की स्थिति पर कई कॉलम में विभाजित करना चाहिए। यह str.split() मेथड का उपयोग करके किया जाता है।

df1 = df[0].str.split(',', expand=True)
df1.head(10)
डेटाफ़्रेम 1

यह अब बेहतर दिखता है, लेकिन काम अभी बाकी है। डेटाफ़्रेम की प्रत्येक रो के चारों ओर अवांछित स्क्वेयर ब्रैकेट हैं। आप कॉलम "0" पर ओपनिंग स्क्वेयर ब्रैकेट हटाने के लिए strip() मेथड का उपयोग कर सकते हैं।

df1[0] = df1[0].str.strip('[')
df1.head(10)
डेटाफ़्रेम 2

तालिका में टेबल हेडर नहीं हैं। आप टेबल हेडर प्राप्त करने के लिए find_all() मेथड का उपयोग कर सकते हैं।

col_labels = soup.find_all('th')

टेबल रो की तरह ही, आप टेबल हेडर के लिए भी BeautifulSoup का उपयोग करके html टैग्स के बीच का टेक्स्ट निकाल सकते हैं।

all_header = []
col_str = str(col_labels)
cleantext2 = BeautifulSoup(col_str, "lxml").get_text()
all_header.append(cleantext2)
print(all_header)
['[Place, Bib, Name, Gender, City, State, Chip Time, Chip Pace, Gender Place, Age Group, Age Group Place, Time to Start, Gun Time, Team]']

इसके बाद आप हेडर की सूची को pandas डेटाफ़्रेम में बदल सकते हैं।

df2 = pd.DataFrame(all_header)
df2.head()
  0
0 [Place, Bib, Name, Gender, City, State, Chip T...

इसी तरह, आप सभी रो के लिए कॉलम "0" को कॉमा की स्थिति पर कई कॉलम में विभाजित कर सकते हैं।

df3 = df2[0].str.split(',', expand=True)
df3.head()
डेटाफ़्रेम हेडर

नीचे दर्शाए अनुसार concat() मेथड का उपयोग करके दोनों डेटाफ़्रेम को एक में जोड़ा जा सकता है।

frames = [df3, df1]

df4 = pd.concat(frames)
df4.head(10)
डेटाफ़्रेम 3

नीचे दिखाया गया है कि पहली रो को टेबल हेडर कैसे असाइन करें।

df5 = df4.rename(columns=df4.iloc[0])
df5.head()
डेटाफ़्रेम 4

इस बिंदु पर, तालिका लगभग सही ढंग से फॉर्मेट हो चुकी है। विश्लेषण शुरू करने के लिए, आप नीचे दिखाए अनुसार डेटा का एक अवलोकन प्राप्त कर सकते हैं।

df5.info()
df5.shape
<class 'pandas.core.frame.DataFrame'>
Int64Index: 597 entries, 0 to 595
Data columns (total 14 columns):
[Place              597 non-null object
 Bib                596 non-null object
 Name               593 non-null object
 Gender             593 non-null object
 City               593 non-null object
 State              593 non-null object
 Chip Time          593 non-null object
 Chip Pace          578 non-null object
 Gender Place       578 non-null object
 Age Group          578 non-null object
 Age Group Place    578 non-null object
 Time to Start      578 non-null object
 Gun Time           578 non-null object
 Team]              578 non-null object
dtypes: object(14)
memory usage: 70.0+ KB

(597, 14)

तालिका में 597 रो और 14 कॉलम हैं। आप उन सभी रो को हटा सकते हैं जिनमें कोई भी मान गायब है।

df6 = df5.dropna(axis=0, how='any')

साथ ही, देखें कि df5 में पहली रो के रूप में टेबल हेडर की प्रतिलिपि है। इसे नीचे दी गई लाइन से हटाया जा सकता है।

df7 = df6.drop(df6.index[0])
df7.head()
डेटाफ़्रेम 5

आप '[Place' और ' Team]' कॉलम के नाम बदलकर और सफाई कर सकते हैं। Python स्पेस के मामले में बहुत सख्त है। ' Team]' में उद्धरण चिह्न के बाद स्पेस शामिल करना सुनिश्चित करें।

df7.rename(columns={'[Place': 'Place'},inplace=True)
df7.rename(columns={' Team]': 'Team'},inplace=True)
df7.head()
डेटाफ़्रेम 6

अंतिम डेटा सफाई चरण में ' Team' कॉलम की कोशिकाओं के लिए क्लोज़िंग ब्रैकेट हटाना शामिल है।

df7['Team'] = df7['Team'].str.strip(']')
df7.head()
डेटाफ़्रेम 7

यहां तक पहुंचने में थोड़ा समय लगा, लेकिन अब डेटाफ़्रेम वांछित प्रारूप में है। अब आप रोमांचक हिस्से पर जा सकते हैं—डेटा प्लॉट करना और दिलचस्प सांख्यिकीय मान निकालना शुरू करें।

डेटा विश्लेषण और विज़ुअलाइज़ेशन

पहला प्रश्न है: धावकों के लिए औसत फिनिश समय (मिनटों में) क्या था? आपको "Chip Time" कॉलम को सिर्फ मिनटों में बदलना होगा। ऐसा करने का एक तरीका यह है कि पहले कॉलम को हेरफेर हेतु एक सूची में बदल दें।

time_list = df7[' Chip Time'].tolist()

# You can use a for loop to convert 'Chip Time' to minutes

time_mins = []
for i in time_list:
    h, m, s = i.split(':')
    math = (int(h) * 3600 + int(m) * 60 + int(s))/60
    time_mins.append(math)
#print(time_mins)

अगला चरण सूची को वापस डेटाफ़्रेम में बदलना और केवल मिनटों में व्यक्त धावकों के चिप समय के लिए एक नया कॉलम (Runner_mins) बनाना है।

df7['Runner_mins'] = time_mins
df7.head()
डेटाफ़्रेम 8

नीचे दिया गया कोड डेटाफ़्रेम में केवल संख्यात्मक कॉलम्स के लिए सांख्यिकी कैसे निकाली जाए, यह दिखाता है।

df7.describe(include=[np.number])
  Runner_mins
count 577.000000
mean 60.035933
std 11.970623
min 36.350000
25% 51.000000
50% 59.016667
75% 67.266667
max 101.300000

दिलचस्प रूप से, सभी धावकों के लिए औसत चिप समय लगभग 60 मिनट था। सबसे तेज 10K धावक ने 36.35 मिनट में फिनिश किया, और सबसे धीमे धावक ने 101.30 मिनट में।

बॉक्सप्लॉट सारांश सांख्यिकी (अधिकतम, न्यूनतम, माध्यिका, प्रथम चतुर्थक, तृतीय चतुर्थक, तथा बाह्य मान) को देखने का एक और उपयोगी साधन है। नीचे धावकों के लिए एक बॉक्सप्लॉट में दिखाए गए डेटा सारांश सांख्यिकी हैं। डेटा विज़ुअलाइज़ेशन के लिए, matplotlib के साथ आने वाले pylab मॉड्यूल से पैरामीटर्स इम्पोर्ट करना और सभी फिगर्स के लिए एक ही साइज सेट करना सुविधाजनक है ताकि हर फिगर के लिए अलग से न करना पड़े।

from pylab import rcParams
rcParams['figure.figsize'] = 15, 5
df7.boxplot(column='Runner_mins')
plt.grid(True, axis='y')
plt.ylabel('Chip Time')
plt.xticks([1], ['Runners'])
([<matplotlib.axis.XTick at 0x570dd106d8>],
 <a list of 1 Text xticklabel objects>)
वितरण प्लॉट

दूसरा प्रश्न है: क्या धावकों के फिनिश समय सामान्य वितरण का पालन करते थे?

नीचे seaborn लाइब्रेरी का उपयोग करके धावकों के चिप समय का वितरण प्लॉट दिया गया है। वितरण लगभग सामान्य प्रतीत होता है।

x = df7['Runner_mins']
ax = sns.distplot(x, hist=True, kde=True, rug=False, color='m', bins=25, hist_kws={'edgecolor':'black'})
plt.show()
वितरण प्लॉट 2

तीसरा प्रश्न इस बारे में है कि क्या विभिन्न आयु समूहों में पुरुषों और महिलाओं के बीच प्रदर्शन में कोई अंतर था। नीचे पुरुषों और महिलाओं के चिप समय का वितरण प्लॉट है।

f_fuko = df7.loc[df7[' Gender']==' F']['Runner_mins']
m_fuko = df7.loc[df7[' Gender']==' M']['Runner_mins']
sns.distplot(f_fuko, hist=True, kde=True, rug=False, hist_kws={'edgecolor':'black'}, label='Female')
sns.distplot(m_fuko, hist=False, kde=True, rug=False, hist_kws={'edgecolor':'black'}, label='Male')
plt.legend()
<matplotlib.legend.Legend at 0x570e301fd0>
वितरण प्लॉट 3

वितरण से संकेत मिलता है कि औसतन महिलाएं पुरुषों की तुलना में धीमी थीं। आप नीचे दिखाए अनुसार groupby() मेथड का उपयोग करके पुरुषों और महिलाओं के लिए अलग-अलग सारांश सांख्यिकी निकाल सकते हैं।

g_stats = df7.groupby(" Gender", as_index=True).describe()
print(g_stats)
        Runner_mins                                                         \
              count       mean        std        min        25%        50%   
 Gender                                                                      
 F            163.0  66.119223  12.184440  43.766667  58.758333  64.616667   
 M            414.0  57.640821  11.011857  36.350000  49.395833  55.791667   


               75%         max  
 Gender                         
 F       72.058333  101.300000  
 M       64.804167   98.516667  

सभी महिलाओं और पुरुषों के लिए औसत चिप समय क्रमशः ~66 मिनट और ~58 मिनट था। नीचे पुरुष और महिला फिनिश समय की साइड-बाय-साइड बॉक्सप्लॉट तुलना है।

df7.boxplot(column='Runner_mins', by=' Gender')
plt.ylabel('Chip Time')
plt.suptitle("")
C:\Users\smasango\AppData\Local\Continuum\anaconda3\lib\site-packages\numpy\core\fromnumeric.py:57: FutureWarning: reshape is deprecated and will raise in a subsequent release. Please use .values.reshape(...) instead
  return getattr(obj, method)(*args, **kwds)

Text(0.5,0.98,'')
वितरण प्लॉट 4

निष्कर्ष

इस ट्यूटोरियल में, आपने Python का उपयोग करके वेब स्क्रैपिंग की। आपने Beautiful Soup लाइब्रेरी से html डेटा पार्स किया और उसे ऐसे रूप में बदला जिसे विश्लेषण के लिए उपयोग किया जा सके। आपने Python में डेटा की सफाई की और Python की matplotlib और seaborn लाइब्रेरी का उपयोग करते हुए रोचक रुझानों को उजागर करने के लिए उपयोगी प्लॉट्स (बॉक्स प्लॉट्स, बार प्लॉट्स, और वितरण प्लॉट्स) बनाए। इस ट्यूटोरियल के बाद, आपको वेब से आसानी से डेटा स्क्रैप करने, सफाई तकनीकें लागू करने और डेटा से उपयोगी अंतर्दृष्टियाँ निकालने में सक्षम होना चाहिए।

यदि आप Python के बारे में और सीखना चाहें, तो DataCamp का निःशुल्क Intro to Python for Data Science कोर्स लें और हमारा ट्यूटोरियल देखें जिसमें बताया गया है कि Python का उपयोग करके Amazon को कैसे स्क्रैप करें।

विषय
Python
डेटा साइंस
मशीन लर्निंग

Python के बारे में और जानें

कोर्स

स्प्रेडशीट उपयोगकर्ताओं के लिए Pandas Joins

4 घंटा
4.5K
Python Pandas लाइब्रेरी का उपयोग करके सारणीबद्ध प्रारूप में डेटासेट्स को प्रभावी और कुशलतापूर्वक जोड़ना सीखें।
विवरण देखेंRight Arrow
पाठ्यक्रम शुरू करें
और देखेंRight Arrow