Menganalisa dan mencari strategi pemasaran aplikasi di Google Play.
Analisis Data
Python
Author
Alif Dewantara
Published
February 6, 2023
Aplikasi-Aplikasi dalam Google Play Store dan Review-nya
Aplikasi mobile sekarang ada di mana-mana. Semua orang bisa membuatnya dengan mudah dan bahkan banyak yang mencari untung dengan membuat aplikasi. Dua faktor tersebut menyebabkan semakin banyak aplikasi yang dibuat dan dikembangkan. Pada kesempatan kali ini, kita akan membuat analisis komprehensif tentang pasar aplikasi Android dengan membandingkannya dengan sekitar sepuluh ribu aplikasi di Google Play dari bermacam-macam kategori. Kita akan melihat insight dari data yang telah kita punya untuk memberikan gambaran terkait strategi pengembangan.
Mari kita lihat dua data yang telah kita kumpulkan:
Apps.csv : berisi semua detail aplikasi di Google Play. Di dalamnya juga terdapat 13 fitur yang menjelaskan aplikasi tersebut.
user_reviews.csv : berisi 100 review dari tiap aplikasi. Teks dalam review tersebut telah diproses dan diatribusikan dengan tiga fitur baru: Sentimen (Positif, Negatif, atau Netral), Sentimen Polaritas, dan Sentimen Subjektivitas.
Lihat Kode
#Membaca datasetimport pandas as pdapps_with_duplicates = pd.read_csv('datasets/apps.csv')# Menghilangkan duplikasi dari apps_with_duplicatesapps = apps_with_duplicates.drop_duplicates(subset='App')# Print angka total aplikasiprint('Jumlah total aplikasi di dalam dataset = ', apps['App'].value_counts().sum())apps.head()
Jumlah total aplikasi di dalam dataset = 9659
Unnamed: 0
App
Category
Rating
Reviews
Size
Installs
Type
Price
Content Rating
Genres
Last Updated
Current Ver
Android Ver
0
0
Photo Editor & Candy Camera & Grid & ScrapBook
ART_AND_DESIGN
4.1
159
19.0
10,000+
Free
0
Everyone
Art & Design
January 7, 2018
1.0.0
4.0.3 and up
1
1
Coloring book moana
ART_AND_DESIGN
3.9
967
14.0
500,000+
Free
0
Everyone
Art & Design;Pretend Play
January 15, 2018
2.0.0
4.0.3 and up
2
2
U Launcher Lite – FREE Live Cool Themes, Hide ...
ART_AND_DESIGN
4.7
87510
8.7
5,000,000+
Free
0
Everyone
Art & Design
August 1, 2018
1.2.4
4.0.3 and up
3
3
Sketch - Draw & Paint
ART_AND_DESIGN
4.5
215644
25.0
50,000,000+
Free
0
Teen
Art & Design
June 8, 2018
Varies with device
4.2 and up
4
4
Pixel Draw - Number Art Coloring Book
ART_AND_DESIGN
4.3
967
2.8
100,000+
Free
0
Everyone
Art & Design;Creativity
June 20, 2018
1.1
4.4 and up
Pembersihan Data (Data Cleaning)
Pembersihan data merupakan salah satu hal penting yang harus dilakukan dalam proyek ilmu data. Walaupun proses ini terbilang membosankan, tapi tak bisa disepelekan.
Dengan melihat sampel acak dalam baris dataset di atas, kita mengetahui bahwa isi dalam beberapa kolom seperti Installs dan Price punya karakter unik (+, $) tergantung dengan jenis angka apa dalam kolom tersebut. Hal ini dimaksudkan agar mencegah kolom diinterpretasikan sebagai angka murni, yang akan membuat kita kesulitan untuk mengaplikasikan perhitungan matematis. Maka dari itu, kita ingin membuat kolom-kolom ini hanya berisikan angka digit [0-9].
Selanjutnya, kita sekarang akan melakukan pembersihan data, terutama menghilangkan karakter-karakter unik , dan + yang ada di kolom Installs dan $ yang ada di kolom Price.
Lihat Kode
# Daftar karakter yang ingin dihapuschars_to_remove = ['+', ',', '$']# Daftar kolom yang ingin dibersihkancols_to_clean = ['Installs', 'Price']# Membuat loop untuk tiap kolom dalam cols_to_cleanfor col in cols_to_clean:# Membuat loop untuk tiap karakter dalam chars_to_removefor char in chars_to_remove:# Mengganti karakter dengan string kosong apps[col] = apps[col].apply(lambda x: x.replace(char, ''))# Print info dataframe appsprint(apps.info())
Jika kita lihat dalam info di atas maka kita mengetahui bahwa kolom Installs dan Price dikategorikan sebagai tipe data object (bukan int atau float). Hal ini disebabkan karena sebelumnya kedua kolom memiliki input yang berbeda-beda: digit dan karakter unik.
Empat fitur yang akan sering kita gunakan adalah Installs, Size, Rating, dan Price. Ketika Size dan Rating keduanya adalah float (angka murni), kita masih harus mengubah Installs dan Price menjadi angka numerik.
Lihat Kode
import numpy as np# Mengonversi tipe data Installs menjadi floatapps['Installs'] = apps['Installs'].astype('float64')# Mengonversi tipe data Price menjadi floatapps['Price'] = apps['Price'].astype('float64')# Mengecek tipe data dari dataframe appsprint(apps.dtypes)
Unnamed: 0 int64
App object
Category object
Rating float64
Reviews int64
Size float64
Installs float64
Type object
Price float64
Content Rating object
Genres object
Last Updated object
Current Ver object
Android Ver object
dtype: object
Mengkategorisasikan Aplikasi
Dengan lebih dari 1 milyar pengguna aktif di 190 negara di dunia, Google Play tetap menjadi tempat utama distribusi aplikasi yang menjangkau global. Agar perusahaan/bisnis dapat menjangkau aplikasinya ke pengguna, penting untuk membuat aplikasi tersebut cepat dan mudah ditemukan di Google Play. Untuk mengembangkan pengalaman pencarian, Google telah memperkenalkan konsep mengelompokkan aplikasi berdasarkan kategori.
Hal ini akan membawa kita ke beberapa pertanyaan:
Kategori apa yang memiliki pengguna tertinggi di pasar?
Apakah ada kategori spesifik yang mendominasi pasar?
Kategori apa yang memiliki jumlah aplikasi paling sedikit?
Kita akan melihat bahwa terdapat 33 kategori aplikasi di dalam dataset. Aplikasi Family dan Game memiliki prevalensi pasar tertinggi. Menariknya, aplikasi Tools, Business, dan Medical juga berada di peringkat atas.
Lihat Kode
#Mengimpor plotlyimport plotlyplotly.offline.init_notebook_mode(connected=True)import plotly.graph_objs as go# Print jumlah total kategorinum_categories =len(apps['Category'].unique())print('Jumlah kategori = ', num_categories)# Menghitung angka aplikasi dalam setiap 'Category'num_apps_in_category = apps['Category'].value_counts()# Mengurutkan num_apps_in_category dalam urutan menurun (descending) berdasarkan jumlah aplikasi dalam tiap kategorisorted_num_apps_in_category = num_apps_in_category.sort_values(ascending=False)# Membuat plotdata = [go.Bar( x = num_apps_in_category.index, # index = category name y = num_apps_in_category.values, # value = count)]# Menampilkan dataplotly.offline.iplot(data)
Jumlah kategori = 33
Distribusi Rating Aplikasi
Setelah melihat market share dari tiap kategori aplikasi, mari kita meliha bagaimana aplikasi-aplikasi ini bekerja secara rata-rata. Penilaian (rating) aplikasi (dalam skala 1 sampai 5) mempengaruhi pencarian, pengubahan aplikasi, dan juga nama baik dari sebuah brand. Penilaian adalah indikator kunci performa suatu aplikasi.
Dari penelitian ini, kita menemukan bahwa rata-rata volume penilaian keseluruhan aplikasi adalah 4,17. Jika dibuatkan histogram, maka ia akan left skewed yang mengindikasikan bahwa sebagia besar aplikasi diberikan rating tinggi.
Lihat Kode
# Average rating of appsavg_app_rating = apps['Rating'].mean()print('Rata-rata rating aplikasi = ', avg_app_rating)
Rata-rata rating aplikasi = 4.173243045387994
Lihat Kode
# Distribution of apps according to their ratingsdata = [go.Histogram( x = apps['Rating'])]# Vertical dashed line to indicate the average app ratinglayout = {'shapes': [{'type' :'line','x0': avg_app_rating,'y0': 0,'x1': avg_app_rating,'y1': 1000,'line': { 'dash': 'dashdot'} }] }plotly.offline.iplot({'data': data, 'layout': layout})
Ukuran dan Harga suatu Aplikasi
Mari kita sekarang mencari tahu ukuran dan harga suatu aplikasi. Untuk ukuran, jika suatu aplikasi ponsel berukuran terlalu besar, maka pengguna akan kesulitan dan/atau merogoh kocek yang lkebih mahal untuk mengunduhnya. Waktu unduh yang panjang dapat membuat pengguna meninggalkan unduhannya sebelum mencoba aplikasi yang telah dibuat. Selain itu, setiap ponsel yang dimiliki pengguna punya penyimpanan yang terbatas. Untuk harga, beberapa pengguna memiliki ekspektasi bahwa aplikasi bersifat gratis atau dengan harga terjangkau. Masalah-masalah ini harus diperhatikan jika kita ingin menargetkan lebih banyak pengguna dari berbagai wilayah, yang tentunya memiliki kecepatan internet, mata uang dan nilai tukar yang berbeda.
Maka kita akan mengajukan beberapa pertanyaan terkait dengan ukuran dan harga suatu aplikasi.
Apakah ukuran aplikasi mempengaruhi ratingnya?
Apakah pengguna menoleransi ukuran aplikasi kompleks yang besar atau mereka lebih memilih aplikasi sederhana yang ringan saja?
Apakah harga aplikasi mempengaruhi rating?
Apakah pengguna selalu lebih memilih aplikasi gratis ketimbang aplikasi berbayar?
Nah, kami menemukan bahwa mayoritas aplikasi yang memiliki rating teratas di Google Play (rating di atas 4) memiliki ukuran antara 2MB hingga 20MB. Kami juga menemukan bahwa sebagian besar aplikasi memiliki harga kurang dari $10.
Lihat Kode
# Impor modulimport matplotlib.pyplot as pltimport seaborn as snssns.set_style("darkgrid")import warningswarnings.filterwarnings("ignore")# Memilih baris di mana 'Rating' dan 'Size' tidak kosong (null)apps_with_size_and_rating_present = apps[(~apps['Rating'].isnull()) & (~apps['Size'].isnull())]# Memfilter kategori yang setidaknya memiliki 250 aplikasilarge_categories = apps_with_size_and_rating_present.groupby('Category').filter(lambda x: len(x) >=250)# Membuat plot size vs. ratingplt1 = sns.jointplot(x = large_categories['Size'], y = large_categories['Rating'], kind ='hex')# Memperlihatkan plotplt.show()
Lihat Kode
# Memilih aplikasi yang 'Type'-nya 'Paid'paid_apps = apps_with_size_and_rating_present[apps_with_size_and_rating_present['Type'] =='Paid']# Membuat plot price vs. ratingplt2 = sns.jointplot(x = paid_apps['Price'], y = paid_apps['Rating'])# Memperlihatkan plotplt.show()
Hubungan antara Kategori dan Harga dalam Aplikasi
Nah, sekarang kita masuk ke bagian tersulit. Bagaimana cara perusahaan dan pengembang menentukan keputusan akhir? Strategi monetisasi apa yang dapat diterapkan perusahaan untuk memaksimalkan keuntungan mereka? Tarif dari sebuah aplikasi sangat berhubungan erat dengan fitur, kompleksitas, dan platform yang disediakan.
Ada banyak faktor yang harus disadari ketika menentukan strategi penetapan tarif bagi suatu aplikasi. Penting untuk kita mengetahui seberapa ingin para pengguna untuk merogoh kocek mereka untuk membayar aplikasi. Penerapan strategi harga yang salah dapat menyebabkan ketidakinginan pengguna memakai bahkan untuk mengunduh aplikasi., Pengguna yang potensial bisa saja mengurungkan niat mereka untuk memakai aplikasi ketika mereka melihat tarif yang terlalu tinggi, atau mereka juga bisa saja menghapus aplikasi yang telah mereka pakai ketika mengetahui ada terlalu banyak iklan.
Kategori yang berbeda tentunya harga yang berbeda pula. Beberapa aplikasi sederhana dan digunakan sehari-hari, seperti kalkulator, seharusnya dibiarkan gratis. Tetapi, akan lebih pantas untuk memberikan tarif kepada, misalnya, aplikasi kesehatan yang bisa mendiagnosa pasien diabetes. Penelitian di bawah ini memperlihatkan bahwa aplikasi Medic dan Family adalah yang termahal. Bahkan, beberapa aplikasi memiliki harga di atas $80. Semua aplikasi Game memiliki tarif di bawah $20.
Lihat Kode
fig, ax = plt.subplots()fig.set_size_inches(15, 8)# Memilih kategori aplikasi populerpopular_app_cats = apps[apps.Category.isin(['GAME', 'FAMILY', 'PHOTOGRAPHY','MEDICAL', 'TOOLS', 'FINANCE','LIFESTYLE','BUSINESS'])]# Mengetahui tren harga dengan membuat plot Price vs. Kategoriax = sns.stripplot(x = popular_app_cats['Price'], y = popular_app_cats['Category'], jitter=True, linewidth=1)ax.set_title('Tren penerapan harga aplikasi per kategori')# Memperlihatkan plotplt.show()
Lihat Kode
# Aplikasi yang memiliki tarif di atas 200apps_above_200 = apps[apps['Price'] >200]apps_above_200[['Category', 'App', 'Price']]
Category
App
Price
3327
FAMILY
most expensive app (H)
399.99
3465
LIFESTYLE
💎 I'm rich
399.99
3469
LIFESTYLE
I'm Rich - Trump Edition
400.00
4396
LIFESTYLE
I am rich
399.99
4398
FAMILY
I am Rich Plus
399.99
4399
LIFESTYLE
I am rich VIP
299.99
4400
FINANCE
I Am Rich Premium
399.99
4401
LIFESTYLE
I am extremely Rich
379.99
4402
FINANCE
I am Rich!
399.99
4403
FINANCE
I am rich(premium)
399.99
4406
FAMILY
I Am Rich Pro
399.99
4408
FINANCE
I am rich (Most expensive app)
399.99
4410
FAMILY
I Am Rich
389.99
4413
FINANCE
I am Rich
399.99
4417
FINANCE
I AM RICH PRO PLUS
399.99
8763
FINANCE
Eu Sou Rico
394.99
8780
LIFESTYLE
I'm Rich/Eu sou Rico/أنا غني/我很有錢
399.99
Memfilter Aplikasi Sampah
Jika kita melihat dari data di atas sebenarnya ada beberapa aplikasi yang terlampau mahal padahal sebenarnya hanya aplikasi ‘sampah’ (anjir): aplikasi yang sebenarnya tidak punya tujuan untuk apa aplikasi tersebut dibuat. Beberapa pengembang aplikasi membuat aplikasi sampah seperti I Am Rich Premium atau most expensive app (H) hanya untuk lelucon atau untuk menguji skill pengembangan aplikasi mereka.
Mari kita memfilter aplikasi-aplikasi sampah ini dan membuat kembali visualisasinya.
Lihat Kode
# Memilih aplikasi yang harganya di bawah 100apps_under_100 = popular_app_cats[popular_app_cats['Price'] <100]fig, ax = plt.subplots()fig.set_size_inches(15, 8)# Mencari tahu price vs. category dalam aplikasi otentikax = sns.stripplot(x ='Price', y ='Category', data = apps_under_100, jitter=True, linewidth=1)ax.set_title('Tren penerapan harga aplikasi setelah memfilter aplikasi sampah')# Memperlihatkan plotplt.show()
Popularitas Aplikasi Berbayar vs. Aplikasi Gratis
Terdapat 5 tipe strategi penetapan harga untuk aplikasi di Google Play Store saat ini: free, freemium, paid, paymium, dan subscription. Mari kita fokus pada aplikasi gratis dan berbayar. Karakteristik aplikasi gratis adalah:
Dapat diunduh secara gratis.
Pemasukan utama lebih sering berasal dari iklan.
Sebagian besar dibuat oleh perusahaan yang memiliki produk lain dan aplikasi tersebut adalah tambahan dari produk lain tersebut.
Dapat berperan sebagai cara untuk mengenali pengguna, berkomunikasi, atau aplikasi pelayanan pengguna.
Beberapa karakteristik aplikasi berbayar adalah:
Pengguna diharuskan untuk membayar sekali untuk mengunduh aplikasi tersebut dan menggunakannya.
Pengguna tak dapat merasakan pengalaman seutuhnya dari aplikasi tersebut sebelum membelinya.
Apakah aplikasi berbayar terpasang sama banyaknya seperti aplikasi gratis? Dalam penelitian di bawah ditemukan bahwa aplikasi berbayar memiliki jumlah pemasangan yang lebih rendah dibandingkan aplikasi gratis.
Lihat Kode
trace0 = go.Box(# Data for paid apps y = apps[apps['Type'] =='Paid']['Installs'], name ='Paid')trace1 = go.Box(# Data for free apps y = apps[apps['Type'] =='Free']['Installs'], name ='Free')layout = go.Layout( title ="Number of downloads of paid apps vs. free apps", yaxis =dict(title ="Log number of downloads",type='log', autorange =True))# Add trace0 and trace1 to a list for plottingdata = [trace0, trace1]plotly.offline.iplot({'data': data, 'layout': layout})
Analisis Sentimen dalam Review dari Pengguna
Menggali informasi tentang review pengguna untuk mengetahui bagaimana orang menilai sebuah produk, brand, atau jasa dapat dilakukan dengan menerapkan teknik bernama Analisis Sentimen (Sentiment Analysis). Review dari pengguna aplikasi dapat dianalisis untuk mengidentifikasi mood pengguna: positif, negatif, atau netral selama menggunakan aplikasi. Misalnya, kata-kata positif dalam sebuah review biasanya mengandung kata ‘amazing (menakjubkan)’, ‘friendly (ramah)’, ‘good (bagus)’, ‘great (mantap)’, dan love (cinta)‘. Kata-kata negatif biasanya mengandung kata seperti’malware (virus)‘,’hate (benci)‘,’problem (masalah), ‘refund (pengembalian dana)’, dan ’incompetent (tak berkompeten).
Dengan membuat plot skor polaritas sentimen dari review pengguna aplikasi berbayar dan gratis, kita menemukan bahwa aplikasi gratis menerima banyak komentar-komentar pedas, yang diindikasikan oleh sumbu-y yang memanjang ke angka negatif. Review untuk aplikasi berbayar tidak menerima pesan negatif sesering aplikasi berbayar. Hal ini mengindikasikan sesuatu terkait dengan kualitas aplikasi, yang artinya: aplikasi berbayar memiliki kualitas yang lebih baik dibandingkan aplikasi gratis. Skor polaritas median untuk aplikasi berbayar agak lebih tinggi dibandingkan aplikasi gratis.
Lihat Kode
# Memuat user_reviews.csvreviews_df = pd.read_csv('datasets/user_reviews.csv')# Menggabungkan kedua dataframemerged_df = apps.merge(reviews_df)# Menghilangkan datum null dari kolom Sentiment dan Reviewmerged_df = merged_df.dropna(subset = ['Sentiment', 'Review'])sns.set_style('ticks')fig, ax = plt.subplots()fig.set_size_inches(11, 8)# Polaritas sentimen review pengguna untuk aplikasi berbayar vs. aplikasi gratisax = sns.boxplot(x ='Type', y ='Sentiment_Polarity', data = merged_df)ax.set_title('Distribusi Polaritas Sentimen')# Menampilkan plotplt.show()
Dalam tulisan ini, kita telah menganalisa sekitar sepuluh ribu aplikasi dari Google Play Store. Kita dapat menggunakan penemuan ini untuk memberikan informasi terkait keputusan apakah kita perlu untuk membuat aplikasi kita sendiri.
Important
Tulisan ini adalah salah satu hasil kerja saya dalam career pathData Scientist with Python di Datacamp.
Salam Maria, penuh rahmat, Tuhan sertamu.
Source Code
---title: "Pangsa Pasar Aplikasi Android di Google Play"description: | Menganalisa dan mencari strategi pemasaran aplikasi di Google Play.author: "Alif Dewantara"title-block-banner: truedate: "2023-02-06"categories: - Analisis Data - Pythoncomments: utterances: repo: quarto-dev/quarto-web theme: github-light issue-term: titleimage: "Logo Google Play.png"---## Aplikasi-Aplikasi dalam Google Play Store dan Review-nyaAplikasi *mobile* sekarang ada di mana-mana. Semua orang bisa membuatnya dengan mudah dan bahkan banyak yang mencari untung dengan membuat aplikasi. Dua faktor tersebut menyebabkan semakin banyak aplikasi yang dibuat dan dikembangkan. Pada kesempatan kali ini, kita akan membuat analisis komprehensif tentang pasar aplikasi Android dengan membandingkannya dengan sekitar sepuluh ribu aplikasi di Google Play dari bermacam-macam kategori. Kita akan melihat *insight* dari data yang telah kita punya untuk memberikan gambaran terkait strategi pengembangan.![](img/Google_Play_Store_badge_EN.svg.webp)Mari kita lihat dua data yang telah kita kumpulkan:- `Apps.csv` : berisi semua detail aplikasi di Google Play. Di dalamnya juga terdapat 13 fitur yang menjelaskan aplikasi tersebut.- `user_reviews.csv` : berisi 100 review dari tiap aplikasi. Teks dalam review tersebut telah diproses dan diatribusikan dengan tiga fitur baru: Sentimen (Positif, Negatif, atau Netral), Sentimen Polaritas, dan Sentimen Subjektivitas.```{python}#Membaca datasetimport pandas as pdapps_with_duplicates = pd.read_csv('datasets/apps.csv')# Menghilangkan duplikasi dari apps_with_duplicatesapps = apps_with_duplicates.drop_duplicates(subset='App')# Print angka total aplikasiprint('Jumlah total aplikasi di dalam dataset = ', apps['App'].value_counts().sum())apps.head()```## Pembersihan Data (*Data Cleaning*)Pembersihan data merupakan salah satu hal penting yang harus dilakukan dalam proyek ilmu data. Walaupun proses ini terbilang membosankan, tapi tak bisa disepelekan.Dengan melihat sampel acak dalam baris dataset di atas, kita mengetahui bahwa isi dalam beberapa kolom seperti `Installs` dan `Price` punya karakter unik (`+`, `$`) tergantung dengan jenis angka apa dalam kolom tersebut. Hal ini dimaksudkan agar mencegah kolom diinterpretasikan sebagai angka murni, yang akan membuat kita kesulitan untuk mengaplikasikan perhitungan matematis. Maka dari itu, kita ingin membuat kolom-kolom ini hanya berisikan angka digit \[0-9\].Selanjutnya, kita sekarang akan melakukan pembersihan data, terutama menghilangkan karakter-karakter unik `,` dan `+` yang ada di kolom `Installs` dan `$` yang ada di kolom `Price`.```{python}# Daftar karakter yang ingin dihapuschars_to_remove = ['+', ',', '$']# Daftar kolom yang ingin dibersihkancols_to_clean = ['Installs', 'Price']# Membuat loop untuk tiap kolom dalam cols_to_cleanfor col in cols_to_clean:# Membuat loop untuk tiap karakter dalam chars_to_removefor char in chars_to_remove:# Mengganti karakter dengan string kosong apps[col] = apps[col].apply(lambda x: x.replace(char, ''))# Print info dataframe appsprint(apps.info())```## Membenarkan Tipe DataJika kita lihat dalam info di atas maka kita mengetahui bahwa kolom `Installs` dan `Price` dikategorikan sebagai tipe data `object` (bukan `int` atau `float`). Hal ini disebabkan karena sebelumnya kedua kolom memiliki input yang berbeda-beda: digit dan karakter unik.Empat fitur yang akan sering kita gunakan adalah `Installs`, `Size`, `Rating`, dan `Price`. Ketika `Size` dan `Rating` keduanya adalah `float` (angka murni), kita masih harus mengubah `Installs` dan `Price` menjadi angka numerik.```{python}import numpy as np# Mengonversi tipe data Installs menjadi floatapps['Installs'] = apps['Installs'].astype('float64')# Mengonversi tipe data Price menjadi floatapps['Price'] = apps['Price'].astype('float64')# Mengecek tipe data dari dataframe appsprint(apps.dtypes)```## Mengkategorisasikan AplikasiDengan lebih dari 1 milyar pengguna aktif di 190 negara di dunia, Google Play tetap menjadi tempat utama distribusi aplikasi yang menjangkau global. Agar perusahaan/bisnis dapat menjangkau aplikasinya ke pengguna, penting untuk membuat aplikasi tersebut cepat dan mudah ditemukan di Google Play. Untuk mengembangkan pengalaman pencarian, Google telah memperkenalkan konsep mengelompokkan aplikasi berdasarkan kategori.Hal ini akan membawa kita ke beberapa pertanyaan:- Kategori apa yang memiliki pengguna tertinggi di pasar?- Apakah ada kategori spesifik yang mendominasi pasar?- Kategori apa yang memiliki jumlah aplikasi paling sedikit?Kita akan melihat bahwa terdapat 33 kategori aplikasi di dalam dataset. Aplikasi *Family* dan *Game* memiliki prevalensi pasar tertinggi. Menariknya, aplikasi *Tools*, *Business*, dan *Medical* juga berada di peringkat atas.```{python}#Mengimpor plotlyimport plotlyplotly.offline.init_notebook_mode(connected=True)import plotly.graph_objs as go# Print jumlah total kategorinum_categories =len(apps['Category'].unique())print('Jumlah kategori = ', num_categories)# Menghitung angka aplikasi dalam setiap 'Category'num_apps_in_category = apps['Category'].value_counts()# Mengurutkan num_apps_in_category dalam urutan menurun (descending) berdasarkan jumlah aplikasi dalam tiap kategorisorted_num_apps_in_category = num_apps_in_category.sort_values(ascending=False)# Membuat plotdata = [go.Bar( x = num_apps_in_category.index, # index = category name y = num_apps_in_category.values, # value = count)]# Menampilkan dataplotly.offline.iplot(data)```## Distribusi Rating AplikasiSetelah melihat *market share* dari tiap kategori aplikasi, mari kita meliha bagaimana aplikasi-aplikasi ini bekerja secara rata-rata. Penilaian (*rating*) aplikasi (dalam skala 1 sampai 5) mempengaruhi pencarian, pengubahan aplikasi, dan juga nama baik dari sebuah *brand*. Penilaian adalah indikator kunci performa suatu aplikasi.Dari penelitian ini, kita menemukan bahwa rata-rata volume penilaian keseluruhan aplikasi adalah 4,17. Jika dibuatkan histogram, maka ia akan *left skewed* yang mengindikasikan bahwa sebagia besar aplikasi diberikan *rating* tinggi.```{python}# Average rating of appsavg_app_rating = apps['Rating'].mean()print('Rata-rata rating aplikasi = ', avg_app_rating)``````{python}# Distribution of apps according to their ratingsdata = [go.Histogram( x = apps['Rating'])]# Vertical dashed line to indicate the average app ratinglayout = {'shapes': [{'type' :'line','x0': avg_app_rating,'y0': 0,'x1': avg_app_rating,'y1': 1000,'line': { 'dash': 'dashdot'} }] }plotly.offline.iplot({'data': data, 'layout': layout})```## Ukuran dan Harga suatu AplikasiMari kita sekarang mencari tahu ukuran dan harga suatu aplikasi. Untuk ukuran, jika suatu aplikasi ponsel berukuran terlalu besar, maka pengguna akan kesulitan dan/atau merogoh kocek yang lkebih mahal untuk mengunduhnya. Waktu unduh yang panjang dapat membuat pengguna meninggalkan unduhannya sebelum mencoba aplikasi yang telah dibuat. Selain itu, setiap ponsel yang dimiliki pengguna punya penyimpanan yang terbatas. Untuk harga, beberapa pengguna memiliki ekspektasi bahwa aplikasi bersifat gratis atau dengan harga terjangkau. Masalah-masalah ini harus diperhatikan jika kita ingin menargetkan lebih banyak pengguna dari berbagai wilayah, yang tentunya memiliki kecepatan internet, mata uang dan nilai tukar yang berbeda.Maka kita akan mengajukan beberapa pertanyaan terkait dengan ukuran dan harga suatu aplikasi.- Apakah ukuran aplikasi mempengaruhi *ratingnya*?- Apakah pengguna menoleransi ukuran aplikasi kompleks yang besar atau mereka lebih memilih aplikasi sederhana yang ringan saja?- Apakah harga aplikasi mempengaruhi *rating*?- Apakah pengguna selalu lebih memilih aplikasi gratis ketimbang aplikasi berbayar?Nah, kami menemukan bahwa mayoritas aplikasi yang memiliki *rating* teratas di Google Play (*rating* di atas 4) memiliki ukuran antara 2MB hingga 20MB. Kami juga menemukan bahwa sebagian besar aplikasi memiliki harga kurang dari \$10.```{python}# Impor modulimport matplotlib.pyplot as pltimport seaborn as snssns.set_style("darkgrid")import warningswarnings.filterwarnings("ignore")# Memilih baris di mana 'Rating' dan 'Size' tidak kosong (null)apps_with_size_and_rating_present = apps[(~apps['Rating'].isnull()) & (~apps['Size'].isnull())]# Memfilter kategori yang setidaknya memiliki 250 aplikasilarge_categories = apps_with_size_and_rating_present.groupby('Category').filter(lambda x: len(x) >=250)# Membuat plot size vs. ratingplt1 = sns.jointplot(x = large_categories['Size'], y = large_categories['Rating'], kind ='hex')# Memperlihatkan plotplt.show()``````{python}# Memilih aplikasi yang 'Type'-nya 'Paid'paid_apps = apps_with_size_and_rating_present[apps_with_size_and_rating_present['Type'] =='Paid']# Membuat plot price vs. ratingplt2 = sns.jointplot(x = paid_apps['Price'], y = paid_apps['Rating'])# Memperlihatkan plotplt.show()```## Hubungan antara Kategori dan Harga dalam AplikasiNah, sekarang kita masuk ke bagian tersulit. Bagaimana cara perusahaan dan pengembang menentukan keputusan akhir? Strategi monetisasi apa yang dapat diterapkan perusahaan untuk memaksimalkan keuntungan mereka? Tarif dari sebuah aplikasi sangat berhubungan erat dengan fitur, kompleksitas, dan platform yang disediakan.Ada banyak faktor yang harus disadari ketika menentukan strategi penetapan tarif bagi suatu aplikasi. Penting untuk kita mengetahui seberapa ingin para pengguna untuk merogoh kocek mereka untuk membayar aplikasi. Penerapan strategi harga yang salah dapat menyebabkan ketidakinginan pengguna memakai bahkan untuk mengunduh aplikasi., Pengguna yang potensial bisa saja mengurungkan niat mereka untuk memakai aplikasi ketika mereka melihat tarif yang terlalu tinggi, atau mereka juga bisa saja menghapus aplikasi yang telah mereka pakai ketika mengetahui ada terlalu banyak iklan.Kategori yang berbeda tentunya harga yang berbeda pula. Beberapa aplikasi sederhana dan digunakan sehari-hari, seperti kalkulator, seharusnya dibiarkan gratis. Tetapi, akan lebih pantas untuk memberikan tarif kepada, misalnya, aplikasi kesehatan yang bisa mendiagnosa pasien diabetes. Penelitian di bawah ini memperlihatkan bahwa aplikasi *Medic* dan *Family* adalah yang termahal. Bahkan, beberapa aplikasi memiliki harga di atas \$80. Semua aplikasi Game memiliki tarif di bawah \$20.```{python}fig, ax = plt.subplots()fig.set_size_inches(15, 8)# Memilih kategori aplikasi populerpopular_app_cats = apps[apps.Category.isin(['GAME', 'FAMILY', 'PHOTOGRAPHY','MEDICAL', 'TOOLS', 'FINANCE','LIFESTYLE','BUSINESS'])]# Mengetahui tren harga dengan membuat plot Price vs. Kategoriax = sns.stripplot(x = popular_app_cats['Price'], y = popular_app_cats['Category'], jitter=True, linewidth=1)ax.set_title('Tren penerapan harga aplikasi per kategori')# Memperlihatkan plotplt.show()``````{python}# Aplikasi yang memiliki tarif di atas 200apps_above_200 = apps[apps['Price'] >200]apps_above_200[['Category', 'App', 'Price']]```## Memfilter Aplikasi SampahJika kita melihat dari data di atas sebenarnya ada beberapa aplikasi yang terlampau mahal padahal sebenarnya hanya aplikasi 'sampah' (anjir): aplikasi yang sebenarnya tidak punya tujuan untuk apa aplikasi tersebut dibuat. Beberapa pengembang aplikasi membuat aplikasi sampah seperti *I Am Rich Premium* atau *most expensive app (H)* hanya untuk lelucon atau untuk menguji *skill* pengembangan aplikasi mereka.Mari kita memfilter aplikasi-aplikasi sampah ini dan membuat kembali visualisasinya.```{python}# Memilih aplikasi yang harganya di bawah 100apps_under_100 = popular_app_cats[popular_app_cats['Price'] <100]fig, ax = plt.subplots()fig.set_size_inches(15, 8)# Mencari tahu price vs. category dalam aplikasi otentikax = sns.stripplot(x ='Price', y ='Category', data = apps_under_100, jitter=True, linewidth=1)ax.set_title('Tren penerapan harga aplikasi setelah memfilter aplikasi sampah')# Memperlihatkan plotplt.show()```## Popularitas Aplikasi Berbayar vs. Aplikasi GratisTerdapat 5 tipe strategi penetapan harga untuk aplikasi di Google Play Store saat ini: *free, freemium, paid, paymium,* dan *subscription*. Mari kita fokus pada aplikasi gratis dan berbayar. Karakteristik aplikasi gratis adalah:- Dapat diunduh secara gratis.- Pemasukan utama lebih sering berasal dari iklan.- Sebagian besar dibuat oleh perusahaan yang memiliki produk lain dan aplikasi tersebut adalah tambahan dari produk lain tersebut.- Dapat berperan sebagai cara untuk mengenali pengguna, berkomunikasi, atau aplikasi pelayanan pengguna.Beberapa karakteristik aplikasi berbayar adalah:- Pengguna diharuskan untuk membayar sekali untuk mengunduh aplikasi tersebut dan menggunakannya.- Pengguna tak dapat merasakan pengalaman seutuhnya dari aplikasi tersebut sebelum membelinya.Apakah aplikasi berbayar terpasang sama banyaknya seperti aplikasi gratis? Dalam penelitian di bawah ditemukan bahwa aplikasi berbayar memiliki jumlah pemasangan yang lebih rendah dibandingkan aplikasi gratis.```{python}trace0 = go.Box(# Data for paid apps y = apps[apps['Type'] =='Paid']['Installs'], name ='Paid')trace1 = go.Box(# Data for free apps y = apps[apps['Type'] =='Free']['Installs'], name ='Free')layout = go.Layout( title ="Number of downloads of paid apps vs. free apps", yaxis =dict(title ="Log number of downloads",type='log', autorange =True))# Add trace0 and trace1 to a list for plottingdata = [trace0, trace1]plotly.offline.iplot({'data': data, 'layout': layout})```## Analisis Sentimen dalam Review dari PenggunaMenggali informasi tentang *review* pengguna untuk mengetahui bagaimana orang menilai sebuah produk, *brand*, atau jasa dapat dilakukan dengan menerapkan teknik bernama Analisis Sentimen (*Sentiment Analysis*). *Review* dari pengguna aplikasi dapat dianalisis untuk mengidentifikasi *mood* pengguna: positif, negatif, atau netral selama menggunakan aplikasi. Misalnya, kata-kata positif dalam sebuah *review* biasanya mengandung kata '*amazing* (menakjubkan)', '*friendly* (ramah)', '*good* (bagus)', '*great* (mantap)', dan *love* (cinta)'. Kata-kata negatif biasanya mengandung kata seperti'*malware* (virus)','*hate* (benci)','*problem* (masalah), '*refund* (pengembalian dana)', dan '*incompetent* (tak berkompeten).Dengan membuat plot skor polaritas sentimen dari *review* pengguna aplikasi berbayar dan gratis, kita menemukan bahwa aplikasi gratis menerima banyak komentar-komentar pedas, yang diindikasikan oleh sumbu-y yang memanjang ke angka negatif. *Review* untuk aplikasi berbayar tidak menerima pesan negatif sesering aplikasi berbayar. Hal ini mengindikasikan sesuatu terkait dengan kualitas aplikasi, yang artinya: **aplikasi berbayar memiliki kualitas yang lebih baik dibandingkan aplikasi gratis**. Skor polaritas median untuk aplikasi berbayar agak lebih tinggi dibandingkan aplikasi gratis.```{python}# Memuat user_reviews.csvreviews_df = pd.read_csv('datasets/user_reviews.csv')# Menggabungkan kedua dataframemerged_df = apps.merge(reviews_df)# Menghilangkan datum null dari kolom Sentiment dan Reviewmerged_df = merged_df.dropna(subset = ['Sentiment', 'Review'])sns.set_style('ticks')fig, ax = plt.subplots()fig.set_size_inches(11, 8)# Polaritas sentimen review pengguna untuk aplikasi berbayar vs. aplikasi gratisax = sns.boxplot(x ='Type', y ='Sentiment_Polarity', data = merged_df)ax.set_title('Distribusi Polaritas Sentimen')# Menampilkan plotplt.show()```Dalam tulisan ini, kita telah menganalisa sekitar sepuluh ribu aplikasi dari Google Play Store. Kita dapat menggunakan penemuan ini untuk memberikan informasi terkait keputusan apakah kita perlu untuk membuat aplikasi kita sendiri.::: callout-importantTulisan ini adalah salah satu hasil kerja saya dalam *career path* *Data Scientist with Python* di Datacamp.:::***Salam Maria, penuh rahmat, Tuhan sertamu*****.**