|
|
3 weeks ago | |
|---|---|---|
| .. | ||
| R | 11 months ago | |
| README.md | 3 weeks ago | |
| assignment.md | 6 months ago | |
| notebook-covidspread.ipynb | 5 months ago | |
| notebook-papers.ipynb | 11 months ago | |
| notebook.ipynb | 11 months ago | |
README.md
Bekerja dengan Data: Python dan Perpustakaan Pandas
![]() |
|---|
| Bekerja Dengan Python - Sketchnote oleh @nitya |
Walaupun pangkalan data menawarkan cara yang sangat cekap untuk menyimpan data dan membuat pertanyaan menggunakan bahasa pertanyaan, cara paling fleksibel untuk pemprosesan data adalah menulis program anda sendiri untuk memanipulasi data. Dalam banyak kes, melakukan pertanyaan pangkalan data adalah cara yang lebih berkesan. Namun dalam beberapa kes apabila pemprosesan data yang lebih kompleks diperlukan, ia tidak boleh dilakukan dengan mudah menggunakan SQL. Pemprosesan data boleh diprogram dalam mana-mana bahasa pengaturcaraan, tetapi terdapat bahasa tertentu yang lebih tinggi tahapnya dalam hal bekerja dengan data. Ahli sains data biasanya memilih salah satu daripada bahasa berikut:
- Python, bahasa pengaturcaraan tujuan umum, yang sering dianggap sebagai salah satu pilihan terbaik untuk pemula kerana kesederhanaannya. Python mempunyai banyak perpustakaan tambahan yang boleh membantu anda menyelesaikan banyak masalah praktikal, seperti mengekstrak data anda daripada arkib ZIP, atau menukar gambar ke skala kelabu. Selain sains data, Python juga sering digunakan untuk pembangunan web.
- R adalah kotak alat tradisional yang dibangunkan dengan pemprosesan data statistik dalam fikiran. Ia juga mengandungi repositori besar perpustakaan (CRAN), menjadikannya pilihan yang baik untuk pemprosesan data. Namun, R bukan bahasa pengaturcaraan tujuan umum, dan jarang digunakan di luar domain sains data.
- Julia adalah bahasa lain yang dibangunkan khusus untuk sains data. Ia bertujuan memberikan prestasi yang lebih baik daripada Python, menjadikannya alat hebat untuk eksperimen saintifik.
Dalam pelajaran ini, kita akan fokus menggunakan Python untuk pemprosesan data yang mudah. Kami akan menganggap anda mempunyai kefahaman asas tentang bahasa ini. Jika anda mahukan pengenalan lebih mendalam tentang Python, anda boleh merujuk salah satu daripada sumber berikut:
- Belajar Python dengan Cara yang Menyeronokkan menggunakan Grafik Turtle dan Fraktal - Kursus pengenalan pantas berbasis GitHub ke Pengaturcaraan Python
- Ambil Langkah Pertama Anda dengan Python Laluan Pembelajaran di Microsoft Learn
Data boleh datang dalam pelbagai bentuk. Dalam pelajaran ini, kita akan membincangkan tiga bentuk data - data tabular, teks dan imej.
Kita akan fokus pada beberapa contoh pemprosesan data, daripada memberikan gambaran penuh tentang semua perpustakaan berkaitan. Ini membolehkan anda memahami idea utama tentang apa yang mungkin dilakukan, dan memberikan kefahaman tentang di mana mencari penyelesaian untuk masalah anda apabila diperlukan.
Nasihat yang paling berguna. Apabila anda perlu melakukan operasi tertentu pada data yang anda tidak tahu caranya, cuba cari di internet. Stackoverflow biasanya mengandungi banyak contoh kod berguna dalam Python untuk banyak tugas tipikal.
Kuiz Pra-ceramah
Data Tabular dan Dataframe
Anda sudah pernah bertemu data tabular apabila kita membincangkan pangkalan data berhubung. Apabila anda mempunyai banyak data, dan ia terkandung dalam banyak jadual berhubung yang berbeza, memang masuk akal menggunakan SQL untuk bekerja dengannya. Namun, terdapat banyak kes apabila kita mempunyai jadual data, dan kita perlu mendapatkan pemahaman atau insight tentang data ini, seperti taburan, korelasi antara nilai, dan sebagainya. Dalam sains data, terdapat banyak kes apabila kita perlu melakukan beberapa transformasi data asal, diikuti dengan visualisasi. Kedua-dua langkah ini boleh dilakukan dengan mudah menggunakan Python.
Terdapat dua perpustakaan yang paling berguna dalam Python yang boleh membantu anda mengendalikan data tabular:
- Pandas membolehkan anda memanipulasi yang dikenali sebagai Dataframes, yang serupa dengan jadual berhubung. Anda boleh mempunyai lajur bernama, dan melakukan operasi berbeza ke atas baris, lajur dan dataframe secara umum.
- Numpy adalah perpustakaan untuk bekerja dengan tensor, iaitu array berbilang dimensi. Array mempunyai nilai jenis asas yang sama, dan ia lebih mudah daripada dataframe, tetapi menawarkan lebih banyak operasi matematik, dan menghasilkan overhead yang lebih rendah.
Terdapat juga beberapa perpustakaan lain yang anda perlu tahu:
- Matplotlib adalah perpustakaan yang digunakan untuk visualisasi data dan melukis graf
- SciPy adalah perpustakaan dengan beberapa fungsi saintifik tambahan. Kami sudah pernah bertemu perpustakaan ini ketika membincangkan kebarangkalian dan statistik
Berikut adalah sebahagian kod yang biasanya anda gunakan untuk mengimport perpustakaan tersebut pada awal program Python anda:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy import ... # anda perlu menyatakan sub-pakej yang tepat yang anda perlukan
Pandas tertumpu pada beberapa konsep asas.
Siri
Siri adalah deretan nilai, serupa dengan senarai atau array numpy. Perbezaan utama ialah siri juga mempunyai indeks, dan apabila kita melakukan operasi ke atas siri (contohnya, menambahnya), indeks diambil kira. Indeks boleh sesederhana nombor baris integer (ia adalah indeks yang digunakan secara lalai ketika membuat siri dari senarai atau array), atau boleh mempunyai struktur kompleks, seperti julat tarikh.
Nota: Terdapat beberapa kod pengenalan Pandas dalam buku nota yang disertakan
notebook.ipynb. Kami hanya menggariskan beberapa contoh di sini, dan anda tentunya dialu-alukan untuk melihat buku nota penuh.
Pertimbangkan contoh: kami mahu menganalisis jualan kedai aiskrim kami. Mari kita jana siri nombor jualan (bilangan item yang dijual setiap hari) untuk suatu tempoh masa:
start_date = "Jan 1, 2020"
end_date = "Mar 31, 2020"
idx = pd.date_range(start_date,end_date)
print(f"Length of index is {len(idx)}")
items_sold = pd.Series(np.random.randint(25,50,size=len(idx)),index=idx)
items_sold.plot()
Sekarang anggap bahawa setiap minggu kami mengadakan pesta untuk rakan-rakan, dan kami mengambil tambahan 10 pek aiskrim untuk pesta tersebut. Kita boleh buat seri lain, yang diindekskan mengikut minggu, untuk menunjukkan itu:
additional_items = pd.Series(10,index=pd.date_range(start_date,end_date,freq="W"))
Apabila kita tambah dua siri bersama, kita dapat jumlah keseluruhan:
total_items = items_sold.add(additional_items,fill_value=0)
total_items.plot()
Nota bahawa kami tidak menggunakan sintaks mudah
total_items+additional_items. Jika kami melakukannya, kami akan mendapat banyak nilaiNaN(Bukan Nombor) dalam siri hasil. Ini kerana terdapat nilai hilang untuk beberapa titik indeks dalam siriadditional_items, dan menambahkanNaNkepada apa sahaja menghasilkanNaN. Oleh itu kita perlu menentukan parameterfill_valuesemasa penambahan.
Dengan siri masa, kita juga boleh resample siri itu dengan selang masa yang berbeza. Contohnya, andaikan kita mahu mengira purata volum jualan bulanan. Kita boleh menggunakan kod berikut:
monthly = total_items.resample("1M").mean()
ax = monthly.plot(kind='bar')
DataFrame
DataFrame pada asasnya adalah koleksi siri dengan indeks yang sama. Kita boleh menggabungkan beberapa siri menjadi DataFrame:
a = pd.Series(range(1,10))
b = pd.Series(["I","like","to","play","games","and","will","not","change"],index=range(0,9))
df = pd.DataFrame([a,b])
Ini akan menghasilkan jadual mendatar seperti ini:
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
|---|---|---|---|---|---|---|---|---|---|
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 1 | I | suka | untuk | guna | Python | dan | Pandas | sangat | banyak |
Kita juga boleh menggunakan Siri sebagai lajur, dan menentukan nama lajur menggunakan kamus:
df = pd.DataFrame({ 'A' : a, 'B' : b })
Ini akan memberikan kita jadual seperti ini:
| A | B | |
|---|---|---|
| 0 | 1 | Saya |
| 1 | 2 | suka |
| 2 | 3 | untuk |
| 3 | 4 | guna |
| 4 | 5 | Python |
| 5 | 6 | dan |
| 6 | 7 | Pandas |
| 7 | 8 | sangat |
| 8 | 9 | banyak |
Nota bahawa kita juga boleh mendapatkan susun atur jadual ini dengan transposisi jadual sebelumnya, contohnya dengan menulis
df = pd.DataFrame([a,b]).T.rename(columns={ 0 : 'A', 1 : 'B' })
Di sini .T bermaksud operasi transpose DataFrame, iaitu menukar baris dan lajur, dan operasi rename membolehkan kita menamakan semula lajur untuk memadankan contoh sebelumnya.
Berikut adalah beberapa operasi paling penting yang boleh kita lakukan pada DataFrames:
Pemilihan lajur. Kita boleh memilih lajur individu dengan menulis df['A'] - operasi ini mengembalikan Siri. Kita juga boleh memilih subset lajur ke DataFrame lain dengan menulis df[['B','A']] - ini mengembalikan DataFrame lain.
Penapisan hanya baris tertentu melalui kriteria. Contohnya, untuk meninggalkan hanya baris dengan lajur A lebih besar dari 5, kita boleh menulis df[df['A']>5].
Nota: Cara penapisan berfungsi adalah seperti berikut. Ekspresi
df['A']<5mengembalikan siri boolean, yang menunjukkan sama ada ekspresi adalahTrueatauFalseuntuk setiap elemen siri asaldf['A']. Apabila siri boolean digunakan sebagai indeks, ia mengembalikan subset baris dalam DataFrame. Oleh itu, tidak boleh menggunakan ekspresi boolean Python sewenang-wenangnya, contohnya, menulisdf[df['A']>5 and df['A']<7]adalah salah. Sebaliknya, anda harus menggunakan operasi khas&pada siri boolean, menulisdf[(df['A']>5) & (df['A']<7)](kurungan penting di sini).
Mencipta lajur baru yang boleh dikira. Kita boleh dengan mudah mencipta lajur baru yang boleh dikira bagi DataFrame kita dengan menggunakan ekspresi intuitif seperti ini:
df['DivA'] = df['A']-df['A'].mean()
Contoh ini mengira divergence A dari nilai puratanya. Apa yang sebenarnya berlaku ialah kita mengira siri, dan kemudian menetapkan siri ini ke sebelah kiri, mewujudkan lajur lain. Oleh itu, kita tidak boleh menggunakan operasi yang tidak serasi dengan siri, contohnya, kod di bawah adalah salah:
# Kod salah -> df['ADescr'] = "Low" jika df['A'] < 5 jika tidak "Hi"
df['LenB'] = len(df['B']) # <- Keputusan salah
Contoh terakhir, walaupun secara sintaksis betul, memberikan hasil salah, kerana ia menetapkan panjang siri B ke semua nilai dalam lajur, dan bukan panjang elemen individu seperti yang dimaksudkan.
Jika kita perlu mengira ekspresi yang kompleks seperti ini, kita boleh menggunakan fungsi apply. Contoh terakhir boleh ditulis seperti berikut:
df['LenB'] = df['B'].apply(lambda x : len(x))
# atau
df['LenB'] = df['B'].apply(len)
Selepas operasi di atas, kita akan mendapat DataFrame berikut:
| A | B | DivA | LenB | |
|---|---|---|---|---|
| 0 | 1 | Saya | -4.0 | 1 |
| 1 | 2 | suka | -3.0 | 4 |
| 2 | 3 | untuk | -2.0 | 2 |
| 3 | 4 | guna | -1.0 | 3 |
| 4 | 5 | Python | 0.0 | 6 |
| 5 | 6 | dan | 1.0 | 3 |
| 6 | 7 | Pandas | 2.0 | 6 |
| 7 | 8 | sangat | 3.0 | 4 |
| 8 | 9 | banyak | 4.0 | 4 |
Memilih baris berdasarkan nombor boleh dilakukan menggunakan konstruk iloc. Contohnya, untuk memilih 5 baris pertama dari DataFrame:
df.iloc[:5]
Pengelompokan sering digunakan untuk mendapatkan hasil yang serupa dengan pivot tables dalam Excel. Andaikan kita mahu mengira nilai purata lajur A untuk setiap bilangan tertentu LenB. Kemudian kita boleh mengelompokkan DataFrame kita berdasarkan LenB, dan memanggil mean:
df.groupby(by='LenB')[['A','DivA']].mean()
Jika kita perlu mengira purata dan bilangan elemen dalam kumpulan, maka kita boleh menggunakan fungsi aggregate yang lebih kompleks:
df.groupby(by='LenB') \
.aggregate({ 'DivA' : len, 'A' : lambda x: x.mean() }) \
.rename(columns={ 'DivA' : 'Count', 'A' : 'Mean'})
Ini memberikan kita jadual berikut:
| LenB | Count | Mean |
|---|---|---|
| 1 | 1 | 1.000000 |
| 2 | 1 | 3.000000 |
| 3 | 2 | 5.000000 |
| 4 | 3 | 6.333333 |
| 6 | 2 | 6.000000 |
Mendapatkan Data
Kita telah melihat betapa mudahnya untuk membina Siri dan DataFrames daripada objek Python. Walau bagaimanapun, data biasanya datang dalam bentuk fail teks, atau jadual Excel. Mujurlah, Pandas menawarkan cara mudah untuk memuatkan data dari cakera. Sebagai contoh, membaca fail CSV adalah semudah ini:
df = pd.read_csv('file.csv')
Kita akan melihat lebih banyak contoh pemuatan data, termasuk pengambilan daripada laman web luaran, dalam bahagian "Cabaran"
Mencetak dan Melukis
Seorang Saintis Data selalunya perlu meneroka data, jadi adalah penting untuk dapat memvisualisasikannya. Apabila DataFrame besar, sering kali kita hanya mahu memastikan segala-galanya dilakukan dengan betul dengan mencetak beberapa baris pertama. Ini boleh dilakukan dengan memanggil df.head(). Jika anda menjalankannya dari Jupyter Notebook, ia akan mencetak DataFrame dalam bentuk jadual yang kemas.
Kita juga telah melihat penggunaan fungsi plot untuk memvisualisasikan beberapa lajur. Walaupun plot sangat berguna untuk banyak tugas, dan menyokong banyak jenis graf yang berbeza melalui parameter kind=, anda sentiasa boleh menggunakan perpustakaan matplotlib mentah untuk melukis sesuatu yang lebih kompleks. Kita akan membincangkan visualisasi data dengan lebih terperinci dalam pelajaran kursus yang berasingan.
Gambaran keseluruhan ini merangkumi konsep paling penting Pandas, tetapi, perpustakaan ini sangat kaya, dan tiada had untuk apa yang anda boleh lakukan dengannya! Mari kita gunakan pengetahuan ini untuk menyelesaikan masalah tertentu.
🚀 Cabaran 1: Menganalisis Penyebaran COVID
Masalah pertama yang akan kita fokuskan adalah pemodelan penyebaran wabak COVID-19. Untuk melakukan itu, kita akan menggunakan data mengenai bilangan individu yang dijangkiti di negara-negara berbeza, disediakan oleh Pusat Sains dan Kejuruteraan Sistem (CSSE) di Universiti Johns Hopkins. Set data tersedia di Repositori GitHub ini.
Oleh kerana kita mahu demonstrasi cara mengendalikan data, kami menjemput anda untuk membuka notebook-covidspread.ipynb dan membacanya dari atas ke bawah. Anda juga boleh menjalankan sel, dan melakukan beberapa cabaran yang kami tinggalkan untuk anda di akhir.
Jika anda tidak tahu cara menjalankan kod dalam Jupyter Notebook, lihat artikel ini.
Bekerja dengan Data Tidak Berstruktur
Walaupun data sangat kerap datang dalam bentuk jadual, dalam beberapa kes kita perlu menangani data kurang terstruktur, contohnya, teks atau imej. Dalam kes ini, untuk menggunakan teknik pemprosesan data yang telah kita lihat di atas, kita perlu mengeluarkan data berstruktur. Berikut adalah beberapa contoh:
- Mengekstrak kata kunci daripada teks, dan melihat berapa kerap kata kunci tersebut muncul
- Menggunakan rangkaian neural untuk mengekstrak maklumat tentang objek dalam gambar
- Mendapatkan maklumat tentang emosi orang dalam rakaman kamera video
🚀 Cabaran 2: Menganalisis Kertas COVID
Dalam cabaran ini, kita akan meneruskan topik pandemik COVID, dan fokus pada pemprosesan kertas saintifik mengenai subjek tersebut. Terdapat Set Data CORD-19 dengan lebih daripada 7000 (ketika penulisan) kertas mengenai COVID, tersedia dengan metadata dan abstrak (dan untuk kira-kira separuh daripadanya juga disediakan teks penuh).
Contoh penuh menganalisis set data ini menggunakan perkhidmatan kognitif Analitis Teks untuk Kesihatan diterangkan dalam pos blog ini. Kita akan membincangkan versi ringkas analisis ini.
CATATAN: Kami tidak menyediakan salinan set data ini sebagai sebahagian daripada repositori ini. Anda mungkin perlu memuat turun terlebih dahulu fail
metadata.csvdari set data ini di Kaggle. Pendaftaran dengan Kaggle mungkin diperlukan. Anda juga boleh memuat turun set data tanpa pendaftaran di sini, tetapi ia akan termasuk semua teks penuh selain fail metadata.
Buka notebook-papers.ipynb dan bacalah dari atas ke bawah. Anda juga boleh menjalankan sel, dan melakukan beberapa cabaran yang kami tinggalkan untuk anda di akhir.
Memproses Data Imej
Baru-baru ini, model AI yang sangat berkuasa telah dibangunkan yang membolehkan kita memahami imej. Terdapat banyak tugas yang boleh diselesaikan menggunakan rangkaian neural yang telah dilatih, atau perkhidmatan awan. Beberapa contoh termasuk:
- Klasifikasi Imej, yang boleh membantu anda mengkategorikan imej ke dalam salah satu kelas yang telah ditetapkan. Anda boleh melatih pengelasan imej anda sendiri dengan mudah menggunakan perkhidmatan seperti Custom Vision
- Pengesanan Objek untuk mengesan objek berbeza dalam imej. Perkhidmatan seperti computer vision boleh mengesan beberapa objek biasa, dan anda boleh melatih model Custom Vision untuk mengesan beberapa objek khusus yang diminati.
- Pengesanan Wajah, termasuk pengesanan Umur, Jantina dan Emosi. Ini boleh dilakukan melalui Face API.
Semua perkhidmatan awan ini boleh dipanggil menggunakan Python SDKs, dan oleh itu boleh dengan mudah dimasukkan ke dalam aliran kerja penerokaan data anda.
Berikut adalah beberapa contoh penerokaan data dari sumber data Imej:
- Dalam pos blog How to Learn Data Science without Coding kita meneroka foto Instagram, cuba memahami apa yang membuatkan orang memberi lebih banyak suka kepada satu foto. Kita mula-mula mengekstrak sebanyak mungkin maklumat dari gambar menggunakan computer vision, dan kemudian menggunakan Azure Machine Learning AutoML untuk membina model yang boleh diterangkan.
- Dalam Facial Studies Workshop kita menggunakan Face API untuk mengekstrak emosi pada orang dalam gambar daripada acara, dengan tujuan untuk cuba memahami apa yang membuatkan orang gembira.
Kesimpulan
Sama ada anda sudah mempunyai data berstruktur atau tidak berstruktur, menggunakan Python anda boleh melakukan semua langkah yang berkaitan dengan pemprosesan dan pemahaman data. Ia mungkin cara paling fleksibel untuk pemprosesan data, dan itulah sebab mengapa majoriti saintis data menggunakan Python sebagai alat utama mereka. Mempelajari Python dengan mendalam adalah idea yang baik jika anda serius dengan perjalanan sains data anda!
Kuiz pasca kuliah
Ulasan & Belajar Sendiri
Buku
Sumber Dalam Talian
- Tutorial rasmi 10 minit ke Pandas
- Dokumentasi Visualisasi Pandas
Belajar Python
- Belajar Python dengan cara yang menyeronokkan menggunakan Grafik Turtle dan Fraktal
- Ambil Langkah Pertama Anda dengan Python Laluan Pembelajaran di Microsoft Learn
Tugasan
Lakukan kajian data yang lebih terperinci untuk cabaran di atas
Kredit
Pelajaran ini telah ditulis dengan ♥️ oleh Dmitry Soshnikov
Penafian: Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI Co-op Translator. Walaupun kami berusaha untuk ketepatan, sila ambil maklum bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang sahih. Untuk maklumat penting, terjemahan oleh manusia profesional adalah disyorkan. Kami tidak bertanggungjawab terhadap sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini.






