Генеративный анализ данных

Чтение и запись файлов SQL в Pandas

Дата:

Когда я начал изучать анализ данных несколько лет назад, первым делом я изучил SQL и Pandas. Для аналитика данных крайне важно иметь прочную основу для работы с SQL и Pandas. Оба являются мощными инструментами, которые помогают аналитикам данных эффективно анализировать данные, хранящиеся в базах данных, и манипулировать ими.

Обзор SQL и Pandas

SQL (язык структурированных запросов) — это язык программирования, используемый для управления реляционными базами данных и управления ими. С другой стороны, Pandas — это библиотека Python, используемая для обработки и анализа данных.

Анализ данных предполагает работу с большими объемами данных, и для хранения этих данных часто используются базы данных. SQL и Pandas предоставляют мощные инструменты для работы с базами данных, позволяя аналитикам данных эффективно извлекать, обрабатывать и анализировать данные. Используя эти инструменты, аналитики данных могут получить ценную информацию из данных, которую иначе было бы трудно получить.

В этой статье мы рассмотрим, как использовать SQL и Pandas для чтения и записи в базу данных.

Подключение к БД

Установка библиотек

Мы должны сначала установить необходимые библиотеки, прежде чем мы сможем подключиться к базе данных SQL с помощью Pandas. Требуются две основные библиотеки: Pandas и SQLAlchemy. Pandas — это популярная библиотека для работы с данными, которая позволяет хранить большие структуры данных, как упоминалось во введении. Напротив, SQLAlchemy предоставляет API для подключения к базе данных SQL и взаимодействия с ней.

Мы можем установить обе библиотеки с помощью диспетчера пакетов Python, pip, выполнив следующие команды в командной строке.

$ pip install pandas
$ pip install sqlalchemy

Создание соединения

После установки библиотек мы можем использовать Pandas для подключения к базе данных SQL.

Для начала мы создадим объект механизма SQLAlchemy с create_engine(), create_engine() Функция подключает код Python к базе данных. Он принимает в качестве аргумента строку подключения, в которой указывается тип базы данных и сведения о подключении. В этом примере мы будем использовать тип базы данных SQLite и путь к файлу базы данных.

Создайте объект механизма для базы данных SQLite, используя приведенный ниже пример:

import pandas as pd
from sqlalchemy import create_engine engine = create_engine('sqlite:///C/SQLite/student.db')

Если файл базы данных SQLite, student.db в нашем случае, находится в том же каталоге, что и скрипт Python, мы можем напрямую использовать имя файла, как показано ниже.

engine = create_engine('sqlite:///student.db')

Чтение файлов SQL с помощью Pandas

Давайте прочитаем данные теперь, когда мы установили соединение. В этом разделе мы рассмотрим read_sql, read_sql_tableкачества read_sql_query функции и как их использовать для работы с базой данных.

Выполнение SQL-запросов с помощью Panda read_sql() Функция

Ассоциация read_sql() — это библиотечная функция Pandas, которая позволяет нам выполнять SQL-запрос и извлекать результаты в кадр данных Pandas. read_sql() Функция связывает SQL и Python, позволяя нам использовать преимущества обоих языков. Функция обертывает read_sql_table() и read_sql_query(), read_sql() функция внутренне маршрутизируется на основе предоставленного ввода, что означает, что если ввод предназначен для выполнения SQL-запроса, он будет перенаправлен на read_sql_query(), и если это таблица базы данных, она будет перенаправлена ​​на read_sql_table().

Ассоциация read_sql() синтаксис следующий:

pandas.read_sql(sql, con, index_col=None, coerce_float=True, params=None, parse_dates=None, columns=None, chunksize=None)

Требуются параметры SQL и con; остальные опциональны. Однако мы можем манипулировать результатом, используя эти необязательные параметры. Рассмотрим подробнее каждый параметр.

  • sql: SQL-запрос или имя таблицы базы данных
  • con: объект подключения или URL-адрес подключения.
  • index_col: этот параметр позволяет нам использовать один или несколько столбцов из результата SQL-запроса в качестве индекса фрейма данных. Он может принимать либо один столбец, либо список столбцов.
  • coerce_float: этот параметр указывает, следует ли преобразовывать нечисловые значения в числа с плавающей запятой или оставлять их в виде строк. По умолчанию установлено значение true. Если возможно, он преобразует нечисловые значения в типы с плавающей запятой.
  • params: параметры обеспечивают безопасный метод передачи динамических значений в SQL-запрос. Мы можем использовать параметр params для передачи словаря, кортежа или списка. В зависимости от базы данных синтаксис параметров различается.
  • parse_dates: это позволяет нам указать, какой столбец в результирующем фрейме данных будет интерпретироваться как дата. Он принимает один столбец, список столбцов или словарь с ключом в качестве имени столбца и значением в качестве формата столбца.
  • columns: Это позволяет нам извлекать только выбранные столбцы из списка.
  • chunksize: при работе с большим набором данных важен размер фрагмента. Он извлекает результат запроса меньшими порциями, повышая производительность.

