<jupyter_start><jupyter_text>Finding Profitable free apps for IOS and Android The company build only free download and install apps. The only profit is form in-app adds. This mean more users and installers who see the ads, more profit will the company have.The goal of this project is to help the company developers to find out what types of apps attracts more usersThere is almost 4 million apps in both Appstore and Google play. It is a big data so we only want to use the fraction of it.We will use two smaller data sets for this projects:First one is for android apps, approximately 10,000 apps [Link](https://www.kaggle.com/lava18/google-play-store-apps/home)And the second one is for IOS apps, approximately 7,000 apps [Link](https://www.kaggle.com/ramamet4/app-store-apple-data-set-10k-apps/home)We start with writing exploring data function which makes observing the data more easer<jupyter_code>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('\n') # adds a new (empty) line after each row<jupyter_output><empty_output><jupyter_text>Blow we first imported the necessary modulesWe defined the 'open_file' function which is responsible for opening .csv files and return the data as a listAs you can see in we printed some rows from each data sets and printed the number of rows and columns for each data sets<jupyter_code>from csv import reader

appstore_file_name = 'AppleStore.csv'
googleplaystore_file_name = 'googleplaystore.csv'

def open_file(file_name):
    opened_file = open(file_name, encoding = 'utf8')
    read_file = reader(opened_file)
    dataset = list(read_file)
    return dataset[1:], dataset[0:1]



data_appstore, appstore_header = open_file(appstore_file_name)
data_google, google_header = open_file(googleplaystore_file_name)

print(appstore_header)
print("\n")
explore_data(data_appstore, 0, 3, rows_and_columns = True)


print(google_header)
print("\n")
explore_data(data_google, 0, 3, rows_and_columns = True)<jupyter_output>[['', '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']]


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


[['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', [...]<jupyter_text>As mentioned in the discussion page of the data set there is a wrong data in the row 10473 from the 'googleplayestore' data set. we printed that row in blow as you can see and then in the next cell we deleted the wrong data<jupyter_code>explore_data(data_google, 10472, 10473)
del data_google[10472]<jupyter_output><empty_output><jupyter_text>There is a lot of duplicated applications in data sets as you can see as an example blow Instagram app repeated 4 times in 'googleplaystore' data set<jupyter_code>for app in data_google:
    name = app[0]
    if name == 'Instagram':
        print(app)<jupyter_output>['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']<jupyter_text>There is 1181 duplicated app in 'googleplayestore' data set. The code blow is responsible to calculate this number as you can see.We need to remove duplicated apps from our data set.The best ways is to keep the row with highest number of reviews because it indicates that data is the latest one and it is more valuable than old dates with low number of reviews<jupyter_code>duplicates = []
uniques = []
for app in data_google:
    name = app[0]
    if name in uniques:
        duplicates.append(name)
    else:
        uniques.append(name)
            
print("numer of duplicated apps is: ", len(duplicates))
print("\n")
#print(uniques)<jupyter_output>numer of duplicated apps is:  1181<jupyter_text>In this important phase we first we want to indicate the rows for same apps with highest number of reviews.We first define an empty dictionaryThen we iterate over our googlepalay data setIf the apps name is already in the dictionary we check if it is the app with high number of reviews if not we replay the number with new one. In this case we have highest number of reviews for each apps which will be used in next step<jupyter_code>reviews_max = {}
for apps in data_google:
    name = apps[0]
    n_reviews = float(apps[3])
    if name in reviews_max:
        if reviews_max[name] < n_reviews:
            reviews_max[name] = n_reviews
    elif name not in reviews_max:
        reviews_max[name] = n_reviews
        

print(len(reviews_max))<jupyter_output>9659<jupyter_text>As we can see there is 9659 unique apps from the lengths of 'reviews_max' dictionary.In the next step we make our new and clean data set out of old data setFor each row we compare number of reviews with max reviews if it is equal to maximum number we add row to new data setWe add that particular app to 'already_added' list to ensure not to add it again and make duplicates<jupyter_code>data_google_clean = []
already_added = []

for apps in data_google:
    name = apps[0]
    n_reviews = float(apps[3])
    
    if n_reviews == reviews_max[name] and name not in already_added:
        data_google_clean.append(apps)
        already_added.append(name)
        
        
print(len(data_google_clean))
print(data_google_clean[0:3])<jupyter_output>9659
[['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']]<jupyter_text>In the code blow we just defined a function which is responsible to detect non English strings by simply checking Ascii number<jupyter_code>def english_or_not_test(a_string):
    for character in a_string:
        if ord(character) > 127:
            return False
    return True
        

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

print(ord('™'))
print(ord('😜'))<jupyter_output>True
False
False
False
8482
128540<jupyter_text>As we can see in above there is a problem in our function it detect English name with some characters like emoji's as a non-English name. Because as we can see the Ascii number for some of them in above the Ascii is higher than 127. To solve this problem we check if there is more than 3 characters with Ascii number higher than 127 then the name is non-English. This prevent a lot of data loss.<jupyter_code>def english_or_not(a_string):
    numb = 0
    for character in a_string:
        if ord(character) > 127:
            numb +=1
            if numb > 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 😜'))<jupyter_output>True
False
True
True<jupyter_text>Finally to get our English data sets we apply our English name detector function to each row of each data sets and keep only row with English app names the new numbers of rows demonstrated as you can see<jupyter_code>data_google_english = []
data_appstore_english = []

for apps in data_google_clean:
    name = apps[0]
    if (english_or_not(name)):
        data_google_english.append(apps)
        
for apps in data_appstore:
    name = apps[2]
    if (english_or_not(name)):
        data_appstore_english.append(apps)
        
print(len(data_appstore))
explore_data(data_google_english,0,3, True)
explore_data(data_appstore_english,0,3, True)<jupyter_output>7197
['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


['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',[...]<jupyter_text>Now it is the time to filter free apps.In the code blow we check the price for each row and keep the rows with 0.0 pricefor google paly data set there was a problem about "$" sign in some rows and as you can see we first check for presence of the sign in the string then only change the rest of string to float numberAt last we showed final number of rows for final data sets<jupyter_code>google_final = []
appstore_final = []

for apps in data_google_english:
    price_string = apps[7]
    if price_string[0] == '$':
        price_string = price_string[1:]
        price = float(price_string)
    else:
        price = float(price_string)
    if price == 0.0:
        google_final.append(apps)
        
for apps in data_appstore_english:
    price = float(apps[5])
    if price == 0.0:
        appstore_final.append(apps)
        
        
explore_data(google_final,0,3, True)
explore_data(appstore_final,0,3, True)<jupyter_output>['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: 8864
Number of columns: 13


['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 Sh[...]<jupyter_text>The company policy for designing apps is: 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 develop it further.  3- If the app is profitable after six months, we build an iOS version of the app and add it to the App Store.  Our goal is to find apps which are successful on both markets  We will begin by building frequency tables for a few columns to see what the most common genres for each market are  We first print a few rows with headers from each data sets to give us insights about which columns are we going to make frequency table for that.  we are going to build frequency tables for the prime_genre column of App store data set and for the Genres and Category columns of the google play data set<jupyter_code>print(google_header)
print("\n")
explore_data(google_final, 0, 3, rows_and_columns = True)

print(appstore_header)
print("\n")
explore_data(appstore_final, 0, 3, rows_and_columns = True)<jupyter_output>[['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']


['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: 8864
Number of columns: 13


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


['2'[...]<jupyter_text>First we defined a function which is responsible to generate frequency table and returns dictionary as tables.<jupyter_code>def freq_table(dataset, index):
    table = {}
    total = 0
    for apps in dataset:
        total += 1
        name = apps[index]
        if name in table:
            table[name] +=1
        else:
            table[name] = 1
    
    tabel_percentage = {}
    for key in table:
        percentage = (table[key] / total) * 100
        tabel_percentage[key] = percentage 
        
    return tabel_percentage<jupyter_output><empty_output><jupyter_text>Blow is a helper function which uses 'freq_table' function then uses the generated dictionary and makes list of tuples from it. Because in this case we can use sorted function to sort the frequency tables. Sorted built in function is not good with dictionaries<jupyter_code>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])<jupyter_output><empty_output><jupyter_text>We use the function above to display sorted frequency tables for the' prime_genre' column of App store data set and for the Genres and Category columns of the google play data set<jupyter_code># for the prime_genre column of App store data set
print("for the prime_genre column of App store data set \n")
print("\n")
display_table(appstore_final, 12)
print("\n")<jupyter_output>for the prime_genre column of App store data set 



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<jupyter_text>Analysis for 'prime_genre' column of the App Store data set:The most common genre is Games with almost 60% of English apps and the runner-up with far distance is Entertainment apps with almost 8% followed by photos & video with almost 5% and etc. General impression about the App store English apps is most of the apps is for entertainment (games, photo and video, social networking, sports, music) rather than for practical purpose (education, shopping, utilities, productivity, lifestyle)However the number of fun apps do not imply that they have great number of users<jupyter_code># for Category column of the google play data set
print("for Category column of the google play data set \n")
print("\n")
display_table(google_final, 1)
print("\n")
# for Genres column of the google play data set
print(" for Genres column of the google play data set \n")
print("\n")
display_table(google_final, 9)
print("\n")<jupyter_output>for Genres column of the google play data set 



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[...]<jupyter_text>Analysis for Category and Genres columns of google play store English apps:As we can see here is a bit different from App store there is a balance between practical apps and fun apps Therefore as we analyzed App sore is mostly have apps for fun rather than practical apps but the deal in google play store is a bit different it actually balanced between practical and fun appsBut we can't state from this analysis that which apps have more users we need more investigationFinding most popular apps:To find most popular apps (most users) we need to calculate the average number of installs for each app genre. There is an installs columns in google play data set. But there is no such that column in App store data set we can use 'rating_count_tot' column for this purpose.In the code blow we computed average number of users for genre in App store data se also we sorted the table to have better view<jupyter_code>prime_genre = freq_table(appstore_final, 12)

popular_apps_appstore = {}

for genre in prime_genre:
    Total = 0
    Lenghs = 0
    
    for apps in appstore_final:
        name = apps[12]
        if name == genre:
            Total += float(apps[6])
            Lenghs += 1
            
    Avergae_per_genre = Total / Lenghs
    popular_apps_appstore[genre] = Avergae_per_genre
    
table_display = []
for key in popular_apps_appstore:
    key_val_as_tuple = (popular_apps_appstore[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])<jupyter_output>Navigation : 86090.33333333333
Reference : 74942.11111111111
Social Networking : 71548.34905660378
Music : 57326.530303030304
Weather : 52279.892857142855
Book : 39758.5
Food & Drink : 33333.92307692308
Finance : 31467.944444444445
Photo & Video : 28441.54375
Travel : 28243.8
Shopping : 26919.690476190477
Health & Fitness : 23298.015384615384
Sports : 23008.898550724636
Games : 22788.6696905016
News : 21248.023255813954
Productivity : 21028.410714285714
Utilities : 18684.456790123455
Lifestyle : 16485.764705882353
Entertainment : 14029.830708661417
Business : 7491.117647058823
Education : 7003.983050847458
Catalogs : 4004.0
Medical : 612.0<jupyter_text>As you can see in results the navigation apps has the most users in compare to others after that reference apps following by Social Networking apps. but as we know there is just few very famous apps like Waze and Google map for navigation and Facebook, Instagram and Twitter witch have numerous users and that makes both genres average very high.In the next step we are going to find the average number of installations for google play apps witch all of the indicated like these: 100,000+. which is not precise but we leave numbers like that and we will try to remove "+" an "," for each number.<jupyter_code>catagory_table = freq_table(google_final, 1)
#print(catagory_table)

popular_apps_google = {}

for catagory in catagory_table:
    Total = 0
    Lenghs = 0
    for apps in google_final:
        name = apps[1]
        n_installs = apps[5]
        n_installs = n_installs.replace('+', '')
        n_installs = n_installs.replace(',', '')
        n_installs = float(n_installs)
        if name == catagory:
            Total += n_installs
            Lenghs += 1
         
    avrage_installs = Total / Lenghs
    popular_apps_google[catagory] = avrage_installs
    
table_display = []
for key in popular_apps_google:
    key_val_as_tuple = (popular_apps_google[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])<jupyter_output>COMMUNICATION : 38456119.167247385
VIDEO_PLAYERS : 24727872.452830188
SOCIAL : 23253652.127118643
PHOTOGRAPHY : 17840110.40229885
PRODUCTIVITY : 16787331.344927534
GAME : 15588015.603248259
TRAVEL_AND_LOCAL : 13984077.710144928
ENTERTAINMENT : 11640705.88235294
TOOLS : 10801391.298666667
NEWS_AND_MAGAZINES : 9549178.467741935
BOOKS_AND_REFERENCE : 8767811.894736841
SHOPPING : 7036877.311557789
PERSONALIZATION : 5201482.6122448975
WEATHER : 5074486.197183099
HEALTH_AND_FITNESS : 4188821.9853479853
MAPS_AND_NAVIGATION : 4056941.7741935486
FAMILY : 3695641.8198090694
SPORTS : 3638640.1428571427
ART_AND_DESIGN : 1986335.0877192982
FOOD_AND_DRINK : 1924897.7363636363
EDUCATION : 1833495.145631068
BUSINESS : 1712290.1474201474
LIFESTYLE : 1437816.2687861272
FINANCE : 1387692.475609756
HOUSE_AND_HOME : 1331540.5616438356
DATING : 854028.8303030303
COMICS : 817657.2727272727
AUTO_AND_VEHICLES : 647317.8170731707
LIBRARIES_AND_DEMO : 638503.734939759
PARENTING : 542603.6206896552
BEAUTY : 51315[...]<jupyter_text>As you can see in above the communication apps have the most average installs then video players and then social category. The huge number for communication is because of few very popular apps like WhatsApp Facebook skype and etc.Next for more information we are going to compute most popular apps with genre columns<jupyter_code>genre_table = freq_table(google_final, 9)
#print(catagory_table

popular_apps_google_2 = {}

for genre in genre_table:
    Total = 0
    Lenghs = 0
    for apps in google_final:
        name = apps[9]
        n_installs = apps[5]
        n_installs = n_installs.replace('+', '')
        n_installs = n_installs.replace(',', '')
        n_installs = float(n_installs)
        if name == genre:
            Total += n_installs
            Lenghs += 1
         
    avrage_installs_2 = Total / Lenghs
    popular_apps_google_2[genre] = avrage_installs_2
    
table_display = []
for key in popular_apps_google_2:
    key_val_as_tuple = (popular_apps_google_2[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])<jupyter_output>Communication : 38456119.167247385
Adventure;Action & Adventure : 35333333.333333336
Video Players & Editors : 24947335.796178345
Social : 23253652.127118643
Arcade : 22888365.48780488
Casual : 19569221.602564104
Puzzle;Action & Adventure : 18366666.666666668
Photography : 17840110.40229885
Educational;Action & Adventure : 17016666.666666668
Productivity : 16787331.344927534
Racing : 15910645.681818182
Travel & Local : 14051476.145631067
Casual;Action & Adventure : 12916666.666666666
Action : 12603588.872727273
Strategy : 11199902.530864198
Tools : 10802461.246995995
Tools;Education : 10000000.0
Role Playing;Brain Games : 10000000.0
Lifestyle;Pretend Play : 10000000.0
Casual;Music & Video : 10000000.0
Card;Action & Adventure : 10000000.0
Adventure;Education : 10000000.0
News & Magazines : 9549178.467741935
Music : 9445583.333333334
Educational;Pretend Play : 9375000.0
Puzzle;Brain Games : 9280666.666666666
Word : 9094458.695652174
Racing;Action & Adventure : 8816666.666666666
Books & R[...]<jupyter_text>Again as we can see the top popular apps is communication. It shows market dominated mostly by very huge and popular apps like Facebook and etc. so it is very difficult to compete with them in this market so we should choose other categories<jupyter_code>app_music = []
for apps in google_final:
    if apps[9] == 'Casual;Music & Video' or apps[9] == 'Music' or apps[9] == 'Video Players & Editors;Music & Video':
        app_music.append(apps)
        print(apps[0], ': ', apps[5])

#list_music = sorted(app_music, reverse = True)

#for apps in list_music:
 

for apps in appstore_final:
    if apps[12] == 'Music' :
        print(apps[2], ': ', apps[6])<jupyter_output>Pandora - Music & Radio :  1126879
Shazam - Discover music, artists, videos & lyrics :  402925
iHeartRadio – Free Music & Radio Stations :  293228
Deezer - Listen to your Favorite Music & Playlists :  4677
Sonos Controller :  48905
NRJ Radio :  38
radio.de - Der Radioplayer :  64
Spotify Music :  878563
SoundCloud - Music & Audio :  135744
Sing Karaoke Songs Unlimited with StarMaker :  26227
SoundHound Song Search & Music Player :  82602
Ringtones for iPhone & Ringtone Maker :  25403
Coach Guitar - Lessons & Easy Tabs For Beginners :  2416
TuneIn Radio - MLB NBA Audiobooks Podcasts Music :  110420
Magic Piano by Smule :  131695
QQ音乐HD :  224
The Singing Machine Mobile Karaoke App :  130
Bandsintown Concerts :  30845
PetitLyrics :  0
edjing Mix:DJ turntable to remix and scratch music :  13580
Smule Sing! :  119316
Amazon Music :  106235
AutoRap by Smule :  18202
My Mixtapez Music :  26286
Certified Mixtapes - Hip Hop Albums & Mixtapes :  9975
Karaoke - Sing Karaoke, Unlimited Songs! :  [...]
{'fraction_non_alphanumeric': 0.11070919653622711, 'fraction_numerical': 0.11688406591399028, 'mean_word_length': 4.4981920449979915, 'pattern_counts': {'":': 0, '<': 66, '<?xml version=': 0, '>': 68, 'https://': 2, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 16, 'word_list_counts': {'cursed_substrings.json': 4, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '20', 'dir': 'jupyter-structured-clean-dedup', 'id': '566386', 'license': 'MIT', 'n_tokens_mistral': 11312, 'n_tokens_neox': 9203, 'n_words': 3075, 'path': 'app_ads.ipynb', 'repo_name': 'alinasr/python_data_analyiss_fundamental', 'size': '27369'}