Ekstraksi Data Pembelajaran Mesin

Ingin mempelajari tentang tiga metode penambangan data untuk proyek ML Anda berikutnya? Kemudian bacalah terjemahan artikel Rebecca Vickery yang diterbitkan di blog Menuju Ilmu Data di Media! Dia akan menarik bagi pemula.


Mendapatkan data berkualitas adalah langkah pertama dan paling penting dalam setiap proyek pembelajaran mesin. Spesialis Ilmu Data sering menggunakan berbagai metode untuk memperoleh kumpulan data. Mereka dapat menggunakan data yang tersedia untuk umum, serta data yang tersedia melalui API atau diperoleh dari berbagai basis data, tetapi paling sering menggabungkan metode ini.

Tujuan artikel ini adalah untuk memberikan gambaran singkat tentang tiga metode berbeda untuk mengambil data menggunakan Python. Saya akan memberi tahu Anda cara melakukan ini dengan Notebook Jupyter. Dalam artikel saya sebelumnya , saya menulis tentang penerapan beberapa perintah yang berjalan di terminal.

SQL


Jika Anda perlu mendapatkan data dari basis data relasional, kemungkinan besar Anda akan bekerja dengan bahasa SQL. Pustaka SQLAlchemy memungkinkan Anda untuk mengaitkan kode laptop Anda dengan tipe database yang paling umum. Di sini Anda akan menemukan informasi tentang basis data mana yang didukung dan bagaimana mengikat masing-masing jenis.

Anda bisa menggunakan pustaka SQLAlchemy untuk menelusuri tabel dan meminta data, atau menulis kueri mentah. Untuk mengikat ke database, Anda akan memerlukan URL dengan kredensial Anda. Selanjutnya, Anda perlu menginisialisasi metode create_engine untuk membuat koneksi.

 from sqlalchemy import create_engine engine = create_engine('dialect+driver://username:password@host:port/database') 

Sekarang Anda dapat menulis kueri basis data dan mendapatkan hasil.

 connection = engine.connect() result = connection.execute("select * from my_table") 

Menggores


Pengikisan web digunakan untuk mengunduh data dari situs web dan mengekstrak informasi yang diperlukan dari halaman mereka. Ada banyak pustaka Python yang tersedia untuk ini, tetapi yang paling sederhana adalah Beautiful Soup .

Anda dapat menginstal paket melalui pip.

 pip install BeautifulSoup4 

Mari kita lihat contoh sederhana cara menggunakannya. Kami akan menggunakan Beautiful Soup dan perpustakaan urllib untuk mengikis nama hotel dan harga dari TripAdvisor .

Pertama, kami mengimpor semua perpustakaan yang akan kami tangani.

 from bs4 import BeautifulSoup import urllib.request 

Sekarang muat konten halaman yang akan kami memo. Saya ingin mengumpulkan data tentang harga hotel di Pulau Kreta Yunani dan mengambil alamat URL yang berisi daftar hotel di tempat ini.



Kode di bawah ini mendefinisikan URL sebagai variabel dan menggunakan perpustakaan urllib untuk membuka halaman, dan perpustakaan Beautiful Soup untuk membacanya dan mengembalikan hasilnya dalam format sederhana. Bagian dari data keluaran ditampilkan di bawah kode.

 URL = 'https://www.tripadvisor.co.uk/Hotels-g189413-Crete-Hotels.html' page = urllib.request.urlopen(URL) soup = BeautifulSoup(page, 'html.parser') print(soup.prettify()) 



Sekarang mari kita daftar dengan nama-nama hotel di halaman. Kami akan memperkenalkan fungsi find_all , yang akan mengekstrak bagian-bagian dari dokumen yang menarik bagi kami. Anda dapat memfilternya secara berbeda menggunakan fungsi find_all untuk melewatkan satu baris, ekspresi reguler, atau daftar. Anda juga dapat memfilter salah satu atribut tag - inilah metode yang akan kami terapkan. Jika Anda baru mengenal tag dan atribut HTML, lihat artikel ini untuk ikhtisar singkat.

Untuk memahami cara terbaik memberikan akses ke data dalam tag, kita perlu memeriksa kode untuk elemen ini di halaman. Kami menemukan kode untuk nama hotel dengan mengklik kanan pada nama dalam daftar, seperti yang ditunjukkan pada gambar di bawah ini.



Setelah mengklik pada inspect kode elemen akan muncul, dan bagian dengan nama hotel akan disorot.



Kami melihat bahwa nama hotel adalah satu-satunya bagian dari teks di kelas dengan nama listing_title . Setelah kelas muncul kode dan nama atribut ini ke fungsi find_all , serta tag div .

 content_name = soup.find_all('div', attrs={'class': 'listing_title'}) print(content_name) 

