Библиотеки Python Часть 2. Практическое применение. Джейд Картер

Читать онлайн.
Название Библиотеки Python Часть 2. Практическое применение
Автор произведения Джейд Картер
Жанр
Серия
Издательство
Год выпуска 2025
isbn



Скачать книгу

engine.connect() as conn:

      conn.execute(users.insert(), [

      {'name': 'Alice', 'age': 25, 'email': '[email protected]'},

      {'name': 'Bob', 'age': 35, 'email': '[email protected]'},

      {'name': 'Charlie', 'age': 32, 'email': '[email protected]'},

      {'name': 'Diana', 'age': 28, 'email': '[email protected]'},

      {'name': 'Eve', 'age': 40, 'email': '[email protected]'}

      ])

      # Извлечение пользователей старше 30 лет

      query = "SELECT * FROM users WHERE age > 30"

      df = pd.read_sql(query, engine)

      print(df)

      ```

      Результат:

      ```

      id name age email

      1 2 Bob 35 [email protected]

      2 3 Charlie 32 [email protected]

      4 5 Eve 40 [email protected]

      ```

      Задача 2: Подсчет пользователей по возрастным группам

      Описание:

      Используя базу данных `users.db`, разделите пользователей на две группы: младше 30 лет и 30 лет и старше. Посчитайте количество пользователей в каждой группе.

      Решение:

      ```python

      # Чтение данных из таблицы

      df = pd.read_sql("SELECT * FROM users", engine)

      # Добавление возрастной группы

      df['age_group'] = df['age'].apply(lambda x: 'Under 30' if x < 30 else '30 and above')

      # Подсчет пользователей по группам

      group_counts = df.groupby('age_group')['id'].count().reset_index()

      print(group_counts)

      ```

      Результат:

      ```

      age_group id

      0 30 and above 3

      1 Under 30 2

      ```

      Задача 3: Сохранение агрегированных данных в новую таблицу

      Описание:

      Сохраните результаты подсчета пользователей по возрастным группам в новую таблицу `age_groups` в базе данных `users.db`.

      Решение:

      ```python

      # Сохранение в новую таблицу

      group_counts.to_sql('age_groups', engine, if_exists='replace', index=False)

      # Проверка сохраненных данных

      saved_data = pd.read_sql("SELECT * FROM age_groups", engine)

      print(saved_data)

      ```

      Результат:

      ```

      age_group id

      0 30 and above 3

      1 Under 30 2

      ```

      Задача 4: Поиск наиболее популярных доменов электронной почты

      Описание:

      Добавьте данные о пользователях с разными адресами электронной почты. Найдите, какие домены (`example.com`, `gmail.com` и т.д.) встречаются чаще всего.

      Решение:

      ```python

      # Добавление новых данных

      with engine.connect() as conn:

      conn.execute(users.insert(), [

      {'name': 'Frank', 'age': 29, 'email': '[email protected]'},

      {'name': 'Grace', 'age': 37, 'email': '[email protected]'},

      {'name': 'Helen', 'age': 33, 'email': '[email protected]'}

      ])

      # Чтение данных

      df = pd.read_sql("SELECT * FROM users", engine)

      # Выделение доменов

      df['email_domain'] = df['email'].apply(lambda x: x.split('@')[1])

      # Подсчет частоты доменов

      domain_counts = df['email_domain'].value_counts().reset_index()

      domain_counts.columns = ['email_domain', 'count']

      print(domain_counts)

      ```

      Результат:

      ```

      email_domain count

      0 example.com 5

      1 gmail.com 2

      ```

      Задача 5: Создание таблицы продаж и анализ доходов

      Описание:

      Создайте таблицу `sales`, содержащую данные о продажах:

      – `id` – идентификатор продажи.

      – `product` – название продукта.

      – `price` – цена продукта.

      – `quantity` – количество проданных единиц.

      Рассчитайте общий доход для каждого продукта и сохраните результаты в новую таблицу `product_revenues`.

      Решение:

      ```python

      # Определение таблицы sales

      sales = Table(

      'sales', metadata,

      Column('id', Integer, primary_key=True),

      Column('product', String),

      Column('price', Integer),

      Column('quantity', Integer)

      )

      metadata.create_all(engine)

      # Добавление данных

      with engine.connect() as conn:

      conn.execute(sales.insert(),