スポンサーリンク

用途

SQLでのデータ抽出は慣れてるけど、Pythonでのデータ抽出方法がわからない。(データアナリスト職の方)

逆にPythonは得意だけど、SQLは触ったことない。(エンジニア職でデータ分析やってみたい方)

といった境目を繋げるような形になれば幸いです。

※適宜思いついたところで不定期更新していきます。

※SQLはbigqyeryでのコードとなります。Pythonはpandasなどを利用します。

データ表示

全データを表示する
SQL
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
-- テーブル内容を全て表示
SELECT
*
FROM
dataset.table
-- テーブル内容を全て表示 SELECT * FROM dataset.table
-- テーブル内容を全て表示
SELECT
  *
FROM
  dataset.table
Python
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
## dfの内容を全て表示
df
## dfの内容を全て表示 df
## dfの内容を全て表示
df
部分的なデータを条件指定して表示する
SQL
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
-- WHERE句で条件指定して項目(nameとpriceの2項目)表示する
SELECT
name
, price
FROM
dataset.table
WHERE
target_date = '2021-01-01'  -- target_dateに'2021-01-01'が入っているもののみを抽出
-- WHERE句で条件指定して項目(nameとpriceの2項目)表示する SELECT name , price FROM dataset.table WHERE target_date = '2021-01-01'  -- target_dateに'2021-01-01'が入っているもののみを抽出
-- WHERE句で条件指定して項目(nameとpriceの2項目)表示する
SELECT
  name
  , price
FROM
  dataset.table
WHERE
  target_date = '2021-01-01'  -- target_dateに'2021-01-01'が入っているもののみを抽出
Python
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
## df内で、target_dateに'2021-01-01'が入っているnameとpriceを抽出する
df.query('target_date == ["2021-01-01"]')[['name', 'price']]
## df内で、target_dateに'2021-01-01'が入っているnameとpriceを抽出する df.query('target_date == ["2021-01-01"]')[['name', 'price']]
## df内で、target_dateに'2021-01-01'が入っているnameとpriceを抽出する
df.query('target_date == ["2021-01-01"]')[['name', 'price']]
重複したデータを除外して表示
SQL
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
SELECT
DISTINCT name
FROM
dataset.table
SELECT DISTINCT name FROM dataset.table
SELECT
  DISTINCT name
FROM
  dataset.table
Python
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
print(df['name'].unique())
print(df['name'].unique())
print(df['name'].unique())
データを昇順(または降順)に並び替える
SQL
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# ORDER BYに指定した項目ごとにデータを昇順にして表示
SELECT
*
FROM
dataset.table
ORDER BY
age
# ORDER BYに指定した項目ごとにデータを昇順にして表示 SELECT * FROM dataset.table ORDER BY age
# ORDER BYに指定した項目ごとにデータを昇順にして表示
SELECT
  *
FROM
  dataset.table
ORDER BY
  age
Python
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
import pandas as pd
df.sort_values('age', assending=True)
import pandas as pd df.sort_values('age', assending=True)
import pandas as pd

df.sort_values('age', assending=True)

データ削除

全データを削除する
SQL
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
-- 指定したテーブルを削除する
DROP TABLE
dataset.table
-- 指定したテーブルを削除する DROP TABLE dataset.table
-- 指定したテーブルを削除する
DROP TABLE
  dataset.table
Python
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
## 指定したデータを削除する
df.drop()
## 指定したデータを削除する df.drop()
## 指定したデータを削除する
df.drop()

データ集計

データ件数を集計
SQL
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
-- 指定したテーブルの全レコード件数をカウントする
SELECT
COUNT(*) AS COUNT
FROM
dataset.table
-- 指定したテーブルの全レコード件数をカウントする SELECT COUNT(*) AS COUNT FROM dataset.table
-- 指定したテーブルの全レコード件数をカウントする
SELECT
  COUNT(*) AS COUNT
FROM
  dataset.table
Python
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
import pandas as pd
## 指定したデータの件数をカウントする
df.value_counts()
import pandas as pd ## 指定したデータの件数をカウントする df.value_counts()
import pandas as pd

## 指定したデータの件数をカウントする
df.value_counts()
統計量を出す
SQL
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
-- 単発でできる処理がないので、統計量をそれぞれの集計関数で表示する
SELECT
COUNT(column) -- 件数
, AVG(column) -- 平均
, STDDEV(column) -- 標準偏差
, MIN(column) -- 最小値
, MAX(column) -- 最大値
FROM
dataset.table
-- 単発でできる処理がないので、統計量をそれぞれの集計関数で表示する SELECT COUNT(column) -- 件数 , AVG(column) -- 平均 , STDDEV(column) -- 標準偏差 , MIN(column) -- 最小値 , MAX(column) -- 最大値 FROM dataset.table
-- 単発でできる処理がないので、統計量をそれぞれの集計関数で表示する
SELECT
  COUNT(column) -- 件数
  , AVG(column) -- 平均
  , STDDEV(column) -- 標準偏差
  , MIN(column) -- 最小値
  , MAX(column) -- 最大値
FROM
  dataset.table

SQLでの四分位数の算出はやや複雑なので、こちらを参照

Python
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
## 指定したデータの統計量(件数、平均、標準偏差、四分位数)を表示する
df.describe()
> df
count 8.000000
mean 230031.625000
std 76197.198242
min 129880.000000
25% 174588.250000
50% 223474.500000
75% 264029.500000
max 359905.000000
## 指定したデータの統計量(件数、平均、標準偏差、四分位数)を表示する df.describe() > df count 8.000000 mean 230031.625000 std 76197.198242 min 129880.000000 25% 174588.250000 50% 223474.500000 75% 264029.500000 max 359905.000000
## 指定したデータの統計量(件数、平均、標準偏差、四分位数)を表示する
df.describe()

>	df
count	8.000000
mean	230031.625000
std	76197.198242
min	129880.000000
25%	174588.250000
50%	223474.500000
75%	264029.500000
max	359905.000000
複数データの連結
SQL
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
-- 複数のテーブルをidで連結して、連結したtableを項目表示する
SELECT
*
FROM
dataset.table AS t1
INNER JOIN
dataset.table AS t2
ON
t1.id = t2.id
-- 複数のテーブルをidで連結して、連結したtableを項目表示する SELECT * FROM dataset.table AS t1 INNER JOIN dataset.table AS t2 ON t1.id = t2.id
-- 複数のテーブルをidで連結して、連結したtableを項目表示する
SELECT
  *
FROM
  dataset.table AS t1
INNER JOIN
  dataset.table AS t2
ON
  t1.id = t2.id
Python
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
import pandas as pd
-- 複数のデータフレームをidで連結する
df = pd.merge(df1, df2, on='id', how='inner')
import pandas as pd -- 複数のデータフレームをidで連結する df = pd.merge(df1, df2, on='id', how='inner')
import pandas as pd

-- 複数のデータフレームをidで連結する
df = pd.merge(df1, df2, on='id', how='inner')
おすすめの記事