Apa pengelompokan data dalam python?

Saya baru-baru ini mulai menggunakan pustaka Pandas yang luar biasa dari Python sebagai alat analisis data, dan, sambil menemukan transisi dari data luar biasa R. perpustakaan meja kadang-kadang membuat frustrasi, saya menemukan jalan keluar dan menemukan sebagian besar hal berfungsi dengan baik

Salah satu aspek yang baru-baru ini saya jelajahi adalah tugas mengelompokkan bingkai data besar berdasarkan variabel yang berbeda, dan menerapkan fungsi ringkasan pada setiap grup. Ini dilakukan di Panda menggunakan fungsi "" dan "" dari objek DataFrame Panda

Memperbarui. Panda versi 0. 20. 1 pada Mei 2017 mengubah API agregasi dan pengelompokan. Posting ini telah diperbarui untuk mencerminkan perubahan baru

Contoh DataFrame

Apa pengelompokan data dalam python?

Untuk mendemonstrasikan keefektifan dan kesederhanaan perintah pengelompokan, kita memerlukan beberapa data. Sebagai contoh kumpulan data, saya telah mengekstrak catatan penggunaan ponsel saya sendiri. Saya menganalisis jenis data ini menggunakan Pandas selama saya bekerja di KillBiller. Jika Anda ingin mengikuti – file csv lengkap tersedia di sini

Kumpulan data berisi 830 entri dari log ponsel saya selama total waktu 5 bulan. File CSV dapat dimuat ke DataFrame panda menggunakan panda. Bingkai Data. from_csv(), dan terlihat seperti ini

dateurationitemmonthnetworknetwork_type015/10/14 06. 5834. 429data2014-11datadata115/10/14 06. 5813. 000panggilan2014-11Vodafonemobile215/10/14 14. 4623. 000panggilan2014-11Meteormobile315/10/14 14. 484. 000panggilan2014-11Tescomobile415/10/14 17. 274. 000panggilan2014-11Tescomobile515/10/14 18. 554. 000panggilan2014-11Tescomobile616/10/14 06. 5834. 429data2014-11datadata716/10/14 15. 01602. 000panggilan2014-11Threemobile816/10/14 15. 121050. 000panggilan2014-11Threemobile916/10/14 15. 3019. 000panggilan2014-11pesansuarapesansuara1016/10/14 16. 211183. 000panggilan2014-11Threemobile1116/10/14 22. 181. 000sms2014-11Meteormobile…………………Contoh data file CSV yang berisi tanggal dan durasi panggilan telepon yang dilakukan di ponsel saya

Kolom utama dalam file tersebut adalah

  1. tanggal. Tanggal dan waktu entri
  2. durasi. Durasi (dalam detik) untuk setiap panggilan, jumlah data (dalam MB) untuk setiap entri data, dan jumlah teks yang dikirim (biasanya 1) untuk setiap entri sms
  3. barang. Deskripsi peristiwa yang terjadi – dapat berupa panggilan, sms, atau data
  4. bulan. Bulan penagihan yang dimiliki setiap entri – dalam bentuk 'YYYY-MM'
  5. jaringan. Jaringan seluler yang dihubungi/dikirim untuk setiap entri
  6. tipe jaringan. Apakah nomor yang dipanggil adalah nomor ponsel, internasional ('dunia'), pesan suara, telepon rumah, atau nomor lain ('khusus')

Nomor telepon telah dihapus untuk privasi. Kolom tanggal dapat diuraikan menggunakan library dateutil yang sangat praktis

import pandas as pd
import dateutil

# Load data from csv file
data = pd.DataFrame.from_csv('phone_data.csv')
# Convert date from string to date times
data['date'] = data['date'].apply(dateutil.parser.parse, dayfirst=True)

Meringkas DataFrame

Setelah data dimuat ke Python, Panda membuat perhitungan statistik yang berbeda menjadi sangat sederhana. Misalnya, rata-rata, maks, min, standar deviasi, dan lainnya untuk kolom mudah dihitung

# How many rows the dataset
data['item'].count()
Out[38]: 830

# What was the longest phone call / data entry?
data['duration'].max()
Out[39]: 10528.0

# How many seconds of phone calls are recorded in total?
data['duration'][data['item'] == 'call'].sum()
Out[40]: 92321.0