Вот пример того, как использовать read_sql():

Код:

import pandas as pd
from sqlalchemy import create_engine engine = create_engine('sqlite:///C/SQLite/student.db') df = pd.read_sql("SELECT * FROM Student", engine, index_col='Roll Number', parse_dates='dateOfBirth')
print(df)
print("The Data type of dateOfBirth: ", df.dateOfBirth.dtype) engine.dispose()

Вывод:

 firstName lastName email dateOfBirth
rollNumber
1 Mark Simson [email protected] 2000-02-23
2 Peter Griffen [email protected] 2001-04-15
3 Meg Aniston [email protected] 2001-09-20
Date type of dateOfBirth: datetime64[ns]

После подключения к базе данных мы выполняем запрос, который возвращает все записи из базы данных. Student таблицу и сохраняет их в DataFrame df. Столбец «Roll Number» преобразуется в индекс с помощью index_col параметр, а тип данных «dateOfBirth» — «datetime64[ns]» из-за parse_dates. Мы можем использовать read_sql() не только для извлечения данных, но и для выполнения других операций, таких как вставка, удаление и обновление. read_sql() является универсальной функцией.

Загрузка определенных таблиц или представлений из БД

Загрузка определенной таблицы или представления с помощью Pandas read_sql_table() — это еще один метод чтения данных из базы данных в фрейм данных Pandas.

Что такое read_sql_table?

Библиотека Pandas предоставляет read_sql_table функция, которая специально разработана для чтения всей таблицы SQL без выполнения каких-либо запросов и возврата результата в виде кадра данных Pandas.

Синтаксис read_sql_table() как показано ниже:

pandas.read_sql_table(table_name, con, schema=None, index_col=None, coerce_float=True, parse_dates=None, columns=None, chunksize=None)

За исключением table_name и схеме параметры объясняются так же, как read_sql().

  • table_name: Параметр table_name имя таблицы SQL в базе данных.
  • schema: этот необязательный параметр является именем схемы, содержащей имя таблицы.

После создания подключения к базе данных мы будем использовать read_sql_table функция для загрузки Student таблицу в Pandas DataFrame.

import pandas as pd
from sqlalchemy import create_engine engine = create_engine('sqlite:///C/SQLite/student.db') df = pd.read_sql_table('Student', engine)
print(df.head()) engine.dispose()

Вывод:

 rollNumber firstName lastName email dateOfBirth
0 1 Mark Simson [email protected] 2000-02-23
1 2 Peter Griffen [email protected] 2001-04-15
2 3 Meg Aniston [email protected] 2001-09-20

Предположим, что это большая таблица, которая может интенсивно использовать память. Давайте рассмотрим, как мы можем использовать chunksize параметр для решения этой проблемы.

Ознакомьтесь с нашим практическим руководством по изучению Git с рекомендациями, принятыми в отрасли стандартами и прилагаемой памяткой. Перестаньте гуглить команды Git и на самом деле изучить это!

Код:

import pandas as pd
from sqlalchemy import create_engine engine = create_engine('sqlite:///C/SQLite/student.db') df_iterator = pd.read_sql_table('Student', engine, chunksize = 1) for df in df_iterator: print(df.head()) engine.dispose()

Вывод:

 rollNumber firstName lastName email dateOfBirth
0 1 Mark Simson [email protected] 2000-02-23
0 2 Peter Griffen [email protected] 2001-04-15
0 3 Meg Aniston [email protected] 2001-09-20

Имейте в виду, что chunksize Я использую здесь 1, потому что в моей таблице всего 3 записи.

Запрос к БД напрямую с синтаксисом SQL Pandas

Извлечение информации из базы данных является важной частью для аналитиков данных и ученых. Для этого мы будем использовать read_sql_query() функции.

Что такое read_sql_query()?

Использование панд read_sql_query() мы можем запускать SQL-запросы и получать результаты непосредственно в DataFrame. read_sql_query() функция создана специально для SELECT заявления. Его нельзя использовать для каких-либо других операций, таких как DELETE or UPDATE.

Синтаксис:

pandas.read_sql_query(sql, con, index_col=None, coerce_float=True, params=None, parse_dates=None, chunksize=None, dtype=None, dtype_backend=_NoDefault.no_default)

Все описания параметров совпадают с read_sql() функция. Вот пример read_sql_query():

Код:

import pandas as pd
from sqlalchemy import create_engine engine = create_engine('sqlite:///C/SQLite/student.db') df = pd.read_sql_query('Select firstName, lastName From Student Where rollNumber = 1', engine)
print(df) engine.dispose()

Вывод:

 firstName lastName
0 Mark Simson

Написание файлов SQL с помощью Pandas

