рдореБрдЦреНрдп рд╕рд╛рдордЧреНрд░реА рдкрд░ рдЬрд╛рдПрдБ

Python (рдФрд░ Beautiful Soup) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реЗрдм рд╕реНрдХреНрд░реИрдкрд┐рдВрдЧ

рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ, рдЖрдк рд╡реЗрдм рд╕реЗ рдбреЗрдЯрд╛ рдирд┐рдХрд╛рд▓рдирд╛, Python рдХреА Pandas рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдбреЗрдЯрд╛ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдФрд░ рд╕рдлрд╛рдИ рдХрд░рдирд╛, рдФрд░ Python рдХреА Matplotlib рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдбреЗрдЯрд╛ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝ рдХрд░рдирд╛ рд╕реАрдЦреЗрдВрдЧреЗред
┬╖ 14 рдорд┐ре░ рдкрдврд╝реЗрдВ

AI рдХреЗ рд╕рд╛рде рдЦреЛрдЬреЗрдВ

рд╡реЗрдм рд╕реНрдХреНрд░реИрдкрд┐рдВрдЧ рд╡рд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрд┐рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдпрд╛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реЗрдм рд╕реЗ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдбреЗрдЯрд╛ рдирд┐рдХрд╛рд▓рд╛ рдФрд░ рдкреНрд░реЛрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪрд╛рд╣реЗ рдЖрдк рдбреЗрдЯрд╛ рд╕рд╛рдЗрдВрдЯрд┐рд╕реНрдЯ рд╣реЛрдВ, рдЗрдВрдЬреАрдирд┐рдпрд░ рд╣реЛрдВ, рдпрд╛ рдмрдбрд╝реЗ рдбреЗрдЯрд╛рд╕реЗрдЯ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдИ рднреА рдкреЗрд╢реЗрд╡рд░ рд╣реЛрдВтАФрд╡реЗрдм рд╕реЗ рдбреЗрдЯрд╛ рд╕реНрдХреНрд░реИрдк рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдПрдХ рдЙрдкрдпреЛрдЧреА рдХреМрд╢рд▓ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдЖрдкрдХреЛ рд╡реЗрдм рдкрд░ рдбреЗрдЯрд╛ рдорд┐рд▓рддрд╛ рд╣реИ рдФрд░ рдЙрд╕реЗ рд╕реАрдзреЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ 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:[email protected]">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...

рдбреЗрдЯрд╛ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдФрд░ рд╕рдлрд╛рдИ

рдбреЗрдЯрд╛реЮреНрд░реЗрдо рдордирдЪрд╛рд╣реЗ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рд╣реИред рдЗрд╕реЗ рд╕рд╛рдл рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ "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
count577.000000
mean60.035933
std11.970623
min36.350000
25%51.000000
50%59.016667
75%67.266667
max101.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 рдХреЛ рдХреИрд╕реЗ рд╕реНрдХреНрд░реИрдк рдХрд░реЗрдВред

рд╡рд┐рд╖рдп