R言語でSalesForceに入門する~salesforcerの紹介~

f:id:watagusa:20210106234953p:plain


業務でSalesForceというツールを触らなければいけなくなったので入門した。

R言語を通して入門した方がわかりやすい部分もあるのかもしれないと思い、RでSalesForceを操作するパッケージ、「salesforcer」について調べたので紹介する。

 

そもそもSalesForceとは

f:id:watagusa:20210106235650p:plain

SalesForceとは、CRMプラットフォームのひとつ。

CRMとは、「Customer Relationship Management」の略で、顧客と従業員の関係を管理するもの。

営業の現場でよく使われるらしく、例えば、顧客Aとは名刺交換しただけとか、顧客Bとは商談が進められているとか、顧客Cとはすでに契約が終わったとか、そういった情報を一元管理するもの。

CRMプラットフォームの中では、他のサービスと比較して、かなり広く使われている様子。

 

無料のデモアカウントが用意されており、登録後のトップページは以下のような感じ。

https://developer.salesforce.com/signup

f:id:watagusa:20210106235811p:plain


salesforcerとは

このSalesForceR言語を使って操作していく。それを簡単にできるのが「salesforcer」というパッケージ。以下で使用方法を見ていく。

f:id:watagusa:20210107000045p:plain

 

まずは認証情報を設定してSalesForceに接続。

ユーザー名、パスワード、セキュリティトークンを引数に渡すと接続できる。

セキュリティトークンは、個人設定から「私のセキュリティトークンのリセット」を選択すると登録してあるメールアドレスに送られてくる。アカウントにIP制限がかかっていると、個人設定に「私のセキュリティトークンのリセット」という項目が出てこないので、制限を一時的に解除する必要がある。

f:id:watagusa:20210108001721p:plain

 

オブジェクトとは

「オブジェクト」とは、SalesForceの用語でテーブルのようなもの。GUIの上の方に並んでいるタブのひとつひとつがオブジェクト。

f:id:watagusa:20210108002614p:plain

 

表示されているものは全てではない。sf_list_objects()でオブジェクトのメタデータを取得できるので、そこからオブジェクト一覧を抽出して確認できる。デフォルトで663個もあるらしい。

f:id:watagusa:20210108002849p:plain

 

SOQLとは

SOQLという用語もあり、これはSQLSalesForce版。

ちなみにSQLは正式には何かの略語ではないらしい。知らなかった。

文字列でクエリを書いてsf_query()という関数に渡すと実行される。FROMにはオブジェクトを指定する。

f:id:watagusa:20210108003920p:plain

 

レポートとは

他のオブジェクトから集計したものをレポートと呼ぶ。

sf_create_report()という関数で作成する。nameという引数にレポート名、report_typeという引数には、「レポートタイプ」を指定する。レポートタイプはsf_list_report_types()で取得できる。

GUI上だと、集計したりできるようだが、salesforcerではあまり自由が効かないのか、フィルターをかけるくらいしかできない?そんな訳ない気がするので要調査。フィルターはlist形式で作成して、sf_run_report()のreport_filtersという引数に渡すと適用されたレポートが作成される。

f:id:watagusa:20210108004913p:plain

 

終わり

レポートを自由に作れると便利かもと思ったけど、そんなに自由に動くわけではなさそうかも。

データの取得は簡単にできるので、R言語でなんやかんやして、どこか別の場所に結果を返すのはできそう。

初見でGUI操作のチュートリアルに入るよりも、R言語通した方が分かりやすかった感覚はあるので、BIツールの入門方法としてありかもしれない。

全スライドは以下に置いてあり、本記事のR言語でやったことをGUIでやる場合はどうするのかも紹介している。

start-salesforce-with-r - Speaker Deck

 

参考文献

・Qiita, 「エンジニアのためのsalesforce超入門」
https://qiita.com/tarokamikaze/items/0bc2988534f63d4b65c5

ER図とかも描いてあるQiitaの入門記事。エンジニアは大変らしい。

 

・TRAILHEAD
https://trailhead.salesforce.com/ja/home

公式が用意しているチュートリアル。かなり量があるので必要なところを。

 

GitHub, 「An Implementation of Salesforce APIs Using Tidy Principles • salesforcer」
https://stevenmmortimer.github.io/salesforcer/index.html

 

・CRAN, 「Package salesforcer」
https://cloud.r-project.org/web/packages/salesforcer/index.html

 

f:id:watagusa:20210108005424p:plain

 

feature_fractionが変数重要度に与える影響

LightGBMのfeature_fractionは重要度に影響与えるよ〜という話を聞いたので実験。テストデータはkaggleのHousePricesをお借りする。

 

feature_fractionとは

・LightGBM will randomly select part of features on each iteration (tree) if feature_fraction smaller than 1.0. For example, if you set it to 0.8, LightGBM will select 80% of features before training each tree
・can be used to speed up training
・can be used to deal with over-fitting

