Skip to content

Latest commit

 

History

History
100 lines (87 loc) · 4.86 KB

index.md

File metadata and controls

100 lines (87 loc) · 4.86 KB

Итак, я решил попробовать свои силы на kaggle и взял первый же попавшийся dataset: https://www.kaggle.com/lava18/all-that-you-need-to-know-about-the-android-market. Рабоать с ним будем в стандартном python-notebook (Anaconda3).

Загружаем данные и осматриваем

import pandas as pd
playstore_data = pd.read_csv('./googleplaystore.csv', index_col="App")

playstore_data.head()

image

playstore_data.info()

image

Мы видим, что поля Size, Installs, Price имеют тип object, хотя, судя по данным, должны быть числовыми. В объектный тип они сбрасываются из-за наличия нечисловых значений. Давайте изучим внимательное каждое из полей.

playstore_data['Size']

image

playstore_data['Size'].describe()

image

Как видим, поле Size в некоторых случаях вместо размера в мегабайтах содержит значение "Varies with device". Остальные строки визуально представляют собой паттерн: 'M'. Нужно выяснить какие есть значения не подходящие под данный паттерн. Для этого есть масса способов.

playstore_data[~playstore_data['Size'].str.match('^[\d\.]+M$')]

imageTODO screen

Отлично, теперь мы знаем, что есть записи, в которых размер хранится в килобайтах и есть записи, где вместо размера "Varies with device" (зависит от приложения). Нужно: cвести килобайты и мегабайты к одному основанию - килобайтам и выбросить строки не подпадающие под шаблон размеров в килобайтах или мегабайтах

def clean_values(v):
    if re.match('^[\d\.]+M$', v):
        return float(v[0:-1])
    elif re.match('^[\d\.]+k$', v):
        return float(v[0:-1]) / 1000
    else:
        return NaN

playstore_data['Size'] = playstore_data['Size'].map(clean_values)

Посмотрим теперь на поле Installs

playstore_data["Installs"]

image

А теперь проверим сколько значений не удовлетворяют общему паттерну:

playstore_data[~playstore_data["Installs"].str.match('^[\d\,]+\+$')]

image

Отлично, всего лишь два значения. Удалим их из нашего DataFrame-а

playstore_data = playstore_data[playstore_data["Installs"].str.match('^[\d\,]+\+$')]

И преобразуем поле Installs к числовому типу:

playstore_data["Installs"] = pd.to_numeric(playstore_data["Installs"].str.replace('\+$', '', regex=True).str.replace('\,', '', regex=True), errors="coerce", downcast='integer')

Посмотрим снова на наш датасет:

playstore_data.info()

Мы видим, что поле Rating содержит значений меньше, чем остальные поля. При этом, у него тип float64. Это смахивает на то, что в нем содержатся null-ы. Проверим это:

playstore_data["Rating"].isna().sum()
> 1473

Что ж, придется распрощаться с записями содержашими NaN. Это можно делать по колонкам:

playstore_data = playstore_data[playstore_data['Rating'].notna()]
playstore_data = playstore_data[playstore_data['Size'].notna()]
playstore_data = playstore_data[playstore_data["Current Ver"].notna()]
playstore_data = playstore_data[playstore_data["Android Ver"].notna()]

А можно сделать и одним махом:

playstore_data = playstore_data.dropna()

Отлично, мы избавились от всех пустых значений:

Однако колонка Reviews имеет тип object. Надо привести ее к числу:

playstore_data["Reviews"] = playstore_data["Reviews"].astype(int)

Теперь полный порядок, можно начинать строить графики.