今回は“スクレイピング・テキストマイニング”について理解を深めます。
データ分析をする中で一番、感覚的かつ身近なもの(Twitter等)で分析が出来る手法がテキストマイニングです。
出来そうなことは多そうだけどどうやるの?
と気になる人も多いと思うので下記に整理します。
尚、テキストマイニング(自然言語処理)の統計的な成り立ちや仕組については下記でまとめております。
今回の論点整理

”スクレイピング・テキストマイニング“の使いドコ
今回はネット上のテキストを読み込んで(スクレイピング)その情報を元に整理・分析(テキストマイニング)します。

上記のように実際のHP等、WEB上のデータなどの情報を抽出しながら整理することが出来ると分析の幅が広がります。
※ただ、ウェブ上のデータを抽出するスクレイピングは機密情報を引き抜いたりするなど違法行為にも繋がりやすいので取り扱いには注意が必要です。
具体的な想定場面
今回の想定は以下のような場合です。
想定:社内のWEBマーケターで上層部から「最近の大学の動向を報告しろ」と言われた
状況:お金をかけずにとある業種(大学)の最近の動向をWEB上から分析したい
意図:テキストマイニングなどを用いて時短でそれっぽい分析をしたい
このような時、「スクレイピング・テキストマイニング」という考え方が使えるのだと思います。
以下はこの知識を使う際に思い出すべき点を、後で振り返れるようにポイントを絞って備忘録としてまとめます。
今回の抑えドコ
そこで、今回は上記を実現する手順について下記に備忘録的にまとめたいと思います。
- 今回の焦点
▷お金をかけずにWEB上の情報を分析したい - ポイント
▷分析の目的・考察観点
▷スクレイピング実施
▷テキストマイニング実施
”スクレイピング・テキストマイニング”理解のポイント

ポイント① 分析の目的・考察観点
まず、テキストマイニングと言われる手法がどのようにビジネスシーンでは利活用されているかという視点で考えると主に下記の3点かと思います。
- 個人(潜在顧客)の声の抽出と傾向分析
▷アンケートやTwitter等のSNSを介した声の抽出 - 業界(企業/組織)の特徴の可視化
▷ウェブ上のHP等を介した各企業の特徴比較など - 過去からのデータを元にした将来予測
▷新聞データなどからの業界動向予測など
まずどこに注目して分析を進めるかという点が最も重要になります。
上記の目的に応じて手段(扱う手法)が変わるのでまずはここからかと思います。今回は2つ目を焦点にあてた場合です。
ポイント②スクレイピングの実施
今回のケースで考えると扱う手法は以下の2つです。それぞれの特徴も含め以下の通りです。
- スクレイピング
▷ネット上からデータ抽出 - テキストマイニング
▷抽出データを傾向分析
後者はかなり広義ですが、この中の手法の一つを行うとそれっぽくまとまります。これは後述します。
一方で前者のスクレイピングに関しては以下のような式で抽出が可能です。
import pandas as pd
from bs4 import BeautifulSoup
import requests
#分析対象は大学HP #url = 'https://ja.wikipedia.org/wiki/%E6%97%A9%E7%A8%B2%E7%94%B0%E5%A4%A7%E5%AD%A6'
url = 'https://www.waseda.jp/top/about/vision'
#データ抽出
response = requests.get(url)
response.encoding = response.apparent_encoding
soup = BeautifulSoup(response.text, 'html.parser')
title = []
for i in soup.find_all('p'):
## 改行コードを削除
title.append(i.getText()[6:].replace('\n', ''))詳しくはbeautiful soupで検索すれば詳しい解説はもっとでてくると思います。
ポイント③テキストマイニングの実施
テキストマイニングは端的にえば
です。これには色々手法はありますが、ザックリ言うと以下のようなものがあります。
- 文章を単語レベルに整理する分析
▷形態素解析等で品詞・単語分解 - 単語の傾向を把握し可視化する分析
▷①を元にワードクラウド等のビジュアル化 - 複数の単語・文章の関係性分析
▷word2vec, doc2vec等で文章の関係性分析
ザックリ言うと上記の組み合わせだと思います。ポイントは文字の情報を頻出語句等の特徴から定量化してそれを元に機械学習させるという流れです。
今回は①②を扱って行います。①はjanomeを利用し、②はワードクラウドを利用します。
#使用ライブラリ
from janome.tokenizer import Tokenizer
from wordcloud import WordCloud
## ストップワードは一旦なし
stop_words = ['']
## タイトルの名詞のみをスペース区切りのテキストへ変換
t = Tokenizer()
words = []
for i in title:
tokens = t.tokenize(i)
for token in tokens:
## 品詞を抽出
pos = token.part_of_speech.split(',')[0]
## 品詞から名詞だけ抽出
if pos in ['名詞']:
## 必要ない単語を省く
if token.base_form not in ignore_words:
words.append(token.base_form)
text = ' '.join(words)
#日本語フォントの指定
fpath = "C:/Windows/Fonts/YuGothM.ttc"
#ワードクラウドの各種設定指定
wordcloud = WordCloud(background_color="white",#背景を白に
stopwords = stop_words,
font_path=fpath,width = 800,height=600).generate(text)
#pngで保存する
wordcloud.to_file("./waseda.png")上記を行うとこのような形でアウトプットします。

形態素分析の箇所がどのような仕組みで動いているのかは下記にまとめております。

自作プログラムへ拡張する

ここからは自分で拡張する方法に関しても触れておきます。
「もっと本当はこういった拡張をしたいんだけどな…」
という想いが芽生えた場合は、上記の構成を理解した上で、自分なりにアレンジする必要があります。
私のようなプログラミング初心者の人は下記3点を検討すると拡張が簡単にできます。
参考.Pythonの参考書を活用する
Pythonをかじり始めて、複数の書籍に目を通しはじめていますが、
色々とみている感じ下記の参考書などが扱いやすかったです。
冒頭あげたPythonの基本的な構成や仕組の他、とても実践的な内容が記載されています。
まとめ
上記を活用する際に、理解しておくべきポイントは以下3点です。
- ポイント①:分析の目的・考察観点
▷まずはビジネス課題から目的を見定めて着手をする - ポイント②:スクレイピングの実施
▷WEB上のデータを抽出する手法 - ポイント③:テキストマイニングの実施
▷文字系の分析、色々手法はあるがどれも定量化して分析する手法
上記、具体例をまとめてみましたが、この領域は最も手軽かつ、最も幅広く色々できると思います。
ただ、目的を考えてから着手しないと何となく面白いものができた(出来そう)で終わりやすい領域でもある気がします。
そのため、まずは上記コードで試してみつつ、参考書や動画・スクールを使いながら自分の好きな形に拡張していきましょう!
思い立ったが吉日です、モチベーションが高いうちに実践をして知識を深めていきましょう!(‘ω’)ノ
ご精読頂きありがとうございました。
m(_ _)m






コメント