{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "## Открытый курс по машинному обучению\n", "
Автор: [Дмитрий Дрёмов](https://www.kaggle.com/dremovd)\n", " \n", "## Простой разведочный анализ данных соревнования по категоризации покупок\n", "\n", "[Kaggle Inclass](https://www.kaggle.com/c/receipt-categorisation) и отдельная [ссылка](https://www.kaggle.com/t/73f1a2eb0be9443ba1f8d2f283adc444) для участия. Недавно на чеках появились QR коды. Пока еще не все с этим знакомы, но по информации из этого кода можно получить полное содержание чека. Это дает возможность вести расходы, учитывая каждый отдельный товар, включая расходы, сделанные наличными. Как следствие наличия полной информации, можно анализировать изменения характера расходов и инфляцию по собственной продуктовой корзине. Названия товаров не стандартизованы: у одного товара в разных магазинах существенно отличаются названия; отдельные слова могут сокращаться; названия могут содержать опечатки. В магазины постоянно добавляются новые товары. Это делает простое составление каталога всех товаров с категориями нереалистичным.\n", "\n", "Данные публикуются впервые, а обученные на них модели используются в [production](https://play.google.com/store/apps/details?id=com.dremovd.fnschecks&hl=ru). Задача, которую предлагается решить — это разбиение всех покупок чека по небольшому набору понятных человеку категорий." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import os\n", "import pandas as pd\n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "PATH_TO_DATA = 'data'" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "train = pd.read_csv(os.path.join(PATH_TO_DATA, 'train.csv.gz'), encoding='utf-8')\n", "train.fillna('', inplace=True)\n", "train.head()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "%matplotlib inline\n", "plt.rcdefaults()\n", "plt.rcParams['font.family'] = 'fantasy'\n", "plt.rcParams['font.fantasy'] = 'Arial'" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "categories = train.groupby('category').count()['check_id']\n", "categories = categories.sort_values(ascending = False)\n", "plt.figure(figsize = (16, 10))\n", "plt.title(u'Число товаров по категориям')\n", "categories.plot(kind='bar');" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "checks = pd.read_csv(os.path.join(PATH_TO_DATA, 'train_checks.csv.gz'))\n", "checks.head()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "shops = checks.groupby('shop_name').count()['check_id']\n", "shops = shops.sort_values(ascending = False)[:15]\n", "plt.figure(figsize = (16, 10))\n", "plt.title(u'Число чеков по магазинам')\n", "shops.plot(kind='bar');" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "plt.figure(figsize = (16, 10))\n", "plt.title(u'Число чеков по магазинам')\n", "_ = plt.hist(checks['sum'], bins = 20, range = [0, 10000], log=True);" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.1" } }, "nbformat": 4, "nbformat_minor": 2 }