数年前にデータ分析を学び始めたとき、最初に学んだのは SQL と Pandas でした。 データ アナリストとして、SQL と Pandas を使用するための強力な基盤を持つことが重要です。 どちらも、データ アナリストがデータベースに保存されているデータを効率的に分析および操作するのに役立つ強力なツールです。
SQL と Pandas の概要
SQL (Structured Query Language) は、リレーショナル データベースの管理と操作に使用されるプログラミング言語です。 一方、Pandas はデータ操作と分析に使用される Python ライブラリです。
データ分析には大量のデータの操作が含まれ、このデータを保存するためにデータベースがよく使用されます。 SQL と Pandas は、データベースを操作するための強力なツールを提供し、データ アナリストがデータを効率的に抽出、操作、分析できるようにします。 これらのツールを活用することで、データ アナリストは、他のツールでは入手が困難なデータから貴重な洞察を得ることができます。
この記事では、SQL と Pandas を使用してデータベースの読み取りと書き込みを行う方法を説明します。
DBに接続する
ライブラリのインストール
Pandas を使用して SQL データベースに接続するには、まず必要なライブラリをインストールする必要があります。 必要な XNUMX つの主なライブラリは、Pandas と SQLAlchemy です。 Pandas は、冒頭で述べたように、大規模なデータ構造の保存を可能にする人気のあるデータ操作ライブラリです。 対照的に、SQLAlchemy は、SQL データベースに接続して対話するための API を提供します。
コマンド プロンプトで次のコマンドを実行すると、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')
Pandas を使用した SQL ファイルの読み取り
接続が確立できたので、データを読み取ってみましょう。 このセクションでは、 read_sql
, read_sql_table
, read_sql_query
関数と、それらを使用してデータベースを操作する方法。
Panda を使用した SQL クエリの実行 read_sql() 演算
read_sql()
は、SQL クエリを実行し、結果を Pandas データフレームに取得できるようにする Pandas ライブラリ関数です。 の read_sql()
function は 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
: 接続オブジェクトまたは接続 URLindex_col
: このパラメータを使用すると、SQL クエリ結果の XNUMX つ以上の列をデータ フレーム インデックスとして使用できます。 単一の列または列のリストを指定できます。coerce_float
: このパラメータは、数値以外の値を浮動小数点数に変換するか文字列のままにするかを指定します。 デフォルトでは true に設定されています。 可能であれば、数値以外の値を float 型に変換します。params
: パラメータは、動的値を SQL クエリに渡すための安全な方法を提供します。 params パラメータを使用して、辞書、タプル、またはリストを渡すことができます。 データベースに応じて、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 2000-02-23
2 Peter Griffen 2001-04-15
3 Meg Aniston 2001-09-20
Date type of dateOfBirth: datetime64[ns]
データベースに接続した後、データベースからすべてのレコードを返すクエリを実行します。 Student
テーブルを作成し、DataFrame に保存します。 df
。 「ロール番号」列は、 index_col
パラメータ、および「dateOfBirth」データ型は「datetime64[ns]」です。 parse_dates
。 使用できます read_sql()
データを取得するだけでなく、挿入、削除、更新などの他の操作も実行できます。 read_sql()
ジェネリック関数です。
DB からの特定のテーブルまたはビューのロード
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 2000-02-23
1 2 Peter Griffen 2001-04-15
2 3 Meg Aniston 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 2000-02-23
0 2 Peter Griffen 2001-04-15
0 3 Meg Aniston 2001-09-20
覚えておいてください chunksize
テーブルにレコードが 1 つしかないため、here is 3 を使用しています。
Pandas の SQL 構文を使用して DB に直接クエリを実行する
データベースから洞察を抽出することは、データ アナリストや科学者にとって重要な部分です。 そのために、 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
Pandas を使用した SQL ファイルの作成
データの分析中に、いくつかのエントリを変更する必要があるか、データを含む新しいテーブルまたはビューが必要であることが判明したとします。 新しいレコードを更新または挿入するには、次の方法があります。 read_sql()
そしてクエリを書きます。 ただし、その方法は時間がかかる可能性があります。 Panda は、と呼ばれる優れたメソッドを提供します。 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
: このパラメータのデフォルト値は「fail」です。 このパラメータを使用すると、テーブルがすでに存在する場合に実行するアクションを決定できます。 オプションには、「失敗」、「置換」、および「追加」が含まれます。index
: インデックスパラメータはブール値を受け入れます。 デフォルトでは、これは True に設定されており、DataFrame のインデックスが SQL テーブルに書き込まれることを意味します。index_label
: このオプションのパラメータを使用すると、インデックス列の列ラベルを指定できます。 デフォルトでは、インデックスはテーブルに書き込まれますが、このパラメータを使用して特定の名前を指定できます。chunksize
: SQL データベースに一度に書き込まれる行数。dtype
: このパラメータは、列名としてキー、データ型として値を含むディクショナリを受け入れます。method
: Method パラメーターを使用すると、SQL にデータを挿入するために使用されるメソッドを指定できます。 デフォルトでは [なし] に設定されており、パンダはデータベースに基づいて最も効率的な方法を見つけます。 メソッドパラメータには主に XNUMX つのオプションがあります。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()
Customer という名前の新しいテーブルがデータベースに作成され、「Name」と「Age」という XNUMX つのフィールドが含まれます。
データベースのスナップショット:
Pandas データフレームを使用した既存のテーブルの更新
データベース内のデータの更新は、特に大規模なデータを扱う場合には複雑なタスクです。 ただし、 to_sql()
Pandas の関数を使用すると、このタスクがはるかに簡単になります。 データベース内の既存のテーブルを更新するには、 to_sql()
関数は、 if_exists
パラメータを「置換」に設定します。 これにより、既存のテーブルが新しいデータで上書きされます。
以下はその例です to_sql()
以前に作成されたものを更新します Customer
テーブル。 仮に、 Customer
このテーブルでは、Paul という名前の顧客の年齢を 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()
データベースでは、ポールの年齢が更新されます。
まとめ
結論として、Pandas と SQL はどちらも、SQL データベースへのデータの読み取りや書き込みなどのデータ分析タスクのための強力なツールです。 Pandas は、SQL データベースに接続し、データベースから Pandas データフレームにデータを読み取り、データフレーム データをデータベースに書き戻す簡単な方法を提供します。
Pandas ライブラリを使用すると、データフレーム内のデータを簡単に操作できます。一方、SQL は、データベース内のデータをクエリするための強力な言語を提供します。 Pandas と SQL の両方を使用してデータの読み取りと書き込みを行うと、特にデータが非常に大きい場合に、データ分析タスクの時間と労力を節約できます。 全体として、SQL と Pandas を併用すると、データ アナリストや科学者がワークフローを合理化するのに役立ちます。
- SEO を活用したコンテンツと PR 配信。 今日増幅されます。
- プラトアイストリーム。 Web3 データ インテリジェンス。 知識増幅。 こちらからアクセスしてください。
- 未来を鋳造する w エイドリエン・アシュリー。 こちらからアクセスしてください。
- PREIPO® を使用して PRE-IPO 企業の株式を売買します。 こちらからアクセスしてください。
- 情報源: https://stackabuse.com/reading-and-writing-sql-files-in-pandas/
- :は
- :not
- :どこ
- 1
- 10
- 12
- 20
- 8
- 9
- a
- 受け入れる
- Action
- 実際に
- NEW
- 住所
- 利点
- 年齢
- 前
- すべて
- 許可
- ことができます
- 既に
- また
- 標準装備されたものが、
- 金額
- an
- 分析
- アナリスト
- アナリスト
- 分析します
- 分析する
- および
- 別の
- どれか
- API
- です
- 引数
- 記事
- AS
- At
- バック
- ベース
- bash
- BE
- なぜなら
- 始まる
- 以下
- 国境
- 両言語で
- ビルド
- 焙煎が極度に未発達や過発達のコーヒーにて、クロロゲン酸の味わいへの影響は強くなり、金属を思わせる味わいと乾いたマウスフィールを感じさせます。
- by
- コール
- 呼ばれます
- 缶
- 場合
- クローザー
- コード
- コラム
- コラム
- 複雑な
- 結論
- お問合せ
- 接続する
- 接続
- コネクト
- コントラスト
- 変換
- 対応する
- 作ります
- 作成した
- 作成
- 重大な
- カスタム
- 顧客
- カスタム化
- データ
- データ分析
- データセット
- データベース
- データベースを追加しました
- 日付
- 取引
- 決めます
- デフォルト
- によっては
- 設計
- 詳細
- 細部
- 難しい
- 直接に
- 発見
- 話し合います
- do
- 原因
- ダイナミック
- 各
- 容易
- 簡単に
- 効率的な
- 効率良く
- 努力
- どちら
- エンジン
- 強化
- 全体
- 特に
- 設立
- 例
- 実行します
- 実行
- 既存の
- 存在
- 説明
- 探る
- エキス
- フェイル
- 少数の
- フィールズ
- File
- もう完成させ、ワークスペースに掲示しましたか?
- 名
- 柔軟性
- フロート
- floating
- フォーカス
- フォロー中
- 次
- 形式でアーカイブしたプロジェクトを保存します.
- Foundation
- FRAME
- から
- function
- 機能
- 利得
- 取得する
- Gitの
- 与えられた
- 素晴らしい
- ガイド
- ハンド
- 実践的な
- 持ってる
- 助けます
- こちら
- ホバー
- 認定条件
- How To
- しかしながら
- HTTPS
- i
- if
- 重要
- in
- include
- 含まれました
- index
- 洞察
- install
- インストール
- 相互作用
- 内部で
- に
- 概要
- 問題
- IT
- キープ
- キー
- キー
- ラベル
- 言語
- ESL, ビジネスESL <br> 中国語/フランス語、その他
- 大
- 学んだ
- 学習
- 左
- う
- 活用します
- 活用
- LG
- ライブラリ
- 図書館
- ような
- リスト
- ll
- 負荷
- 見て
- メイン
- make
- 作る
- 管理します
- マネージャー
- 義務的な
- 操作
- マーク
- 意味
- 手段
- 言及した
- 方法
- マインド
- 修正されました
- 修正する
- 他には?
- 最も
- ずっと
- の試合に
- しなければなりません
- my
- 名
- 名前付き
- 名
- 必要
- 必要
- 新作
- 今
- 数
- 番号
- オブジェクト
- 入手する
- of
- 頻繁に
- on
- ONE
- の
- 業務執行統括
- オプション
- or
- その他
- さもないと
- 私たちの
- でる
- 出力
- 全体
- パッケージ
- パンダ
- パラメーター
- パラメータ
- 部
- 特に
- パス
- 通過
- path
- Paul Cairns
- 実行する
- パフォーマンス
- Peter Bauman
- プラトン
- プラトンデータインテリジェンス
- プラトデータ
- 人気
- 可能
- 電力
- 強力な
- 実用的
- 前に
- プログラミング
- 保護された
- 提供します
- 提供
- は、大阪で
- Python
- クエリ
- 読む
- リーディング
- 記録
- 記録
- replace
- の提出が必要です
- REST
- 結果
- 結果として
- 結果
- return
- 収益
- リング
- ロール
- 行
- ラン
- ランニング
- s
- 同じ
- Save
- 科学者たち
- セクション
- 安全に
- 選択
- セッションに
- Shadow
- シート
- すべき
- 示す
- 状況
- より小さい
- Snapshot
- So
- 特定の
- 特に
- スタックアバス
- 規格
- 開始
- 文
- Force Stop
- ストレージ利用料
- 店舗
- 保存され
- 店舗
- 流線
- 文字列
- 強い
- 構造化された
- 学生
- そのような
- サポート
- 構文
- テーブル
- 取る
- 撮影
- 取り
- 仕事
- タスク
- それ
- アプリ環境に合わせて
- それら
- その後
- そこ。
- ボーマン
- もの
- この
- 時間
- 〜へ
- 一緒に
- 豊富なツール群
- 遷移
- true
- 2
- type
- アップデイト
- 更新しました
- 更新版
- us
- つかいます
- 中古
- 貴重な
- 値
- 価値観
- Ve
- 非常に
- 詳しく見る
- ビュー
- 欲しいです
- ました
- 仕方..
- we
- いつ
- かどうか
- which
- 意志
- 無し
- 仕事
- ワークフロー
- ワーキング
- でしょう
- 書きます
- 書き込み
- 書かれた
- 年
- ゼファーネット