The project is about an analysis of the apps on the App Store and Google Play.
Why do that ? The goal of this project is to analyse data to help the developers understand what type of apps are likely to attract more users. we'll be more focus on the free apps,this means that the revenue for any given app is mostly influenced by the number of users that use our app.
COLUNM | DESCRIPTION |
---|---|
"id" | App ID |
"track_name" | App Name |
"size_bytes" | Size (in Bytes) |
"currency" | Currency Type |
"price" | Price amount |
"ratingcounttot" | User Rating counts (for all version) |
"ratingcountver" | User Rating counts (for current version) |
"user_rating" | Average User Rating value (for all version) |
"userratingver" | Average User Rating value (for current version) |
"ver" | Latest version code |
"cont_rating" | Content Rating |
"prime_genre" | Primary Genre |
"sup_devices.num" | Number of supporting devices |
"ipadSc_urls.num" | Number of screenshots showed for display |
"lang.num" | Number of supported languages |
"vpp_lic" | Vpp Device Based Licensing Enabled |
To have more information clic here
COLUNM | DESCRIPTION |
---|---|
'App' | Name's App |
'Category' | Category |
'Rating' | Rating (for current version) |
'Reviews' | number of Reviews |
'Size' | Size (in Bytes) |
'Installs' | Installation times |
'Type' | Type |
'Price' | Price amount |
'Content Rating' | Content Rating |
'Genres' | Genre |
'Last Updated' | Last Updated |
'Current Ver' | Current Version |
'Android Ver' | Android Version |
To have more information clic here
First we'll create a function to explore our data set (function explore())
def explore(dataset, start, end, rows_and_columns=False):
dataset_slide = dataset[start:end]
for row in dataset_slide:
print(row)
print('\n') # adds a empty line after each row
if rows_and_columns:
print('Number of rows:', len(dataset))
print('Number of columns:', len(dataset[0]))
from csv import reader
open_file_apple = open("AppleStore.csv")
open_file_android = open("googleplaystore.csv")
read_file_apple = reader(open_file_apple)
read_file_android = reader(open_file_android)
ios_apps = list(read_file_apple)
android_apps = list(read_file_android)
print(ios_apps[0])
explore(ios_apps[1:],0,1,True)
print(android_apps[0])
explore(android_apps[1:],0,1,True)
['id', 'track_name', 'size_bytes', 'currency', 'price', 'rating_count_tot', 'rating_count_ver', 'user_rating', 'user_rating_ver', 'ver', 'cont_rating', 'prime_genre', 'sup_devices.num', 'ipadSc_urls.num', 'lang.num', 'vpp_lic'] ['284882215', 'Facebook', '389879808', 'USD', '0.0', '2974676', '212', '3.5', '3.5', '95.0', '4+', 'Social Networking', '37', '1', '29', '1'] Number of rows: 7197 Number of columns: 16 ['App', 'Category', 'Rating', 'Reviews', 'Size', 'Installs', 'Type', 'Price', 'Content Rating', 'Genres', 'Last Updated', 'Current Ver', 'Android Ver'] ['Photo Editor & Candy Camera & Grid & ScrapBook', 'ART_AND_DESIGN', '4.1', '159', '19M', '10,000+', 'Free', '0', 'Everyone', 'Art & Design', 'January 7, 2018', '1.0.0', '4.0.3 and up'] Number of rows: 10841 Number of columns: 13
After read the discussions on the data sets (discussion section : here and here ), we find out errors for a certain rows. For instance, in Google Play data set there's an error on the index 10473 and Apple store it's data duplication . Let's remove the wrong data in our data.
print(len(android_apps[1:]))
print(android_apps[10473]) # error on the rating (index 3)
del (android_apps[10473]) # deleting of the data
print(len(android_apps[1:]))
10841 ['Life Made WI-Fi Touchscreen Photo Frame', '1.9', '19', '3.0M', '1,000+', 'Free', '0', 'Everyone', '', 'February 11, 2018', '1.0.19', '4.0 and up'] 10840
We have some duplicate data in our data, for example :
for app in android_apps[1:] :
if app[0] == 'Instagram':
print(app)
['Instagram', 'SOCIAL', '4.5', '66577313', 'Varies with device', '1,000,000,000+', 'Free', '0', 'Teen', 'Social', 'July 31, 2018', 'Varies with device', 'Varies with device'] ['Instagram', 'SOCIAL', '4.5', '66577446', 'Varies with device', '1,000,000,000+', 'Free', '0', 'Teen', 'Social', 'July 31, 2018', 'Varies with device', 'Varies with device'] ['Instagram', 'SOCIAL', '4.5', '66577313', 'Varies with device', '1,000,000,000+', 'Free', '0', 'Teen', 'Social', 'July 31, 2018', 'Varies with device', 'Varies with device'] ['Instagram', 'SOCIAL', '4.5', '66509917', 'Varies with device', '1,000,000,000+', 'Free', '0', 'Teen', 'Social', 'July 31, 2018', 'Varies with device', 'Varies with device']
We don't want to count certain apps more than once but only check app's name that's not enough to get the good informations. To have a good information we'll add one more criterion. the fourth position of each row corresponds to the numbers of reviews, we can use this information for our new criterion for removing the duplicates. we'll take the highest number of reviews because it's the more recent data .
duplicate_app = []
unique_app = []
for app in android_apps[1:] :
name = app[0]
if name in unique_app :
duplicate_app.append(app[0])
else:
unique_app.append(app[0])
#print(duplicate_app)
print(len(duplicate_app))
print(duplicate_app[0:3])
print('\n')
print(unique_app[0:3])
print(len(unique_app))
1181 ['Quick PDF Scanner + OCR FREE', 'Box', 'Google My Business'] ['Photo Editor & Candy Camera & Grid & ScrapBook', 'Coloring book moana', 'U Launcher Lite – FREE Live Cool Themes, Hide Apps'] 9659
reviews_max = {}
index = 1
for app in android_apps[1:] :
name = app[0]
n_reviews = float(app[3])
if (name in reviews_max) and (reviews_max[name] < n_reviews) :
reviews_max[name] = n_reviews
elif name not in reviews_max :
reviews_max[name]= n_reviews
index += 1
print(len(reviews_max))
9659
In a previous code cell, we found that there are 1,181 cases where an app occurs more than once, so the length of our dictionary (of unique apps) should be equal to the difference between the length of our data set and 1,181.
print('Expected length:', len(android_apps[1:]) - 1181)
print('Actual length:', len(reviews_max))
Expected length: 9659 Actual length: 9659
Now, let's use the reviews_max dictionary to remove the duplicates. For the duplicate cases, we'll only keep the entries with the highest number of reviews. In the code cell below:
android_clean = [] #
already_added = []
for app in android_apps[1:] :
name = app[0]
n_reviews = float(app[3])
if (n_reviews == reviews_max[name]) and (name not in already_added) :
android_clean.append(app)
already_added.append(name)
explore(android_clean,0,2,True)
['Photo Editor & Candy Camera & Grid & ScrapBook', 'ART_AND_DESIGN', '4.1', '159', '19M', '10,000+', 'Free', '0', 'Everyone', 'Art & Design', 'January 7, 2018', '1.0.0', '4.0.3 and up'] ['U Launcher Lite – FREE Live Cool Themes, Hide Apps', 'ART_AND_DESIGN', '4.7', '87510', '8.7M', '5,000,000+', 'Free', '0', 'Everyone', 'Art & Design', 'August 1, 2018', '1.2.4', '4.0.3 and up'] Number of rows: 9659 Number of columns: 13
If we explore the data sets enough, we probably found the names of some of the apps suggest they are not directed toward an English-speaking audience. So we must treat this kind of data. So we'll create a function that takes in a string an returns :
print(ios_apps[814][1])
print(ios_apps[6732][1])
print(android_clean[4412][0])
print(android_clean[7940][0])
def check_english(word) :
count = 0
for character in word :
if ord(character) > 127 :
count += 1
if count > 3:
return False
return True
print(check_english('Instagram'))
print(check_english('爱奇艺PPS -《欢乐颂2》电视剧热播'))
print(check_english('Docs To Go™ Free Office Suite'))
print(check_english('Instachat 😜'))
爱奇艺PPS -《欢乐颂2》电视剧热播 【脱出ゲーム】絶対に最後までプレイしないで 〜謎解き&ブロックパズル〜 中国語 AQリスニング لعبة تقدر تربح DZ True False True True
Let's filter out non-English apps from our both data sets and put these apps in news list
english_ios_apps = []
english_android_apps = []
for row in ios_apps[1:] :
name = row[1]
if check_english(name) :
english_ios_apps.append(row)
for row in android_clean :
name = row[0]
if check_english(name):
english_android_apps.append(row)
explore( english_android_apps, 0, 1, True)
print('\n')
explore(english_ios_apps, 0, 1, True)
['Photo Editor & Candy Camera & Grid & ScrapBook', 'ART_AND_DESIGN', '4.1', '159', '19M', '10,000+', 'Free', '0', 'Everyone', 'Art & Design', 'January 7, 2018', '1.0.0', '4.0.3 and up'] Number of rows: 9614 Number of columns: 13 ['284882215', 'Facebook', '389879808', 'USD', '0.0', '2974676', '212', '3.5', '3.5', '95.0', '4+', 'Social Networking', '37', '1', '29', '1'] Number of rows: 6183 Number of columns: 16
We can see that we're left with 9614 Android apps and 6183 iOS apps.
As we mentioned in the introduction, we'll be focus on the free apps. Lets's isolate the free apps for both our data sets.
free_ios_apps = []
free_android_apps = []
for row in english_ios_apps :
price = float(row[4])
if price == 0:
free_ios_apps.append(row)
for row in english_android_apps :
price = row[7]
if price == '0' :
free_android_apps.append(row)
print( len(free_android_apps))
print('\n')
print(len(free_ios_apps))
8864 3222
We're left with 8864 Android apps and 3222 iOS apps, which should be enough for our analysis.
As we mentioned in the introduction, our aim is to determine the kinds of apps that are likely to attract more users because our revenue is highly influenced by the number of people using our apps. To minimize risks and overhead, our validation strategy for an app idea is comprised of three steps:
Because our end goal is to add the app on both Google Play and the App Store, we need to find app profiles that are successful on both markets. For instance, a profile that works well for both markets might be a productivity app that makes use of gamification.
Let's begin the analysis by getting a sense of what are the most common genres for each market. For this, we'll need to build frequency tables for a few columns in our data sets.
def freq_table(dataset, index) :
frequencies = {}
percent = 100 / len(dataset)
for data in dataset:
if data[index] in frequencies :
frequencies[data[index]] += percent
else:
frequencies[data[index]] = percent
return frequencies
def display_table(dataset, index):
table = freq_table(dataset, index)
table_display = []
for key in table:
key_val_as_tuple = (table[key], key)
table_display.append(key_val_as_tuple)
table_sorted = sorted(table_display, reverse = True)
for entry in table_sorted:
print(entry[1], ':', entry[0])
Games : 58.1626319056464 Entertainment : 7.883302296710134 Photo & Video : 4.965859714463075 Education : 3.6623215394165176 Social Networking : 3.2898820608317867 Shopping : 2.6070763500931133 Utilities : 2.5139664804469306 Sports : 2.1415270018621997 Music : 2.048417132216017 Health & Fitness : 2.0173805090006227 Productivity : 1.7380509000620747 Lifestyle : 1.5828677839851035 News : 1.3345747982619496 Travel : 1.2414649286157668 Finance : 1.1173184357541899 Weather : 0.8690254500310364 Food & Drink : 0.8069522036002481 Reference : 0.558659217877095 Business : 0.5276225946617009 Book : 0.4345127250155184 Navigation : 0.186219739292365 Medical : 0.186219739292365 Catalogs : 0.12414649286157665
Let's analyse the frequency table we generated for the prime_genre
display_table(free_ios_apps, 11 ) ## for prime_genre
Games : 58.1626319056464 Entertainment : 7.883302296710134 Photo & Video : 4.965859714463075 Education : 3.6623215394165176 Social Networking : 3.2898820608317867 Shopping : 2.6070763500931133 Utilities : 2.5139664804469306 Sports : 2.1415270018621997 Music : 2.048417132216017 Health & Fitness : 2.0173805090006227 Productivity : 1.7380509000620747 Lifestyle : 1.5828677839851035 News : 1.3345747982619496 Travel : 1.2414649286157668 Finance : 1.1173184357541899 Weather : 0.8690254500310364 Food & Drink : 0.8069522036002481 Reference : 0.558659217877095 Business : 0.5276225946617009 Book : 0.4345127250155184 Navigation : 0.186219739292365 Medical : 0.186219739292365 Catalogs : 0.12414649286157665
We can see that among the free English apps, more than a half (58.16%) are games. Entertainment apps are close to 8%, followed by photo and video apps, which are close to 5%. Only 3.66% of the apps are designed for education, followed by social networking apps which amount for 3.29% of the apps in our data set.
The general impression is that App Store (at least the part containing free English apps) is dominated by apps that are designed for fun (games, entertainment, photo and video, social networking, sports, music, etc.), while apps with practical purposes (education, shopping, utilities, productivity, lifestyle, etc.) are more rare. However, the fact that fun apps are the most numerous doesn't also imply that they also have the greatest number of users — the demand might not be the same as the offer.
Let's continue Genres and Category columns of the Google Play data set (two columns which seem to be related).
display_table(free_android_apps, 1 ) ## for Category
FAMILY : 18.907942238266926 GAME : 9.724729241877363 TOOLS : 8.46119133574016 BUSINESS : 4.591606498194979 LIFESTYLE : 3.90342960288811 PRODUCTIVITY : 3.8921480144404565 FINANCE : 3.7003610108303455 MEDICAL : 3.5311371841155417 SPORTS : 3.3957581227436986 PERSONALIZATION : 3.3167870036101235 COMMUNICATION : 3.2378158844765483 HEALTH_AND_FITNESS : 3.079873646209398 PHOTOGRAPHY : 2.944494584837555 NEWS_AND_MAGAZINES : 2.7978339350180583 SOCIAL : 2.6624548736462152 TRAVEL_AND_LOCAL : 2.335288808664261 SHOPPING : 2.2450361010830324 BOOKS_AND_REFERENCE : 2.14350180505415 DATING : 1.861462093862813 VIDEO_PLAYERS : 1.7937725631768928 MAPS_AND_NAVIGATION : 1.398916967509025 FOOD_AND_DRINK : 1.2409747292418778 EDUCATION : 1.1620036101083042 ENTERTAINMENT : 0.9589350180505433 LIBRARIES_AND_DEMO : 0.9363718411552363 AUTO_AND_VEHICLES : 0.9250902527075828 HOUSE_AND_HOME : 0.8235559566787015 WEATHER : 0.8009927797833946 EVENTS : 0.7107400722021667 PARENTING : 0.6543321299638993 ART_AND_DESIGN : 0.6430505415162459 COMICS : 0.6204873646209389 BEAUTY : 0.5979241877256319
The landscape seems significantly different on Google Play: there are not that many apps designed for fun, and it seems that a good number of apps are designed for practical purposes (family, tools, business, lifestyle, productivity, etc.). However, if we investigate this further, we can see that the family category (which accounts for almost 19% of the apps) means mostly games for kids.
Even so, practical apps seem to have a better representation on Google Play compared to App Store
display_table(free_android_apps, 9 ) ## for Genres
Tools : 8.449909747292507 Entertainment : 6.069494584837599 Education : 5.34747292418777 Business : 4.591606498194979 Productivity : 3.8921480144404565 Lifestyle : 3.8921480144404565 Finance : 3.7003610108303455 Medical : 3.5311371841155417 Sports : 3.46344765342962 Personalization : 3.3167870036101235 Communication : 3.2378158844765483 Action : 3.1024368231047053 Health & Fitness : 3.079873646209398 Photography : 2.944494584837555 News & Magazines : 2.7978339350180583 Social : 2.6624548736462152 Travel & Local : 2.3240072202166075 Shopping : 2.2450361010830324 Books & Reference : 2.14350180505415 Simulation : 2.041967509025268 Dating : 1.861462093862813 Arcade : 1.8501805054151597 Video Players & Editors : 1.771209386281586 Casual : 1.7599277978339327 Maps & Navigation : 1.398916967509025 Food & Drink : 1.2409747292418778 Puzzle : 1.1281588447653441 Racing : 0.9927797833935037 Role Playing : 0.9363718411552363 Libraries & Demo : 0.9363718411552363 Auto & Vehicles : 0.9250902527075828 Strategy : 0.9138086642599293 House & Home : 0.8235559566787015 Weather : 0.8009927797833946 Events : 0.7107400722021667 Adventure : 0.6768953068592063 Comics : 0.6092057761732854 Beauty : 0.5979241877256319 Art & Design : 0.5979241877256319 Parenting : 0.4963898916967507 Card : 0.451263537906137 Casino : 0.42870036101083014 Trivia : 0.4174187725631767 Educational;Education : 0.3948555956678699 Board : 0.38357400722021645 Educational : 0.372292418772563 Education;Education : 0.33844765342960276 Word : 0.2594765342960288 Casual;Pretend Play : 0.23691335740072195 Music : 0.20306859205776168 Racing;Action & Adventure : 0.1692238267148014 Puzzle;Brain Games : 0.1692238267148014 Entertainment;Music & Video : 0.1692238267148014 Casual;Brain Games : 0.13537906137184114 Casual;Action & Adventure : 0.13537906137184114 Arcade;Action & Adventure : 0.12409747292418771 Action;Action & Adventure : 0.10153429602888087 Educational;Pretend Play : 0.09025270758122744 Simulation;Action & Adventure : 0.07897111913357402 Parenting;Education : 0.07897111913357402 Entertainment;Brain Games : 0.07897111913357402 Board;Brain Games : 0.07897111913357402 Parenting;Music & Video : 0.06768953068592058 Educational;Brain Games : 0.06768953068592058 Casual;Creativity : 0.06768953068592058 Art & Design;Creativity : 0.06768953068592058 Education;Pretend Play : 0.05640794223826715 Role Playing;Pretend Play : 0.04512635379061372 Education;Creativity : 0.04512635379061372 Role Playing;Action & Adventure : 0.03384476534296029 Puzzle;Action & Adventure : 0.03384476534296029 Entertainment;Creativity : 0.03384476534296029 Entertainment;Action & Adventure : 0.03384476534296029 Educational;Creativity : 0.03384476534296029 Educational;Action & Adventure : 0.03384476534296029 Education;Music & Video : 0.03384476534296029 Education;Brain Games : 0.03384476534296029 Education;Action & Adventure : 0.03384476534296029 Adventure;Action & Adventure : 0.03384476534296029 Video Players & Editors;Music & Video : 0.02256317689530686 Sports;Action & Adventure : 0.02256317689530686 Simulation;Pretend Play : 0.02256317689530686 Puzzle;Creativity : 0.02256317689530686 Music;Music & Video : 0.02256317689530686 Entertainment;Pretend Play : 0.02256317689530686 Casual;Education : 0.02256317689530686 Board;Action & Adventure : 0.02256317689530686 Video Players & Editors;Creativity : 0.01128158844765343 Trivia;Education : 0.01128158844765343 Travel & Local;Action & Adventure : 0.01128158844765343 Tools;Education : 0.01128158844765343 Strategy;Education : 0.01128158844765343 Strategy;Creativity : 0.01128158844765343 Strategy;Action & Adventure : 0.01128158844765343 Simulation;Education : 0.01128158844765343 Role Playing;Brain Games : 0.01128158844765343 Racing;Pretend Play : 0.01128158844765343 Puzzle;Education : 0.01128158844765343 Parenting;Brain Games : 0.01128158844765343 Music & Audio;Music & Video : 0.01128158844765343 Lifestyle;Pretend Play : 0.01128158844765343 Lifestyle;Education : 0.01128158844765343 Health & Fitness;Education : 0.01128158844765343 Health & Fitness;Action & Adventure : 0.01128158844765343 Entertainment;Education : 0.01128158844765343 Communication;Creativity : 0.01128158844765343 Comics;Creativity : 0.01128158844765343 Casual;Music & Video : 0.01128158844765343 Card;Action & Adventure : 0.01128158844765343 Books & Reference;Education : 0.01128158844765343 Art & Design;Pretend Play : 0.01128158844765343 Art & Design;Action & Adventure : 0.01128158844765343 Arcade;Pretend Play : 0.01128158844765343 Adventure;Education : 0.01128158844765343
The difference between the Genres and the Category columns is not crystal clear, but one thing we can notice is that the Genres column is much more granular (it has more categories). We're only looking for the bigger picture at the moment, so we'll only work with the Category column moving forward.
Up to this point, we found that the App Store is dominated by apps designed for fun, while Google Play shows a more balanced landscape of both practical and for-fun apps. Now we'd like to get an idea about the kind of apps that have most users.
One way to find out what genres are the most popular (have the most users) is to calculate the average number of installs for each app genre. For the Google Play data set, we can find this information in the Installs column, but for the App Store data set this information is missing. As a workaround, we'll take the total number of user ratings as a proxy, which we can find in the rating_count_tot app.
Below, we calculate the average number of user ratings per app genre on the App Store:
genre_ios = freq_table(free_ios_apps, -5)
print(genre_ios)
{'Social Networking': 3.2898820608317867, 'Photo & Video': 4.965859714463075, 'Games': 58.1626319056464, 'Music': 2.048417132216017, 'Reference': 0.558659217877095, 'Health & Fitness': 2.0173805090006227, 'Weather': 0.8690254500310364, 'Utilities': 2.5139664804469306, 'Travel': 1.2414649286157668, 'Shopping': 2.6070763500931133, 'News': 1.3345747982619496, 'Navigation': 0.186219739292365, 'Lifestyle': 1.5828677839851035, 'Entertainment': 7.883302296710134, 'Food & Drink': 0.8069522036002481, 'Sports': 2.1415270018621997, 'Book': 0.4345127250155184, 'Finance': 1.1173184357541899, 'Education': 3.6623215394165176, 'Productivity': 1.7380509000620747, 'Business': 0.5276225946617009, 'Catalogs': 0.12414649286157665, 'Medical': 0.186219739292365}
for genre in genre_ios :
total = 0
len_genre = 0
for app in free_ios_apps :
genre_app = app[-5]
if genre_app == genre :
total += float(app[5])
len_genre += 1
print(genre,':',total / len_genre)
print('\n')
Social Networking : 71548.34905660378 Photo & Video : 28441.54375 Games : 22788.6696905016 Music : 57326.530303030304 Reference : 74942.11111111111 Health & Fitness : 23298.015384615384 Weather : 52279.892857142855 Utilities : 18684.456790123455 Travel : 28243.8 Shopping : 26919.690476190477 News : 21248.023255813954 Navigation : 86090.33333333333 Lifestyle : 16485.764705882353 Entertainment : 14029.830708661417 Food & Drink : 33333.92307692308 Sports : 23008.898550724636 Book : 39758.5 Finance : 31467.944444444445 Education : 7003.983050847458 Productivity : 21028.410714285714 Business : 7491.117647058823 Catalogs : 4004.0 Medical : 612.0
On average, navigation apps have the highest number of user reviews, but this figure is heavily influenced by Waze and Google Maps, which have close to half a million user reviews together:
for app in free_ios_apps:
if app[-5] == 'Navigation':
print(app[1], ':', app[5]) # print name and number of ratings
Waze - GPS Navigation, Maps & Real-time Traffic : 345046 Google Maps - Navigation & Transit : 154911 Geocaching® : 12811 CoPilot GPS – Car Navigation & Offline Maps : 3582 ImmobilienScout24: Real Estate Search in Germany : 187 Railway Route Search : 5
The same pattern applies to social networking apps, where the average number is heavily influenced by a few giants like Facebook, Pinterest, Skype, etc. Same applies to music apps, where a few big players like Pandora, Spotify, and Shazam heavily influence the average number.
Our aim is to find popular genres, but navigation, social networking or music apps might seem more popular than they really are. The average number of ratings seem to be skewed by very few apps which have hundreds of thousands of user ratings, while the other apps may struggle to get past the 10,000 threshold. We could get a better picture by removing these extremely popular apps for each genre and then rework the averages, but we'll leave this level of detail for later.
Reference apps have 74,942 user ratings on average, but it's actually the Bible and Dictionary.com which skew up the average rating:
for app in free_ios_apps:
if app[-5] == 'Reference':
print(app[1], ':', app[5])
Bible : 985920 Dictionary.com Dictionary & Thesaurus : 200047 Dictionary.com Dictionary & Thesaurus for iPad : 54175 Google Translate : 26786 Muslim Pro: Ramadan 2017 Prayer Times, Azan, Quran : 18418 New Furniture Mods - Pocket Wiki & Game Tools for Minecraft PC Edition : 17588 Merriam-Webster Dictionary : 16849 Night Sky : 12122 City Maps for Minecraft PE - The Best Maps for Minecraft Pocket Edition (MCPE) : 8535 LUCKY BLOCK MOD ™ for Minecraft PC Edition - The Best Pocket Wiki & Mods Installer Tools : 4693 GUNS MODS for Minecraft PC Edition - Mods Tools : 1497 Guides for Pokémon GO - Pokemon GO News and Cheats : 826 WWDC : 762 Horror Maps for Minecraft PE - Download The Scariest Maps for Minecraft Pocket Edition (MCPE) Free : 718 VPN Express : 14 Real Bike Traffic Rider Virtual Reality Glasses : 8 教えて!goo : 0 Jishokun-Japanese English Dictionary & Translator : 0
However, this niche seems to show some potential. One thing we could do is take another popular book and turn it into an app where we could add different features besides the raw version of the book. This might include daily quotes from the book, an audio version of the book, quizzes about the book, etc. On top of that, we could also embed a dictionary within the app, so users don't need to exit our app to look up words in an external app.
This idea seems to fit well with the fact that the App Store is dominated by for-fun apps. This suggests the market might be a bit saturated with for-fun apps, which means a practical app might have more of a chance to stand out among the huge number of apps on the App Store.
Other genres that seem popular include weather, book, food and drink, or finance. The book genre seem to overlap a bit with the app idea we described above, but the other genres don't seem too interesting to us:
Weather apps — people generally don't spend too much time in-app, and the chances of making profit from in-app adds are low. Also, getting reliable live weather data may require us to connect our apps to non-free APIs.
Food and drink — examples here include Starbucks, Dunkin' Donuts, McDonald's, etc. So making a popular food and drink app requires actual cooking and a delivery service, which is outside the scope of our company.
Finance apps — these apps involve banking, paying bills, money transfer, etc. Building a finance app requires domain knowledge, and we don't want to hire a finance expert just to build an app.
Now let's analyze the Google Play market a bit.
For the Google Play market, we actually have data about the number of installs, so we should be able to get a clearer picture about genre popularity. However, the install numbers don't seem precise enough — we can see that most values are open-ended (100+, 1,000+, 5,000+, etc.):
display_table(free_android_apps, 5) # the installs columns
1,000,000+ : 15.726534296029072 100,000+ : 11.552346570397244 10,000,000+ : 10.548285198556075 10,000+ : 10.198555956678813 1,000+ : 8.393501805054239 100+ : 6.915613718411619 5,000,000+ : 6.82536101083039 500,000+ : 5.561823104693188 50,000+ : 4.772111913357437 5,000+ : 4.512635379061404 10+ : 3.5424187725631953 500+ : 3.249097472924202 50,000,000+ : 2.3014440433213004 100,000,000+ : 2.1322202166064965 50+ : 1.9178700361010799 5+ : 0.7897111913357411 1+ : 0.5076714801444041 500,000,000+ : 0.2707581227436822 1,000,000,000+ : 0.22563176895306852 0+ : 0.04512635379061372 0 : 0.01128158844765343
One problem with this data is that is not precise. For instance, we don't know whether an app with 100,000+ installs has 100,000 installs, 200,000, or 350,000. However, we don't need very precise data for our purposes — we only want to get an idea which app genres attract the most users, and we don't need perfect precision with respect to the number of users.
We're going to leave the numbers as they are, which means that we'll consider that an app with 100,000+ installs has 100,000 installs, and an app with 1,000,000+ installs has 1,000,000 installs, and so on.
To perform computations, however, we'll need to convert each install number to float — this means that we need to remove the commas and the plus characters, otherwise the conversion will fail and raise an error. We'll do this directly in the loop below, where we also compute the average number of installs for each genre (category).
category_android = freq_table(free_android_apps,1)
for category in category_android :
total = 0
len_category = 0
for app in free_android_apps :
category_app = app[1]
if category_app == category :
nb_install = app[5]
nb_install = nb_install.replace('+','')
nb_install = nb_install.replace(',','')
total += float(nb_install)
len_category += 1
print(category, ':', total / len_category)
ART_AND_DESIGN : 1986335.0877192982 AUTO_AND_VEHICLES : 647317.8170731707 BEAUTY : 513151.88679245283 BOOKS_AND_REFERENCE : 8767811.894736841 BUSINESS : 1712290.1474201474 COMICS : 817657.2727272727 COMMUNICATION : 38456119.167247385 DATING : 854028.8303030303 EDUCATION : 1833495.145631068 ENTERTAINMENT : 11640705.88235294 EVENTS : 253542.22222222222 FINANCE : 1387692.475609756 FOOD_AND_DRINK : 1924897.7363636363 HEALTH_AND_FITNESS : 4188821.9853479853 HOUSE_AND_HOME : 1331540.5616438356 LIBRARIES_AND_DEMO : 638503.734939759 LIFESTYLE : 1437816.2687861272 GAME : 15588015.603248259 FAMILY : 3695641.8198090694 MEDICAL : 120550.61980830671 SOCIAL : 23253652.127118643 SHOPPING : 7036877.311557789 PHOTOGRAPHY : 17840110.40229885 SPORTS : 3638640.1428571427 TRAVEL_AND_LOCAL : 13984077.710144928 TOOLS : 10801391.298666667 PERSONALIZATION : 5201482.6122448975 PRODUCTIVITY : 16787331.344927534 PARENTING : 542603.6206896552 WEATHER : 5074486.197183099 VIDEO_PLAYERS : 24727872.452830188 NEWS_AND_MAGAZINES : 9549178.467741935 MAPS_AND_NAVIGATION : 4056941.7741935486
On average, communication apps have the most installs: 38,456,119. This number is heavily skewed up by a few apps that have over one billion installs (WhatsApp, Facebook Messenger, Skype, Google Chrome, Gmail, and Hangouts), and a few others with over 100 and 500 million installs:
for app in free_android_apps:
if app[1] == 'COMMUNICATION' and (app[5] == '1,000,000,000+'
or app[5] == '500,000,000+'
or app[5] == '100,000,000+'):
print(app[0], ':', app[5])
WhatsApp Messenger : 1,000,000,000+ imo beta free calls and text : 100,000,000+ Android Messages : 100,000,000+ Google Duo - High Quality Video Calls : 500,000,000+ Messenger – Text and Video Chat for Free : 1,000,000,000+ imo free video calls and chat : 500,000,000+ Skype - free IM & video calls : 1,000,000,000+ Who : 100,000,000+ GO SMS Pro - Messenger, Free Themes, Emoji : 100,000,000+ LINE: Free Calls & Messages : 500,000,000+ Google Chrome: Fast & Secure : 1,000,000,000+ Firefox Browser fast & private : 100,000,000+ UC Browser - Fast Download Private & Secure : 500,000,000+ Gmail : 1,000,000,000+ Hangouts : 1,000,000,000+ Messenger Lite: Free Calls & Messages : 100,000,000+ Kik : 100,000,000+ KakaoTalk: Free Calls & Text : 100,000,000+ Opera Mini - fast web browser : 100,000,000+ Opera Browser: Fast and Secure : 100,000,000+ Telegram : 100,000,000+ Truecaller: Caller ID, SMS spam blocking & Dialer : 100,000,000+ UC Browser Mini -Tiny Fast Private & Secure : 100,000,000+ Viber Messenger : 500,000,000+ WeChat : 100,000,000+ Yahoo Mail – Stay Organized : 100,000,000+ BBM - Free Calls & Messages : 100,000,000+
If we removed all the communication apps that have over 100 million installs, the average would be reduced roughly ten times:
under_100_m = []
for app in free_android_apps :
n_installs = app[5]
n_installs = n_installs.replace(',', '')
n_installs = n_installs.replace('+', '')
if (app[1] == 'COMMUNICATION') and (float(n_installs) < 100000000):
under_100_m.append(float(n_installs))
sum(under_100_m) / len(under_100_m)
3603485.3884615386
We see the same pattern for the video players category, which is the runner-up with 24,727,872 installs. The market is dominated by apps like Youtube, Google Play Movies & TV, or MX Player. The pattern is repeated for social apps (where we have giants like Facebook, Instagram, Google+, etc.), photography apps (Google Photos and other popular photo editors), or productivity apps (Microsoft Word, Dropbox, Google Calendar, Evernote, etc.).
Again, the main concern is that these app genres might seem more popular than they really are. Moreover, these niches seem to be dominated by a few giants who are hard to compete against.
The game genre seems pretty popular, but previously we found out this part of the market seems a bit saturated, so we'd like to come up with a different app recommendation if possible.
The books and reference genre looks fairly popular as well, with an average number of installs of 8,767,811. It's interesting to explore this in more depth, since we found this genre has some potential to work well on the App Store, and our aim is to recommend an app genre that shows potential for being profitable on both the App Store and Google Play.
Let's take a look at some of the apps from this genre and their number of installs:
for app in free_android_apps:
if app[1] == 'BOOKS_AND_REFERENCE':
print(app[0], ':', app[5])
E-Book Read - Read Book for free : 50,000+ Download free book with green book : 100,000+ Wikipedia : 10,000,000+ Cool Reader : 10,000,000+ Free Panda Radio Music : 100,000+ Book store : 1,000,000+ FBReader: Favorite Book Reader : 10,000,000+ English Grammar Complete Handbook : 500,000+ Free Books - Spirit Fanfiction and Stories : 1,000,000+ Google Play Books : 1,000,000,000+ AlReader -any text book reader : 5,000,000+ Offline English Dictionary : 100,000+ Offline: English to Tagalog Dictionary : 500,000+ FamilySearch Tree : 1,000,000+ Cloud of Books : 1,000,000+ Recipes of Prophetic Medicine for free : 500,000+ ReadEra – free ebook reader : 1,000,000+ Anonymous caller detection : 10,000+ Ebook Reader : 5,000,000+ Litnet - E-books : 100,000+ Read books online : 5,000,000+ English to Urdu Dictionary : 500,000+ eBoox: book reader fb2 epub zip : 1,000,000+ English Persian Dictionary : 500,000+ Flybook : 500,000+ All Maths Formulas : 1,000,000+ Ancestry : 5,000,000+ HTC Help : 10,000,000+ English translation from Bengali : 100,000+ Pdf Book Download - Read Pdf Book : 100,000+ Free Book Reader : 100,000+ eBoox new: Reader for fb2 epub zip books : 50,000+ Only 30 days in English, the guideline is guaranteed : 500,000+ Moon+ Reader : 10,000,000+ SH-02J Owner's Manual (Android 8.0) : 50,000+ English-Myanmar Dictionary : 1,000,000+ Golden Dictionary (EN-AR) : 1,000,000+ All Language Translator Free : 1,000,000+ Azpen eReader : 500,000+ URBANO V 02 instruction manual : 100,000+ Bible : 100,000,000+ C Programs and Reference : 50,000+ C Offline Tutorial : 1,000+ C Programs Handbook : 50,000+ Amazon Kindle : 100,000,000+ Aab e Hayat Full Novel : 100,000+ Aldiko Book Reader : 10,000,000+ Google I/O 2018 : 500,000+ R Language Reference Guide : 10,000+ Learn R Programming Full : 5,000+ R Programing Offline Tutorial : 1,000+ Guide for R Programming : 5+ Learn R Programming : 10+ R Quick Reference Big Data : 1,000+ V Made : 100,000+ Wattpad 📖 Free Books : 100,000,000+ Dictionary - WordWeb : 5,000,000+ Guide (for X-MEN) : 100,000+ AC Air condition Troubleshoot,Repair,Maintenance : 5,000+ AE Bulletins : 1,000+ Ae Allah na Dai (Rasa) : 10,000+ 50000 Free eBooks & Free AudioBooks : 5,000,000+ Ag PhD Field Guide : 10,000+ Ag PhD Deficiencies : 10,000+ Ag PhD Planting Population Calculator : 1,000+ Ag PhD Soybean Diseases : 1,000+ Fertilizer Removal By Crop : 50,000+ A-J Media Vault : 50+ Al-Quran (Free) : 10,000,000+ Al Quran (Tafsir & by Word) : 500,000+ Al Quran Indonesia : 10,000,000+ Al'Quran Bahasa Indonesia : 10,000,000+ Al Quran Al karim : 1,000,000+ Al-Muhaffiz : 50,000+ Al Quran : EAlim - Translations & MP3 Offline : 5,000,000+ Al-Quran 30 Juz free copies : 500,000+ Koran Read &MP3 30 Juz Offline : 1,000,000+ Hafizi Quran 15 lines per page : 1,000,000+ Quran for Android : 10,000,000+ Surah Al-Waqiah : 100,000+ Hisnul Al Muslim - Hisn Invocations & Adhkaar : 100,000+ Satellite AR : 1,000,000+ Audiobooks from Audible : 100,000,000+ Kinot & Eichah for Tisha B'Av : 10,000+ AW Tozer Devotionals - Daily : 5,000+ Tozer Devotional -Series 1 : 1,000+ The Pursuit of God : 1,000+ AY Sing : 5,000+ Ay Hasnain k Nana Milad Naat : 10,000+ Ay Mohabbat Teri Khatir Novel : 10,000+ Arizona Statutes, ARS (AZ Law) : 1,000+ Oxford A-Z of English Usage : 1,000,000+ BD Fishpedia : 1,000+ BD All Sim Offer : 10,000+ Youboox - Livres, BD et magazines : 500,000+ B&H Kids AR : 10,000+ B y H Niños ES : 5,000+ Dictionary.com: Find Definitions for English Words : 10,000,000+ English Dictionary - Offline : 10,000,000+ Bible KJV : 5,000,000+ Borneo Bible, BM Bible : 10,000+ MOD Black for BM : 100+ BM Box : 1,000+ Anime Mod for BM : 100+ NOOK: Read eBooks & Magazines : 10,000,000+ NOOK Audiobooks : 500,000+ NOOK App for NOOK Devices : 500,000+ Browsery by Barnes & Noble : 5,000+ bp e-store : 1,000+ Brilliant Quotes: Life, Love, Family & Motivation : 1,000,000+ BR Ambedkar Biography & Quotes : 10,000+ BU Alsace : 100+ Catholic La Bu Zo Kam : 500+ Khrifa Hla Bu (Solfa) : 10+ Kristian Hla Bu : 10,000+ SA HLA BU : 1,000+ Learn SAP BW : 500+ Learn SAP BW on HANA : 500+ CA Laws 2018 (California Laws and Codes) : 5,000+ Bootable Methods(USB-CD-DVD) : 10,000+ cloudLibrary : 100,000+ SDA Collegiate Quarterly : 500+ Sabbath School : 100,000+ Cypress College Library : 100+ Stats Royale for Clash Royale : 1,000,000+ GATE 21 years CS Papers(2011-2018 Solved) : 50+ Learn CT Scan Of Head : 5,000+ Easy Cv maker 2018 : 10,000+ How to Write CV : 100,000+ CW Nuclear : 1,000+ CY Spray nozzle : 10+ BibleRead En Cy Zh Yue : 5+ CZ-Help : 5+ Modlitební knížka CZ : 500+ Guide for DB Xenoverse : 10,000+ Guide for DB Xenoverse 2 : 10,000+ Guide for IMS DB : 10+ DC HSEMA : 5,000+ DC Public Library : 1,000+ Painting Lulu DC Super Friends : 1,000+ Dictionary : 10,000,000+ Fix Error Google Playstore : 1,000+ D. H. Lawrence Poems FREE : 1,000+ Bilingual Dictionary Audio App : 5,000+ DM Screen : 10,000+ wikiHow: how to do anything : 1,000,000+ Dr. Doug's Tips : 1,000+ Bible du Semeur-BDS (French) : 50,000+ La citadelle du musulman : 50,000+ DV 2019 Entry Guide : 10,000+ DV 2019 - EDV Photo & Form : 50,000+ DV 2018 Winners Guide : 1,000+ EB Annual Meetings : 1,000+ EC - AP & Telangana : 5,000+ TN Patta Citta & EC : 10,000+ AP Stamps and Registration : 10,000+ CompactiMa EC pH Calibration : 100+ EGW Writings 2 : 100,000+ EGW Writings : 1,000,000+ Bible with EGW Comments : 100,000+ My Little Pony AR Guide : 1,000,000+ SDA Sabbath School Quarterly : 500,000+ Duaa Ek Ibaadat : 5,000+ Spanish English Translator : 10,000,000+ Dictionary - Merriam-Webster : 10,000,000+ JW Library : 10,000,000+ Oxford Dictionary of English : Free : 10,000,000+ English Hindi Dictionary : 10,000,000+ English to Hindi Dictionary : 5,000,000+ EP Research Service : 1,000+ Hymnes et Louanges : 100,000+ EU Charter : 1,000+ EU Data Protection : 1,000+ EU IP Codes : 100+ EW PDF : 5+ BakaReader EX : 100,000+ EZ Quran : 50,000+ FA Part 1 & 2 Past Papers Solved Free – Offline : 5,000+ La Fe de Jesus : 1,000+ La Fe de Jesús : 500+ Le Fe de Jesus : 500+ Florida - Pocket Brainbook : 1,000+ Florida Statutes (FL Code) : 1,000+ English To Shona Dictionary : 10,000+ Greek Bible FP (Audio) : 1,000+ Golden Dictionary (FR-AR) : 500,000+ Fanfic-FR : 5,000+ Bulgarian French Dictionary Fr : 10,000+ Chemin (fr) : 1,000+ The SCP Foundation DB fr nn5n : 1,000+
The book and reference genre includes a variety of apps: software for processing and reading ebooks, various collections of libraries, dictionaries, tutorials on programming or languages, etc. It seems there's still a small number of extremely popular apps that skew the average:
for app in free_android_apps:
if app[1] == 'BOOKS_AND_REFERENCE' and (app[5] == '1,000,000,000+'
or app[5] == '500,000,000+'
or app[5] == '100,000,000+'):
print(app[0], ':', app[5])
Google Play Books : 1,000,000,000+ Bible : 100,000,000+ Amazon Kindle : 100,000,000+ Wattpad 📖 Free Books : 100,000,000+ Audiobooks from Audible : 100,000,000+
However, it looks like there are only a few very popular apps, so this market still shows potential. Let's try to get some app ideas based on the kind of apps that are somewhere in the middle in terms of popularity (between 1,000,000 and 100,000,000 downloads):
for app in free_android_apps:
if app[1] == 'BOOKS_AND_REFERENCE' and (app[5] == '1,000,000+'
or app[5] == '5,000,000+'
or app[5] == '10,000,000+'
or app[5] == '50,000,000+'):
print(app[0], ':', app[5])
Wikipedia : 10,000,000+ Cool Reader : 10,000,000+ Book store : 1,000,000+ FBReader: Favorite Book Reader : 10,000,000+ Free Books - Spirit Fanfiction and Stories : 1,000,000+ AlReader -any text book reader : 5,000,000+ FamilySearch Tree : 1,000,000+ Cloud of Books : 1,000,000+ ReadEra – free ebook reader : 1,000,000+ Ebook Reader : 5,000,000+ Read books online : 5,000,000+ eBoox: book reader fb2 epub zip : 1,000,000+ All Maths Formulas : 1,000,000+ Ancestry : 5,000,000+ HTC Help : 10,000,000+ Moon+ Reader : 10,000,000+ English-Myanmar Dictionary : 1,000,000+ Golden Dictionary (EN-AR) : 1,000,000+ All Language Translator Free : 1,000,000+ Aldiko Book Reader : 10,000,000+ Dictionary - WordWeb : 5,000,000+ 50000 Free eBooks & Free AudioBooks : 5,000,000+ Al-Quran (Free) : 10,000,000+ Al Quran Indonesia : 10,000,000+ Al'Quran Bahasa Indonesia : 10,000,000+ Al Quran Al karim : 1,000,000+ Al Quran : EAlim - Translations & MP3 Offline : 5,000,000+ Koran Read &MP3 30 Juz Offline : 1,000,000+ Hafizi Quran 15 lines per page : 1,000,000+ Quran for Android : 10,000,000+ Satellite AR : 1,000,000+ Oxford A-Z of English Usage : 1,000,000+ Dictionary.com: Find Definitions for English Words : 10,000,000+ English Dictionary - Offline : 10,000,000+ Bible KJV : 5,000,000+ NOOK: Read eBooks & Magazines : 10,000,000+ Brilliant Quotes: Life, Love, Family & Motivation : 1,000,000+ Stats Royale for Clash Royale : 1,000,000+ Dictionary : 10,000,000+ wikiHow: how to do anything : 1,000,000+ EGW Writings : 1,000,000+ My Little Pony AR Guide : 1,000,000+ Spanish English Translator : 10,000,000+ Dictionary - Merriam-Webster : 10,000,000+ JW Library : 10,000,000+ Oxford Dictionary of English : Free : 10,000,000+ English Hindi Dictionary : 10,000,000+ English to Hindi Dictionary : 5,000,000+
This niche seems to be dominated by software for processing and reading ebooks, as well as various collections of libraries and dictionaries, so it's probably not a good idea to build similar apps since there'll be some significant competition.
We also notice there are quite a few apps built around the book Quran, which suggests that building an app around a popular book can be profitable. It seems that taking a popular book (perhaps a more recent book) and turning it into an app could be profitable for both the Google Play and the App Store markets.
However, it looks like the market is already full of libraries, so we need to add some special features besides the raw version of the book. This might include daily quotes from the book, an audio version of the book, quizzes on the book, a forum where people can discuss the book, etc.
In this project, we analyzed data about the App Store and Google Play mobile apps with the goal of recommending an app profile that can be profitable for both markets.
We concluded that taking a popular book (perhaps a more recent book) and turning it into an app could be profitable for both the Google Play and the App Store markets. The markets are already full of libraries, so we need to add some special features besides the raw version of the book. This might include daily quotes from the book, an audio version of the book, quizzes on the book, a forum where people can discuss the book, etc.