Cara mendapatkan data dari file lokal, database, API, dan pustaka akses data ke dalam lingkungan Python Anda
Gambar oleh Lance Grandahl di UnsplashIntroduction
Sebagian besar analisis Python dimulai dengan mengimpor data ke lingkungan Anda. Tetapi bagaimana jika data itu terjebak dalam database?
Untungnya, Python sangat fleksibel dan memiliki banyak pustaka sumber terbuka untuk mengakses dan memproses data. Dalam tutorial ini kita akan melihat 13 metode untuk memasukkan data ke dalam Pandas Dataframe, setelah itu dapat dibersihkan, dianalisis, dan divisualisasikan. Kita dapat mengelompokkan metode-metode tersebut ke dalam 4 kategori utama
- File lokal
- Database
- Lebah
- Pustaka akses set data
Satu-satunya persyaratan utama adalah menginstal pustaka # Absolute path
file1 = "~/Users/johnreid/Documents/my_project/data/example.csv"# Relative path, assuming current working directory is my_project
file2 = "./data/example.csv"8
Dengan itu, mari kita mulai
📁 File lokalSeringkali data yang Anda butuhkan disimpan dalam file lokal di komputer Anda. Bergantung pada tempat Anda menjalankan lingkungan Python, Anda dapat menentukan nama file sebagai jalur relatif atau absolut
# Absolute pathfile1 = "~/Users/johnreid/Documents/my_project/data/example.csv"# Relative path, assuming current working directory is my_project
file2 = "./data/example.csv"
1. file CSV
CSV adalah pilihan populer untuk menyimpan data tabular, dan cara termudah untuk memulai. Misalkan Anda telah mengunduh kumpulan data populasi ini dari Our World in Data
import pandas as pdcsv_file = "/Users/johnreid/Downloads/population-by-country.csv"df_from_csv = pd.read_csv(csv_file)
df_from_csv.info()
Setelah mengimpor data, sebaiknya jalankan # Absolute path
file1 = "~/Users/johnreid/Documents/my_project/data/example.csv"# Relative path, assuming current working directory is my_project
file2 = "./data/example.csv"9 untuk memahami bagaimana struktur data Anda e. g. berapa banyak baris, kolom, dan nilai bukan nol yang Anda miliki. Menjalankan kode itu memberi kita hasil berikut
Metode ini juga berfungsi untuk file yang dapat diakses oleh URL, seperti file Google Sheet atau CSV publik di repo Github publik. Juga, jika Anda terus mendapatkan aimport pandas as pdcsv_file = "/Users/johnreid/Downloads/population-by-country.csv"
df_from_csv = pd.read_csv(csv_file)
df_from_csv.info()_0 lalu coba ganti nama file Anda untuk mengganti spasi dengan garis bawah e. g. "Contoh Keuangan. xlsx" menjadi "Financial_Sample. xlsx"
2. File Excel
Anda harus sedikit lebih berhati-hati dengan file Excel, karena mungkin berisi lebih dari satu lembar data dan pemformatan visual yang rumit e. g. baris tajuk ekstra. Kalau tidak, sintaksnya sangat mirip — inilah contoh data keuangan
import pandas as pdexcel_file = "/Users/johnreid/Downloads/Financial_Sample.xlsx"df_from_excel = pd.read_excel(excel_file, sheet_name = "Sheet1")
df_from_excel.info()_
3. File teks
File teks seringkali memerlukan lebih banyak pemrosesan data — mulailah dengan melihat bagaimana data disimpan dan bagaimana Anda ingin merepresentasikannya dengan Python. Dari sana, Anda dapat menulis kode untuk mengubah masukan tekstual menjadi kerangka data. Mari gunakan contoh daftar belanja, dengan setiap baris berisi item dan kuantitas
Untuk mengubahnya menjadi kerangka data, Anda dapat menjalankan yang berikut ini
shopping_list = "/Users/johnreid/Downloads/shopping_list.txt"results = []with open(shopping_list) as f:line = f.readline() while line:
results.append(line.strip().split(" "))
line = f.readline()f.close()df_from_textfile = pd.DataFrame(results, columns = ["Item", "Quantity"])
Kami membaca baris satu per satu, menghapus spasi ekstra dan membagi baris menjadi dua bagian. Saat kami membuat kerangka data, kami juga perlu menetapkan nama kolom
4. Banyak file/folder
Apa yang terjadi jika Anda perlu mengekstrak data dari beberapa file yang disimpan?
Kami memiliki 5 subfolder, masing-masing dengan sekitar 100 file. Setiap file dimulai dengan judul, diikuti dengan isi artikel. Tujuan kami adalah menggabungkan semua file ini menjadi satu bingkai data dengan kolom 'Judul', 'Subtitel', 'Body' dan 'Genre'. Pustaka import pandas as pdcsv_file = "/Users/johnreid/Downloads/population-by-country.csv"
df_from_csv = pd.read_csv(csv_file)
df_from_csv.info()_1 sangat berguna di sini untuk membuat daftar semua kemungkinan nama file
import pandas as pdbase_path = "/Users/johnreid/Downloads/bbcsport/"
genres = ["athletics", "cricket", "football", "rugby", "tennis"]def read_and_split_file(filename):
with open(filename, 'r', encoding="latin-1") as f:
lines = f.readlines() # Get lines as a list of strings
lines = list(map(str.strip, lines)) # Remove /n characters
lines = list(filter(None, lines)) # Remove empty strings return linesdef get_df_from_genre(path, genre):
files = glob.glob(path + genre + "/*.txt")
titles = []
subtitles = []
bodies = [] for f in files:
lines = read_and_split_file(f)
titles.append(lines[0]) # First line is the title
subtitles.append(lines[1]) # Second line is the subtitle
bodies.append(' '.join(lines[2:])) # Combine all the rest return(pd.DataFrame({
'genre': genre,
'title': titles,
'subtitle': subtitles,
'body': bodies
})
)final_df = pd.concat([get_df_from_genre(base_path, g) for g in genres])final_df_
Kami menggunakan operator import pandas as pdcsv_file = "/Users/johnreid/Downloads/population-by-country.csv"
df_from_csv = pd.read_csv(csv_file)
df_from_csv.info()_2 dengan glob untuk mendapatkan semua kemungkinan nama file yang diakhiri dengan import pandas as pdcsv_file = "/Users/johnreid/Downloads/population-by-country.csv"
df_from_csv = pd.read_csv(csv_file)
df_from_csv.info()3. Perhatikan bahwa Anda dapat menggabungkan beberapa kerangka data bersama-sama menggunakan import pandas as pdcsv_file = "/Users/johnreid/Downloads/population-by-country.csv"
df_from_csv = pd.read_csv(csv_file)
df_from_csv.info()4. Menjalankan kode itu memberi kita hasil berikut
🗄 Database
Sebagian besar organisasi menyimpan data penting bisnis mereka dalam database relasional seperti Postgres atau MySQL, dan Anda harus mengetahui Structured Query Language (SQL) untuk mengakses atau memperbarui data yang disimpan di sana. Database memiliki sejumlah keunggulan, seperti normalisasi data
5. SQLite
SQLite adalah database tersemat yang disimpan sebagai satu file, jadi ini adalah tempat yang tepat untuk mulai menguji kueri. Di sini kami akan menunjukkan contoh menghubungkan ke file SQLite dari database Chinook
import pandas as pdimport sqlite3 as sqlconn = sql.connect('/Users/johnreid/Downloads/chinook.db')# First pattern - turn query directly into dataframe:
df1 = pd.read_sql_query("SELECT * FROM invoice", conn)# Second pattern - get row-level data, but no column names
cur = conn.cursor()
results = cur.execute("SELECT * FROM invoice LIMIT 5").fetchall()
df2 = pd.DataFrame(results)
Jika Anda penasaran, baca tutorial lengkap saya tentang membuat dasbor interaktif menggunakan SQL di sini
Membangun dasbor Python interaktif menggunakan SQL dan Datapane
menuju ilmu data. com
6. Database jarak jauh
Menghubungkan ke basis data jarak jauh seperti Postgres, Redshift, atau SQLServer sebagian besar menggunakan sintaks yang sama tetapi memerlukan kredensial akses. Untuk alasan keamanan, sebaiknya simpan kredensial ini dalam file konfigurasi dan muat ke dalam skrip Python Anda. Anda dapat membuat file import pandas as pdcsv_file = "/Users/johnreid/Downloads/population-by-country.csv"
df_from_csv = pd.read_csv(csv_file)
df_from_csv.info()5 terpisah dengan info berikut
database= "suppliers"
user = "postgres"
password = "SecurePas$1"
dan kemudian impor ke skrip Python Anda sebagai berikut (Anda juga memerlukan perpustakaan import pandas as pdcsv_file = "/Users/johnreid/Downloads/population-by-country.csv"
df_from_csv = pd.read_csv(csv_file)
df_from_csv.info()6)
import configconn = psycopg2.connect(
host=config.host,
database=config.database,
user=config.user,
password=config.password)df1 = pd.read_sql_query("SELECT * FROM invoice", conn)
Pastikan untuk menyimpan file import pandas as pdcsv_file = "/Users/johnreid/Downloads/population-by-country.csv"
df_from_csv = pd.read_csv(csv_file)
df_from_csv.info()7 Anda dengan aman dan jangan mengunggahnya di tempat lain - Anda dapat menambahkannya ke import pandas as pdcsv_file = "/Users/johnreid/Downloads/population-by-country.csv"
df_from_csv = pd.read_csv(csv_file)
df_from_csv.info()8 Anda untuk memastikannya tidak disertakan dalam komitmen git
7. SQLAlkimia
Jika Anda menginginkan cara yang lebih 'pythonic' untuk menanyakan database, coba perpustakaan SQLAlchemy, yang merupakan Object-Relational-Mapper. Ini biasanya digunakan untuk aplikasi sehingga pengembang tidak perlu menulis SQL murni untuk memperbarui database mereka, tetapi Anda juga dapat menggunakannya untuk kueri data
Berikut adalah contoh menggunakan database toko musik Chinook yang sama
connection = engine.connect()
metadata = db.MetaData()invoice = db.Table('invoice', metadata, autoload=True, autoload_with=engine)# Get the first 10 invoices from the USA
query = (db.select([invoice])
.filter_by(billing_country = 'USA')
.limit(10)
)df = pd.read_sql(query, engine)
Dalam kode ini kita menghubungkan ke database, lalu mengatur beberapa tabel & metadata di SQLAlchemy. Setelah ditentukan, kita dapat menulis kueri dengan cara yang lebih 'pythonic' dan membaca hasilnya langsung ke kerangka data Pandas. Menjalankan kode itu memberikan output berikut
📶 API
Terkadang Anda perlu mengakses data dari platform tertentu yang digunakan perusahaan Anda, seperti Hubspot, Twitter, atau Trello. Platform ini sering kali memiliki API publik tempat Anda dapat mengambil data, langsung di dalam lingkungan Python Anda
Ide dasarnya adalah Anda mengirim permintaan (yang mungkin menyertakan parameter kueri dan kredensial akses) ke titik akhir. Titik akhir itu akan mengembalikan kode respons plus data yang Anda minta (semoga). Anda harus melihat dokumentasi API untuk memahami bidang data apa yang tersedia. Data biasanya akan dikembalikan dalam format JSON, yang memungkinkan data bersarang dalam
8. Tanpa kredensial
Mari kita lakukan contoh minimal menggunakan OpenNotify API, yang melacak semua orang yang saat ini berada di luar angkasa
# Absolute pathfile1 = "~/Users/johnreid/Documents/my_project/data/example.csv"# Relative path, assuming current working directory is my_project
file2 = "./data/example.csv"0
Menjalankan kode itu memberi kita hasil berikut
Kode respons memberi tahu Anda hasil panggilan API Anda — menurut Dataquest, yang paling umum adalah
- import pandas as pdcsv_file = "/Users/johnreid/Downloads/population-by-country.csv"
df_from_csv = pd.read_csv(csv_file)
df_from_csv.info()_9. Semuanya baik-baik saja, dan hasilnya telah dikembalikan (jika ada) - import pandas as pdexcel_file = "/Users/johnreid/Downloads/Financial_Sample.xlsx"
df_from_excel = pd.read_excel(excel_file, sheet_name = "Sheet1")
df_from_excel.info()_0. Server mengarahkan Anda ke titik akhir yang berbeda. Hal ini dapat terjadi saat perusahaan mengganti nama domain, atau nama titik akhir diubah - import pandas as pdexcel_file = "/Users/johnreid/Downloads/Financial_Sample.xlsx"
df_from_excel = pd.read_excel(excel_file, sheet_name = "Sheet1")
df_from_excel.info()_1. Server mengira Anda membuat permintaan yang buruk. Hal ini dapat terjadi jika Anda tidak mengirimkan data yang benar, antara lain - import pandas as pdexcel_file = "/Users/johnreid/Downloads/Financial_Sample.xlsx"
df_from_excel = pd.read_excel(excel_file, sheet_name = "Sheet1")
df_from_excel.info()_2. Sumber daya yang Anda coba akses dilarang. Anda tidak memiliki izin yang tepat untuk melihatnya - import pandas as pdexcel_file = "/Users/johnreid/Downloads/Financial_Sample.xlsx"
df_from_excel = pd.read_excel(excel_file, sheet_name = "Sheet1")
df_from_excel.info()_3. Sumber daya yang Anda coba akses tidak ditemukan di server - import pandas as pdexcel_file = "/Users/johnreid/Downloads/Financial_Sample.xlsx"
df_from_excel = pd.read_excel(excel_file, sheet_name = "Sheet1")
df_from_excel.info()_4. Server belum siap menangani permintaan
9. Dengan kredensial & parameter kueri
Terkadang Anda mungkin memerlukan informasi yang lebih spesifik dari API, atau harus mengautentikasi. Ada beberapa cara untuk melakukannya, namun salah satu yang paling umum adalah menambahkan parameter URL ke permintaan Anda
Anggaplah kita memiliki file import pandas as pdcsv_file = "/Users/johnreid/Downloads/population-by-country.csv"
df_from_csv = pd.read_csv(csv_file)
df_from_csv.info()_7 dengan kunci API kita di dalamnya
file1 = "~/Users/johnreid/Documents/my_project/data/example.csv"# Relative path, assuming current working directory is my_project
file2 = "./data/example.csv"_1
Kemudian kami membuat kamus untuk semua parameter (ini adalah contoh buatan) dan menyebarkannya
# Absolute pathfile1 = "~/Users/johnreid/Documents/my_project/data/example.csv"# Relative path, assuming current working directory is my_project
file2 = "./data/example.csv"_2
Jika Anda tidak ingin berurusan dengan JSON, Anda dapat mencoba mencari pustaka Python untuk API tersebut — ini biasanya bersumber terbuka dan dikelola oleh perusahaan atau pihak ketiga
📚 Pustaka akses set dataBagaimana jika Anda memerlukan beberapa data referensi untuk perbandingan atau penambahan konteks?
10. Pandas_datareader
Pandas_datareader adalah cara yang bagus untuk menarik data dari internet ke dalam lingkungan Python Anda. Ini sangat cocok untuk data keuangan, tetapi juga memiliki beberapa sumber data Bank Dunia. Untuk mendapatkan harga saham harian Zoom selama beberapa tahun terakhir, coba yang berikut ini
# Absolute pathfile1 = "~/Users/johnreid/Documents/my_project/data/example.csv"# Relative path, assuming current working directory is my_project
file2 = "./data/example.csv"_3
Menjalankan kode itu memberi kita hasil berikut
11. DataCommons
Datacommons adalah proyek oleh Google yang menyediakan akses ke kumpulan data publik yang distandarisasi dan dibersihkan. Data yang mendasari direpresentasikan dalam format grafik, membuatnya sangat mudah untuk meminta dan menggabungkan data dari banyak sumber data yang berbeda e. g. Sensus AS, Bank Dunia, Wikipedia, Pusat Pengendalian Penyakit dan banyak lagi. Ini contoh dasarnya
# Absolute pathfile1 = "~/Users/johnreid/Documents/my_project/data/example.csv"# Relative path, assuming current working directory is my_project
file2 = "./data/example.csv"_4
Menjalankan kode itu memberi kita yang berikut
Jika Anda ingin mempelajari cara menggunakan DataCommons, baca tutorial lengkap saya di sini
Menjelajahi DataCommons — API yang mendukung Google Penelusuran
Paradigma baru untuk mengakses kumpulan data yang tersedia untuk umum
menuju ilmu data. com
12. PyTrends (Google Trends)
adalah pustaka tidak resmi namun berguna untuk menanyakan data Google Trends — inilah contoh sederhananya
# Absolute pathfile1 = "~/Users/johnreid/Documents/my_project/data/example.csv"# Relative path, assuming current working directory is my_project
file2 = "./data/example.csv"5
Menjalankan kode itu memberi kita hasil berikut
13. Kaggle
Kaggle adalah komunitas ilmu data yang menyelenggarakan banyak kumpulan data dan kompetisi untuk mempelajari Python. Anda dapat mengunduh beberapa kumpulan data ini untuk dimainkan melalui antarmuka baris perintah mereka (catatan. Anda harus mendaftar untuk akun Kaggle). Misalnya, kami ingin mengunduh beberapa data ekonomi Zillow, kami dapat menjalankan perintah berikut di terminal kami (pengguna Jupyter. ganti import pandas as pdexcel_file = "/Users/johnreid/Downloads/Financial_Sample.xlsx"
df_from_excel = pd.read_excel(excel_file, sheet_name = "Sheet1")
df_from_excel.info()_6 dengan import pandas as pdexcel_file = "/Users/johnreid/Downloads/Financial_Sample.xlsx"
df_from_excel = pd.read_excel(excel_file, sheet_name = "Sheet1")
df_from_excel.info()7 dalam kode Python Anda
file1 = "~/Users/johnreid/Documents/my_project/data/example.csv"# Relative path, assuming current working directory is my_project
file2 = "./data/example.csv"_6
Ini akan mengunduh file zip dari kumpulan data, dan kemudian membuka kompresinya. Dari sana, Anda dapat membukanya sebagai file lokal dengan Panda
# Absolute pathfile1 = "~/Users/johnreid/Documents/my_project/data/example.csv"# Relative path, assuming current working directory is my_project
file2 = "./data/example.csv"_7
Untuk mempelajari lebih lanjut, lihat dokumentasi Kaggle API
KesimpulanGambar dari GiphyKau berhasil. Sekarang Anda dapat menggunakan kekuatan baru Anda untuk mengakses beberapa sumber data dan menggabungkannya bersamaimport pandas as pdexcel_file = "/Users/johnreid/Downloads/Financial_Sample.xlsx"
df_from_excel = pd.read_excel(excel_file, sheet_name = "Sheet1")
df_from_excel.info()8 atau import pandas as pdcsv_file = "/Users/johnreid/Downloads/population-by-country.csv"
df_from_csv = pd.read_csv(csv_file)
df_from_csv.info()4, lalu memvisualisasikannya dengan pustaka interaktif seperti Altair, Pandas, atau Folium