Bekerja dengan Python API Untuk Proyek Ilmu Data

Node Sumber: 1074759

Bekerja dengan Python API Untuk Proyek Ilmu Data

Pada artikel ini, kami akan bekerja dengan YouTube Python API untuk mengumpulkan statistik video dari saluran kami menggunakan perpustakaan permintaan python untuk membuat panggilan API dan menyimpannya sebagai Pandas DataFrame.


Oleh Nathan Rosidi, Ilmuwan Data, Pendiri Goresan Strata

Bekerja dengan Python API Untuk Proyek Ilmu Data

 

Bekerja dengan API untuk ilmu data adalah suatu keharusan keahlian untuk semua ilmuwan data dan harus dimasukkan ke dalam proyek ilmu data Anda. Di blog kami sebelumnya - ide proyek analitik data, kami menguraikan satu-satunya proyek ilmu data yang Anda perlukan dan berbicara tentang betapa pentingnya bekerja dengan API untuk mengumpulkan data Anda untuk proyek ilmu data Anda. Jadi dalam artikel ini, kami ingin menunjukkan cara menarik data dari API secara khusus menggunakan python untuk menarik data dari API YouTube dan pustaka permintaan yang ditemukan di python.

Jadi mari kita pahami cara bekerja dengan API untuk ilmu data. Kami akan menarik data dan melihat melalui respons JSON yang kami dapatkan dan kemudian kami akan menyimpan semua data ini ke dalam Pandas DataFrame.

Cara bekerja dengan API untuk ilmu data

 

Kami akan melakukan ini semua secara terprogram dengan keterampilan rekayasa perangkat lunak yang baik sehingga kode Anda terlihat bersih dan ringkas, dan tidak seperti yang ditulis oleh anak berusia 10 tahun. Artikel ini bukan tentang cara bekerja dengan API Youtube tetapi tentang cara bekerja dengan API secara umum, jadi kami akan memastikan untuk menggunakan pustaka dan teknik yang dapat digunakan untuk layanan API apa pun.

Mengapa mengumpulkan data dari API?

 
 

Anda mungkin berpikir mengapa kami tidak hanya menggunakan CSV atau menarik data dari database? Ada dua alasan mengapa Anda harus mempelajari API:

1. API adalah industri yang sangat umum, cara profesional untuk mengumpulkan data, jadi jika Anda pernah bekerja sebagai ilmuwan data, Anda akan diminta untuk mempelajari cara melakukannya.

2. Ini adalah cara yang lebih rumit dan canggih untuk mengumpulkan data dibandingkan dengan menarik data dari database. Jadi, hanya alasan lain untuk mempelajari API dan untuk mengesankan kolega dan manajer perekrutan Anda.
 

Alat dan Platform

Platform

Kami akan menggunakan Google Colabs yang pada dasarnya adalah notebook Jupyter. Anda dapat menggunakan notebook Jupyter jika Anda mau, tetapi kami akan menggunakan Colabs karena mudah untuk menjalankan dan menyimpan pekerjaan kami di Google drive.

Impor

Sekarang hal pertama adalah mengimpor dan perpustakaan.

#import libraries
import requests
import pandas as pd
import time

Impor API

 

Pustaka permintaan adalah pustaka yang memungkinkan kita melakukan panggilan API. Anda dapat menggunakan perpustakaan ini untuk membuat permintaan ke API apa pun, jadi tergantung pada API apa yang ingin Anda ambil datanya, teknik yang dibahas di sini akan sama. Jika Anda ingin mempelajari lebih lanjut tentang perpustakaan permintaan, berikut tautannya โ€“ https://realpython.com/python-requests/. Kemudian kita memiliki perpustakaan Pandas karena kita akan menyimpan data kita ke dalam DataFrame Pandas dan kemudian ada perpustakaan waktu.

Kunci API

