Джейд Картер

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


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

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(),