Skip to content

Google Play Store Apps Data

Esse conjunto de dados consiste em dados retirados da internet de mais de 10000 aplicativos da Google Play Store.

Fonte do conjunto de dados

Esse projeto está em construção. Disponibilizei para já verem o progresso!

Agradeço a visita! :)

Última alteração feita em 31/08/2023
Utilizarei SQL para análises e Power BI para visualizações

O arquivo 'apps_data.csv' foi inserido na tabela 'Apps_data' para limpeza e tratamento dos dados.

Também utilizei a tabela 'Apps_test' com os mesmos valores, para que seja possível comparar o antes e depois desse processo.

Limpeza e tratamendo dos dados - SQL

Coluna 'App' - Valores duplicados

Dicionário: coluna 'App' contém o nome do aplicativo

A seguir podemos ver que existem 10841 registros na tabela, sendo 9660 valores únicos e 1181 valores duplicados.

COMANDO USADO ACIMA: SELECT COUNT(app) AS TOTAL, COUNT(DISTINCT app) AS ÚNICOS, (COUNT(app) - COUNT(DISTINCT app)) AS VALORES_DUPLICADOS FROM apps_data

Foi realizado o script SQL abaixo para verificar os registros duplicados.

COMANDO USADO ACIMA: SELECT * FROM ( SELECT *, ROW_NUMBER() OVER( PARTITION BY app ORDER BY (app) ) AS POSICAO FROM apps_data ) TABELA WHERE POSICAO > 1 ORDER BY app

Para deletar os valores duplicados, foi executado o comando SQL abaixo:

COMANDO USADO ACIMA: DELETE FROM apps_data WHERE id IN ( SELECT id FROM ( SELECT *, ROW_NUMBER() OVER( PARTITION BY app ORDER BY (app) ) AS POSICAO FROM apps_data ) TABELA WHERE POSICAO > 1)

Após a aplicação desse DELETE, podemos ver que não existem mais valores duplicados

COMANDO USADO ACIMA: SELECT COUNT(app) AS TOTAL, COUNT(DISTINCT app) AS ÚNICOS, (COUNT(app) - COUNT(DISTINCT app)) AS VALORES_DUPLICADOS FROM apps_data

Coluna 'Category'

Dicionário: coluna 'Category' contém a categoria que o aplicativo pertence

Verificando se existem valores faltando e julgar se é necessário realizar a limpeza

Podemos ver que existem 34 categorias, sendo que somente 1 registro não tem valor nessa coluna (caracterizado pelo valor NULL)

COMANDO USADO ACIMA: SELECT DISTINCT category, COUNT(*) FROM apps_data GROUP BY category

Abaixo vemos um pouco dos detalhes do único registro com valor NULL

COMANDO USADO ACIMA: SELECT * FROM apps_data WHERE category IS NULL

Como esta coluna é do tipo VARCHAR (texto), o valor NULL não precisa ser corrigido, já que não temos informações suficientes para atribuir um valor.

Coluna 'Rating'

Dicionário: coluna 'Rating' contém a avaliação que o usário deu para o aplicativo (varia de 1.0 a 5.0)

Ao executar o SQL abaixo, podemos ver que existe valores 'NaN', ou seja, valores faltando.

COMANDO USADO ACIMA: SELECT MIN(rating), MAX(rating) FROM apps_data

A seguir vemos que existem 1463 registros com o valor 'NaN'

COMANDO USADO ACIMA: SELECT rating, COUNT(*) FROM apps_data WHERE rating = 'NaN' GROUP BY rating

Como a variação é de 1.0 a 5.0, foi atribuído o valor 0 para os campos com 'NaN'. Atribuí um valor númerico para que no futuro possamos realizar operações numéricas com essa coluna.

Por exemplo: a função AVG() - média, não pode ser executada com campos do tipo texto:

COMANDO USADO ACIMA: SELECT MIN(rating), MAX(rating), AVG(rating) FROM apps_data

Executei o UPDATE para atribuir o valor 0 no lugar de 'NaN'

COMANDO USADO ACIMA: UPDATE apps_data SET rating = 0 WHERE rating = 'NaN'

Ainda assim, o tipo da coluna permanece como texto, então converti a coluna para o tipo numérico

COMANDO USADO ACIMA: ALTER TABLE apps_data ALTEER COLUMN rating TYPE NUMERIC USING rating::NUMERIC

Podemos ver a seguir que a funçao AVG() já funciona normalmente.

Obs: excluímos o valor 0 da consulta, uma vez que o 0 foi atribuído por mim e não reflete a nota real do aplicativo