Langkah selanjutnya adalah mendapatkan kunci API. Kami akan mengambil data dari API Youtube, khususnya, akan mengambil data dari saluran kami di sini. Untuk mengakses informasi saluran kami melalui API, kami perlu mengajukan permohonan untuk kunci API. Anda dapat melakukannya dengan membuka tautan ini โ€“ https://www.slickremix.com/docs/get-api-key-for-youtube/. Kami tidak ingin membuat artikel ini secara khusus tentang cara bekerja dengan API Youtube, jadi kami akan membiarkan Anda mendapatkan kunci API sendiri. Namun secara umum, setiap kali Anda bekerja dengan API, Anda akan selalu membutuhkan kunci. Dan cara mendapatkan kunci berbeda untuk setiap layanan API. Jadi katakanlah Anda menjalani proses dan mendapatkan kunci API Anda.

Sekarang kami akan mengambil semua video yang kami miliki di saluran kami dan kemudian kami akan mengambil metrik dari setiap video:

Daftar Video dari Saluran

  • ID Video
  • judul video
  • Tanggal Publikasikan

Metrik Video

  • Lihat Hitungan
  • Hitungan Tautan
  • Jumlah Tidak Suka
  • Jumlah Komentar

Sekarang yang kita butuhkan adalah ID saluran kita. Jadi kedua parameter ini akan digunakan untuk membuat panggilan API kita.

#keys
API_KEY = "AIXXXXXXXX"
CHANNEL_ID = "UCW8Ews7tdKKkBT6GdtQaXvQ"

Menguji Dengan Perpustakaan permintaan

 
Mari kita uji panggilan API dengan cepat. Dengan menggunakan pustaka permintaan, Anda dapat melakukan panggilan hanya dengan meletakkan URL API di metode get().

#make API call
response = requests.get('https://api.github.com').json()

Menguji Dengan Perpustakaan permintaan

 

Untuk mengambil beberapa data, kami menggunakan metode get() . Datanya ada di api.github.com. Kami meneruskan URL ke metode get() dan menambahkan metode json() yang akan mengembalikan objek JSON dalam respons.

Apa itu file JSON?

Ini adalah file data populer yang dikirim sebagai objek JS dan berisi data Anda biasanya sebagai pasangan nilai atribut atau dalam array. Dan simpan data dalam variabel yang disebut respon.

Sekarang mari kita lihat datanya:

response

Menguji Dengan Perpustakaan permintaan

 

Seperti yang Anda lihat di output, seluruh hasil dienkapsulasi dalam kurung kurawal dan setiap baris memiliki atribut atau kunci dan setiap kunci memiliki nilai. Ini adalah daftar URL yang dapat Anda akses untuk informasi spesifik dari Github.

Misalnya, jika Anda ingin menemukan email pengguna, Anda akan menggunakan email_url dalam metode get() Anda.

emails_url': 'https://api.github.com/user/emails'

Kami baru saja menguji pustaka permintaan dan dengan cepat menguji fungsinya. Sekarang mari kita lakukan panggilan ke API Youtube dan ambil beberapa data.

Bekerja dengan API YouTube

Jadi, bagian tersulit dari membuat panggilan API adalah mencari tahu cara menyusun URL, terutama parameter apa yang harus ditambahkan ke URL. Saat ini kami memiliki URL root

url = "https://www.googleapis.com/youtube/v3/

Ini adalah lokasi data kami. Kita hanya perlu menentukan jenis data apa yang ingin kita kumpulkan. Untuk melakukan itu, sekarang kita perlu menambahkan parameter ke URL untuk mendapatkan informasi video tertentu dari saluran khusus kita.

Bagian tersulit adalah mencari tahu parameter dan properti mana yang akan ditambahkan ke URL? Bagaimana Anda mengetahuinya? Cara terbaik adalah membaca dokumentasi resmi. https://developers.google.com/youtube/v3/docs/search

Kami akan membuat "pencarian" dan menyertakan beberapa parameter seperti "bagian", "channelID" dan kunci API saya. Dan di dalam parameter โ€œpartsโ€, kami akan menambahkan properti id dan snippet untuk mengambil data ID yang mencakup videoID dan informasi tentang video itu sendiri seperti yang Anda lihat di sini dalam daftar.

