サーバレス練習帳

着眼大局着手小局

【python】Google Chromeの閲覧履歴を見よ!

使うテーブルはurls(親テーブル)とvisits(子テーブル)です。それぞれ定義は次の通り。

('table', 'urls', 'urls', 4, 'CREATE TABLE urls(id INTEGER PRIMARY KEY AUTOINCREMENT,url LONGVARCHAR,title LONGVARCHAR,visit_count INTEGER DEFAULT 0 NOT NULL,typed_count INTEGER DEFAULT 0 NOT NULL,last_visit_time INTEGER NOT NULL,hidden INTEGER DEFAULT 0 NOT NULL)')
('table', 'visits', 'visits', 6, 'CREATE TABLE visits(id INTEGER PRIMARY KEY,url INTEGER NOT NULL,visit_time INTEGER NOT NULL,from_visit INTEGER,transition INTEGER DEFAULT 0 NOT NULL,segment_id INTEGER,visit_duration INTEGER DEFAULT 0 NOT NULL,incremented_omnibox_typed_score BOOLEAN DEFAULT FALSE NOT NULL)')

@@@ 以降、検討過程 @@@


◆はじめに
Chromeの閲覧履歴って、Historyというsqliteファイルに格納させているそうです。このファイルです。

'C:\Users\(ユーザ名)\AppData\Local\Google\Chrome\User Data\Default\History'

まずは解析したいので、このファイルをコピーしてきて、pythonで解析してみましょう!

◆テーブル一覧の取得

##### IMPORT
import sqlite3
from contextlib import closing

##### CONST
db = '.\History'

##### IMPLEMENTATION
with closing(sqlite3.connect(db)) as conn:
    c = conn.cursor()
    select_sql = "select * from sqlite_master where type='table'"
    for row in c.execute(select_sql):
        print(row)

こんなテーブルがあるみたいでした。
meta, urls, sqlite_sequence, visits, visit_source, keyword_search_terms, downloads, downloads_url_chains, downloads_slices,segments, segment_usage, typed_url_sync_metadata


◆urlsを見てみよう!
こういう定義でした。
>||('table', 'urls', 'urls', 4, 'CREATE TABLE urls(id INTEGER PRIMARY KEY AUTOINCREMENT,url LONGVARCHAR,title LONGVARCHAR,visit_count INTEGER DEFAULT 0 NOT NULL,typed_count INTEGER DEFAULT 0 NOT NULL,last_visit_time INTEGER NOT NULL,hidden INTEGER DEFAULT 0 NOT NULL)')|

【python】Pandasの練習!~CSV読込・行追加・グルーピング・抽出・ソート

◆まずは、初期設定

### IMPORT
import pandas as pd
import glob

### Pandas設定
pd.set_option('display.max_rows', 50)

### Dataframeの作成
df = pd.DataFrame(columns=['ユーザー名','コメント','時間'])

CSV読み込み
次のようなCSVを読み込ませてみます。

"鈴木","こんばんわ","1800"
"佐藤","おはよう","1000"
"高橋","ありがとう","1100"
"佐藤","どういたしまして","1200"
"高橋","ごきげんよう","1030"
### CSV取り込み
DIR = './'
FILE = 'chat.csv'
path = DIR+FILE #ここだけ改造
pc_log_list = glob.glob(path)
df = pd.concat([pd.read_csv(path, header=None,names=['ユーザー名','コメント','時間'])])
df

無事、取り込めましたね!
f:id:urbanplanner:20190505160334p:plain

◆行追加
こちらのサイトを参考に行追加してみます!
qiita.com

### 行追加
tmp_se = pd.Series( ['鈴木','こんにちは',1015], index=df.columns )#数字にしたいものはクォーテーションで囲まない!
df = df.append( tmp_se, ignore_index=True )
df

f:id:urbanplanner:20190505160531p:plain

◆グルーピング
for文をまわせるようになります。

### グルーピング
grouped = df.groupby('ユーザー名')
for group in grouped.groups:
    print(group)

f:id:urbanplanner:20190505160647p:plain

◆抽出

### 抽出
# 例えば鈴木もしくは佐藤だけを抽出
dfExtract = df[(df['ユーザー名'] == '鈴木')|(df['ユーザー名'] == '佐藤')]
dfExtract

f:id:urbanplanner:20190505160822p:plain
無事、抽出できました。

◆ソート

### ソート
dfExtract = dfExtract.sort_values(by=['時間'] , ascending=True)
dfExtract

時間の昇順でソーティングできました!

f:id:urbanplanner:20190505161046p:plain

【ML】時系列データ

◆まずはCRF
系列ラベリングやってみよう。

理論よりも、まずはプログラムから触ってみよう。

qiita.com

qiita.com

一つ目の記事の図表が分かりやすい。

やることは、コレです!↓
https://camo.qiitausercontent.com/e888950fdecf46f51eabc920699b2ff5338558ef/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f37373037392f63373863623730612d303664302d626331382d396338312d6537303466626337373932612e706e67

枠の中が素性というやつですね。

https://nomoto-eriko.hatenablog.com/entry/2018/05/28/202335

◆次は時系列クラスタリング
techblog.nhn-techorus.com

【idea】属人化/部分最適

属人化した業務はAIで解決する

https://mathforbiz.sms-datatech.co.jp/2017/09/01/blogzokuzin/

 

属人化エクセルを無くす

http://www.ctcs.co.jp/casestudy/jmc/files/ctcs_case07.pdf

 

企業規模の自動化

https://www.ibm.com/think/jp-ja/business/ibm-cea/