{ "cells": [ { "cell_type": "code", "execution_count": 2, "id": "5835a11d-0aae-4555-89b1-ab6090883fef", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Файл 'orders.csv' создан: 2000 строк.\n", "Файл 'clients.csv' создан: 500 строк.\n", "\n", "Готово! Теперь можешь запускать код из статьи.\n" ] } ], "source": [ "import pandas as pd\n", "import numpy as np\n", "import random\n", "from datetime import datetime, timedelta\n", "\n", "# Настройки генерации\n", "NUM_ROWS = 2000 # Количество заказов\n", "NUM_CLIENTS = 500 # Количество уникальных клиентов (меньше заказов, чтобы были повторные покупки)\n", "\n", "# --- 1. ГЕНЕРАЦИЯ orders.csv ---\n", "\n", "# Генерация дат за последний год\n", "def generate_dates(start_date, num_days, n):\n", " start = datetime.strptime(start_date, \"%Y-%m-%d\")\n", " # Генерируем случайное кол-во дней для прибавления к стартовой дате\n", " random_days = np.random.randint(0, num_days, n)\n", " return [start + timedelta(days=int(day)) for day in random_days]\n", "\n", "# Списки категорий и городов для случайного выбора\n", "categories = ['Electronics', 'Clothing', 'Home', 'Books', 'Sports', 'Beauty', 'Auto']\n", "cities = ['Moscow', 'Saint Petersburg', 'Novosibirsk', 'Yekaterinburg', 'Kazan', 'Sochi', 'Vladivostok']\n", "\n", "# Создаем словарь с данными\n", "data = {\n", " 'order_id': np.arange(1001, 1001 + NUM_ROWS),\n", " \n", " 'date': generate_dates('2023-01-01', 365, NUM_ROWS),\n", " \n", " # Генерируем ID пользователей от 1 до 500\n", " 'user_id': np.random.randint(1, NUM_CLIENTS + 1, NUM_ROWS).astype(float),\n", " \n", " 'product_id': np.random.randint(10000, 99999, NUM_ROWS),\n", " \n", " 'category': np.random.choice(categories, NUM_ROWS),\n", " \n", " # Цены от 500 до 50000\n", " 'price': np.random.randint(500, 50000, NUM_ROWS),\n", " \n", " 'city': np.random.choice(cities, NUM_ROWS),\n", " \n", " # Рейтинг от 1 до 5\n", " 'rating': np.random.randint(1, 6, NUM_ROWS).astype(float)\n", "}\n", "\n", "df_orders = pd.DataFrame(data)\n", "\n", "# --- ДОБАВЛЯЕМ \"ГРЯЗЬ\" (Пропуски/NaN) ---\n", "# Для реалистичности удалим часть данных, чтобы ты мог тренировать методы dropna/fillna\n", "\n", "# Удаляем 5% user_id (как будто пользователь не залогинился)\n", "random_indices_user = np.random.choice(df_orders.index, size=int(NUM_ROWS * 0.05), replace=False)\n", "df_orders.loc[random_indices_user, 'user_id'] = np.nan\n", "\n", "# Удаляем 10% рейтингов (не все ставят оценки)\n", "random_indices_rating = np.random.choice(df_orders.index, size=int(NUM_ROWS * 0.10), replace=False)\n", "df_orders.loc[random_indices_rating, 'rating'] = np.nan\n", "\n", "# Сохраняем orders.csv\n", "df_orders.to_csv('orders.csv', index=False)\n", "print(f\"Файл 'orders.csv' создан: {df_orders.shape[0]} строк.\")\n", "\n", "\n", "# --- 2. ГЕНЕРАЦИЯ clients.csv ---\n", "\n", "first_names = ['Ivan', 'Maria', 'Petr', 'Olga', 'Dmitry', 'Anna', 'Sergey', 'Elena', 'Alex', 'Yulia']\n", "last_names = ['Ivanov', 'Petrov', 'Sidorov', 'Smirnov', 'Kuznetsov', 'Popov', 'Sokolov', 'Mikhailov']\n", "\n", "# Генерация списка клиентов\n", "clients_data = []\n", "for i in range(1, NUM_CLIENTS + 1):\n", " f_name = random.choice(first_names)\n", " l_name = random.choice(last_names)\n", " clients_data.append({\n", " 'user_id': i,\n", " 'name': f\"{f_name} {l_name}\",\n", " # Генерируем email из имени\n", " 'email': f\"{f_name.lower()}.{l_name.lower()}{i}@example.com\"\n", " })\n", "\n", "df_clients = pd.DataFrame(clients_data)\n", "\n", "# Сохраняем clients.csv\n", "df_clients.to_csv('clients.csv', index=False)\n", "print(f\"Файл 'clients.csv' создан: {df_clients.shape[0]} строк.\")\n", "\n", "print(\"\\nГотово! Теперь можешь запускать код из статьи.\")" ] }, { "cell_type": "code", "execution_count": null, "id": "37fd9038-fadd-463b-b65c-776208c12e6d", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.11.6" } }, "nbformat": 4, "nbformat_minor": 5 }