搜索引擎营销(SEM)的数据科学

[~~☛关于启用赞助会员☚~~]

在本教程中,数据科学与搜索引擎营销相遇:通过使用Python生成关键字和广告模板来学习如何创建Google AdWords广告系列!

两年来,作为重度用户,我学到了很多东西。我的主要业务是在线营销,从中学到的数据科学技能中我受益匪浅。现在,我可以管理规模更大,更复杂的广告系列,并有效地进行维护。由于我现在对R和Python中的内容以及不同的主题和程序包非常熟悉,因此我思考了如何像练习那样为创建搜索活动。



搜索引擎营销(SEM)和广告系列
什么是SEM?
SEM是在竞争日益激烈的市场中发展业务的最有效方法之一。这是通过在搜索引擎上购买广告来获得网站流量的过程。Google AdWords是最流行的在线广告形式之一:您在搜索引擎的与您的业务相关的关键字的赞助商链接中竞标广告展示位置,然后您为每次点击支付搜索引擎费用。

每次点击付费可能会成为相当大的成本,因此规划和组合关键字和广告非常重要,这样您就可以控制成本,并希望获得有利可图的广告系列。

尽管确定每次点击价格的确切过程是一个受到严格保护的秘密,并且取决于许多因素,但主要思想是您的广告越相关,每次点击费用就越低。

设置搜索广告系列
在设置广告系列之前,通常会先提出预算,选择关键字并查看竞争情况。另外,您还要确保目标网页正确无误。然后,您可以设置广告系列:您将编写第一个广告,修复其详细信息,然后设置转化跟踪。本教程将主要介绍根据我们拥有的不同登录页面生成大量关键字和广告的过程。

但是,在开始之前,让我们看一下这些搜索活动的确切含义!

广告群组
要开始使用搜索广告系列,您首先需要为广告组制定计划。这是您在其中映射关键字,广告和登录页面的基本单位。但是,这三个组成部分到底是什么?

关键字:用户的意图,他们在寻找什么。
广告:您对用户的承诺。
登陆页面:您兑现的承诺。
正确地映射这三个元素大约占工作量的70-80%。如果您做对了,维护和更改将变得更加容易。

这意味着,为了特定于用户并与用户相关,您需要推广所拥有的产品,并且主要集中在通过正确的消息或期望将正确的人发送到正确的页面。良好的广告活动结构可以反映并遵循网站的结构,该结构实质上反映了业务策略。

请注意,每个广告组都必须属于广告系列。在广告系列一级,您拥有用于控制广告系列中所有广告组的设置,例如语言定位,位置,设备,一天中的时间等。

搜索广告系列,分步进行
在上一节中,您从较高的角度查看了搜索广告系列:您看到关键字,广告和目标网页是广告组的一部分,并且需要为您要映射的这个基本单位部门制定一个计划这三个组件以反映您的业务策略的方式。在本节中,您将更深入地了解如何设置广告系列,重点关注本教程中要执行的步骤。

搜索引擎营销活动数据科学

如上所示,这是您要实现的映射。作为输出,您最终希望拥有两个主要的DataFrame:一个用于关键字,另一个用于广告。您可以在下面看到它的样子。

关键词
运动    广告群组    关键词
广告活动1    广告组1    关键字1
广告活动1    广告组2    关键字2
广告活动2    广告组1    关键字3
广告活动2    广告组1    关键字4
广告活动2    广告组2    关键字5


广告
运动    广告群组    显示网址    最终网址    标题1    标题2
广告活动1    广告组1    demo.com    demo.com/a    标题1    标题1a
广告活动1    广告组2    demo.com    demo.com/b    标题1    标题1a
广告活动2    广告组1    demo.com    demo.com/c    标题1    标题1a
广告活动2    广告组2    demo.com    demo.com/d    标题2    标题2a
广告活动2    广告组3    demo.com    demo.com/e    标题3    标题1a


完成这些操作后,您就可以将其作为逗号分隔值(CSV)文件上传到Google AdWords或其他工作原理完全相同的平台。除Bing Ads,Yandex,Baidu等公司外,Google AdWords是迄今为止搜索营销商最流行的付费搜索平台。

请注意,如果您想将数据导入其他平台而不是Google Adwords或Bing Ads,则需要做一些细微的调整!


商业案例:DEMO
在阅读简介时,您想为DEMO创建搜索广告系列。查看某人对公司提供的产品表达兴趣的不同方式,即数据科学教育,您可以轻松地提出以下方式的初步清单:

讲师:“ Hadley Wickham课程”,“ Garrett Grolemund的课程”等。
技术:“ python课程”,“ r课程”,“ sql数据科学课程”等。
课程:我们拥有的特定课程的名称;“在python中进行无监督学习”,“在python中进行深度学习”等。
主题:“机器学习课程”,“数据可视化课程”等
包/库:“学习ggplot”,“ matplotlib教程”等。
在本教程中,您不会进入传统的关键字研究阶段,这是因为您具有编程语言的功能,可以生成所有可能的组合并将它们组合在各自的广告系列和广告组中。

因此,您需要了解两个主要事项来进行此设置:

产品知识:了解DEMO拥有哪些课程和主题,如何在网站上组织它们以及如何进行分组。您可以通过浏览找到答案,当然可以通过内部知识获得更好的见解(尤其是计划中的更改!)。
相关关键字:某人在您提供的东西中表达欲望的所有可能方式。在DEMO的情况下,这就是“课程”,“学习”,“教育”,“教程”等。您可以通过集思广益,研究关键字工具和其他方法来做到这一点。

搜寻引擎营销活动的关键字产生
让我们从生成关键字开始!

1.生成教师关键字
此活动将针对那些由DEMO的任何教师搜索课程的人员。

您可以将关键字限制为“ course by ”,也可以只针对教师姓名使用一系列广泛的关键字。首先,最好将名称与“课程”或“课程”作为目标并查看效果。

您还需要检查您拥有的任何一个名称是否也恰好是另一个名人的名称,或者是一个非常普通的名称,然后您将需要限制该教师的关键字。

首先获取讲师的姓名和每个人的URL:

import requests
from bs4 import BeautifulSoup


instructors_page = 'https://www.demo.com/instructors?all=true'
instructor_link_selector = '.instructor-block__description .instructor-block__link' # CSS class of the link
instructor_name_selector = '.mb-sm'  # CSS class of the name

instructor_resp = requests.get(instructors_page)
soup = BeautifulSoup(instructor_resp.text, 'lxml')

instructor_urls = [url['href'] for url in soup.select(instructor_link_selector)]
instructor_names = [name.text.strip() for name in soup.select(instructor_name_selector)]
instructor_urls = ['https://www.demo.com' + url for url in instructor_urls]

您将它们放在DataFrame中以备后用。这些网址将在以后用于生成广告。

instructor_df = pd.DataFrame({
    'name': instructor_names,
    'url': instructor_urls
})
print(instructor_df.shape)
instructor_df.head()
(72, 2)

名称    网址
0    菲利普·舒文纳斯    https://www.demo.com/instructors/filipsch
1个    乔纳森·科尼利森    https://www.demo.com/instructors/jonathana ...
2    雨果·鲍恩·安德森    https://www.demo.com/instructors/hugobowne
3    格雷格·威尔逊    https://www.demo.com/instructors/greg48f64 ...
4    尼克·卡迪(Nick Carchedi)    https://www.demo.com/instructors/nickyc

现在您有了讲师的姓名,您将使用一个模板,该模板将每个姓名与与您的主题相关的一组关键字结合在一起,这些主题主要是讲师的课程。

以下代码中使用的变量:

col_names:这是表格的标题名称的列表,我们最终将其上传到Google AdWords。
words:您将要与教师姓名组合的单词以生成完整的关键字/词组。
match_types:可以在AdWords帮助中心上找到更多详细信息,但这是基础知识。
[数据科学课程],“数据科学课程”和数据科学课程在技术上是三个不同的关键字。

完全匹配(在方括号中)仅在用户完全按照该关键字搜索“数据科学课程”这一关键字时才触发广告。
词组匹配(带引号),如果用户搜索确切的字符串以及前后的所有字符串,则会触发您的广告。因此,“最佳数据科学课程”或“在线数据科学课程”将触发我们的广告。
如果有人搜索与“数据科学课程”相似或相关的内容,则广泛匹配(无标点符号)将触发我们的广告。这取决于Google的算法,您必须谨慎使用它,因为例如当有人搜索“数据科学平台”时,它可能会触发广告,这并非我们要推广的。我更喜欢使用修改后的匹配匹配,因为它限制了定位的范围。如果有人搜索该词的任何派生词,而不是任何含义相似的词,这基本上是在触发广告。在单词开头以“ +”号表示。因此,“ +游戏”将通过“游戏”,“游戏者”而不是“游戏”来触发广告。

col_names = ['Campaign', 'Ad Group', 'Keyword', 'Criterion Type']
instructor_keywords = []

words = ['course', 'courses', 'learn', 'data science', 'data camp', 'DEMO']
match_types = ['Exact', 'Phrase', 'Broad']
for instructor in instructor_df['name']:
    for word in words:
        for match in match_types:
            if match == 'Broad':
                keyword = '+' + ' +'.join([instructor.replace(' ', ' +').lower(), word])  # modified 
oach match             else:                 keyword = instructor.lower() + ' ' + word             row = ['SEM_Instructors',  # campaign name                    instructor,  # ad group name                    keyword, # instructor                     match]  # keyword match type             instructor_keywords.append(row) # do the same by having the keywords come before the instructor name for instructor in instructor_df['name']:     for word in words:         for match in match_types:             if match == 'Broad':                 keyword = '+' + ' +'.join([word, instructor.replace(' ', ' +').lower()])             else:                 keyword = word + ' ' + instructor.lower()             row = ['SEM_Instructors',  # campaign name                    instructor,  # ad group name                    keyword, #  instructor                    match]  # keyword match type             instructor_keywords.append(row) instructor_keywords_df = pd.DataFrame.from_records(instructor_keywords,                                                    columns=col_names) print('total keywords:', instructor_keywords_df.shape[0]) instructor_keywords_df.head() total keywords: 2592

运动    广告群组    关键词    标准类型
0    SEM_讲师    菲利普·舒文纳斯    菲斯舒文纳尔斯课程    精确
1个    SEM_讲师    菲利普·舒文纳斯    菲斯舒文纳尔斯课程    短语
2    SEM_讲师    菲利普·舒文纳斯    +菲律宾+ Schouwenaars +课程    宽
3    SEM_讲师    菲利普·舒文纳斯    菲利普舒文纳尔课程    精确
4    SEM_讲师    菲利普·舒文纳斯    菲利普舒文纳尔课程    短语

基本上,您正在做的是遍历教师姓名,所有不同的关键字以及我们拥有的所有匹配类型,以便我们拥有所有可能的组合。我们要做两次,一次是使用模板“教师姓名关键字”和“关键字教师姓名”。

现在,您只需对关键字以及我们如何提取数据进行少量修改即可对所有细分重复相同的操作。

我从R for Data Science中学到的一个很好的指导原则是,如果您要复制和粘贴两次以上,那么该编写函数了!

def generate_keywords(topics, keywords, match_types=['Exact', 'Phrase', 'Broad'],
                     campaign='SEM_Campaign'):
    col_names = ['Campaign', 'Ad Group', 'Keyword', 'Criterion Type']
    campaign_keywords = []

    for topic in topics:
        for word in keywords:
            for match in match_types:
                if match == 'Broad':
                    keyword = '+' + ' +'.join([topic.lower().replace(' ', ' +'), word.replace(' ', ' +')])
                else:
                    keyword = topic.lower() + ' ' + word
                row = [campaign,  # campaign name
                       topic,  # ad group name
                       keyword, # instructor 
                       match]  # keyword match type
                campaign_keywords.append(row)

    # I said more than twice! :)             
    for topic in topics:
        for word in keywords:
            for match in match_types:
                if match == 'Broad':
                    keyword = '+' + ' +'.join([word.replace(' ', ' +'), topic.lower().replace(' ', ' +')])
                else:
                    keyword = word + ' ' + topic.lower()
                row = [campaign,  # campaign name
                       topic,  # ad group name
                       keyword, #  instructor
                       match]  # keyword match type
                campaign_keywords.append(row)

    return pd.DataFrame.from_records(campaign_keywords, columns=col_names)

试一试吧:

topics = ['Data Science', 'Machine Learning']
keywords = ['course', 'tutorial']
generate_keywords(topics, keywords).head(10)
运动    广告群组    关键词    标准类型
0    SEM_Campaign    数据科学    数据科学课程    精确
1个    SEM_Campaign    数据科学    数据科学课程    短语
2    SEM_Campaign    数据科学    +数据+科学+课程    宽
3    SEM_Campaign    数据科学    数据科学教程    精确
4    SEM_Campaign    数据科学    数据科学教程    短语
5    SEM_Campaign    数据科学    +资料+科学+教学课程    宽
6    SEM_Campaign    机器学习    机器学习课程    精确
7    SEM_Campaign    机器学习    机器学习课程    短语
8    SEM_Campaign    机器学习    +机器+学习+课程    宽
9    SEM_Campaign    机器学习    机器学习教程    精确

看起来不错 现在,让我们为您的每个细分生成相关的主题和关键字!

2.技术关键词

topics = ['R', 'Python', 'SQL', 'Git', 'Shell']  # listed on the /courses page
keywords = ['data science', 'programming', 'analytics', 'data analysis', 'machine learning',
            'deep learning', 'financial analysis', 'data viz', 'visualization', 'data visualization',
            'learn', 'course', 'courses', 'education', 'data import', 'data cleaning',
            'data manipulation', 'probability', 'stats', 'statistics', 'course', 'courses',
           'learn', 'education', 'tutorial']  # @marketing_team: this list can / should be refined or
                                              # expanded based on the strategy and how specific the
                                              # targeting needs to be
tech_keywords = generate_keywords(topics, keywords, campaign='SEM_Technologies')
print('total keywords:', tech_keywords.shape[0])
tech_keywords.head()
total keywords: 750

运动    广告群组    关键词    标准类型
0    SEM_技术    [R    数据科学    精确
1个    SEM_技术    [R    数据科学    短语
2    SEM_技术    [R    + R +数据+科学    宽
3    SEM_技术    [R    编程    精确
4    SEM_技术    [R    编程    短语
3.生成课程关键字
这可能是针对人群的最具体的细分市场,因此也是最相关的细分受众群。如果有人正在搜索“使用r进行数据可视化”而DEMO拥有这门课程,则该广告将非常相关,因为您将拥有恰好满足用户需求的正确着陆页。

不过,有一个小问题。有些课程名称与用户通常搜索的名称不符:“与专家进行机器学习:学校预算”,“ R中的情感分析:整洁的方式”。这些不是坏的课程名称,但是在选择人们可能用来搜索它们的正确关键字时,它们将需要注意。

同样,您可以像在教师的活动中那样刮取名称和相应的URL:

courses_page = 'https://www.demo.com/courses/all'
course_link_selector = '.courses__explore-list .course-block'

course_resp = requests.get(courses_page)
soup = BeautifulSoup(course_resp.text, 'lxml')

course_urls = [link.contents[1]['href'] for link in soup.select(course_link_selector)]
course_urls = ['https://www.demo.com' + url for url in course_urls]
course_names = [link.h4.text for link in soup.select(course_link_selector)]
course_df = pd.DataFrame({
    'name': course_names,
    'url': course_urls
})
course_df['name_clean'] = course_df.name.str.replace('\(.*\)', '').str.strip()  # remove (part x)
print('total keywords:', course_df.shape[0])
course_df.head()
total keywords: 104

名称    网址    name_clean
0    数据科学Python简介    https://www.demo.com/courses/intro-to-pyth ...    数据科学Python简介
1个    R介绍    https://www.demo.com/courses/free-introduc ...    R介绍
2    数据科学中级Python    https://www.demo.com/courses/intermediate- ...    数据科学中级Python
3    面向数据科学的Git简介    https://www.demo.com/courses/introduction- ...    面向数据科学的Git简介
4    中级R    https://www.demo.com/courses/intermediate-r    中级R

您将对generate_keywords()这些课程执行相同的操作(使用功能),但是您需要小心,因为需要对其进行审核,因为如上所述,某些名称并不是人们真正想要的名称,您只需要逐案解释。以下内容对于开始来说应该足够好,然后您可以查看数据并做出决定。

请注意,使用下面的空字符不是错误。当然,名称的名称足够长且具体,以至于它们本身适合用作关键字,而不必添加其他限定词,如“ learn”或“ course”。因此,您将单独使用课程名称以及限定词。

keywords = ['', 'learn', 'course', 'courses', 'tutorial', 'education']
course_keywords = generate_keywords(course_df['name_clean'], keywords, campaign='SEM_Courses')
print('total keywords:', course_keywords.shape[0])
course_keywords.head(10)
total keywords: 3744

运动    广告群组    关键词    标准类型
0    SEM_课程    数据科学Python简介    数据科学python简介    精确
1个    SEM_课程    数据科学Python简介    数据科学python简介    短语
2    SEM_课程    数据科学Python简介    +介绍+ Python +数据+科学+    宽
3    SEM_课程    数据科学Python简介    python简介以进行数据科学学习    精确
4    SEM_课程    数据科学Python简介    python简介以进行数据科学学习    短语
5    SEM_课程    数据科学Python简介    +简介+ Python +数据+科学+学习    宽
6    SEM_课程    数据科学Python简介    数据科学课程的python简介    精确
7    SEM_课程    数据科学Python简介    数据科学课程的python简介    短语
8    SEM_课程    数据科学Python简介    +介绍+ Python +数据+科学+课程    宽
9    SEM_课程    数据科学Python简介    数据科学课程的python简介    精确
4.主题关键字
这些基本上是人们可能会感兴趣的通用主题。它们由“轨道”部分涵盖,该部分将技能和职业作为子部分。为了您的目的,可以将它们归为同一广告系列。就像您在前面各节中所做的一样,过程再次相同!

技能专长

skills_page = 'https://www.demo.com/tracks/skill'
skills_link_selector = '#all .shim'

skills_resp = requests.get(skills_page)
skill_soup = BeautifulSoup(skills_resp.text, 'lxml')

skills_urls = [link['href'] for link in skill_soup.select(skills_link_selector)]
skills_names = [skill.replace('/tracks/', '').replace('-', ' ') for skill in skills_urls]
skills_urls = ['https://www.demo.com' + url for url in skills_urls]
招贤纳士
career_page = 'https://www.demo.com/tracks/career'
career_link_selector = '#all .shim'

career_resp = requests.get(career_page)
career_soup = BeautifulSoup(career_resp.text, 'lxml')

career_urls = [link['href'] for link in career_soup.select(career_link_selector)]

career_names = [career.replace('/tracks/', '').replace('-', ' ') for career in career_urls]
career_urls = ['https://www.demo.com' + url for url in career_urls]
tracks_df = pd.DataFrame({
    'name': skills_names + career_names,
    'url': skills_urls + career_urls
})
tracks_df['name'] = [x.title() for x in tracks_df['name']]
tracks_df.head()

名称    网址
0    R编程    https://www.demo.com/tracks/r-programming
1个    用R导入清洁数据    https://www.demo.com/tracks/importing-clea ...
2    使用R进行数据处理    https://www.demo.com/tracks/data-manipulat ...
3    Python编程    https://www.demo.com/tracks/python-program ...
4    使用Python导入清洁数据    https://www.demo.com/tracks/importing-clea ...
tracks_keywords = generate_keywords(tracks_df['name'], keywords, campaign='SEM_Tracks')
print('total keywords:', tracks_keywords.shape[0])
tracks_keywords.head()
total keywords: 720
运动    广告群组    关键词    标准类型
0    SEM_Tracks    R编程    编程    精确
1个    SEM_Tracks    R编程    编程    短语
2    SEM_Tracks    R编程    + R +编程+    宽
3    SEM_Tracks    R编程    r编程学习    精确
4    SEM_Tracks    R编程    r编程学习    短语

最后,您连接中列出的所有关键字instructor_keywords,tech_keywords,course_keywords,并tracks_keywords让他们都聚集到一个大的数据帧:


运动    广告群组    关键词    标准类型
0    SEM_讲师    菲利普·舒文纳斯    菲斯舒文纳尔斯课程    精确
1个    SEM_讲师    菲利普·舒文纳斯    菲斯舒文纳尔斯课程    短语
2    SEM_讲师    菲利普·舒文纳斯    +菲律宾+ Schouwenaars +课程    宽
3    SEM_讲师    菲利普·舒文纳斯    菲利普舒文纳尔课程    精确
4    SEM_讲师    菲利普·舒文纳斯    菲利普舒文纳尔课程    短语


现在,您可以使用关键字了!如果要查看完整的数据集,请在此处获取。接下来,您需要为每个广告组生成广告。

让我们来生成广告。


广告生成和文案写作
您当前具有以下条件:

广告系列和广告组名称在full_keywords_dfDataFrame中相互正确映射
广告组名称和之前抓取的相应网址(课程,讲师和曲目),并且您需要为技术生成一个。
有了这个,您可以遵循以下计划:

创建要使用的广告模板(开始时最好使用2-3个)
创建一Campaign列并将其添加到('name','url')DataFrames
将所有('name','url')DataFrame合并为一个大的
为所有广告组生成所有广告;每个广告均包含以下字段(这些字段是您正在使用的同一DataFrame中的新列):

标题1:最多30个字符
标题2:最多30个字符
显示网址:从最终网址自动推断
最终到达网址:用户最终到达的完整路径(必须与显示网址位于同一域中
确保工作与keywordsDataFrame 一致

上传并启动广告系列!
生成广告仅意味着替换模板中所属的主题名称(课程,技术,讲师等),并为您拥有的每个广告组制作2-3个广告变体。

Python SEM运动

广告范本
需要注意的重要一点是,尽管插入广告组名称所属的广告组是一个简单的过程,但问题是您需要使字段的长度在上述限制范围内。而且,由于您的课程和主题的名称相差很大,因此您需要查看可以采取的措施。

让我们看看有多少个问题是:

%matplotlib inline
import matplotlib.pyplot as plt
adgroup_lengths = pd.Series([len(adgrp) for adgrp in full_keywords_df['Ad Group'].unique()])
long_adgroups = sum(adgroup_lengths > 30)
plt.figure(figsize=(9,6))
plt.hist(adgroup_lengths, rwidth=0.9, bins=50)
plt.vlines(x=30, ymin=0, ymax=10, colors='red')
plt.title(str(long_adgroups) + ' ad group name lenghts > 30 (don\'t fit in a headline)',  fontsize=17)
plt.xlabel('Ad Group Name Lengths', fontsize=15)
plt.ylabel('Count', fontsize=15)
plt.yticks(range(11))
plt.xticks(range(0, 51, 5))
plt.grid(alpha=0.5)
plt.show()

搜索引擎营销数据科学Python

看来您的问题不是小问题,也没有直接的解决方法。理想情况下,您希望两个标题包含我们要推广的产品(课程)的完整标题。

我想到了不同的解决方法,因此决定编写一个简单的算法,将名称分成两个词组,每个词组最多包含30个字符。

该算法不适合一般使用,需要进行一些调整才能使其通用,但对于以下数据集,它的效果很好:

def split_string(string, splits=2, max_len=60):
    """Split `string` into `splits` words, each shorter than `max_len` / `splits`"""
    if len(string) < max_len / splits:
        return string, ''
    str_words = string.split(' ')
    result = ''
    for i, word in enumerate(str_words):
        if len(result + ' ' + word) <= max_len / splits:
            result += word + ' '
        else:
            
eak     spaces = result.strip().count(' ')     result2 = string[string[len(result):].index(word) + len(result):]     return result.strip(), result2 print(split_string('this is a very long course name that needs splitting', 2, 60)) print(split_string('short course name', 2, 60)) ('this is a very long course', 'name that needs splitting') ('short course name', '')

我通常不会这样做,但是我喜欢这种技术,我想在制作其他广告系列时会用到它。这是编写教程的不错的副作用!

现在,让我们考虑一下您要编写的模板。

我使用的常规广告模板包含以下元素(通常按此顺序)。

产品:如果我要在Google上搜索“数据科学课程”,则需要在链接/广告中的某处看到“数据科学课程”。
好处:这是人们真正追求的情感/心理方面的事情,而不仅仅是完成课程,“提升职业生涯”,“从人群中脱颖而出”。
特点:既然您已经向我许诺了月亮,请告诉我如何将我带到那里!“超过100项数据科学课程”,“向顶尖专家学习”,“获得有关您的编码技能的即时反馈”。
呼吁采取行动:好的,所以您告诉了我所拥有的,激发了我去购买它,并向我展示了我将如何到达那里。我卖了 现在我该怎么做?“免费注册试用”,“免费试用第一章”,“每年订阅可节省20%”
将所有这些都放到一条长鸣叫的广告中并不容易,其中有些可能会重叠。但是,您会尽力而为。

标题1:这将始终包含课程名称(或前半部分)。
标题2:课程名称的后半部分,或以下内容之一:
促进您的数据科学职业
在人群中脱颖而出
解决复杂的问题
说明:每个广告组将具有以下三个变体,它们将轮流展示。
直接向该领域的顶级专家学习。年度订阅可享受20%的折扣
掌握曲线,掌握数据科学技能。$ 29 /月。随时取消
从世界上最好的主题中选择各种各样的主题。现在开始
创建Campaign列

full_keywords_df.Campaign.unique()  # just to make sure you have consistent naming conventions
array(['SEM_Instructors', 'SEM_Technologies', 'SEM_Courses', 'SEM_Tracks'], dtype=object)
course_df['Campaign'] = 'SEM_Courses'
course_df = course_df.rename(columns={'name_clean': 'name', 'name': 'old_name'})
course_df.head()

old_name    网址    名称    运动
0    数据科学Python简介    https://www.sdy918.cn/courses/intro-to-pyth ...    数据科学Python简介    SEM_课程
1个    R介绍    https://www.sdy918.cn/courses/free-introduc ...    R介绍    SEM_课程
2    数据科学中级Python    https://www.sdy918.cn/courses/intermediate- ...    数据科学中级Python    SEM_课程
3    面向数据科学的Git简介    https://www.sdy918.cn/courses/introduction- ...    面向数据科学的Git简介    SEM_课程
4    中级R    https://www.sdy918.cn/courses/intermediate-r    中级R    SEM_课程
instructor_df['Campaign'] = 'SEM_Instructors'
instructor_df.head()
名称    网址    运动
0    菲利普·舒文纳斯    https://www.sdy918.cn/instructors/filipsch    SEM_讲师
1个    乔纳森·科尼利森    https://www.sdy918.cn/instructors/jonathana ...    SEM_讲师
2    雨果·鲍恩·安德森    https://www.sdy918.cn/instructors/hugobowne    SEM_讲师
3    格雷格·威尔逊    https://www.sdy918.cn/instructors/greg48f64 ...    SEM_讲师
4    尼克·卡迪(Nick Carchedi)    https://www.sdy918.cn/instructors/nickyc    SEM_讲师
tracks_df['Campaign'] = 'SEM_Tracks'
tracks_df.head()
名称    网址    运动
0    R编程    https://www.sdy918.cn/tracks/r-programming    SEM_Tracks
1个    用R导入清洁数据    https://www.sdy918.cn/tracks/importing-clea ...    SEM_Tracks
2    使用R进行数据处理    https://www.sdy918.cn/tracks/data-manipulat ...    SEM_Tracks
3    Python编程    https://www.sdy918.cn/tracks/python-program ...    SEM_Tracks
4    使用Python导入清洁数据    https://www.sdy918.cn/tracks/importing-clea ...    SEM_Tracks

tech_domain = 'https://www.sdy918.cn/courses/tech:'
tech_domain_list = []
for tech in ['R', 'Python', 'SQL', 'Git', 'Shell']:
    tech_domain_list.append((tech, tech_domain + tech))
tech_df = pd.DataFrame.from_records(tech_domain_list, columns=['name', 'url'])
tech_df['Campaign'] = 'SEM_Technologies'
tech_df
名称    网址    运动
0    [R    https://www.sdy918.cn/courses/tech:R    SEM_技术
1个    蟒蛇    https://www.sdy918.cn/courses/tech:Python    SEM_技术
2    的SQL    https://www.sdy918.cn/courses/tech:SQL    SEM_技术
3    吉特    https://www.sdy918.cn/courses/tech:Git    SEM_技术
4    贝壳    https://www.sdy918.cn/courses/tech:Shell    SEM_技术
合并所有('name','url')数据框
full_ads_df = pd.concat([course_df[['Campaign', 'name', 'url']],
                        instructor_df,
                        tracks_df,
                        tech_df], ignore_index=True)
full_ads_df = full_ads_df.rename(columns={'name': 'Ad Group', 'url': 'Final URL'})
print('total rows:', full_ads_df.shape[0])
n_adgroups = full_ads_df.shape[0]
full_ads_df.head()
total rows: 201

运动    广告群组    最终网址
0    SEM_课程    数据科学Python简介    https://www.sdy918.cn/courses/intro-to-pyth ...
1个    SEM_课程    R介绍    https://www.sdy918.cn/courses/free-introduc ...
2    SEM_课程    数据科学中级Python    https://www.sdy918.cn/courses/intermediate- ...
3    SEM_课程    面向数据科学的Git简介    https://www.sdy918.cn/courses/introduction- ...
4    SEM_课程    中级R    https://www.sdy918.cn/courses/intermediate-r
产生广告
只是为了跟踪您的位置。您现在有广告数据帧包含Campaign,Ad Group和Final URL列正确映射。您需要添加Headline 1,Headline 2和Description字段。

请注意,您将为每个广告组添加三个不同的广告变体。这是一个很好的做法,主要用于测试目的,例如查看用户点击的内容,哪些广告可以带来更多转化等。您最终应获得一个DataFrame,其数据行的数量是当前行的三倍。

让我们开始将每行复制三遍full_ads_df:

full_ads_df = full_ads_df.iloc[[x  for x in range(n_adgroups) for i in range(3)], :]
print('total rows:', full_ads_df.shape[0])
full_ads_df.head(9)
total rows: 603
运动    广告群组    最终网址
0    SEM_课程    数据科学Python简介    https://www.sdy918.cn/courses/intro-to-pyth ...
0    SEM_课程    数据科学Python简介    https://www.sdy918.cn/courses/intro-to-pyth ...
0    SEM_课程    数据科学Python简介    https://www.sdy918.cn/courses/intro-to-pyth ...
1个    SEM_课程    R介绍    https://www.sdy918.cn/courses/free-introduc ...
1个    SEM_课程    R介绍    https://www.sdy918.cn/courses/free-introduc ...
1个    SEM_课程    R介绍    https://www.sdy918.cn/courses/free-introduc ...
2    SEM_课程    数据科学中级Python    https://www.sdy918.cn/courses/intermediate- ...
2    SEM_课程    数据科学中级Python    https://www.sdy918.cn/courses/intermediate- ...
2    SEM_课程    数据科学中级Python    https://www.sdy918.cn/courses/intermediate- ...

现在,您添加上面创建的三个不同的描述。

Description = [
    'Learn Directly From the Top Experts in the Field. 20% off Annual Subcriptions',
    'Be Ahead of the Curve, Master Data Science Skills. $29 / Month. Cancel Anytime',
    'Choose From a Wide Variety of Topics Tuaght by the Best in the World. Start Now'   
]
Description = [x for i in range(n_adgroups) for x in Description ]
full_ads_df['Description'] = Description
full_ads_df.head()

运动    广告群组    最终网址    描述
0    SEM_课程    数据科学Python简介    https://www.sdy918.cn/courses/intro-to-pyth ...    直接向国际顶尖的专家学习
0    SEM_课程    数据科学Python简介    https://www.sdy918.cn/courses/intro-to-pyth ...    领先于曲线,Master Data Science Ski ...
0    SEM_课程    数据科学Python简介    https://www.sdy918.cn/courses/intro-to-pyth ...    从...选择各种各样的话题
1个    SEM_课程    R介绍    https://www.sdy918.cn/courses/free-introduc ...    直接向国际顶尖的专家学习
1个    SEM_课程    R介绍    https://www.sdy918.cn/courses/free-introduc ...    领先于曲线,Master Data Science Ski ...

接下来,添加Headline 1和Headline 2到DataFrame。你几乎完成!

benefits = [
    'Boost Your Data Science Career',
    'Stand Out From the Crowd',
    'Tackle Complex Questions'    
]
Headline 2广告组的长度不超过30个时,将包括这些好处。在这种情况下,您将有一个空字段,将使用其中的一项福利来填充该字段。

benefits = [x for i in range(n_adgroups) for x in benefits]
headlines = [split_string(x) for x in full_ads_df['Ad Group']]
full_ads_df['Headline 1'] = [x[0] for x in headlines]
full_ads_df['Headline 2'] = [x[1] if x[1] else benefits[i] for i, x in enumerate(headlines)]
print('total ads:', full_ads_df.shape[0])
full_ads_df.head(9)
total ads: 603

运动    广告群组    最终网址    描述    标题1    标题2
0    SEM_课程    数据科学Python简介    https://www.sdy918.cn/courses/intro-to-pyth ...    直接向国际顶尖的专家学习    Python数据简介    科学
0    SEM_课程    数据科学Python简介    https://www.sdy918.cn/courses/intro-to-pyth ...    领先于曲线,Master Data Science Ski ...    Python数据简介    科学
0    SEM_课程    数据科学Python简介    https://www.sdy918.cn/courses/intro-to-pyth ...    从...选择各种各样的话题    Python数据简介    科学
1个    SEM_课程    R介绍    https://www.sdy918.cn/courses/free-introduc ...    直接向国际顶尖的专家学习    R介绍    促进您的数据科学职业
1个    SEM_课程    R介绍    https://www.sdy918.cn/courses/free-introduc ...    领先于曲线,Master Data Science Ski ...    R介绍    在人群中脱颖而出
1个    SEM_课程    R介绍    https://www.sdy918.cn/courses/free-introduc ...    从...选择各种各样的话题    R介绍    解决复杂的问题
2    SEM_课程    数据科学中级Python    https://www.sdy918.cn/courses/intermediate- ...    直接向国际顶尖的专家学习    数据的中级Python    科学
2    SEM_课程    数据科学中级Python    https://www.sdy918.cn/courses/intermediate- ...    领先于曲线,Master Data Science Ski ...    数据的中级Python    科学
2    SEM_课程    数据科学中级Python    https://www.sdy918.cn/courses/intermediate- ...    从...选择各种各样的话题    数据的中级Python    科学

如您所见,“ Python for Data Science入门”足够长,可以容纳两个领域,因此请保持原样以使其清晰。在第二种情况下,“ Introduction to R”适合第一个标题,因此您插入在中创建的三个不同的好处Headline 2。

大功告成!

仔细检查详细信息
快速检查一下,以确保两个DataFrame中的所有广告系列和广告组名称都相同。

ads_check = (full_ads_df[['Campaign', 'Ad Group']]
             .drop_duplicates()
             .sort_values(['Campaign', 'Ad Group'])
             .reset_index(drop=True))
keywords_check = (full_keywords_df[['Campaign', 'Ad Group']]
                  .drop_duplicates()
                  .sort_values(['Campaign', 'Ad Group'])
                  .reset_index(drop=True))

all(ads_check == keywords_check)
True
full_ads_df.to_csv('ads.csv', index=False)

上传并启动
如上所述,本教程仅涵盖SEM广告系列中的特定步骤,因此需要对搜索引擎营销的工作原理有基本的了解。如果您想了解更多有关上传和启动广告组的方法和详细信息,请查阅AdWords指南以开始使用。要访问不同领域的完整课程,您可以查看Google Academy for Ads。

数据科学和SEM:还有更多发现!
现在有了两个CSV文件,您可以上传它们并开始运行广告系列。您将需要设置每日预算,地理位置定位和其他一些参数,但是在大多数情况下,您还是可以这么做的。

版权免责声明

卡卡教学资源网所有资源全部来源于网络整理,本站目地只是为了提供给网友学习研究任何人以任何方式架设运营或出现任何法律问题都与本站无关,如同意观点请下载,如不同意请离开!卡卡教学资源网特此声明!

分享:

扫一扫在手机阅读、分享本文

本站资源所有内容免费,现在就加入我们吧!登录注册×
»
会员登录
新用户注册
×
会员注册
已有账号
×