Предположим, при анализе данных мы обнаружили, что необходимо изменить несколько записей или требуется новая таблица или представление с данными. Чтобы обновить или вставить новую запись, одним из способов является использование read_sql() и написать запрос. Однако этот метод может быть длительным. Панды предоставляют отличный метод под названием to_sql() для подобных ситуаций.

В этом разделе мы сначала создадим новую таблицу в базе данных, а затем отредактируем существующую.

Создание новой таблицы в базе данных SQL

Прежде чем мы создадим новую таблицу, давайте сначала обсудим to_sql() в деталях.

Что такое to_sql()?

Ассоциация to_sql() Функция библиотеки Pandas позволяет нам записывать или обновлять базу данных. to_sql() Функция может сохранять данные DataFrame в базу данных SQL.

Синтаксис для to_sql():

DataFrame.to_sql(name, con, schema=None, if_exists='fail', index=True, index_label=None, chunksize=None, dtype=None, method=None)

Только name и con параметры обязательны для запуска to_sql(); однако другие параметры обеспечивают дополнительную гибкость и возможности настройки. Рассмотрим подробно каждый параметр:

  • name: имя создаваемой или изменяемой таблицы SQL.
  • con: объект подключения к базе данных.
  • schema: Схема таблицы (необязательно).
  • if_exists: Значение по умолчанию для этого параметра — «сбой». Этот параметр позволяет нам решить, какое действие следует предпринять, если таблица уже существует. Варианты включают «сбой», «заменить» и «добавить».
  • index: параметр index принимает логическое значение. По умолчанию установлено значение True, что означает, что индекс DataFrame будет записан в таблицу SQL.
  • index_label: этот необязательный параметр позволяет указать метку столбца для столбцов индекса. По умолчанию индекс записывается в таблицу, но с помощью этого параметра можно указать конкретное имя.
  • chunksize: количество строк, записываемых за раз в базу данных SQL.
  • dtype: этот параметр принимает словарь с ключами в качестве имен столбцов и значениями в качестве их типов данных.
  • method: Параметр метода позволяет указать метод, используемый для вставки данных в SQL. По умолчанию установлено значение «Нет», что означает, что панды найдут наиболее эффективный способ на основе базы данных. Существует два основных варианта параметров метода:
    • multi: позволяет вставлять несколько строк в один SQL-запрос. Однако не все базы данных поддерживают многострочную вставку.
    • Вызываемая функция: Здесь мы можем написать пользовательскую функцию для вставки и вызвать ее, используя параметры метода.

Вот пример использования to_sql():

import pandas as pd
from sqlalchemy import create_engine engine = create_engine('sqlite:///C/SQLite/student.db') data = {'Name': ['Paul', 'Tom', 'Jerry'], 'Age': [9, 8, 7]}
df = pd.DataFrame(data) df.to_sql('Customer', con=engine, if_exists='fail') engine.dispose()

В базе данных создается новая таблица «Клиент» с двумя полями «Имя» и «Возраст».

Снимок базы данных:

Вывод to_sql()

Обновление существующих таблиц с помощью фреймов данных Pandas

Обновление данных в базе данных — сложная задача, особенно при работе с большими данными. Однако, используя to_sql() Функция в Pandas может значительно упростить эту задачу. Чтобы обновить существующую таблицу в базе данных, to_sql() можно использовать с функцией if_exists параметр установлен на «заменить». Это перезапишет существующую таблицу новыми данными.

Вот пример to_sql() который обновляет ранее созданный Customer стол. Предположим, в Customer мы хотим обновить возраст клиента по имени Пол с 9 до 10 лет. Для этого сначала мы можем изменить соответствующую строку в DataFrame, а затем использовать to_sql() Функция обновления базы данных.

Код:

import pandas as pd
from sqlalchemy import create_engine engine = create_engine('sqlite:///C/SQLite/student.db') df = pd.read_sql_table('Customer', engine) df.loc[df['Name'] == 'Paul', 'Age'] = 10 df.to_sql('Customer', con=engine, if_exists='replace') engine.dispose()

В базе обновляется возраст Павла:

Вывод to_sql()

Заключение

В заключение, Pandas и SQL являются мощными инструментами для задач анализа данных, таких как чтение и запись данных в базу данных SQL. Pandas предоставляет простой способ подключения к базе данных SQL, чтения данных из базы данных в фрейм данных Pandas и записи данных фрейма данных обратно в базу данных.

Библиотека Pandas позволяет легко манипулировать данными в кадре данных, тогда как SQL предоставляет мощный язык для запроса данных в базе данных. Использование Pandas и SQL для чтения и записи данных может сэкономить время и усилия в задачах анализа данных, особенно когда данные очень большие. В целом, совместное использование SQL и Pandas может помочь аналитикам данных и ученым оптимизировать рабочий процесс.

Spot_img

Последняя разведка

Spot_img

Чат с нами

Всем привет! Могу я чем-нибудь помочь?