Статья будет проходить процесс, который я использовал для создания списка подкастов, которые вы видите ниже. Если вы здесь только для подкастов, то получите это …
самые популярные подкасты науки о данных
Лекс Фридман подкаст | Лекс Фридман | 2400 | 4.9 | 126 |
Руководство по машинному обучению | Окдевель | 626 | 4.9 | 30 |
Данные скептики | Кайл Полич | 431 | 4.4 | 300 |
Данные истории | Энрико Бертини и Мориц Стефанер | 405 | 4.5 | 162 |
Подкаст Twiml AI (ранее на этой неделе в области машинного обучения и искусственного интеллекта) | Сэм Шаррингтон | 300 | 4.7 | 300 |
DataFramed | DataCamp | 188 | 4.9 | 59 |
Ай подкаст | Нвидия | 162 | 4.5 | 125 |
SuperDatascience | Кирилл Эременко | 161 | 4.6 | 300 |
Частично производное | Частично производное | 141 | 4.8 | 101 |
Машинное обучение | Стэнфорд | 138 | 3.9 | 20 |
Говорящие машины | Тот -сумки Productions | 133 | 4.6 | 106 |
ИИ в бизнесе | Даниэль Фаггелла | 102 | 4.4 | 100 |
Учебные машины 101 | Ричард М. Голден, доктор философии, M.S.E.E., B.S.E.E. | 87 | 4.4 | 82 |
Рассказы с подкастом данных | Коул Нуссбаумер Кна | 80 | 4.9 | 33 |
Данные хруст | Корпорация данных Crunch | 70 | 4.9 | 64 |
Данные а именно Сегодня | Алли Торбан | 64 | 5.0 | 62 |
Искусственный интеллект | Герметичный | 61 | 4.1 | 31 |
O’Reilly Data Show подкаст | О’Рейли СМИ | 59 | 4.2 | 60 |
Машинное обучение – разработка программного обеспечения ежедневно | Машинное обучение – разработка программного обеспечения ежедневно | 59 | 4.5 | 115 |
Наука данных дома | Франческо Гадалета | 58 | 4.2 | 100 |
Подкаст по инженерному инженеру | Тобиас Мейси | 58 | 4.7 | 150 |
Большое количество данных | Райан Эстрада | 58 | 4.6 | 13 |
Следуйте подкасту данных | Bloomberg Philanthropies | 57 | 4.3 | 82 |
Сделать данные простыми | IBM | 56 | 4.3 | 104 |
Аналитика в огне | Мико Юк | 51 | 4.4 | 48 |
Научитесь кодировать через месяц | Научитесь кодировать | 50 | 4.9 | 26 |
Стать подкастом ученых данных | Рене Тейт | 49 | 4.5 | 21 |
Практический ИИ: машинное обучение и наука о данных | Чанженол СМИ | 48 | 4.5 | 105 |
НАСТОЯЩИЕ БЕЗОПАСНОСТЬ Показывает: визуализация данных, рассказывание историй и презентация для цифровых маркетологов | Леа Пика | 44 | 4.9 | 58 |
Глава данных | Миссия | 43 | 4.9 | 16 |
AI Today Podcast: понимание искусственного интеллекта, эксперты и мнение | Cognilytica | 42 | 4.2 | 161 |
Данные, управляемые | Данные, управляемые | 41 | 4.9 | 257 |
Подкаст Human – искусственный интеллект, наука о данных и образование разработчиков | Дэвид Якобович | 39 | 4.8 | 78 |
Гуру данных | Сима Васа | 39 | 5.0 | 106 |
Мастера данных подкаста | Логика Sumo, размещенная Беном Ньютоном | 38 | 5.0 | 74 |
Подкаст PolicyViz | Подкаст PolicyViz | 36 | 4.7 | 180 |
Радикальный подкаст ИИ | Радикальный ИИ | 34 | 4.9 | 35 |
Женщины в науке о данных | Профессор Марго Герритсен | 28 | 4.9 | 24 |
К науке о данных | Команда TDS | 26 | 4.6 | 50 |
Данные в глубине | Горная точка | 22 | 5.0 | 24 |
Подкаст Science Science | Антонио Борхес и Джорди Эстевес | 22 | 4.4 | 88 |
Художники науки о данных | Harpreet Sahota | 19 | 4.9 | 41 |
# DataFemme | Данные Дикайо | 17 | 5.0 | 30 |
Банановый подкаст | DataIku | 15 | 4.9 | 33 |
Испытывает данные с Брайаном Т. О’Нилом | Брайан Т. О’Нил из проектирования для аналитики | 14 | 4.9 | 13 |
Секреты лидеров анализа данных | Экерсон Группа | 13 | 4.8 | 82 |
Данные путешествия | AJ Гольдштейн | 13 | 5.0 | 26 |
Данные дискуссии | Outlier.ai | 12 | 5.0 | 8 |
Футурология данных – лидерство и стратегия в области искусственного интеллекта, машинного обучения, Наука данных | Фелипе Флорес | 11 | 4.4 | 135 |
Искусственно умно | Кристиан Хаббс и Стивен Доннелли | 11 | 4.9 | 100 |
Почему я хочу найти подкасты по науке о данных
Обычно это будет на вершине статьи о поиске подкастов «Наука данных». Ну, это будет на вершине любой статьи. Но реально, что большинство людей находят это из Google, и они просто ищут ответ, который находится в верхней части страницы. Если вы вводите «самые популярные подкасты по науке о данных», вы действительно не хотите бесконечно прокручивать вниз, чтобы найти ответ, который вы ищете. Итак, чтобы сделать их Опыт лучше, мы просто оставляем ответ там. И давая им нахмул. Много нах.
В любом случае, мне очень нравится слушать вещи. В то время как информационные бюллетени отлично подходят для продолжения текущих событий, а блоги отлично подходят для изучения конкретных вещей, подкасты занимают особое место в моем сердце, чтобы позволить мне бесцельно изучать что -то новое каждый день. Формат действительно поддается эффективному предоставлению информации, но таким образом, где вы можете многозадачно. Предварительно-ковид, моя утренняя поездка на работу обычно была полна подкастов. В то время как Covid сделал мою поездку на работу несуществующим делом, я все еще стараюсь слушать хотя бы подкаст в день, если смогу управлять им. Я считаю, что 30 минут обучения в день действительно складываются в долгосрочной перспективе, и я чувствую, что подкасты – отличный способ добраться туда.
Теперь, когда мы пережили мой роман с подкастами, вы можете представить мой удивление, когда я начал искать несколько научных наук, на которые можно подписаться, и я не Найдите учебник о том, как использовать Web Scraping, чтобы найти самые популярные подкасты Data Science для прослушивания. Я знаю, сумасшедший. Есть учебное пособие по всему, под солнцем, за исключением – казалось бы, – подкасты. Я имею в виду, что, вероятно, не один на информационных бюллетенях, но мы пока оставим это в покое …
Так Если никто не достаточно сумасшедший, чтобы написать о поиске подкастов по науке о данных с помощью Web Scraping, то …
геймплязинг процесса
К настоящему времени мы почти наверняка избавимся от тех дикарей, которые здесь только для Ответ ( задыхаться, как они могли ), поэтому мы перейдем к небольшому процессу, через который я прошел, чтобы собрать данные. Это не особенно долго, и мне потребовалось час, чтобы собрать его вместе, так что это должно быть хорошей длиной для статьи.
Я использую Python здесь с установкой Anaconda (которая является общей системой управления пакетами/развертыванием для Python). Я буду запускать это в ноутбуке Юпитера, так как это одноразовая задача, которую мне не нужно использовать снова … надеюсь.
С точки зрения того, что я собираюсь сделать, я запускаю несколько поисков ключевых слов Google, которые ограничены ‘ https://podcasts.apple.com/us/podcast/ ‘Домен и соскребайте результаты для первых нескольких страниц. Оттуда я просто соскребую страницу подкаста Apple, чтобы получить общее количество рейтингов и средний рейтинг. Да, данные будут предвзятыми, но это быстрый и грязный способ получить ответ, который я ищу.
Код для поиска лучших подкастов науки о данных – Версия 1
# import default python packages import urllib import requests import time
Приведенные выше пакеты включены в Python, приведенные ниже не всегда включены. Если у вас их не установлено, вам придется загрузить их. Вы можете узнать, как использовать Pip сделать это или Conda Анкет
# import non-standard python packages # if you dont have these installed, install them with pip or conda from bs4 import BeautifulSoup import pandas as pd
Теперь, когда пакеты были импортированы, вы должны определить своего пользовательского агента. Во -первых, потому что это вежливо, если вы что -то царапаете. Во -вторых, Google дает различные результаты для мобильных и настольных поисков. Это на самом деле не мой пользовательский агент, я взял его из другого урока, так как я немного ленив. Я действительно использую Linux …
# define your desktop user-agent USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:65.0) Gecko/20100101 Firefox/65.0"
Хорошо, теперь мы собираемся определить запросы, которые хотим запустить. А затем создайте функцию, которая выплевывает URL, который мы хотим поцарапать в Google. Я ставлю запросы в формат Kwargs, так как я хочу поставить их на функцию. Это означает, что я могу просто пройти список Kwargs и получить результаты, которые возвращает функция.
# Queries list_kwargs = [ {"string": 'data podcast'}, {"string": 'data podcast', "pg": 2}, {"string": 'data podcast', "pg": 3}, {"string": 'data science podcast'}, {"string": 'data engineering podcast'}, {"string": 'data visualization podcast'}, ] def string_to_podcast_query(string, pg=None): query = urllib.parse.quote_plus(f'site:https://podcasts.apple.com/us/podcast/ {string}') if pg != None: query = query + "&start=" + str(10*(pg-1)) return f"https://google.com/search?hl=en&lr=en&q={query}", string # define the headers we will add to all of our requests headers = {"user-agent" : USER_AGENT} # set up an empty list to push results to results = [] # cycle through the list of queries for x in list_kwargs: # return the query url and the search term that was used to create it (for classification later) url, search_term = string_to_podcast_query(**x) # make a get request to the url, include the headers with our user-agent resp = requests.get(url, headers=headers) # only proceed if you get a 200 code that the request was processed correctly if resp.status_code == 200: # feed the request into beautiful soup soup = BeautifulSoup(resp.content, "html.parser") # find all divs (a css element that wraps page areas) within google results for g in soup.find_all('div', class_='r'): # within the results, find all the links anchors = g.find_all('a') if anchors: # get the link and title, add them to an object, and append that to the results array link = anchors[0]['href'] title = g.find('h3').text item = { "title": title, "link": link, "search_term": search_term } results.append(item) # sleep for 2.5s between requests. we don't want to annoy google and deal with recaptchas time.sleep(2.5)
Хорошо, теперь у нас есть результаты Google обратно – приятно. Отсюда давайте поместим это в пандас DataFrame и немного отфильтровывает.
google_results_df = pd.DataFrame(results) # create a filter for anything that is an episode. They should contain a ' | '. # drop any duplicate results as well. google_results_df['is_episode'] = google_results_df['title'].str.contains(' | ',regex=False) google_results_df = google_results_df.drop_duplicates(subset='title') google_results_podasts = google_results_df.copy().loc[google_results_df['is_episode']==False]
ОК, круто, у нас есть список подкастов. Давайте определим наш скребок Apple Podcasts.
def podcast_scrape(link): # get the link, use the same headers as had previously been defined. resp = requests.get(link, headers=headers) if resp.status_code == 200: soup = BeautifulSoup(resp.content, "html.parser") # find the figcaption element on the page rtg_soup = soup.find("figcaption", {"class": "we-rating-count star-rating__count"}) # the text will return an avg rating and a number of reviews, split by a • # we'll spit that out, so '4.3 • 57 Ratings' becomes '4.3', '57 Ratings' avg_rtg, rtg_ct = rtg_soup.get_text().split(' • ') # then we'll take numbers from the rtg_ct variable by splitting it on the space rtg_ct = rtg_ct.split(' ')[0] # find the title in the document, get the text and strip out whitespace title_soup = soup.find('span', {"class":"product-header__title"}) title = title_soup.get_text().strip() # find the author in the document, get the text and strip out whitespace author_soup = soup.find('span', {"class":"product-header__identity podcast-header__identity"}) author = author_soup.get_text().strip() # find the episode count div, then the paragraph under that, then just extract the # of episodes episode_soup = soup.find('div', {"class":"product-artwork__caption small-hide medium-show"}) episode_soup_p = episode_soup.find('p') episode_ct = episode_soup_p.get_text().strip().split(' ')[0] # format the response as a dict, return that response as the result of the function response = { "title": title, "author": author, "link": link, "avg_rtg": avg_rtg, "rtg_ct": rtg_ct, "episodes": episode_ct } return response
Круто, теперь у нас есть скребок подкаста. Вы можете попробовать это с приведенным ниже кодом.
podcast_scrape('https://podcasts.apple.com/us/podcast/follow-the-data-podcast/id1104371750') {'title': 'Follow the Data Podcast', 'author': 'Bloomberg Philanthropies', 'link': 'https://podcasts.apple.com/us/podcast/follow-the-data-podcast/id1104371750', 'avg_rtg': '4.3', 'rtg_ct': '57'}
Вернуться к коду. Давайте теперь проберите все ссылки на подкасты, которые у нас есть.
# define the result array we'll fill during the loop podcast_summ = [] for link in google_results_podcasts['link']: # use a try/except, since there are a few episodes still in the list that will cause errors if we don't do this. This way, if there is an error we just wont add anything to the array. try: # get the response from our scraper and append it to our results pod_resp = podcast_scrape(link) podcast_summ.append(pod_resp) except: pass # wait for 5 seconds to be nice to apple time.sleep(5)
Теперь, чтобы поместить все в дата и сделать немного сортировки и фильтрации.
pod_df = pd.DataFrame(podcast_summ) # Remove non-english podcasts, sorry guys... pod_df = pod_df.loc[~pod_df['link'].str.contains('l=')] pod_df.drop_duplicates(subset='link', inplace=True) # merge with the original dataframe (in case you want to see which queries were responsible for which podcasts) merge_df = google_results_podcasts.merge(pod_df,on='link',suffixes=('_g','')) merge_df.drop_duplicates(subset='title', inplace=True) # change the average rating and rating count columns from strings to numbers merge_df['avg_rtg'] = merge_df['avg_rtg'].astype('float64') merge_df['rtg_ct'] = merge_df['rtg_ct'].astype('int64') # sort by total ratings and then send them to a csv merge_df.sort_values('rtg_ct',ascending=False).to_csv('podcasts.csv')
Отсюда я экспортировал файл в CSV и немного обманул, где я объединил заголовок и ссылку, чтобы создать название
, но это в основном потому, что я стал немного ленивым …
В любом случае, это был полный процесс в создании вышеуказанного списка подкастов по науке о данных. Теперь у вас есть лучшие подкасты, отсортированные по общим обзорам. Я также рассматривал использование Castbox в качестве источника соскоба (поскольку у них есть приближение подписчиков/загрузок), но я не мог найти хорошего способа поиска в целом популярных подкастов. Или подкасты, которые содержали определенное слово.
Первая версия этой статьи остановилась здесь и показала результаты этого кода
Код для поиска лучших подкастов науки о данных – Версия 2
Ну, это было хорошо, но я думаю, что на самом деле не хватает. Кажется, есть несколько подкастов, которые я наткнулся на то, что не хватает, которые, как я надеялся, это поймет. Так что мы собираемся изменить кое -что. Во -первых, я собираюсь использовать мобильный пользовательский агент, чтобы сообщить Google, что я ищу на своем телефоне.
Почему? Что ж, Google показывает разные результаты для поиска настольных компьютеров по сравнению с мобильными поисками, поэтому, если мы стремимся найти лучшие подкасты, мы хотим быть там, где на самом деле происходит большинство поисков. И поскольку вы в основном всегда слушаете подкасты на своем телефоне, вероятно, имеет смысл искать с вашего телефона … Код для этого ниже, основные изменения в
# Mobile Search Version headers = {"user-agent" : MOBILE_USER_AGENT} results = [] for x in list_kwargs: url, search_term = string_to_podcast_query(**x) resp = requests.get(url, headers=headers) if resp.status_code == 200: soup = BeautifulSoup(resp.content, "html.parser") for g in soup.find_all('div', class_='mnr-c'): # updated target class anchors = g.find_all('a') if anchors: link = anchors[0]['href'] title = anchors[0].find_all('div')[1].get_text().strip() # updated title crawler item = { "title": title, "link": link, "search_term": search_term } results.append(item) time.sleep(2.5)
Что еще я переключился? Я немного переключил запросы Google и добавил еще несколько. Я полагаю, что если я на самом деле пытаюсь найти лучшие подкасты, имеет смысл искать их. Таким образом, вы получаете те, которые обычно отображаются в этих типах списков блога.
# Queries list_kwargs = [ {"string": 'best data podcast'}, {"string": 'best data podcast', "pg": 2}, {"string": 'best data podcast', "pg": 3}, {"string": 'best data podcast', "pg": 4}, {"string": 'best data science podcast'}, {"string": 'best data science podcast', "pg": 2}, {"string": 'best data science podcast', "pg": 3}, {"string": 'best artificial intelligence podcast'}, {"string": 'best machine learning podcast'}, {"string": 'best data engineering podcast'}, {"string": 'best data visualization podcast'}, ]
И вот и все – все изменения, которые я внесла для второй версии. Результаты обновляются наверху, но они становятся более полными
Код для поиска лучших подкастов науки данных – версия 3
И я идиот. ‘ Исправление «Мои запросы, чтобы найти только подкасты« Лучшие науки о данных », в конечном итоге заставило меня пропустить несколько хороших, которые я нашел ранее. Так что я собираюсь сделать, как и любой хороший ученый, и просто объединить результаты обоих наборов запросов …
# Queries
list_kwargs = [
{"string": 'best data podcast'},
{"string": 'best data podcast', "pg": 2},
{"string": 'best data podcast', "pg": 3},
{"string": 'best data podcast', "pg": 4},
{"string": 'best data science podcast'},
{"string": 'best data science podcast', "pg": 2},
{"string": 'best data science podcast', "pg": 3},
{"string": 'best artificial intelligence podcast'},
{"string": 'best machine learning podcast'},
{"string": 'best data engineering podcast'},
{"string": 'best data visualization podcast'},
]
Закрывающая заметка
Это кросс-стой из моего блог Анкет Моя нынешняя читательница – это солидные 0 просмотров в месяц, поэтому я подумал, что это, возможно, стоит поделиться этим здесь …
Оригинал: “https://dev.to/gms64/finding-popular-data-science-podcasts-via-web-scraping-34kj”