# How many entries are there for each month?
data['month'].value_counts()
Out[41]: 
2014-11    230
2015-01    205
2014-12    157
2015-02    137
2015-03    101
dtype: int64

# Number of non-null unique network entries
data['network'].nunique()
Out[42]: 9
_

Kebutuhan untuk fungsi kustom minimal kecuali Anda memiliki persyaratan yang sangat spesifik. Kisaran lengkap statistik dasar yang dapat dihitung dengan cepat dan dibangun ke dalam paket dasar Pandas adalah

FunctionDescriptioncountNumber of non-null observationssumSum of valuesmeanMean of valuesmadMean absolute deviationmedianArithmetic median of valuesminMinimummaxMaximummodeModeabsAbsolute ValueprodProduct of valuesstdUnbiased standard deviationvarUnbiased variancesemUnbiased standard error of the meanskewUnbiased skewness (3rd moment)kurtUnbiased kurtosis (4th moment)quantileSample quantile (value at %)cumsumCumulative sumcumprodCumulative productcummaxCumulative maximumcumminCumulative minimum

Itu. deskripsikan() adalah alat peringkasan yang berguna yang akan dengan cepat menampilkan statistik untuk variabel atau grup apa pun yang diterapkan. Output explain() bervariasi tergantung pada apakah Anda menerapkannya ke kolom numerik atau karakter

Meringkas Grup di DataFrame

Ada kekuatan lebih lanjut yang diberikan ke tangan Anda dengan menguasai fungsionalitas “groupby ()” Pandas. Groupby pada dasarnya membagi data menjadi grup yang berbeda tergantung pada variabel pilihan Anda. Misalnya, ekspresi data. groupby('month')  akan membagi DataFrame kami saat ini berdasarkan bulan

Fungsi groupby() mengembalikan objek GroupBy, tetapi pada dasarnya menjelaskan bagaimana baris kumpulan data asli telah dipisah. objek GroupBy. variabel grup adalah kamus yang kuncinya adalah grup unik yang dihitung dan nilai yang sesuai adalah label sumbu milik setiap grup. Misalnya

data.groupby(['month']).groups.keys()
Out[59]: ['2014-12', '2014-11', '2015-02', '2015-03', '2015-01']

len(data.groupby(['month']).groups['2014-11'])
Out[61]: 230

Fungsi seperti max(), min(), mean(), first(), last() dapat dengan cepat diterapkan ke objek GroupBy untuk mendapatkan ringkasan statistik untuk setiap grup – fungsi yang sangat berguna. Fungsionalitas ini mirip dengan perpustakaan dplyr dan plyr untuk R. Variabel yang berbeda dapat dikecualikan/dimasukkan dari setiap persyaratan ringkasan

# Get the first entry for each month
data.groupby('month').first()
Out[69]: 
                       date  duration  item   network network_type
month                                                             
2014-11 2014-10-15 06:58:00    34.429  data      data         data
2014-12 2014-11-13 06:58:00    34.429  data      data         data
2015-01 2014-12-13 06:58:00    34.429  data      data         data
2015-02 2015-01-13 06:58:00    34.429  data      data         data
2015-03 2015-02-12 20:15:00    69.000  call  landline     landline

# Get the sum of the durations per month
data.groupby('month')['duration'].sum()
Out[70]: 
month
2014-11    26639.441
2014-12    14641.870
2015-01    18223.299
2015-02    15522.299
2015-03    22750.441
Name: duration, dtype: float64

# Get the number of dates / entries in each month
data.groupby('month')['date'].count()
Out[74]: 
month
2014-11    230
2014-12    157
2015-01    205
2015-02    137
2015-03    101
Name: date, dtype: int64

# What is the sum of durations, for calls only, to each network
data[data['item'] == 'call'].groupby('network')['duration'].sum()
Out[78]: 
network
Meteor 7200
Tesco 13828
Three 36464
Vodafone 14621
landline 18433
voicemail 1775
Name: duration, dtype: float64

Anda juga dapat mengelompokkan lebih dari satu variabel, memungkinkan kueri yang lebih kompleks

# How many calls, sms, and data entries are in each month?
data.groupby(['month', 'item'])['date'].count()
Out[76]: 
month    item
2014-11  call    107
         data     29
         sms      94
2014-12  call     79
         data     30
         sms      48
2015-01  call     88
         data     31
         sms      86
