From d4ba7012022145043a58bfd44b5b8140c73bc9b2 Mon Sep 17 00:00:00 2001 From: junos Date: Wed, 17 Nov 2021 12:47:42 +0100 Subject: [PATCH 01/34] Add the rapids fork submodule. Reproducible Analysis Pipeline for Data Streams --- .gitmodules | 4 ++++ rapids | 1 + 2 files changed, 5 insertions(+) create mode 100644 .gitmodules create mode 160000 rapids diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..8ecc6c8 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,4 @@ +[submodule "rapids"] + path = rapids + url = https://repo.ijs.si/junoslukan/rapids.git + branch = master diff --git a/rapids b/rapids new file mode 160000 index 0000000..da633c5 --- /dev/null +++ b/rapids @@ -0,0 +1 @@ +Subproject commit da633c5d08e98bb966dc8f9e54ef9beb613c9933 From 1d65a31d8c59fe8a20e374a00be176c128f83d56 Mon Sep 17 00:00:00 2001 From: junos Date: Wed, 17 Nov 2021 12:59:12 +0100 Subject: [PATCH 02/34] Update rapids submodule. --- rapids | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rapids b/rapids index da633c5..ae8ed39 160000 --- a/rapids +++ b/rapids @@ -1 +1 @@ -Subproject commit da633c5d08e98bb966dc8f9e54ef9beb613c9933 +Subproject commit ae8ed3999f4c3d6f3bcc1bfae2faca3278bf6ad6 From c0ea17dbe3eb91bcaba4eb53380eb2620a9d22b1 Mon Sep 17 00:00:00 2001 From: junos Date: Wed, 17 Nov 2021 18:58:12 +0100 Subject: [PATCH 03/34] Update rapids. --- rapids | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rapids b/rapids index ae8ed39..4829b15 160000 --- a/rapids +++ b/rapids @@ -1 +1 @@ -Subproject commit ae8ed3999f4c3d6f3bcc1bfae2faca3278bf6ad6 +Subproject commit 4829b155d51b144171059111b352da1e4116325d From 4e87664fd6b56c4b93c618f6846872ee3b50460d Mon Sep 17 00:00:00 2001 From: junos Date: Wed, 17 Nov 2021 19:20:19 +0100 Subject: [PATCH 04/34] Force UNIX eol characters. --- rapids | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rapids b/rapids index 4829b15..ed193d2 160000 --- a/rapids +++ b/rapids @@ -1 +1 @@ -Subproject commit 4829b155d51b144171059111b352da1e4116325d +Subproject commit ed193d2290a79b7ce5e40d3645819683a4d99dc9 From 080dc1d1fea35183094a8808aee4cfd1f1758136 Mon Sep 17 00:00:00 2001 From: junos Date: Thu, 18 Nov 2021 17:22:08 +0100 Subject: [PATCH 05/34] Add instructions for RAPIDS. --- README.md | 99 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 98 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index ff7f95f..6a02bfb 100644 --- a/README.md +++ b/README.md @@ -32,4 +32,101 @@ To install: ``` DB_PASSWORD=database-password - ``` \ No newline at end of file + ``` + +# RAPIDS + +To install RAPIDS, follow the [instructions on their webpage](https://www.rapids.science/1.6/setup/installation/). + +Here, I include additional information related to the installation and specific to the STRAW2analysis project. +The installation was tested on Windows using Ubuntu 20.04 on Windows Subsystem for Linux ([WSL2](https://docs.microsoft.com/en-us/windows/wsl/install)). + +## Custom configuration +### Credentials + +As mentioned under [Database in RAPIDS documentation](https://www.rapids.science/1.6/snippets/database/), a `credentials.yaml` file is needed to connect to a database. +It should contain: + +```yaml +PSQL_STRAW: + database: staw + host: 212.235.208.113 + password: password + port: 5432 + user: staw_db +``` + +where`password` needs to be specified as well. + +## Possible installation issues +### Missing dependencies for RPostgres + +To install `RPostgres` R package (used to connect to the PostgreSQL database), an error might occur: + +```text +------------------------- ANTICONF ERROR --------------------------- +Configuration failed because libpq was not found. Try installing: + * deb: libpq-dev (Debian, Ubuntu, etc) + * rpm: postgresql-devel (Fedora, EPEL) + * rpm: postgreql8-devel, psstgresql92-devel, postgresql93-devel, or postgresql94-devel (Amazon Linux) + * csw: postgresql_dev (Solaris) + * brew: libpq (OSX) +If libpq is already installed, check that either: + (i) 'pkg-config' is in your PATH AND PKG_CONFIG_PATH contains a libpq.pc file; or + (ii) 'pg_config' is in your PATH. +If neither can detect , you can set INCLUDE_DIR +and LIB_DIR manually via: + R CMD INSTALL --configure-vars='INCLUDE_DIR=... LIB_DIR=...' +--------------------------[ ERROR MESSAGE ]---------------------------- + :1:10: fatal error: libpq-fe.h: No such file or directory +compilation terminated. +``` + +The library requires `libpq` for compiling from source, so install accordingly. + +### Timezone environment variable for tidyverse (relevant for WSL2) + +One of the R packages, `tidyverse` might need access to the `TZ` environment variable during the installation. +On Ubuntu 20.04 on WSL2 this triggers the following error: + +```text +> install.packages('tidyverse') + +ERROR: configuration failed for package ‘xml2’ +System has not been booted with systemd as init system (PID 1). Can't operate. +Failed to create bus connection: Host is down +Warning in system("timedatectl", intern = TRUE) : + running command 'timedatectl' had status 1 +Error in loadNamespace(j <- i[[1L]], c(lib.loc, .libPaths()), versionCheck = vI[[j]]) : + namespace ‘xml2’ 1.3.1 is already loaded, but >= 1.3.2 is required +Calls: ... namespaceImportFrom -> asNamespace -> loadNamespace +Execution halted +ERROR: lazy loading failed for package ‘tidyverse’ +``` + +This happens because WSL2 does not use the `timedatectl` service, which provides this variable. + +```bash +~$ timedatectl +System has not been booted with systemd as init system (PID 1). Can't operate. +Failed to create bus connection: Host is down +``` + +This can be amended by setting the environment variable manually before attempting to install `tidyverse`: + +```bash +TZ='Europe/Ljubljana' +``` + +## Possible runtime issues +### Unix end of line characters + +Upon running rapids, an error might occur: + +```bash +/usr/bin/env: ‘python3\r’: No such file or directory +``` + +This is due to Windows style end of line characters. +To amend this, I added a `.gitattributes` files to force `git` to checkout `rapids` using Unix EOL characters. +If this still fails, `dos2unix` can be used to change them. From 4bb01ba871845c5868c89c939f0a78160715b681 Mon Sep 17 00:00:00 2001 From: junos Date: Wed, 24 Nov 2021 19:09:06 +0100 Subject: [PATCH 06/34] Add functions to prepare participants files. --- .idea/snakemake-settings.xml | 4 ++++ .idea/vcs.xml | 1 + rapids | 2 +- 3 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 .idea/snakemake-settings.xml diff --git a/.idea/snakemake-settings.xml b/.idea/snakemake-settings.xml new file mode 100644 index 0000000..d7d964d --- /dev/null +++ b/.idea/snakemake-settings.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 94a25f7..dbf83cf 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -2,5 +2,6 @@ + \ No newline at end of file diff --git a/rapids b/rapids index ed193d2..ab84109 160000 --- a/rapids +++ b/rapids @@ -1 +1 @@ -Subproject commit ed193d2290a79b7ce5e40d3645819683a4d99dc9 +Subproject commit ab84109d5587a4b4dff340598d3e5b7f17bc977d From c2b27aef45851bb16eb277622ccd5ad99052a82f Mon Sep 17 00:00:00 2001 From: junos Date: Wed, 24 Nov 2021 19:12:36 +0100 Subject: [PATCH 07/34] Add yaml files to submodule. --- rapids | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rapids b/rapids index ab84109..39bd244 160000 --- a/rapids +++ b/rapids @@ -1 +1 @@ -Subproject commit ab84109d5587a4b4dff340598d3e5b7f17bc977d +Subproject commit 39bd24451186f088daf4ece65eb3a333c67bd99a From 6f9b513ba098a784ccb96ef3abe7081aa4bfba52 Mon Sep 17 00:00:00 2001 From: junos Date: Mon, 29 Nov 2021 18:37:50 +0100 Subject: [PATCH 08/34] Make the participants rule run. --- README.md | 13 +++++++++++++ rapids | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6a02bfb..853557d 100644 --- a/README.md +++ b/README.md @@ -112,6 +112,15 @@ System has not been booted with systemd as init system (PID 1). Can't operate. Failed to create bus connection: Host is down ``` +and later + +```bash +Warning message: +In system("timedatectl", intern = TRUE) : + running command 'timedatectl' had status 1 +Execution halted +``` + This can be amended by setting the environment variable manually before attempting to install `tidyverse`: ```bash @@ -130,3 +139,7 @@ Upon running rapids, an error might occur: This is due to Windows style end of line characters. To amend this, I added a `.gitattributes` files to force `git` to checkout `rapids` using Unix EOL characters. If this still fails, `dos2unix` can be used to change them. + +### System has not been booted with systemd as init system (PID 1) + +See [the installation issue above](#Timezone-environment-variable-for-tidyverse-(relevant-for-WSL2)). \ No newline at end of file diff --git a/rapids b/rapids index 39bd244..b99a3c1 160000 --- a/rapids +++ b/rapids @@ -1 +1 @@ -Subproject commit 39bd24451186f088daf4ece65eb3a333c67bd99a +Subproject commit b99a3c19edfc556765a64da642ce828033dacfcb From 578f5ed5f3d3787ae39e1dfafdcc1ad4a3121718 Mon Sep 17 00:00:00 2001 From: junos Date: Wed, 1 Dec 2021 11:29:22 +0100 Subject: [PATCH 09/34] Start preparing the true usernames CSV file. --- participants/prepare_usernames_file.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 participants/prepare_usernames_file.py diff --git a/participants/prepare_usernames_file.py b/participants/prepare_usernames_file.py new file mode 100644 index 0000000..75f463c --- /dev/null +++ b/participants/prepare_usernames_file.py @@ -0,0 +1,14 @@ +import datetime + +import participants.query_db + +participants_inactive_usernames = participants.query_db.get_usernames( + tester=False, # True participants are wanted. + active=False, # They have all finished their participation. + collection_start=datetime.date.fromisoformat( + "2020-08-01" + ), # This is the timeframe of the main study. + last_upload=datetime.date.fromisoformat("2021-09-01"), +) + +print(participants_inactive_usernames.__len__()) From cf3801b1205a99b786c716e510eb538df88fffc7 Mon Sep 17 00:00:00 2001 From: junos Date: Wed, 1 Dec 2021 11:55:58 +0100 Subject: [PATCH 10/34] Import participants' wristband info. --- participants/prepare_usernames_file.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/participants/prepare_usernames_file.py b/participants/prepare_usernames_file.py index 75f463c..7614c46 100644 --- a/participants/prepare_usernames_file.py +++ b/participants/prepare_usernames_file.py @@ -1,4 +1,5 @@ import datetime +import pandas as pd import participants.query_db @@ -11,4 +12,16 @@ participants_inactive_usernames = participants.query_db.get_usernames( last_upload=datetime.date.fromisoformat("2021-09-01"), ) -print(participants_inactive_usernames.__len__()) +participants_overview_si = pd.read_csv( + "E:/STRAWbaseline/Participants_overview_Slovenia.csv", sep=";" +) +participants_overview_be = pd.read_csv( + "E:/STRAWbaseline/Participants_overview_Belgium.csv", sep=";" +) + +participants_true_si = participants_overview_si[ + participants_overview_si["Wristband_SerialNo"] != "DECLINED" +] +participants_true_be = participants_overview_be[ + participants_overview_be["SmartphoneBrand+Generation"].str.slice(0, 3) != "Not" +] From 0e6a18a660507c7a50d0db1cd0b19164ab5f89d0 Mon Sep 17 00:00:00 2001 From: junos Date: Wed, 1 Dec 2021 16:48:17 +0100 Subject: [PATCH 11/34] Prepare data for export to CSV. --- participants/prepare_usernames_file.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/participants/prepare_usernames_file.py b/participants/prepare_usernames_file.py index 7614c46..16b03d9 100644 --- a/participants/prepare_usernames_file.py +++ b/participants/prepare_usernames_file.py @@ -1,5 +1,6 @@ import datetime import pandas as pd +from pyprojroot import here import participants.query_db @@ -25,3 +26,27 @@ participants_true_si = participants_overview_si[ participants_true_be = participants_overview_be[ participants_overview_be["SmartphoneBrand+Generation"].str.slice(0, 3) != "Not" ] + +# Concatenate participants from both countries. +participants_usernames_empatica = pd.concat( + [participants_true_be, participants_true_si] +) +# Filter only the participants from the main study (queried from the database). +participants_usernames_empatica = participants_usernames_empatica[ + participants_usernames_empatica["Username"].isin(participants_inactive_usernames) +] +# Rename and select columns. +participants_usernames_empatica = participants_usernames_empatica.rename( + columns={"Username": "label", "Wristband_SerialNo": "empatica_id"} +)[["label", "empatica_id"]] +# Adapt for csv export. +participants_usernames_empatica["empatica_id"] = participants_usernames_empatica[ + "empatica_id" +].str.replace(",", ";") + +participants_usernames_empatica.to_csv( + here("rapids/data/external/main_study_participants.csv"), + header=True, + index=False, + line_terminator="\n", +) From 6eca98962f95dd12f4907ec97b4b03efdd266b83 Mon Sep 17 00:00:00 2001 From: junos Date: Wed, 1 Dec 2021 17:08:24 +0100 Subject: [PATCH 12/34] Export timezone info, too. --- features/timezone.py | 30 ++++++++++++++++++++++++++ participants/prepare_usernames_file.py | 11 ++++++++++ 2 files changed, 41 insertions(+) create mode 100644 features/timezone.py diff --git a/features/timezone.py b/features/timezone.py new file mode 100644 index 0000000..3ba9d08 --- /dev/null +++ b/features/timezone.py @@ -0,0 +1,30 @@ +from collections.abc import Collection + +import pandas as pd + +from config.models import Participant, Timezone +from setup import db_engine, session + + +def get_timezone_data(usernames: Collection) -> pd.DataFrame: + """ + Read the data from the proximity sensor table and return it in a dataframe. + + Parameters + ---------- + usernames: Collection + A list of usernames to put into the WHERE condition. + + Returns + ------- + df_proximity: pd.DataFrame + A dataframe of proximity data. + """ + query_timezone = ( + session.query(Timezone, Participant.username) + .filter(Participant.id == Timezone.participant_id) + .filter(Participant.username.in_(usernames)) + ) + with db_engine.connect() as connection: + df_timezone = pd.read_sql(query_timezone.statement, connection) + return df_timezone diff --git a/participants/prepare_usernames_file.py b/participants/prepare_usernames_file.py index 16b03d9..5d1e5d1 100644 --- a/participants/prepare_usernames_file.py +++ b/participants/prepare_usernames_file.py @@ -1,5 +1,7 @@ import datetime + import pandas as pd +from features.timezone import get_timezone_data from pyprojroot import here import participants.query_db @@ -50,3 +52,12 @@ participants_usernames_empatica.to_csv( index=False, line_terminator="\n", ) + +timezone_df = get_timezone_data(participants_inactive_usernames) + +timezone_df.to_csv( + here("rapids/data/external/timezone.csv"), + header=True, + index=False, + line_terminator="\n", +) From 7d0355d09536cf38761d1d8461c7fa67c5e7d4b7 Mon Sep 17 00:00:00 2001 From: junos Date: Wed, 1 Dec 2021 17:22:22 +0100 Subject: [PATCH 13/34] Gather usernames from DB to create CSV. --- rapids | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rapids b/rapids index b99a3c1..37b3460 160000 --- a/rapids +++ b/rapids @@ -1 +1 @@ -Subproject commit b99a3c19edfc556765a64da642ce828033dacfcb +Subproject commit 37b3460b7672f936826ced419a452a4ae65f95da From f5c17aa7ceb3624a7d218223548ff939c8bfe7e5 Mon Sep 17 00:00:00 2001 From: junos Date: Wed, 1 Dec 2021 18:14:27 +0100 Subject: [PATCH 14/34] Incorporate DB query for usernames into snakemake workflow. --- participants/prepare_usernames_file.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/participants/prepare_usernames_file.py b/participants/prepare_usernames_file.py index 5d1e5d1..8170af7 100644 --- a/participants/prepare_usernames_file.py +++ b/participants/prepare_usernames_file.py @@ -1,4 +1,10 @@ import datetime +import os +import sys + +nb_dir = os.path.split(os.getcwd())[0] +if nb_dir not in sys.path: + sys.path.append(nb_dir) import pandas as pd from features.timezone import get_timezone_data @@ -16,10 +22,10 @@ participants_inactive_usernames = participants.query_db.get_usernames( ) participants_overview_si = pd.read_csv( - "E:/STRAWbaseline/Participants_overview_Slovenia.csv", sep=";" + snakemake.params["baseline_folder"] + "Participants_overview_Slovenia.csv", sep=";" ) participants_overview_be = pd.read_csv( - "E:/STRAWbaseline/Participants_overview_Belgium.csv", sep=";" + snakemake.params["baseline_folder"]+ "Participants_overview_Belgium.csv", sep=";" ) participants_true_si = participants_overview_si[ @@ -47,7 +53,7 @@ participants_usernames_empatica["empatica_id"] = participants_usernames_empatica ].str.replace(",", ";") participants_usernames_empatica.to_csv( - here("rapids/data/external/main_study_participants.csv"), + snakemake.output["usernames_file"], header=True, index=False, line_terminator="\n", @@ -56,7 +62,7 @@ participants_usernames_empatica.to_csv( timezone_df = get_timezone_data(participants_inactive_usernames) timezone_df.to_csv( - here("rapids/data/external/timezone.csv"), + snakemake.output["timezone_file"], header=True, index=False, line_terminator="\n", From 689535e44477fb20b7b76757bc8bfd83f98c7c25 Mon Sep 17 00:00:00 2001 From: junos Date: Wed, 1 Dec 2021 18:22:56 +0100 Subject: [PATCH 15/34] Add rules for usernames and timezones. --- rapids | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rapids b/rapids index 37b3460..0b8a493 160000 --- a/rapids +++ b/rapids @@ -1 +1 @@ -Subproject commit 37b3460b7672f936826ced419a452a4ae65f95da +Subproject commit 0b8a493ff20b37fd2501224778c2894d0d170227 From 375cb10c1eb6798a4b1865dbafbc7aca2c944a15 Mon Sep 17 00:00:00 2001 From: junos Date: Wed, 8 Dec 2021 18:39:10 +0100 Subject: [PATCH 16/34] Adapt RAPIDS for our use case. --- rapids | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rapids b/rapids index 0b8a493..712ff74 160000 --- a/rapids +++ b/rapids @@ -1 +1 @@ -Subproject commit 0b8a493ff20b37fd2501224778c2894d0d170227 +Subproject commit 712ff748981b735277acd8aef3184cbdcf894fb6 From 54c712b1cd630c6be4c3b97f43c75901217552ee Mon Sep 17 00:00:00 2001 From: junos Date: Wed, 8 Dec 2021 19:20:53 +0100 Subject: [PATCH 17/34] Further adapts RAPIDS and add graphical examples. --- README.md | 2 +- images/dag_calls_nokia_example.svg | 205 +++ images/dag_full_nokia_example.svg | 1896 ++++++++++++++++++++++++++++ images/dag_participants_files.svg | 68 + rapids | 2 +- 5 files changed, 2171 insertions(+), 2 deletions(-) create mode 100644 images/dag_calls_nokia_example.svg create mode 100644 images/dag_full_nokia_example.svg create mode 100644 images/dag_participants_files.svg diff --git a/README.md b/README.md index 853557d..2738dd8 100644 --- a/README.md +++ b/README.md @@ -124,7 +124,7 @@ Execution halted This can be amended by setting the environment variable manually before attempting to install `tidyverse`: ```bash -TZ='Europe/Ljubljana' +export TZ='Europe/Ljubljana' ``` ## Possible runtime issues diff --git a/images/dag_calls_nokia_example.svg b/images/dag_calls_nokia_example.svg new file mode 100644 index 0000000..eb87131 --- /dev/null +++ b/images/dag_calls_nokia_example.svg @@ -0,0 +1,205 @@ + + + + + + +snakemake_dag + + + +0 + +all + + + +1 + +pull_phone_data +pid: nokia_0000003 +sensor: calls + + + +1->0 + + + + + +2 + +calls_episodes + + + +1->2 + + + + + +2->0 + + + + + +3 + +resample_episodes +sensor: phone_calls + + + +2->3 + + + + + +3->0 + + + + + +4 + +resample_episodes_with_datetime + + + +3->4 + + + + + +4->0 + + + + + +8 + +phone_calls_r_features +provider_key: rapids + + + +4->8 + + + + + +5 + +process_time_segments +pid: nokia_0000003 + + + +5->4 + + + + + +5->8 + + + + + +6 + +prepare_tzcodes_file + + + +6->4 + + + + + +7 + +query_usernames_device_empatica_ids + + + +7->6 + + + + + +8->0 + + + + + +9 + +join_features_from_providers +sensor_key: phone_calls + + + +8->9 + + + + + +9->0 + + + + + +10 + +merge_sensor_features_for_individual_participants + + + +9->10 + + + + + +10->0 + + + + + +11 + +merge_sensor_features_for_all_participants + + + +10->11 + + + + + +11->0 + + + + + diff --git a/images/dag_full_nokia_example.svg b/images/dag_full_nokia_example.svg new file mode 100644 index 0000000..173c5b5 --- /dev/null +++ b/images/dag_full_nokia_example.svg @@ -0,0 +1,1896 @@ + + + + + + +snakemake_dag + + + +0 + +all + + + +1 + +pull_phone_data +pid: nokia_0000003 +sensor: accelerometer + + + +1->0 + + + + + +13 + +phone_yielded_timestamps + + + +1->13 + + + + + +23 + +phone_readable_datetime + + + +1->23 + + + + + +2 + +pull_phone_data +pid: nokia_0000003 +sensor: activity_recognition + + + +2->0 + + + + + +2->13 + + + + + +30 + +phone_readable_datetime + + + +2->30 + + + + + +3 + +pull_phone_data +pid: nokia_0000003 +sensor: applications_foreground + + + +3->0 + + + + + +3->13 + + + + + +34 + +phone_readable_datetime + + + +3->34 + + + + + +4 + +pull_phone_data +pid: nokia_0000003 +sensor: applications_notifications + + + +4->0 + + + + + +4->13 + + + + + +5 + +pull_phone_data +pid: nokia_0000003 +sensor: battery + + + +5->0 + + + + + +5->13 + + + + + +44 + +battery_episodes + + + +5->44 + + + + + +6 + +pull_phone_data +pid: nokia_0000003 +sensor: bluetooth + + + +6->0 + + + + + +6->13 + + + + + +47 + +phone_readable_datetime + + + +6->47 + + + + + +7 + +pull_phone_data +pid: nokia_0000003 +sensor: calls + + + +7->0 + + + + + +7->13 + + + + + +53 + +calls_episodes + + + +7->53 + + + + + +8 + +pull_phone_data +pid: nokia_0000003 +sensor: light + + + +8->0 + + + + + +8->13 + + + + + +56 + +phone_readable_datetime + + + +8->56 + + + + + +9 + +pull_phone_data +pid: nokia_0000003 +sensor: locations + + + +9->0 + + + + + +9->13 + + + + + +63 + +process_phone_locations_types + + + +9->63 + + + + + +10 + +pull_phone_data +pid: nokia_0000003 +sensor: messages + + + +10->0 + + + + + +10->13 + + + + + +68 + +phone_readable_datetime + + + +10->68 + + + + + +11 + +pull_phone_data +pid: nokia_0000003 +sensor: screen + + + +11->0 + + + + + +11->13 + + + + + +39 + +phone_readable_datetime + + + +11->39 + + + + + +12 + +pull_phone_data +pid: nokia_0000003 +sensor: wifi_visible + + + +12->0 + + + + + +12->13 + + + + + +75 + +phone_readable_datetime + + + +12->75 + + + + + +13->0 + + + + + +14 + +phone_yielded_timestamps_with_datetime + + + +13->14 + + + + + +13->63 + + + + + +14->0 + + + + + +18 + +phone_data_yield_r_features +provider_key: rapids + + + +14->18 + + + + + +78 + +heatmap_sensors_per_minute_per_time_segment + + + +14->78 + + + + + +15 + +process_time_segments +pid: nokia_0000003 + + + +15->14 + + + + + +15->18 + + + + + +22 + +phone_accelerometer_python_features +provider_key: rapids + + + +15->22 + + + + + +15->23 + + + + + +24 + +phone_accelerometer_python_features +provider_key: panda + + + +15->24 + + + + + +26 + +phone_activity_recognition_python_features +provider_key: rapids + + + +15->26 + + + + + +27 + +resample_episodes_with_datetime + + + +15->27 + + + + + +15->30 + + + + + +32 + +phone_applications_foreground_python_features +provider_key: rapids + + + +15->32 + + + + + +15->34 + + + + + +35 + +resample_episodes_with_datetime + + + +15->35 + + + + + +15->39 + + + + + +41 + +phone_battery_python_features +provider_key: rapids + + + +15->41 + + + + + +42 + +resample_episodes_with_datetime + + + +15->42 + + + + + +46 + +phone_bluetooth_r_features +provider_key: rapids + + + +15->46 + + + + + +15->47 + + + + + +48 + +phone_bluetooth_python_features +provider_key: doryab + + + +15->48 + + + + + +50 + +phone_calls_r_features +provider_key: rapids + + + +15->50 + + + + + +51 + +resample_episodes_with_datetime + + + +15->51 + + + + + +55 + +phone_light_python_features +provider_key: rapids + + + +15->55 + + + + + +15->56 + + + + + +58 + +phone_locations_python_features +provider_key: doryab + + + +15->58 + + + + + +59 + +resample_episodes_with_datetime + + + +15->59 + + + + + +62 + +phone_locations_processed_with_datetime + + + +15->62 + + + + + +64 + +phone_locations_r_features +provider_key: barnett + + + +15->64 + + + + + +65 + +phone_locations_barnett_daily_features + + + +15->65 + + + + + +67 + +phone_messages_r_features +provider_key: rapids + + + +15->67 + + + + + +15->68 + + + + + +70 + +phone_screen_python_features +provider_key: rapids + + + +15->70 + + + + + +71 + +resample_episodes_with_datetime + + + +15->71 + + + + + +74 + +phone_wifi_visible_r_features +provider_key: rapids + + + +15->74 + + + + + +15->75 + + + + + +15->78 + + + + + +16 + +prepare_tzcodes_file + + + +16->14 + + + + + +16->23 + + + + + +16->27 + + + + + +16->30 + + + + + +16->34 + + + + + +16->35 + + + + + +16->39 + + + + + +16->42 + + + + + +16->47 + + + + + +16->51 + + + + + +16->56 + + + + + +16->59 + + + + + +16->62 + + + + + +16->68 + + + + + +16->71 + + + + + +16->75 + + + + + +17 + +query_usernames_device_empatica_ids + + + +17->16 + + + + + +18->0 + + + + + +19 + +join_features_from_providers +sensor_key: phone_data_yield + + + +18->19 + + + + + +19->0 + + + + + +20 + +merge_sensor_features_for_individual_participants + + + +19->20 + + + + + +20->0 + + + + + +76 + +merge_sensor_features_for_all_participants + + + +20->76 + + + + + +21 + +join_features_from_providers +sensor_key: phone_accelerometer + + + +21->0 + + + + + +21->20 + + + + + +22->0 + + + + + +22->21 + + + + + +23->0 + + + + + +23->22 + + + + + +23->24 + + + + + +24->0 + + + + + +24->21 + + + + + +25 + +join_features_from_providers +sensor_key: phone_activity_recognition + + + +25->0 + + + + + +25->20 + + + + + +26->0 + + + + + +26->25 + + + + + +27->0 + + + + + +27->26 + + + + + +28 + +resample_episodes +sensor: phone_activity_recognition + + + +28->0 + + + + + +28->27 + + + + + +29 + +activity_recognition_episodes + + + +29->0 + + + + + +29->28 + + + + + +30->0 + + + + + +30->29 + + + + + +31 + +join_features_from_providers +sensor_key: phone_applications_foreground + + + +31->0 + + + + + +31->20 + + + + + +32->0 + + + + + +32->31 + + + + + +33 + +phone_application_categories +type: foreground + + + +33->0 + + + + + +33->32 + + + + + +37 + +app_episodes + + + +33->37 + + + + + +34->0 + + + + + +34->33 + + + + + +35->0 + + + + + +35->32 + + + + + +36 + +resample_episodes +sensor: phone_app + + + +36->0 + + + + + +36->35 + + + + + +37->0 + + + + + +37->36 + + + + + +38 + +screen_episodes + + + +38->0 + + + + + +38->37 + + + + + +72 + +resample_episodes +sensor: phone_screen + + + +38->72 + + + + + +39->0 + + + + + +39->38 + + + + + +40 + +join_features_from_providers +sensor_key: phone_battery + + + +40->0 + + + + + +40->20 + + + + + +41->0 + + + + + +41->40 + + + + + +42->0 + + + + + +42->41 + + + + + +43 + +resample_episodes +sensor: phone_battery + + + +43->0 + + + + + +43->42 + + + + + +44->0 + + + + + +44->43 + + + + + +45 + +join_features_from_providers +sensor_key: phone_bluetooth + + + +45->0 + + + + + +45->20 + + + + + +46->0 + + + + + +46->45 + + + + + +47->0 + + + + + +47->46 + + + + + +47->48 + + + + + +48->0 + + + + + +48->45 + + + + + +49 + +join_features_from_providers +sensor_key: phone_calls + + + +49->0 + + + + + +49->20 + + + + + +50->0 + + + + + +50->49 + + + + + +51->0 + + + + + +51->50 + + + + + +52 + +resample_episodes +sensor: phone_calls + + + +52->0 + + + + + +52->51 + + + + + +53->0 + + + + + +53->52 + + + + + +54 + +join_features_from_providers +sensor_key: phone_light + + + +54->0 + + + + + +54->20 + + + + + +55->0 + + + + + +55->54 + + + + + +56->0 + + + + + +56->55 + + + + + +57 + +join_features_from_providers +sensor_key: phone_locations + + + +57->0 + + + + + +57->20 + + + + + +58->0 + + + + + +58->57 + + + + + +59->0 + + + + + +59->58 + + + + + +60 + +resample_episodes +sensor: phone_locations_processed_with_datetime_with_doryab_columns + + + +60->59 + + + + + +61 + +phone_locations_add_doryab_extra_columns + + + +61->0 + + + + + +61->60 + + + + + +62->0 + + + + + +62->61 + + + + + +62->64 + + + + + +62->65 + + + + + +63->0 + + + + + +63->62 + + + + + +64->0 + + + + + +64->57 + + + + + +65->0 + + + + + +65->64 + + + + + +66 + +join_features_from_providers +sensor_key: phone_messages + + + +66->0 + + + + + +66->20 + + + + + +67->0 + + + + + +67->66 + + + + + +68->0 + + + + + +68->67 + + + + + +69 + +join_features_from_providers +sensor_key: phone_screen + + + +69->0 + + + + + +69->20 + + + + + +70->0 + + + + + +70->69 + + + + + +71->0 + + + + + +71->70 + + + + + +72->0 + + + + + +72->71 + + + + + +73 + +join_features_from_providers +sensor_key: phone_wifi_visible + + + +73->0 + + + + + +73->20 + + + + + +74->0 + + + + + +74->73 + + + + + +75->0 + + + + + +75->74 + + + + + +76->0 + + + + + +77 + +histogram_phone_data_yield + + + +76->77 + + + + + +80 + +heatmap_phone_data_yield_per_participant_per_time_segment + + + +76->80 + + + + + +81 + +heatmap_feature_correlation_matrix + + + +76->81 + + + + + +77->0 + + + + + +78->0 + + + + + +79 + +merge_heatmap_sensors_per_minute_per_time_segment + + + +78->79 + + + + + +79->0 + + + + + +80->0 + + + + + +81->0 + + + + + diff --git a/images/dag_participants_files.svg b/images/dag_participants_files.svg new file mode 100644 index 0000000..946c794 --- /dev/null +++ b/images/dag_participants_files.svg @@ -0,0 +1,68 @@ + + + + + + +snakemake_dag + + + +0 +create_participants_files + +↪ input + +data/external/example_participants.csv +   + + + + + + +1 +prepare_participants_csv + +↪ input + +data/external/example_usernames.csv + +output → + +data/external/example_participants.csv + + + + + + +1->0 + + + + + +2 +query_usernames_device_empatica_ids +   + +output → + +data/external/example_usernames.csv +data/external/timezone.csv + + + + + + +2->1 + + + + + diff --git a/rapids b/rapids index 712ff74..633384c 160000 --- a/rapids +++ b/rapids @@ -1 +1 @@ -Subproject commit 712ff748981b735277acd8aef3184cbdcf894fb6 +Subproject commit 633384c6a9a228ee0a9622903f0c08b560e5e81c From 2e1e771b3db4a4b995c2d716fd6a741d913db29f Mon Sep 17 00:00:00 2001 From: junos Date: Thu, 9 Dec 2021 17:34:37 +0100 Subject: [PATCH 18/34] Correct errors in RAPIDS config. --- rapids | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rapids b/rapids index 633384c..4485c4c 160000 --- a/rapids +++ b/rapids @@ -1 +1 @@ -Subproject commit 633384c6a9a228ee0a9622903f0c08b560e5e81c +Subproject commit 4485c4c95e6eddad00fb6b5221d2946930394970 From c4aacfffe103029511edd13051f1ebe9dcfaa32f Mon Sep 17 00:00:00 2001 From: junos Date: Wed, 15 Dec 2021 16:03:49 +0100 Subject: [PATCH 19/34] Debug a ValueError in RAPIDS and add demo. --- exploration/debug_heatmap.py | 243 +++++++++++++++++++++++++++++++++++ rapids | 2 +- 2 files changed, 244 insertions(+), 1 deletion(-) create mode 100644 exploration/debug_heatmap.py diff --git a/exploration/debug_heatmap.py b/exploration/debug_heatmap.py new file mode 100644 index 0000000..e7df82f --- /dev/null +++ b/exploration/debug_heatmap.py @@ -0,0 +1,243 @@ +# --- +# jupyter: +# jupytext: +# formats: ipynb,py:percent +# text_representation: +# extension: .py +# format_name: percent +# format_version: '1.3' +# jupytext_version: 1.13.0 +# kernelspec: +# display_name: straw2analysis +# language: python +# name: straw2analysis +# --- + +# %% +import os, sys +import importlib +import pandas as pd +import numpy as np + +# import plotly.graph_objects as go +from importlib import util +from pathlib import Path +import yaml + +# %% +phone_data_yield = pd.read_csv( + "../rapids/data/interim/p011/phone_yielded_timestamps_with_datetime.csv", + parse_dates=["local_date_time"], +) +time_segments_labels = pd.read_csv( + "../rapids/data/interim/time_segments/p011_time_segments_labels.csv" +) + +# %% +phone_data_yield["assigned_segments"] = phone_data_yield[ + "assigned_segments" +].str.replace(r"_RR\d+SS#", "#") +time_segments_labels["label"] = time_segments_labels["label"].str.replace( + r"_RR\d+SS$", "" +) + + +# %% tags=[] +def filter_data_by_segment(data, time_segment): + data.dropna(subset=["assigned_segments"], inplace=True) + if data.shape[0] == 0: # data is empty + data["local_segment"] = data["timestamps_segment"] = None + return data + + datetime_regex = "[0-9]{4}[\-|\/][0-9]{2}[\-|\/][0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}" + timestamps_regex = "[0-9]{13}" + segment_regex = "\[({}#{},{};{},{})\]".format( + time_segment, datetime_regex, datetime_regex, timestamps_regex, timestamps_regex + ) + data["local_segment"] = data["assigned_segments"].str.extract( + segment_regex, expand=True + ) + data = data.drop(columns=["assigned_segments"]) + data = data.dropna(subset=["local_segment"]) + if ( + data.shape[0] == 0 + ): # there are no rows belonging to time_segment after droping na + data["timestamps_segment"] = None + else: + data[["local_segment", "timestamps_segment"]] = data["local_segment"].str.split( + pat=";", n=1, expand=True + ) + + # chunk episodes + if ( + (not data.empty) + and ("start_timestamp" in data.columns) + and ("end_timestamp" in data.columns) + ): + data = chunk_episodes(data) + + return data + + +# %% tags=[] +time_segment = "daily" +phone_data_yield_per_segment = filter_data_by_segment(phone_data_yield, time_segment) + +# %% +phone_data_yield.tail() + +# %% +phone_data_yield_per_segment.tail() + + +# %% +def getDataForPlot(phone_data_yield_per_segment): + # calculate the length (in minute) of per segment instance + phone_data_yield_per_segment["length"] = ( + phone_data_yield_per_segment["timestamps_segment"] + .str.split(",") + .apply(lambda x: int((int(x[1]) - int(x[0])) / (1000 * 60))) + ) + # calculate the number of sensors logged at least one row of data per minute. + phone_data_yield_per_segment = ( + phone_data_yield_per_segment.groupby( + ["local_segment", "length", "local_date", "local_hour", "local_minute"] + )[["sensor", "local_date_time"]] + .max() + .reset_index() + ) + # extract local start datetime of the segment from "local_segment" column + phone_data_yield_per_segment["local_segment_start_datetimes"] = pd.to_datetime( + phone_data_yield_per_segment["local_segment"].apply( + lambda x: x.split("#")[1].split(",")[0] + ) + ) + # calculate the number of minutes after local start datetime of the segment + phone_data_yield_per_segment["minutes_after_segment_start"] = ( + ( + phone_data_yield_per_segment["local_date_time"] + - phone_data_yield_per_segment["local_segment_start_datetimes"] + ) + / pd.Timedelta(minutes=1) + ).astype("int") + + # impute missing rows with 0 + columns_for_full_index = phone_data_yield_per_segment[ + ["local_segment_start_datetimes", "length"] + ].drop_duplicates(keep="first") + columns_for_full_index = columns_for_full_index.apply( + lambda row: [ + [row["local_segment_start_datetimes"], x] for x in range(row["length"] + 1) + ], + axis=1, + ) + full_index = [] + for columns in columns_for_full_index: + full_index = full_index + columns + full_index = pd.MultiIndex.from_tuples( + full_index, + names=("local_segment_start_datetimes", "minutes_after_segment_start"), + ) + phone_data_yield_per_segment = ( + phone_data_yield_per_segment.set_index( + ["local_segment_start_datetimes", "minutes_after_segment_start"] + ) + .reindex(full_index) + .reset_index() + .fillna(0) + ) + + # transpose the dataframe per local start datetime of the segment and discard the useless index layer + phone_data_yield_per_segment = phone_data_yield_per_segment.groupby( + "local_segment_start_datetimes" + )[["minutes_after_segment_start", "sensor"]].apply( + lambda x: x.set_index("minutes_after_segment_start").transpose() + ) + phone_data_yield_per_segment.index = phone_data_yield_per_segment.index.get_level_values( + "local_segment_start_datetimes" + ) + return phone_data_yield_per_segment + + +# %% +data_for_plot_per_segment = getDataForPlot(phone_data_yield_per_segment) + +# %% +# calculate the length (in minute) of per segment instance +phone_data_yield_per_segment["length"] = ( + phone_data_yield_per_segment["timestamps_segment"] + .str.split(",") + .apply(lambda x: int((int(x[1]) - int(x[0])) / (1000 * 60))) +) + +# %% +phone_data_yield_per_segment.tail() + +# %% +# calculate the number of sensors logged at least one row of data per minute. +phone_data_yield_per_segment = ( + phone_data_yield_per_segment.groupby( + ["local_segment", "length", "local_date", "local_hour", "local_minute"] + )[["sensor", "local_date_time"]] + .max() + .reset_index() +) + +# %% +# extract local start datetime of the segment from "local_segment" column +phone_data_yield_per_segment["local_segment_start_datetimes"] = pd.to_datetime( + phone_data_yield_per_segment["local_segment"].apply( + lambda x: x.split("#")[1].split(",")[0] + ) +) + +# %% +# calculate the number of minutes after local start datetime of the segment +phone_data_yield_per_segment["minutes_after_segment_start"] = ( + ( + phone_data_yield_per_segment["local_date_time"] + - phone_data_yield_per_segment["local_segment_start_datetimes"] + ) + / pd.Timedelta(minutes=1) +).astype("int") + +# %% +columns_for_full_index = phone_data_yield_per_segment[ + ["local_segment_start_datetimes", "length"] +].drop_duplicates(keep="first") +columns_for_full_index = columns_for_full_index.apply( + lambda row: [ + [row["local_segment_start_datetimes"], x] for x in range(row["length"] + 1) + ], + axis=1, +) + +# %% +full_index = [] +for columns in columns_for_full_index: + full_index = full_index + columns +full_index = pd.MultiIndex.from_tuples( + full_index, names=("local_segment_start_datetimes", "minutes_after_segment_start") +) + +# %% +phone_data_yield_per_segment.tail() + +# %% [markdown] +# # A workaround + +# %% +phone_data_yield_per_segment = phone_data_yield_per_segment[ + ["local_segment_start_datetimes", "minutes_after_segment_start"] +].drop_duplicates(keep="first") + +# %% +phone_data_yield_per_segment.set_index( + ["local_segment_start_datetimes", "minutes_after_segment_start"], + verify_integrity=True, +).reindex(full_index) + +# %% +phone_data_yield_per_segment.head() + +# %% diff --git a/rapids b/rapids index 4485c4c..d2ed73d 160000 --- a/rapids +++ b/rapids @@ -1 +1 @@ -Subproject commit 4485c4c95e6eddad00fb6b5221d2946930394970 +Subproject commit d2ed73dccfac65ce503c1b510182fe5ef1516508 From 7e8e922d71429ee9792cc2db1cdb6feb54c42317 Mon Sep 17 00:00:00 2001 From: junos Date: Wed, 15 Dec 2021 18:25:53 +0100 Subject: [PATCH 20/34] Debugging of RAPIDS. --- .idea/misc.xml | 13 ++++++ exploration/debug_heatmap.py | 82 +++++++++++++++++++++++++++++++++++- rapids | 2 +- 3 files changed, 95 insertions(+), 2 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index 8962e54..b6b261d 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -4,4 +4,17 @@ + + + \ No newline at end of file diff --git a/exploration/debug_heatmap.py b/exploration/debug_heatmap.py index e7df82f..1e5663b 100644 --- a/exploration/debug_heatmap.py +++ b/exploration/debug_heatmap.py @@ -227,7 +227,7 @@ phone_data_yield_per_segment.tail() # # A workaround # %% -phone_data_yield_per_segment = phone_data_yield_per_segment[ +phone_data_yield_per_segment["local_segment_start_datetimes", "minutes_after_segment_start"] = phone_data_yield_per_segment[ ["local_segment_start_datetimes", "minutes_after_segment_start"] ].drop_duplicates(keep="first") @@ -240,4 +240,84 @@ phone_data_yield_per_segment.set_index( # %% phone_data_yield_per_segment.head() + +# %% [markdown] +# # Retry + +# %% +def getDataForPlot(phone_data_yield_per_segment): + # calculate the length (in minute) of per segment instance + phone_data_yield_per_segment["length"] = ( + phone_data_yield_per_segment["timestamps_segment"] + .str.split(",") + .apply(lambda x: int((int(x[1]) - int(x[0])) / (1000 * 60))) + ) + # calculate the number of sensors logged at least one row of data per minute. + phone_data_yield_per_segment = ( + phone_data_yield_per_segment.groupby( + ["local_segment", "length", "local_date", "local_hour", "local_minute"] + )[["sensor", "local_date_time"]] + .max() + .reset_index() + ) + # extract local start datetime of the segment from "local_segment" column + phone_data_yield_per_segment["local_segment_start_datetimes"] = pd.to_datetime( + phone_data_yield_per_segment["local_segment"].apply( + lambda x: x.split("#")[1].split(",")[0] + ) + ) + # calculate the number of minutes after local start datetime of the segment + phone_data_yield_per_segment["minutes_after_segment_start"] = ( + ( + phone_data_yield_per_segment["local_date_time"] + - phone_data_yield_per_segment["local_segment_start_datetimes"] + ) + / pd.Timedelta(minutes=1) + ).astype("int") + + # impute missing rows with 0 + columns_for_full_index = phone_data_yield_per_segment[ + ["local_segment_start_datetimes", "length"] + ].drop_duplicates(keep="first") + columns_for_full_index = columns_for_full_index.apply( + lambda row: [ + [row["local_segment_start_datetimes"], x] for x in range(row["length"] + 1) + ], + axis=1, + ) + full_index = [] + for columns in columns_for_full_index: + full_index = full_index + columns + full_index = pd.MultiIndex.from_tuples( + full_index, + names=("local_segment_start_datetimes", "minutes_after_segment_start"), + ) + phone_data_yield_per_segment = phone_data_yield_per_segment.drop_duplicates(subset=["local_segment_start_datetimes", "minutes_after_segment_start"],keep="first") + phone_data_yield_per_segment = ( + phone_data_yield_per_segment.set_index( + ["local_segment_start_datetimes", "minutes_after_segment_start"] + ) + .reindex(full_index) + .reset_index() + .fillna(0) + ) + + # transpose the dataframe per local start datetime of the segment and discard the useless index layer + phone_data_yield_per_segment = phone_data_yield_per_segment.groupby( + "local_segment_start_datetimes" + )[["minutes_after_segment_start", "sensor"]].apply( + lambda x: x.set_index("minutes_after_segment_start").transpose() + ) + phone_data_yield_per_segment.index = phone_data_yield_per_segment.index.get_level_values( + "local_segment_start_datetimes" + ) + return phone_data_yield_per_segment + + +# %% +phone_data_yield_per_segment = filter_data_by_segment(phone_data_yield, time_segment) + +# %% +data_for_plot_per_segment = getDataForPlot(phone_data_yield_per_segment) + # %% diff --git a/rapids b/rapids index d2ed73d..e5cc025 160000 --- a/rapids +++ b/rapids @@ -1 +1 @@ -Subproject commit d2ed73dccfac65ce503c1b510182fe5ef1516508 +Subproject commit e5cc02501f629c96641dfd1bcd1f7fcfd0d55462 From de10269d36b621bcbeeafcefa2cc0cb2e1a10b06 Mon Sep 17 00:00:00 2001 From: junos Date: Wed, 15 Dec 2021 18:26:20 +0100 Subject: [PATCH 21/34] Export categories and add csv. --- data/app_categories.csv | 1019 ++++++++++++++++++++++++++++ exploration/expl_app_categories.py | 28 +- 2 files changed, 1046 insertions(+), 1 deletion(-) create mode 100644 data/app_categories.csv diff --git a/data/app_categories.csv b/data/app_categories.csv new file mode 100644 index 0000000..d8d7bbb --- /dev/null +++ b/data/app_categories.csv @@ -0,0 +1,1019 @@ +package_hash,genre +98a5c1a9c7717f791cb4083199ff5c91a958df844a47dc89c7319b2bb824ac94,Personalization +c9112978f6b1c96c767496a15a6dbb9c8dccabe847c31ecc9e5f706de24342a6,Communication +650ab12d7007ee573df2291f3a9207442e3897a9a5b2f5068ad685c0d04751ea,Tools +8db84bf3fb1474b01e941f35d174af58b2d3218f3e4bcf730234fd228844fd6f,System +8105f0dc3f0baac316e2838cff7921eb4073c8c8536ae894f6fbc4bc4d037115,System +c774e39b03f686a78a6f65aff913372ca3a1bdafa4eeb85633fc3698040f0343,STRAW +f84d48902dec00970431f98add7d7dcb2b644aa8124c862467cf9dfa46cf4ce4,Communication +44f8434eab1eea5e2db280eb44a7f3568ab9de265a6ab6266663e9283be0ce48,Communication +bcab68738fa9580b8091c60d3ce0ae8c021ea966a7bcfa3bfe08216a0eea3916,System +7833ab7495c58f6d1ccbea7c7d7c8bc57f2d5454cbdca075c596476affb30921,Photography +d72459862971b43ded9e70be192ad2e010bef98c879e3dac3701c2ce7db68b77,System +98df04be309e6ad9edd212752dab681b387b3923de8dbc78c5f4330c0a82bdb1,System +6ab6ce46c88b64a800cdbd86b74b9925be92d659351ab51c7af38059ab3f57dd,System +8dfa94906826eef06c9618ddc3944ac5fc8bb3bc45b45379084dac2a7a81eb6d,System +2a757de4fa47b9ad3a1e86f878f56e9406f1b2e987f2a3e643e4185c6adf688c,System +ecfacb11fde40d0a4bbfe44c8854f2675ee5601b5a2765efb77c4a6afd112305,Personalization +ca3bec0c29a6d5bc2edcdffbb7e811c4382d35a50a6878e7aa9af061046f5c0e,System +03c51c1ab54f33543b2c4cfb010eaf6e0d095421d9d17ed0fbf206be9eefa308,EducationEducation +2dc28ec3604bfa838f9b2f2b95a6edcfbbe1aaa12b07e911ced124acead84fb9,Productivity +55d5b7ad6a8bc474758213757670a5091fb5e5266d0c5df3b6390041c134c762,Social +9895e706fbfbcf30e6d58ff777336e0328aad3741479b119dde6e5fb2f6b6263,System +96511e488ccdfc2bf1d2b643410c7da2fb6211a3223cdee63bbafee50276c5f4,System +11a54f68916ce79a18ae16a7962c92bb4168d5d26f00faf11b9588680ec9cc07,Finance +0c0a98572623762b1d4e76b9b0a0faf768362eb9bc1c678e374289bcf7dbeaae,System +567f81acdc74c8d46c3028435e7ed86a093f6b9bbb0814dd5ec232d1837c8628,Photography +da79c8861f90c1f8987a749fa12cbb547ea7201704a081d43f8c6ec2a3e20518,Tools +9ffbc57a813921014f71f03567e2b4b800a1d3d831c7ad730215d44f198c4304,System +73ee12446c56262a89f06d591a4824a2a090a03297b36eb3525be19dba7eae62,Productivity +74fbf0203636ffe24b9338f4d23f75f78f4e7dee3fbe064109e418cc46ae1ed2,System +0c1dcbad859b14a2d00ccbd76dd415c8da13b7640cd899e912da171d582d1493,Video Players & Editors +de04257ec7ede004d39839347e4958b42cbadfd96b8c83f0d5309c7fe93a7de6,System +86464f166f629f4411665088f8a78a43e2b33677a40987f7bd89511626cc6e13,Tools +ec30670f3cc7ca5bf379479082d45f967f86a09707d231dbabfe47f4cf63be85,System +2fec55f7e3e157d6f32bdcb7254f0a82e6dcc487a956f3d53d3d25bd2757b480,Productivity +8cfeddee1cac3befc1bbdc8ec24f373a1fea59ddaf2c965b2892e5b0f770b3ca,Tools +d6eeca5eeb186e76d9b72d580c0497ddbef3884fdf29584209f437761e8a1cad,Health & Fitness +db3b2ed1bc6ef5c92aae00bddadbed3e3229fc09d2ded40ccdb2bb85c5e63f2e,Tools +8a1ff8a399ecdecfa5306b3c887f126841fb2216dfba84d4b76947728601965d,Music & Audio +cca4f5538a7b3d1538aec8e8ed8b35f7693b9a20a9bbb38b9b83f0a584b9d18d,News & Magazines +03473a3ae8cbb5fa6c5874e00a3200afa677e1da71ba67489def7deb39e77ef9,System +4593c3bcd30df4060b8550ab6cd704c2036a7304972fcadbea84d13075523e74,Finance +16e54aa4b56494959f583fb3d9fe1e01bcc9f8d94b2cdc4ca0b083775c40fc13,Communication +5173dacdb8da7a8db9054ed808141abe3e38f9ab53ca6cd0d1843cf0287eb6a7,Communication +922dc3ad6c155b919799f07135b71bcd009ffdbc6ddfb3f7ece87a16eaa613fa,System +2e58c2b983bce4aab87d03798f7c01250ea6a2a50501988812fcc7c42fff66a8,News & Magazines +dc2d10e89d917ecacca2d070931b2039333d54eee5caf6086481fe0660963195,Productivity +87144f71a9f431b22adb501f20b04003be797a142138a31f6d9fb638711c1401,Productivity +f43a6a0c91cdf0ef0bf241ebd24ccfda10fbd3d3c589b45e7f110452a69e8254,Communication +c07fc02b11b129cbb37b939821baa4ef4a801502ff94231b0129aa636e35ecfa,Productivity +e96123148973d6c8b239e75d7252c253f27c3ec57118e99566ffb88dd2740bee,Tools +dd9efd001c421a802fd0e55c4712c3accf6e5a0bfae8d1500a2bfbb5a1d470b1,Communication +1b41d2e26a3aa829d1f43be105899cfc330f1363058e21dd29fbb73fe86504df,Board +59a7078912a4e8bb0d909a812562e049d488207ec1f2a0378024448349c34a62,Health & Fitness +d8eadd7c668b31e934d13866ecff2f42edbbecd5cf7ba82bff03d12618518b19,Communication +dfe575511ffb1dde963914233d192e054225d678f5773b959c6505f561814568,Communication +2bc236b5e055871499b5168832000824f22aac047c06f86211d49d05acceaaa5,System +bcbdd56ee284939d84a9b97a1520943dfd84cab3c63526bf0f42fde97764581e,Music & Audio +a608a80fcea9570a9fd671f1cefd58960aed75483fe27a417b9226d8565900b4,Entertainment +28100e1472d6a887b6899fb1db209ec631364e39303a7e8bb605eec71ca514b2,Health & Fitness +24e53b65d8946803903a791e806ff0ee6222e36642b9f02489428788da55a7d6,Lifestyle +e98f0db30ff159e9546d806fb5b26c41b6125eeb54fe7476c46e8d54b377a672,Medical +8ba56fb34eaf7151c81c49ed4d62c279ee2e3dc0ef27cb708d2f748edda896b4,Communication +b53b77869a1ecd123f26a1d662341079aa9f864cfa53782c3bdec66e0b5f82a3,Productivity +9e4c69477bbe0b8191ec423003b246d14387cc160320cdc399eb7c686ca977eb,System +3bcf3afed2f302a0d3ff8b53ec0dc3c410d7e10e1f085410b781017be8d3ab53,Productivity +42af2333ae72f7f22b4e8c65201e2abf39e949d189ed84418d60a6715ad2dc72,System +e1e7c964411e3955ed739573904035a8975b439afd91fac3e426d3c89896bc9a,System +743d36f165fd0de9dc7a9e8196b333c38c713a2a573cc1b15c72ec55b50f1b2a,System +ac7dbf76920dd397f41b382086ee3fc6a5c8316a036fb4cfcaafea6cac11068f,System +58d533e92c42f32b5c670dda0459c532a26bdf4d8829b268b4c83b0dfc81e532,Communication +8a3234cc396da5930728e3fc37733657213a889318e081b5e34b9d48904242a8,System +067da5d7b7420c20bab61c489ddc0a165314e7dd63c063a6dfcfc562a41bfcd8,System +9731982a710d88d1ca614e56540992406587cbeb6825185ea69db0c38130a1a9,News & Magazines +5151bd812f4c8f9c1f0c0d9521fa6559e385a2db09fe169418aad623d2a8580a,System +8811759ce3d0f6d242d1601d4ec23e85b60032459ca3550a0449c5d4c103019c,Social +944ce84ab7643d90368352203cb9b0ee52a5acf6c85ec1b2dc04e59d054aa984,Entertainment +e3c2ca6ccf608195ea76854d44e08ae4f3c9bb086cddb75683e4ac82215eedd6,Travel & Local +08c21beb926a22c7fc58a08604a7deb4ac702f291da5c74fb86ec880161a4d30,Communication +2dbd03e77c99d04b57b56a8f483377944790c465a017c10eeb729b914ab51945,Tools +df2f029b4568b33050cdb1855a993df908dd59b64fff6c1a6fc4252994238bb0,System +fee567f0dfc972c843bea462bc8568884a7197ccd02a7f65cb59cb623a7a86c7,Productivity +a25d729fd543f30d90f715edf08a1c046a49c934d534da891e668daae61f22cc,System +6dca07071650b6e580fa6f846f88f100df32cc6addc524d38e2157be25ee3c25,System +6dc04b99678b1474407c56e46b3a0ec42184548bc11d163606378ffb0162274f,System +2520fc9914e98d41b06778708515a65299160433976ac20f0b16c7693e731013,System +7ae9282dab64407e5c9072c1c67c2a19280bd55b8148fd3ab37adf2d3a2d039d,System +8043ed6455b0fca92894ef8921097739e51c9d704637ebd1712a7e6a41ebe53f,System +6ba0ad813c8f6d7f5ed2ba82fc0968a3abb521cd3c15d4fa0f3faffcf224f134,Productivity +d7acb5609d9ba261b03e77f8c31391a8dd32f5557575d27032f92725b0a98c0a,System +9c5f13d7e05c50118353e4b18daadb10667af1aacad882c136a1ce38a6bfc893,Music & Audio +d8f206a42d8b19a4a944810ad597cccd5eadb3a032caadca865c9aa274de0be9,System +49a5598051645bda7012524938f2b503c671f43e4bfd00eb01f83d1bf80a9dcc,Finance +eecb521ec2f88ea75e955b53f9c00c16d0bd84ff2440f1d3be0867902e589100,Social +d02d069eaff29120dadbf598a032a97b27b6a6961d85906382c466aaab80c732,Business +0dab754bb23db90fa48fd08fe074af20463e13f478457e871e3420856c63e87c,Food & Drink +dbdaf18bc22669ecd6559e8b515b834acd1f826d17cbe044f3219d200ce37588,Shopping +895896b6accde51a691adab3941099115bde5a3204f8174656d632e64027d276,Health & Fitness +8e098492c21e3e9e74b5e976e2c5dc719670af37d7567918f3cec2f511c00d71,Entertainment +49c995f38ea64489272458f83ccb85fe6c09310812442d8e2eaa0803205d16f9,System +d63b90264e22b7f8961baa0d5265ad5fadca22323902727ee399318b0656b385,System +4e6f0bd0ae6a1555c6b53e510c3eceb85784328280304f7151a04a6a28644027,Tools +9fd952492888773f7241cc9b7c816a188af37b654ee3dd775919ca8bcc64a84f,System +3cb02bd9fe680532ad911576595b891d3852b4d7c3626894f2c744d2e91876f8,System +ee2625f2ec88603212cb85ad312496e72d68cc448a645a766c0e76f82969a81d,System +9a4879dd72541e30dd88aac2d0c13859988d0c67912266fe17afd7176976c189,Communication +85594c705da67aa2d3495b8d4b2d6afda7b5d8484ada8849e0ec851d37bd2c7d,Communication +6e16ed2ae3235b70c5e9c9ffe7ec87778b1620a2db3630b7bb76fb51999fc6cf,Travel & Local +5b87646957a397a96c128b9efe5e7fb93dd8d46a890ade3217652ae44a9e7631,Health & Fitness +f9bad597b302cfc04ba0b3ca7367a5a900362dc7e4cfaf8da17b1c028139a27e,System +4de945934567af2f6cac4ccf198bbcb1b889f6490a4f3ab95ac2775bbd1c389b,Music & Audio +484f17a86919fc78e5765b3e6bde3c360d1bdd98744ed7459a410e341d4296fb,Tools +cc1ac1893e41253c58a9304f52028364c8ff8f028fd0b708453107d64e5aaae5,Personalization +f03f7423c49037af14592e48fad9dc0eef886220cecdeb200fe2a4fe56a8e0c5,System +43faf2a54457e5445a703a67a548fdb5f2879bd8ae00feff6ca51f7f72baf2ed,System +fc7f1388db7c8996e13fc00460f50817d3203527b49b6c3c56fa158c1f90da7d,System +1ac4154694ba5ccaca7cdedfe4792824db0b750296ef67ac259a1b6eb66f7816,Health & Fitness +5fa45c319dbc5697073cff24715bb12c27248bf8be3037b355f750e952d86457,Tools +542fee0b4342ef6978883d27a2ff203bbe3147737f2cf726fb29917055f465b4,Other +0b7efeadda1771a61755554e34c791dbc25d943f3d37436c65e5ddedf8ba0634,Video Players & Editors +74887a9c8756298187d684649d6137e992b5213fb51fb9f70996a4dd205e36c4,Travel & Local +bf31bb0065f8ea96a6b5407b80062540e60b11c574f8ba9aee64920d88e099e2,System +c19dcf6bcdc1377bfd4c5b80a1ec8b63543e3ef6935def2e2349bf5f631ff4b4,System +fe7c945639af7fd69efb3a0a2b76e129b5c4d3d426a3ca23cf77eab9d3d313ae,System +ee9c4f395c32b21a16a517184708715e498e372279eba688005b975b35aa2ec3,System +41ed6e36a4a986a9c67943b986ac0e7068d327bdbb903f014ab6bb4af366dfa6,System +22c6ce1a473e312293c94ac803b43962a11ae1bf1a2f12eb3d1cf4d93c55978c,Travel & Local +951ab26ed4f963f41901290c760f310222bbee0521a891021e3ef6587f844b78,Photography +836eea4eba289df1dedfabfceae29e36dbbf84a36f1bc2dc4d58699203b98246,Maps & Navigation +8d97a5c939287e67f7be9798f9f9bc648743e4663a9d9757d49198ab1c7e6793,System +2c7fd0ef311e3ff5cc5787174876721bf870c32d45526b9ea6251df14bf09ebe,Finance +da4a1ea68608a405e19595896cb764965c38c7040015f7bab06fa9e0633ec8c6,Tools +a7031ac30cbfff88337f7d6684b948402304087f437c2b03b894973943a95eb4,Tools +c13be9440020c69b1c1e5dfaba531df24dbe933bc41fbf3cb6f07955e15ad988,Video Players & Editors +68073833fd1074407364a026eeffb6988085d9e3c72b1642bd0ff5a5dbe51f63,Productivity +d0f7ca4dcd409cee3f52e4e84e7a83dbe319c1e9f9ea9cf480f549dedacf2cba,System +763e534617c2875dda6b953cc2f03a62a2e5c125420a19b29f2032c4b348d8f9,System +ba01818feca7dae630af1aa8c6833464d43eb0dee0c0fbea906e604585d27fda,System +b2edded7e382120e084981d5c6f9cc039bf07d77611f58c091917152d10c6dd0,Weather +6f98201da6c4279e0642e7afa85768ce01f03065734ad6d90e7025e576e51a85,Maps & Navigation +25f063a8301f73e6d8c621da3ae2238edf9d24a7da2e0fb25b28868bc14f0148,System +f2cb16bb8cf360c4b3301465ccd90607035b3413a306200102bedbea6528f028,System +b404fd1e78a370838dcf15125ccefb94c8d781eaf8698afd15bd67a8ece9f84d,System +a3959b9bbd85a1a0a3dd1e5b0f9f3de21c3dc34097b9a595e0b594a610f3f44d,Weather +7dc683ce458ff6f1a6bd701e1a55d82b50ebf6e8febcf612cc1b51a1f140c5a3,Productivity +9c46fb334d7ef720b248c7accb3ad61479076d64a9b68730d2d3149fe03442a9,System +4f6d3b70dce5bc5e6b3d2833d3913aaaee7a23bf9933ba28cb63e69cb0e00bc0,Productivity +1d66ae4b86d392c0412bd9f59b3fcf48be844c8c548e7acb76c849833a7bb106,System +c3ff6f1609f929f449cb3f84f3ee3c8e0312518f9952cfd613322885ca2a77ed,Health & Fitness +4323aefbb15372cb1e99d02a293ff653b7d5e645080232aab40a7312ae5a12ba,Tools +baf2e6a97a57a3488c11f234e39a10eda8629694521bf2ce0084e87b4794a3a5,Business +f0e13394b6546d7524b6f0ea690833c49b735d0e555201baf223b2b391443194,System +8c945f6dbf7a914c898de7199bc27edf59e250c3e3902b09c2b1baf9de4740de,Travel & Local +cf2b258cd1f4ac6e3606fda80b65f67cf4b08e6402f941fa4b384adb67ce929d,Board +9fecd2ff54b410772ce5dac4ca80f6f2062c8389eb0185251c82064fcdb294ce,System +17f122c199d150a88816b4c7146c6d96ca1ef817195a3e7fa7d5a09a84aa64ae,Tools +8bc20a20cd367a546abc2ff2c3599090e6827b147b9444da24945f9eeaabb54f,Lifestyle +6ea9ea7a32941a95f5e4c60c1c0736b599581466755992c9ced1123afd7c2b55,Tools +0453626c59aa5a993b9a8adc086cc768d037a86e105f2b58f0540895591c3d40,Other +816afc8b56c2df81646acea73c593f2ac3a69d358532c4750f9e2bc0f1c8c4a1,Tools +daf48b0392bebb0619cc95fccdad95f5c1a8c2a4e54cc11d2e19edcf334c3e66,Finance +5693f726aa15873d525636af41c111f066179e5f7c77d6f1838f5f744fd4f243,System +959c53ab446e18f0ba71dd5fb12657b2a11c30bde3e6c4b68a0223a31f7242c3,System +87dadb1e8fc924b7c43937b63e631528e045d43a35228e6faf876988ab1574c6,System +26929d089daffacb46e5db8ecba3a374d49a5ad146b924e560fb0c2c5253f29e,Lifestyle +7525ea65133eeab65147a689b1cb538ef4a66b18ac14d55596820d6a2b56e732,System +30e45e9554058d7930e835795715c6b3637a482b6f72f75e6c699282e18896a9,System +91ba5f6ab387b2dc3063502cdfc136d270d5039fda358ae359048e8ea89883d1,Music & Audio +30815402abc28994103c07a7003ffcada9afb7e2c9ca7a39cb4c0ba96fe4a173,News & Magazines +7c7c3e93ba41338451d7734287bd0b128183ef704f6cbf2a10c506516bb4a49d,Health & Fitness +493745c0796b4b366d25789164d2a9f71c1091b158561de364190aad277135d3,News & Magazines +6197a86a41dd0835100d2d9dc38774d9e54fa8f6dccc2b16cf014e2321601782,Finance +48b441cffa0286aa3510764850d63e4e17499f255924df95f9e823642346b002,Social +cb670a9dad3f8d8c48af23609b9faf1ed19ad9739b61ccd01a438a13bbebec6c,Health & Fitness +12c7dadbe7020e080d20c93a65abf1a099d79e8682cb02c461279313ec87d682,Travel & Local +982853054526e887194762b75fca4b32ec15ac31c795e95b1a43afea077a14e6,Maps & Navigation +183f3fcc131e8fb8142ea9667defad11828da4ad9265d317ae5cfa000b84328a,System +67bae57be03ca1f262b75b37ea41b7715ac63467635e9aedbf08bf153dd48a93,Shopping +48a9ef390f74d3b2a825732f7514a66f169f7570277eff5755aa82d9052fd4bc,System +1d7dbcc40b424956133422c7d070c23eb4c163e7c69c8fc93c5d116513edfd07,System +20df72fe6a855644046f0f608e3debf3221581bd3d20225173cdc9a365036981,Music & Audio +bd73e6ddd93de2a97c23911908b228e65bc2a7e34379a9bb804c7504744f94d2,News & Magazines +45a94694535719933f686c922ffccebc67cea1b4119179697aa1e40b9b58c734,Board +13c48b988392729f3dab5a9c9bd5d29ec42dd25a448b6d6a01ee51ee38886987,Weather +d85bec7af0117ab02141358f8988d32a01fb8328ae644f8e42edbbddc65d8ec2,Medical +6ead691964435ba5b1f3480b5cfe2d5fc0e463d1650f998a484bf7f8ec70516e,Music & Audio +b864f026811428306ff2f46ac6a2cfabb7d7abbd089f758e459c8688a6aed9ad,Video Players & Editors +0ca20ba7126a006ae590331d9f222141c9e67af775114a01b985272d2f16f97b,Productivity +e255ac706e4e1e592d0fe5418979983a3b2818d18c2b979392649c671f560b93,Maps & Navigation +b200a2a2a81324f91c9f75e5b87cd6a0204c8380c0f0de6d08c15aa9055a4c4f,Books & Reference +7e6dee57757d0c4dd9e7b4c43529ff256e375831e8105fba60b6e1a0617fc16f,Productivity +27c463649ef34fdfd44f3a511123d8bceffdb5b8c49751b4381661cb825ceb9b,Finance +ed4bbf8fe3893f6a851e4de45d5e0bbdfa949d2783912b3095e3cc8906f70c12,Tools +fb81068c332b9554857ff152e83f59e624e275879a94e382ddb0617a2142ecf2,Tools +9f9bde3ab24838a052a30fba3209757eb957cd649ce9b9155c4a044f48722ab3,System +d895ed52e5e521ea506642ca4424a179c949b846177da0594c514964f90da6a5,System +3ccb955fb42c53d7cc66e2c7512c178fb82add4a6bcf9fe7a7a5ce85082ec179,Tools +e401bfbc725bd9d38817dae29323d5ece666433c50d42ee5cb33386403da4c71,Music & Audio +f1aa3f182d3af402fdf01626e9c3d8f5046e55ea6a4c9e19c313ce3f2d1a0001,Shopping +879a9831aa2138a16f4e1f565dae9de152875b47251300fb35a06c6dc3975daf,System +82c0440d4874846ea3c93060ad44ddc86602a23e871ec387895bd63994f01dcb,System +b0df249df8b04f4a41bbc1090e17f37f55abdd6262800185fc3f3a32ff45368d,System +b8cf0ea533c5d8ae3d7faad469feb13d5cba187e4a157d280bef6f666a539c12,System +cbdd7680c30b65538088eae6c5c7a4d88158e2b1a92e41a37c19b5239bdee854,Tools +3770f854a707ec20dc486263bb14ddcfa085c45d0b06b74951c7c070973550ec,System +27f8340c80d11f969a569c89c2540677675c9f9b59bbf9b0cf9d8a784961353d,System +d94fbf01e1a3a7683228a6747c1c8b55fe443e65046960ed89d2a645ab75e47b,Music & Audio +26999a814f515d694d429a89220c618d181e513f66f32b64ec4b49416631b70d,Finance +97f58d4ed32581a264811556ac68060dc3f1315b81227d5b8dc585d11cec99bb,Health & Fitness +e821f28256e9ff7345d2657f5db533c631910e4ca30fe37931f1c63fcde0289c,System +175341a273a9db227d09651a153c5ea128c5ac31ac3fef54544fe92a25eae598,System +4160e1587aedfadd14b71ec57d957ab56a721d6618992173bc2b1cba1a3a8788,System +425ae000845b380df40079140016d33fadd3988f403e87dc8320d0fded6b70a5,Shopping +42612710d7deccbcfa46e974f029399634f573d5057b1df84041eeb5f0d3685b,Entertainment +f4cbc070348c49d69d3a7e518c7fde2936527034018a042f64417c629d862e7e,Tools +9fba02bfc237b2258a0d23aa6c210855a17661c1e661e82ffee94521f289c648,Finance +149a602da40eea711e955e3a014f4ddfbf2e36664e18160538af9b5152edf2ab,System +a6deadc23458b165892441e619cb7e79ebfce50e9f796ebbdbe9f4c576a3c210,Photography +a2c332cb97e0e3b08f60d0a7285950ca9e67e290731eb71c015cf0d17934a6d9,System +9d08423213e7be8928ba56c9e117cce70f72a774001adfba38fda1e576d87261,System +938bcfb39c450b34e1653f52fc8ae0d29f36d612d38339c615991fef5d295837,Tools +56fee495a43476466d8a2a61f869c86700d9e3b513240de25b5429d1fc39bb6f,System +8f0c1c512f3fc31489b6a14362a9ec6881602daa31f59772a1d352c724ef4994,System +f1d1be5a95088755d117a0cb639e720d26e210b8db95e0b7aab348e05119fa17,Other +e23fbacd17a42a02426cf6c79b8eaaae8a3aff559725910ff6b22f0f89c0a02a,Lifestyle +c00ba143041823ccf8738ec010809f3792f348ab8710ec7a3684cfdd7996b3e9,System +8a0dc9b2aebed503d4a85672fecde9deaf1bbe18890d98a1ee7738e5f8406860,Tools +ccfdbc5a58ac47996d154ac1a5af78663459f672d314c3699caad85ca3481e28,Lifestyle +0b13beed35bfa1150023599edc58189c6227bb63a5db9a85f3963989eeed6e49,Food & Drink +b78e5f7b03ebebca7e0c8b17cce9e612edd6d03e471e41072297adc0292e4a24,Food & Drink +6edce710e1aa06f085cb09e44c5bd38690b6f990c83c7043b5e0b77e2b5809ef,Productivity +6f1e2374f7b1bbb674fe2dd81561cfb130cf8792288cb65243bf27e1f8f63553,Health & Fitness +b01828bbea035d8463ddddf1cf7d60db7c8040c9aa4cc3c30ab3d0ff03f81d21,Communication +d3cff855f7de5c45d717b12b421853191e25914aff129e314c31e8c79ce2fdab,System +4ef657b8b59cdc7e6e7d1632438749fc13feea20398cbef6abcdc47bdbdb3ec9,Video Players & Editors +8ac357950f1acbf7ff4cdd4a71efdbd9248a18c5cdfa2d0aab8fc93b67bcf5ca,System +9743b7e2049eeaff082601a6bcc860819e8e0a0550ecd5836085a57a89a81b90,Lifestyle +79e8f59804c7c6261a0d4f590502dc537979ca9cb17d67b3db06408d9ba3bda4,Tools +5afd97dffce1b6c918eb16c36b4f5f530b418d1b89108887e675bc4a52f74815,Lifestyle +db0e04aac3e11133b25ce5653f619cb8033d9f040bdcca370719d2674b04c374,Maps & Navigation +829dca7f6794ef14b8b150e2aa7cbcd39291945dc2178a2da822aad18dda6abc,Tools +c7508c57c7368411ff5973bf95db188f745cc37801bd754d71e07de773704f14,System +beddd3be2046da8046fdab91c2db42174d002e76c5d6e59f6ea465ee240c5118,Puzzle +128eda25db736db84c2d4e99642a33d586d194abadf2717e54ef4277080f7e3d,Productivity +106213f90c2140a41b711822caa5b835cb3c9c6de3b4a48ea1fdab5a65203d78,Card +723f53b9413b898551560d6eedd523baeee33da785481771305a747110ba9e75,Lifestyle +c00b541bd5254a9d0a830daeac2f8a728b8196c6520c09317434a1bed57f19fd,Entertainment +95d4b465b5eec18969b837be94c1c745c2faca9695b282cdd8961583d432fc83,System +55cfb6cc85c5e505602a6b8196093fb87e58fc76e0085aec6295b59fc03eafb6,Weather +97d71ff22f3dc459b2c00cc795c216be502bd664e8dcfa665ede00dde13d61f9,Social +2ea4c05100590ac1d41c8c1109d35ae451d1c7d76f0d04ac70f18ea8d9160613,Tools +ccfafe967f471b87ece18d14cf5aaba696584f30a49f68c96e0201ab90273a17,Tools +e40e4a0658add5afbac77ac6ad3fc986a50fe04be75f6e867503473ae1882cf3,Communication +9015b14fc181c565f7665b9d7d7065aac296b79384bec5ea96e5c5252476ce1b,News & Magazines +0090939e8d4ab9050d27abb528b3c12d3f1c520556e4d3f6059ae62e6be2387a,Other +db37b364d209cb513f63f656f77c36c994a65930b62f455a581b2ba50b5781d7,Business +e37d7f4b5bfbcf89bf2dfcbc69adc3cac3a48dde13a96094a8f09fc1127c2c44,Business +f54133015ccb33ff2025d27c65c28f96457f7dc495a14513fe0e16e8789a1fd8,System +c44169b84790983312deb324611c73a3f196baaf9fc643c68b2a12afb6d9b23c,Tools +552b12ac33614190d62249cb6e72f3504319053858ac22d90b0fd9bed6533b06,Communication +fd393151fdeecb273115a8e1d5def2bd8d1f63986f91aed926ef77b530fb2937,System +ffbb594fa5b1cb2849db3820867e02819d51582f7f1207a25467464d9806dc26,System +3766c3866bf7c35e6feda19018370220d65c2424bdf4586ef8bda9daead2e6c0,System +519ddaefea3cc7629aeda49bc7fd0e4628253a9c0c15c3ca83b2b440c7784b68,System +943579161cf6b310a09c3cb7ebf1786f4c10daa4ddf86b23bfca8e8307dbd6d2,Travel & Local +3b2551617413fe273e616f5509265a1e03218c33df9e467766e5973e0306ea74,Books & Reference +045b65630bf0b66b39ec5f12afff9d6c68e3a0095c6c32c1ab2202544b17a6d3,News & Magazines +e5a2541646f37d983928e5e3b4c589793c8ef6c443374ac029810b8b34236283,System +0453d1ca3595b009c4ebe75b5e323a5dc570ccdda0ff9f65e359e8672fed4850,Other +0068e12fdf49a2054cfa7093c9b9a75b105ec7f86658a32adffc2eaa9287f129,Music & Audio +dd8dac0f7458182f25bb2056df4f5ace24e7f44613d244da261c84282840ce60,Productivity +7fe479492a3a6a5ec0ac48daf38d552d6d7b4483c4a74db4ed5f9dfc97db47f8,Tools +23e923925ea5033054ff873d7b4a01eafda91296a9e78f8c6729fd56225218a3,System +298cd557719a016b902150691138f2498ba2976f0dec22554a5a66090dfa5d81,Productivity +2863d7851cca7086e45895af5bad97d6d2acbb2d8cda132decaf18f65cee3fd0,Tools +06a7373ee2138ad51e79c5856f5ff1e7af37eae7221f905eb20feaf540d0ff5f,System +1c0a6384683c27c3a217fcc3ed9a18b5d51f18a1f5abbfed39bf9d009cea9975,Entertainment +ccaf0d86020cac43dbce8e0093edb57389264cc68e542b198d0286d9e2affa5f,Tools +5853a25d9107647ab2892b9e9af89b75b498bf8b656a6365d16a733bfa912290,Other +48a5be18b3767dcb96ff755822105ebd6dbaba0c769cdee2cfd8d902c267214b,Tools +0c7fd1cf405a4d34bce01c546d4cbb06c4b8eb09d0592fde3ad4ad7a02f1b523,Other +def6c8522b785ca7c391b8a803d14dcea66b156d4840b11c7adf856b6a17a639,Productivity +9fdf6933386dabef16dec162d6a67e1adf69d68a4f110544a5c1e0053ad35a4d,Weather +286f74f4228b38adf6d90a73a2a2b619b78bb88a102a8bff8de5a173b6e41b55,Social +31270fc26f771037efcce124022cf932daf73e3d49d96e718f201e6420af6185,System +c88b34cef0d6d1f95ae0cc049fcec406b48148a838c5158ec4270148410d5daf,System +e696fdac8f3ada023671fe4c6c26bcf319e45bb3e0beaba3774ce845efafd296,System +8440951f021bffbda43dcf9b0abbc5fed79d8e9a168f071b84a51bb882cb8a04,Puzzle +44b14069cb08da9fe1f1e690cb71ecb3ca56c6cf02d0e8cede4fc669b5648f70,Finance +6adfa4c55ad2d335b68a8bc8f22e93943d1c54f78cd880a7c919a4b0aed9d2d8,Other +a20e5c159a7287eb18c31cd3773646a12608f5a079d340ced30054522c1336b7,Word +8cf6eb7a514bfb6f4c4649e930109a50a32596624f766c6fe0dc35a62715e488,Other +0780643e9c3590b30d9d92c4dc224dacb9093bc83d9a0fba17b9e85e26b76fbd,Education +baf4048d7c31542045d848ed971695ace742dd0f2531c08b9d3b6cbc482fa980,Productivity +71f969d58fbd8c7caa82d841637f1d9a598bf498f9d16cf284fff220c4321193,Lifestyle +f415242f87b6da133bff7c7231107d84af0dde2b7e8fe87856675a6fab15200c,System +0785fd39f5481e5a99bb44f8ce3873383d3130255585a5b21465824e8c566bf0,Tools +c38b17e9220ff0b409ea1733d388ad4174f303ff586e8c9c2d57302823a6a4d4,Other +257cca9f4b2b3d99f2a76b3265e92e2310a4f0fc48c479b913945193c3d73d49,System +9ecc05a2e41c51431e094ab98e45dff990934a176c2278574c043d054c062b7f,Travel & Local +9b7f014e0e888109ec29d8987425e948105dc88a5c4a84756a3226bb01c49e7f,Food & Drink +92a9f57041f958ee4df4160ae01ea743a39776531131d50a05568c9775463161,Health & Fitness +309cb2410f55abc6480defcb7d952f1cda08b7fc77d01eff5cf5ba95140a9f1a,Travel & Local +fe4b9aa4f7183103b12a1ef05b2714a996c7cde85875deb39ad9428b9f2535f0,System +f8fd27fe975edb446ecb9c78996c15d1bbcfa423877261b5052e30aeaeddd125,System +82905bdc62cee3b06ebaf7dd5fa0232a128f39d039b201564679a314fd9aca5f,System +c9b2c12e1d36fa65c1f1ad1c2351ef19bab49fcf2358497151c2fca3201f52b8,System +25324054418f6289721f4bde0a18ac930308fbaa9fd8c22219fcf676a6a6874f,System +fa7c9ecf7933b2d3ab4e78950a1c2ae83b6dc864f49196d038c4c03ab889bec2,Finance +164158cf5aaa652aa832eaf63bc00d13706b997c9ec3b84d2e102d1bdae7d33d,System +8d56166f824a891f862d406926a085d9d6d796965863eea3ae660e45f43a73f5,Maps & Navigation +9dd073336b0cef8cbd9a8029de252f4ff2f5605f5b3fe38a350d3794a6de28a7,Productivity +441d9871e3c80930e97bf7edc913cd291765eac3c92116edc8870df01461cfda,Health & Fitness +7c10080f29f33884a279ee747d4a8a2397acdec3b56e894018a8d1c83c1b8320,Travel & Local +a03758fbf57cddda052820aa4d0078ee38e88651d64ea393746e15244f6ef61e,Travel & Local +1242e8fbd05baada6c5121b788f132821d69c38d905af878f7ad9216180e7008,Other +e2fdc59cc45f2f2454109b6cef3c74dba0f503de0379a64b66b1fd399afe3b8d,Education +00f8006320f2e55901fb37d61db0bde42d5d60eecf42e5fba466ba1d886d8fbc,System +2bc8a4ec06c6c879e10d69b0f1e9d8d18befc5fa1988ed127cdf48100eb6644c,Lifestyle +10f00a3dda7676a6f43a1831d89064bf4ea42fdabfadada507aced8d1359bb94,Maps & Navigation +7920d8ae871402d61e5aa02f5f01d4d9e4ac85fa298e4826dde818e38de55f5b,Social +59dd3a47c98b8e3f2eb9d0bff73a1a0b857cdfaae0afb884302e2ec5cbb3ba3f,Other +4e567a1e6da950e1f58ef69ae69ac6eeaa52b3ec3ff118295b0a77f7b9de7c0c,Finance +03aa2236b00cefd70b026262e213d33838a03898409c44ce7e8a5da910f1cda8,System +077040fd9600d1c25bfc99661f9e061240b756891be658e07825391d61776ec4,System +f2164a829d5682752be179f1fb025dad86a309bbd2527afad7f2054d4ab0aca4,Health & Fitness +46012671e9ab2f6786abb9570889946ec84a62011e31ca9dbb86fe250b535f97,Other +58587261ae25dc04bfd2677098fd9ce7e05e92754e24241f5dd3995dd36bd89b,System +c90c2700293ddd9f5f357356826233c77ac3b8389a9af5390e1bf2e668b8cd93,Finance +1e7242d13605178e3f6698d970488b7379a02899eee5243b37c4b77a530b7875,Other +c9d9c783fc03bcd3626888be531e4fd0b0b4c3e930bf96501fed84850e879319,Productivity +3bb1da0f3aec6c8e53b3dd5ad3297aa5e63ee3e82c32289c74e723d1e1a5cb01,Other +5736bd9c3ab9bd58e680ff71a52a2a8421ae7e2ed115742fb0e1eccb0f618b55,Music & Audio +c6d3901cf6c3ea9a1a2cbaacab400a7539ec1fbf835ef18bac99976d2adb4533,System +5529211e2827c7c3e71b3a5fa5fe0bf322fc65347767021f22128402743fa32c,Communication +7e0c8c53b4d7bede94fda682f090c0cd102aa923743692b298206aaaaeb086d9,Other +03e9c2f40573e28d02073d01947b6e58571b89b494820985a77b66d43dd17211,Other +50cd0be1ca6f4c80586d396f8b13b2d2ea2f1252625f7314fe9aa7c1a88886fd,Social +f27070abead755d941875f336e8f0d4d2c0afe3b4ac2a80eb00803e15f0689cd,System +cdbc2699f135e46c07979e43648f380d0baa9a3e837c0e29da1380f9b679cd6a,Productivity +2606a5c4e14f3b3c8a30c777d10b502f992111e418118227ca3971aea8c0083d,Tools +e03e11598900b4a71fd3962c42136ac5bd8aa87aa3fdae347641ef70472ae3cd,Education +8a4aa62d083a7e269fee75f0079fd2c80398ff85534dd8da2df204a276546d1d,Communication +4bb225c91570c1a53502516ca68685f7b8719f0ee998a6c5ed7f6f3ed7c8c045,Productivity +76cf301209ded07011002940d793c47648fc228745108b80138177b3effb10d3,Tools +c1471d74611447362b17a2393e2e3437b5f4ccab23e1717740324c344a427ddc,System +b1df3333a2d26c8fbf4a82e05abde0b1bce24b874e62f16688a16ab70b7b16c3,Simulation +50bb169f0080eba8e4a3bd8dc8307a39692b8c1ffd4575716efbe1dfed7a0ca7,Music & Audio +892eb772c0c2dd7a9bbb9c6322c8c10ff6e514af9c62f5283a31d69a22d380c1,System +536b2fa8a64c06a701e9f8cc09bbea428f38d61efbb51d3c173a9d5bedef7178,System +d851d7ad8be92047b0c81a0d535fcba9a8d1a931f1661cadddb1e4b3683e5a8d,Shopping +37f544f85370021f964c388e3cc0657a09e059143afa8af428b4acf983b47cf7,Books & Reference +51c6fdacbb743e9926017c0b9c2b83937d57c3982d46c08797e9f913fbb39d68,Puzzle +786e8887f2f42bd140feb073d5d15f3d7a4cc2e328c6b8aa09fb9b3304da60da,System +009541d6a4ed0d99511a3b2be4039130068712f6fe38cfe387a52b1419ded4a1,System +d40c2b1fdd0c7be850bac626d281deb27de4156383e53f3737192ac415a1e7ea,News & Magazines +74fac20d34e2ea3ea9df3a5b13fe5d5029245c6f86a3b2c3b70e0f5af23d8f2c,Books & Reference +80b631c9f4467f50ce334f7f8ab2e9df25539f86a723dcc2304f354f2b0a5d2a,Weather +4ce10fe73af20772943700ecc7a0faf0ba2d78beb7d0b3a005b536a34f7ddf00,Finance +5a2333da385dde5b9acb89bd898cf24acf668227caa373ee0c0c6aec828b5b5d,Productivity +be239c0f6ce8d9567b3929405e4b5567ef1921b452551d1852ec5b92378e4abf,Health & Fitness +ed2b83b756d8ce8ac4abd5f057b1b17db6ea198f1584583cb18e20674ebe465b,Business +b590554a994f2bb5c6a5126cf648d3a4282249d7740f1274b03be153c7b3c88c,Shopping +f814d39c2441ce3520e0d27d80fe3c02ec59b68026201fca1f24fcd281f98c36,Shopping +7c3e5b081ab7597b391fa0c0eac49bab2fad0f41655f0b1880b49245249d676d,System +84c44d5790af9fb1075b24539ba54b7666ec5b245b8e28144ebb4fd8789ce669,Shopping +23ba6778cba91122a9d3515f780d4002a3664022c7dc243bcb85884f6e2d4c45,News & Magazines +cac6d8950ecda22cdd125518cf2863ab8ae5ed2340cd2a69c8496e1e733cb920,Tools +85b945379d421971d514af901ed1ad682f72f09302d31df30f4f940e9b348fc2,System +50dfe95144171094d329f76d9c8baf4cc4245c347ac4fd53aea2d8e7584e12fc,Tools +d968aac3a2c8ed8be877a2a447c5e389e41dfda8972b895daee5a179e860d0ff,Books & Reference +e1ecf540a3af25f458ba7fd455f6029cb7d734c57eabc5541137b277c66490db,System +2c9c3f876ee9d922ef10de38113373e624baa25330cddffcd205efc8ce55ec85,Education +ef893b5292c900b93b0b99ed4e4df1b861d313f1cd5ca69e276f17ac8d75c056,Food & Drink +11ab744c4877ff76e4068d788ac34bb06751133c2c604694ce523930518905c3,Finance +49483d831adb76882a1b2144d4e3b15f37b749fac25f2a2d87b303c5482d5297,System +64b2805372c6b797c68fa80f47730ab831239b3064dab6c33a232268db434bf8,Education +49cfb21c1a378b11dd581ad19465ee6004b09fec6b0175754c03eb5500aeb96d,Business +601103b9802620792163a8517b7e2faf9f17ff9055fc602473e506f97b8c4b85,Music & Audio +e79a0c43770a8d3e7a614e21e59d69734caa6ac715ee76b154c64b275076a642,System +9b7d2a6eacbd2371a70f47a717de05b8a331a22facd88e19b8fc54bb584542fb,Productivity +e4dd99bf54254f09652b1509dbb4ddf4d92701ff7fc1809c13b99f31f3703b88,Business +408698ce3efa7b76550946d34f8f459b6bb7873efd69b29db3068fffb00b1bec,System +6d77e69903a591d9b19c48d7377168eb62a45a503bfde7adae928b2a808db177,System +0457cc1884bf2ef597ae515fd5c0f4fa3441e9daa225963e136265f34acc00e3,Business +386c34311a35b258f295b626bbc5cd9fc99a95b64cb6a867078aa1798b889f2a,Business +37cad8bc26fd9d262b8db1c4883ca12833cf313fdfcf4879a5055fdda1980cf8,Music & Audio +116db80570bbd7a3d69aca9cc38f59052ee75b4572e34587f5963e53b3249876,Productivity +4f6066e593b6826b26e5d569f59415cbdf8b3a7aecd2e0042609f48dfb6d8318,Other +3f4067cc00aef89c8b756fb34c2f5fb0e6e4817569ac281820be1fd162d194f7,Health & Fitness +b5b3bd77b66c63a0e606be68652c924974e4602ff39f9bd81f589840dda8f2cb,Lifestyle +11fce36f5bbcf82cd3d59f539ee8994f8aa7673700d272e395ca0c02b4582bd8,Shopping +0d559bb05d85936a372c7f22af78fc44f36249a7a2b2f60db68c80fddf792501,Shopping +243f6f8441e7f323908db8676bf00cc6e00e2fb03e6931a46f21cc04bb2e1008,Maps & Navigation +fc127090d3eb23b589bcc9e570d8365bcb6d6332bb08cd4f22c8efe33235f0ab,System +68ef5fd2f9d37457754cef97b6320b624bc8891ed7a99f8e370026736948a81a,Lifestyle +20ef5789915229b0dad414f60ab5afb94bc02a1d45af240b6526a80abb8ff26f,System +35a8447b12fc09e85196dd1b2b28e15a80f5f8afa349af66be71f4f996dca0dc,Productivity +95465ca17dadcb298491377b4c8ba953f523e93d857c1cc8fe77572284f749c4,System +621878f5229d96a651a5c71e3c22c006ab6eebea74d8857ea8013b607a363ae1,Health & Fitness +b838d4e6c8c6205ab2573a02083ea39616c6c0ee3f9c9f7e4341ca83412a9553,Board +5ac3e572f795a9adf71a2dfe97c650d4ff18d08dbb584d13c8f18f394aa73342,Tools +395d73acee7dadd88ef84a0d5bd940eac6d36eaa656e1e5cf93d4027df08b2f4,Social +392e9b7beed863953f96b74f105e0c924f3a3b2baaa90921c7d47a10f99043cf,System +78f643ebc8a0914dc58ac39e3f3f848d3b3aae282111a5ffc60de9be06390b71,Other +85e071c09408e1ce73520a91141fe6b68e4452933013fe72edd602c2d4cd4433,System +4b2b8f031224119d5a004cce41f06ae96b49a199541cfc97a60290a9d070ebbc,Entertainment +209ee32228a46ca37d0a96b8efa159a51d3960f1ff476b979a0d5a43ffd50d55,System +523dc9ca395eb2024d695984670aaea80e872908f6d98dcf7b96a32628444bc8,News & Magazines +358cb22f3edd7c7fe6fab61e3fd93350b3e4efa94cf3aa2ab199b529cc4f2fd4,Health & Fitness +30bee31e7e88055ec499caf17474853c747e8f6679530efe31132a95cc9c0e0a,Lifestyle +165a239302ca2974a3f3b9824c375fe318096b402204c1d694be9f150b6e4418,Music & Audio +3e89895bd89a57ddcecc33b8abed8dc86ddde1d25b151a3ad2dd11380abd7a43,Finance +35b76cad00359b1d48681839c49448f23119e452a9331af26013d64ad891019f,Lifestyle +6647b15a0c21f0eeebdb0f215cc3826fbae88dabb69389143d643c7e4b589062,System +d2c68c37dde4a401c92ba77dfe73ecc9e7ed5106a37f1a47dd525d1eace1ce1f,Auto & Vehicles +3d0970cb4c9d3b1fd15796c0fe971d62cb9b6e73d9f5641e8278ccb8fedd63e1,System +9425e147e821edec45333dc80ca323a1a4cbc4389307205bd61fc8e207b110b5,Productivity +0c61e19b7752b27d9354bd218a483b792598cd892b1dd626bf054b88308092bb,System +1b0bba024a8e2d1847acf977cb08c7c82b10db33d74f28a36b8f576d22b25c05,Other +240368eca2f4ce2830d63cf0c33ef169184f9f956a0ae68ecd406167db783fd8,Role Playing +9f196aba8c8717ae6066080fda6de1d9ae1dc4ae74b6f5e97bdd2d63d6411d5b,Other +417cd6fbb489880625b7f0f3388cd63a7cec9e76b3902839eb311a6261d5d099,Other +2df794be387c1e57c03514e7284d200cd476e8392a184a03882b45a1b9699746,Maps & Navigation +8fce99076693fdca3b7122b3c0fac6d82262ed9d1608b9dd1128e4fbaa9f55c2,Personalization +e5e1797403e864216f845f0ca37ba86883f4560a86b38fd0b87c8b0ab86e2dcc,Board +e60f0a7a3402b065185ef43a796dc9e744028a960e1bbc5487e21428d35c578d,Music & Audio +a930fa961205fdbf56ffadfb5cb69be00d4b3799f9861d62f66fe951264d1a70,System +1725cab09332953910372940d8bef54c30f6a911f2b74b7683db95f0d315f447,System +f1cda006453a4f7d8fa6d987e47fbf772540f99bf061f8bd79113b3dc069d514,System +2e5a7390ede15ddfe41be5a24f67385deb28305fffe880a66d3aabb1924a054d,Tools +e89bc28deb0ddbeba0ea1645c9a343842ef8900bef5f154bacf6e3c50c722083,Tools +1c469b47f36c830650770dc8e3246343e17c63be6542b1f1abfcd35555255423,System +d1a26074fb28e50c9b1cf4935f7ec36e2f49df39408088c0628a9ba5afed860f,System +9fa4190a2976d23da3e8d73a36a2d3e5b1045c6cdea7ab45a17013a93325e0f8,Other +12cf3a28c21a75fe5cb2e5c9a6f3d4bb3e18f2fdc49268e96d3da7193d53720d,Other +04e16bb750a224a63b8a151064224d93cdc901151e6aa496b4ff17a7a1216f13,Productivity +497b538a6418247fe1ff03ddbe8b039c66675efe657424b879711b3749baa2ae,System +dfbe0ebbe402d9e40cd9d0f908df12c2b393dff63b20a5a58cc923040357b52c,Finance +8f4104d4f89af1947efd445c1da4ab9ea86e58535f481b7b796c32ac73ed4756,Finance +bdfa4ec33844a61a9bb099ce2c933b68431a14c66701d47c8bf74e0e05b00614,System +fb7cda82d5d831a28afdcf6b7f54422258b4f3c1e09d230244311ba4d3188c08,Entertainment +747cd18f4f05e53517b5aaea7cbb40375e5a994dec71c9cb44340d4f1d802472,Health & Fitness +980a5344eae9d5874550e082a6ed90b802df0272270b453b2dd210d0cd0f8818,System +1e3b96b484571c020a49cc931ed15ad260c34c15a8710bd36bd8d32744af314c,Music & Audio +efb20169736754372eaa46ef31668eb66d3e6b7486f10cc641270d4d79a04e00,System +be737b201fae9f5fcb789a6c9dab2dd7adee49ebf618bbb057491805bdb5e46b,Music & Audio +2b77b82e6b369d598630f4858faf1b86e7c0fad39d5f311f3de23266255aca90,Card +9788d80af21a717b9366c6ff58bfdae94a874dca6443a631fe0fd4d20ef30e4d,Health & Fitness +d09cd3056d1c5b0544a8bea9c7660527cde615293c670407cd3ff8d19dfee5f5,Dating +ce82e44f9a920d248488923b1e84dd6b54f8741ed0ffc96c6af58e0ce22d3bae,Other +ce2273d6d2a8b3976a7f5d8df5c19b2402a5a7239abeef883c417141c71b8aca,Puzzle +74b95da0aa6def974870e32577d480403f43efaad4a6d2bae5f54185038a9e07,Food & Drink +39f76f053a5e53573a100834fba4d8d8a4e83a1b3dd193bdb2132655f612d547,Books & Reference +288b00e89188af0ba82932b70bb3a3ccefafe1903925046c07bd08cd384278c8,Finance +d1a975b957ad2020b0b9729eccbea304e025af8ec8e02a21bdf6caa16fee7c6d,Music & Audio +136184823f612336f7acf10d01c6cf846adf2c7781898ba6825d1ef794790318,Finance +1da4f2cff4741c075733740bde4b1ddd448b46b16cf838886b9f22ee2360d164,Business +8f4cdf6fde52e45555b66ed6429a35e44c988fbf6fada206765703b02b0818db,System +4243f8a0a53af0a5ed31f03f7e7dac55632be6052221aaab8bb2465b053cbf1b,Maps & Navigation +737fb88c2e5ebe18dc75961f5bbe1fbe881e5e72932030a4d14fc96e4a7cc80c,Health & Fitness +82cbc5f30c825b5dc4cf42103505e6a07f62f96f8c32ddee800bf485c2caab52,System +7414c68a7a23ccbd97d61c51546cb4f1fc76d6fa81a5bd3da6eb5b185b6eb569,System +88ed642ebcf1167507041f6b0c72b3f46f35a17325853f3655bf080117f83241,System +dd5d66bf721ab2bc0ab0d935ca097a2db9f5425a690ea7f90005114f3988054f,System +bf4a6cd5e12911eff65a6f4a3da91e2491eb89641be4da7b14a890f8b16c5cd0,System +8ce2e935fe59339edfc0c8cc2cff98332a19f81efcbb500c4856bce3efa5d4f3,Other +c006e341a5525cc772543140a19e48420085f027c13658761eecec6e029557e9,System +63305a74209c8382da17720976c385ab20ec3048bed7ee084a1dd74d4c6078a0,Other +409f5e3470487d199352a22cf839d267117033c7ab77074e3bbd56522ed59ce5,Education +c8807f4c8a83ef7cc0ec1f9d41531114a33655b355ce531464cbd3c9d6c14391,Finance +a615f569028f3519ad2eb4f609aa9ccef482c6d0889ec5988c8137a6ce10e92e,Social +03aeb5b5d993b95c8fd9dead3c6779a7e0da1f7bd3b9c839dfaf182831708fe6,Other +811b5c84c616386b8c4305f4f46309292ef6625645c844ac08b5244e1be06a2a,Tools +237e700932c0963042235af91c8f5156aa73f5f4b937c8f938373b45c5459914,Productivity +461a6d1a1bbb4216317f834c19a30b4bddd2b31456096fe7cca93af9d018e4d5,Tools +338da78dd316313f8fd2c44a1e530d8dd7cf8a5dea1e25a60b775defcb153600,System +1f4a9f51fd07afaa1b9bf6c48d1cd4889c2d8184a638ddc6ca20508b84db4d9e,Shopping +d2a04da418942ea5c5d242c52ae189cb23afdba5024c3f1d421b0fc87367dea5,Other +fc08675b806cec15db76d9b16ca1ec7733126c024d5ae2d7e54eeaf92945bda3,Weather +0203bb9d726393113a6aec8c7ac3d7f48e219cdaaad795ac1b28ee7653b37e7a,Business +089d2a423a8bedd4198cbb9eeff1b500facdd1000e592182ee4efce4cfa47dd3,System +93b908746539938745921aca003c1c48823a270bef2ca0f6d9812df5a61302f3,Medical +10c2d346a88765c981a5b622a674b6765782d5ac16018b90be91d584591206dc,Communication +cf4bdb3ee1f8a8a68963e202ea243985cd0e3f4bdaa640f14e22657f28bacf4d,System +5afea5430b26b103bad66d08ee8ba19d7058a0c9131b47d086e4757af0e96b5d,Tools +af98e94330d0d5709ed4e59d24efef42178779e0081e0350a7dfabf02469110f,Education +5c5279e5c633f0a8e95b1b48ff3eaaa44c40c0fdec27a813bdeea1e498336ebf,Shopping +418e0d017dd5cd556721c4713deef2b7062725299e478dd8f4e55adcf398443b,Casual +79d5b0248426ee3f636e8c82a0f3fb530456e265ae20d0d6f3b4932ebc0c7ede,Tools +4593870c454224ee21793baf489d2213b3a38ef8fcd1f2f751c35e1ed8c1c7d7,Card +9aab67488d3b8af01362502a9df73fc2e3e4d2e42171725225a900433bcd279d,Tools +d747b574664ba24fea5c13a726ae73a75ad7f2e58f6e5411dbb52ed408929533,Finance +4a7ed60520031e2621ca8065111943b247092c8dfc57d5eaf46f88f9eb9e35b0,Entertainment +748b909b75ee5b1002a88cf2577a8b2b11dde401ee2b88672414a3b827d85122,Casual +5c3c3d87107315668d4eefa19c1c488fd0855b85474bf7d944dfeb27a20564f2,Tools +be33be9b4587fbb852da29a0e7b54fcf26dac78cfca3f5f93c9480591e25ebc6,Health & Fitness +4ebc3ce720212d36e70af2830bb6cd760e9e20e8dffb61dbc7b4b1bca0dee210,Food & Drink +a88b465653003e2c5a63a035ac64ddda90dd6194edd99041c8a0002f75bd1690,Travel & Local +36ff6e0f6d983aebb498c5d4ae4d7b6f6739371d53d103668dadf8bb15daf7e0,Personalization +e3d79f6ab538965d569688067626e17ef8235fce8cc0610b6b5fb544f4b234e4,System +bf0d7c688086f5c59e21a83f75a152c1301b4cb979f18c5268f0f90ad835ec32,Lifestyle +eabec94bdb39199e90cdd2c5524e3faa101559f07ff151ddef452aced94dd6b0,Health & Fitness +3feb7f37b925163cd97cf26ec2bb2368c3ddc7bca02d706a0e753a75dae399db,Finance +b24f2125467725f425672edeac7320ad01de32b2f10035464522ffc56b953eec,News & Magazines +23fa0b753ab32f90fdf3290fa7cced610f906f413d8fcb588634bb88241851f5,Health & Fitness +58053163dfe8f75e5e750fb59a3eb2d0ee0efdfcd56f6766f7e5f830428b58fd,System +f0e9a9e395e558f7cc15df232416e49033ded6db42a0f5f8e56ddb29dcbe7c75,Communication +7d91451e6e48f22ef725ce009a88c08afc40fa71d730a869c9183e666c1c7f35,Health & Fitness +46a3221f5c569ca100c2405b2a90f44b84f6205fc24e8460d4485b7b48382e11,Health & Fitness +d80bef4a3f7d1dce5f5a12e2376f73431c3b196938958e8519a3a5684129cb9f,Communication +3cb4931a5032b9424dcc82eb80a08f3eca098417dc9782de8826096eb84e8213,Communication +727ce8f9d726a25081afc434b3dbb68937900b774b4e07e62bb7422b852c3379,Shopping +e8a0ac17492b0f4272829f3726171add6b15fe84a43fda8e8d8cfda12b56110a,Photography +6b566cfc051bf0c1b26d00bf28a56c7bead87e1ae514b0fb83e1a8ecf8c02976,Social +24e9e5561cf40c0fdd48cfba6f84655b3f6b211f1896763b2c18d9a7b7d46615,Finance +4a56def0619e16ecab6a61e697f89d98e6f741dbffbaf03051444e0a7aea3684,Music & Audio +88891f3336edd8e882275745f7cae0cb54942b0db7917c6b29172def5077eee7,Productivity +cf8dbfbc53d25bd539a249a65cbb1c8672dfeb9dfe6085cb6323dcf7228b4bfc,Tools +93664ab636a43ab92a96a3ebeeff1c6406cf7b7850ce30d3db5b824f078c6930,Lifestyle +582265eb1529d2113fad850efb34eb0a20b9a41bb241bde836202a6e0ad0d0f0,News & Magazines +447c5e5d0d6eb301fd520268b7b668de78e4e4b187fadc4d05de692a6abbce11,Entertainment +de6bc35177d4f3e2b0b8030cd89b5cea50319a1e7560dc3e5df2483028715d9f,Weather +7f7e2d015d59ceb4b5470d1e503e1a9d2a75a454bfb8a359dc476628ebe3b77e,Lifestyle +ccdb6557d1035ccc120f1ef58b1b7c4f7af4a797bd0d6ac377198d4a7655e6ae,Other +7ede050d079ca835aebd8ba64afd5e1d06dba9a7a31cb6de2eaf2f0896a0192e,Strategy +2568c3590210794ad40fbd711e99388faf8cbbd95120e559f55e56f46f5d029b,Finance +230917c90435a1992316cac4ca5391b9406e960df57b381c87784425b5591612,Sports +f8c0aa0de9d34444e04dd257d79db5b11f4a42cab38077096ef5ab8dec6c5e74,Productivity +b99ed46c3792365b8bd187b379de526e9b6920f9a266070245fdd63b0ed26c27,Video Players & Editors +f5fec0d6eb85fa48a2991d5163a59d135c84cd96aa2ff2b6b6b6da19641fcf55,System +4626079237d42a012914cf78e30f2c86814ffc0c281dc99102fee66f4e9d3daa,Tools +b600a0be84d3a39edae8ada1aa4a9600c49d185c17a6864b44ec7a15901ec804,Lifestyle +89970fbd0998d2d239fb57f1b615a714fca12fcd42100e7803a415138c3da4df,Business +09c16971d12a6b0ad6c7268a99bc3ea10c67e5526d41991f7cebd68e531477d8,Social +bf97b09607d26ef1de19f68fe303219a31543afa38ea9d5054d7c6bbf996a4dc,Racing +2f077f07f13b8572d8507ba94f5385f6f2d168531e5514ae54ff6000ff85016b,Productivity +8c174d246794f40f54c7215bcf629b7407c42f539bb2de573078a53d18779039,Productivity +f11262b6021b1929634863c870427c24cca9b8821d38a9593628ea37f6285023,Entertainment +258cfe79f0ad8a4f98a63d850af7df75bf2f60b3693b192e3a87d5001a190e2f,Maps & Navigation +6812ff06326edaf3d9e15e83c4bc393d241e09dbe87ec0bf1b73f48ceeda857a,Maps & Navigation +6f02c149113f0fcfee8275022635a45e9535410d8a37c75ab2b1452191a79c4d,Finance +497bb965f418b44339e4de4b46fb5405ef29cb39dc697bac9c2694b642d83357,Shopping +77b3b114cb2beb91fa8365517e4c128f56057d4ee3aedfc43b1e6cb8d14f59a9,Communication +c9de20e192ae6c1712d2e637704e940ebc6396703b259f81ed45e46e9fa5efb1,Personalization +23c5e8ae7ded3099ad76029a0ffe212cf998e846b9b2c9be0c5fee67ab6e6819,Strategy +01e9b126a2c0eb2b042773bc5ff1ab69c0a46fee06eaaad64732e514ddaa3bb9,Health & Fitness +85c389006c550090fc4c44c0378cd71821f06e95ffa4320a76f1bdadd32034ad,Tools +481c073cbd16d1eebf963aa4c5d51fb7ea9e0a408b30896127259eb745cea42a,News & Magazines +3fd67887520773720309171a8bd3c1f23aa6e1c5300fc09652f4f674b9ec2465,System +74d2771d3b11150ce48c9d15fd7d16d4332f10e7c37db5f85a77abd3af13e90b,Productivity +a463b1ac33ab23b88a540a332baeb5d6869b5744ff8008e094b0c81881306caa,Tools +312c317dce046e17f35887cba98ce34119a50314d6c69cfff4572cc86bc64e35,System +e56ff32089f2bfa5897a5e5c5ba707b266fd6f055b62375e51f2ee95a1174ba6,Maps & Navigation +e059c644c0503094092b99045eaa7690a7bfebcabebe17d19ccf4e9eebf1dbe7,Finance +4caf4967a6a0b6d6ef474e07e489f2910908d8a5e15a6e73c9de1374196faf9d,Productivity +9c4781f9eecd301d9f5b1d9311a57262eea095a44244bc1002bb6dbbb48959e4,Productivity +ccfd33fef0877e1b0a14defbd5746d06665bdd99295215cd0f795926e3c1e104,News & Magazines +6037984bf8ec6d96f3f0fc2f82a5ed37e1a0183b03730986b8d579fb5d8b9601,Personalization +3132a2746d9971dd2a8550915182bb04db28e6759e900d3d9469f95cbdcb2085,Productivity +6935225101afb423f42ea3da80021ae7969a0efdc332be4cad7ceb65b0c64e40,System +3ec9f73e317018699bf6d490d6864ab79f262609f4ffedd053d030677816e343,Communication +197ab39c44cd93235b0660afb3514735b64dd80e49f12e85dfea1e2d6d768a3e,Other +a720715894cb850f9e34f48f2dac131009c9cc095d53402ec70a82041ee25799,Music & Audio +641c38e2eebcce63bd9071a728f43b0d61cea89fb422cd62de00c32538372d7b,Education +4491bc1573dd5a73ed7523d8cf50beb799e301135ae1b43b9878e60f0ee66e12,Food & Drink +1b2ef80c7ea830f7327901faa063e73d549d27aa5b88111b6c1291afd169b293,"Education,Education" +531ad1fedbc09330627504ca068f69828a1e323cf9bae17ec4cba088d6557711,Books & Reference +c697e3e579da788fb2600ee3ad05e19597d018e9bc4558cbdb02726482fc5fee,Tools +c784e07bbbeed91ee1c2e4abea2bd701af21996f884a6e13c16844f29b48060a,Music & Audio +2e51526e76361421cee06ced62188d15564a6665f26ee525f12d7f12340119b9,System +13db5dd98f58382feb1733716e3b2098219f9150b86df7a77e39cba82d7863c4,System +161607104183c92dde204f3fbe2c48cf39774ba5d5f0dca1535dfa19fd173b1e,Lifestyle +a56838e484cbde4f0f85eff0bf6dd704b0581329cbad7ee06de87d6999941a25,Education +849b1b8562ed19eff1faccfe1ee0376247ecf570ca77ad40815ce22cd401755e,Shopping +524c791de8f6c34929dadfdefe92c039b1feb17dbc6cca57f53888b1c0dbda86,Maps & Navigation +83bae1991726108a13e570127fc5c5f13739f2f9eebf2a02a8ac814a85c74a2d,Maps & Navigation +c51d4d81d8f5f6a4d1c4de5d5cb0418f85ef12c10b59cc2a0adf31c327cf3af4,Maps & Navigation +d3cb43e5629c908add381b23f19395e21e6a2d8cb33a16728807250f1d1ab0fa,Shopping +e0c7b82898191a4badef9ae7cd87fd6bacb0912c73f985470658ea4125c7a8c9,Tools +11b31bea0e06050c1d9b95017f28cca33dfdabc2954cbf8fb0b76c2e2b87d8d9,Tools +0d8f691d4881414a8746da0891505b6762bbbf7e33a157eb3b75bea2cb431c1f,Puzzle +7d85204112e7af325b985b51b4c8caffc935dc9011ab633d21e6f91a248c36c1,Puzzle +49ec2c3cd3974a3625416c5a9b53be263096926ace85021b927ba8192aa78c56,System +77e0e00d2398174084a6571d3a65633ddbd342d80ed0030a3097ec74a5e9c1f3,System +7718bc9032d885d055edc0cda48191a7014c219c23ce1798aa359b3b47321bbb,News & Magazines +9946dd489ed5978d95e5a3c258a0c99aea6dd312fe88987f5db65b49e02219a0,System +c28a19dbea3ccbef625f7bb9a1b27ef18714091a1fe8ed772db3124d1af7bbf2,Health & Fitness +efb43f77b998c4455e5400eec9c61f2cda03bf31d50d15ab6c974372d1b91db3,Medical +45131fbe145e7580522c7815ce04c2208617683f3b74902b8852e15ce2469d9c,Video Players & Editors +e9ad7b88651c1cfa3425301d3abd212704f92582668b6bb8400b2904c33344db,System +a972c8f947406a4c3ca290541f602f882f3b61f0141cd650f02399ee34f2bfca,Tools +91877d0cf38c9178d5a15af3030dbc4ac7f2f3cf499b811a12ba0fdc4ef92eff,Finance +9d6a8ba0689da54f954931dbb82644825d41fdc6b7907e616ca26f0ea3dc8e52,System +a9494a07a78eb1bb93edc8415caabf907bb2a3771dcfe4e3fb7fc879266a6e1f,Weather +8bcaa117248d8bb2171e5bf650607423a7facd3f7181c188c21bfbddfbb6b5c7,Education +d13734e86135425d025742b8abf833bdf6fb17e1750300aeb4ce473cd966d30d,Music & Audio +eada773e36db07fdb63508dec4989664697410cd2e8e2236350702fb15607a38,Social +83243cc791f39bebf7162b0c83066a98c6630bd78a1e5a25c10ed17c4d8834f9,Tools +2660ae6c46590ece6ffc745cace7e209e3d3a9c6a185bb9f62555c12445d4ba0,Casual +65726b5005f4e284c3806fde81cb632ae10f225aeeee23dca67fc5eed8b1def2,Sports +acb5c1297dc52f82300600bad27fc88d9a5cb7ed14dd34600a82c6c3af3bd447,Other +849511a8286661fcc9b9ba179e85846cac33c7e21ea21872995828b7863fc2a3,Travel & Local +22d341bd6f6ab0e0fd549c5fe18a3d3bceb40502b18a0d93980af7f9e7f49100,Casual +fe4d4ea19ef44ab99ded26392e85e6593dd1f5bd68434afd481ce2c2b916f15e,Art & Design +867b20f80e767d4e53aabc6282eab5d3af300c586bdead9acaf98b0413ac0235,Casual +f17effe87dc8ae9804cb32c9ecda71721e18a4a2cfc3dbf7c142acab2ac5a51f,Card +41e16d062168df0aca0f1ef727b277bb1b012131fa0209f181ca528e1cf0a97d,System +0508af21341e5b329e585dc5f909397162ff8bc4a636dca2c99760b348ea42eb,Maps & Navigation +2531e38f0335c0b93067b70a53c3c40c6980f678f6f4d4718dcd8ae7281033ea,System +b42b521c4a22ade01e3b8883ca8dd08c00dba6120931a0effa51e301b92e267f,Books & Reference +34b4d8e3c2fd6482cc545157583203394e1cb1896f045365c6c6003e210eb4be,Food & Drink +fb63faf41f834ec9c9ef12de1eb91d9183998eb3fe3c5998b45873f95cb9f3fb,Tools +cf7391e7b87ccb1c756834fb25fdb9c3b54f7d3e91d9f49dd2ab3b819333401a,Productivity +c58f6c028c223de12c908fbab298fa18d6de670fe2d48d24abd86ee91683a204,Tools +62076209e9c996bb00c927afced1f58b615cf6e619f826fc88f757f6c4446beb,System +55e24225f0eb5f8aa3e9448a1be61057dcd53e211794931ab5639f8e00de5825,System +a4fc43e9b455219f55e237b1f6fd16c5f97f6dc00b2b140729385775de551341,Entertainment +428895504d486a75d3041bfec66ddb2f575ead5dcbe5d700af4e618901f322a3,Finance +4fc320776b7ae9d81c7e288171e2da8e0c9dd8d6a39766349e1962fb8bc83cf0,Communication +49e480e88470f2bd771de65c0c58fb9eb509336916b6b51aea49c420c12db498,Lifestyle +e406deee855fffd769e70a8eb564ba22761a3cac4d28e5beaf82a570d054f691,System +da1eff64b34798c63baa24a4a1f6ababf0224d93606a6dacc9cd4ad0d44c5e56,"Entertainment,Music & Video" +f7fe71bf19f442592ffbbde478d4354de05fc24e2d6cefaa3c563ca47dd70160,Weather +273af1b8246d08c5e65b73f76c7c931e014703f93f58f87d87bef6bc3df3026c,Sports +1a24965809206c7b6c16ae7ed6a7eb84b770d39f7164d2a3551dc938c33369ff,Tools +7a4466dde708131c9f626d131a7089706db99977c2b4b04abe7b6fc9f9110240,Productivity +5905bff6339c1a8136ed4b598120af3a86f3ca8ae33e5592a343812c6207d755,Productivity +5141301907de8f65c37d63c2f24cc0c9c85732f60cf53cc96a77ce769ce643d4,Productivity +c6344a3b84b3f1eb938825c9822e5e62d09efd1579bdcf18d6b47f4d77a87ec8,Education +f2b8a28d692303132451cba3d2aac7e1865c4e9f177f787e5abb08364f354b27,Productivity +ed1559c2ea1125a66be899acefc5afd1465ea3d7d4724efe9a5524544d54b41b,Weather +56a36ecff87eb20e4d2e6262ad88fe3d07ec31fc060e3d4bca17ccf554e7ed65,Tools +7f4b8a19c321bdeb39dd35b361976ccf5b183a51d3049be8a2e669a2f25b0128,Productivity +8317d86319315d3f4283dbd42761704caf67f4bee9c83520c0ec1d6e9273e802,Communication +dc97a48bc4559b2e21855bbb423e75669f51454db08459420214162d628b72ed,Health & Fitness +434ef0ccc0459edc87df2f93c62fe7e7c4d0767c864959b7e8766e79580bf2f6,Finance +99d6eaf4fea79be5f3bc1f79d4e614bdc79ec5776cf2c40692e8fd19d673a1dc,Finance +0b6a09173607a4a54aa8e5ecdf00ceb391c4432d464df27e3f667fded10da63a,Weather +833cd7698fecd6dc4569829a0d28b5200b756e6fedb987d5e9ed70e217f5b5d3,System +27c3f42b29042430ad8783f00ca97348a4bb6b90e4b3dd81c61bd67543d674f9,Productivity +ea90c947a6c99df2cf10d3d29159decd0ae404cae817adf226dfa7c35c6b0278,Social +6ef0cf3c8c853b7397e65d12dbe3fd07b348ae7bfe294d922b6465519be589fb,Productivity +24df41da58bb93eed7d5376fac3e21f207c238a185dd643ec814bfce386ae5ab,Communication +d063f897d3db0e142da1c72a6d93a591f0899505d6376af5cff070486a653b62,Lifestyle +b5820a94e2517d1943ffebcb4d037c9e0f261467939d25b8f99760e4d423806f,System +e529fd266050cbe592366a1a65d2f6551ef03ac1b4fa095bfbdf8537b3aea7c1,Card +2e249ac75b09907b1023fb45a742d9c5d58255f6384561f0ea897573ae3b80ca,Simulation +c29c105de6904ef6b5c48d1e5a610e3a7028c349d103a8f38e0c3c78786b0c61,System +00ee8d10df195862e551855c76779a3a8be5f52d36587e26f8d47748ccd54c9d,Books & Reference +72b2a3ecb5fa73f12c00dd210ffdd9d2d04bae0d534eaadec9eef866bbff4629,System +e32aceca65f5a2d2b83937f790080b7a78df78c360802323fefab4c54e6292de,System +57e74c87355047bcba194c1c8b529a2b3a625eca98c21f726216f6afcad2ae00,Tools +229545ceb5018eefa91a5f171dd18e0e5a2f2713562d995241277e57896f23f6,System +54f3630fa60a669fcaeb79760b6ced6b618ece3ef398903efd1f4d3ea813e78a,House & Home +f869aa134569232985ae07be60598c928ce808ed6c8bce0727abf4b7a738e13d,Communication +f969147c89fd69cf4615538882dc700e9c9fb89db12cc76b667725bb4cbc6238,System +f2eedcb4d03fb7d119af78fb8b3b0ced7c81367fc0cf674570830730866a5465,Shopping +921509522e3227834ab8431885f6d144d6af182b2c5932705e7da4460d4569eb,Health & Fitness +4bbc7405954401d762cc7276e344b00a4ea14b79db618f5103a3cc90135843cd,Puzzle +01d23bf1eeab2eaff1e43a6377f435698ec389a7d1614e9b523fb0c6ffc38fee,Education +4d2548a54ee2450e4384cf5d267900ea0ba9a96a6a7f752a0c36fd13197b7053,Strategy +20974d2e086a281866cbafd71474b8afaf460654a0b4de5c92c8b4fffb8c146d,Business +96d6b1c8f43389c721983833513a02609083fba51116e91eb19220f354688321,Health & Fitness +7a67028e906ee54eed28404b754744d0e854d9baf6b7f8b99fc67a8f66221950,Finance +c7bb9a405236a4b2e58f62fd526287db0fec10fb509272e51cebf09ec20bdbc3,Video Players & Editors +4859425552c1b46a6783bb197f588ba9854fe2dcbabc86d21ba96a43d4fdfa71,Medical +a684e1496091a2cc8b9dc21132c733c5388fc09605977f5ced497b1b470e5342,Lifestyle +a11a8756bd79b689c232ae139291a4a49e3150638d842cfc5cbe20a6067d37cb,Health & Fitness +d30c82adfaaeaebf30cfdcb0e4b3082eb4eac96424acfe07097741a3c124c6f7,System +e2db5b91292f93806b0794ad92048d08743b7ffbaecf6e38de0df6f3bcb8973a,System +d748a5b9b4c2178d753c37ce6382f9c1ab218aaeb72f914b4d96ad80715b79f0,System +9f7845c0e41398fa2ee8d36a8c6ee75691024be2a1355ab70848812274744ed1,Personalization +5ba4286173be0b650ec7289198b43ab567093c989efe36a5b5cafcd2c6eaa744,Puzzle +96b4572f22fd4b143782c5966e194b61c2fdfeea147489eea64f2307a29de660,Health & Fitness +513d41368004173c028485092e14211efed567d643b4cb35fcf245919d954d28,Entertainment +b1316e717ce688bdc7eaa1d3ee600b7445ef8ea629531d427c0978b0d107df59,System +df162be1c98d929e6d4e302416e4f2a2c166fb478cc3eba7999281dbbe22d6b5,Shopping +1c4a96ec593c884c6c8953e97a006e5bede7205a2904fd365b57c2ff58f7a8fe,Music & Audio +24ccd6dd56503fbd117265236639865169b8c4f8c6e8f8b05f48abaef3f182e0,Music & Audio +30b684762405d88cd6cddd91b9f741657f12488edb8a24765ecb86b471f6b916,System +a92a8631b4faa953f199d9387edfaddc277a07a2970f49c8b965e633177e4f59,Puzzle +a26649024d72334cfe6d8b5e19d5bd945ae06a6bdb099284759b21f9cea3347b,System +acdbf423f6cda719f1342b6c1e91d21e0303887024cfbad463cb6750ad2013ff,System +216345580f9fcbdce963b5b05e41fe9188d5a4b7a3e39ea1beb1b541273034b5,Finance +89f6fff2fa358cee52c5417213852703332c00bcb31d42720dab8a8ed5af6883,Art & Design +5ad4e7d66fde18f7aaa16df4f12d4002d1df1041becce24aa53d383bcf6f9e13,System +2ebd58c2eacc1feff1a26355043bdc3d08b496994ad4c4ca552245694a068394,System +2c5f0e104c7e804dc23d9d6ff4e6e6a8910a394d9802d95b6cb16071756336a6,Business +72f327ce85a7770aa30669462db622fa4f5d9ec0e74a806a04b3c2c16d570b74,Travel & Local +ddce1e05145fcfcffa837fee216ce5bc5b808298e3e9495ae8a588b16156d4c7,Tools +5697a17af4d29c059490a6a358cdb044053c1d437a0d4fb4629d8e8ef8c77f3e,Other +5943017afba6d9b7351c4cd634f93b21dc3faaa4220a8ab492c4c4545e472ec2,Shopping +9a476021ca336ba51cafcb924e6c0055519b8b92d71e9c0f5d590d6abf8954c7,Finance +c59ca22c5f759d3974ea7793c094284a634f3c289edb26640f634bb488abb426,Finance +79ea97e51ccd08366041fdeaccba7edf29d0d23c1554262acc1dcfff8d0ceb95,Entertainment +c85f046fcabe6f68d7dfe17db20b2b404a0d436bbf1a35284e746eece161c789,Photography +d08e4e3909d28672e2651ad9c711d38f1af769c2409ac1f47e56535d59c2b5b1,Lifestyle +a7c997da02057d0ba2fa094b282a59357ee61a673ea3c42b7dff6d89e6259df0,Productivity +1f8a499ebfe3778382727123f0adf9b100741b41ab4832b9b8c7dcae956a289d,Communication +e68c6b429c08b1704407256a8824ba8e08fc24a197d2493b2a5f523a9aae9200,Productivity +ac2b2deccd84525e7b2fa4e19de26abce3481ee82757736f8ed42bf69fbc1e4c,Shopping +cc04c5317d28b855957ee582e24c90275b2462d50090d5341a47a839129cb6f4,Tools +57ec75ab3c21c6489f9acfecc8514150250c3339d7e719740b7a688f705e00e3,System +8a372adc04a57350438aa52b734b982202e1afae2153df96fd42e1a2cdae5ca3,System +bf1d110d52a486e791e9d76225e35144aa4683f366c4f55c4853cee284193903,Card +09bf9ca85c91254bb8875b33d7dafcb49612f78ce5cae773214ca875045db23d,Card +e3677d17a06141202747d87001af8ea10f97b08c720c71bbb519bc62460868f1,Finance +fd0a90875a472e9c57b20ff9df4926b2edc4e65b7dac7e09d2583a50bfdda5e8,Health & Fitness +cb286791b3f5789a5cac5b972758420feff52f72ed008345f0001fef294c028b,Productivity +c34581566d18be37b1cc3b1fb869c40bf932079a5acd212fd1bf44b7daa5d5f9,Parenting +3ced83fd0c75f0ab25fc32a8ca4b7351470c7d85b443988aa6b7607df4c1aa21,System +7752dd5953670006665a0ed0c68371375e6f9a4853033b9827c725e0d0363186,Finance +0983a8da9517b0bbb64db2bbdebc41e2ca6357cd6e1a746d6b02da7e2f817b6b,System +1e821816466638bccfc237e4be1b77c571f2ff7dc1773c0504652ff3bcfc7eb7,Productivity +7a6b3425a7b43ae7352e2b44eb0a88042a040abc3a6b072a95ef24b2d8ef8062,Lifestyle +ce34e3088442e5fa4a4acf202cb6ee5ee359bf7cea600734452af5d48dde29d5,Education +c5ae40dc637b57afaabbf2d7d27131c57433d7d01d8aa21a29e67fd0b3e5af70,News & Magazines +d3098261eeda21c7e05b2674c57b5b16d4b3d496799e9bce0afa7c9fd2afd81e,News & Magazines +5c801e1bd4bdd9e2449d8a718caa9facdb7722de8430662bfb195c6cb7392a5e,Health & Fitness +a46c15b6329938f6d34c63d761168233fb3f1f3e3bd05d77b866f0d4d983f491,Other +8395184938672cb7bc9c1b2f1c79185df91639b09c9b1451bccd8a4fd6364d26,Maps & Navigation +6a5f14d31f39c585231ff76e1d80fc52036dfbd518bfcafa4003175c164bddbd,Music & Audio +10c78a2280f17feaebbe5289d2834083a5e91e4c11d130932152668214873c4a,Tools +41ab621a0d5467a97ed2dd28ac0a0a6526d0b67932cef82559edb0077a00912e,Weather +36d30f199c7e3ff6a8efbf435e163aa8c323d467f257c48346ada5e7c566cef7,System +0017cd0d675cf0272914950c52eeecfb678d91d6e39b04d7427eeafda7f6ea00,System +8be941ed431f8663eb99f0a58d65acd29fee32ca3a075b0de0c62bd655e8137c,Productivity +74fae571f9800c0f025f2e96d438385f15ac3504f2cd8b2d7273150895afb444,Health & Fitness +a6798e5d813db66be531d3d66b2cfbecd25c0eeec5e5a725c3d1fe3182190339,Productivity +4115aaca2e38b69823922fb4df3865d4a6a231dbdfd6ada6e607bad768fdbf33,System +3d51466b8e09b1fc19afd3c7732e11093b35a8c807b95c7f5e06d3ed552cc03f,Health & Fitness +fb97aeaf6cbf5228d0acddd0b9da526c5b8911c42f2005f596f65e51a650ab07,Tools +d5c36ca6068fcb9fe0702c7207fd671848aeb194ae414e9f9e22f4a1b14d0d37,Tools +898e3901450e7e537f4fc0928ee4ebe87cf20419fd8d06f8b61d8b85fe971c16,Business +3b8f1e5750db01f908b24343aa588aeda52afafa9f0da77a8bfa794199f2fb87,Photography +2081ca53c046f2c473b7448e1cbbfb2990880e9a0e2c8cd6ffa976a585d54c9b,Role Playing +85114f8ca8e928e7984bb9221a56b2fd520d7a101a850d88923a80ecf3bbd185,Finance +ad67d78017a17a3b7c8d625e787963b872a1c596e81990fc5b8cdfc93e7abacc,Shopping +0970f8213554cfc09cd96b6e9a511da001785dacf46c264d9705418d505ad4b7,Other +53bf7a3ac04b172ba0669b019485cbb912c32e46c71a781b18897c08680f3bd4,Productivity +ed573ce98700ea5bc705ae0fb14d8426cebf6bd0f720e8194337104af18974d6,Casual +4ef588950b64bf4c6bc95a643f0a7664ffc5f7b415b56f1b24172a96e455c5a9,Tools +0b0919a22e5ef27f4aed24f793a81f9c32c1a7e2c2fec67aee673cf3e57a2c6b,Health & Fitness +174340b956a16270d6abca32f7fd0399ea633dcacdc6d26cec8d12ad93f22807,System +b6991311373dac60c1b7817663faf504dc3aaa5adfc888703220fcadc2ed39d2,Other +e2e34afdcd274a97875bf4aa5e0d224cdecea1dc0c89cd697532d87f4705ba64,News & Magazines +8c4e23f2a6c970c8cf267250c4fa2a3085dadf10bbf34d99b1013309e7e031ab,System +0d948f0b1584460b280a8708dcb030519d0394a9b430afa6621079dfcde64545,System +dae96ae49483f5216c98cb05f5888f8cd75170bc1fdad803f09058e82a87b0c6,Communication +70f90332bce5ee15c4bae5b4f3a69c6881d7d64444626776d4a37ad5703d663e,Puzzle +e743642fb3d4b36b4fc7ff388f37a6ce0ebc7aa1252da325be3e3da1889053ec,Other +512d37feb96010d0cbac3521fbce1d08686c6452efecd5841ec36f69a19fc512,Music & Audio +61f96e3f3e35d439df0379f2db4271ce2bc8863ff3db1662d653403090b14eef,System +f3285e6e17bbaf6d9c3269202917794c6aa3a963d8adc8b7b59b79102cb9bbcd,Shopping +f35f52dd2d30f9f0a9872344908cae2f5d688a017d88536c757842f82ce81276,Lifestyle +75103f1c990eb270db2932b89247fe7207bd9d68cfa0b05a472ee74c19e89f50,News & Magazines +07d74578f25b66c138fb72dc955886aa02e29e30dbe3550ed9a7b8dc7275250e,Auto & Vehicles +cbe5b09d520bac5e8f5abb468181a1f778a55b6cf8ef020c6112bde558c25b30,Music & Audio +8c1505003c32299f14eec5df7982b5db280e8be9d760c9bcd2935c9c508abbbc,News & Magazines +8dfd3182276eddac7ed10cb2fe1a36c5578a3265d9809297e75a47950ca7143f,Productivity +38c3c19dda45c359083d30443e239d1f9ab1aa3d6a66f1532db40c858f350c9c,Education +a6aff63df7bba9a1c3cc5c1769e39ab8df3484bbee01f6470d88292b4d69483f,Tools +9b3a40bd97c0bea05e0c129c1337e91627db73950a945f4ea6d7bfe048fb8020,Finance +13e99cad9f499ac2510a284861d50d5a39fdfc4ef76052606a63b9fb7aceed87,Tools +c7769b49c3f8e3a5f029c317bcd79430cdfa0ffa0540b46514595b1ceb83adf8,Health & Fitness +46e352f70283a47b4328000c35b510a2ccceb4147c3acf636c450fa9007bdef1,Productivity +b1d0bfacfea56ea50bd58767053ae098785f24118ac8c69de9e1ce0286c1744d,Finance +5b13677467f01854687f8c8edaac5a5e19dc2602e1d966c52c767bd0c3b5963f,Casual +c695dfbbf3505a5d6f3dacad9ba70c00c84896e5f1c23e99ccc3144f101c3533,Music & Audio +1c416d94c2ff13df464bf7aa5c34460a43c3084bcdb51e3e677697f19d3a839b,Books & Reference +66ed83d603d9913ab1148e85825e88c3234d7526b9400bd084996f01dd26f94d,Travel & Local +dc4e24bdbe2ece74e204b679ee05fd0f2d7611e575915b4da51186a5c88302f2,Social +b0cca104fcef0e7ebd6adde12757c966ebf48f19d32a251bddf044316577523c,Trivia +0d220b6a893b33642647e954735c60f653c297b931dc0fe512b70c28c2017642,System +39378c9d2be9a27e5cccfec8398cd0108734746ef90166a3f9923f22250d26c1,Finance +0521faea429ae85b2ddcdd877703aa4e8dae3658e4d6d20109354a4bbaf16630,Productivity +e573b8b243c2b958c45b286d63b92af5e646088b815801d56adb6695d4395d0c,Tools +cac368b5a0e4e62a4095f354d7bea9f65ca2e7e2e1943742329c6a62435f8385,Shopping +4aa4dae273de6001760edef6f32c84d28fbcf29f73041807a4661b695665f13b,Other +e6c4ba8b7bbbec93a2960bf3f47b82fe1b156f4f49a43ea30f1eed7dcfdd46ee,Food & Drink +f2d69eee048e2addcca010b4c08944029661540c50c504c5d507ed6183a88fe8,"Board,Brain Games" +b6a8d5f610f7c3651c98b182d33fadcb0408a55fae5980c5d357f55cd4006c08,Health & Fitness +f63ac4dc418e0ac4d61159c8850c521a9df836d43abfd6634ee3fd3166284306,System +99db35b134d0867bf1cdd2b8b49bba417157ba69956cfb5883bc339e811f91e0,System +119c6f0104ea61f57f2ee7ceef5ba516db2dd050ad12e1cc27275cbae053341e,Shopping +e001db0ebb552d1a3dc89d7cb53470564eaba5222ff97bafbe762117e45ab3d9,Productivity +024c3248d42ac2a154805b918fe6e0a7f66d5e673e0aafeeae047a5975f8c47e,Other +ba4cfc360f2e3a905aac9435e256ca8c8168093c7400deef502fdce585a14ebb,Productivity +4dc22b4cae94c6e80c64158c13553c0f49e42a9e6963fda8be51decb4a255511,Business +88ef788a6e3b8a0216ff19a8300bea46c02cef11415aec3f1e367db68ebbee01,Photography +e96c787d5da2caa6c341e9ce2d060efe2b50c2049f9a08ce4bdf6298c716f42a,Health & Fitness +c4c45ab6d774f519525fc5b7227c94a5619a2d9a8196faf7161352f5a83081a0,System +6e8f7c31936e6653a9497b4b01b70717341bde2454c8dcb356df995bf899a299,Finance +d8e1a6406aed6e33246c2fde2b094f8d7ae165f12f3c1ccd3f6fdfbeb196fd73,Health & Fitness +9be4c8b208c82a10cb623365749cb622c71c8d237dbf3ab92772cd34fa288fa2,House & Home +e42368e9e6b67e153de6ad3183d57a96b66ee209a25b8869ac966023378bcb1a,System +bc53f2cb34b93660687c378f2e7c0fa487548d55f69f67d8be094135ee62eb2b,Finance +d889e1138e6bddccf297a615711f8969c2eb8d2e4a935530925e16f39af19713,System +ce9175c1f4a5d741d5c872d003bc6476633c9786c7ede607a59dba093f1b1797,Tools +bbf79bbef3cc0559a638615e82228d0dff48589718cb9940f7005e47d66b9e05,Music & Audio +100cdf63ba7bdd15f8222cd4406d5cecd385a3f59a21aab267e4fb13ce244fd4,Finance +64286e8eaf815b7f20fa88658083f21f68483871353daa66019054a2e50601f3,Health & Fitness +97146ca57c479ba32367b5cbeb4ac1903fa27484bafb5bca1f6d41cc2e37db26,Tools +316a0a6a6cd9d7ee327c03f39ac30c18182dcc60b3640261baefa610cbd2225a,Puzzle +3d2dbe1369a67c9186f73b7e895cd3d4681c319e64c55d3cb167212d3bb0eeb5,Card +8d38b737241613f841d47416658b25c8fcb5ee397e814a83bb968d2bf63fedb1,System +351ad011c83f0caf7ca42264c9de63a5f37af8a52e641b5eac63ba04910a8e0b,Productivity +122c80796b0ff70547cfd2a10e94b9ba37271d37f9c34a6c3d4861490f7e36fe,Weather +b7f1de4eed87c58f019ba6a763746b3978b6022fbe00eff62e2cebad5a441c35,Productivity +b7e0ab6a05b3e21e2779db3c1d5adbbd5177894042870a4b16683dc7f455ef27,Photography +833b722ab42000366ed035adbd1b73c2d39c6c3f0869b4fa6b527624947e71da,Productivity +1c249f981cd4463951a579eb0e45a0eac4deddb48fa0dca0c04fefb181ee1727,Tools +eec38bc68b7bc4903cab53c70b167423a8b100a70d725ad33fd02922e7825136,System +1913b205e10ee030f984414b07146d9b51d724f2e49f10e7418cc95689eb06f8,Maps & Navigation +340fffb7266de1a989c3dde71140e1b1c2e815d80aef9337c8975be7baab9385,Shopping +5b015a21c16d3d183b6b24fc900fcdf33a9fd1fe3762a0f611cb25f33003d457,Books & Reference +8e4e44e7dcd0ba0304c9f5b206fbd6f39cf5267e969431a40df7d15b2287a164,System +b8c0a9b40be8bf24287ad5c31c969b88148c5807656d8b7070ac6a5c8d25d802,Productivity +bb5ad26badec98280df12fa28cefc13f88db362cbd81135298f25ef706ca169b,Sports +99781a6b83bfc9a3e5f8372885567c72306ac14d29e2db2ab5265c1207e39de8,Education +da436e1a567a2573949d100a8825887393f5419d72597ce6012f585e0d332029,Music & Audio +c4753af869baa4c8289746d2216dc9a71fb9b3ba54537092cb2742cae168bd26,Trivia +49f6ca00390efb70afbb78986f2aa1c08e00028d7b583d4f64a206506c56087b,Word +3342a4c225fd83fe08aa7a7ed8159d3ffb1b63ee482cc7788165d3896d455902,System +34b2ee51d54bba4ef7f36b2ab7bdd98123cae435d86e6d357dcaa65146a3a818,Health & Fitness +749f8fee9643839edd5842c33c6802adaf06292fff278817fc97408f9cd0f6a6,Travel & Local +a8204495d10dd51a56955fd56253d5137546c30f64d3d037b45f6084a814df44,Tools +69eef475bab0d2b2d064b4551aad6c6223baa82bae2dc34265b0d3b32f20162d,System +208bf9f9c59c4d96e21591e501ac4367c39b8ddd96824d6b04f9b752dda238e0,Video Players & Editors +a9429e16c08285b32116090d64b4b6d5fed0737e3c82741a3704da24dd26b985,Other +07485783a2184d13beca21f5ac33cf738ff3703c7c4079b3ad22cb11bbcc7b8e,System +bb00ad1041993aa03bfe89cb21f993769231e22fb09c695e98e86a9a6f30929b,System +b664e34bf962205bd54172183796dcc5695d1c08a1ffe78e08d30244f07c09c9,System +08ae1abad2b9127eb7930f5222b979ef4dd44d571dc5c2f2e07ca0e66cc6e552,System +4b59f94ece9c6dcb259308a2642b27b0bd1b39ea7b5be51a39d3a33206bc4f09,System +4f2ee3af312dfeb2b4c6f1c41ea5ddedd19b3ad19719abe116f834262568f5d1,System +356dd39db0b690f96fb135f670c8d20d25e6d911a9d649b12b5005c86006388b,System +ef36152ede7acecc194f7bcba313dc87c7a07a6c28211ad481005b86e578a2a7,System +460c3bf1bdd3a28db31d9eddc29f14178546837aee7b0c9a526467771451751b,System +9a4f57498f9c5ec6ff14a7a01cc906b57fc775c983193b0caad4c600ac2d0bdd,System +34439a6e2c716ca592051d4941a5bc3c19e0b5c7cf8dad268de593a406792980,Other +96336c7770a731759a77e6c5fdfa5a4707d6159b11c34f7b077f4174855a0d95,System +bb72f9558da77803beebf91afb2cbe1953d9151c6febc02269ca09d47c381264,System +ec4221e65ca3917509e888c62c0a792161482b23359080c99efb7413dbd4f23e,System +6feeb3ace2037676169ba6f77245661bb8791576664210c4032936c56f57ffa0,System +2dc8f830bbdf3cfcf37566971b5477288f66712852bcd615d904baa669532bf5,System +96c9b75aba4f68046081e5753378c8147d218913afee22d71ef1a48dad7a9ad4,Card +b4b4b8fde85448681cbe5de6b35e21f00a067c276130b6f7d49d96ef8d9b0a1f,Health & Fitness +9b9f5687da60ab94b1929dca93c75bee4cc43ebd6bf5ef11a98c6b0b6172ed97,Puzzle +e41523744680ee2a658a4d33aa82a1d150ad5f96e4293c415a23d1d1d9d0064f,System +be52053ffc030bac198bef8d72accbe96270df31fa738653e024ed72ed55b557,Health & Fitness +0be21012247c73d4c754fa7874c9d2a57a7ccb07c83122e2a10229ca78cf554b,System +08bd4e8d5dd8d886091ee34a75c0ede9385d14ab5b9f68634c70142c38078ea0,System +3f3c0083f5bd7ef58413f0454ba281f0c8c78e08a38cb1427d40fb868b22dc5b,Maps & Navigation +ec7bfc57debc1851af9f19c5e1e15a1846f3435d82023f83f1ca24dd1bd7edf4,System +616c00f3f1b3ef0e33f0e7e7d018ffc7ffa83c74b8715eb451d1ed47b9833c04,Finance +48471b020ec81261143a22d609b13a4934bce9fad4257e6a394e4b00a84f7361,Other +a3786635a8043ab82a22afab7b27a6987f20d9ae7ef8e2f5b44a6e5975d63144,Health & Fitness +6a3e91080b386ad197ade6ea2afdfde64d7ba4617808f1e5b0aec616f38817de,Entertainment +27809228b53f2826801cc64d698ffc4634d5d2cc877cf68f0bc609ede1dbb708,System +345e3d060c7ef88ce0143198fe4cae0dfb46b1034f441a5a0db1708e999ab272,System +8a5d2a7dad621f0580793afb9f7be026362b30c67295ebf2e0a7521dc43fd415,System +fbbc4b3a67d8c01f97b06f9f676481998a3112d10e6c22b492e48fb0dc5d9100,System +512a93369342b13c08b0153eb15ff0b25777a724814a25d7ca8d0d507d9aad4a,System +75ef529b3b911b51cdbf8645f0d62f5c227826ec8d0397991664e58ebf6c2d15,System +312096e93a550824b34d2a36670648fd9811cd0bf03fd1ae93d4c8d75ed4c10b,System +b2c462aa4445812bda1ddeb5ca4c5d601c9c1e209caa57e868331e17df2d51b5,System +e4f2b92f9d10eac6768131cdb3c5b8bd71fd7b587928f83d1bd71397e92010e3,System +6261c3d827f33fa82fff0cd421b617e3c374358d3bc28f160ed3748511b747b6,Other +63c80d03eecf0a484ab25b8691f4bb1e795df77a9d43129e74767dcddd74aaa6,Tools +6bc2cd2bf2caf50b189b35370fac9c5154db99c953a02a37107a725ff810e423,Communication +10fa5374e43f75367edc63d49c57408af066c27c54eda6e843185b12f7ac5af0,Travel & Local +0826047cfd400eb8b40483902974b7b8252b910c8e14a250a168f7702d39292e,System +5500ff29f00f69d8c5b0111fac446f87ca85e8fc3277cf908fa8b463fc064206,Health & Fitness +cc473db474f1e0edbd7bd7fb6ec43123282603297d10816e94f6b70428660daa,Health & Fitness +ede83517903172f7e82b5952e29258dae4624e67bccd4110fb2ca2e36d734ffc,News & Magazines +ac57fb8b0520064d8018f3276e869ff96a0f16bbbe175dde9c2342f1d6975d21,Shopping +88ae91e786e09aaee4510dec0fccb9b8fa5e05d916d0667b9fc2662e845a4a73,Shopping +da7ef4fe4b8022a9913a3a71748d0d9185a598cd66f859acd37a221a16d084ed,Education +6c2cfbb3f42d1aadb05c1362000c5c9c17a13ebfb23371188b17011e0915d108,Shopping +5fee7306eac4ffc863c865f47760f44e2a214de8c17107ad2b035d6057129dc4,Shopping +0df57f4a8053d601495ebe74c9c24680bce612db50cc4e6b2338bb7b2d17b93a,Shopping +06792a61cd177a005f7acb23f0cae3099305d4149d1feb72513a280a37b4568c,Health & Fitness +7d1fcad88c8eca44e6aafc0dfde3532779d7c90a3bf5b02f304fa3f72a9d0230,Other +08567910e7aa7cdccc41307fa640d6f49c54daa1ddfd7626d8a52fdcd7ca5037,Finance +35b471f16c65b946c3852656a4bfc06896956339786c05f509115b2a4bf7c207,Tools +65a7929d6d0cdbe82870b98ccc0cdb5385d58a27e283729354a3539222ddef91,System +50b25ad3e5c2a2822f1891a6862668d6565ef213a7b8b0b0dcf23587b94c534b,System +7be48b604d265b7c3c70c96c8ad6256dffff97e33593b0d787646dea6d66c6d3,System +d321a2b3dd3129f994008ba11462cd851e949d8ee31c756a64cca2e1bc3f6d42,Sports +02c17313a643137f6ba3eda3747c294267234ecb78108664cce8f2163b371184,System +6f369925cc6469d4ca7c459436ab47d1e64f3d2e494a9beee63b9a6793404f43,System +6506f502a706dc55800708f5e0ee3839045e23e9c79553047167cbdf4f502a96,Health & Fitness +ed55d62cf4bf44250ad48516d975d8f7a61ea0d06e54e84a088a674f3efb0383,Video Players & Editors +7820c2325d56b531ab99127a86b4ec15415e30508f5d41c4c95874d4f7268c65,Shopping +21c56c6a20bcb70f3c35b60bf1e740e3a02959020a4ae7f0f06665d97b35882b,Productivity +15fe3e9780014fe183cc532bf288a4cf317618eb80f55f84b50ed62817fffec2,System +2562ad0365b3862745ceb016731bd74be2996489f0387a60d7ae11ccdb0da8a6,Food & Drink +21f5174f404c31f2545304e2ffb9c3106010eb6ef490e4835bb418560f56d046,Communication +e50a223e5530d0a2c110e86dbacc0dbd75e38180212963bfe46a5bdfa5c53dc1,Other +3faf56116ea10ce36859906ef32c053abcf09fea5985fbaafaf8a7870ba02d04,Travel & Local +f716693e4a3c4c45f211cdbc8ce2faccce2e7ffac5e53952b92929718f1626a3,Sports +ff0c692250e872f933e106b25bf9ec5f0c71b1637ca3345e2544bf00f415eb9b,System +922bf43331bef264bacf2798eea125c5e0e0d54bbc6e2544a78b2b5ff82a4be7,Lifestyle +1f65375eed6121ec44d71e489fabba71b6eee3c16843113303a3998a2b6dbad6,System +252c02a0ba79da116d4cf7d8b6f675ec6d61be3298fe6cc21152f08ca1cd7dfd,Music & Audio +dc2093ed2b528320e6a625ca71863d6f4c548f3a0547237434ca07af132b7809,Shopping +dc61c597a80b499fac068bde9e95e9fb31a2f98b1f1bcec654265ac518aa445d,Health & Fitness +65f648698eccc9403c11d189eea0ddc9a3a8725756d5c6ee13eee434911b4053,System +a9aa62a05dfb0669235cce4b22510017b19a1f0caeb59adc42869923daf6dee4,Shopping +b3276f7c9d4b1ed75c1263dfa8f28549eba87305c19e56881b41a0fbdc8d1152,Business +fd4ae93a3136476e45a404f1d70a009efb2c5a98945273a8aa6ffe59f363ca82,Sports +4bbe70395978498955c6588aa81305d94c8c57a77f1d9f6e2801318fbebdd9f9,Tools +07b34d9aae912b70c573971215b75775f53af28c798e5c349ba100537c0d174e,Health & Fitness +9e0b4ef58980459e3bdb652c77edd203cbe422fc6c7f3c3759f62e483cf6743d,Tools +555a5492cb810c5f5eef77dcac19b08f648ebe68cbcc730fbbc099f39340d3cc,Education +4b475d6dcf56bcc0bdcbc792032c5559f0f714cc7eef5b4fdd53b1b80e71a203,Education +3cb53f2c50ae0fec5b387cb79c6199b13f92142e839ea4b7e16090d5a57ff47b,Food & Drink +125b2c7f3bef7d9330945c430bc98c83f1e0716c3ea54138b2b638c8cb9dcd24,System +53794ebd51dfb7f068ca64a760809cf7978dbefcc09542f866cddb6e4bd10c05,Music & Audio +820b0a7af64d9a57aead5dccf9e397c119c953028e770802aece70a6889f3ac1,System +1962f4c5e24b8ae48a4ee0e728341a13a8118259fc45e9a2d090dac5037eb4f6,Sports +b872cbda43494107f0d87aaeff6f2f34e86918b8d5b9f60f03c14fdd7644386a,Weather +ba815e47d580433ce0b9f184e0bb7ba5c7bf25e34e510eb0ed6a42faddbaa609,Finance +12e967d804c1d8f9551fd23af073283a4408e11e8e0a7f3d5daf04fb4f41676f,Education +4bbdb6aa0f6f4a96f8935aa17d54d620a32ffc8e9368e980c670efb3e230a5e7,System +25cda00f00eca4b97f48e2484813ee3c6f97805500b49234efa43ccdefe52977,Strategy +debeb009353ac43f8c2ae091cec106e8247b3963102a626b3ed50eb46d3fec38,System +ea60e2aadd31a2a0b91b78c110d57fa339d5e9873e2554408655e24bcaf3a999,Tools +30f1b69ad0976489155a7dbd92aec1d537b8ff8a340e7af8197578ab3e7539e2,Entertainment +bd91d30995366ba91c70500da895c7081dea8aa81e714970f3eb450829445a85,Music & Audio +123c87f89cd05a418f04a1b72683df817a06991b732ca0d827e4aedb01f2ec43,Health & Fitness +c618f7198ec475a40f77e5cb943959f3e7cb74f74b9b992c7ad091d34f820834,Education +87e6c3151b0b0d5d39883b35c47ab46cc41bfce6b0039bce2ac63c1c50e6e233,Puzzle +a4b5a29a3c643b848b0b6c924f9d41b3782bb4fd8928c485819e8bccd44577a0,Tools +ff02472acb49098349fe92b91ed6e02664728d5d2a600dd161ffd25f15cc9ae7,System +f258337f5ba59ab32140862bc5ca609bed12924e3e82515b69c507dfde56e8a0,Sports +418ee207b0613deda0a8ae4ec343fa2cefd5c42594cbb2f2076b269d14e9aec0,Sports +386db4fc3098f782e13503e6d85cdf2e5fcc43876b24c30affc76f63629f971e,System +2e35ee053d3b51a4339017351d8706e0a629f72968513436812f01f23d062f01,Education +8a00398792332f79bb1b7eb804f9ba0dcdd9bdafe8b9071bc92e2bc8d3ce2b48,Entertainment +c896b8c1a3721a8ee7eb24f4fb4a8a5bd2f26694395d964980760b663527ce41,Productivity +8ae08084d6fea92eb97036052f15c96f60bfabf0ff65cad9b206edc234ef6a3e,Maps & Navigation +ff73b990e0a0dfda4e23f45720a20bebaf7eabeab9202a4319bea43b3c68d705,Health & Fitness +342a0f85f76ae2e937f22f996eb1a4305cfdc2b117c009795eef9e4e756744ff,Adventure +9294e2e5ab16080bfe8dee96002e0cd77b84f827f07931e8704323e0d117111f,System +454b89984d55ab9c283d2dac177b46180c54d98102dfce9efc213b6d94404e91,System +35adc33041cedf46ad1075f8f442bbd005b84934b65fe9b76434b79ad85bc7f8,Shopping +39d5a5ab0f2178bfb3b8de99d03bbeeb0c90ebb3f3e052835877d42acc829641,Social +ec3c531e0d2054c1dbcc6fdfb3e83f8e09e207512dbfbe24630ca84ffd91d9d1,Productivity +8e06bffc21daf92ef43cdde4c273a751d4ea1d814bbfc7494e5c5041b8294b02,Education +e595d180037ec3a1bcd4deacce20ccdc469466301d9fac33a0352453c5833e84,Dating +dc27b14269d41f2c456187ce3a9beddab96d1803be011d745d6f66aff82cc9dd,Lifestyle +c0987ac5d6ab6782be04e31710b6f972a065d1d594a5ce2020cab03debd849c6,Health & Fitness +aca7024881c85246f7daeba27dab402aace00b674f60d6c546b4d952d0d335e5,Trivia +2cdb10fbbd65e17b7eec3ff6a4941946c1e9700e7728213a1c72c4b4faeb996e,System +c30e0f3c289015b5c075a63b6b9f1629c9e61d2ad5f90a830281ede59ac1afbc,Tools +1b9722dd398356ed2f1144a5b0436814b616ff530ee958a3d409ee52f81794b7,Productivity +7ec3052aeae0b9faf7ac90fb4a30b5a20daa0e68b19049ba7dd2ef8aa4591a2b,Health & Fitness +79b135ee31c61e4c79ad20bf23635a9e7c25ca331f09439489ac436d54276bd5,Health & Fitness +83b0cc2d9a4a45869d9f8c2c3644effd9d17e968e9b52f49c2a19c4026871b6e,System +b9ab10763fc03fbedb5eceaf0bb67bc4009a0716405d759aa3267a080b948d7d,Music & Audio +001c4e85983e858693f272d4509f20972dc23668844e98dcc1c8a4cdbe0b58c7,Word +8c29223c1fbf8817a1014126ed9138815952002663c82be2a029cf912a0b7e77,Education +6bbccc5a4b6e861cd566f9b1fcbdd53ca51c9cfc179ba96cbbc68c3f960cbf13,Productivity +b9dca369d2f6b6c529528b8afaff422a52228bfa75c1d46b6072d69295e354d2,Communication +7cdc2baad3a5964f4cd269a409f561031b537ee6bc697d0765952a6d408f50f1,System +f2e74bceae6bc7c302aba11ce9191082b75791c0de852f68f24d38c6dfc4398e,Photography +c5db70815f82818601076a372fcf28074f4aff45aacdeb540b3f6397f5df9dfc,Food & Drink +ded3892e004db47fe9480c9ee356a3c170969baf0a5c669ba22731d71c224eb8,Shopping +60c443d0f23bd1183a6a9c392f643536ec0347aa59dd5ddfb2af8e3f231b8c54,Health & Fitness +0cd78634534126189375eb8fd9e12577b813bb840a20f62ffaa7f0f408d619ac,Music & Audio +1828bf36c28d85cc921e1b90ac8d785d77481eaf8c2a8e6123a3d98845462395,Lifestyle +9863b27b796593e00c4922fa0666d382195f6612a6761b2d9e73f2c5f5b0018b,Other +9042072e4ed2e26b4b8a227a3162a792eb506c0ce16d865d65578ded5a70946c,Video Players & Editors +ca8d3598bdfe92e5b1ebdca4443f4a92fb544f34464f00b8b15913dc042c2a60,Lifestyle +0ca0d16c13509ee34b8dbc0547f445be1e969ff9616cfd951cb6986ae4d45c91,Health & Fitness +cc2902adcac250f47f917ac982505f967f4eb9349891a94b6499a3eaba656076,Tools +5cb5cc58c5b108e731de040bb17e81f6ecffc180b9b0b71bc51ac19e5a49a12b,Sports +2970f208a3ff87df7c76ad2133637852dcacbc58f192c64b9df2fb8b38fd5bfb,Photography +313ed7c09bc4fbf0b7f26620fd1d9e8111e2b0caa86387032e649998d528f8f0,Productivity +ff94ea124345f98d3770a3233c5377b5abf6ecaaa8fe0fadade5c595354e1595,Shopping +b2c9fecc3808cdbf7cecbf71f72c8d804bfbf711a5d1c0625d533a2ba3875a66,Shopping +02cc4181d4221ef375ce526d4e332c73fbd0a0ce2199bba2e6e336849544e83b,News & Magazines +7f272b80934a81e131538d167f4ba80f8b77028dcadcc08feaa1a9460c89097b,Photography +0701088bab3a618677b75624a15ed19692bebeceaf1efee1318fd7c0f43d0cde,Finance +a8dea4c4dce2a2567ee02a5db866686a686bf83551372957a93964a3c3257ce6,Maps & Navigation +7f696e09085a1d37376dd15cafef9933296a815212e9736de585d76d61098faf,Lifestyle +825bed001100f2e0b6ce7bc61d52c1a8e4b6c78c512494387d2e14c595345f56,Business +5c870a1d8c26cb256f6f081d9e7c18b6527486e14c4477457108bb61715e6675,Lifestyle +eb05a76a77ffb0438d1fd31299148f67465bfdde4939fe4ec5f87de782e6de04,Books & Reference +b4b9de65d41f87edc4152774dd1044ab1ec2c9bee804a0c8b706ee789eea0af8,House & Home +68f352c1c9b2a1ac2851c77ff0e979d11cb4467622f3d37cad8e9cc10da67dd9,Shopping +ab5dbc8a4941ea877a7d476414fd12582a5209924d4dd38d481d1535be10d315,News & Magazines +1887abd9b41314dd109b7b017d12ca4f67c169bae928c9d0d49d6717c2808ce5,Tools +2602ee35e1ca3614c279ba1bf765f73a6ea49b3540a71e775442ead0360eecc3,Books & Reference +4aae96ead6add0a600d0451bc6202168bea75a29c3893a62303c6d6cae39b56b,Finance +12c5ca998c81a5f0b4593357347cfe1d71c73e202b366354af35996ad2452e2c,System +d6ca2ae9dbc3f212ba3805c6299385e595eb7a45d7e7f7ca481543e6fdb66d62,Entertainment +a8acd53cd9e03417de91d0f2e53711471c3377fc94486dab21eee54bfe942551,Tools +3abb551fc08cacbb0a02e1f8880c7816becd64a89d181993b18554f6299003e0,Lifestyle +843ad08cbfd2ef45712d4cc0cebc254831914cc7f13777c24030dcc48e02c1c4,Food & Drink +503db13eaef6084a59a627c4698c2f682d14b3f7c67a5176c7591829c62d46c8,Entertainment +bc89c485bacaed93bb20e152848bf3731c0277c0d829ebb728bc4a6886a3a375,Sports +ebf514a41b7ee05c2461f6fa6fdfad57e7d8d72b8b415b66e87bff759a64eb4f,Adventure +9605709c658d0f68736ca8a859e839f3193ef317f15d48910ba40ec9046fd227,Lifestyle +022a6d3741160a8707d8af9db757931f061975eb9fa295ca66f110d2b567a8d6,Finance +b2f30d40523a1149f8b5fa13c2eee9dd8647661432c220e4a0235012f310e5af,Maps & Navigation +330014416a15cf4764e102532203ca2afb35014e9eef792317e935b22c5fee9f,Tools +ceb226411cf32b3365a4b407cae495e4392d03ca91d3caedaf821c1ab0e75b4b,Finance +94db407d78890e0a313e76e761cf7e37dc38ba949c4af0cc6b0b3e84d070e040,Sports +e071a4db68d07cffc93749873cc123191880bb5cdb4086c11f41f2e60ee54b2a,Finance +dbb4212a3c4908645b77ca874511b1beff72328928d731e0d25dc34510049017,Finance +9dee34bad5cfa9ac804ce073f627c4d25b746ecf948ee15b25834d29d6ca77d3,Finance +5d8a4df6e1320d4c1e8f10cf23e0d2e77b6c0a8e5e6b32973cda5de322d25cc6,Sports +489a7b835c81ed9c6663853aa22c72bd0f991260039e3226357b719a8e66bbd2,Music & Audio +9a9c3b7cb66696dde8a37ab8f8aff8ccabefb102cc81c375d508d85a0592487c,Entertainment +f44e4ff1832c950a622d94d8466524817c8d6a12463cf7ea1d61df7d52140e27,Tools diff --git a/exploration/expl_app_categories.py b/exploration/expl_app_categories.py index 1163cf4..464203d 100644 --- a/exploration/expl_app_categories.py +++ b/exploration/expl_app_categories.py @@ -6,7 +6,7 @@ # extension: .py # format_name: percent # format_version: '1.3' -# jupytext_version: 1.11.4 +# jupytext_version: 1.13.0 # kernelspec: # display_name: straw2analysis # language: python @@ -74,3 +74,29 @@ rows_os_manufacturer = df_category_not_found["package_name"].str.contains( # %% with pd.option_context("display.max_rows", None, "display.max_columns", None): display(df_category_not_found.loc[~rows_os_manufacturer]) + +# %% [markdown] +# # Export categories + +# %% [markdown] +# Rename all of "not_found" to "system" or "other". + +# %% +df_app_categories_to_export = df_app_categories.copy() +rows_os_manufacturer_full = (df_app_categories_to_export["package_name"].str.contains( + "|".join(manufacturers + custom_rom + other), case=False +)) & (df_app_categories_to_export["play_store_genre"] == "not_found") +df_app_categories_to_export.loc[rows_os_manufacturer_full, "play_store_genre"] = "System" + +# %% +rows_not_found = (df_app_categories_to_export["play_store_genre"] == "not_found") +df_app_categories_to_export.loc[rows_not_found, "play_store_genre"] = "Other" + +# %% +df_app_categories_to_export["play_store_genre"].value_counts() + +# %% +df_app_categories_to_export.rename(columns={"play_store_genre": "genre"},inplace=True) +df_app_categories_to_export.to_csv("../data/app_categories.csv", columns=["package_hash","genre"],index=False) + +# %% From ed3483ace4d4ef49dc281d7abd554bea09b5abdc Mon Sep 17 00:00:00 2001 From: junos Date: Wed, 15 Dec 2021 18:35:26 +0100 Subject: [PATCH 22/34] Update RAPIDS to v1.7.1. --- rapids | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rapids b/rapids index e5cc025..5a9252e 160000 --- a/rapids +++ b/rapids @@ -1 +1 @@ -Subproject commit e5cc02501f629c96641dfd1bcd1f7fcfd0d55462 +Subproject commit 5a9252e46e7caa5f010679b72e7be5c19c5f8688 From 4dee4b6fc1de46e0f417bc500fc3ebb18bdceb28 Mon Sep 17 00:00:00 2001 From: junos Date: Wed, 15 Dec 2021 20:21:59 +0100 Subject: [PATCH 23/34] Add info about updating RAPIDS. --- README.md | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 2738dd8..99972cc 100644 --- a/README.md +++ b/README.md @@ -142,4 +142,20 @@ If this still fails, `dos2unix` can be used to change them. ### System has not been booted with systemd as init system (PID 1) -See [the installation issue above](#Timezone-environment-variable-for-tidyverse-(relevant-for-WSL2)). \ No newline at end of file +See [the installation issue above](#Timezone-environment-variable-for-tidyverse-(relevant-for-WSL2)). + +## Update RAPIDS + +To update RAPIDS, first pull and merge [origin]( https://github.com/carissalow/rapids), such as with: + +```commandline +git fetch --progress "origin" refs/heads/master +git merge --no-ff origin/master +``` + +Next, update the conda and R virtual environment. + +```bash +R -e 'renv::restore(repos = c(CRAN = "https://packagemanager.rstudio.com/all/__linux__/focal/latest"))' +``` + From ae358f1e2490daa585c833bbe42f42eac7c0cf29 Mon Sep 17 00:00:00 2001 From: junos Date: Wed, 15 Dec 2021 20:22:22 +0100 Subject: [PATCH 24/34] Various improvements of RAPIDS. --- rapids | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rapids b/rapids index 5a9252e..b29f902 160000 --- a/rapids +++ b/rapids @@ -1 +1 @@ -Subproject commit 5a9252e46e7caa5f010679b72e7be5c19c5f8688 +Subproject commit b29f902915afdb58765dc0e7c6d4920f4a263d6e From 257a0442270234e27975f051328c05c6f78fcc75 Mon Sep 17 00:00:00 2001 From: junos Date: Fri, 7 Jan 2022 12:22:50 +0100 Subject: [PATCH 25/34] Update RAPIDS. --- rapids | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rapids b/rapids index b29f902..2fb068c 160000 --- a/rapids +++ b/rapids @@ -1 +1 @@ -Subproject commit b29f902915afdb58765dc0e7c6d4920f4a263d6e +Subproject commit 2fb068cb8b2601d2f777de5f027b50354e7a6822 From 702b091d73eeb65af3d80664ae998f578712351c Mon Sep 17 00:00:00 2001 From: junos Date: Fri, 7 Jan 2022 17:00:12 +0100 Subject: [PATCH 26/34] Read RAPIDS features and create columns. --- exploration/ex_ml_pipeline.py | 40 ++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/exploration/ex_ml_pipeline.py b/exploration/ex_ml_pipeline.py index 328513a..39bbdbd 100644 --- a/exploration/ex_ml_pipeline.py +++ b/exploration/ex_ml_pipeline.py @@ -6,7 +6,7 @@ # extension: .py # format_name: percent # format_version: '1.3' -# jupytext_version: 1.12.0 +# jupytext_version: 1.13.0 # kernelspec: # display_name: straw2analysis # language: python @@ -24,6 +24,7 @@ import numpy as np import pandas as pd import seaborn as sns import yaml +from pyprojroot import here from sklearn import linear_model from sklearn.model_selection import LeaveOneGroupOut, cross_val_score @@ -257,4 +258,41 @@ model_validation.cross_validate() # %% model_validation.groups +# %% [markdown] +# # Use RAPIDS + # %% +with open(here("rapids/config.yaml"), "r") as file: + rapids_config = yaml.safe_load(file) + +# %% +for key in rapids_config.keys(): + if isinstance(rapids_config[key], dict): # Remove top-level configs + if "PROVIDERS" in rapids_config[key]: # Retain features (that have providers) + if rapids_config[key]["PROVIDERS"]: # Remove non-implemented features + for provider in rapids_config[key]["PROVIDERS"]: + if rapids_config[key]["PROVIDERS"][provider][ + "COMPUTE" + ]: # Check that the features were actually calculated + if "FEATURES" in rapids_config[key]["PROVIDERS"][provider]: + print(key) + print(provider) + print(rapids_config[key]["PROVIDERS"][provider]["FEATURES"]) + +# %% +features_rapids = pd.read_csv( + here("rapids/data/processed/features/all_participants/all_sensor_features.csv"), + parse_dates=["local_segment_start_datetime", "local_segment_end_datetime"], +) + +# %% +features_rapids.columns + +# %% +features_rapids = features_rapids.assign( + date_lj=lambda x: x.local_segment_start_datetime.dt.date +) + +# %% +features_rapids["participant_id"] = features_rapids["pid"].str.extract("(\d+)") +features_rapids["participant_id"] = pd.to_numeric(features_rapids["participant_id"]) From 832eb6137ed89c1a54a8cb2328151d0d35063ded Mon Sep 17 00:00:00 2001 From: junos Date: Wed, 19 Jan 2022 12:53:03 +0100 Subject: [PATCH 27/34] ML with RAPIDS and missing values. --- exploration/ex_ml_pipeline.py | 106 ++++++++++++++++++++++++++++++---- 1 file changed, 94 insertions(+), 12 deletions(-) diff --git a/exploration/ex_ml_pipeline.py b/exploration/ex_ml_pipeline.py index 39bbdbd..57346a2 100644 --- a/exploration/ex_ml_pipeline.py +++ b/exploration/ex_ml_pipeline.py @@ -27,6 +27,7 @@ import yaml from pyprojroot import here from sklearn import linear_model from sklearn.model_selection import LeaveOneGroupOut, cross_val_score +from sklearn.impute import SimpleImputer nb_dir = os.path.split(os.getcwd())[0] if nb_dir not in sys.path: @@ -266,33 +267,114 @@ with open(here("rapids/config.yaml"), "r") as file: rapids_config = yaml.safe_load(file) # %% -for key in rapids_config.keys(): +for key in rapids_config.keys(): if isinstance(rapids_config[key], dict): # Remove top-level configs - if "PROVIDERS" in rapids_config[key]: # Retain features (that have providers) + if ("PROVIDERS" in rapids_config[key]): # Retain features (that have providers) if rapids_config[key]["PROVIDERS"]: # Remove non-implemented features for provider in rapids_config[key]["PROVIDERS"]: - if rapids_config[key]["PROVIDERS"][provider][ - "COMPUTE" - ]: # Check that the features were actually calculated + if rapids_config[key]["PROVIDERS"][provider]["COMPUTE"]: # Check that the features were actually calculated if "FEATURES" in rapids_config[key]["PROVIDERS"][provider]: print(key) print(provider) print(rapids_config[key]["PROVIDERS"][provider]["FEATURES"]) # %% -features_rapids = pd.read_csv( - here("rapids/data/processed/features/all_participants/all_sensor_features.csv"), - parse_dates=["local_segment_start_datetime", "local_segment_end_datetime"], -) +features_rapids = pd.read_csv(here("rapids/data/processed/features/all_participants/all_sensor_features.csv"), parse_dates=["local_segment_start_datetime", "local_segment_end_datetime"]) # %% features_rapids.columns # %% -features_rapids = features_rapids.assign( - date_lj=lambda x: x.local_segment_start_datetime.dt.date -) +features_rapids = features_rapids.assign(date_lj=lambda x: x.local_segment_start_datetime.dt.date) # %% features_rapids["participant_id"] = features_rapids["pid"].str.extract("(\d+)") features_rapids["participant_id"] = pd.to_numeric(features_rapids["participant_id"]) +features_rapids.set_index(["participant_id", "date_lj"], inplace=True) + +# %% +with open("../machine_learning/config/minimal_labels.yaml", "r") as file: + labels_params = yaml.safe_load(file) + +# %% +labels = machine_learning.labels.Labels(**labels_params) +labels.set_participants_label("all") + +# %% +labels.aggregate_labels(cached=True) +labels_read = labels.get_aggregated_labels() +labels_read = labels_read.reset_index() +labels_read["date_lj"] = labels_read["date_lj"].dt.date +labels_read.set_index(["participant_id", "date_lj"], inplace=True) +# date_lj column is parsed as a date and represented as Timestamp, when read from csv. +# When calculated, it is represented as date. + +# %% +features_rapids.shape + +# %% +labels_read.shape + +# %% +features_labels = features_rapids.join(labels_read, how="inner").reset_index() + +# %% +features_labels.shape + +# %% +features_labels.columns + +# %% +imputer = SimpleImputer(missing_values=np.nan, strategy='mean') + +# %% +feature_columns = features_labels.columns[6:-3] +label_column = "NA" +group_column = "pid" + +# %% +lin_reg_rapids = linear_model.LinearRegression() +logo = LeaveOneGroupOut() +logo.get_n_splits( + features_labels[feature_columns], + features_labels[label_column], + groups=features_labels[group_column], +) + +# %% +cross_val_score( + lin_reg_rapids, + X=imputer.fit_transform(features_labels[feature_columns]), + y=features_labels[label_column], + groups=features_labels[group_column], + cv=logo, + n_jobs=-1, + scoring="r2", +) + +# %% +sns.set(rc={"figure.figsize":(16, 8)}) +sns.heatmap(features_labels[feature_columns].isna(), cbar=False) + +# %% [markdown] tags=[] +# ```yaml +# ALL_CLEANING_INDIVIDUAL: +# PROVIDERS: +# RAPIDS: +# COMPUTE: True +# IMPUTE_SELECTED_EVENT_FEATURES: # Fill NAs with 0 only for event-based features, see table below +# COMPUTE: True +# MIN_DATA_YIELDED_MINUTES_TO_IMPUTE: 0.33 # Any feature value in a time segment instance with phone data yield > [MIN_DATA_YIELDED_MINUTES_TO_IMPUTE] will be replaced with a zero. +# COLS_NAN_THRESHOLD: 0.3 # Discard columns with missing value ratios higher than [COLS_NAN_THRESHOLD]. Set to 1 to disable +# COLS_VAR_THRESHOLD: True # Set to True to discard columns with zero variance +# ROWS_NAN_THRESHOLD: 1 # Discard rows with missing value ratios higher than [ROWS_NAN_THRESHOLD]. Set to 1 to disable +# DATA_YIELD_FEATURE: RATIO_VALID_YIELDED_HOURS # RATIO_VALID_YIELDED_HOURS or RATIO_VALID_YIELDED_MINUTES +# DATA_YIELD_RATIO_THRESHOLD: 0.3 # Discard rows with ratiovalidyieldedhours or ratiovalidyieldedminutes feature less than [DATA_YIELD_RATIO_THRESHOLD]. The feature name is determined by [DATA_YIELD_FEATURE] parameter. Set to 0 to disable +# DROP_HIGHLY_CORRELATED_FEATURES: +# COMPUTE: False +# MIN_OVERLAP_FOR_CORR_THRESHOLD: 0.5 +# CORR_THRESHOLD: 0.95 +# SRC_SCRIPT: src/features/all_cleaning_individual/rapids/main.R +# ``` + +# %% From e177b1505820fecc28421b61c177f9489e4eba42 Mon Sep 17 00:00:00 2001 From: junos Date: Wed, 19 Jan 2022 13:41:09 +0100 Subject: [PATCH 28/34] Clean features across participants. Explore the best linear regression feature. --- exploration/ex_ml_pipeline.py | 75 +++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/exploration/ex_ml_pipeline.py b/exploration/ex_ml_pipeline.py index 57346a2..51c70ea 100644 --- a/exploration/ex_ml_pipeline.py +++ b/exploration/ex_ml_pipeline.py @@ -21,12 +21,14 @@ import os import sys import numpy as np +import matplotlib.pyplot as plt import pandas as pd import seaborn as sns import yaml from pyprojroot import here from sklearn import linear_model from sklearn.model_selection import LeaveOneGroupOut, cross_val_score +from sklearn.metrics import mean_squared_error, r2_score from sklearn.impute import SimpleImputer nb_dir = os.path.split(os.getcwd())[0] @@ -378,3 +380,76 @@ sns.heatmap(features_labels[feature_columns].isna(), cbar=False) # ``` # %% +features_rapids_cleaned = pd.read_csv(here("rapids/data/processed/features/all_participants/all_sensor_features_cleaned_rapids.csv"), parse_dates=["local_segment_start_datetime", "local_segment_end_datetime"]) +features_rapids_cleaned = features_rapids_cleaned.assign(date_lj=lambda x: x.local_segment_start_datetime.dt.date) +features_rapids_cleaned["participant_id"] = features_rapids_cleaned["pid"].str.extract("(\d+)") +features_rapids_cleaned["participant_id"] = pd.to_numeric(features_rapids_cleaned["participant_id"]) +features_rapids_cleaned.set_index(["participant_id", "date_lj"], inplace=True) + +# %% +features_cleaned_labels = features_rapids_cleaned.join(labels_read, how="inner").reset_index() +feature_clean_columns = features_cleaned_labels.columns[6:-3] + +# %% +print(feature_columns.shape) +print(feature_clean_columns.shape) + +# %% +sns.set(rc={"figure.figsize":(16, 8)}) +sns.heatmap(features_cleaned_labels[feature_clean_columns].isna(), cbar=False) + +# %% +lin_reg_rapids_clean = linear_model.LinearRegression() +logo = LeaveOneGroupOut() +logo.get_n_splits( + features_cleaned_labels[feature_clean_columns], + features_cleaned_labels[label_column], + groups=features_cleaned_labels[group_column], +) + +# %% +features_clean_imputed = imputer.fit_transform(features_cleaned_labels[feature_clean_columns]) + +# %% +cross_val_score( + lin_reg_rapids_clean, + X=features_clean_imputed, + y=features_cleaned_labels[label_column], + groups=features_cleaned_labels[group_column], + cv=logo, + n_jobs=-1, + scoring="r2", +) + +# %% +lin_reg_full = linear_model.LinearRegression() +lin_reg_full.fit(features_clean_imputed,features_cleaned_labels[label_column]) + +# %% +NA_pred = lin_reg_full.predict(features_clean_imputed) + +# %% +# The coefficients +print("Coefficients: \n", lin_reg_full.coef_) +# The mean squared error +print("Mean squared error: %.2f" % mean_squared_error(features_cleaned_labels[label_column], NA_pred)) +# The coefficient of determination: 1 is perfect prediction +print("Coefficient of determination: %.2f" % r2_score(features_cleaned_labels[label_column], NA_pred)) + +# %% +feature_clean_columns[np.argmax(lin_reg_full.coef_)] + +# %% [markdown] +# Ratio between stationary time and total location sensed time. A lat/long coordinate pair is labeled as stationary if its speed (distance/time) to the next coordinate pair is less than 1km/hr. A higher value represents a more stationary routine. + +# %% +plt.scatter(features_clean_imputed[:,np.argmax(lin_reg_full.coef_)], features_cleaned_labels[label_column], color="black") +plt.scatter(features_clean_imputed[:,np.argmax(lin_reg_full.coef_)], NA_pred, color="red", linewidth=3) + +plt.xticks() +plt.yticks() + +fig = plt.gcf() +fig.set_size_inches(18.5, 10.5) + +plt.show() From 360ec7de4bd7d854a5f9421da7e3d4789d3db7eb Mon Sep 17 00:00:00 2001 From: junos Date: Fri, 4 Feb 2022 17:20:11 +0100 Subject: [PATCH 29/34] Update RAPIDS. --- .gitignore | 1 + rapids | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 9f0a3e2..ab54192 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ __pycache__/ /config/*.ipynb /statistical_analysis/*.ipynb /machine_learning/intermediate_results/ +/data/features/ diff --git a/rapids b/rapids index 2fb068c..afa3b85 160000 --- a/rapids +++ b/rapids @@ -1 +1 @@ -Subproject commit 2fb068cb8b2601d2f777de5f027b50354e7a6822 +Subproject commit afa3b8546f6b4e7c82bc7f70c525d0438dc45300 From 6295cc8e9140ffdf4c7bc80669cd12350df75b48 Mon Sep 17 00:00:00 2001 From: junos Date: Fri, 4 Feb 2022 18:39:32 +0100 Subject: [PATCH 30/34] Add baseline data capabilities. --- rapids | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rapids b/rapids index afa3b85..bf9c764 160000 --- a/rapids +++ b/rapids @@ -1 +1 @@ -Subproject commit afa3b8546f6b4e7c82bc7f70c525d0438dc45300 +Subproject commit bf9c764c97f076f4af288f7afa1a32931996b2db From ff006c08346d226ee30188ae49af05d2186a24d8 Mon Sep 17 00:00:00 2001 From: junos Date: Wed, 16 Mar 2022 15:52:19 +0100 Subject: [PATCH 31/34] Update RAPIDS. --- rapids | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rapids b/rapids index bf9c764..83a8bb6 160000 --- a/rapids +++ b/rapids @@ -1 +1 @@ -Subproject commit bf9c764c97f076f4af288f7afa1a32931996b2db +Subproject commit 83a8bb6689c30f6d64a01424d1022e7b2b23fbcf From 79fd5298be11914f0dfdbbd60868cd090aa94651 Mon Sep 17 00:00:00 2001 From: junos Date: Wed, 16 Mar 2022 19:20:25 +0100 Subject: [PATCH 32/34] Update RAPIDS. --- rapids | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rapids b/rapids index 83a8bb6..b18dba3 160000 --- a/rapids +++ b/rapids @@ -1 +1 @@ -Subproject commit 83a8bb6689c30f6d64a01424d1022e7b2b23fbcf +Subproject commit b18dba366e6df6da1c0d335036a64815443ad8cb From 75782a53c2ae6bdc143a16e2521a8bba13d771c0 Mon Sep 17 00:00:00 2001 From: junos Date: Wed, 31 Aug 2022 16:13:47 +0200 Subject: [PATCH 33/34] Ignore some more data and commit RAPIDS submodule. --- .gitignore | 2 ++ rapids | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index ab54192..0275f1e 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,5 @@ __pycache__/ /statistical_analysis/*.ipynb /machine_learning/intermediate_results/ /data/features/ +/data/baseline/ +/data/*input*.csv diff --git a/rapids b/rapids index b18dba3..f78aa3e 160000 --- a/rapids +++ b/rapids @@ -1 +1 @@ -Subproject commit b18dba366e6df6da1c0d335036a64815443ad8cb +Subproject commit f78aa3e7b3567423b44045766b230cd60d557cb0 From 2d2f0b916f8c1fd11b0921eb6cd0c0099c7b523f Mon Sep 17 00:00:00 2001 From: junos Date: Wed, 31 Aug 2022 18:46:14 +0200 Subject: [PATCH 34/34] Prepare a function to run all models from an input. --- exploration/ex_all_feat_ml_pipeline.py | 203 ++++++++++++++++++++++++- 1 file changed, 202 insertions(+), 1 deletion(-) diff --git a/exploration/ex_all_feat_ml_pipeline.py b/exploration/ex_all_feat_ml_pipeline.py index b24f200..c0eadd2 100644 --- a/exploration/ex_all_feat_ml_pipeline.py +++ b/exploration/ex_all_feat_ml_pipeline.py @@ -26,10 +26,11 @@ import pandas as pd import seaborn as sns import yaml from pyprojroot import here -from sklearn import linear_model, svm, kernel_ridge, gaussian_process +from sklearn import linear_model, svm, kernel_ridge, gaussian_process, ensemble from sklearn.model_selection import LeaveOneGroupOut, cross_val_score from sklearn.metrics import mean_squared_error, r2_score from sklearn.impute import SimpleImputer +from xgboost import XGBRegressor nb_dir = os.path.split(os.getcwd())[0] if nb_dir not in sys.path: @@ -270,3 +271,203 @@ np.median( ) ) # %% +def insert_row(df, row): + return pd.concat([df, pd.DataFrame([row], columns=df.columns)], ignore_index=True) + +# %% +def run_all_models(input_csv): + # Prepare data + model_input = pd.read_csv(input_csv) + model_input.dropna(axis=1, how="all", inplace=True) + model_input.dropna(axis=0, how="any", subset=["target"], inplace=True) + + index_columns = ["local_segment", "local_segment_label", "local_segment_start_datetime", "local_segment_end_datetime"] + model_input.set_index(index_columns, inplace=True) + + data_x, data_y, data_groups = model_input.drop(["target", "pid"], axis=1), model_input["target"], model_input["pid"] + + categorical_feature_colnames = ["gender", "startlanguage"] + categorical_features = data_x[categorical_feature_colnames].copy() + mode_categorical_features = categorical_features.mode().iloc[0] + # fillna with mode + categorical_features = categorical_features.fillna(mode_categorical_features) + # one-hot encoding + categorical_features = categorical_features.apply(lambda col: col.astype("category")) + if not categorical_features.empty: + categorical_features = pd.get_dummies(categorical_features) + + numerical_features = data_x.drop(categorical_feature_colnames, axis=1) + + train_x = pd.concat([numerical_features, categorical_features], axis=1) + imputer = SimpleImputer(missing_values=np.nan, strategy='mean') + train_x_imputed = imputer.fit_transform(train_x) + + # Prepare cross validation + logo = LeaveOneGroupOut() + logo.get_n_splits( + train_x, + data_y, + groups=data_groups, + ) + scores = pd.DataFrame(columns=["method", "median", "max"]) + + # Validate models + lin_reg_rapids = linear_model.LinearRegression() + lin_reg_scores = cross_val_score( + lin_reg_rapids, + X=train_x_imputed, + y=data_y, + groups=data_groups, + cv=logo, + n_jobs=-1, + scoring='r2' + ) + print("Linear regression:") + print(np.median(lin_reg_scores)) + scores = insert_row(scores, ["Linear regression",np.median(lin_reg_scores),np.max(lin_reg_scores)]) + + ridge_reg = linear_model.Ridge(alpha=.5) + ridge_reg_scores = cross_val_score( + ridge_reg, + X=train_x_imputed, + y=data_y, + groups=data_groups, + cv=logo, + n_jobs=-1, + scoring="r2" + ) + print("Ridge regression") + print(np.median(ridge_reg_scores)) + scores = insert_row(scores, ["Ridge regression",np.median(ridge_reg_scores),np.max(ridge_reg_scores)]) + + lasso_reg = linear_model.Lasso(alpha=0.1) + lasso_reg_score = cross_val_score( + lasso_reg, + X=train_x_imputed, + y=data_y, + groups=data_groups, + cv=logo, + n_jobs=-1, + scoring="r2" + ) + print("Lasso regression") + print(np.median(lasso_reg_score)) + scores = insert_row(scores, ["Lasso regression",np.median(lasso_reg_score),np.max(lasso_reg_score)]) + + bayesian_ridge_reg = linear_model.BayesianRidge() + bayesian_ridge_reg_score = cross_val_score( + bayesian_ridge_reg, + X=train_x_imputed, + y=data_y, + groups=data_groups, + cv=logo, + n_jobs=-1, + scoring="r2" + ) + print("Bayesian Ridge") + print(np.median(bayesian_ridge_reg_score)) + scores = insert_row(scores, ["Bayesian Ridge",np.median(bayesian_ridge_reg_score),np.max(bayesian_ridge_reg_score)]) + + ransac_reg = linear_model.RANSACRegressor() + ransac_reg_score = cross_val_score( + ransac_reg, + X=train_x_imputed, + y=data_y, + groups=data_groups, + cv=logo, + n_jobs=-1, + scoring="r2" + ) + print("RANSAC (outlier robust regression)") + print(np.median(ransac_reg_score)) + scores = insert_row(scores, ["RANSAC",np.median(ransac_reg_score),np.max(ransac_reg_score)]) + + svr = svm.SVR() + svr_score = cross_val_score( + svr, + X=train_x_imputed, + y=data_y, + groups=data_groups, + cv=logo, + n_jobs=-1, + scoring="r2" + ) + print("Support vector regression") + print(np.median(svr_score)) + scores = insert_row(scores, ["Support vector regression",np.median(svr_score),np.max(svr_score)]) + + kridge = kernel_ridge.KernelRidge() + kridge_score = cross_val_score( + kridge, + X=train_x_imputed, + y=data_y, + groups=data_groups, + cv=logo, + n_jobs=-1, + scoring="r2" + ) + print("Kernel Ridge regression") + print(np.median(kridge_score)) + scores = insert_row(scores, ["Kernel Ridge regression",np.median(kridge_score),np.max(kridge_score)]) + + gpr = gaussian_process.GaussianProcessRegressor() + gpr_score = cross_val_score( + gpr, + X=train_x_imputed, + y=data_y, + groups=data_groups, + cv=logo, + n_jobs=-1, + scoring="r2" + ) + print("Gaussian Process Regression") + print(np.median(gpr_score)) + scores = insert_row(scores, ["Gaussian Process Regression",np.median(gpr_score),np.max(gpr_score)]) + + rfr = ensemble.RandomForestRegressor(max_features=0.3, n_jobs=-1) + rfr_score = cross_val_score( + rfr, + X=train_x_imputed, + y=data_y, + groups=data_groups, + cv=logo, + n_jobs=-1, + scoring="r2" + ) + print("Random Forest Regression") + print(np.median(rfr_score)) + scores = insert_row(scores, ["Random Forest Regression",np.median(rfr_score),np.max(rfr_score)]) + + xgb = XGBRegressor() + xgb_score = cross_val_score( + xgb, + X=train_x_imputed, + y=data_y, + groups=data_groups, + cv=logo, + n_jobs=-1, + scoring="r2" + ) + print("XGBoost Regressor") + print(np.median(xgb_score)) + scores = insert_row(scores, ["XGBoost Regressor",np.median(xgb_score),np.max(xgb_score)]) + + ada = ensemble.AdaBoostRegressor() + ada_score = cross_val_score( + ada, + X=train_x_imputed, + y=data_y, + groups=data_groups, + cv=logo, + n_jobs=-1, + scoring="r2" + ) + print("ADA Boost Regressor") + print(np.median(ada_score)) + scores = insert_row(scores, ["ADA Boost Regressor",np.median(ada_score),np.max(ada_score)]) + + return scores + + + +