Lecture: IPアドレスを集計, python, r ver. 2

I.IPアドレスについて

 

MoodleはIPアドレスを取得します。これは特別のことではありません。通常、インターネット上の各サイトは閲覧者のIPアドレスなどの情報を取得しています。

IPアドレスからどのようなことがわかるのか、ログのIPアドレスをどのように集計するかを示します。

また、プライバシー保護の観点からどのような問題があるのかについて考えたいと思います。

IPアドレスは個人情報、例えば、氏名や住所を含まないので、公開されているものです。

IPアドレスに住所情報がありますが、スマートフォンの場合は実際のアクセス地点とは全く異なる場合がほとんどですし、コンピュータで自宅からアクセスしている場合でもかなり離れた場所を指示します。実際、私のコンピュータの場合、いくつかのIPアドレスのトラックサイトにアクセスして得られる住所は、鈴鹿市、四日市、桑名市の3種類あります。

表示される情報も様々です。例えば、次のサイトにアクセスするとブラウザや使用コンピュータのOSスクリーンの解像度まで表示されます。自分だけではなく、任意のIPアドレスの情報を検索することができます。

 

https://www.tracemyip.org/

 

インターネットにアクセスするにはIPアドレス情報を示す仕様になっています。いわば、IPアドレスという身分証をみせながらネットをブラウズしているということです。

しかし、IPアドレスは、身分証と異なり固定したものではなく、Wifiによって勝手に変更されたり、自分で変更したりすることができますし、閲覧サイト側から隠すこともできます。

授業でMoodleを使っている場合は、実際の氏名とIPアドレスが紐づくので、取り扱いに注意が必要な個人情報になります。

IPアドレスにかかわる個人情報の取り扱いやセキュリティ問題については別に書く予定です。

以下でIPアドレスの集計方法を紹介しますが、教育上有効な情報であるかどうかについては、いまのところ判断を保留します。

 

II.アクセス都市一覧を作成

 

1.RでIPアドレスのリストを取得

 

MoodleのコースのAdministration>Reports>Logsで、アクセス・ログをCSV形式でダウンロードします。

Rで読み込んで、登録者のIPアドレスのリストを取り出し、CSVで保存します。

Pythonでも簡単にできます。当初すべてRで集計する予定でしたが、途中でIPアドレス情報の取得はPythonを使うことにしたので、はじめの集計はRになっています。

 

Rのスクリプトは次です。

 

library(tidyverse)
df0 <- read_csv("logsI20200613-0912.csv")
df0_ip <- df0 %>% 
  select("IP address") %>% 
  distinct()  # 重複を除く
nrow(distinct(df0_ip)) # 件数を集計

 

ログの行数は12,206です。同じIPアドレスは一つと数えると254です。登録者は48人なので、複数のIPアドレスでアクセスしていることがわかります。

 

2.PythonでIPアドレス情報を取得

 

ライブラリipinfoを使用しました。PythonでもRでもいくつかライブラリがありますので、API/データ・ファイルを無料で使用できて登録の簡単なものを選びます。

 

https://github.com/ipinfo/python

 

事前にipinfoに登録して、アクセス・トークンを取得しておく必要があります。氏名とメールアドレスだけで登録できます。

次は上の文書にあるサンプルのIPアドレスの情報を取得するスクリプトです。

 

import ipinfo, pprint
access_token = 'YOURTOKEN'
handler = ipinfo.getHandler(access_token)
ip_address = '216.239.36.21'
details = handler.getDetails(ip_address)
details.all

 

次の情報が表示されます。

 

{'ip': '216.239.36.21',
'hostname': 'any-in-2415.1e100.net',
'city': 'New York City',
'region': 'New York',
'country': 'US',
'loc': '40.7143,-74.0060',
'org': 'AS15169 Google LLC',
'postal': '10004',
'timezone': 'America/New_York',
'country_name': 'United States',
'latitude': '40.7143',
'longitude': '-74.0060'}
 

 

3.Pythonでcity一覧を作成

 

2にリンクした解説にあるipinfoのBatch Operationsで254件すべてのロケーションを取得、集計しようとしましたが、Batch Operationsは上限100件の制限があり、できませんでした。

100件のみ実行し、集計しました。下に示したIPアドレスはサンプルです。

 

import ipinfo, pprint
access_token = 'YOURTOKEN'
handler = ipinfo.getHandler(access_token)
# Rで取得したIPアドレスを貼ります。読み込みではないので手作業になります。
# 作成されるデータ一覧の形式はdictionaryです。
dict0 = handler.getBatchDetails([
    '111.111.111.111',
    '222.222.222.222',
    '100.100.100.100/country',
    ])
# dictionaryをデータフレームに変換します。
df0 = pd.DataFrame(dict0)
df1 = df0.transpose()
# city列の文字列の出現数をカウントします。
df1.city.str.split(expand=True).stack().value_counts()

 

で、結果は次のようになりました。

スマートフォンのとコンピュータをわけないとほとんど役立ちそうにないデータです。コンピュータだと都道府県は割と適切にでると思います。まあ、それも100%とはいきません。

スマートフォンの場合、Wifiか基地局か購入地など、何を根拠に位置を判定しているのか知りませんが、全く信頼できません。

 

Nagoya             26
Tokyo              19
Osaka              19
Yokohama           12
Yokkaichi           7
Tsu                 3
Ashburn             2
Mito                1
Sapporo             1
Hashima             1
Tsukuba             1
Kumamoto            1
Ichikawa-minami     1
JP                  1
Kawasaki            1
Takamatsu           1
Ebino               1
Utsunomiya          1
Toyama              1

 

IPアドレス情報を授業に役立てるとすれば、例えば、大学のコンピュータ教室の授業で、学外からMOODLEにアクセスしてか判断できるとか。ただし、IPアドレスはコンピュータそれぞれに固定されいるわけではないので、教室内のコンピュータか、学内の他のコンピュータかはわかりません。

スマートフォンとコンピュータの区別、OSの区別がわかるなら、それぞれに応じて授業の内容を工夫するとか、サポート体制を整えるとかぐらいでしょうか。

About shibatau

I was born and grown up in Kyoto. I studied western philosophy at the University and specialized in analytic philosophy, especially Ludwig Wittgenstein at the postgraduate school. I'm interested in new technology, especially machine learning and have been learning R language for two years and began to learn Python last summer. Listening toParamore, Sia, Amazarashi and MIyuki Nakajima. Favorite movies I've recently seen: "FREEHELD". Favorite actors and actresses: Anthony Hopkins, Denzel Washington, Ellen Page, Meryl Streep, Mia Wasikowska and Robert DeNiro. Favorite books: Fyodor Mikhailovich Dostoyevsky, "The Karamazov Brothers", Shinran, "Lamentations of Divergences". Favorite phrase: Salvation by Faith. Twitter: @shibatau

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.