https://lightgbm.readthedocs.io/en/latest/Parameters.html

 

ということで、木ごとに特徴量のサンプリングを行うもの。学習速度向上と過学習の抑制に効果がある。

 

実験

HousePricesを使ってfeature_fractionを1.0、0.5、0.1と変えた時に変数重要度がどうなるのか実験してみる。validationは5foldsのCrossValidation。feature_fractionのrandom_seedをそれぞれ10種類試して、重要度の平均をとって比較する。重要度のタイプはgain。

以下がその結果の変数重要度。全体をベタっと貼る。
青色がfeature_fraction1.0、橙色が0.5、緑色が0.1。

 

画像2

 

重要度の高いものを見ると特に重要度の高かったOverallQualがfeature_fractionが小さく設定されるにつれ、そのfeature_fraction内での重要度が相対的に低くなっている。
下位の特徴量ではfeature_fraction1.0の場合は急激に下がっていくのに対して、0.1ではあまり下がらずより広い範囲に重要度が散らばっている。
同じデータ、同じvalidationの切り方、同じモデルでもかなり印象が異なる。

 

各feature_fractionで重要度の標準偏差を集計してみると、feature_fractionが高いほど標準偏差が大きい。

 

      画像7

人口データで実験

sklearnのmake_classifitacionを使用して生成したデータでも実験。サンプルサイズ10,000、特徴量20個、意味のある特徴量の数(n_informative)は3個、クラスごとのクラスターの数(n_clusters_per_class)は1。

 

make_classificationは前にkaggleで使用されたことがあった。
https://www.kaggle.com/cdeotte/3-clusters-per-class-0-975
https://www.kaggle.com/c/instant-gratification/discussion/96519

 

CVの方法などは全てHousePricesと同じ条件で実験。
結果は以下の通り。

画像3

 

       画像7

傾向としては同じ様子。feature_fractionが小さくなるほど重要度が全体にばらける。
 
クラスごとのクラスターの数(n_clusters_per_class)を3に変えてみる。それ以外は全て同じ。

 

画像5

 

      画像7

だいぶ印象が変わったぞ??標準偏差で見ればばらつきが小さくなっていくのは変わらないものの、1.0と0.5であまり変わらなくなっている。
 

なぜfeature_fractionが重要度に影響するのか?

HousePricesで言うと目的変数であるSalePriceを予測するのにOverallQualがめちゃくちゃ効くけど、feature_fractionの結果、ある木ではOverallQualが特徴量として使われていないため他の特徴量でなんとか学習するしかなく、全特徴量を使った時には比較的重要度の低かった特徴量にも重要度が振られるようになる、ということらしい。
今回は試せていないけどborutaやらnull importanceやらにしたらまた結果が変わるかもしれない。
この辺のことちゃんと書いてあるのあったら教えてください。
 

終わり

重要度を解釈する時にfeature_fractionの値によって、重要度に影響が出る。解釈する時にはそのことを考慮しながら行う。もしくは重要度の解釈時のみ1.0にしておくとかだろうか。

https://github.com/bk-18/feature-fraction-test

"polite"で守るWebスクレイピングのエチケット

f:id:watagusa:20210101173645p:plain

Webスクレイピングの際には法律的なものなど、注意しなければならない点がいくつもあるが、それらの一部をサポートするR言語のパッケージ『polite』の紹介をする。

2020年12月5日に開催されたR言語の勉強会、「Japan.R」で発表した内容を掲載。

http://japanr.net/

 

Webスクレイピングとは

Webスクレイピングとは、Webサイトから情報を抽出してくるコンピュータソフトウェア技術のこと。手作業でコピーアンドペーストしてもWebスクレイピングと呼ばれるという話もみたことがある。

 便利な技術ではあるものの、法律など気をつけなければならない点が多数存在する。

以下はそのうちの一部。

f:id:watagusa:20210101173110p:plain

 

politeパッケージとは

RDocumentationには「責任あるWebエチケットの推進」が目的であるとされているR言語のパッケージ。

このpoliteによるセッションには以下の3つの柱があると記載されている。

f:id:watagusa:20210101173555p:plain

それぞれ雑に翻訳すると「取得許可の確認」「取得感覚を空ける」「確認を繰り返さない」と言える、と思う。これら基本的なスクレイピングのエチケットの遵守を、politeパッケージはサポートしてくれる。

ただし、個人情報保護、Webサイトの利用規約著作権の問題など、politeを通してスクレイピングするだけでは解決できない問題もあるので、その点は別途注意しなければいけない。

 

politeパッケージの使用手順

ざっくり以下の4つ(3つ)のステップに分かれる。3番目のrvestはpoliteとは別のパッケージなので「4つ(3つ)」。

f:id:watagusa:20210101174651p:plain

1,bow

ホストに対して自己紹介をする関数。

主な引数はurl、user_agent、delayの3つ。

