Джейд Картер

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


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

index=False)

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

      saved_revenues = pd.read_sql("SELECT * FROM product_revenues", engine)

      print(saved_revenues)

      ```

      Результат:

      ```

      product revenue

      0 Laptop 3000

      1 Phone 2500

      2 Tablet 2100

      ```

      Задача 6: Фильтрация данных по динамическому запросу

      Описание:

      Создайте функцию, которая принимает минимальную цену и возвращает список продуктов, стоимость которых выше указанного значения.

      Решение:

      ```python

      def filter_products_by_price(min_price):

      query = f"SELECT * FROM sales WHERE price > {min_price}"

      result_df = pd.read_sql(query, engine)

      return result_df

      # Фильтрация продуктов с ценой выше 400

      filtered_products = filter_products_by_price(400)

      print(filtered_products)

      ```

      Результат:

      ```

      id product price quantity

      0 1 Laptop 1000 3

      1 2 Phone 500 5

      ```

      Задача 7: Определение наиболее активных пользователей

      Описание:

      В таблице `activity_log` содержатся данные о действиях пользователей:

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

      – `user_id` – идентификатор пользователя.

      – `action` – выполненное действие.

      – `timestamp` – время выполнения действия.

      Определите, кто из пользователей совершил наибольшее количество действий.

      Решение:

      ```python

      from sqlalchemy import Table, Column, Integer, String, DateTime

      from datetime import datetime

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

      activity_log = Table(

      'activity_log', metadata,

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

      Column('user_id', Integer),

      Column('action', String),

      Column('timestamp', DateTime)

      )

      metadata.create_all(engine)

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

      with engine.connect() as conn:

      conn.execute(activity_log.insert(), [

      {'user_id': 1, 'action': 'login', 'timestamp': datetime(2025, 1, 1, 10, 0)},

      {'user_id': 1, 'action': 'purchase', 'timestamp': datetime(2025, 1, 1, 10, 5)},

      {'user_id': 2, 'action': 'login', 'timestamp': datetime(2025, 1, 1, 11, 0)},

      {'user_id': 1, 'action': 'logout', 'timestamp': datetime(2025, 1, 1, 10, 10)},

      {'user_id': 2, 'action': 'purchase', 'timestamp': datetime(2025, 1, 1, 11, 5)},

      {'user_id': 2, 'action': 'logout', 'timestamp': datetime(2025, 1, 1, 11, 10)}

      ])

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

      activity_df = pd.read_sql("SELECT * FROM activity_log", engine)

      # Подсчет количества действий по пользователям

      user_activity = activity_df.groupby('user_id')['id'].count().reset_index()

      user_activity.columns = ['user_id', 'action_count']

      # Поиск самого активного пользователя

      most_active_user = user_activity.loc[user_activity['action_count'].idxmax()]

      print(most_active_user)

      ```

      Результат:

      ```

      user_id 1

      action_count 3

      ```

      Задача 8: Подсчет действий по типу

      Описание: Для каждого типа действия из таблицы `activity_log` подсчитайте, сколько раз оно выполнялось.

      Решение:

      ```python

      # Подсчет количества каждого типа действия

      action_counts = activity_df['action'].value_counts().reset_index()

      action_counts.columns = ['action', 'count']

      print(action_counts)

      ```

      Результат:

      ```

      action count

      0 login 2

      1 purchase 2

      2 logout 2

      ```

      Задача 9: Анализ временных меток

      Описание: Определите, в какие часы дня пользователи наиболее активны.

      Решение:

      ```python

      # Извлечение часа из временных меток

      activity_df['hour'] = activity_df['timestamp'].dt.hour

      # Подсчет действий по часам

      hourly_activity = activity_df.groupby('hour')['id'].count().reset_index()

      hourly_activity.columns = ['hour', 'action_count']

      print(hourly_activity)

      ```

      Результат:

      ```

      hour action_count

      0 10 3

      1 11 3

      ```

      Задача