Cara membuat daftar kolom kerangka data dengan python

Pernahkah Anda berurusan dengan kumpulan data yang mengharuskan Anda bekerja dengan nilai daftar? . Jika belum, lebih baik Anda mempersiapkannya

Jika Anda melihat lebih dekat, Anda akan menemukan bahwa daftar ada di mana-mana. Berikut adalah beberapa masalah praktis, di mana Anda mungkin akan menemukan nilai daftar

  • Tag audio atau video
  • Pertanyaan terbuka dalam data survei
  • Daftar semua penulis, artis, produser, dll. terlibat dalam produk kreatif

Gambar 2 — Daftar tag untuk video kucing lucu

Saya baru-baru ini mengerjakan beberapa proyek yang mengharuskan saya menganalisis data semacam ini. Setelah berjam-jam mencari tahu cara melakukan operasi yang paling sederhana sekalipun, saya menyadari bahwa saya harus membagikan pengetahuan saya di sini untuk menghemat waktu Anda

Saya akan menunjukkan kepada Anda jenis masalah yang mungkin Anda temui dan menawarkan solusi praktis untuk masalah tersebut

Persiapan Cepat

Untuk mengikuti tutorial ini, silakan unduh kumpulan data fiktif yang digunakan untuk semua contoh. Semua bahan termasuk kode dapat ditemukan di repo ini

Juga, harap impor semua pustaka yang diperlukan dan muat kerangka data

import pandas as pd
import numpy as np
import matplotlib as plt
fruits = pd.read_csv("fruits.csv", delimiter = ";")

Gambar 3 — Contoh Kumpulan Data Apa yang Salah dengan Daftar Nilai?

Izinkan saya untuk langsung ke intinya. Daftar nilai mengacaukan semua yang Anda ketahui tentang analisis data. Operasi paling sederhana tidak dapat dilakukan tanpa perulangan tanpa akhir. Mari saya tunjukkan contoh cepat

Untuk kolom “usia” pada dataset contoh, kita dapat dengan mudah menggunakan fungsi value_counts() untuk menghitung berapa kali usia diamati

fruits["age"].value_counts()
## OUTPUT ##
8 3
10 2
6 2
9 1
7 1
5 1

Bagaimana jika kita ingin mengetahui buah apa yang paling banyak diberi nama? . Namun, jika kita menerapkan fungsi yang sama, hasilnya kurang membantu

fruits["favorite_fruits"].value_counts()
## OUTPUT ##
["strawberry", "raspberry", "blueberry"] 1
["mango", "pineapple", "orange"] 1
["blueberry", "watermelon", "apple", "raspberry"] 1
["apple", "pear", "peach"] 1
["pear", "strawberry", "raspberry"] 1
["banana", "maracuja", "watermelon", "apple", "pineapple"] 1
["peach", "strawberry", "apple", "blueberry"] 1
[] 1
["banana", "mango", "orange", "watermelon"] 1
["watermelon", "apple", "blueberry", "pear", "strawberry"] 1

Alasan ini tidak berhasil adalah karena Panda tidak memiliki akses langsung ke setiap elemen daftar. Dengan demikian, Pandas tidak dapat menerapkan fungsi seperti value_counts() dengan benar. Jadi, apa yang kita lakukan?

Masalah 1. Daftar Saya Disimpan sebagai String

Satu masalah yang akan selalu Anda temui adalah Panda akan membaca daftar Anda sebagai string, bukan sebagai daftar

for i, l in enumerate(fruits["favorite_fruits"]):
print("list",i,"is",type(l))

Ini berarti bahwa Anda bahkan tidak dapat menelusuri daftar untuk menghitung nilai atau frekuensi unik. Bergantung pada bagaimana daftar Anda diformat dalam kerangka data, ada solusi yang mudah atau lebih rumit. Bagaimanapun, Anda hanya dapat menggunakan kode yang saya berikan

Apakah string Anda terlihat seperti ini. “[‘stroberi’, ‘apel’, ‘jeruk’]”?

Dalam hal ini, ada metode cepat menggunakan fungsi apply() dan eval()

fruits["favorite_fruits"] = fruits["favorite_fruits"].apply(eval)
_

Apakah string Anda terlihat seperti ini. “[stroberi, apel, jeruk]”?

Yang ini lebih sulit, karena fungsi eval() tidak akan berfungsi, karena daftar tidak memiliki tanda kutip dalam agar dapat dikenali sebagai objek daftar. Solusi cepat dan kotor adalah dengan menambahkan tanda kutip ke string dan menerapkan eval() sesudahnya. Gunakan fungsi ini

def clean_alt_list(list_):
list_ = list_.replace(', ', '","')
list_ = list_.replace('[', '["')
list_ = list_.replace(']', '"]')
return list_

Untuk menerapkan ini ke kerangka data Anda, gunakan kode ini

df[col] = df[col].apply(clean_alt_list)
_

Perhatikan bahwa dalam kedua kasus, Panda akan tetap menetapkan tipe data "O" pada seri, yang biasanya digunakan untuk string. Tapi jangan biarkan ini membingungkan Anda. Anda dapat memeriksa tipe data aktual menggunakan