Bekerja dengan API YouTube

 

Sekarang kita akan menulis seluruh URL dengan parameter yang akan memberi kita semua data yang ingin kita kumpulkan. Sekali lagi, artikel ini bukan tentang YouTube secara khusus, jadi kami tidak akan membahas bagaimana kami menemukan parameter mana yang akan digunakan dan sebagainya. Banyak dari itu trial and error. Namun izinkan kami memandu Anda tentang cara kami menyusun URL ini.

url = "https://www.googleapis.com/youtube/v3/search?key="+API_KEY+"&
channelId="+CHANNEL_ID+"&part=snippet,id&order=date&maxResults=10000"
+pageToken

Kami sedang melakukan "pencarian" melalui API YouTube. Semuanya di sebelah kanan '?' adalah parameter yang kami tambahkan untuk meminta informasi spesifik.

  • Pertama, kami menambahkan kunci API kami yang disimpan dalam variabel API_KEY di parameter kunci ini.
  • Kami menentukan ID saluran yang ingin kami kumpulkan informasinya.
  • Berikutnya adalah parameter bagian di mana kita menentukan bahwa kita menginginkan snippet dan data ID. Dari dokumentasi, ini memberi tahu kami data apa yang bisa kami dapatkan ketika kami meminta snippet dan data ID.
  • Pesan data berdasarkan tanggal dan kemudian kami ingin hasil maksimal 10000 video dalam panggilan API kami.
  • Terakhir, pageToken adalah token, yang merupakan kode, yang diperlukan untuk sampai ke halaman berikutnya dari hasil pencarian. Kami akan menangani ini nanti ketika kami mencoba mengekstrak semua data.

Membangun ini bisa sulit dan banyak trial and error. Tapi begitu Anda bermain-main dengannya dan mendapatkan data yang Anda inginkan, Anda tidak perlu khawatir lagi. Jadi seluruh URL ini disimpan dalam variabel URL kami.

Tanggapan Dari Membuat Panggilan API

 
Kami membuat panggilan API dengan cara yang sama persis seperti yang kami lakukan untuk contoh Github.

pageToken = ""
response = requests.get(url).json()

Dan inilah output dari panggilan API.

Tanggapan Dari Membuat Panggilan API

 

Seperti yang Anda lihat, kami memiliki objek JSON yang sama yang disimpan dalam variabel respons. Anda akan melihat semua properti untuk id dan snippet.

Parsing Melalui Data

 
Bagaimana Anda membuat kepala atau ekor dari data ini? Pertama, mari kita kenali apa yang kita minati? Kami melihat kunci etag di bagian atas dan kemudian kunci item sebagai kunci ke-2 dalam respons. Kunci item dimulai dengan tanda kurung siku dan pada dasarnya adalah daftar semua video di saluran kami. Jika kita pergi ke akhir respon, kita akhirnya melihat video terakhir di saluran kita dan kurung siku penutup untuk kunci item. Kemudian kita melihat jenis kunci lainnya, nextPageToken, dan sebagainya.

Anda juga dapat melihat bahwa kami memiliki 95 hasil tetapi hanya mengambil 50. Kunci nextPageToken akan membantu kami mendapatkan video di halaman pencarian berikutnya. Tapi kita akan membahasnya nanti.

Jadi panggilan API kami memberi kami hasil pencarian dari semua video kami dan beberapa informasi tentang video tersebut. Semua informasi ini disimpan dalam kunci item. Jadi mari ambil data itu dan saring sisanya.

Anda dapat melakukannya dengan mudah hanya dengan menentukan kunci item.

response['items']

Parsing Melalui Data

 

Anda melihat bahwa output dimulai dengan tanda kurung siku dan mencantumkan semua video yang kami miliki di saluran kami. Untuk mengisolasi satu video, kita dapat menentukan posisinya.

