Profitable App Profiles for the App Store and Google Play Markets

  • We're developing apps for users, which are free to download and install. And our main source of revenue will be in-app advertising.
  • Since, our goal is to achieve maximum revenue from in-app advertising. We will be analysing market trends and most profitable free apps across various genres in both stores.

DataSource & Documentation:
PlayStore
AppStore

Introduction to Datasets and Converting them into List of Lists

In [1]:
open_a_file = open('AppleStore.csv')
open_p_file  = open('googleplaystore.csv')

from csv import reader

read_a_file = reader(open_a_file)
read_p_file = reader(open_p_file)

dataset_a = list(read_a_file)
dataset_p = list(read_p_file)

ios_header = dataset_a[0]
ios_data = dataset_a[1:]

android_header = dataset_p[0]
android_data = dataset_p[1:]

Defining a Method for easy exploration of the Datasets

In [2]:
def explore_data(dataset, start, end, rows_and_columns=False):
    dataset_slice = dataset[start:end]    
    for row in dataset_slice:
        print(row)
        print('\n') # adds a new (empty) line after each row

    if rows_and_columns:
        print('Number of rows:', len(dataset))
        print('Number of columns:', len(dataset[0]))

print('Apple Store\n')
explore_data(ios_data, 0, 5, rows_and_columns=True)
Apple Store

['1', '281656475', 'PAC-MAN Premium', '100788224', 'USD', '3.99', '21292', '26', '4', '4.5', '6.3.5', '4+', 'Games', '38', '5', '10', '1']


['2', '281796108', 'Evernote - stay organized', '158578688', 'USD', '0', '161065', '26', '4', '3.5', '8.2.2', '4+', 'Productivity', '37', '5', '23', '1']


['3', '281940292', 'WeatherBug - Local Weather, Radar, Maps, Alerts', '100524032', 'USD', '0', '188583', '2822', '3.5', '4.5', '5.0.0', '4+', 'Weather', '37', '5', '3', '1']


['4', '282614216', 'eBay: Best App to Buy, Sell, Save! Online Shopping', '128512000', 'USD', '0', '262241', '649', '4', '4.5', '5.10.0', '12+', 'Shopping', '37', '5', '9', '1']


['5', '282935706', 'Bible', '92774400', 'USD', '0', '985920', '5320', '4.5', '5', '7.5.1', '4+', 'Reference', '37', '5', '45', '1']


Number of rows: 7197
Number of columns: 17
In [3]:
print('Google Play Store\n')
explore_data(android_data, 0, 5, rows_and_columns=True)
Google Play Store

['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']


['Coloring book moana', 'ART_AND_DESIGN', '3.9', '967', '14M', '500,000+', 'Free', '0', 'Everyone', 'Art & Design;Pretend Play', 'January 15, 2018', '2.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']


['Sketch - Draw & Paint', 'ART_AND_DESIGN', '4.5', '215644', '25M', '50,000,000+', 'Free', '0', 'Teen', 'Art & Design', 'June 8, 2018', 'Varies with device', '4.2 and up']


['Pixel Draw - Number Art Coloring Book', 'ART_AND_DESIGN', '4.3', '967', '2.8M', '100,000+', 'Free', '0', 'Everyone', 'Art & Design;Creativity', 'June 20, 2018', '1.1', '4.4 and up']


Number of rows: 10841
Number of columns: 13

Column Names

In [4]:
print('ios header','\n',  ios_header, '\n')
# print('\n')
print('android header', '\n', android_header)
ios header 
 ['', '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'] 

android header 
 ['App', 'Category', 'Rating', 'Reviews', 'Size', 'Installs', 'Type', 'Price', 'Content Rating', 'Genres', 'Last Updated', 'Current Ver', 'Android Ver']

Deleting Wrong Data

  • From the discussion forum at Kaggle. We can observe that one of the row (10472) has a missing column. We will remove it.