Setiap bagian dari kode dengan nama hotel dikembalikan sebagai daftar.



Untuk mengekstrak nama hotel dari kode, kami menggunakan fungsi getText dari pustaka Beautiful Soup.

 content_name_list = [] for div in content_name: content_name_list.append(div.getText().split('\n')[0]) print(content_name_list) 

Nama hotel dikembalikan sebagai daftar.



Dengan cara yang sama kita mendapatkan data harga. Struktur kode untuk harga ditunjukkan di bawah ini.



Seperti yang Anda lihat, kami dapat bekerja dengan kode yang sangat mirip dengan yang digunakan untuk hotel.

 content_price = soup.find_all('div', attrs={'class': 'price-wrap'}) print(content_price) 

Dalam hal harga, ada sedikit kesulitan. Anda dapat melihatnya dengan menjalankan kode berikut:

 content_price_list = [] for div in content_price: content_price_list.append(div.getText().split('\n')[0]) print(content_price_list) 

Hasilnya ditunjukkan di bawah ini. Jika pengurangan harga ditunjukkan dalam daftar hotel, di samping beberapa teks, harga awal dan harga akhir akan dikembalikan. Untuk memperbaiki masalah ini, kami cukup mengembalikan harga saat ini untuk hari ini.



Kita dapat menggunakan logika sederhana untuk mendapatkan harga terbaru yang ditunjukkan dalam teks.

 content_price_list = [] for a in content_price: a_split = a.getText().split('\n')[0] if len(a_split) > 5: content_price_list.append(a_split[-4:]) else: content_price_list.append(a_split) print(content_price_list) 

Ini akan memberi kita hasil berikut:



API


API - antarmuka pemrograman aplikasi (dari antarmuka pemrograman aplikasi bahasa Inggris). Dari perspektif penambangan data, ini adalah sistem berbasis web yang menyediakan titik akhir data yang dapat Anda hubungi melalui pemrograman. Biasanya data dikembalikan dalam format JSON atau XML.

Metode ini mungkin akan berguna dalam pembelajaran mesin. Saya akan memberikan contoh sederhana mengambil data cuaca dari API Langit Gelap publik. Untuk terhubung, Anda perlu mendaftar, dan Anda akan mendapat 1.000 panggilan gratis per hari. Ini harus cukup untuk pengujian.

Untuk mengakses data dari Dark Sky, saya akan menggunakan perpustakaan requests . Pertama-tama, saya perlu mendapatkan URL yang benar untuk permintaan tersebut. Selain ramalan, Langit Gelap menyediakan data cuaca historis. Dalam contoh ini, saya akan mengambilnya dan mendapatkan URL yang benar dari dokumentasi .

Struktur URL ini adalah:

 https://api.darksky.net/forecast/[key]/[latitude],[longitude],[time] 

Kami akan menggunakan pustaka requests untuk mendapatkan
hasil untuk lintang dan bujur tertentu, serta tanggal dan waktu. Bayangkan setelah mengekstraksi data harga harian untuk hotel-hotel di Kreta, kami memutuskan untuk mencari tahu apakah kebijakan harga terkait dengan cuaca.

Sebagai contoh, mari kita ambil koordinat salah satu hotel dalam daftar - Mitsis Laguna Resort & Spa.



Pertama, buat URL dengan koordinat yang benar, serta waktu dan tanggal yang diminta. Menggunakan perpustakaan requests , kami mendapatkan akses ke data dalam format JSON.

 import requests request_url = 'https://api.darksky.net/forecast/fd82a22de40c6dca7d1ae392ad83eeb3/35.3378,-25.3741,2019-07-01T12:00:00' result = requests.get(request_url).json() result 

Untuk membuat hasil lebih mudah dibaca dan dianalisis, kita bisa mengonversi data menjadi bingkai data.

 import pandas as pd df = pd.DataFrame.from_dict(json_normalize(result), orient='columns') df.head() 



Ada banyak opsi untuk mengotomatisasi ekstraksi data menggunakan metode ini. Dalam hal pengikisan web, Anda dapat menulis berbagai fungsi untuk mengotomatiskan proses dan membuatnya lebih mudah untuk mengekstrak data untuk lebih banyak hari dan / atau tempat. Pada artikel ini, saya ingin mengulas dan memberikan contoh kode yang cukup. Materi berikut akan lebih rinci: Saya akan memberi tahu Anda cara membuat dataset besar dan menganalisisnya menggunakan metode yang dijelaskan di atas.

Terima kasih atas perhatian anda!

Source: https://habr.com/ru/post/id460675/


All Articles