for i, l in enumerate(fruits["favorite_fruits"]):
print("list",i,"is",type(l))
fruits["age"].value_counts()
0Masalah 2. Mendapatkan Nilai Unik atau Hitungan Nilai

Setelah langkah pertama ini, daftar kami akhirnya dikenali oleh Panda. Tetap saja, kami tidak dapat menggunakan fungsi standar, karena tidak dibuat untuk aplikasi daftar

Setidaknya kita bisa menggunakan loop untuk semuanya sekarang. Metode ini bekerja dengan kumpulan data kecil, tetapi bisa menjadi sangat lambat dengan kumpulan data besar. Misalnya, saya harus menganalisis daftar tag hingga 999 tag untuk sekitar 500 ribu trek musik. Ini berarti, loop dalam akan memiliki ratusan juta iterasi, yang akan memakan waktu berjam-jam dan mungkin membuat komputer saya crash. Saya akan menunjukkan kepada Anda cara yang lebih bersih dan lebih cepat untuk melakukan ini dalam satu menit. Namun, jika Anda benar-benar ingin menggunakan loop, ini kodenya

fruits["age"].value_counts()
_1

Inilah cara bersih yang butuh waktu lama bagi saya untuk mencari tahu. Jika kita membuat konsep kolom favorite_fruits sebagai larik 2D, mengurangi dimensinya dari 2 menjadi 1 akan memungkinkan kita untuk menerapkan fungsi panda yang khas lagi. Untuk itu, Anda dapat menggunakan fungsi ini

fruits["age"].value_counts()
_2

Jika kita menggunakan value_counts() sekarang, kita mendapatkan hasil yang kita inginkan

fruits["age"].value_counts()
_3
fruits["age"].value_counts()
4

Untuk mendapatkan nilai unik, cukup ekstrak dari hasil rangkaian di atas. index() ke atasnya

Pada titik ini, kita dapat menghasilkan visualisasi bermakna pertama kita

fruits["age"].value_counts()
_5

Gambar 4 — Bagan batang memvisualisasikan frekuensi semua buah. Masalah 3. Kolom Individual untuk Semua Nilai Unik

Pada titik ini, segalanya semakin maju. Jika Anda senang dengan hasil yang kami dapatkan sebelumnya, Anda bisa berhenti di sini. Namun, tingkat analisis yang lebih dalam mungkin diperlukan untuk tujuan penelitian Anda. Mungkin Anda ingin mengkorelasikan semua elemen daftar satu sama lain untuk menghitung skor kesamaan. e. g. apakah anak-anak yang makan pisang biasanya juga suka mangga? . Pertanyaan-pertanyaan ini hanya dapat dijawab pada tingkat analisis yang lebih dalam

Untuk ini, saya akan memperkenalkan dua metode yang berguna. Mereka berbeda dalam kompleksitas, tetapi juga dalam apa yang dapat Anda lakukan dengan hasilnya

Metode 1

Ini adalah metode yang sangat mudah dan cepat yang saya temukan. Dan itu sangat berguna. Yang Anda butuhkan hanyalah satu baris kode

fruits["age"].value_counts()
_6

Gambar 5 — Versi daftar buah yang diperluas menggunakan metode 1

Seperti yang Anda lihat, one-liner ini menghasilkan kerangka data di mana setiap daftar dibagi menjadi elemen tunggal. Kolom menunjukkan urutan penempatan buah dalam daftar. Dengan metode ini, Anda akan selalu mendapatkan kerangka data dengan bentuk (n, len(longest_list)). Dalam hal ini, dua dari 10 anak menyebutkan lima buah favorit, yang menghasilkan kerangka data 10x5

Dengan ini, kita bisa mengetahui buah mana yang paling sering disebut sebagai buah favorit nomor satu

fruits["age"].value_counts()
7
fruits["age"].value_counts()
8

Kita dapat melihat bahwa pisang adalah buah favorit mutlak anak-anak

Alternatifnya, kita dapat menargetkan buah tunggal dan mencari tahu berapa kali mereka diberi nama di setiap posisi daftar. Ini adalah fungsi yang saya tulis untuk itu

fruits["age"].value_counts()
_9

Jika kita menerapkannya, kita dapatkan

## OUTPUT ##
8 3
10 2
6 2
9 1
7 1
5 1
0
## OUTPUT ##
8 3
10 2
6 2
9 1
7 1
5 1
1

Seperti yang Anda lihat, kami dapat melakukan analisis berbasis peringkat dengan sangat baik dengan pendekatan ini. Namun, metode ini hampir tidak berguna untuk pendekatan lain. Karena kolom tidak mewakili satu tag, tetapi peringkat, sebagian besar operasi berbasis tag tidak dapat dilakukan dengan benar. Misalnya, menghitung korelasi antara pisang dan buah persik tidak mungkin dilakukan dengan kerangka data yang kami dapatkan dari metode 1. Jika itu adalah tujuan penelitian Anda, gunakan metode selanjutnya

Metode 2