response['items'][0]

mengisolasi satu video menggunakan python api untuk ilmu data

 

Jadi, ini adalah video terbaru kami.

Parsing melalui output dan menyimpannya ke variabel

Jelas bahwa yang perlu kita lakukan adalah mengulang semua video di kunci item dan menyimpan informasi tertentu. Mari simpan informasi ke dalam variabel terlebih dahulu dan buat loop terakhir.

Mari kita simpan ID video. Untuk melakukan itu, kita perlu memanggil variabel respon, kunci item, dan posisi pertama. Kemudian setelah kita memilikinya, kita memilih kunci id dan kemudian kunci videoID. Kita dapat menyimpan nilai tersebut dalam variabel video_id. Itu pada dasarnya bagaimana Anda akan menavigasi melalui array dan menyimpan data yang Anda inginkan.

video_id = response['items'][0]['id']['videoId']

Mari kita lakukan hal yang sama dengan judul video. Di sini kami juga mengganti simbol & (ampersand) apa pun dengan yang kosong)

video_title = response['items'][0]['snippet']['title']
video_title = str(video_title).replace("&","")

Kemudian mari kita ambil tanggal unggah

upload_date = response['items'][0]['snippet']['publishedAt']

Kami hanya ingin mengambil tanggalnya dan mengabaikan stempel waktu.

Parsing melalui output dan menyimpannya ke variabel

 

Untuk melakukan itu kita dapat membagi pada T dan mengambil sisi kiri output.

upload_date = str(upload_date).split("T")[0]

Jadi begitulah cara Anda menyimpan semua informasi.

Membuat Loop

 
Mari buat Loop untuk menelusuri semua video yang dikumpulkan dalam panggilan API dan menyimpan informasinya.

Kami akan melalui array response['items'] jadi 'for Loop' kami dimulai dengan

for video in response['items']:

Selanjutnya, kita harus menambahkan beberapa logika yang memastikan bahwa kita hanya akan mengumpulkan informasi video. Jadi untuk memastikan logika ini, kita perlu memastikan bahwa kita hanya melihat video. Jika Anda memeriksa responsnya, Anda akan melihat

'kind': 'youtube#video',

Jadi kami akan menambahkan pernyataan if hanya untuk memastikan kami menyimpan informasi video. Seperti yang juga Anda lihat, alih-alih response['items'], kami menggunakan variabel video karena kami berada di 'for loop'.

if video['id']['kind'] == "youtube#video":

Dan terakhir, semua variabel yang kami buat untuk mengumpulkan informasi dari respons, kami akan menggunakannya lagi tetapi kami hanya perlu mengubah nama variabel menjadi video. Hasil akhir Anda akan terlihat seperti ini.

for video in response['items']: if video['id']['kind'] == "youtube#video": video_id = video['id']['videoId'] video_title = video['snippet']['title'] video_title = str(video_title).replace("&","") upload_date = video['snippet']['publishedAt'] upload_date = str(upload_date).split("T")[0]

Membuat Panggilan API Kedua

 
Mengumpulkan informasi ini bagus tapi tidak menarik. Kami juga ingin mengumpulkan jumlah penayangan, suka, dan tidak suka untuk setiap video kami. Itu tidak ada dalam panggilan API pertama. Yang perlu kita lakukan sekarang adalah membuat panggilan API kedua untuk mengumpulkan informasi ini karena kita perlu menggunakan video_id yang kita kumpulkan dari panggilan API pertama untuk kemudian membuat panggilan API kedua untuk meraih jumlah penayangan, suka, tidak suka, dan komentar .

Karena kami telah menunjukkan kepada Anda dengan tepat cara membuat panggilan API, kami menyarankan Anda mencari cara untuk membuat panggilan API kedua ini sendiri. Dan jika Anda berhasil melakukan panggilan API kedua, seharusnya terlihat seperti ini:

