導入
Facebookがカーソル位置の情報を集めていると、いつだか耳にしました。調べてみたら2013年には話題になっていたようです。1
というわけでPythonでカーソル位置のデータを取得しましょう。
環境
OSはwindows10、Pythonは3.5.2を利用しました。
利用モジュール
カーソル位置を取得する方法はいくつかあるようですが、インストールの容易さなどからPyAutoGUIを選択しました。
キー操作やクリック操作なども実装できるようでワクワクしますが、今回は触れません。
pipを使ってインストールしましょう。
pip install pyautogui
OSがmacだとpyobjc-coreとpyobjcも同時にインストールする必要があるそうです。
カーソル位置取得方法
pyautogui.position
関数で、カーソルが位置するx座標とy座標を取得します。
>>> pyautogui.position()
(255, 939)
(0, 0)が画面の一番左上、(画面サイズ横, 画面サイズ縦)が画面の一番右下を表します。
実行してみる
今回は0.1秒おきに1分間データを取得します。
あとで使いたいので、pyautogui.size
でウインドウサイズも取得しておきます。
# -*- coding: utf-8 -*-
import pyautogui
import time
from datetime import datetime
def get_now():
now = datetime.now().strftime("%Y/%m/%d %H:%M:%S")
return now
def get_cursor_loop(loop_second):
"""
0.1秒ずつ、指定秒数分カーソル位置を取得
args
----
loop_second:int
データを取得する秒数
"""
times = []
positions = []
for _ in range(0, loop_second*10):
# 時刻とカーソル位置の取得
now = get_now()
x, y = pyautogui.position()
# リストに情報を追加
times.append(now)
positions.append([x, y])
# sleep
time.sleep(0.1)
return times, positions
def get_window_size():
window_size = pyautogui.size()
return window_size
if __name__ == '__main__':
times, positions = get_cursor_loop(60)
window_size = get_window_size()
データは取れたのでプロットしてみましょう。
今回はパッと見たかったのでseaborn.jointplot
を使っています。
import numpy as np
import pandas as pd
import seaborn as sns
data = np.array(positions)
df = pd.DataFrame(data, columns=['x', 'y'])
# (0,0)座標が画面の左上なのでy軸のみ順番を反転
sns.jointplot(data=df, x='x', y='y', xlim=(0, window_size[0]), ylim=(window_size[1], 0))
左下の方に固まっていますね。この記事を書きながらデータ取ったので、エディタがある左側に寄ってる気がします。
おわりに
簡単にデータを集めることができました。データの使い道はいろいろありそうですが、例えばサンプルデータを作りたいときに使えるかもしれませんね。(分布もへったくれもないですが)