2015-02  call     67
         data     31
         sms      39
2015-03  call     47
         data     29
         sms      25
Name: date, dtype: int64

# How many calls, texts, and data are sent per month, split by network_type?
data.groupby(['month', 'network_type'])['date'].count()
Out[82]: 
month network_type
2014-11 data 29
 landline 5
 mobile 189
 special 1
 voicemail 6
2014-12 data 30
 landline 7
 mobile 108
 voicemail 8
 world 4
2015-01 data 31
 landline 11
 mobile 160
....
_

Format output Groupby – Seri atau DataFrame?

Keluaran dari operasi grup dan agregasi bervariasi antara Pandas Series dan Pandas Dataframes, yang dapat membingungkan pengguna baru. Sebagai aturan umum, jika Anda menghitung lebih dari satu kolom hasil, hasil Anda akan menjadi Kerangka Data. Untuk satu kolom hasil, fungsi agg, secara default, akan menghasilkan Seri

Anda dapat mengubahnya dengan memilih kolom operasi secara berbeda

# produces Pandas Series
data.groupby('month')['duration'].sum() 
# Produces Pandas DataFrame
data.groupby('month')[['duration']].sum()

Keluaran berkelompok akan memiliki indeks atau multi-indeks pada baris yang sesuai dengan variabel pengelompokan yang Anda pilih. Untuk menghindari pengaturan indeks ini, teruskan “as_index=False” ke operasi groupby

data.groupby('month', as_index=False).agg({"duration": "sum"})
_

Apa pengelompokan data dalam python?
Menggunakan parameter as_index saat Pengelompokan data dalam panda mencegah pengaturan indeks baris pada hasil

Beberapa Statistik per Grup

Bagian terakhir dari sintaks yang akan kita periksa adalah fungsi "agg" untuk Panda. Fungsionalitas agregasi yang disediakan oleh fungsi agg() memungkinkan banyak statistik dihitung per grup dalam satu perhitungan.  

Menerapkan satu fungsi ke kolom dalam grup

Instruksi untuk agregasi disediakan dalam bentuk kamus atau daftar python. Kunci kamus digunakan untuk menentukan kolom tempat Anda ingin melakukan operasi, dan nilai kamus untuk menentukan fungsi yang akan dijalankan

Misalnya

# Group the data frame by month and item and extract a number of stats from each group
data.groupby(
   ['month', 'item']
).agg(
    {
         'duration':sum,    # Sum duration per group
         'network_type': "count",  # get the count of networks
         'date': 'first'  # get the first date per group
    }
)

Sintaks kamus agregasi fleksibel dan dapat ditentukan sebelum operasi. Anda juga dapat menentukan fungsi sebaris menggunakan fungsi "lambda" untuk mengekstrak statistik yang tidak disediakan oleh opsi bawaan

# Define the aggregation procedure outside of the groupby operation
aggregations = {
    'duration':'sum',
    'date': lambda x: max(x) - 1
}
data.groupby('month').agg(aggregations)
_

Menerapkan banyak fungsi ke kolom dalam grup

Untuk menerapkan beberapa fungsi ke satu kolom dalam data yang dikelompokkan, luaskan sintaks di atas untuk meneruskan daftar fungsi sebagai nilai dalam kerangka data agregasi Anda. Lihat di bawah

# Group the data frame by month and item and extract a number of stats from each group
data.groupby(
    ['month', 'item']
).agg(
    {
        # Find the min, max, and sum of the duration column
        'duration': [min, max, sum],
        # find the number of network type entries
        'network_type': "count",
        # minimum, first, and number of unique dates
        'date': [min, 'first', 'nunique']
    }
)
_

agg(. ) sintaksnya fleksibel dan mudah digunakan. Ingatlah bahwa Anda dapat meneruskan fungsi kustom dan lambda ke daftar penghitungan gabungan, dan masing-masing akan meneruskan nilai dari kolom dalam data yang dikelompokkan

Mengganti nama kolom agregasi yang dikelompokkan

Kami akan memeriksa dua metode untuk mengelompokkan Bingkai Data dan mengganti nama hasil kolom dalam pekerjaan Anda

Apa pengelompokan data dalam python?
Mengelompokkan, menghitung, dan mengganti nama hasil dapat dicapai dalam satu perintah menggunakan fungsionalitas "agg" di Python. Sebuah “pd. NamedAgg” digunakan untuk kejelasan, tetapi bentuk tupel normal (column_name, grouping_function) juga dapat digunakan

