This project contains the analysis of a company, involved in the creation of free Mobile applications(Android and iOS), made available on Google Play and App Store. It's main source of revenue comes from the in-app ads system, which is highly influenced by the number of users who use their app and engage with the ads.
# opening the datasets and storing them as a list.
from csv import reader
# ios dataset
file_open = open('AppleStore.csv')
read_file = reader(file_open)
ios = list(read_file)
ios_header = ios[0]
ios = ios[1:]
# andriod dataset
file_open = open('googleplaystore.csv')
read_file = reader(file_open)
andriod = list(read_file)
andriod_header = andriod[0]
andriod = andriod[1:]
def explore_data(dataset, start, end, rows_and_columns=False):
dataset_slice = dataset[start:end]
for row in dataset_slice:
print(row)
print('\n')
if rows_and_columns:
print('Number of rows:', len(dataset))
print('Number of columns:', len(dataset[0]))
explore_data(ios, 0,3, True)
['284882215', 'Facebook', '389879808', 'USD', '0.0', '2974676', '212', '3.5', '3.5', '95.0', '4+', 'Social Networking', '37', '1', '29', '1'] ['389801252', 'Instagram', '113954816', 'USD', '0.0', '2161558', '1289', '4.5', '4.0', '10.23', '12+', 'Photo & Video', '37', '0', '29', '1'] ['529479190', 'Clash of Clans', '116476928', 'USD', '0.0', '2130805', '579', '4.5', '4.5', '9.24.12', '9+', 'Games', '38', '5', '18', '1'] Number of rows: 7197 Number of columns: 16
print(ios_header)
print('\n')
print(andriod_header)
print('\n')
explore_data(andriod, 0,3, 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'] ['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'] ['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'] Number of rows: 10841 Number of columns: 13
# identifying the the missing row of data
print(andriod_header)
print('\n')
print(andriod[10472])
['App', 'Category', 'Rating', 'Reviews', 'Size', 'Installs', 'Type', 'Price', 'Content Rating', 'Genres', 'Last Updated', 'Current Ver', 'Android Ver'] ['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']
An important process before analysing data is the data pre-processing stage. This invloves the removal of incorrect, unecessary and duplicate data. The code below shows the visual existence of duplicate data for the Instagram app.
# deleting the missing row of data for and andriod apps
del andriod[10472]
# displaying duplicate data
for app in andriod:
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']
# seprating and counting the number of duplicate andriod apps
unique_apps = []
duplicate_apps = []
for app in andriod:
name = app[0]
if name in unique_apps:
duplicate_apps.append(name)
else:
unique_apps.append(name)
print('Number of duplicate apps:', len(duplicate_apps))
Number of duplicate apps: 1181
NB: Duplicate apps will not be removed randomly. The criterion for removal would be done based on the the number of reviews, which is one the major differences between the duplicate apps. The variation in the number of reviews shows that this data was collected at different times. Therefore, the higher the number of reviews the more recent the data should be.
# displaying duplicate data
for app in andriod:
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']
# seprating and counting the number of duplicate andriod apps
unique_apps = []
duplicate_apps = []
for app in andriod:
name = app[0]
if name in unique_apps:
duplicate_apps.append(name)
else:
unique_apps.append(name)
print('Number of duplicate apps:', len(duplicate_apps))
Number of duplicate apps: 1181
# creates a dictionary of non-duplicate apps from andriod apps
reviews_max = {}
for app in andriod:
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
print('Expected outcome:', len(andriod) - 1181)
print('This is the length of the reviews_max:', len(reviews_max))
# print(reviews_max)
Expected outcome: 9659 This is the length of the reviews_max: 9659
The code above creates a dictionary of non-duplicate apps from andriod app were each key is a unique app name and the value is the highest number of reviews for that app
# removing duplicate rows
andriod_clean = []
already_added = []
for app in andriod:
name = app[0]
n_reviews = float(app[3])
if (reviews_max[name] == n_reviews) and (name not in already_added):
andriod_clean.append(app)
already_added.append(name)
print(len(andriod_clean))
The code above creates a initializes two empty lists, andriod_clean and already_added. In each iteration the name of the app and the number of reviews are isolated, and a current row(app) and name are added to the andriod_clean list and already_added respectively, if:
described in the reviews_max dictionary; and
supplementary condition to account for those cases where the highest number of reviews
of a duplicate app is the same for more than one entry (for example, the Box app has
three entries, and the number of reviews is the same). If we just
check for reviews_max[name] == n_reviews, we'll still end up with duplicate entries for some apps.
explore_data(andriod_clean, 0,3, 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
print(ios[813][1])
print(andriod_clean[4412][0])
爱奇艺PPS -《欢乐颂2》电视剧热播 中国語 AQリスニング
# A function that returns false for every non-english character found in an app
def is_english(app_name):
for letter in app_name:
if ord(letter) > 127:
return False
return True
print(is_english('Instagram'))
print(is_english('爱奇艺PPS -《欢乐颂2》电视剧热播'))
print(is_english('Docs To Go™ Free Office Suite'))
print(is_english('Instachat 😜'))
True False False False
The code above returns False for app names which do not contain English characters and True otherwise. This is done by evaluating the ASCII range of each character. The range of English characters are between 0-127 and every other character outside this range is a non-English character. Using this function would be very ineffective because of it's inability to identify text(app_names) such as 'Docs To Go™ Free Office Suite' and 'Instachat 😜'. They both contain special symbols and therefore, implementing this function would lead to loss of data, because some English apps may further be labeled as non-English apps.\
We come up with a solution to solve this problem by removing apps only if its name contains more thann three characters with corresponding numbers falling outside the ASCII range.
# modifying the function to allow at most 3 non-english characters for each app
def is_english(app_name):
non_ascii = 0
for letter in app_name:
if ord(letter) > 127:
non_ascii += 1
if non_ascii > 3:
return False
return True
print(is_english('Docs To Go™ Free Office Suite'))
print(is_english('Instachat 😜'))
print(is_english('爱奇艺PPS -《欢乐颂2》电视剧热播'))
True True False
# filtering non-English apps for andriod dataset
andriod_english = []
ios_english = []
for app in andriod_clean:
name = app[0]
if is_english(name):
andriod_english.append(app)
for app in ios:
name = app[1]
if is_english(name):
ios_english.append(app)
explore_data(andriod_english, 0, 3, True)
print('\n')
explore_data(ios_english, 0, 3, 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: 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'] ['389801252', 'Instagram', '113954816', 'USD', '0.0', '2161558', '1289', '4.5', '4.0', '10.23', '12+', 'Photo & Video', '37', '0', '29', '1'] ['529479190', 'Clash of Clans', '116476928', 'USD', '0.0', '2130805', '579', '4.5', '4.5', '9.24.12', '9+', 'Games', '38', '5', '18', '1'] Number of rows: 6183 Number of columns: 16
Since the company's main source of revenue is generated from only free apps, we have to seperate the free apps from non-free apps.
# isolation of free apps vs non-free apps
andriod_final = []
ios_final = []
# isolation of free andriod apps
for row in andriod_english:
price = row[7]
if price == '0':
andriod_final.append(row)
# isolation of free ios apps
for row in ios_english:
price = row[4]
if price == '0.0':
ios_final.append(row)
print(len(andriod_final))
print(len(ios_final))
8864 3222
Because our end goal is to generate revenue from the creation of free Mobile apps(Android and App Store), and this is highly dependent on users interactivity with the applications. We then analyse our data to see what type(category or genre) of applications are user more intrested in. We build a frequecy table for this categories or genre This gives us an idea of the category of apps to focus on.
When we decide to build our application we build a minimal
Andriod version and add it to Google play. Moreso, if its response which can be gotten from user ratings is good overtime, we continue improving the app. Finally, if after a period of time, say 6months, we start making profits off the app we create an iOS version of the app and add it to App Store.
# creating a frequency table for any columns
def freq_table(dataset, index):
table = {}
total = 0
for row in dataset:
total += 1
value = row[index]
if value in table:
table[value] += 1
else:
table[value] = 1
table_percentages = {}
for key in table:
percentage = (table[key] / total) * 100
table_percentages[key] = percentage
return table_percentages
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])
return table_sorted
display_table(ios_final, 11)
Games : 58.16263190564867 Entertainment : 7.883302296710118 Photo & Video : 4.9658597144630665 Education : 3.662321539416512 Social Networking : 3.2898820608317814 Shopping : 2.60707635009311 Utilities : 2.5139664804469275 Sports : 2.1415270018621975 Music : 2.0484171322160147 Health & Fitness : 2.0173805090006205 Productivity : 1.7380509000620732 Lifestyle : 1.5828677839851024 News : 1.3345747982619491 Travel : 1.2414649286157666 Finance : 1.1173184357541899 Weather : 0.8690254500310366 Food & Drink : 0.8069522036002483 Reference : 0.5586592178770949 Business : 0.5276225946617008 Book : 0.4345127250155183 Navigation : 0.186219739292365 Medical : 0.186219739292365 Catalogs : 0.12414649286157665
[(58.16263190564867, 'Games'), (7.883302296710118, 'Entertainment'), (4.9658597144630665, 'Photo & Video'), (3.662321539416512, 'Education'), (3.2898820608317814, 'Social Networking'), (2.60707635009311, 'Shopping'), (2.5139664804469275, 'Utilities'), (2.1415270018621975, 'Sports'), (2.0484171322160147, 'Music'), (2.0173805090006205, 'Health & Fitness'), (1.7380509000620732, 'Productivity'), (1.5828677839851024, 'Lifestyle'), (1.3345747982619491, 'News'), (1.2414649286157666, 'Travel'), (1.1173184357541899, 'Finance'), (0.8690254500310366, 'Weather'), (0.8069522036002483, 'Food & Drink'), (0.5586592178770949, 'Reference'), (0.5276225946617008, 'Business'), (0.4345127250155183, 'Book'), (0.186219739292365, 'Navigation'), (0.186219739292365, 'Medical'), (0.12414649286157665, 'Catalogs')]
Analysing the prime_genre column of the iOS data we see that a little above half of the free apps on iOS are in the category of "Games"58.16%
which is followed by "Entertainment"7.88%
and "Photo & Video" with 4.96%
.
The general impression gotten is that apps(free apps) on iOS is highly dominated by fun apps which is mostly used for entertainment, seeing that the top 3 apps are mostly re-creational apps and can be used by almost anyone(including children). Also, it also shows that sports, music and social networking apps have a reasonbly high number too on App Store. However, apps designed for practical purposes(education, shopping, utilities and more) have a significantly low amount relative to entertainment apps.
This analysis gotten from this data can't be generalized for the apps in App Store because, its only focus was on free apps and no focus on non-free apps. The existence of a large number of apps in a particular genre doesn't imply a high demand for that particular apps in that particular genre because the demand might not be the same as the offer.
display_table(andriod_final, 1) # category
FAMILY : 18.907942238267147 GAME : 9.724729241877256 TOOLS : 8.461191335740072 BUSINESS : 4.591606498194946 LIFESTYLE : 3.9034296028880866 PRODUCTIVITY : 3.892148014440433 FINANCE : 3.7003610108303246 MEDICAL : 3.531137184115524 SPORTS : 3.395758122743682 PERSONALIZATION : 3.3167870036101084 COMMUNICATION : 3.2378158844765346 HEALTH_AND_FITNESS : 3.0798736462093865 PHOTOGRAPHY : 2.944494584837545 NEWS_AND_MAGAZINES : 2.7978339350180503 SOCIAL : 2.6624548736462095 TRAVEL_AND_LOCAL : 2.33528880866426 SHOPPING : 2.2450361010830324 BOOKS_AND_REFERENCE : 2.1435018050541514 DATING : 1.861462093862816 VIDEO_PLAYERS : 1.7937725631768955 MAPS_AND_NAVIGATION : 1.3989169675090252 FOOD_AND_DRINK : 1.2409747292418771 EDUCATION : 1.1620036101083033 ENTERTAINMENT : 0.9589350180505415 LIBRARIES_AND_DEMO : 0.9363718411552346 AUTO_AND_VEHICLES : 0.9250902527075812 HOUSE_AND_HOME : 0.8235559566787004 WEATHER : 0.8009927797833934 EVENTS : 0.7107400722021661 PARENTING : 0.6543321299638989 ART_AND_DESIGN : 0.6430505415162455 COMICS : 0.6204873646209386 BEAUTY : 0.5979241877256317
[(18.907942238267147, 'FAMILY'), (9.724729241877256, 'GAME'), (8.461191335740072, 'TOOLS'), (4.591606498194946, 'BUSINESS'), (3.9034296028880866, 'LIFESTYLE'), (3.892148014440433, 'PRODUCTIVITY'), (3.7003610108303246, 'FINANCE'), (3.531137184115524, 'MEDICAL'), (3.395758122743682, 'SPORTS'), (3.3167870036101084, 'PERSONALIZATION'), (3.2378158844765346, 'COMMUNICATION'), (3.0798736462093865, 'HEALTH_AND_FITNESS'), (2.944494584837545, 'PHOTOGRAPHY'), (2.7978339350180503, 'NEWS_AND_MAGAZINES'), (2.6624548736462095, 'SOCIAL'), (2.33528880866426, 'TRAVEL_AND_LOCAL'), (2.2450361010830324, 'SHOPPING'), (2.1435018050541514, 'BOOKS_AND_REFERENCE'), (1.861462093862816, 'DATING'), (1.7937725631768955, 'VIDEO_PLAYERS'), (1.3989169675090252, 'MAPS_AND_NAVIGATION'), (1.2409747292418771, 'FOOD_AND_DRINK'), (1.1620036101083033, 'EDUCATION'), (0.9589350180505415, 'ENTERTAINMENT'), (0.9363718411552346, 'LIBRARIES_AND_DEMO'), (0.9250902527075812, 'AUTO_AND_VEHICLES'), (0.8235559566787004, 'HOUSE_AND_HOME'), (0.8009927797833934, 'WEATHER'), (0.7107400722021661, 'EVENTS'), (0.6543321299638989, 'PARENTING'), (0.6430505415162455, 'ART_AND_DESIGN'), (0.6204873646209386, 'COMICS'), (0.5979241877256317, 'BEAUTY')]
The account of this analysis shows that the apps for practical purposes take a lead here, such as Family, tools, lifestyle and more. The most common genre in the Category column of the googleplay dataset are in order: "Family"18.90%
, "Game"9.72
and "Tools"8.46
. Also, the gap between the number of apps created in a particular genre in relation to apps in other genres' is relatively.
display_table(andriod_final, 9) # Genres
Tools : 8.449909747292418 Entertainment : 6.069494584837545 Education : 5.347472924187725 Business : 4.591606498194946 Productivity : 3.892148014440433 Lifestyle : 3.892148014440433 Finance : 3.7003610108303246 Medical : 3.531137184115524 Sports : 3.463447653429603 Personalization : 3.3167870036101084 Communication : 3.2378158844765346 Action : 3.1024368231046933 Health & Fitness : 3.0798736462093865 Photography : 2.944494584837545 News & Magazines : 2.7978339350180503 Social : 2.6624548736462095 Travel & Local : 2.3240072202166067 Shopping : 2.2450361010830324 Books & Reference : 2.1435018050541514 Simulation : 2.0419675090252705 Dating : 1.861462093862816 Arcade : 1.8501805054151623 Video Players & Editors : 1.7712093862815883 Casual : 1.7599277978339352 Maps & Navigation : 1.3989169675090252 Food & Drink : 1.2409747292418771 Puzzle : 1.128158844765343 Racing : 0.9927797833935018 Role Playing : 0.9363718411552346 Libraries & Demo : 0.9363718411552346 Auto & Vehicles : 0.9250902527075812 Strategy : 0.9138086642599278 House & Home : 0.8235559566787004 Weather : 0.8009927797833934 Events : 0.7107400722021661 Adventure : 0.6768953068592057 Comics : 0.6092057761732852 Beauty : 0.5979241877256317 Art & Design : 0.5979241877256317 Parenting : 0.4963898916967509 Card : 0.45126353790613716 Casino : 0.42870036101083037 Trivia : 0.41741877256317694 Educational;Education : 0.39485559566787 Board : 0.3835740072202166 Educational : 0.3722924187725632 Education;Education : 0.33844765342960287 Word : 0.2594765342960289 Casual;Pretend Play : 0.236913357400722 Music : 0.2030685920577617 Racing;Action & Adventure : 0.16922382671480143 Puzzle;Brain Games : 0.16922382671480143 Entertainment;Music & Video : 0.16922382671480143 Casual;Brain Games : 0.13537906137184114 Casual;Action & Adventure : 0.13537906137184114 Arcade;Action & Adventure : 0.12409747292418773 Action;Action & Adventure : 0.10153429602888085 Educational;Pretend Play : 0.09025270758122744 Simulation;Action & Adventure : 0.078971119133574 Parenting;Education : 0.078971119133574 Entertainment;Brain Games : 0.078971119133574 Board;Brain Games : 0.078971119133574 Parenting;Music & Video : 0.06768953068592057 Educational;Brain Games : 0.06768953068592057 Casual;Creativity : 0.06768953068592057 Art & Design;Creativity : 0.06768953068592057 Education;Pretend Play : 0.056407942238267145 Role Playing;Pretend Play : 0.04512635379061372 Education;Creativity : 0.04512635379061372 Role Playing;Action & Adventure : 0.033844765342960284 Puzzle;Action & Adventure : 0.033844765342960284 Entertainment;Creativity : 0.033844765342960284 Entertainment;Action & Adventure : 0.033844765342960284 Educational;Creativity : 0.033844765342960284 Educational;Action & Adventure : 0.033844765342960284 Education;Music & Video : 0.033844765342960284 Education;Brain Games : 0.033844765342960284 Education;Action & Adventure : 0.033844765342960284 Adventure;Action & Adventure : 0.033844765342960284 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
[(8.449909747292418, 'Tools'), (6.069494584837545, 'Entertainment'), (5.347472924187725, 'Education'), (4.591606498194946, 'Business'), (3.892148014440433, 'Productivity'), (3.892148014440433, 'Lifestyle'), (3.7003610108303246, 'Finance'), (3.531137184115524, 'Medical'), (3.463447653429603, 'Sports'), (3.3167870036101084, 'Personalization'), (3.2378158844765346, 'Communication'), (3.1024368231046933, 'Action'), (3.0798736462093865, 'Health & Fitness'), (2.944494584837545, 'Photography'), (2.7978339350180503, 'News & Magazines'), (2.6624548736462095, 'Social'), (2.3240072202166067, 'Travel & Local'), (2.2450361010830324, 'Shopping'), (2.1435018050541514, 'Books & Reference'), (2.0419675090252705, 'Simulation'), (1.861462093862816, 'Dating'), (1.8501805054151623, 'Arcade'), (1.7712093862815883, 'Video Players & Editors'), (1.7599277978339352, 'Casual'), (1.3989169675090252, 'Maps & Navigation'), (1.2409747292418771, 'Food & Drink'), (1.128158844765343, 'Puzzle'), (0.9927797833935018, 'Racing'), (0.9363718411552346, 'Role Playing'), (0.9363718411552346, 'Libraries & Demo'), (0.9250902527075812, 'Auto & Vehicles'), (0.9138086642599278, 'Strategy'), (0.8235559566787004, 'House & Home'), (0.8009927797833934, 'Weather'), (0.7107400722021661, 'Events'), (0.6768953068592057, 'Adventure'), (0.6092057761732852, 'Comics'), (0.5979241877256317, 'Beauty'), (0.5979241877256317, 'Art & Design'), (0.4963898916967509, 'Parenting'), (0.45126353790613716, 'Card'), (0.42870036101083037, 'Casino'), (0.41741877256317694, 'Trivia'), (0.39485559566787, 'Educational;Education'), (0.3835740072202166, 'Board'), (0.3722924187725632, 'Educational'), (0.33844765342960287, 'Education;Education'), (0.2594765342960289, 'Word'), (0.236913357400722, 'Casual;Pretend Play'), (0.2030685920577617, 'Music'), (0.16922382671480143, 'Racing;Action & Adventure'), (0.16922382671480143, 'Puzzle;Brain Games'), (0.16922382671480143, 'Entertainment;Music & Video'), (0.13537906137184114, 'Casual;Brain Games'), (0.13537906137184114, 'Casual;Action & Adventure'), (0.12409747292418773, 'Arcade;Action & Adventure'), (0.10153429602888085, 'Action;Action & Adventure'), (0.09025270758122744, 'Educational;Pretend Play'), (0.078971119133574, 'Simulation;Action & Adventure'), (0.078971119133574, 'Parenting;Education'), (0.078971119133574, 'Entertainment;Brain Games'), (0.078971119133574, 'Board;Brain Games'), (0.06768953068592057, 'Parenting;Music & Video'), (0.06768953068592057, 'Educational;Brain Games'), (0.06768953068592057, 'Casual;Creativity'), (0.06768953068592057, 'Art & Design;Creativity'), (0.056407942238267145, 'Education;Pretend Play'), (0.04512635379061372, 'Role Playing;Pretend Play'), (0.04512635379061372, 'Education;Creativity'), (0.033844765342960284, 'Role Playing;Action & Adventure'), (0.033844765342960284, 'Puzzle;Action & Adventure'), (0.033844765342960284, 'Entertainment;Creativity'), (0.033844765342960284, 'Entertainment;Action & Adventure'), (0.033844765342960284, 'Educational;Creativity'), (0.033844765342960284, 'Educational;Action & Adventure'), (0.033844765342960284, 'Education;Music & Video'), (0.033844765342960284, 'Education;Brain Games'), (0.033844765342960284, 'Education;Action & Adventure'), (0.033844765342960284, 'Adventure;Action & Adventure'), (0.02256317689530686, '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.01128158844765343, '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')]
genre_freq = freq_table(ios_final, -5)
for genre in genre_freq:
total = 0
len_genre = 0
for row in ios_final:
genre_app = row[-5]
if genre_app == genre:
n_ratings = float(row[5])
total += n_ratings
len_genre += 1
avg_user_ratings = total/len_genre
print(genre, ':', avg_user_ratings)
Book : 39758.5 Travel : 28243.8 Entertainment : 14029.830708661417 Weather : 52279.892857142855 Sports : 23008.898550724636 Finance : 31467.944444444445 Business : 7491.117647058823 Productivity : 21028.410714285714 Food & Drink : 33333.92307692308 Photo & Video : 28441.54375 Social Networking : 71548.34905660378 Navigation : 86090.33333333333 Education : 7003.983050847458 Lifestyle : 16485.764705882353 Shopping : 26919.690476190477 Games : 22788.6696905016 Reference : 74942.11111111111 Music : 57326.530303030304 News : 21248.023255813954 Medical : 612.0 Health & Fitness : 23298.015384615384 Catalogs : 4004.0 Utilities : 18684.456790123455
The the analysis show that navigational apps have the highest number of users.
display_table(andriod_final, 5)
1,000,000+ : 15.726534296028879 100,000+ : 11.552346570397113 10,000,000+ : 10.548285198555957 10,000+ : 10.198555956678701 1,000+ : 8.393501805054152 100+ : 6.915613718411552 5,000,000+ : 6.825361010830325 500,000+ : 5.561823104693141 50,000+ : 4.7721119133574 5,000+ : 4.512635379061372 10+ : 3.5424187725631766 500+ : 3.2490974729241873 50,000,000+ : 2.3014440433213 100,000,000+ : 2.1322202166064983 50+ : 1.917870036101083 5+ : 0.78971119133574 1+ : 0.5076714801444043 500,000,000+ : 0.2707581227436823 1,000,000,000+ : 0.22563176895306858 0+ : 0.04512635379061372 0 : 0.01128158844765343
[(15.726534296028879, '1,000,000+'), (11.552346570397113, '100,000+'), (10.548285198555957, '10,000,000+'), (10.198555956678701, '10,000+'), (8.393501805054152, '1,000+'), (6.915613718411552, '100+'), (6.825361010830325, '5,000,000+'), (5.561823104693141, '500,000+'), (4.7721119133574, '50,000+'), (4.512635379061372, '5,000+'), (3.5424187725631766, '10+'), (3.2490974729241873, '500+'), (2.3014440433213, '50,000,000+'), (2.1322202166064983, '100,000,000+'), (1.917870036101083, '50+'), (0.78971119133574, '5+'), (0.5076714801444043, '1+'), (0.2707581227436823, '500,000,000+'), (0.22563176895306858, '1,000,000,000+'), (0.04512635379061372, '0+'), (0.01128158844765343, '0')]
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(andriod_final, 5) # the installs
1,000,000+ : 15.726534296028879 100,000+ : 11.552346570397113 10,000,000+ : 10.548285198555957 10,000+ : 10.198555956678701 1,000+ : 8.393501805054152 100+ : 6.915613718411552 5,000,000+ : 6.825361010830325 500,000+ : 5.561823104693141 50,000+ : 4.7721119133574 5,000+ : 4.512635379061372 10+ : 3.5424187725631766 500+ : 3.2490974729241873 50,000,000+ : 2.3014440433213 100,000,000+ : 2.1322202166064983 50+ : 1.917870036101083 5+ : 0.78971119133574 1+ : 0.5076714801444043 500,000,000+ : 0.2707581227436823 1,000,000,000+ : 0.22563176895306858 0+ : 0.04512635379061372 0 : 0.01128158844765343
[(15.726534296028879, '1,000,000+'), (11.552346570397113, '100,000+'), (10.548285198555957, '10,000,000+'), (10.198555956678701, '10,000+'), (8.393501805054152, '1,000+'), (6.915613718411552, '100+'), (6.825361010830325, '5,000,000+'), (5.561823104693141, '500,000+'), (4.7721119133574, '50,000+'), (4.512635379061372, '5,000+'), (3.5424187725631766, '10+'), (3.2490974729241873, '500+'), (2.3014440433213, '50,000,000+'), (2.1322202166064983, '100,000,000+'), (1.917870036101083, '50+'), (0.78971119133574, '5+'), (0.5076714801444043, '1+'), (0.2707581227436823, '500,000,000+'), (0.22563176895306858, '1,000,000,000+'), (0.04512635379061372, '0+'), (0.01128158844765343, '0')]
One major issue with this column data is that the values given in each column are open ended values e.g 1000+, this value could mean 1500, 2000, 5000 or more. However we would estimate each value given as that precise value. e.g 1000+ = 1000, and use it in our analysis. This would still give us an idea of what we seek.
category_andriod = freq_table(andriod_final, 1)
for category in category_andriod:
total = 0
len_category = 0
for row in andriod_final:
category_app = row[1]
if category_app == category:
n_installs = row[5]
n_installs = n_installs.replace(',', '')
n_installs = n_installs.replace('+', '')
total += float(n_installs)
len_category += 1
avg_n_installs = total / len_category
print(category, ':', avg_n_installs)
COMMUNICATION : 38456119.167247385 TOOLS : 10801391.298666667 FOOD_AND_DRINK : 1924897.7363636363 COMICS : 817657.2727272727 TRAVEL_AND_LOCAL : 13984077.710144928 BUSINESS : 1712290.1474201474 EVENTS : 253542.22222222222 ART_AND_DESIGN : 1986335.0877192982 WEATHER : 5074486.197183099 VIDEO_PLAYERS : 24727872.452830188 HEALTH_AND_FITNESS : 4188821.9853479853 EDUCATION : 1833495.145631068 ENTERTAINMENT : 11640705.88235294 SHOPPING : 7036877.311557789 HOUSE_AND_HOME : 1331540.5616438356 FAMILY : 3695641.8198090694 SOCIAL : 23253652.127118643 LIBRARIES_AND_DEMO : 638503.734939759 PRODUCTIVITY : 16787331.344927534 BEAUTY : 513151.88679245283 LIFESTYLE : 1437816.2687861272 DATING : 854028.8303030303 BOOKS_AND_REFERENCE : 8767811.894736841 PARENTING : 542603.6206896552 NEWS_AND_MAGAZINES : 9549178.467741935 FINANCE : 1387692.475609756 PERSONALIZATION : 5201482.6122448975 MEDICAL : 120550.61980830671 GAME : 15588015.603248259 PHOTOGRAPHY : 17840110.40229885 SPORTS : 3638640.1428571427 MAPS_AND_NAVIGATION : 4056941.7741935486 AUTO_AND_VEHICLES : 647317.8170731707
Based on tbe data analysed it shows that Communicaitons apps have the highest number of users. Therefore the most likely genre of app to be developed should be a communication app since it's an app which can be used by almost anyone (Adults and children)