UserAgentとはウェブサイトにアクセスするユーザーのOSやブラウザの情報などをまとめたもの。関数を実行することで、ホストにこれを送信する。これに加えて、自身の連絡先を載せておくと、何か問題があった際にホストが連絡を取りやすいのでより良い。

delayはスクレイピングの間隔を指定する。デフォルトだと5秒。あまり短い間隔でリクエストを送ってしまうと、相手側のサーバに高い負荷を掛けてしまうことになるので、適切な秒数を設定する。(1秒としている場合が多いようだが、適切な秒数が明確に示されている訳ではない???)

この取得間隔の設定が、RDocumentationにあった3本柱の1つ、「taking slowly」の実践となる。

f:id:watagusa:20210101175606p:plain

 

また、bowでは指定したパスを取得して良いのか確認を行なっている。この許可は「robots.txt」というクローラーへの取得許可不許可を記載しているテキストファイルを確認しており、これが3本柱の2つ目、「seeking permission」の実践。

f:id:watagusa:20210101175835p:plain

 

ちなみに、許可されていない場合は以下のように警告文が表示される。

f:id:watagusa:20210101175926p:plain

 

2,scrape

実際に対象ページを取得してくる関数。

前のステップで作成したbowオブジェクトを渡すbowと、URLに追加するパラメータを指定するqueryが主な引数。

queryは以下の赤枠にあるように、list形式で渡し、それがbowで指定したパスにパラメータとして追加される。

f:id:watagusa:20210101180444p:plain

 

3,rvest

R言語でのスクレイピングで使用されるパッケージ。scrapeで取得したHTML Documentから必要な情報を抽出する。

使用方法などは以下の画像にある参考文献を参照。

f:id:watagusa:20210101181039p:plain

 

4,nod

nodは取得先のパスを変更する場合に使用する関数。

bowのurlを変更すれば、それでも良いが、ホストに対してUserAgentを繰り返し送信してしまうことになり、robots.txtもすでに取得しているので、それらを繰り返さない為にこちらを使用する。これが3本柱の最後の1つ、「never asking twice」。

主な引数はbowオブジェクトを渡すbowと、変更先のパスを指定するpath。

f:id:watagusa:20210101181320p:plain

 

まとめ

politeの手順と、politeの3本柱は以下の通り。

f:id:watagusa:20210101181712p:plain

 

その他注意事項

以下のように、利用規約、個人情報、著作権など、注意しなければいけない点は多い。

スクレイピング機械学習周りの法律専門の会社もあるので、頼ってみるのも手。

f:id:watagusa:20210101182142p:plain

 

参考文献

Octoparse, 「Webスクレイピングとは?定義から応用までの説明」
https://www.octoparse.jp/blog/web-scraping/

PigData, IT弁護士に聞く「企業としてのスクレイピングは違法なのか?」
https://services.sms-datatech.co.jp/pig-data/2019/07/03/scrapinglaw/

R Documentation, polite package

https://www.rdocumentation.org/packages/polite/versions/0.1.1

R Documentation, rvest package

https://www.rdocumentation.org/packages/rvest/versions/0.3.6

アクセス解析ツール「AIアナリスト」ブログ,

robots.txtとは?意味から設定方法まで詳しく解説」

https://wacul-ai.com/blog/seo/internal-seo/seo-robots-txt/

R Documentation, robotstxt package

https://www.rdocumentation.org/packages/robotstxt/versions/0.7.13

文化庁, 「著作物が自由に使える場合」

https://www.bunka.go.jp/seisaku/chosakuken/seidokaisetsu/gaiyo/chosakubutsu_jiyu.html

Stimulator, Webスクレイピングする際のルールとPythonによる規約の読み込み」

https://vaaaaaanquish.hatenablog.com/entry/2017/12/01/064227

IT法務・AIFintechの法律に詳しい弁護士|中野秀俊, 「【スクレイピングと法律】スクレイピングって法律的に何がOKで何がOUTなのかを弁護士が解説。」

https://it-bengosi.com/blog/scraping/

PigData, 「【スクレイピング】違法にならないサービスパターン5選」

https://services.sms-datatech.co.jp/pig-data/2020/01/15/scrapinglaw3/

Intro to {polite} Web Scraping of Soccer Data with R!

https://ryo-n7.github.io/2020-05-14-webscrape-soccer-data-with-R/

石田 基広, 市川 太祐, 瓜生 真也湯谷 啓明, シーアンドアール研究所,Rによるスクレイピング入門」

https://www.amazon.co.jp/dp/486354216X

松村 優哉, 湯谷 啓明, 前田 和寛, 紀ノ定 保礼, 技術評論社,

RユーザのためのRStudio[実践]入門−tidyverseによるモダンな分析フローの世界

https://www.amazon.co.jp/dp/4774198536

 

終わり

f:id:watagusa:20210101182548p:plain


 

スライドはこちら。

https://speakerdeck.com/bk_18/web-scraping-with-polite-package