Direkomendasikan. Agregasi Bernama Tuple

Diperkenalkan di Panda 0. 25. 0, agregasi grup dengan pelabelan ulang didukung menggunakan "agregasi bernama" dengan tupel sederhana. Tupel Python digunakan untuk memberikan nama kolom yang akan dikerjakan, bersama dengan fungsi yang akan diterapkan.  

Misalnya

# How many rows the dataset
data['item'].count()
Out[38]: 830

# What was the longest phone call / data entry?
data['duration'].max()
Out[39]: 10528.0

# How many seconds of phone calls are recorded in total?
data['duration'][data['item'] == 'call'].sum()
Out[40]: 92321.0

# How many entries are there for each month?
data['month'].value_counts()
Out[41]: 
2014-11    230
2015-01    205
2014-12    157
2015-02    137
2015-03    101
dtype: int64

# Number of non-null unique network entries
data['network'].nunique()
Out[42]: 9
0
Apa pengelompokan data dalam python?
Pengelompokan dengan agregasi bernama menggunakan Pandas 0 baru. 25 sintaks. Tuple digunakan untuk menentukan kolom yang akan dikerjakan dan fungsi yang akan diterapkan ke setiap pengelompokan.

Untuk penamaan yang lebih jelas, Pandas juga menyediakan NamedAggregation named-tuple, yang dapat digunakan untuk mencapai hal yang sama seperti tuple normal

# How many rows the dataset
data['item'].count()
Out[38]: 830

# What was the longest phone call / data entry?
data['duration'].max()
Out[39]: 10528.0

# How many seconds of phone calls are recorded in total?
data['duration'][data['item'] == 'call'].sum()
Out[40]: 92321.0

# How many entries are there for each month?
data['month'].value_counts()
Out[41]: 
2014-11    230
2015-01    205
2014-12    157
2015-02    137
2015-03    101
dtype: int64

# Number of non-null unique network entries
data['network'].nunique()
Out[42]: 9
_1

Perhatikan bahwa dalam versi Pandas setelah rilis, menerapkan fungsi lambda hanya berfungsi untuk agregasi bernama ini ketika fungsi tersebut adalah satu-satunya fungsi yang diterapkan pada satu kolom, jika tidak menyebabkan KeyError

Mengganti nama indeks menggunakan droplevel dan ravel

Ketika banyak statistik dihitung pada kolom, kerangka data yang dihasilkan akan memiliki set multi-indeks pada sumbu kolom. Multi-indeks bisa jadi sulit untuk dikerjakan, dan saya biasanya harus mengganti nama kolom setelah operasi grup

Salah satu opsi adalah menjatuhkan level teratas (menggunakan. droplevel) dari multi-indeks yang baru dibuat pada kolom menggunakan

# How many rows the dataset
data['item'].count()
Out[38]: 830

# What was the longest phone call / data entry?
data['duration'].max()
Out[39]: 10528.0

# How many seconds of phone calls are recorded in total?
data['duration'][data['item'] == 'call'].sum()
Out[40]: 92321.0

# How many entries are there for each month?
data['month'].value_counts()
Out[41]: 
2014-11    230
2015-01    205
2014-12    157
2015-02    137
2015-03    101
dtype: int64

# Number of non-null unique network entries
data['network'].nunique()
Out[42]: 9
_2

Namun, pendekatan ini kehilangan nama kolom asli, hanya menyisakan nama fungsi sebagai tajuk kolom. A , seperti yang disarankan oleh pembaca kepada saya, menggunakan metode ravel() pada kolom yang dikelompokkan. Ravel() mengubah multi-indeks Pandas menjadi larik yang lebih sederhana, yang dapat kita gabungkan menjadi nama kolom yang masuk akal

# How many rows the dataset
data['item'].count()
Out[38]: 830

# What was the longest phone call / data entry?
data['duration'].max()
Out[39]: 10528.0

# How many seconds of phone calls are recorded in total?
data['duration'][data['item'] == 'call'].sum()
Out[40]: 92321.0

# How many entries are there for each month?
data['month'].value_counts()
Out[41]: 
2014-11    230
2015-01    205
2014-12    157
2015-02    137
2015-03    101
dtype: int64

