рдЕрдм рд▓рдЧрднрдЧ рдПрдХ рд╕рд╛рд▓ рд╕реЗ рдореИрдВ рдпреИрдВрдбреЗрдХреНрд╕ рдореНрдпреВрдЬрд┐рдХ рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореБрдЭреЗ рд╕рдм рдХреБрдЫ рд╕реВрдЯ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕ рд╕реЗрд╡рд╛ рдореЗрдВ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдкреГрд╖реНрда рд╣реИ - рдЗрддрд┐рд╣рд╛рд╕ред рдпрд╣ рдЙрди рд╕рднреА рдЯреНрд░реИрдХ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдХрд╛рд▓рд╛рдиреБрдХреНрд░рдорд┐рдХ рдХреНрд░рдо рдореЗрдВ рд╕реБрдирд╛ рдЧрдпрд╛ рд╣реИред рдФрд░ рд╣рд╛рдВ, рдореИрдВ рдЗрд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рдерд╛ рдХрд┐ рдореИрдВрдиреЗ рд╣рд░ рд╕рдордп рдХреНрдпрд╛ рд╕реБрдирд╛ рд╣реИред

рдкрд╣рд▓реЗ рдкреНрд░рдпрд╛рд╕
рдЗрд╕ рдкреГрд╖реНрда рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рддреБрд░рдВрдд рдПрдХ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ред рд╕реЗрд╡рд╛ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рд╕рднреА рдЯреНрд░реИрдХ рдбрд╛рдЙрдирд▓реЛрдб рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЖрдк рд╕реНрдХреНрд░реЙрд▓ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ рд╕реНрдирд┐рдлрд░ рдбрд╛рдЙрдирд▓реЛрдб рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдФрд░ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдФрд░ рдЙрд╕ рд╕рдордп рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреЛрдИ рдХреМрд╢рд▓ рдирд╣реАрдВ рдерд╛ред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рд╕реЗрд▓реЗрдирд┐рдпрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдХреЗ рдФрд░ рдЕрдзрд┐рдХ рдЬрд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦреА рдЧрдИ рдереАред рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЛрдВрдиреЗ рдмрд╣реБрдд рдЕрд╕реНрдерд┐рд░ рдФрд░ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдХрд╛рдо рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЛрдВрдиреЗ рдХрд╣рд╛рдиреА рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд┐рдпрд╛ред рдПрдХ рд╕рд░рд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдмрд┐рдирд╛ рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреЗ рдЫреЛрдбрд╝ рджрд┐рдпрд╛, рдХреБрдЫ рд╕рдордп рдмрд╛рдж рддрдХ рдореИрдВ рдлрд┐рд░ рд╕реЗ рдХрд╣рд╛рдиреА рдбрд╛рдЙрдирд▓реЛрдб рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рдХреЗ рд▓рд┐рдП рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рдЗрд╕реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ред рдФрд░, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдПрдХ рддреНрд░реБрдЯрд┐ рджреАред рддрдм рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдпрд╣ рд╕рдм рдХреБрдЫ рдорд╛рдирд╡реАрдп рд░реВрдк рд╕реЗ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдерд╛ред
рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк
рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рддрд╛рд░реЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд http рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдХрд╛рд░рдг рдлрд╝рд┐рдбрд▓рд░ рдХреЛ рдЕрдкрдиреЗ рд▓рд┐рдП рдЪреБрдирд╛ред рд╕реНрдирд┐рдлрд░ рдЪрд▓рд╛рдирд╛, рдореБрдЭреЗ рдЯреЛрдХрди рдХреЗ рд╕рд╛рде рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рджреЗрдЦрдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИред рд▓реЗрдХрд┐рди рдирд╣реАрдВред рд╣рдорд╛рд░рд╛ рд▓рдХреНрд╖реНрдп music.yandex.ru/handlers/library.jsx
рдкрд░ рдерд╛ред рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рд╛рдЗрдЯ рдкрд░ рдкреВрд░реНрдг рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо рдЙрд╕рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗред
рдкреНрд░рд╛рдзрд┐рдХрд░рдг
рдпрд╣рд╛рдВ рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИред рд╣рдо passport.yandex.ru/auth
, рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ рдвреВрдВрдврддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд▓рд┐рдП рджреЛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВред
auth_page = self.get('/auth').text csrf_token, process_uuid = self.find_auth_data(auth_page) auth_login = self.post( '/registration-validations/auth/multi_step/start', data={'csrf_token': csrf_token, 'process_uuid': process_uuid, 'login': self.login} ).json() auth_password = self.post( '/registration-validations/auth/multi_step/commit_password', data={'csrf_token': csrf_token, 'track_id': auth_login['track_id'], 'password': self.password} ).json()
рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рд▓реЙрдЧ рдЗрди рдХрд┐рдпрд╛ред
рдЗрддрд┐рд╣рд╛рд╕ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ
рдЕрдЧрд▓рд╛ рд╣рдо music.yandex.ru/user/<user>/history
, рдЬрд╣рд╛рдВ рд╣рдо рдкрдЯрд░рд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╕рдордп рдХреБрдЫ рдкреИрд░рд╛рдореАрдЯрд░ рднреА рдЪреБрдирддреЗ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрддреЗ рд╣реИрдВред рдЕрдм рдЖрдк рдХрд╣рд╛рдиреА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдореЗрдВ рд╕рдВрдЧреАрдд music.yandex.ru/handlers/library.jsx
рдкрд░ рдорд╛рдкрджрдВрдбреЛрдВ {'owner': <user>, 'filter': 'history', 'likeFilter': 'favorite', 'lang': 'ru', 'external-domain': 'music.yandex.ru', 'overembed': 'false', 'ncrnd': '0.9546193023464256'}
ред рдореБрдЭреЗ рдпрд╣рд╛рдБ ncrnd рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рдереАред рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╕рдордп, рдпреИрдВрдбреЗрдХреНрд╕ рд╣рдореЗрд╢рд╛ рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдорд╛рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдм рдХреБрдЫ рдЙрд╕реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдкреАрдЫреЗ рд╣рдореЗрдВ рдЖрдИрдбреА рдЯреНрд░реИрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрддрд┐рд╣рд╛рд╕ рдорд┐рд▓рддрд╛ рд╣реИ рдФрд░ рд╢реАрд░реНрд╖ рджрд╕ рдкрдЯрд░рд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реАред рд╡рд┐рд╕реНрддреГрдд рдЯреНрд░реИрдХ рдЬрд╛рдирдХрд╛рд░реА рд╕реЗ, рдЖрдк рдмрд╛рдж рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рджрд┐рд▓рдЪрд╕реНрдк рдбреЗрдЯрд╛ рдХреЛ рдмрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░рд┐рд▓реАрдЬрд╝ рд╡рд░реНрд╖, рдЯреНрд░реИрдХ рдЕрд╡рдзрд┐ рдФрд░ рд╢реИрд▓реАред рдмрд╛рдХреА рдкрдЯрд░рд┐рдпреЛрдВ рдХреА рдЬрд╛рдирдХрд╛рд░реА music.yandex.ru/handlers/track-entries.jsx
рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХреА рдЧрдИ рд╣реИред рд╣рдо рдЗрд╕ рд╕рднреА рд╡реНрдпрд╡рд╕рд╛рдп рдХреЛ рд╕реАрдПрд╕рд╡реА рдореЗрдВ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ рдФрд░ рд╣рдо рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред
рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг
рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдкрдВрдбреЛрдВ рдФрд░ рдореЗрдЯрдкреНрд▓реЛрдЯрд▓рд┐рдм рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирдХ рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
import pandas as pd import matplotlib.pyplot as plt df = pd.read_csv('statistics.csv') df.head(3)
рдЕрдЬрдЧрд░ рдХреЗ рдирд╛ рдХреЛ рдирд╛ рдореЗрдВ рдмрджрд▓реЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдлреЗрдВрдХ рджреЗрдВред
df = df.replace('None', pd.np.nan).dropna()
рдЪрд▓реЛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдордиреЗ рд╕рднреА рдкрдЯрд░рд┐рдпреЛрдВ рдХреЛ рд╕реБрдирдиреЗ рдореЗрдВ рдХрд┐рддрдирд╛ рд╕рдордп рдмрд┐рддрд╛рдпрд╛
duration_sec = df['duration_sec'].astype('int64').sum() ss = duration_sec % 60 m = duration_sec // 60 mm = m % 60 h = m // 60 hh = h % 60 f'{h // 24} {hh}:{mm}:{ss}'
'15 15:30:14'
рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдЖрдк рдЗрд╕ рдЖрдВрдХрдбрд╝реЗ рдХреА рд╕рдЯреАрдХрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЯреНрд░реИрдХ рдХреЗ рдХрд┐рд╕ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рд╕реБрдирдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдпреИрдВрдбреЗрдХреНрд╕ рдиреЗ рдЗрд╕реЗ рдХрд╣рд╛рдиреА рдореЗрдВ рдЬреЛрдбрд╝рд╛ред
рдЕрдм рдЖрдЗрдП рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рд╡рд░реНрд╖ рддрдХ рдкрдЯрд░рд┐рдпреЛрдВ рдХреЗ рд╡рд┐рддрд░рдг рдХреЛ рджреЗрдЦреЗрдВред
plt.rcParams['figure.figsize'] = [15, 5] plt.hist(df['year'].sort_values(), bins=len(df['year'].unique())) plt.xticks(rotation='vertical') plt.show()

