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.