Metode ini lebih kompleks dan membutuhkan lebih banyak sumber daya. Idenya adalah kita membuat kerangka data di mana baris tetap sama seperti sebelumnya, tetapi di mana setiap buah diberi kolomnya sendiri. Jika hanya anak #2 yang menamai pisang, kolom pisang akan memiliki nilai “Benar” di baris 2 dan nilai “Salah” di tempat lain (lihat Gambar 6). Saya menulis sebuah fungsi yang akan melakukan operasi ini. Itu bergantung pada perulangan, yang berarti akan memakan banyak waktu dengan kumpulan data yang besar. Namun, dari semua metode yang saya coba, ini adalah cara paling efisien untuk melakukannya

## OUTPUT ##
8 3
10 2
6 2
9 1
7 1
5 1
2

Jika sekarang kita menerapkan fungsi

## OUTPUT ##
8 3
10 2
6 2
9 1
7 1
5 1
_3

kami mendapatkan kerangka data ini

Gambar 6 — kerangka data Boolean

Dari sini, kita dapat dengan mudah menghitung korelasi. Perhatikan bahwa "korelasi" sebenarnya bukan istilah yang tepat, karena kami tidak menggunakan metrik atau ordinal, tetapi data biner. Jika Anda ingin benar, gunakan "asosiasi". saya tidak akan

Sekali lagi, ada banyak cara untuk mengkorelasikan buah. Salah satu cara lurus ke depan adalah koefisien korelasi Pearson, yang juga dapat digunakan untuk data biner. Panda memiliki fungsi bawaan untuk ini

## OUTPUT ##
8 3
10 2
6 2
9 1
7 1
5 1
_4

Gambar 7 — Kerangka data korelasi Pearson

Cara lain adalah dengan menghitung berapa kali sebuah buah diberi nama di samping semua buah lainnya. Ini dapat diselesaikan dengan menggunakan perkalian matriks. Untuk ini, kita perlu mengonversi kerangka data boolean menjadi bilangan bulat berdasarkan yang pertama

## OUTPUT ##
8 3
10 2
6 2
9 1
7 1
5 1
5

Kemudian, kita dapat menghitung frekuensinya

## OUTPUT ##
8 3
10 2
6 2
9 1
7 1
5 1
6
## OUTPUT ##
8 3
10 2
6 2
9 1
7 1
5 1
7

Yang perlu kita lakukan sekarang adalah menambahkan label dan mengubahnya kembali menjadi kerangka data

## OUTPUT ##
8 3
10 2
6 2
9 1
7 1
5 1
_8

Gambar 8 — Kerangka data frekuensi

Jika Anda mencari visualisasi yang bagus, Anda dapat membuat peta panas dengan pustaka seaborn

## OUTPUT ##
8 3
10 2
6 2
9 1
7 1
5 1
_9

Gambar 9 — Peta panas

Dengan matriks Pearson, kita dapat dengan mudah membuat sistem pemberi rekomendasi buah. Misalnya, jika Anda memasukkan suka pisang, Anda akan direkomendasikan maracuja, karena keduanya memiliki korelasi tertinggi (0. 67). Anda akan terkejut dengan betapa kuatnya pendekatan sederhana ini. Saya telah berhasil menggunakannya berkali-kali. Jika Anda ingin melakukan hal seperti ini dengan kerangka data frekuensi, Anda harus menormalkan data terlebih dahulu. Namun, itu adalah topik untuk posting lain

Saya harap panduan ini bermanfaat bagi Anda dan menghemat waktu atau menginspirasi Anda. Terima kasih semuanya telah membaca

Bagaimana cara mendapatkan daftar kolom dengan Python?

Untuk mengembalikan kolom indeks sebagai daftar, panggil panda. DataFrame. index untuk mengembalikan kolom indeks sebagai array dan kemudian memanggil index_column. tolist() untuk mengonversi kolom_indeks menjadi daftar .

Bagaimana cara menampilkan kolom di Pandas DataFrame?

Anda dapat menggunakan fungsi loc dan iloc untuk mengakses kolom di Pandas DataFrame. Mari kita lihat caranya. Jika kami ingin mengakses kolom tertentu di DataFrame kami, misalnya kolom Nilai, kami cukup menggunakan fungsi loc dan menentukan nama kolom untuk mengambilnya.

Bagaimana cara memilih daftar kolom dalam DataFrame?

Ada tiga metode dasar yang dapat Anda gunakan untuk memilih beberapa kolom dari DataFrame panda. .
Metode 1. Pilih Kolom berdasarkan Indeks df_new = df. iloc[. , [0,1,3]]
Metode 2. Pilih Kolom dalam Kisaran Indeks df_new = df. iloc[. , 0. 3]
Metode 3. Pilih Kolom berdasarkan Nama df_new = df[['col1', 'col2']]

Bagaimana cara menampilkan semua kolom dalam DataFrame?

Cara Menampilkan Semua Kolom dari Bingkai Data Pandas .
Anda dapat dengan mudah memaksa buku catatan untuk menampilkan semua kolom dengan menggunakan sintaks berikut. pd. .
Anda juga dapat menggunakan sintaks berikut untuk menampilkan semua nama kolom di DataFrame. cetak (df