рдпрд╣рд╛рдБ, рд╡рд╣реА рдЗрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ "рдмреЗрд╕реНрдЯ рд╣рд┐рдЯреНрд╕" рдХреЗ рд╡рд┐рд╡рд┐рдз рд╕рдВрдЧреНрд░рд╣ рдмрд╛рдж рдореЗрдВ рд╣реЛрдВрдЧреЗред
рдЕрдиреНрдп рдЖрдБрдХрдбрд╝реЗ рдмрд╣реБрдд рд╕рдорд╛рди рд╕рд┐рджреНрдзрд╛рдВрдд рдкрд░ рдмрдирд╛рдП рдЬрд╛рдПрдВрдЧреЗред рдореИрдВ рд╕рдмрд╕реЗ рд╕реБрдиреА рдкрдЯрд░рд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛
df.groupby(['track_id', 'artist','track'])['track_id'].count().sort_values(ascending=False).head()
рдФрд░ рдХрд▓рд╛рдХрд╛рд░ рдХреЗ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЪрд▓рд╛рдП рдЧрдП рдЯреНрд░реИрдХ
artist_name = 'Coldplay' df.groupby([ 'artist_id', 'track_id', 'artist', 'track' ])['artist_id'].count().sort_values(ascending=False)[:,:,artist_name].head(5)
рдкреВрд░реНрдг рдХреЛрдб рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред