{count, plural, one {Kursus} other {Kursus}}
Selama dua tahun menjadi pengguna setia DataCamp, saya banyak belajar. Bisnis utama saya adalah pemasaran online, dan saya sangat terbantu oleh keterampilan data science yang saya pelajari. Sekarang saya mampu mengelola kampanye yang jauh lebih besar dan kompleks, serta memeliharanya secara efisien. Karena saya sudah cukup akrab dengan konten, berbagai topik, dan paket di R dan Python, saya berpikir bagaimana cara membuat kampanye penelusuran untuk DataCamp sebagai latihan.
Dalam tutorial ini, Anda akan membahas topik-topik berikut:
- Pertama, Anda akan mempelajari lebih lanjut tentang Search Engine Marketing (SEM) dan kampanye penelusuran;
- Kemudian, Anda akan menelaah lebih dekat studi kasus bisnis yang ada;
- Selanjutnya, Anda akan menghasilkan kata kunci untuk instruktur, teknologi, kursus, dan topik DataCamp.
- Dengan kata kunci yang sudah siap, Anda dapat mulai membuat iklan. Anda akan menyusun strategi terlebih dahulu, lalu mulai membuat templat iklan.
Search Engine Marketing (SEM) dan Kampanye
Apa itu SEM?
SEM adalah salah satu cara paling efektif untuk mengembangkan bisnis Anda di pasar yang semakin kompetitif. Ini adalah proses mendapatkan lalu lintas situs web dengan membeli iklan di mesin telusur. Google AdWords adalah salah satu bentuk iklan online paling populer: Anda menawar penempatan iklan di tautan bersponsor mesin telusur untuk kata kunci yang terkait dengan bisnis Anda, lalu membayar biaya kepada mesin telusur untuk setiap klik.
Pembayaran per klik bisa menjadi biaya yang cukup besar, sehingga sangat penting untuk merencanakan dan mengelompokkan kata kunci serta iklan sedemikian rupa agar Anda dapat mengendalikan biaya dan, semoga, mendapatkan kampanye yang menguntungkan.
Meskipun proses pasti untuk menentukan harga per klik merupakan rahasia yang dijaga ketat dan bergantung pada banyak faktor, gagasan utamanya adalah semakin relevan iklan Anda, semakin rendah biaya per kliknya.
Menyiapkan Kampanye Penelusuran
Sebelum menyiapkan kampanye, biasanya Anda akan menentukan anggaran, memilih kata kunci, dan memeriksa kompetitor. Selain itu, Anda akan memastikan halaman arahan sudah siap. Setelah itu, Anda dapat menyiapkan kampanye: menulis iklan pertama, menetapkan detailnya, lalu menyiapkan pelacakan konversi. Tutorial ini terutama akan membahas proses menghasilkan banyak kata kunci dan iklan, berdasarkan berbagai halaman arahan yang kita miliki.
Nah, sebelum mulai, mari kita lihat dulu apa sebenarnya kampanye penelusuran ini!
Grup Iklan
Untuk memulai kampanye penelusuran, pertama-tama Anda perlu menyusun rencana untuk grup iklan Anda. Ini adalah unit organisasi dasar tempat Anda memetakan kata kunci, iklan, dan halaman arahan. Namun, apa sebenarnya ketiga komponen ini?
- Kata kunci: niat pengguna, apa yang mereka cari.
- Iklan: janji Anda kepada pengguna untuk niat tersebut.
- Halaman arahan: realisasi janji Anda.
Pemetaan ketiga elemen tersebut dengan benar mencakup sekitar 70–80% pekerjaan. Jika Anda benar di bagian ini, pemeliharaan dan perubahan akan menjadi jauh lebih mudah.
Ini berarti, agar spesifik dan relevan bagi pengguna, Anda perlu mempromosikan produk yang Anda miliki, dan terutama fokus mengarahkan orang yang tepat ke halaman yang tepat, melalui pesan atau ekspektasi yang tepat. Struktur kampanye yang baik mencerminkan dan mengikuti struktur situs web, yang pada dasarnya mencerminkan strategi bisnis.
Catatan bahwa setiap grup iklan perlu menjadi bagian dari sebuah kampanye. Pada level kampanye, Anda memiliki pengaturan yang mengatur semua grup iklan dalam kampanye, seperti penargetan bahasa, lokasi, perangkat, waktu dalam sehari, dan sebagainya.
Kampanye Penelusuran, Langkah demi Langkah
Pada bagian sebelumnya, Anda melihat kampanye penelusuran dari tingkat tinggi: Anda melihat bahwa kata kunci, iklan, dan halaman arahan adalah bagian dari grup iklan dan bahwa Anda perlu menyusun rencana untuk unit organisasi dasar ini, tempat Anda memetakan ketiga komponen sehingga mencerminkan strategi bisnis Anda. Pada bagian ini, Anda akan menyelami lebih dalam apa yang dapat Anda lakukan untuk menyiapkan kampanye, dengan fokus pada langkah-langkah yang akan Anda jalani dalam tutorial ini.

Seperti yang ditunjukkan di atas, inilah pemetaan yang ingin Anda capai. Sebagai keluaran, Anda ingin memiliki dua DataFrame utama: satu untuk kata kunci dan satu lagi untuk iklan. Anda dapat melihat seperti apa tampilannya di bawah.
| Kampanye | Grup Iklan | Kata Kunci |
|---|---|---|
| campaign 1 | adgroup 1 | keyword 1 |
| campaign 1 | adgroup 2 | keyword 2 |
| campaign 2 | adgroup 1 | keyword 3 |
| campaign 2 | adgroup 1 | keyword 4 |
| campaign 2 | adgroup 2 | keyword 5 |
| Kampanye | Grup Iklan | URL Tampilan | URL Final | Headline 1 | Headline 2 |
|---|---|---|---|---|---|
| campaign 1 | adgroup 1 | datacamp.com | datacamp.com/a | Headline 1 | Headline 1a |
| campaign 1 | adgroup 2 | datacamp.com | datacamp.com/b | Headline 1 | Headline 1a |
| campaign 2 | adgroup 1 | datacamp.com | datacamp.com/c | Headline 1 | Headline 1a |
| campaign 2 | adgroup 2 | datacamp.com | datacamp.com/d | Headline 2 | Headline 2a |
| campaign 2 | adgroup 3 | datacamp.com | datacamp.com/e | Headline 3 | Headline 1a |
Setelah ini selesai, Anda siap mengunggahnya sebagai file Comma-separated Value (CSV) ke Google AdWords atau platform lain yang bekerja dengan cara yang sama. Google AdWords adalah platform penelusuran berbayar yang paling populer digunakan oleh pemasar penelusuran, selain Bing Ads, Yandex, Baidu, dan lainnya.
Catatan bahwa jika Anda ingin mengimpor data ke platform lain dan bukan Google Adwords atau Bing Ads, Anda perlu melakukan penyesuaian kecil!
Kasus Bisnis: DataCamp
Seperti yang Anda baca di pendahuluan, Anda ingin membuat kampanye penelusuran untuk DataCamp. Melihat berbagai cara seseorang dapat menunjukkan minat pada produk yang ditawarkan perusahaan ini, yakni pendidikan data science, Anda dapat dengan mudah menyusun daftar awal beberapa cara tersebut:
- Instruktur: 'Hadley Wickham course', 'courses by Garrett Grolemund', dan sebagainya.
- Teknologi: 'python course', 'r courses', 'sql data science course', dan sebagainya.
- Kursus: nama kursus spesifik yang kami miliki; 'unsupervised learning in python', 'deep learning in python', dan sebagainya.
- Topik: 'machine learning courses', 'data visualization course', dan sebagainya.
- Paket/pustaka: 'learn ggplot', 'matplotlib tutorial', dan sebagainya.
Dalam tutorial ini, Anda tidak akan melalui fase riset kata kunci tradisional, karena Anda memiliki kekuatan bahasa pemrograman untuk menghasilkan semua kombinasi yang mungkin dan mengelompokkannya ke dalam kampanye serta grup iklan masing-masing.
Karena itu, Anda membutuhkan dua hal utama untuk melakukan penyiapan ini:
- Pengetahuan produk: mengetahui kursus dan topik apa yang dimiliki DataCamp, bagaimana mereka diorganisasi di situs, dan bagaimana dikelompokkan. Anda dapat mengetahuinya dengan menjelajah, dan Anda pasti akan mendapatkan wawasan yang lebih baik dengan pengetahuan internal (terutama jika ada perubahan yang direncanakan!).
- Kata kunci relevan: semua cara yang mungkin digunakan seseorang untuk menyatakan minat pada hal yang Anda sediakan. Dalam kasus DataCamp, itu adalah 'course', 'learn', 'education', 'tutorial', dan sebagainya. Anda dapat melakukannya dengan brainstorming, melihat alat kata kunci, dan metode lain.
Pembuatan Kata Kunci untuk Kampanye SEM Anda
Mari mulai dengan menghasilkan kata kunci!
1. Hasilkan Kata Kunci Instruktur
Kampanye ini akan menargetkan orang yang mencari kursus oleh salah satu instruktur di DataCamp.
Anda dapat membatasi kata kunci pada "course by <instructor name>" atau memilih set kata kunci luas yang hanya menargetkan nama instruktur. Pada awalnya, lebih baik menargetkan nama dengan 'course' atau 'courses' dan melihat hasilnya.
Anda juga perlu memeriksa apakah ada nama yang juga kebetulan merupakan nama tokoh terkenal lain, atau nama yang sangat umum, maka Anda perlu membatasi kata kunci untuk instruktur tersebut.
Mulailah dengan mengambil nama instruktur dan URL masing-masing:
import requests
from bs4 import BeautifulSoup
instructors_page = 'https://www.datacamp.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.datacamp.com' + url for url in instructor_urls]
Masukkan ke dalam DataFrame untuk digunakan nanti. URL akan digunakan kemudian untuk membuat iklan.
instructor_df = pd.DataFrame({
'name': instructor_names,
'url': instructor_urls
})
print(instructor_df.shape)
instructor_df.head()
(72, 2)
| name | url | |
|---|---|---|
| 0 | Filip Schouwenaars | https://www.datacamp.com/instructors/filipsch |
| 1 | Jonathan Cornelissen | https://www.datacamp.com/instructors/jonathana... |
| 2 | Hugo Bowne-Anderson | https://www.datacamp.com/instructors/hugobowne |
| 3 | Greg Wilson | https://www.datacamp.com/instructors/greg48f64... |
| 4 | Nick Carchedi | https://www.datacamp.com/instructors/nickyc |
Sekarang setelah Anda memiliki nama instruktur, Anda akan menggunakan templat di mana Anda menggabungkan setiap nama dengan sekumpulan kata kunci terkait topik Anda, yang utamanya adalah kursus oleh instruktur.
Variabel yang digunakan dalam kode di bawah:
col_names: Ini adalah daftar nama header tabel yang akan kita unggah ke Google AdWords.words: Kata yang akan Anda gabungkan dengan nama instruktur untuk menghasilkan kata kunci/frasa lengkap.match_types: Detail lebih lanjut dapat ditemukan di Pusat bantuan AdWords, namun berikut dasarnya.
[data science course], "data science course", dan data science course secara teknis adalah tiga kata kunci berbeda.
- exact match (di dalam tanda kurung), hanya akan memicu iklan jika pengguna mencari kata kunci itu persis, misalnya 'data science course', ditulis persis seperti ini.
- phrase match (dengan tanda kutip), akan memicu iklan jika pengguna mencari string yang persis sama ditambah apa pun sebelum atau sesudahnya. Jadi "best data science course", atau "data science course online" akan memicu iklan kita.
- broad match (tanpa tanda baca) akan memicu iklan jika seseorang mencari apa pun yang mirip atau terkait dengan 'data science course'. Ini tergantung algoritma Google, dan Anda harus berhati-hati, karena iklan mungkin terpicu saat seseorang mencari 'data science platform' misalnya, yang tidak persis seperti yang kita promosikan. Saya lebih suka menggunakan modified broad match, karena sedikit membatasi penargetan. Ini pada dasarnya memicu iklan jika seseorang mencari turunan dari kata tersebut, dan bukan kata lain yang mirip makna. Ditandai dengan tanda '+' di awal kata. Jadi, '+game' akan memicu iklan oleh 'gaming', 'gamers', tetapi tidak oleh 'play'.
col_names = ['Campaign', 'Ad Group', 'Keyword', 'Criterion Type']
instructor_keywords = []
words = ['course', 'courses', 'learn', 'data science', 'data camp', 'datacamp']
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 broach match
else:
keyword = instructor.lower() + ' ' + word
row = ['SEM_Instructors', # campaign name
instructor, # ad group name
keyword, # instructor <keyword>
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, # <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
| Kampanye | Grup Iklan | Kata Kunci | Jenis Kriteria | |
|---|---|---|---|---|
| 0 | SEM_Instructors | Filip Schouwenaars | filip schouwenaars course | Exact |
| 1 | SEM_Instructors | Filip Schouwenaars | filip schouwenaars course | Phrase |
| 2 | SEM_Instructors | Filip Schouwenaars | +filip +schouwenaars +course | Broad |
| 3 | SEM_Instructors | Filip Schouwenaars | filip schouwenaars courses | Exact |
| 4 | SEM_Instructors | Filip Schouwenaars | filip schouwenaars courses | Phrase |
Pada dasarnya, yang Anda lakukan adalah melakukan loop pada nama instruktur, semua kata kunci yang berbeda, dan semua jenis kecocokan yang kita miliki, sehingga kita memiliki semua kombinasi yang mungkin. Kita melakukannya dua kali, sekali untuk templat 'nama instruktur kata kunci' dan 'kata kunci nama instruktur'.
Sekarang Anda cukup mengulang hal yang sama untuk semua segmen kita dengan sedikit modifikasi pada kata kunci, dan bagaimana kita mengekstrak data.
Pedoman bagus yang saya pelajari dari R for Data Science adalah jika Anda akan menyalin dan menempel lebih dari dua kali, saatnya menulis fungsi!
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 <keyword>
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, # <keyword> instructor
match] # keyword match type
campaign_keywords.append(row)
return pd.DataFrame.from_records(campaign_keywords, columns=col_names)
Mari kita coba:
topics = ['Data Science', 'Machine Learning']
keywords = ['course', 'tutorial']
generate_keywords(topics, keywords).head(10)
| Kampanye | Grup Iklan | Kata Kunci | Jenis Kriteria | |
|---|---|---|---|---|
| 0 | SEM_Campaign | Data Science | data science course | Exact |
| 1 | SEM_Campaign | Data Science | data science course | Phrase |
| 2 | SEM_Campaign | Data Science | +data +science +course | Broad |
| 3 | SEM_Campaign | Data Science | data science tutorial | Exact |
| 4 | SEM_Campaign | Data Science | data science tutorial | Phrase |
| 5 | SEM_Campaign | Data Science | +data +science +tutorial | Broad |
| 6 | SEM_Campaign | Machine Learning | machine learning course | Exact |
| 7 | SEM_Campaign | Machine Learning | machine learning course | Phrase |
| 8 | SEM_Campaign | Machine Learning | +machine +learning +course | Broad |
| 9 | SEM_Campaign | Machine Learning | machine learning tutorial | Exact |
Ini terlihat bagus. Sekarang mari hasilkan topik dan kata kunci yang relevan untuk masing-masing segmen Anda!
2. Kata Kunci Teknologi
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
| Kampanye | Grup Iklan | Kata Kunci | Jenis Kriteria | |
|---|---|---|---|---|
| 0 | SEM_Technologies | R | r data science | Exact |
| 1 | SEM_Technologies | R | r data science | Phrase |
| 2 | SEM_Technologies | R | +r +data +science | Broad |
| 3 | SEM_Technologies | R | r programming | Exact |
| 4 | SEM_Technologies | R | r programming | Phrase |
3. Menghasilkan Kata Kunci Kursus
Ini mungkin yang paling spesifik, dan karenanya paling relevan untuk menargetkan orang. Jika seseorang mencari "data visualization with r" dan DataCamp memiliki kursus tersebut, maka iklannya akan sangat relevan, karena Anda akan memiliki halaman arahan yang tepat untuk memenuhi kebutuhan pengguna itu.
Namun ada satu masalah kecil. Beberapa nama kursus tidak sesuai dengan apa yang biasanya dicari pengguna: 'Machine Learning with the Experts: School Budgets', 'Sentiment Analysis in R: The Tidy Way'. Ini bukan nama kursus yang buruk, tetapi perlu perhatian dalam memilih kata kunci yang mungkin digunakan orang untuk mencarinya.
Sekali lagi, Anda dapat melakukan scrape nama dan URL terkait seperti yang Anda lakukan pada kampanye instruktur:
courses_page = 'https://www.datacamp.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.datacamp.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 | url | name_clean | |
|---|---|---|---|
| 0 | Intro to Python for Data Science | https://www.datacamp.com/courses/intro-to-python-for-data-science... | Intro to Python for Data Science |
| 1 | Introduction to R | https://www.datacamp.com/courses/free-introduction-to-r... | Introduction to R |
| 2 | Intermediate Python for Data Science | https://www.datacamp.com/courses/intermediate-python... | Intermediate Python for Data Science |
| 3 | Introduction to Git for Data Science | https://www.datacamp.com/courses/introduction-to-git... | Introduction to Git for Data Science |
| 4 | Intermediate R | https://www.datacamp.com/courses/intermediate-r | Intermediate R |
Anda akan melakukan hal yang sama (menggunakan fungsi generate_keywords()) untuk kursus, tetapi Anda perlu berhati-hati, karena perlu ditinjau, seperti disebutkan di atas, beberapa nama tidak benar-benar sesuai dengan apa yang dicari orang, dan Anda hanya perlu menangani itu kasus per kasus. Berikut ini cukup baik untuk awal, lalu Anda dapat melihat datanya dan mengambil keputusan.
Perlu dicatat bahwa penggunaan karakter kosong di bawah ini bukanlah kesalahan. Nama kursus cukup panjang dan spesifik sehingga layak menjadi kata kunci itu sendiri, tanpa harus menambahkan kata kualifikasi lain seperti 'learn' atau 'course'. Jadi Anda akan menggunakan nama kursus saja, serta dengan kata kualifikasi.
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
| Kampanye | Grup Iklan | Kata Kunci | Jenis Kriteria | |
|---|---|---|---|---|
| 0 | SEM_Courses | Intro to Python for Data Science | intro to python for data science | Exact |
| 1 | SEM_Courses | Intro to Python for Data Science | intro to python for data science | Phrase |
| 2 | SEM_Courses | Intro to Python for Data Science | +intro +to +python +for +data +science + | Broad |
| 3 | SEM_Courses | Intro to Python for Data Science | intro to python for data science learn | Exact |
| 4 | SEM_Courses | Intro to Python for Data Science | intro to python for data science learn | Phrase |
| 5 | SEM_Courses | Intro to Python for Data Science | +intro +to +python +for +data +science +learn | Broad |
| 6 | SEM_Courses | Intro to Python for Data Science | intro to python for data science course | Exact |
| 7 | SEM_Courses | Intro to Python for Data Science | intro to python for data science course | Phrase |
| 8 | SEM_Courses | Intro to Python for Data Science | +intro +to +python +for +data +science +course | Broad |
| 9 | SEM_Courses | Intro to Python for Data Science | intro to python for data science courses | Exact |
4. Kata Kunci untuk Topik
Ini pada dasarnya adalah topik generik yang mungkin diminati orang untuk dicari. Topik-topik ini tercakup oleh bagian 'tracks', yang memiliki subbagian skills dan career. Untuk tujuan Anda, semuanya dapat dikelompokkan dalam kampanye yang sama. Prosesnya kembali sama, seperti yang telah Anda lakukan pada bagian sebelumnya!
Skills
skills_page = 'https://www.datacamp.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.datacamp.com' + url for url in skills_urls]
Careers
career_page = 'https://www.datacamp.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.datacamp.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()
| name | url | |
|---|---|---|
| 0 | R Programming | https://www.datacamp.com/tracks/r-programming |
| 1 | Importing Cleaning Data With R | https://www.datacamp.com/tracks/importing-cleaning-data-with-r... |
| 2 | Data Manipulation With R | https://www.datacamp.com/tracks/data-manipulation-with-r... |
| 3 | Python Programming | https://www.datacamp.com/tracks/python-programming... |
| 4 | Importing Cleaning Data With Python | https://www.datacamp.com/tracks/importing-cleaning-data-with-python... |
tracks_keywords = generate_keywords(tracks_df['name'], keywords, campaign='SEM_Tracks')
print('total keywords:', tracks_keywords.shape[0])
tracks_keywords.head()
total keywords: 720
| Kampanye | Grup Iklan | Kata Kunci | Jenis Kriteria | |
|---|---|---|---|---|
| 0 | SEM_Tracks | R Programming | r programming | Exact |
| 1 | SEM_Tracks | R Programming | r programming | Phrase |
| 2 | SEM_Tracks | R Programming | +r +programming + | Broad |
| 3 | SEM_Tracks | R Programming | r programming learn | Exact |
| 4 | SEM_Tracks | R Programming | r programming learn | Phrase |
Terakhir, gabungkan semua kata kunci yang tercantum dalam instructor_keywords, tech_keywords, course_keywords, dan tracks_keywords agar semuanya terkumpul dalam satu DataFrame besar:
full_keywords_df = pd.concat([instructor_keywords_df, tech_keywords, course_keywords, tracks_keywords])
print('total keywords:', full_keywords_df.shape[0])
print('total campaigns:', len(set(full_keywords_df['Campaign'])))
print('total ad groups:', len(set(full_keywords_df['Ad Group'])))
full_keywords_df.to_csv('keywords.csv', index=False)
full_keywords_df.head()
total keywords: 7806
total campaigns: 4
total ad groups: 191
| Kampanye | Grup Iklan | Kata Kunci | Jenis Kriteria | |
|---|---|---|---|---|
| 0 | SEM_Instructors | Filip Schouwenaars | filip schouwenaars course | Exact |
| 1 | SEM_Instructors | Filip Schouwenaars | filip schouwenaars course | Phrase |
| 2 | SEM_Instructors | Filip Schouwenaars | +filip +schouwenaars +course | Broad |
| 3 | SEM_Instructors | Filip Schouwenaars | filip schouwenaars courses | Exact |
| 4 | SEM_Instructors | Filip Schouwenaars | filip schouwenaars courses | Phrase |
Sekarang Anda siap melangkah dengan kata kunci Anda! Jika Anda ingin melihat seluruh set data, dapatkan di sini. Berikutnya, Anda perlu membuat iklan untuk masing-masing grup iklan.
Mari kita buat iklannya.
Pembuatan Iklan dan Copywriting
Saat ini Anda memiliki hal-hal berikut:
- Nama kampanye dan grup iklan yang sudah dipetakan dengan benar satu sama lain dalam DataFrame
full_keywords_df - Nama grup iklan dan URL terkait dari scraping sebelumnya (kursus, instruktur, dan tracks), dan Anda perlu membuatnya untuk teknologi.
Dengan ini, Anda dapat mengikuti rencana berikut:
- Buat templat iklan untuk digunakan (2–3 sudah cukup untuk memulai)
- Buat kolom
Campaigndan tambahkan ke DataFrame ('name','url') - Gabungkan semua DataFrame (
'name','url') menjadi satu yang besar -
Hasilkan semua iklan untuk semua grup iklan; ini terdiri dari bidang-bidang berikut untuk setiap iklan (ini akan menjadi kolom baru dalam DataFrame yang sama yang sedang Anda kerjakan):
- Headline 1: maksimal 30 karakter
- Headline 2: maksimal 30 karakter
- URL Tampilan: diinferensi otomatis dari URL final
- URL Final: jalur lengkap tempat pengguna akan berakhir (harus domain yang sama dengan URL tampilan
-
Pastikan pekerjaan konsisten dengan DataFrame
keywords - Unggah dan luncurkan kampanye!
Menghasilkan iklan berarti mengganti nama topik (kursus, teknologi, instruktur, dll.) pada tempatnya di templat, dan membuat 2–3 variasi iklan untuk masing-masing grup iklan yang Anda miliki.

Templat Iklan
Satu hal penting untuk diperhatikan adalah meskipun memasukkan nama grup iklan ke tempatnya merupakan proses yang mudah, masalahnya adalah Anda perlu memastikan panjang setiap bidang berada di bawah batas yang disebutkan di atas. Dan karena nama kursus dan topik Anda sangat bervariasi, Anda perlu melihat apa yang bisa dilakukan.
Mari kita lihat seberapa besar masalahnya:
%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()

Tampaknya masalah Anda tidak sepele, dan tidak ada cara langsung untuk menanganinya. Idealnya, Anda ingin kedua headline memuat judul lengkap produk (kursus) yang kita promosikan.
Saya memikirkan berbagai cara untuk mengatasinya, dan memutuskan menulis algoritma sederhana yang membagi nama menjadi dua frasa, masing-masing berisi maksimal tiga puluh karakter.
Algoritma ini tidak cocok untuk penggunaan umum, dan perlu sedikit penyesuaian agar umum, tetapi cukup baik untuk kumpulan data ini:
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:
break
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', '')
Ini bukan sesuatu yang biasanya saya lakukan, tetapi saya menyukai teknik ini, dan saya pikir saya akan menggunakannya saat membuat kampanye lain. Itu efek samping yang menyenangkan dari menulis tutorial!
Sekarang mari pikirkan templat yang ingin Anda tulis.
Templat iklan umum yang saya gunakan terdiri dari elemen berikut (biasanya dalam urutan ini).
- Produk: jika saya mencari 'data science course' di Google, saya perlu melihat 'data science course' di tautan/iklan di suatu tempat.
- Manfaat: ini adalah hal emosional/psikologis yang sebenarnya dicari orang, di luar sekadar menyelesaikan kursus, 'tingkatkan karier Anda', 'menonjol dari kerumunan'.
- Fitur: setelah Anda menjanjikan bulan, tunjukkan bagaimana Anda akan membawa saya ke sana! 'lebih dari 100 kursus data science', 'belajar dari pakar teratas', 'dapatkan umpan balik instan atas keterampilan coding Anda'.
- Ajakan bertindak: baik, Anda sudah memberi tahu saya apa yang Anda punya, memotivasi saya untuk membeli, dan menunjukkan bagaimana saya akan sampai ke sana. Saya yakin. Apa yang harus saya lakukan sekarang? 'daftar uji coba gratis', 'coba bab pertama gratis', 'hemat 20% untuk langganan tahunan'
Tidak mudah memasukkan semuanya dalam satu iklan sepanjang tweet, dan beberapa mungkin tumpang tindih. Namun Anda akan berusaha sebaik mungkin.
- Headline 1: Ini selalu memuat nama kursus (atau paruh pertama).
- Headline 2: Paruh kedua nama kursus, atau salah satu dari berikut ini:
- Tingkatkan Karier Data Science Anda
- Menonjol dari Keramaian
- Tangani Pertanyaan yang Kompleks
- Deskripsi: setiap grup iklan akan memiliki tiga variasi di bawah ini dan akan diputar.
- Belajar Langsung dari Pakar Teratas di Bidangnya. Diskon 20% untuk Langganan Tahunan
- Melangkah Lebih Maju, Kuasai Keterampilan Data Science. $29 / Bulan. Bisa Batalkan Kapan Saja
- Pilih dari Beragam Topik yang Diajarkan oleh yang Terbaik di Dunia. Mulai Sekarang
Buat Kolom 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 | url | name | Campaign | |
|---|---|---|---|---|
| 0 | Intro to Python for Data Science | https://www.datacamp.com/courses/intro-to-python-for-data-science... | Intro to Python for Data Science | SEM_Courses |
| 1 | Introduction to R | https://www.datacamp.com/courses/free-introduction-to-r... | Introduction to R | SEM_Courses |
| 2 | Intermediate Python for Data Science | https://www.datacamp.com/courses/intermediate-python... | Intermediate Python for Data Science | SEM_Courses |
| 3 | Introduction to Git for Data Science | https://www.datacamp.com/courses/introduction-to-git... | Introduction to Git for Data Science | SEM_Courses |
| 4 | Intermediate R | https://www.datacamp.com/courses/intermediate-r | Intermediate R | SEM_Courses |
instructor_df['Campaign'] = 'SEM_Instructors'
instructor_df.head()
| name | url | Campaign | |
|---|---|---|---|
| 0 | Filip Schouwenaars | https://www.datacamp.com/instructors/filipsch | SEM_Instructors |
| 1 | Jonathan Cornelissen | https://www.datacamp.com/instructors/jonathana... | SEM_Instructors |
| 2 | Hugo Bowne-Anderson | https://www.datacamp.com/instructors/hugobowne | SEM_Instructors |
| 3 | Greg Wilson | https://www.datacamp.com/instructors/greg48f64... | SEM_Instructors |
| 4 | Nick Carchedi | https://www.datacamp.com/instructors/nickyc | SEM_Instructors |
tracks_df['Campaign'] = 'SEM_Tracks'
tracks_df.head()
| name | url | Campaign | |
|---|---|---|---|
| 0 | R Programming | https://www.datacamp.com/tracks/r-programming | SEM_Tracks |
| 1 | Importing Cleaning Data With R | https://www.datacamp.com/tracks/importing-cleaning-data-with-r... | SEM_Tracks |
| 2 | Data Manipulation With R | https://www.datacamp.com/tracks/data-manipulation-with-r... | SEM_Tracks |
| 3 | Python Programming | https://www.datacamp.com/tracks/python-programming... | SEM_Tracks |
| 4 | Importing Cleaning Data With Python | https://www.datacamp.com/tracks/importing-cleaning-data-with-python... | SEM_Tracks |
tech_domain = 'https://www.datacamp.com/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
| name | url | Campaign | |
|---|---|---|---|
| 0 | R | https://www.datacamp.com/category/r | SEM_Technologies |
| 1 | Python | https://www.datacamp.com/category/python | SEM_Technologies |
| 2 | SQL | https://www.datacamp.com/category/sql | SEM_Technologies |
| 3 | Git | https://www.datacamp.com/courses/tech:Git | SEM_Technologies |
| 4 | Shell | https://www.datacamp.com/category/shell | SEM_Technologies |
Gabungkan Semua DataFrame ('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
| Campaign | Ad Group | Final URL | |
|---|---|---|---|
| 0 | SEM_Courses | Intro to Python for Data Science | https://www.datacamp.com/courses/intro-to-python-for-data-science... |
| 1 | SEM_Courses | Introduction to R | https://www.datacamp.com/courses/free-introduction-to-r... |
| 2 | SEM_Courses | Intermediate Python for Data Science | https://www.datacamp.com/courses/intermediate-python... |
| 3 | SEM_Courses | Introduction to Git for Data Science | https://www.datacamp.com/courses/introduction-to-git... |
| 4 | SEM_Courses | Intermediate R | https://www.datacamp.com/courses/intermediate-r |
Buat Iklan
Sekadar melacak posisi Anda. Sekarang Anda memiliki data frame iklan yang berisi kolom Campaign, Ad Group, dan Final URL yang sudah dipetakan dengan benar. Anda perlu menambahkan bidang Headline 1, Headline 2, dan Description.
Ingat bahwa untuk setiap grup iklan Anda akan menambahkan tiga variasi iklan berbeda. Ini praktik yang baik terutama untuk tujuan pengujian, melihat apa yang orang klik, iklan mana yang lebih banyak konversi, dan sebagainya. Anda akan berakhir dengan DataFrame yang jumlah barisnya tiga kali lipat dari yang sekarang.
Mari mulai dengan menggandakan setiap baris tiga kali, di 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
| Campaign | Ad Group | Final URL | |
|---|---|---|---|
| 0 | SEM_Courses | Intro to Python for Data Science | https://www.datacamp.com/courses/intro-to-python-for-data-science... |
| 0 | SEM_Courses | Intro to Python for Data Science | https://www.datacamp.com/courses/intro-to-python-for-data-science... |
| 0 | SEM_Courses | Intro to Python for Data Science | https://www.datacamp.com/courses/intro-to-python-for-data-science... |
| 1 | SEM_Courses | Introduction to R | https://www.datacamp.com/courses/free-introduction-to-r... |
| 1 | SEM_Courses | Introduction to R | https://www.datacamp.com/courses/free-introduction-to-r... |
| 1 | SEM_Courses | Introduction to R | https://www.datacamp.com/courses/free-introduction-to-r... |
| 2 | SEM_Courses | Intermediate Python for Data Science | https://www.datacamp.com/courses/intermediate-python... |
| 2 | SEM_Courses | Intermediate Python for Data Science | https://www.datacamp.com/courses/intermediate-python... |
| 2 | SEM_Courses | Intermediate Python for Data Science | https://www.datacamp.com/courses/intermediate-python... |
Sekarang tambahkan tiga deskripsi berbeda yang Anda buat di atas.
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()
| Campaign | Ad Group | Final URL | Description | |
|---|---|---|---|---|
| 0 | SEM_Courses | Intro to Python for Data Science | https://www.datacamp.com/courses/intro-to-python-for-data-science... | Learn Directly From the Top Experts in the Fie... |
| 0 | SEM_Courses | Intro to Python for Data Science | https://www.datacamp.com/courses/intro-to-python-for-data-science... | Be Ahead of the Curve, Master Data Science Ski... |
| 0 | SEM_Courses | Intro to Python for Data Science | https://www.datacamp.com/courses/intro-to-python-for-data-science... | Choose From a Wide Variety of Topics Tuaght by... |
| 1 | SEM_Courses | Introduction to R | https://www.datacamp.com/courses/free-introduction-to-r... | Learn Directly From the Top Experts in the Fie... |
| 1 | SEM_Courses | Introduction to R | https://www.datacamp.com/courses/free-introduction-to-r... | Be Ahead of the Curve, Master Data Science Ski... |
Berikutnya, tambahkan Headline 1 dan Headline 2 ke DataFrame. Anda hampir selesai!
benefits = [
'Boost Your Data Science Career',
'Stand Out From the Crowd',
'Tackle Complex Questions'
]
Manfaat akan dimasukkan sebagai Headline 2 pada kasus di mana panjang nama grup iklan adalah 30 atau kurang. Dalam kasus ini, Anda akan memiliki bidang kosong, yang akan Anda isi dengan salah satu manfaat yang Anda miliki.
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
| Campaign | Ad Group | Final URL | Description | Headline 1 | Headline 2 | |
|---|---|---|---|---|---|---|
| 0 | SEM_Courses | Intro to Python for Data Science | https://www.datacamp.com/courses/intro-to-python-for-data-science... | Learn Directly From the Top Experts in the Fie... | Intro to Python for Data | Science |
| 0 | SEM_Courses | Intro to Python for Data Science | https://www.datacamp.com/courses/intro-to-python-for-data-science... | Be Ahead of the Curve, Master Data Science Ski... | Intro to Python for Data | Science |
| 0 | SEM_Courses | Intro to Python for Data Science | https://www.datacamp.com/courses/intro-to-python-for-data-science... | Choose From a Wide Variety of Topics Tuaght by... | Intro to Python for Data | Science |
| 1 | SEM_Courses | Introduction to R | https://www.datacamp.com/courses/free-introduction-to-r... | Learn Directly From the Top Experts in the Fie... | Introduction to R | Boost Your Data Science Career |
| 1 | SEM_Courses | Introduction to R | https://www.datacamp.com/courses/free-introduction-to-r... | Be Ahead of the Curve, Master Data Science Ski... | Introduction to R | Stand Out From the Crowd |
| 1 | SEM_Courses | Introduction to R | https://www.datacamp.com/courses/free-introduction-to-r... | Choose From a Wide Variety of Topics Tuaght by... | Introduction to R | Tackle Complex Questions |
| 2 | SEM_Courses | Intermediate Python for Data Science | https://www.datacamp.com/courses/intermediate-python... | Learn Directly From the Top Experts in the Fie... | Intermediate Python for Data | Science |
| 2 | SEM_Courses | Intermediate Python for Data Science | https://www.datacamp.com/courses/intermediate-python... | Be Ahead of the Curve, Master Data Science Ski... | Intermediate Python for Data | Science |
| 2 | SEM_Courses | Intermediate Python for Data Science | https://www.datacamp.com/courses/intermediate-python... | Choose From a Wide Variety of Topics Tuaght by... | Intermediate Python for Data | Science |
Seperti yang Anda lihat, "Intro to Python for Data Science" cukup panjang hingga membutuhkan dua bidang, sehingga Anda biarkan apa adanya agar tetap jelas. Pada kasus kedua "Introduction to R" muat di headline pertama, jadi Anda masukkan tiga manfaat berbeda yang Anda buat di Headline 2.
Dan selesai!
Periksa Ulang Detail
Pemeriksaan cepat, untuk memastikan semua nama kampanye dan grup iklan pada kedua DataFrame sama.
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)
Unggah dan Luncurkan
Seperti dibahas, tutorial ini hanya mencakup langkah-langkah tertentu dalam kampanye SEM dan oleh karena itu memerlukan pemahaman dasar tentang cara kerja pemasaran mesin telusur. Jika Anda ingin mengetahui lebih banyak tentang mekanisme dan detail pengunggahan serta peluncuran grup iklan, Anda dapat melihat panduan AdWords untuk memulai. Untuk mengakses kursus lengkap di berbagai area, Anda dapat melihat Google Academy for Ads.
Data Science dan SEM: Masih Banyak yang Bisa Dieksplorasi!
Dengan dua file CSV yang Anda miliki sekarang, Anda dapat mengunggahnya dan mulai menjalankan kampanye. Anda perlu menetapkan anggaran harian, penargetan geografis, dan beberapa parameter lain, tetapi untuk sebagian besar, Anda sudah siap.
Jika Anda ingin melihat file CSV, Anda dapat menemukannya di sini:
Saya harap Anda merasa tutorial ini bermanfaat. Terima kasih sudah membaca dan jika Anda ingin berbagi proyek pertumbuhan yang Anda lakukan dengan bantuan Python, jangan ragu untuk menghubungi saya di Twitter @eliasdabbas.