In [5]:
print(android_data[10472])
len(android_data[10472])
['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']
Out[5]:
12
In [6]:
del android_data[10472]
explore_data(android_data, 0, 0, rows_and_columns=True)
Number of rows: 10840
Number of columns: 13

Removing duplicate Entries

  • Also, we can observe below that there are various apps having duplicate entries. For Example - Instagram. We would need to remove them.
In [7]:
for app in android_data:
    name = app[0]
    if name == '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']
  • Now we have to delete duplicate entries. But instead of removing them randomly, we can find a better way.
  • We can observe that the main difference happens on the fourth position of each row, which corresponds to the number of reviews. The different numbers show that the data was collected at different times.
  • Hence, The higher the number of reviews, the more recent the data should be. Rather than removing duplicates randomly, we'll only keep the row with the highest number of reviews and remove the other entries for any given app.

Step I - Get names of all the apps which have duplicate entries

In [8]:
unique_apps = []
duplicate_apps = []

for app in android_data:
    name = app[0]
    if name in unique_apps:
        duplicate_apps.append(name)
    unique_apps.append(name)
    
print(len(duplicate_apps))
print(duplicate_apps[:10])
1181
['Quick PDF Scanner + OCR FREE', 'Box', 'Google My Business', 'ZOOM Cloud Meetings', 'join.me - Simple Meetings', 'Box', 'Zenefits', 'Google Ads', 'Google My Business', 'Slack']

Step II - Make a dictionary having rows of apps which we want to keep.

In [9]:
reviews_max = {}

for app in android_data:
    name = app[0]
    n_reviews = float(app[3])
    if (name in reviews_max) and (reviews_max[name] < n_reviews):
        reviews_max[name] = n_reviews
    if name not in reviews_max:
        reviews_max[name] = n_reviews

len(reviews_max)
Out[9]:
9659
In [10]:
print(len(reviews_max))
9659

Step III - Use dictionay created above to remove duplicate rows, and getting cleaned data in android_clean list

In [11]:
android_clean = []
already_added = []

for app in android_data:
    name = app[0]
    n_reviews = float(app[3])
    if (name not in already_added) and (n_reviews == reviews_max[name]):
        android_clean.append(app)
        already_added.append(name)
        