url_video_stats = "https://www.googleapis.com/youtube/v3/videos?id=" +video_id+"&part=statistics&key="+API_KEY
response_video_stats = requests.get(url_video_stats).json() view_count = response_video_stats['items'][0]['statistics']['viewCount']
like_count = response_video_stats['items'][0]['statistics']['likeCount']
dislike_count = response_video_stats['items'][0]['statistics'] ['dislikeCount']
comment_count = response_video_stats['items'][0]['statistics'] ['commentCount']

Sekarang, kita harus menambahkannya ke 'for loop'. Dan kita akan mendapatkan sesuatu seperti ini:

for video in response['items']: if video['id']['kind'] == "youtube#video": video_id = video['id']['videoId'] video_title = video['snippet']['title'] video_title = str(video_title).replace("&","") upload_date = video['snippet']['publishedAt'] upload_date = str(upload_date).split("T")[0] #colleccting view, like, dislike, comment counts url_video_stats = "https://www.googleapis.com/youtube/v3/videos?id=" +video_id+"&part=statistics&key="+API_KEY response_video_stats = requests.get(url_video_stats).json() view_count = response_video_stats['items'][0]['statistics'] ['viewCount'] like_count = response_video_stats['items'][0]['statistics'] ['likeCount'] dislike_count = response_video_stats['items'][0]['statistics'] ['dislikeCount'] comment_count = response_video_stats['items'][0]['statistics'] ['commentCount']

Menyimpan ke DataFrame Pandas

 
Sekarang mari kita buat Pandas DataFrame sehingga kita dapat menyimpan semua informasi ini. Karena kita sudah mengetahui semua informasi yang ingin kita simpan, kita akan membuat DataFrame Pandas kosong dengan header kolom di atas 'for loop'.

df = pd.DataFrame(columns=["video_id","video_title","upload_date", "view_count","like_count","dislike_count","comment_count"])

Selanjutnya, kita akan menambahkan data yang telah kita simpan dalam variabel di 'for loop' ke Pandas DataFrame. Mari kita gunakan metode append() untuk melakukan ini di dalam 'for loop'.

df = df.append({'video_id':video_id,'video_title':video_title, 'upload_date':upload_date,'view_count':view_count, 'like_count':like_count,'dislike_count':dislike_count, 'comment_count':comment_count},ignore_index=True)

Seluruh 'for loop' akan terlihat seperti ini:

for video in response['items']: if video['id']['kind'] == "youtube#video": video_id = video['id']['videoId'] video_title = video['snippet']['title'] video_title = str(video_title).replace("&","") upload_date = video['snippet']['publishedAt'] upload_date = str(upload_date).split("T")[0] #collecting view, like, dislike, comment counts url_video_stats = "https://www.googleapis.com/youtube/v3/videos?id=" +video_id+"&part=statistics&key="+API_KEY response_video_stats = requests.get(url_video_stats).json() view_count = response_video_stats['items'][0]['statistics'] ['viewCount'] like_count = response_video_stats['items'][0]['statistics'] ['likeCount'] dislike_count = response_video_stats['items'][0]['statistics'] ['dislikeCount'] comment_count = response_video_stats['items'][0]['statistics'] ['commentCount'] df = df.append({'video_id':video_id,'video_title':video_title, 'upload_date':upload_date,'view_count':view_count, 'like_count':like_count,'dislike_count':dislike_count, 'comment_count':comment_count},ignore_index=True)

Python API untuk output ilmu data dari kerangka data pandas

 

Sekarang kami memiliki semua data kami di Pandas DataFrame ini dan outputnya harus menjadi Pandas DataFrame dengan semua statistik video.

Menyimpan API ke Pandas DataFrame

Membuat Fungsi

 
Kode yang telah kami tulis sejauh ini berfungsi dengan baik tetapi ada beberapa hal yang dapat diperbaiki. Bagian utama yang perlu ditingkatkan adalah memisahkan panggilan API yang mengambil informasi video dari bagian utama karena logika untuk panggilan API ke-2 tidak perlu dicampur dengan logika penyimpanan data.