# Number of non-null unique network entries
data['network'].nunique()
Out[42]: 9
_3

Apa pengelompokan data dalam python?
Penggantian nama cepat kolom yang dikelompokkan dari multi-indeks groupby() dapat dilakukan dengan menggunakan fungsi ravel()

Dictionary groupby format

Ada perubahan substansial pada fungsi agregasi Panda pada Mei 2017. Mengganti nama variabel menggunakan kamus dalam fungsi agg() seperti pada diagram di bawah ini tidak digunakan lagi/dihapus dari Panda – lihat catatan

Apa pengelompokan data dalam python?
Agregasi variabel dalam Pandas Dataframe menggunakan fungsi agg(). Perhatikan bahwa di Pandas versi 0. 20. 1 dan seterusnya, penggantian nama hasil perlu dilakukan secara terpisah

Dalam rilis Pandas yang lebih lama (< ), mengganti nama kolom yang baru dihitung dimungkinkan melalui kamus bersarang, atau dengan meneruskan daftar fungsi untuk kolom. Contoh terakhir kami menghitung beberapa nilai dari kolom durasi dan menamai hasilnya dengan tepat. Perhatikan bahwa hasilnya memiliki tajuk kolom multi-indeks

Perhatikan sintaks ini untuk instalasi baru Python Pandas.  

# How many rows the dataset
data['item'].count()
Out[38]: 830

# What was the longest phone call / data entry?
data['duration'].max()
Out[39]: 10528.0

# How many seconds of phone calls are recorded in total?
data['duration'][data['item'] == 'call'].sum()
Out[40]: 92321.0

# How many entries are there for each month?
data['month'].value_counts()
Out[41]: 
2014-11    230
2015-01    205
2014-12    157
2015-02    137
2015-03    101
dtype: int64

# Number of non-null unique network entries
data['network'].nunique()
Out[42]: 9
_4

Apa pengelompokan data dalam python?

Ringkasan Pengelompokan Python Panda

Fungsi pengelompokan di Panda didokumentasikan dengan baik dalam dokumen resmi dan bekerja dengan kecepatan setara (kecuali jika Anda memiliki data yang sangat besar dan pilih-pilih dengan milidetik Anda) dengan data R. pustaka tabel dan dplyr

Jika Anda tertarik dengan contoh lain untuk latihan, saya menggunakan teknik yang sama untuk menganalisis data cuaca untuk postingan ini, dan saya telah memasukkan petunjuk “cara” di sini

Ada banyak sumber online tentang fungsi ini, dan saya merekomendasikan untuk benar-benar menaklukkan sintaks ini jika Anda menggunakan Panda dengan sungguh-sungguh kapan saja.

Bagaimana cara Python menghitung data yang dikelompokkan?

Metode yang paling sederhana untuk pandas groupby count adalah dengan menggunakan metode panda bawaan bernama size() . Ini mengembalikan seri panda yang memiliki jumlah total jumlah baris untuk setiap grup. Cara kerja dasar metode size() sama dengan metode len() sehingga tidak terpengaruh oleh nilai NaN dalam dataset.

Apa yang dimaksud dengan Groupby dan untuk apa itu digunakan?

Groupby adalah salah satu fungsi Pandas yang paling sering digunakan dalam analisis data. Ini digunakan untuk mengelompokkan titik data (mis. e. baris) berdasarkan nilai yang berbeda dalam kolom atau kolom tertentu . Kami kemudian dapat menghitung nilai agregat untuk grup yang dihasilkan.

Bagaimana cara mengelompokkan data CSV dengan Python?

Menggunakan Python untuk mengelompokkan data csv .
Gunakan python untuk membaca csv dan buat daftar hanya nama sungai yang unik
Buat csv individu baru berdasarkan nama sungai yang unik e. g Peterson. csv, catnip. .
Gunakan python untuk membaca csv asli, dan bergantung pada nama sungai pada baris yang sedang dibaca, tulis baris tersebut ke baris yang sesuai

Bagaimana Anda mengelompokkan banyak nilai dengan Python?

Untuk prosedur ini, langkah-langkah yang diperlukan diberikan di bawah ini. .
Impor pustaka untuk data dan visualisasinya
Buat dan impor data dengan banyak kolom
Bentuk objek groupby dengan mengelompokkan beberapa nilai
Visualisasikan data yang dikelompokkan