COMANDO USADO ACIMA: SELECT MIN(rating), MAX(rating), AVG(rating) FROM apps_data WHERE rating <> 0

Coluna 'Reviews'

Dicionário: coluna 'Reviews' contém o número de avaliações do aplicativo

Abaixo vemos que essa coluna não possui valores faltando

COMANDO USADO ACIMA: SELECT * FROM apps_data WHERE reviews IS NULL

Quando executamos o script abaixo, vemos que ele retorna o valor 9992 como máximo, mas isso acontece porque essa coluna foi atribuída o tipo TEXTO, então ele organiza por 'ordem alfabética'.

COMANDO USADO ACIMA: SELECT MIN(reviews), MAX(reviews) FROM apps_data

Executei o script de UPDATE para alterar o tipo para INT

COMANDO USADO ACIMA: ALTER TABLE apps_data ALTER COLUMN reviews TYPE INT USING reviews::INT

Agora vemos o máximo com o valor que realmente é o maior da coluna

COMANDO USADO ACIMA: SELECT MIN(reviews), MAX(reviews) FROM apps_data

Coluna 'Size'

Dicionário: coluna 'Size' contém a o tamanho do aplicativo

Como podemos ver, existem 3 valores para essa coluna.

Valores que terminam em 'K' (Kilobytes), em 'M' (Megabytes) e 'Varies with device' (varia com o dispositivo)

COMANDO USADO ACIMA: SELECT DISTINCT size, COUNT(*) FROM apps_data GROUP BY size

Podemos ver que não há valores NULL ou '0', portanto não há valores faltando

COMANDO USADO ACIMA: SELECT * FROM apps_data WHERE size IS NULL

COMANDO USADO ACIMA: SELECT * FROM apps_data WHERE size = '0'

Como se trata de uma coluna que podemos realizar operações como média do tamanho dos aplicativos. Foi necessária alguns tratamentos para transformar os dados em números.

Abaixo vemos que não existem valores do tipo 'B' (Bytes)

COMANDO USADO ACIMA: SELECT COUNT(*) FROM apps_data WHERE UPPER(size) LIKE '%B%'

Vemos que existem 316 valores do tipo 'K' (Kilobytes)

COMANDO USADO ACIMA: SELECT COUNT(*) FROM apps_data WHERE UPPER(size) LIKE '%K%'

Vemos que existem 8830 valores do tipo 'M' (Megabytes)

COMANDO USADO ACIMA: SELECT COUNT(*) FROM apps_data WHERE UPPER(size) LIKE '%M%'

E existem 1695 valores do tipo 'Varies with device'

COMANDO USADO ACIMA: SELECT DISTINCT size, COUNT(*) FROM apps_data WHERE LOWER(size) LIKE '%with%' GROUP BY size

Totalizando os 10841 valores que a tabela original possuía.

Para transformar os dados em números foi realizado o comando para excluir o 'K' dos valores e ficar somente os números

COMANDO USADO ACIMA: UPDATE apps_data SET size = (RTRIM(UPPER(size), 'K')::NUMERIC) WHERE UPPER(size) LIKE '%K%'

Para transformar os dados em números foi realizado o comando para excluir o 'M' dos valores e ficar somente os números multiplicados por 1000 (cada 1M corresponde a 1000K, aproximadamente)

COMANDO USADO ACIMA: UPDATE apps_data SET size = ((RTRIM(UPPER(size), 'K')::NUMERIC) * 1000) WHERE UPPER(size) LIKE '%M%'

E os valores 'Varies with device' foram substituídos por '0' para que possamos executar operações matemáticas com essa coluna. Sendo que não existia nos dados originais o valor '0', por isso escolhi ele

COMANDO USADO ACIMA: UPDATE apps_data SET size = '0' WHERE UPPER(size) LIKE '%WITH%'

Transformei o tipo da coluna para valores inteiros (INT)

COMANDO USADO ACIMA: ALTER TABLE apps_data ALTER COLUMN size TYPE NUMERIC USING size::NUMERIC

Podendo assim realizar operações matemáticas com os valores. Excluindo o valor 0 já que ele foi adicionado para classificar os valores 'Varies with device'.

COMANDO USADO ACIMA: SELECT MIN(size), MAX(size), AVG(size) FROM apps_data WHERE size <> 0

Lembrando que agora os valores estão na ordem de 'K' (Kilobytes), ou seja, uma coluna com valor 250 corresponde a 250 Kilobytes; e uma coluna com valor 1000 corresponde a 1000 Kilobytes ou 1 Megabytes.