Jadi kami dapat memisahkan panggilan API ke-2 ke dalam fungsinya sendiri dan hanya meneruskan video_id yang kami kumpulkan dari panggilan API ke-1.

def get_video_details(video_id): url = "https://www.googleapis.com/youtube/v3/videos?id="+video_id+"& part=statistics&key="+API_KEY response = requests.get(url).json() return response['items'][0]['statistics']['viewCount'], response['items'][0]['statistics']['likeCount'], response['items'][0]['statistics']['dislikeCount'], response['items'][0]['statistics']['commentCount']

Kita kemudian dapat membungkus pekerjaan utama ke dalam fungsinya.

def get_videos(df): pageToken = "" while 1: url = "https://www.googleapis.com/youtube/v3/search?key="+API_KEY+"
&channelId="+CHANNEL_ID+"&part=snippet,id&order=date&maxResults=10000&"
+pageToken response = requests.get(url).json() time.sleep(1) #give it a second before starting the for loop for video in response['items']: if video['id']['kind'] == "youtube#video": video_id = video['id']['videoId'] video_title = video['snippet']['title'] video_title = str(video_title).replace("&","") upload_date = video['snippet']['publishedAt'] upload_date = str(upload_date).split("T")[0] print(upload_date) view_count, like_count, dislike_count, comment_count = get_ video_details(video_id) df = df.append({'Video_id':video_id,'Video_title': video_title, "Upload_date":upload_date,"View_count": view_count, "Like_count":like_count,"Dislike_count": dislike_count, "Comment_count":comment_count},ignore_index= True) try: if response['nextPageToken'] != None: #if none, it means it reached the last page and break out of it pageToken = "pageToken=" + response['nextPageToken'] except: break

Terakhir, kita dapat memanggil fungsi dengan cara ini.

df = pd.DataFrame(columns=["Video_id","Video_title","Upload_date", "View_count","Like_count","Dislike_count","Comment_count"]) #build our dataframe df = get_videos(df) print(df)

Mari kita lihat hasil akhir kita, di mana kita mendapatkan Pandas DataFrame, video_id, video_title, upload_date, view_count, like_count, dislike_count, dan comment_count.

Youtube Python API untuk hasil akhir Ilmu Data

 

Kesimpulan

 
Ini adalah bagaimana Anda dapat bekerja dengan Python API untuk proyek ilmu data Anda dan mengambil data dari API dan menyimpannya ke Pandas DataFrame. Sebagai ilmuwan data, Anda diharapkan mengetahui cara mengambil data dari API. Mari kita uraikan langkah-langkah yang kami lakukan:

  • Mempelajari perpustakaan permintaan untuk membuat panggilan API
  • Membuat panggilan API ke YouTube API: Kami meneruskan URL ke API yang menentukan data apa yang kami inginkan. Kami harus membaca dokumentasi dengan cermat untuk membuat URL.
  • Data yang dikumpulkan sebagai JSON: Kami mengumpulkan data sebagai objek JSON dan menguraikan data yang disimpan sebagai variabel terlebih dahulu.
  • Menyimpan data sebagai Pandas DataFrame
  • Terakhir, kami baru saja menambahkan beberapa logika penanganan kesalahan dan membersihkan kode

 
Temukan yang menarik Pertanyaan wawancara Python untuk posisi ilmuwan data yang untuk pemula atau seseorang yang mencari tugas yang lebih menantang.

 
Biodata: Nathan Rosidi (@StrataScratch) adalah seorang ilmuwan data dan dalam strategi produk. Dia juga seorang profesor yang mengajar analitik, dan merupakan pendiri Goresan Strata, sebuah platform yang membantu ilmuwan data mempersiapkan wawancara mereka dengan pertanyaan wawancara nyata dari perusahaan terkemuka.

Terkait:

Sumber: https://www.kdnuggets.com/2021/09/python-apis-data-science-project.html

Stempel Waktu:

Lebih dari KDnugget