python_analytics

主にpythonやライブラリーを使ったデータ解析、機械学習、統計学などについて書いていきます

SQL の基本的な操作について

SQLの基本的な操作について

--データベース作成--

sqlite3 データベース名

sqlite3 myfriend.sqlite3

②--CSV インポート方法--

.separator ,
.import sample22.csv page1

③--接続していたデータベースから切断--

.exit

④テーブル一覧表示

.tables  

スキーマの表示

.tables 
customer_id store_id firtst_name last_name email adress_id
54 1 TERESA ROGERS TERESA.ROGERS@sakilacustomer.org 58
72 2 THERESA WATSON THERESA.WATSON@sakilacustomer.org 76
75 2 TAMMY SANDERS TAMMY.SANDERS@sakilacustomer.org 79
92 2 TINA SIMMONS TINA.SIMMONS@sakilacustomer.org 96
108 1 TRACY COLE TRACY.COLE@sakilacustomer.org 112
110 2 TIFFANY JORDAN TIFFANY.JORDAN@sakilacustomer.org 114
122 1 THELMA MURRAY THELMA.MURRAY@sakilacustomer.org 126
203 1 TARA RYAN TARA.RYAN@sakilacustomer.org 207
206 1 TERRI VASQUEZ TERRI.VASQUEZ@sakilacustomer.org 210

フィルタ条件について 例:Tを含むFirest_nameのフィルタ

select * from customer where first_name    like 'T%';

重複のみを抽出する

select * from テーブル名
where 列名 in
(select 列名 from テーブル名group by 列名
having count(*) > 1)
order by 列名 desc;

一時的にテーブルを作成する。

WITH CTE1 AS (
    SELECT 列, 列 FROM テーブル
  ), CTE2 AS (
    SELECT ID, title FROM テーブル名
  )
SELECT * FROM CTE1
UNION ALL
SELECT * FROM CTE2;
WITH cte1 AS (SELECT * FROM テーブル名)
   , cte2 AS (SELECT * FROM テーブル名)
SELECt * FROM cte2;

重複なしで結合

select
page3.ID,
page3.title
from
day
inner join
page3
on page3.ID = day.ID;

条件式で値を追加する。

select
ID,count(*),
case 
 when count(*) <5 
 then "5以下"
 when count(*) >6 
 then "6以上"
 else "その他"
end as ranking
from
page1
group by ID
;

ユニークIDのカウント

select
ID, count(*)
from
page1
group by ID
having count(*)>5
order by count(*) desc
;

dbを接続する

conn = sqlite3.connect('myfriend')
cursor = conn.cursor()

pythonでsqlite3のテーブル一覧を表示させる。

pd.io.sql.read_sql_query('select * from {table}'.format(table='page3'), conn)

グループ化したものをカウントする

SELECT visit,month, count(visit) FROM (SELECT month,ID,COUNT(month) as visit FROM fb_log GROUP by ID) as a GROUP BY visit,month;

文字列分割でカラム追加

select ID,ページ タイトル,ページ,substr(時間帯, 1, 4) as 年,substr(時間帯, 5, 2) as 月,substr(時間帯, 7, 2) as 日,substr(時間帯, 9, 2) asfrom tokushu5_1;

含むページで勝てカテゴリ列追加でフラグ立て

select  *,
case 
when page like "%aa%" then 'aa' 
when page like "bb%" then 'bb' 
when page like "%cc%" then 'cc' 
when page like "%dd%" then 'dd' 
else 'Fail' end as category from "5_tokushu"

条件設定からフラグ立てるのも可能

select 閲覧開始数,
       case when 閲覧開始数 < 3 then "×"
            when 閲覧開始数 > 4 then "〇"
else 'Fail' end as Flag from page1;

■IN を使った記述 閲覧開始数が1or2の時のみ抽出

select title,閲覧開始数
from page1
where 閲覧開始数 in (1,2);

count(*)を追記すると総数をカウントできる。

■HAVING を使った記述
HAVINGはレコードの集合に対して条件指定を行うことができる。
閲覧開始数を1以下総数を抽出

select 閲覧開始数,count(*)
from page1
group by 閲覧開始数
having 閲覧開始数 <1;

日付ごとの合計値、最大値、カウント

select 日付,count(*),max(閲覧開始数),sum(閲覧開始数)
from page1
group by 日付
;

python 正規表現について

python 正規表現について

特殊シーケンス 説明 同義のパターン
\d 任意の数字 [0-9]
\D 任意の数字以外 [^0-9]
\s 任意の空白文字 [\t\n\r\f\v]
\S 任意の空白文字以外 [^\t\n\r\f\v]
\w 任意の英数字 [a-xA-Z0-9_]
\W 任意の英数字以外 [\a-xA-Z0-9_]
\A 文字列の先頭 ^
\Z 文字列の末尾 $
文字 説明 マッチする例
? 0回または1回 ab? a, ab
. 任意の一文字 a.c abc, acc, aac
^ 文字列の先頭 ^abc abcdef
$ 文字列の末尾 abc$ defabc
* 0回以上の繰り返し ab* a, ab, abb, abbb
+ 1回以上の繰り返し ab+ ab, abb, abbb
{n} n回の繰り返し a{2} aa
和集合(または) a|b | a, b
() グループ化 (abc)+ abc, abcabc

,,,python report[report['ランディング ページ'].str.contains('12')] ,,,

文字列を含む条件分岐

def func_cate(x):
    if  "test" in x:
        return "0"
    elif "test1" in x:
        return "1"
    elif test2" in x:
        return "2"
rename1['cate'] = rename1['ページ タイトル'].apply(func_cate)
rename1.tail(10)

https://support.google.com/analytics/answer/1034324?hl=ja

support.google.com