explore_data(android_clean, 0, 3, rows_and_columns=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']


['Sketch - Draw & Paint', 'ART_AND_DESIGN', '4.5', '215644', '25M', '50,000,000+', 'Free', '0', 'Teen', 'Art & Design', 'June 8, 2018', 'Varies with device', '4.2 and up']


Number of rows: 9659
Number of columns: 13

Removing Non-English Apps

  • We can observe that there are few Non-English apps, which we dont want. We will delete them as well.

Step I- We will define a function which filters out Non-English Strings

In [12]:
def english_or_not(a_string):
    count = 0
    for i in a_string:
        if (ord(i) > 127):
            count += 1
        if count >= 3:
            return False
        
    return True

print(english_or_not('Instagram'))
print(english_or_not('爱奇艺PPS -《欢乐颂2》电视剧热播'))
print(english_or_not('Docs To Go™ Free Office Suite'))
print(english_or_not('Instachat 😜'))
True
False
True
True

*Step II - Delete Non-English Apps using the above function**

In [13]:
english_a_apps = []
english_ios_apps = []

for app in android_clean:
    name = app[0]
    if english_or_not(name):
        english_a_apps.append(app)
        
for app in ios_data:
    name = app[0]
    if english_or_not(name):
        english_ios_apps.append(app)  

English Android Apps

In [14]:
explore_data(english_a_apps, 0, 3, rows_and_columns=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']


['Sketch - Draw & Paint', 'ART_AND_DESIGN', '4.5', '215644', '25M', '50,000,000+', 'Free', '0', 'Teen', 'Art & Design', 'June 8, 2018', 'Varies with device', '4.2 and up']


Number of rows: 9597
Number of columns: 13

English ios Apps

In [15]:
explore_data(english_ios_apps, 0, 3, rows_and_columns=True)
['1', '281656475', 'PAC-MAN Premium', '100788224', 'USD', '3.99', '21292', '26', '4', '4.5', '6.3.5', '4+', 'Games', '38', '5', '10', '1']


['2', '281796108', 'Evernote - stay organized', '158578688', 'USD', '0', '161065', '26', '4', '3.5', '8.2.2', '4+', 'Productivity', '37', '5', '23', '1']


['3', '281940292', 'WeatherBug - Local Weather, Radar, Maps, Alerts', '100524032', 'USD', '0', '188583', '2822', '3.5', '4.5', '5.0.0', '4+', 'Weather', '37', '5', '3', '1']


Number of rows: 7197
Number of columns: 17

Isolating the Free Apps

  • Now we will isolate the apps in both play store and AppStore which are Free using same methods as above.
In [16]:
free_a_apps = []
free_ios_apps = []

for app in english_a_apps:
    price = app[7]
    if price =='0':
        free_a_apps.append(app)
        
for app in english_ios_apps:
    price = app[5]
    if price == '0':
        free_ios_apps.append(app)    

Free English Android Apps

In [17]:
explore_data(free_a_apps, 0, 3, rows_and_columns=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']


['Sketch - Draw & Paint', 'ART_AND_DESIGN', '4.5', '215644', '25M', '50,000,000+', 'Free', '0', 'Teen', 'Art & Design', 'June 8, 2018', 'Varies with device', '4.2 and up']


Number of rows: 8848
Number of columns: 13

Free English ios Apps

In [18]:
explore_data(free_ios_apps, 0, 3, rows_and_columns=True)
['2', '281796108', 'Evernote - stay organized', '158578688', 'USD', '0', '161065', '26', '4', '3.5', '8.2.2', '4+', 'Productivity', '37', '5', '23', '1']


['3', '281940292', 'WeatherBug - Local Weather, Radar, Maps, Alerts', '100524032', 'USD', '0', '188583', '2822', '3.5', '4.5', '5.0.0', '4+', 'Weather', '37', '5', '3', '1']


['4', '282614216', 'eBay: Best App to Buy, Sell, Save! Online Shopping', '128512000', 'USD', '0', '262241', '649', '4', '4.5', '5.10.0', '12+', 'Shopping', '37', '5', '9', '1']


Number of rows: 4056
Number of columns: 17

Most Commom Apps by Genre

Our aim is to determine the kinds of apps that are likely to attract more users so that we can leverage the use of in-app advertising.

To minimize risks and overhead, our validation strategy for an app idea is comprised of three steps:

  1. Build a minimal Android version of the app, and add it to Google Play.
  2. If the app has a good response from users, we then develop it further.
  3. If the app is profitable after six months, we also build an iOS version of the app and add it to the App Store.

We will find app profiles that are successful in both the stores. And begin our analysis by getting a sense of the most common genres for each market.

Play Store - Two columns (Category and Genres) provide us an idea for the genres.
App Store - One column (prime_genre) provides us an idea for the genres.

Finding Most Common Genres

In [19]:
def freq_table(apps_list, index):
    genre_dict = {}
    genre_per = {}
    sorted_gen_per = []
    
    # Generating Frequency Distribution
    for app in apps_list:
        genre = app[index]
    
        if genre in genre_dict:
            genre_dict[genre] += 1
        else:
            genre_dict[genre] = 1
            
    # Sum of all Values
    sum_dict = sum(genre_dict.values())   

    # Generating Frequency Percentage Disrtibution
    for i in genre_dict:
        genre_per[i] = (genre_dict[i]/sum_dict)*100
        
    #Sorting the list of frequency percentages 
    for w in sorted(genre_per, key = genre_per.get, reverse=True):
        sorted_gen_per.append((w, genre_per[w]))
        
    return sorted_gen_per

genre_ios_apps = freq_table(free_ios_apps, -5)
category_a_apps =  freq_table(free_a_apps, 1)
genre_a_apps = freq_table(free_a_apps, -4)

Most Common Genres - iOS

In [20]:
genre_ios_apps
Out[20]:
[('Games', 55.64595660749507),
 ('Entertainment', 8.234714003944774),
 ('Photo & Video', 4.117357001972387),
 ('Social Networking', 3.5256410256410255),
 ('Education', 3.2544378698224854),
 ('Shopping', 2.983234714003945),
 ('Utilities', 2.687376725838264),
 ('Lifestyle', 2.3175542406311638),
 ('Finance', 2.0710059171597637),
 ('Sports', 1.947731755424063),
 ('Health & Fitness', 1.8737672583826428),
 ('Music', 1.6518737672583828),
 ('Book', 1.6272189349112427),
 ('Productivity', 1.5285996055226825),
 ('News', 1.4299802761341223),
 ('Travel', 1.3806706114398422),
 ('Food & Drink', 1.0601577909270217),
 ('Weather', 0.7642998027613412),
 ('Reference', 0.4930966469428008),
 ('Business', 0.4930966469428008),
 ('Navigation', 0.4930966469428008),
 ('Catalogs', 0.22189349112426035),
 ('Medical', 0.19723865877712032)]

With more then half (55%) share, Games is the most common genre.
And, even the next few top genres are also in fun segment namely Entertainment, Photo & Video, Social Networking

Most Common Genres - Android

In [21]:
genre_a_apps
Out[21]:
[('Tools', 8.44258589511754),
 ('Entertainment', 6.080470162748644),
 ('Education', 5.357142857142857),
 ('Business', 4.599909584086799),
 ('Productivity', 3.899186256781193),
 ('Lifestyle', 3.8765822784810124),
 ('Finance', 3.7070524412296564),
 ('Medical', 3.5375226039783),
 ('Sports', 3.4584086799276674),
 ('Personalization', 3.322784810126582),
 ('Communication', 3.2323688969258586),
 ('Action', 3.096745027124774),
 ('Health & Fitness', 3.0854430379746836),
 ('Photography', 2.949819168173599),
 ('News & Magazines', 2.802893309222423),
 ('Social', 2.667269439421338),
 ('Travel & Local', 2.328209764918626),
 ('Shopping', 2.2490958408679926),
 ('Books & Reference', 2.1360759493670884),
 ('Simulation', 2.0456600361663653),
 ('Dating', 1.8648282097649187),
 ('Arcade', 1.842224231464738),
 ('Video Players & Editors', 1.7744122965641953),
 ('Casual', 1.763110307414105),
 ('Maps & Navigation', 1.3901446654611211),
 ('Food & Drink', 1.2432188065099457),
 ('Puzzle', 1.1301989150090417),
 ('Racing', 0.9945750452079566),
 ('Libraries & Demo', 0.9380650994575045),
 ('Role Playing', 0.9380650994575045),
 ('Auto & Vehicles', 0.9267631103074141),
 ('Strategy', 0.9154611211573236),
 ('House & Home', 0.8024412296564195),
 ('Weather', 0.7911392405063291),
 ('Events', 0.7120253164556962),
 ('Adventure', 0.6668173598553345),
 ('Art & Design', 0.599005424954792),
 ('Beauty', 0.599005424954792),
 ('Comics', 0.599005424954792),
 ('Parenting', 0.4972875226039783),
 ('Card', 0.45207956600361665),
 ('Trivia', 0.4181735985533454),
 ('Casino', 0.4181735985533454),
 ('Educational;Education', 0.39556962025316456),
 ('Board', 0.3842676311030741),
 ('Educational', 0.3729656419529837),
 ('Education;Education', 0.33905967450271246),
 ('Word', 0.25994575045207957),
 ('Casual;Pretend Play', 0.23734177215189875),
 ('Music', 0.2034358047016275),
 ('Entertainment;Music & Video', 0.16952983725135623),
 ('Puzzle;Brain Games', 0.16952983725135623),
 ('Racing;Action & Adventure', 0.16952983725135623),
 ('Casual;Brain Games', 0.13562386980108498),
 ('Casual;Action & Adventure', 0.13562386980108498),
 ('Arcade;Action & Adventure', 0.12432188065099457),
 ('Action;Action & Adventure', 0.10171790235081375),
 ('Educational;Pretend Play', 0.09041591320072333),
 ('Entertainment;Brain Games', 0.07911392405063292),
 ('Simulation;Action & Adventure', 0.07911392405063292),
 ('Board;Brain Games', 0.07911392405063292),
 ('Parenting;Education', 0.07911392405063292),
 ('Art & Design;Creativity', 0.06781193490054249),
 ('Educational;Brain Games', 0.06781193490054249),
 ('Casual;Creativity', 0.06781193490054249),
 ('Parenting;Music & Video', 0.06781193490054249),
 ('Education;Pretend Play', 0.05650994575045208),
 ('Education;Creativity', 0.045207956600361664),
 ('Role Playing;Pretend Play', 0.045207956600361664),
 ('Education;Brain Games', 0.033905967450271246),
 ('Entertainment;Creativity', 0.033905967450271246),
 ('Educational;Creativity', 0.033905967450271246),
 ('Adventure;Action & Adventure', 0.033905967450271246),
 ('Role Playing;Action & Adventure', 0.033905967450271246),
 ('Educational;Action & Adventure', 0.033905967450271246),
 ('Entertainment;Action & Adventure', 0.033905967450271246),
 ('Puzzle;Action & Adventure', 0.033905967450271246),
 ('Education;Action & Adventure', 0.033905967450271246),
 ('Education;Music & Video', 0.033905967450271246),
 ('Casual;Education', 0.022603978300180832),
 ('Music;Music & Video', 0.022603978300180832),
 ('Simulation;Pretend Play', 0.022603978300180832),
 ('Puzzle;Creativity', 0.022603978300180832),
 ('Sports;Action & Adventure', 0.022603978300180832),
 ('Board;Action & Adventure', 0.022603978300180832),
 ('Entertainment;Pretend Play', 0.022603978300180832),
 ('Video Players & Editors;Music & Video', 0.022603978300180832),
 ('Comics;Creativity', 0.011301989150090416),
 ('Lifestyle;Pretend Play', 0.011301989150090416),
 ('Art & Design;Pretend Play', 0.011301989150090416),
 ('Entertainment;Education', 0.011301989150090416),
 ('Arcade;Pretend Play', 0.011301989150090416),
 ('Art & Design;Action & Adventure', 0.011301989150090416),
 ('Strategy;Action & Adventure', 0.011301989150090416),
 ('Music & Audio;Music & Video', 0.011301989150090416),
 ('Health & Fitness;Education', 0.011301989150090416),
 ('Casual;Music & Video', 0.011301989150090416),
 ('Travel & Local;Action & Adventure', 0.011301989150090416),
 ('Tools;Education', 0.011301989150090416),
 ('Parenting;Brain Games', 0.011301989150090416),
 ('Video Players & Editors;Creativity', 0.011301989150090416),
 ('Health & Fitness;Action & Adventure', 0.011301989150090416),
 ('Trivia;Education', 0.011301989150090416),
 ('Lifestyle;Education', 0.011301989150090416),
 ('Card;Action & Adventure', 0.011301989150090416),
 ('Books & Reference;Education', 0.011301989150090416),
 ('Simulation;Education', 0.011301989150090416),
 ('Puzzle;Education', 0.011301989150090416),
 ('Adventure;Education', 0.011301989150090416),
 ('Role Playing;Brain Games', 0.011301989150090416),
 ('Strategy;Education', 0.011301989150090416),
 ('Racing;Pretend Play', 0.011301989150090416),
 ('Communication;Creativity', 0.011301989150090416),
 ('Strategy;Creativity', 0.011301989150090416)]

Most Common Categories - Android

In [22]:
category_a_apps
Out[22]:
[('FAMILY', 18.942133815551536),
 ('GAME', 9.697106690777577),
 ('TOOLS', 8.453887884267631),
 ('BUSINESS', 4.599909584086799),
 ('PRODUCTIVITY', 3.899186256781193),
 ('LIFESTYLE', 3.887884267631103),
 ('FINANCE', 3.7070524412296564),
 ('MEDICAL', 3.5375226039783),
 ('SPORTS', 3.390596745027125),
 ('PERSONALIZATION', 3.322784810126582),
 ('COMMUNICATION', 3.2323688969258586),
 ('HEALTH_AND_FITNESS', 3.0854430379746836),
 ('PHOTOGRAPHY', 2.949819168173599),
 ('NEWS_AND_MAGAZINES', 2.802893309222423),
 ('SOCIAL', 2.667269439421338),
 ('TRAVEL_AND_LOCAL', 2.3395117540687163),
 ('SHOPPING', 2.2490958408679926),
 ('BOOKS_AND_REFERENCE', 2.1360759493670884),
 ('DATING', 1.8648282097649187),
 ('VIDEO_PLAYERS', 1.7970162748643763),
 ('MAPS_AND_NAVIGATION', 1.3901446654611211),
 ('FOOD_AND_DRINK', 1.2432188065099457),
 ('EDUCATION', 1.164104882459313),
 ('ENTERTAINMENT', 0.9606690777576853),
 ('LIBRARIES_AND_DEMO', 0.9380650994575045),
 ('AUTO_AND_VEHICLES', 0.9267631103074141),
 ('HOUSE_AND_HOME', 0.8024412296564195),
 ('WEATHER', 0.7911392405063291),
 ('EVENTS', 0.7120253164556962),
 ('PARENTING', 0.6555153707052441),
 ('ART_AND_DESIGN', 0.6442133815551537),
 ('COMICS', 0.6103074141048824),
 ('BEAUTY', 0.599005424954792)]

In Play Store the distribution seems to be more balanced.
Although, we have Games as one of the top most category, but it doesn't effect the distribution so much. However, apps for Practical Purposes like Tools, Education, Business, Productivity are taking the top spots.

We may also notice that Genre column is far more granular (more categories) compared to Category column. Since, we want to get the overall picture, it will be better to use Category column from now on.


Being most common doesn't equate with being most popular. Maybe there is more supply then demand. So here, we will analyse by comparing the number of users(installs) per Genre.

Play Store : column - Installs provides us an idea for the number of installs.
App Store : Here, we don't have any column for installs. But the column rating_count_tot (User Ratings) provides us an idea for the installs in each genre.

Most Popular Apps - iOS

In [23]:
categories_ios_list = []
pop_ios_apps_dict = {}
pop_ios_apps_list = []

# Getting list of Genres in Apple Store
for app in genre_ios_apps:
    categories_ios_list.append(app[0])

# Getting No. of installs/genre list in App Store
for cat in categories_ios_list:
    lngth = 0
    total = 0
    for app in free_ios_apps:
        if cat == app[-5]:
            n_ratings = float(app[6])
            lngth += 1
            total += n_ratings
    avg_rating = total/lngth
    pop_ios_apps_dict[cat] = avg_rating

# Sorting in Descending Order to display the most popular genres
for i in sorted(pop_ios_apps_dict, 
                key = pop_ios_apps_dict.get, reverse=True):
    pop_ios_apps_list.append((i, pop_ios_apps_dict[i]))
    
pop_ios_apps_list
Out[23]:
[('Reference', 67447.9),
 ('Music', 56482.02985074627),
 ('Social Networking', 53078.195804195806),
 ('Weather', 47220.93548387097),
 ('Photo & Video', 27249.892215568863),
 ('Navigation', 25972.05),
 ('Travel', 20216.01785714286),
 ('Food & Drink', 20179.093023255813),
 ('Sports', 20128.974683544304),
 ('Health & Fitness', 19952.315789473683),
 ('Productivity', 19053.887096774193),
 ('Games', 18924.68896765618),
 ('Shopping', 18746.677685950413),
 ('News', 15892.724137931034),
 ('Utilities', 14010.100917431193),
 ('Finance', 13522.261904761905),
 ('Entertainment', 10822.961077844311),
 ('Lifestyle', 8978.308510638299),
 ('Book', 8498.333333333334),
 ('Business', 6367.8),
 ('Education', 6266.333333333333),
 ('Catalogs', 1779.5555555555557),
 ('Medical', 459.75)]

Most Popular Categories - Android

In [24]:
categories_a_list = []
pop_a_apps_dict = {}
pop_a_apps_list = []

# Getting the list of Categories in Play Store
for app in category_a_apps:
    categories_a_list.append(app[0])

# Getting the Most Ratings/Category in Play Store
for i in categories_a_list:
    total = 0
    lngth = 0
    for app in free_a_apps:
        if app[1] == i:
            installs = app[5]
            installs = installs.replace(',', '')
            installs = float(installs.replace('+', ''))
            total += installs
            lngth += 1
    avg_rating = total/lngth
    pop_a_apps_dict[i] = avg_rating
    
# Sorting in Descending Order to display the most popular genres
for i in sorted(pop_a_apps_dict, 
                key = pop_a_apps_dict.get, reverse=True):
    pop_a_apps_list.append((i, pop_a_apps_dict[i]))

    
pop_a_apps_list
Out[24]:
[('COMMUNICATION', 38590581.08741259),
 ('VIDEO_PLAYERS', 24727872.452830188),
 ('SOCIAL', 23253652.127118643),
 ('PHOTOGRAPHY', 17840110.40229885),
 ('PRODUCTIVITY', 16787331.344927534),
 ('GAME', 15544014.51048951),
 ('TRAVEL_AND_LOCAL', 13984077.710144928),
 ('ENTERTAINMENT', 11640705.88235294),
 ('TOOLS', 10830251.970588235),
 ('NEWS_AND_MAGAZINES', 9549178.467741935),
 ('BOOKS_AND_REFERENCE', 8814199.78835979),
 ('SHOPPING', 7036877.311557789),
 ('PERSONALIZATION', 5201482.6122448975),
 ('WEATHER', 5145550.285714285),
 ('HEALTH_AND_FITNESS', 4188821.9853479853),
 ('MAPS_AND_NAVIGATION', 4049274.6341463416),
 ('FAMILY', 3695641.8198090694),
 ('SPORTS', 3650602.276666667),
 ('ART_AND_DESIGN', 1986335.0877192982),
 ('FOOD_AND_DRINK', 1924897.7363636363),
 ('EDUCATION', 1833495.145631068),
 ('BUSINESS', 1712290.1474201474),
 ('LIFESTYLE', 1446158.2238372094),
 ('FINANCE', 1387692.475609756),
 ('HOUSE_AND_HOME', 1360598.042253521),
 ('DATING', 854028.8303030303),
 ('COMICS', 832613.8888888889),
 ('AUTO_AND_VEHICLES', 647317.8170731707),
 ('LIBRARIES_AND_DEMO', 638503.734939759),
 ('PARENTING', 542603.6206896552),
 ('BEAUTY', 513151.88679245283),
 ('EVENTS', 253542.22222222222),
 ('MEDICAL', 120550.61980830671)]

Here, we can see various categories which are famous and common between both the stores.
We know that most of the app installs and popularity comes from a few apps. Such as Facebook for Social and Youtube for Music or Video Players. We are also not interested in building up a communication app like Whatsapp, Skype, etc. But there is one category which is popular in both stores - Photo Category.

Conclusion:

We can recommend developing an app which is in Photographs Category.