018780 ランダム
 HOME | DIARY | PROFILE 【フォローする】 【ログイン】

One of my favorite things is ...

全37件 (37件中 1-10件目)

1 2 3 4 >

Tips_Office

2019.09.12
XML
カテゴリ:Tips_Office
​​​ 楽天市場の商品レビューの分析を半自動化していきたいと考えていますが、レビューの投稿日を示すカレンダーヒートマップを「R」のコードで作成してみました。

 これまでは、Microsoft Power BI Desktopを利用してカレンダーヒートマップを作成していましたが、「R」のコードでスクレイピングしたデータを利用して、「R」のコードの一連の作業として作成できれば、効率的です。

 Power BIの場合は、「日付」別のレビュー件数の列がなくても、日付をカウントして、カレンダーヒートマップを作成できますが、「R」のカレンダーヒートマップの場合は、「日付」に対応するデータの列が必要になるようです。

 「R」でカレンダーヒートマップを作成するためには、日付の文字列を日付型にするのと、日付別のレビュー件数の列(変数)を作成する必要があります。

 また、レビューの日付に古いものが含まれているとカレンダーヒートマップの対象期間が長期間になります。しかし、長期間にわたるカレンダーだとグラフが小さくなって見づらくなります。そこで、最新のレビューの日付の年から2年さかのぼって、3年間をグラフの対象にすることにしました。

 商品によっては、対象期間を変更する必要があるかもしれませんが、デフォルトで3年間のカレンダーの枠を用意しています。


---------------------------------------------------------------

▼スクレイピング済みのデータがあることを前提としています。スクレイピングのコードは関連記事にあります。

 以下のコードに必要なパッケージは次のようなものになります。

library(tidyverse)
library(ggplot2)
library(ggTimeSeries)


▼dateの文字列を日付型に変換して、日付の列と日付別のレビュー件数の列によるデータ「df_rday」を作成

df_r$date <- as.Date(df_r$date)
df_rday <- select(df_r, date) %>% group_by(date) %>% summarise(count=n())


▼カレンダーヒートマップのグラフの枠を3年分にする

 カレンダーの表示期間を調整するために、yearの列を追加します。yearの値を利用して、最新のレビューの日付の年から2年さかのぼる形でカレンダーの期間を設定します。「date」を利用して、「
max(df_rday$date)-730)」といった方法もありますが、グラフ化されるのは730日分のレビュー投稿件数に限られ、3年間の枠一杯にデータが表示される形とは異なります。

df_rday$year <- as.integer(substring(df_rday$date,1,4))
df_rday <- filter(df_rday, year >= max(df_rday$year)-2)


▼カレンダーヒートマップを作成
​ 日や月の枠線の太さを調整すれば、より見やすい形にできると思います。​

ggplot_calendar_heatmap(df_rday, cDateColumnName = "date",
  cValueColumnName = "count", vcGroupingColumnNames = "Year",
  dayBorderSize = 0.5, dayBorderColour = "black",
  monthBorderSize = 2, monthBorderColour = "blue",
  monthBorderLineEnd = "round") + 
  scale_fill_continuous(low = 'yellow', high = 'red') +
  facet_wrap(~Year, ncol = 1)

---------------------------------------------------------------

☆関連記事​
▼楽天市場の商品レビューの分析:【R】のコードで半自動化を目指します:テキストマイニング編


▼楽天市場ランキング上位のメンズ・ボトムスの商品レビューの分析をしました:「R言語」によるスクレイピング

▼楽天市場のランキング上位の「zootie:エアパンツ」の商品レビューをテキストマイニングしてみました:「ファッションジャンル商品対応版のRコード」でスクレイピング

▼【再改訂版コード】:「R言語」による楽天市場の商品レビューのスクレイピングコードの再改訂版:グラフ作成コードなどを追加:「素焼きアーモンド」の商品レビューのデータを取得:意外と多い「はじめて」の購入

▼「R言語」による楽天市場の商品レビューのスクレイピングコードの改訂版です:Excelで項目を切り分ける作業が不要になりました

▼楽天市場の
特定の商品のレビューを「R言語」でスクレイピングするコード:一部の項目の空欄・欠損値(missing values)を「NA」に置き換えてデータフレームを作成:継ぎはぎのコードですが・・・


▼JPRiDEの新モデル・完全ワイヤレスイヤホン「JPRiDE TWS-520」のアマゾン・カスタマーレビューのテキストを分析

▼「JPRiDE」ブランドのワイヤレスイヤホン「JPRiDE 708」の楽天市場のレビューのテキストを分析:ReviewMetaでアマゾンのカスタマーレビューの信頼性の高さを推定できるJPRiDEの製品​​

▼雑誌など第3者の高評価をアピールしている「JPRiDE(ジェイピー・ライド)」ブランドのワイヤレスイヤホン「JPA2」の楽天市場のレビューのテキスト分析です


▼JVCケンウッドの高評価イヤホン「HA-FX3X」とソニーの「MDR-EX450」のカスタマーレビューを比較

▼3000円クラスの高評価イヤホン「HA-FX3​のカスタマーレビューのテキスト分析を「User Local」の「AIテキストマイニング」で行ってみました:こんな分析ツールがあったとは、驚きです

▼カスタマーレビュー分析で、Microsoft Power BIの「Word Cloud」とスライサーの組み合わせは便利です:3000円クラスで、高評価のイヤホン「HA-FX3X」のカスタマーレビューのテキスト分析

▼アマゾンのカスタマーレビューを購入の判断材料にする場合、「ReviewMeta」(レビューメータ)によるチェックが役立ちます


​▼先日購入したイヤホン「HA-FX3X」のアマゾン・カスタマーレビュー分析:低音の良さ、コスパなどが高評価の理由のようです​:3000円クラスで、高評価のイヤホンです​



[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

Rではじめるデータサイエンス [ Hadley Wickham ]
価格:4320円(税込、送料無料) (2019/9/14時点)


​​​






Last updated  2019.09.14 07:04:44
コメント(0) | コメントを書く
2019.09.11
カテゴリ:Tips_Office
​​​​ NASAのNEOデータの可視化の試みとして、「R」でアニメーショングラフを作成してみました。

 なお、データは、NASAのサイト(https://cneos.jpl.nasa.gov/ca/)からダウンロードしています。


 以前作成したアニメーションGIFのグラフは、年別のグラフ画像のファイルを1個ずつ保存して、それらの複数の画像ファイルをアニメーションGIF作成ツールを利用して一体化していました。

 「R」のパッケージ「gganimate」を利用すれば、アニメーショングラフを簡単に作成できます。ただ、「gganimate」のパッケージをインストールする際に少しつまずいてしまいました。

 
「gganimate」には、同じ名前で、古いものと新しいものがあり、とても紛らわしいことになっています。名前を変えて区別できるようにしてほしかったです。

 コードも旧版と新版で異なるのですが、ネットの情報が旧版のものなのか、新版のものなのか、区別が難しくて困ります。

 とりあえず、古い方のインストールが難しそうだったので、新しい方の「gganimate」をインストールしました。

devtools::install_github('https://github.com/thomasp85/gganimate/releases/tag/v1.0.3')


 「gganimate」を利用すると、グラフを作成した時点で、アニメーションGIFの作成が終了することになるので、かなり、作業を効率化することができます。

 最初、
「gganimate」でアニメーショングラフを作成した時、すぐには何も表示されなかったので、PCがフリーズしたと思ってしまいましたが、グラフ作成(レンダリング)が終了するまで時間がかかるようです。パソコンのスペックによると思いますが、下のグラフだと1分程度かかりました。


▼1LD以下の距離にまで接近した小惑星(Asteroid)のグラフです。「年」の変数で動くようにしています(図の左上に「年」の表示があります)。
 2008年から2019年8月までのデータです。


 図の左側が「地球に近い」ということになります。左上に現れる点は、「地球の近くまで接近した大きな小惑星」ということになります。
 
 地球と月の間の距離「1LD」以下の距離まで接近する小惑星が多いことを感じることができると思います。

 日常的に、小惑星が地球の近くを飛行していることをイメージできるのではないかと思います。


 グラフの横軸:地球との距離、グラフの縦軸と円の大きさ:小惑星の大きさ(推定の上限値)、円の色は月別




▼1LD以下の距離にまで接近した小惑星(Asteroid)の年別のファセットグラフ(静止画)です。2008年から2019年8月までのデータです。

 「2019 OK」はファセットグラフの右下に表示されています。約0.2LDの距離で、130mの大きさのものが、
「2019 OK」です。
 グラフは、2008年からのものですが、この距離まで接近した小惑星で、
「2019 OK」より大きいものは見当たりません。


 グラフの横軸:地球との距離、グラフの縦軸と円の大きさ:小惑星の大きさ(推定の上限値)、円の色は月別




▼これは、1LD以下の距離にまで接近した小惑星(Asteroid)のアニメーショングラフです。「月」の変数で動くようにしています。スピードは落としています。

 今年の7月は、例年より多くの、しかも大きめの小惑星が地球に接近していたようです。


 グラフの横軸:地球との距離、グラフの縦軸と円の大きさ:小惑星の大きさ(推定の上限値)




▼「R」のコード例:一番上のアニメーショングラフのコードです


 普通に散布図を作って、動かすコード「transition_time()」を追加するだけです。
 最後の行の「animate(movy)」を単に「movy」としても作成されますが、
「animate(movy, fps=1)」というように、「fps=数字」を追加して速度を調整することができます。

----------------------------------------------------------
p <- ggplot(data1,aes(x = Dn_ld, y = size_high, size = size_high, colour = month)) +
  geom_point(show.legend = FALSE, alpha = 0.7) +
  scale_color_viridis_d() +
  scale_size(range = c(2, 12)) +
  labs(x = "Distance(LD)", y = "Estimated Size(m)")

movy <- p + transition_time(year_d)  +
  ease_aes("linear") +
  enter_fade() +
  exit_fade() +
  labs(title = "Year: {frame_time}")
animate(movy, width = 700, height = 450)
anim_save("asteroid.gif")
-----------------------------------------------------------

 
☆関連記事
▼NASAのNEOデータ分析のための前処理は、まずExcelのPower Queryで処理をし、必要に応じて「R」のコードを利用するのが効率的だと思います

▼NASAのNEOデータを、Power Queryで前処理してみました:コードを使わずに前処理が可能です

▼NASAのNEO(地球に接近した小惑星)のデータの分析:データを「R言語」で前処理するコード:データを随時更新する場合は、繰り返し作業を「コード化」するのが一番です 

▼8月21日放送のフジテレビ「とくダネ!」で「直径160mの小惑星が今月末に最接近」という話題がありましたが、地球にはあまり接近しないようです

▼地球に接近したNEOの日別の個数をMicrosoft Power BIで表示してみました

▼【平均値の差の検定をしてみました】地球に接近する小惑星の数の10月と8月の平均値には、統計的に有意な差が見られます

▼地球に接近する小惑星の数が多いのは10月頃?。少ないのは8月?:月別にかなり違いが見られます:Microsoft Power BI Desktopは、無料で利用できる、インタラクティブなインフォグラフィック作成ツールです


▼データ前処理の例(その2):Microsoft Power BI用データを準備するための処理の例:NASAのNEOデータをダウンロードし、英語の月名を含む日付の文字列を日付データに変換して、Power BIに読み込む

▼Microsoft Power BI用データを準備するための前処理の例です:NASAのNEOデータをダウンロードし、小惑星の大きさの推定値をExcelで取り出し、単位変換して、Power BIに読み込む

▼地球をかすめた小惑星「2019 OK」は、0.2LD以下の距離に接近したNEOの中で過去最大だったようです:NASAの1万3千件以上のNEOデータから

▼小惑星「2019 OK」は、過去3年間に0.2LD以下まで地球に接近したNEOの中でも最大でした:NASAのNEOデータをPower BIで分析してみました

▼【グラフを追加しました】:小惑星「2019 OK」はOKでしたが・・・:7月25日に地球とニアミスした、今年最大の小惑星の名前です。




[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

Rではじめるデータサイエンス [ Hadley Wickham ]
価格:4320円(税込、送料無料) (2019/9/14時点)


 



​​​​






Last updated  2019.09.14 07:07:22
コメント(0) | コメントを書く
2019.09.10
カテゴリ:Tips_Office
​​ 楽天市場の商品レビューの分析ですが、「R言語」のコードで半自動化できるかどうかを検証しています。

 一応、スクレイピングと簡単な棒グラフなどの「R」のコードは整備できてきました。

 次に目指すのは、テキストマイニングの部分です。現在は、ユーザーローカルさんのテキストマイニングツールやKH Coder、Power BIを利用していますが、「R」のパッケージにもテキストマイニングツールがあるので、「R」だけでかなり多くの分析ができるのではないかと思います。

 スクレイピングからテキストマイニングまで一気通貫にできれば、非常に楽ですし、コードが正確であるということが前提ですが、人手の作業によるミスを排除できるので、より正確な分析が可能になります。


▼ワードクラウドを作成できるようにするために、MeCabとRMeCabをインストール


 まだ、テキストマイニング用のコードの整備を始めたばかりですが、早速、MeCabの辞書のコンパイルでつまづいてしまいました。

 MeCabのデフォルトの辞書では、「!」「”」といった記号が「サ変接続の名詞」として登録されています。

 「サ変接続の名詞」とは何でしょう。例えば「購入」のように、「した」とか「する」に接続するのが、「サ変接続の名詞」です。

 レビュー本文のスクレイピングデータ中の「名詞」をワードクラウドの対象にした場合、「”」の数が多かったので、巨大な「”」が出現してしまいました。
 
 「”」などの記号をRのコードで削除するという対処方法もありますが、処理の自動化とはかけ離れてしまいます。

 根本的に対処するためには、辞書を修正する必要があります。

 ネットで調べて、MeCabをインストールしたフォルダにある「unk.def」というファイルを修正して、上書きして、辞書を再設定すればいいことがわかりました。
 
 「unk.def」をテキストエディターで開き、
 「SYMBOL,1283,1283,17585,名詞,サ変接続,*,*,*,*,*」という部分を、下記と置き換えます。
 「SYMBOL,1283,1283,17585,記号,一般,*,*,*,*,*」に置き換えて、保存します。

 ファイルの保存ですが、そのまま保存できなかったので、一度、デスクトップに保存して、その保存したものを元のフォルダに移動させました。  

 辞書の再設定は、コマンドプロンプトでの操作もしてみましたが、最終的には、「ipadic」フォルダに「bin」フォルダ内の「mecab-dict-index.exe」と「libmecab.dll」をコピーして、「ipadic」フォルダの中で「mecab-dict-index.exe」を右クリックから実行しました。

 最初試していたコマンドプロンプトでの操作でも、「ipadic」フォルダに「bin」フォルダ内の「mecab-dict-index.exe」と「libmecab.dll」をコピーして、コマンドプロンプトで「cd」で、「ipadic」フォルダにディレクトリを変更してから、「mecab-dict-index.exe」を実行していました。

 この場合、オプション設定の仕方がよくわからないので、単に「mecab-dict-index.exe」を実行しただけです。
 「bin」フォルダにディレクトリ変更して、「mecab-dict-index.exe」と「ipadic」フォルダへのパスを記して実行よりも手っ取り早いと思ったからです。

 コマンドプロンプトで辞書の再設定をした段階で、MeCabでは、「!」「”」などの品詞が「記号」になりました。

 しかし、「R Studio」のR MarkdownのRMeCabでは、「!」「”」の品詞は「名詞」のままです。何度繰り返しても、「すももも””!!」とか、解析対象テキストを変更してみても、パソコンを再起動しても、RMeCabでは「!」「”」などの品詞は「名詞」のままです。一方、MeCabのアプリでは、「!」「”」などの品詞は「記号」となっています。

 ???

 RMeCabは、MeCabの解析結果をRで利用できるようにしているはずなので、MeCabの結果がRMeCabに反映されないというのは、とても不思議な現象でした。

 結局、RMeCabでもうまくいくようになったのですが、「ipadic」フォルダに「bin」フォルダ内の「mecab-dict-index.exe」と「libmecab.dll」をコピーして、「ipadic」フォルダの中で「mecab-dict-index.exe」を右クリックから実行した後でうまくいくようになったようなので、コマンドプロンプトからの辞書の再設定がうまくいっていなかったのかもしれません。

 でも、その前の段階でもMeCabのアプリでは、「!」「”」などの品詞が「記号」となっていたので、RMeCabがMeCabの再設定前の辞書ファイルにアクセスしていた、ということなのではないかと考えます。

 そもそも、「!」「”」などの品詞を「サ変接続の名詞」として設定しているMeCabの辞書のデフォルト設定に問題があるようですが、これはMeCabの作者からのメッセージであり、ユーザーに与えた課題でもあり、「それくらいは変更できるようになりなさい」ということなのだと思います。

 確かに、この問題を解決するためにいろいろと調べたので、MeCabの辞書ファイルのあり方が何となくわかったような気がします。一瞬ですが、ユーザー辞書を追加してみよう、という気持ちになったりもしました。

 なお、2台目のパソコン(Windows8.1)にも同様の設定をしましたが、コマンドプロンプトは全く使いませんでした。

 「ipadic」フォルダの「unk.def」というファイルを修正してから、「ipadic」フォルダに「bin」フォルダ内の「mecab-dict-index.exe」と「libmecab.dll」をコピーして、「ipadic」フォルダの中で「mecab-dict-index.exe」を右クリックから実行しました。その結果、すぐにRMeCabにも変更が反映されました。

 1台目のパソコン(Windows10)では、手こずりましたが、2台目は非常にスムーズでした。パソコンの環境も何か影響していたのかもしれません。


▼ワードクラウドの作成

 スクレイピングで得られるデータでは、「☆の数」は4か5しかないので、☆の数別のワードクラウドを作っても仕方がありません。

 そこで、「購入した回数」の「はじめて」と「リピート」でワードクラウドを作成しようと思います。

 MeCabの辞書の再設定で疲れ果てたので、一応、ワードクラウドができることを確認するまでにとどめます。

 ワードクラウドのディテールの設定などは後日にしたいと思います。​​​


 先日、スクレイピングしたメンズ・ボトムスのレビューの本文中の「名詞」と「形容詞」を対象にワードクラウドを作成しました。


▼「購入した回数」別:「リピート」の人のレビュー本文のワードクラウド



▼「購入した回数」別:「はじめて」の人のレビュー本文のワードクラウド



☆関連記事​
▼楽天市場ランキング上位のメンズ・ボトムスの商品レビューの分析をしました:「R言語」によるスクレイピング

▼楽天市場のランキング上位の「zootie:エアパンツ」の商品レビューをテキストマイニングしてみました:「ファッションジャンル商品対応版のRコード」でスクレイピング

▼【再改訂版コード】:「R言語」による楽天市場の商品レビューのスクレイピングコードの再改訂版:グラフ作成コードなどを追加:「素焼きアーモンド」の商品レビューのデータを取得:意外と多い「はじめて」の購入

▼「R言語」による楽天市場の商品レビューのスクレイピングコードの改訂版です:Excelで項目を切り分ける作業が不要になりました

▼楽天市場の
特定の商品のレビューを「R言語」でスクレイピングするコード:一部の項目の空欄・欠損値(missing values)を「NA」に置き換えてデータフレームを作成:継ぎはぎのコードですが・・・


▼JPRiDEの新モデル・完全ワイヤレスイヤホン「JPRiDE TWS-520」のアマゾン・カスタマーレビューのテキストを分析

▼「JPRiDE」ブランドのワイヤレスイヤホン「JPRiDE 708」の楽天市場のレビューのテキストを分析:ReviewMetaでアマゾンのカスタマーレビューの信頼性の高さを推定できるJPRiDEの製品​​

▼雑誌など第3者の高評価をアピールしている「JPRiDE(ジェイピー・ライド)」ブランドのワイヤレスイヤホン「JPA2」の楽天市場のレビューのテキスト分析です


▼JVCケンウッドの高評価イヤホン「HA-FX3X」とソニーの「MDR-EX450」のカスタマーレビューを比較

▼3000円クラスの高評価イヤホン「HA-FX3​のカスタマーレビューのテキスト分析を「User Local」の「AIテキストマイニング」で行ってみました:こんな分析ツールがあったとは、驚きです

▼カスタマーレビュー分析で、Microsoft Power BIの「Word Cloud」とスライサーの組み合わせは便利です:3000円クラスで、高評価のイヤホン「HA-FX3X」のカスタマーレビューのテキスト分析

▼アマゾンのカスタマーレビューを購入の判断材料にする場合、「ReviewMeta」(レビューメータ)によるチェックが役立ちます


​▼先日購入したイヤホン「HA-FX3X」のアマゾン・カスタマーレビュー分析:低音の良さ、コスパなどが高評価の理由のようです​:3000円クラスで、高評価のイヤホンです​




[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

Rではじめるデータサイエンス [ Hadley Wickham ]
価格:4320円(税込、送料無料) (2019/9/14時点)









Last updated  2019.09.14 07:08:53
コメント(0) | コメントを書く
2019.09.08
カテゴリ:Tips_Office
​​​​​​​​
 ​楽天市場ランキング上位のメンズ・ボトムス、MONO-MARTの「チノパンツ」の商品レビューの分析をしました。レビュー数は、4600件を超えていますが、今回はスクレイピング可能な1500件のうち375件のレビューデータを取得しました(ページ送りのステップ数を4に設定)。​

 「はきやすさ」「はき心地」「値段」が評価されているようです。


バリエーションが豊富です


 今回スクレイピングした375件で、「購入した回数」が「はじめて」というレビューが177件となっていて、「リピート」の61件よりも多くなっています。


▼レビュー(375件)の性・年代別件数

 40代と50代が、レビュー投稿者の中心になっています。




▼「購入した回数」

 「はじめて」が177件と多くなっています。


▼レビューの日別推移

 レビュー投稿の時期は、春、秋がやや多いようです。



▼レビュー件数の月別推移
 
 スクレイピングしたレビューには、2013年のものも含まれていました。



▼レビューの見出し:「はじめて」購入した人

 「はきやすさ」「はき心地」「価格」などが評価されています。




▼レビューの見出し:「リピート」購入した人




◆今回の「R言語」でのスクレイピングコード:ファッション商品(ボトムス)用
----------------------------------------------------------------------------
library(pipeR)
library(textreadr)
library(RCurl) 
library(XML)
library(tidyverse)
library(rvest)
library(lubridate)
library(purrr)
library(ggsci)
library(gridExtra)


url_txt <- "https://review.rakuten.co.jp/item/1/257982_10002304/"
pages_num <- 100
get_r_reviews  <- NULL
df_reviews   <- NULL
for(i in seq(1, pages_num, by = 4)) {
  url <- paste0(url_txt,i,'.','1/')
  page <- read_html(url)
  
  get_r_reviews <- page %>% 
    html_nodes ('.hreview')  %>%    
    map_df(~list( name = html_nodes(.x, '.reviewer') %>% 
                    html_text(.,trim = FALSE) %>% 
                    {if(length(.) == 0) NA else .}, 
                  title = html_nodes(.x, '.summary') %>% 
                    html_text(.,trim = FALSE) %>% 
                    {if(length(.) == 0) NA else .}, 
                  stars = html_nodes(.x, '.value') %>% 
                    html_text() %>% 
                    {if(length(.) == 0) NA else .}, 
                  date = html_nodes(.x, '.dtreviewed') %>% 
                    html_text() %>% 
                    {if(length(.) == 0) NA else .}, 
                  reviews = html_nodes(.x, '.description') %>% 
                    html_text(.,trim = FALSE) , 
                  helpful = html_nodes(.x, '.revEntryAnsNum') %>%
                    html_text(.,trim = FALSE) %>%
                    {if(length(.) == 0) NA else .} ,
                  age_sex = html_nodes(.x, '.revUserFaceDtlTxt') %>% 
                    html_text(.,trim = FALSE) %>% 
                    str_replace_all(., "購入者|レビュー投稿.*|.*件","") %>%
                    str_replace_all(., " ","") %>%
                    str_trim(., side = "both") ,
                  sex = html_nodes(.x, '.revUserFaceDtlTxt') %>% 
                    html_text(.,trim = FALSE) %>% 
                    str_replace_all(., "購入者|レビュー投稿.*|.*件|.*代|以上","") %>%
                    str_replace_all(., "レビュー投稿.*","") %>%
                    str_replace_all(., " ","") %>%
                    str_trim(., side = "both") ,
                  age = html_nodes(.x, '.revUserFaceDtlTxt') %>% 
                    html_text(.,trim = FALSE) %>% 
                    str_replace_all(., "購入者|レビュー投稿|.*件|男性|女性","") %>%
                    str_replace_all(., " ","") %>%
                    str_trim(., side = "both") , 
                  posts = html_nodes(.x, '.revUserFaceDtlTxt') %>% 
                    html_text(.,trim = FALSE) %>% 
                    str_replace_all(., ".*代.*|購入者|レビュー投稿|件","") %>%
                    str_replace_all(., " ","") %>%
                    str_trim(., side = "both") ,
                  size = html_nodes(.x, '.revRvwUserDisp') %>% 
                    html_text(.,trim = FALSE) %>% 
                    str_replace_all(., "利用者サイズ:|商品を使う人.*|購入した回数.*|商品の使いみち:.*","") %>%
                    str_replace_all(., " ","") %>%
                    str_replace_all(., " ","") %>%
                    str_trim(., side = "both") ,
                  usage1 = html_nodes(.x, '.revRvwUserDisp') %>% 
                    html_text(.,trim = FALSE) %>% 
                    str_replace_all(., "利用者サイズ:.*|ボトムス.*|商品を使う人.*|購入した回数.*|商品の使いみち:","") %>%
                    str_replace_all(., " ","") %>%
                    str_replace_all(., " ","") %>%
                    str_trim(., side = "both") ,
                  usage2 = html_nodes(.x, '.revRvwUserDisp') %>% 
                    html_text(.,trim = FALSE) %>% 
                    str_replace_all(., "利用者サイズ:.*|ボトムス.*|商品の使いみち.*|購入した回数.*|商品を使う人:","") %>%
                    str_replace_all(., " ","") %>%
                    str_replace_all(., " ","") %>%
                    str_trim(., side = "both") ,
                 usage3 = html_nodes(.x, '.revRvwUserDisp') %>% 
                    html_text(.,trim = FALSE) %>% 
                    str_replace_all(., "利用者サイズ:.*|ボトムス.*|商品の使いみち.*|商品を使う人.*|購入した回数:","") %>%
                    str_replace_all(., " ","") %>%
                   str_replace_all(., " ","") %>%
                   str_trim(., side = "both") 
         ))
    df_reviews <- rbind(df_reviews, get_r_reviews)
  
    print(i)
    
    Sys.sleep(5)
}
view(df_reviews)
write.csv(df_reviews,"rakuten_reviews.csv")
df_r <- read.csv("rakuten_reviews.csv",header = TRUE, na.strings=c("","NA"))
write.csv(df_r ,"rakuten_reviews.csv")
view(df_r)
​​​​​​​-------------------------------------------------------------------------

☆関連記事​
▼楽天市場のランキング上位の「zootie:エアパンツ」の商品レビューをテキストマイニングしてみました:「ファッションジャンル商品対応版のRコード」でスクレイピング

▼【再改訂版コード】:「R言語」による楽天市場の商品レビューのスクレイピングコードの再改訂版:グラフ作成コードなどを追加:「素焼きアーモンド」の商品レビューのデータを取得:意外と多い「はじめて」の購入

▼「R言語」による楽天市場の商品レビューのスクレイピングコードの改訂版です:Excelで項目を切り分ける作業が不要になりました

▼楽天市場の
特定の商品のレビューを「R言語」でスクレイピングするコード:一部の項目の空欄・欠損値(missing values)を「NA」に置き換えてデータフレームを作成:継ぎはぎのコードですが・・・


▼JPRiDEの新モデル・完全ワイヤレスイヤホン「JPRiDE TWS-520」のアマゾン・カスタマーレビューのテキストを分析

▼「JPRiDE」ブランドのワイヤレスイヤホン「JPRiDE 708」の楽天市場のレビューのテキストを分析:ReviewMetaでアマゾンのカスタマーレビューの信頼性の高さを推定できるJPRiDEの製品​​

▼雑誌など第3者の高評価をアピールしている「JPRiDE(ジェイピー・ライド)」ブランドのワイヤレスイヤホン「JPA2」の楽天市場のレビューのテキスト分析です


▼JVCケンウッドの高評価イヤホン「HA-FX3X」とソニーの「MDR-EX450」のカスタマーレビューを比較

▼3000円クラスの高評価イヤホン「HA-FX3​のカスタマーレビューのテキスト分析を「User Local」の「AIテキストマイニング」で行ってみました:こんな分析ツールがあったとは、驚きです

▼カスタマーレビュー分析で、Microsoft Power BIの「Word Cloud」とスライサーの組み合わせは便利です:3000円クラスで、高評価のイヤホン「HA-FX3X」のカスタマーレビューのテキスト分析

▼アマゾンのカスタマーレビューを購入の判断材料にする場合、「ReviewMeta」(レビューメータ)によるチェックが役立ちます


​▼先日購入したイヤホン「HA-FX3X」のアマゾン・カスタマーレビュー分析:低音の良さ、コスパなどが高評価の理由のようです​:3000円クラスで、高評価のイヤホンです​
 ​​​​​​​​



[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

Rではじめるデータサイエンス [ Hadley Wickham ]
価格:4320円(税込、送料無料) (2019/9/14時点)



​​






Last updated  2019.09.14 07:08:09
コメント(0) | コメントを書く
2019.09.07
カテゴリ:Tips_Office
​​​​​ NASAのNEOのデータを前処理するにあたって、「R」のコードによる方法とExcelのPower Queryによる方法の2種類を試してみました。

 なお、データは、NASAのサイト(https://cneos.jpl.nasa.gov/ca/)からダウンロードしています。

 結論としては、分析用データの前処理には、ExcelのPower Queryが便利なので、ExcelのPower Queryでできる処理はすべて行ってしまうのが効率的だと思います。
 
 その際、列の分割、列名の変更など処理の種類ごとにまとめてクエリの作業をするようにすると、後でクエリの記録がわかりやすくなると思います。


 そして、「R」のコードなど、コードによる処理が効率的な処理が残っていれば、その時にコードを利用すればよいと思います。

 注意点があるとすれば、ダウンロードした元データをExcelのシートとして開いて変更したりしないということだと思います。

 すべての前処理は、クエリかコードで行い、前処理で得られたデータのファイルは元データのファイルとは別名で保存するようにします。

 クエリやコードを変更することはよくあるので、クエリやコードを変更しても元データからいつでもやり直せるというのが、クエリやコードを利用することで得られるメリットだと思います。

 下記のように、「R」で何らかの前処理を追加することがあるかもしれませんが、
ExcelのPower Queryでの前処理が効率化につながっていれば、その処理には意味があると思います。

 NASAのNEOデータの場合では、NEOの推定サイズの欠損値の行の削除で、「R」のコードでは推定サイズ以外の欠損値の行も削除してしまっていたのですが、パワークエリでは簡単に処理できました。


 ExcelのPower Queryで前処理  →  Power BIで分析
                 → Rで前処理追加 →Rで分析

                ⇒ 
                ⇒ 

 ということで、分析をPower BIで行う場合、Rで行う場合、いずれの場合でも前処理の最初の段階ではExcelのPower Queryを利用するのがよいのではないかと思います。


▼データ件数のカレンダーヒートマップもPower BIで簡単に作成できます

 Rのggplotなどを利用する方法とは異なるデザインになります。

 下図は、地球まで1LD以下の距離に接近したNEOの日ごとの分布です。




▼Power BIでは、「R」とは異なるテイストのビジュアルを作成できます

 「2015年~2019年8月」の期間に0.5LD以下の距離まで地球に接近したNEOの散布図です。

 下図は、2015年以降のものですが、1900年以降で見ても「2019 OK」は、0.2LD以下の距離まで地球に接近したNEOの中で最大のものです。

 この比較的大きな
「2019 OK」が、地球に接近する直前までわからなかった、ということがNEOの観測の難しさを示していると思います。
 
 ◆横軸:地球との距離、縦軸と円の大きさ:NEOのサイズの推定値(下限値)



▼ところで、直近のアステロイド(小惑星)の動向を表示するウィジェットを見つけました(​https://www.nasa.gov/planetarydefense​)

 これがあれば、観測されているNEOの動向を見逃すことはなさそうです。

 でも、WindowsPCでは、「Yahoo ! ウィジェット」が必要なようです。
「Yahoo ! ウィジェット」はサービス終了していたはずです。

 Mac版の
ウィジェットがちゃんとあるので、NASAにおけるMacユーザーはかなり多いのかもしれません。

 接近距離はマイルで表示されていますが、地球と月の距離(1LD)
が約239,000マイルなので、この距離を目安にすればいいと思います。

※Average distance between Earth and the moon is about 239,000 miles (385,000 kilometers).



☆関連記事
▼NASAのNEOデータを、Power Queryで前処理してみました:コードを使わずに前処理が可能です

▼NASAのNEO(地球に接近した小惑星)のデータの分析:データを「R言語」で前処理するコード:データを随時更新する場合は、繰り返し作業を「コード化」するのが一番です 

▼8月21日放送のフジテレビ「とくダネ!」で「直径160mの小惑星が今月末に最接近」という話題がありましたが、地球にはあまり接近しないようです

▼地球に接近したNEOの日別の個数をMicrosoft Power BIで表示してみました

▼【平均値の差の検定をしてみました】地球に接近する小惑星の数の10月と8月の平均値には、統計的に有意な差が見られます

▼地球に接近する小惑星の数が多いのは10月頃?。少ないのは8月?:月別にかなり違いが見られます:Microsoft Power BI Desktopは、無料で利用できる、インタラクティブなインフォグラフィック作成ツールです


▼データ前処理の例(その2):Microsoft Power BI用データを準備するための処理の例:NASAのNEOデータをダウンロードし、英語の月名を含む日付の文字列を日付データに変換して、Power BIに読み込む

▼Microsoft Power BI用データを準備するための前処理の例です:NASAのNEOデータをダウンロードし、小惑星の大きさの推定値をExcelで取り出し、単位変換して、Power BIに読み込む

▼地球をかすめた小惑星「2019 OK」は、0.2LD以下の距離に接近したNEOの中で過去最大だったようです:NASAの1万3千件以上のNEOデータから

▼小惑星「2019 OK」は、過去3年間に0.2LD以下まで地球に接近したNEOの中でも最大でした:NASAのNEOデータをPower BIで分析してみました

▼【グラフを追加しました】:小惑星「2019 OK」はOKでしたが・・・:7月25日に地球とニアミスした、今年最大の小惑星の名前です。



​​






Last updated  2019.09.10 04:39:17
コメント(0) | コメントを書く
2019.09.06
カテゴリ:Tips_Office
 
 NASAのNEO(Near Earth Object)のデータの前処理を、ExcelのPower Query(パワークエリ)で行ってみました。

 なお、データは、NASAのサイト(https://cneos.jpl.nasa.gov/ca/)からダウンロードしています。


「R」のコードによる前処理については、​こちらの記事​にあります。

 パワークエリは、多くの処理内容がメニューに登録されていて、GUIで操作できるので、手軽で簡単です。

 列の分割、列の型の変更、列名変更など、サクサクと処理できます。

 Excelでは、関数を用いて変換していた、「km」の「m」への単位変換の処理も、Excelの関数をM言語の関数に移植するという方法のほかに、GUI操作の工夫でも簡単にできました。

▼NEOの推定値で、「km」を「m」に変換する方法の例:GUI操作版

 NEOの大きさの推定値は、1つのセルに「15m - 35m」「2.3km - 2.8km」のように推定値の下限値と上限値が入っていて、単位も「m」と「km」が混在しています。

 推定サイズの下限値と上限値を切り分けて、サイズの単位も統一する必要があります。

 サイズの推定値の列を、記号「-」で分割処理をして、「下限値」と「上限値」の2列に分けておきます。

 パワークエリの「値の置き換え」処理で、最初に「km」を「x1000」という文字列にします。次に、「m」を「x1」にします。「x」の文字は記号でも何でもいいです。

 そうすると、「1.3km」は「1.3x1000」に、「270m」は「270x1」といった文字列に置き換えられます。

 次に、「列の分割」処理で、「x」の文字によって列を分割します。「1.3」と「1000」、「270」と「1」という形で2列に分割されるので、後はこの2列の型を数字にし、「カスタム列」の追加で、列と列の掛け算をするだけです。
 
 Excelのシートでもこの方法は可能でしたので、1回限りの処理であれば、IF関数などを工夫する必要はなかったのかもしれません。



▼NEOの推定値で、「km」を「m」に変換する:Excel関数移植版

 パワークエリの「列の追加」メニューで「カスタム列」を選び、「カスタム列の式」の欄に、下記の「 」内の関数を記入する方法です。Excelの関数の内容をパワークエリのM言語の関数に書き換えたものを記入します。

 パワークエリでは、「if then else」文で変換処理を行っています
 
 Number.FromText関数を使って、抽出した文字を数字にして、掛け算ができるようにしています。


 文字がたくさんありますが、「
Estimated Diameter.1」は列の名前です。

 なお、事前にサイズの推定値の列を、記号「-」で分割処理をして、「下限値」と「上限値」の2列に分けておきます。


 M言語の処理対象の「列名」を変更することで、サイズの推定値の「下限値」と「上限値」の両方を簡単に単位変換できます。

 
Excel関数とパワークエリの関数の大きな違いは、Excel関数の対象が「セル」単位であるのに対して、パワークエリの場合は「列」単位である点にあると思います。

 Excel関数は、必要なセルのすべてにコピペしないといけませんが、パワークエリの関数の記述は1回だけです。コピペ漏れなどの危険性はありません。


 しかし、同じマイクロソフトなのに、Excel関数とPower QueryのM言語の関数の互換性については考えていないのでしょうか。縦割り組織の弊害なのでしょうか。参照するテキストの位置が異なっていたりするのも、意図的なものなのでしょうか。
 
 Excelでの蓄積が活かせないというのはどうかと思います。せめて、関数間の翻訳機能を用意してほしいと思います。


パワークエリでの関数の例:
「 if(Text.PositionOf([Estimated Diameter.1],"k")>0) 
then Number.FromText(Text.Start([Estimated Diameter.1],Text.PositionOf([Estimated Diameter.1],"k")-1))*1000 
else Number.FromText(Text.Start([Estimated Diameter.1] , Text.PositionOf([Estimated Diameter.1],"m")-1)) 」

※Excelの関数の例:
「=IF((IFERROR(FIND("k",I2),50)=50),LEFT(I2,FIND("m",I2)-1),LEFT(I2,FIND("k",I2)-1)*1000)*1 」



Excelの関数との対応関係

FIND 関数 → 
Text.PositionOf 関数・・・当該文字の位置の数字を返します。当該文字がないと「-1」を返します

LEFT 関数 → 
Text.Start 関数






▼パワークエリで可能な前処理は、パワークエリで処理し、コードが必要な場合は、「R」などを利用するのか、パワークエリのM言語を使うのかを検討するのがよさそうです


 パワークエリの登場によって、簡単な前処理をコードを記述して処理する必要はなくなっています。

 結論としては、パワークエリで簡単にできる処理は、パワークエリを利用するのが正解のようです。



☆関連記事
▼NASAのNEO(地球に接近した小惑星)のデータの分析:データを「R言語」で前処理するコード:データを随時更新する場合は、繰り返し作業を「コード化」するのが一番です 

▼8月21日放送のフジテレビ「とくダネ!」で「直径160mの小惑星が今月末に最接近」という話題がありましたが、地球にはあまり接近しないようです

▼地球に接近したNEOの日別の個数をMicrosoft Power BIで表示してみました

▼【平均値の差の検定をしてみました】地球に接近する小惑星の数の10月と8月の平均値には、統計的に有意な差が見られます

▼地球に接近する小惑星の数が多いのは10月頃?。少ないのは8月?:月別にかなり違いが見られます:Microsoft Power BI Desktopは、無料で利用できる、インタラクティブなインフォグラフィック作成ツールです


▼データ前処理の例(その2):Microsoft Power BI用データを準備するための処理の例:NASAのNEOデータをダウンロードし、英語の月名を含む日付の文字列を日付データに変換して、Power BIに読み込む

▼Microsoft Power BI用データを準備するための前処理の例です:NASAのNEOデータをダウンロードし、小惑星の大きさの推定値をExcelで取り出し、単位変換して、Power BIに読み込む

▼地球をかすめた小惑星「2019 OK」は、0.2LD以下の距離に接近したNEOの中で過去最大だったようです:NASAの1万3千件以上のNEOデータから

▼小惑星「2019 OK」は、過去3年間に0.2LD以下まで地球に接近したNEOの中でも最大でした:NASAのNEOデータをPower BIで分析してみました

▼【グラフを追加しました】:小惑星「2019 OK」はOKでしたが・・・:7月25日に地球とニアミスした、今年最大の小惑星の名前です。


 







Last updated  2019.09.09 04:09:17
コメント(0) | コメントを書く
2019.09.05
カテゴリ:Tips_Office
​​ NASAのサイト(https://cneos.jpl.nasa.gov/ca/)から、「2019 OK」のようなNEO(Near Earth Object:地球に接近する小惑星)のデータをダウンロードすることができます。

 そのデータの前処理をして、グラフを作成したりする作業をできるだけ自動化してみたいと思います。

 最終的には、API接続でデータを取り込んで、ということがいいのかもしれませんが、一見したところ、APIのデータにはNEOの大きさの推定値が含まれていないような気がします。

 API接続は、今後の課題としながら、ダウンロードしたデータの前処理をいかに自動化できるのかを考えてみました。

 ExcelやPower BIのPower Query(パワークエリ)を利用して前処理をするという方法もありますが、今回はRpubsでNASAのNEOデータの前処理をする「R」のコードを見つけたので、そのコードに継ぎ足しをしたコードでの処理方法を検証しています。
 
 なお、最初の一部分だけ、Power Query(パワークエリ)を利用しています。

▼「R」のコードによるNASAのNEOデータの前処理
 
1)NASAのサイトから、データをExcel形式でダウンロードして、Excelのパワークエリで年月日の文字列を分割処理
 
 データの2列目の「年月日時刻」の「±」の右側の数字を削除して、日付時刻データにしたいのですが、「R」での処理では、ゴミが残ってしまうので、Excelのパワークエリを用います。

 まず、NASAから、過去に5LD以下の距離まで地球に接近したNEOのデータをExcel形式でダウンロードして保存します。

 次に、クエリ処理用のExcelファイルを新規作成します。ダウンロードしたExcelファイルを「データ取得」の対象にします。

 パワークエリエディターでデータの2列目の「年月日時刻」の列を「±」の記号で列分割します。分割してできた「±」記号の右側の数字の列を削除します。

 右端の列に列名を設定します。


 クエリを適用してできたデータの表をCSV形式で保存します。

 以上で、Excelの処理は終了です。まとめると下記のような流れになります。


◆Excelでのパワークエリの処理の流れ 

ダウンロードした「データファイル1」 → クエリの対象にする → クエリの編集 → クエリを適用して作成した「データファイル2」 → 「データファイル2」をCSV形式で保存

 Excelでのパワークエリの処理は、このような流れになっているので、「データファイル1」は元のままです。「データファイル1」を開いて、何か変更するということはありません。
 
 「データファイル1」のデータをクエリの処理対象にします。クエリを編集し、クエリで処理したデータが「データファイル2」で、この「データファイル2」を使います。

 「クエリ」の処理手順は保存されているので、データが更新されたら、クエリでデータを読み込み、「クエリ」を適用して、「データ2」を更新します。

 「クエリ」は一度作成しておけば、繰り返して使えるので、「R」の「コード」で処理するのと同じようなものです。「クエリ」自体が「コード」なので、当然ですが。

 ということで、「前処理」の手順が「クエリ」として保存されていることになります。クエリのExcelファイルは、「NASA_NEO_Query」とか、適当な名前を付けて保存しておきます。



2)CSV形式で保存した「データファイル2」を「R」(「R Markdown」)に読み込みます

 CSVファイルを読み込んで、「R Markdown」で前処理とレポート作成を行います。

data <- read.csv('cneos_closeapproach_data.csv',fileEncoding = "utf8",stringsAsFactors = FALSE)


3)「R」でデータのクレンジング、前処理を行います:​こちらのサイトのコード​が元になっています。


 元のコードが対象としているデータは、今回NASAからダウンロードしたデータと同じ形ではないので、元のコードに継ぎ足しをしたり、変更したりする必要があります。

☆列名(変数名)が長いので、短い名称に変更します。

names(data) <- c('Object', 'Date', 'D_n', 'D_m', 'V_r', 'V_i', 'H', 'Diameter','obj')

☆年月日の文字列を日付データの型に変換します。
 Excelのクエリで、すでに年月日の文字列になっているので、「R」ではデータ型を変換するだけです。

☆グラフ作成や分析用に年と月などの数字を抽出しておきます。日付の列を分割する形で抽出するので、日付の列を「Datetime1」として複製し、その複製した列を分割して「year」「month」などを抽出します。

data$Datetime <- as.Date(data$Date)
data$Datetime <- as.POSIXct(data$Datetime)
data$Datetime1 <- as.POSIXct(data$Datetime)
data <- tidyr::separate(data,col = Datetime1,into = c("year","month","day","time"))


☆「Object」の名前にある「()や[]」を削除します。これは、元のコード通りです。


☆1つのセルに2つのデータが入っている、地球への接近距離のデータ「LD au」を切り分けます。

 切り分け記号の「 」の前後の半角の空白の有無で、結果が変わるので、注意が必要です。これは、Excelのパワークエリで行ってもいいかもしれません。

data <- tidyr::separate(data,col = D_n, into = c("Dn_ld","Dn_sep","Dn_au"), sep = " | ")

data <- tidyr::separate(data,col = D_m, into = c("Dm_ld","Dm_sep","Dm_au"), sep = " | ")

data <- data[, !(colnames(data) %in% c("Dn_sep", "Dm_sep"))]

data$Dn_ld <- as.numeric(data$Dn_ld)
data$Dn_au <- as.numeric(data$Dn_au)
data$Dm_ld <- as.numeric(data$Dm_ld)
data$Dm_au <- as.numeric(data$Dm_au)


☆1つのセルに2つのデータが入っている、NEOの大きさの推定値のデータ「下限値-上限値」を切り分けて、kmの単位をmに変換します。

 以前は、Excelシートで関数を用いて処理していましたが、「R」のコード例があったので、それを利用してみました。

 最初、元のコードでは、処理がうまくいきませんでした。

 ダウンロードしたデータの「下限値-上限値」の「下限値-」と「上限値」間のスペースが一定していないのが原因のようです。そこで、事前にスペースを削除してから処理するとうまくいきました。
 
 なお、コードにあるスペースも正規表現の一部になっているので、削除して詰めます。


 それから、欠損値の行を削除しておかないと「if文」が動かなかったので、欠損値の行を削除しました。

  「na.omit」のコードでは、「Diameter」の列を指定して、「Diameter」で、欠損値のある行を削除するようにしているつもりですが、「cols="data$Diameter"」が機能せず、他の列に欠損値がある行も削除されてしまいます。

 元データの行数(データ数)は、n=2838でしたが、欠損値のある行の削除処理の結果、n= 2822となりました。「Diameter」の列の欠損値のある行の削除だけであれば、このデータでは、1行の削除で済むはずなので、処理方法は今後の課題です。Excelのパワークエリで処理しておいてもいいかもしれません。

data$Diameter <- gsub(' ', '', data$Diameter)
data <- na.omit(data, cols="data$Diameter")


 元のコードは、「str_match」と正規表現を活用し、「60m - 130m」といった推定値を、「数字」「単位」「 - 」「数字」「単位」という5つの部分に分け、「if文」を使って距離の単位を変換するコードで、勉強になりました。


4)基本的なグラフを作成するコード:今後充実予定


「R Markdown」を利用する理由は、レポート更新の自動化です。基本的なグラフがデータ読み込みと同時に作成されるようにしたいと思います。


▼前処理したデータの要約を出力します。


summary(data)


 
▼データ数が多いので、グラフ作成対象データを絞り込みます。

☆2010年以降のデータに絞ります。

data <- data[data$year >= "2010",]
​​​​​​​​​​​​
☆地球に1LD以下の距離まで接近したNEOに絞ります。
data <- data[data$Dn_ld <= 1,]


<グラフ例>

▼横軸:接近日、縦軸:接近距離(LD)

 特に、傾向はないようです。ランダムに分布しているようです。

ggplot(data, aes(y = Dn_ld, x = Datetime)) + ​
  geom_point()  + 
  theme_bw(base_size = 14)



▼年別のNEOの接近距離(LD)の分布

ggplot(data, aes(y = Dn_ld, x = year)) + 
  geom_boxplot()  + 
  theme_bw(base_size = 14)



▼年別のNEOのサイズ(推定の下限値)の分布

ggplot(data, aes(y = size_low, x = year)) + 
  geom_boxplot()  + 
  theme_bw(base_size = 14)


▼横軸:距離(LD)、縦軸:推定サイズの下限値、点の大きさ:推定サイズの下限値

ggplot(data, aes(x = Dn_ld , y = size_low , size = size_low)) + 
  geom_point()


▼月別のNEOの観測数

 6月~8月は、観測数が少ない時期のようです。

ggplot(data, aes(x = month)) +
  geom_bar(stat = 'count')


▼年別のNEOの観測数

ggplot(data, aes(x = year)) +
  geom_bar(stat = 'count')



☆参考にしたページ:
​​​​​​Analysis of the Near Earth Object Asteroid Dataset:Kory Becker - October 21, 2015
(http://www.rpubs.com/primaryobjects/asteroids)


☆関連記事
▼8月21日放送のフジテレビ「とくダネ!」で「直径160mの小惑星が今月末に最接近」という話題がありましたが、地球にはあまり接近しないようです


▼地球に接近したNEOの日別の個数をMicrosoft Power BIで表示してみました

▼【平均値の差の検定をしてみました】地球に接近する小惑星の数の10月と8月の平均値には、統計的に有意な差が見られます

▼地球に接近する小惑星の数が多いのは10月頃?。少ないのは8月?:月別にかなり違いが見られます:Microsoft Power BI Desktopは、無料で利用できる、インタラクティブなインフォグラフィック作成ツールです


▼データ前処理の例(その2):Microsoft Power BI用データを準備するための処理の例:NASAのNEOデータをダウンロードし、英語の月名を含む日付の文字列を日付データに変換して、Power BIに読み込む

▼Microsoft Power BI用データを準備するための前処理の例です:NASAのNEOデータをダウンロードし、小惑星の大きさの推定値をExcelで取り出し、単位変換して、Power BIに読み込む

▼地球をかすめた小惑星「2019 OK」は、0.2LD以下の距離に接近したNEOの中で過去最大だったようです:NASAの1万3千件以上のNEOデータから

▼小惑星「2019 OK」は、過去3年間に0.2LD以下まで地球に接近したNEOの中でも最大でした:NASAのNEOデータをPower BIで分析してみました

▼【グラフを追加しました】:小惑星「2019 OK」はOKでしたが・・・:7月25日に地球とニアミスした、今年最大の小惑星の名前です。



[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

Rではじめるデータサイエンス [ Hadley Wickham ]
価格:4320円(税込、送料無料) (2019/9/14時点)










Last updated  2019.09.14 07:00:18
コメント(0) | コメントを書く
2019.09.04
カテゴリ:Tips_Office
​​​​​​  

 19年6月現在の​Antutuスコア​で、Androidスマホのベンチマークランキングを見てみました。

 6月現在のランキングなので、Galaxyの新製品「Galaxy Note10+」「Galaxy Note10」は対象になっていません。

 トータルスコアで最も高いのは、「OnePlus 7 Pro」、僅差で「Mi 9」「Mi BlackShark 2」「Redmi K20 Pro」「OnePlus 7」が続いています。いわゆるゲーミングスマホが上位を占めています。

 SonyのXperia 1が健闘していて、Galaxy S 10を上回っています。

▼トータルスコア
​​​​


▼CPUスコア、UXスコア、3Dスコア

 差が大きいのは3Dスコアです。UXスコアはそれほど大きな差はないようです。





▼横軸:CPUスコア、縦軸:UXスコア




▼横軸:CPUスコア、縦軸:3Dスコア

 Galaxy S10の3DスコアはCPUスコアの割には高いようです。HUAWEIの端末は、CPUスコアの割に3Dスコアが低めです。

​​​​


海外GSM携帯販売のジャパエモ​

​中古スマホとsimフリーの携帯少年​

​中古スマホとタブレットのイオシス​


▼Antutuのサイトから、データをスクレイピングして前処理
 
 Power BIでは、AntutuのWebサイトへの接続に失敗したので、Excelを使うことにしました。Power BIは発展途上のようで、頻繁に更新があります。

 ExcelのPower Queryで、データ取得、前処理を行いました。

 Antutuのサイトのランキング表のあるページのURLを入力すると、ランキング表をデータ取得対象に設定できます。

 Power Queryエディターで、「機器名称の前にある順位の数字の削除」「メモリ容量の数字の抽出」などの前処理を行います。GUIの操作でできるので、簡単です。

▼機器名の左の順位の数字を削除します

 「機器名称の前にある順位の数字の削除」は、「1位~9位まで」の一桁の数字と「10位以下」の二桁の数字の2種類がありますが、「例から列を追加する」のメニューで、右側の「カスタム」欄に、一桁用の「例」と二桁用の「例」を記入すると自動的に処理してくれます。コードを考えたり、記述したりしなくていいので簡単です。




▼メモリやストレージの「8GB」「128GB」の数字を抽出します

 数字と文字で列を分割して、「GB」の列を削除しました。
 


▼Power Queryの編集を終えて、「閉じて適用」とすると、データがクエリの前処理を経て読み込まれます。



 後は、このデータテーブルをPower BIに読み込んでグラフ類を作成するだけです。

 Power Queryの前処理の能力はかなり高いと思います。簡単な処理内容であれば、GUIですぐにできます。

 単純な処理は、Power Queryを用いて、複雑な場合はRのコードを利用するなど、組み合わせて活用すると、作業効率が向上しそうです。

 列の分割や数字の抽出などかなりのことがPower Queryでできるので、Excelのシートでデータの整形やクレンジングをすることは、極力避けた方がいいと思います。

 Power Queryであれば、誤って作業中にセルの数字を消したりすることもありません。​​​​​​​​​​​​​​​処理の内容もすべて記録され、元のデータもそのまま残っていて、処理の適用の取り消しも簡単です。


☆関連記事
▼世界の月平均気温偏差(℃)は、6月に続いて、7月も2019年が過去最高になりました:データの取得と前処理をPower BIのPower Query で行ってみました:Power Query はデータの前処理に役立つツールです





​​​​​​






Last updated  2019.09.08 06:11:36
コメント(0) | コメントを書く
2019.09.03
カテゴリ:Tips_Office
​​​​ 気象庁のサイトに「世界の月平均気温偏差(℃)」というデータがあります​。これは、各月の平均気温の基準値との差を示すものです。基準値は「1981〜2010年の30年平均値(℃)」です。 

 世界の2019年7月の月平均気温偏差(℃)は、「1981〜2010年の30年平均値」に対して「+0.44℃」で、過去最高を記録しました。6月の月平均気温偏差も、基準値に対して「+0.45℃」で、過去最高を記録しています。

 世界的に、今年の夏は暑かったようです。
​​
▼7月の世界の月平均気温偏差(℃)




▼6月の世界の月平均気温偏差(℃)



▼1980年からの世界の月平均気温偏差の時系列推移(月別:7月まで)



▼Power BIやExcelの「Power Query(パワークエリ)」とは何?

 今回、世界の月平均気温偏差(℃)のデータは、気象庁のサイトから
Power BIの「Power Query(パワークエリ)」を利用して取得しました。

 では、「Power Query(パワークエリ)」とはどういうものなのでしょうか。

 一言で言うと、「Power Query」は「データの読み込みや前処理などを行うツール」ということになります。データの整形、抽出、削除、置き換え、結合など、データを操作するのが「Power Query」です。

「R言語」などでは、コードを記述して、データの取得や前処理を行いますが、「Power Query(パワークエリ)」ではかなりの作業をGUI(グラフィカルユーザーインターフェース)で行うことができます。そのGUIの裏側には、「Power Query」のコード(M言語)があるので、見かけと使い勝手は「R」と異なりますが、機能的には「Rの前処理のコード」と同類のものになります。

 「R」の前処理のコードは、同じ作業を繰り返す場合に役立ちますが、「Power Query(パワークエリ)」も同様に、データの処理手順が記録されているので、同じ作業を繰り返す場合に役立ちます。

 つまり、「Power Query」は、あるデータを整形、クレンジングして、「分析対象データ」を得るためのツールで、下記のように「R」コードと同じような働きをします。

 「データ」 → 「クエリによる前処理」 → 「分析対象データ」

 「データ」 → 「Rコードによる前処理」 → 「分析対象データ」 


▼クエリが対象とするのは、「データベーステーブル」です

 Excelのシートにあるデータをクエリの対象にする場合は、「データ」メニューの「データの取得」から始めますが、その際、データの表が「テーブル」に変換されます。
 
 「テーブル」は、データベースアプリのAccess(アクセス)の「テーブル」をイメージするとわかりやすいと思いますが、一種のデータベースです。

 「テーブル」は、「列が変数で、1行が1レコード」の形のデータベースで、データを「テーブル(データベース)」形式にすることによって、単に数字が並んでいるシートとは異なり、「列(変数)」単位でのデータ操作ができるようになります。




▼Power BIやExcelの「データの取得」メニューでは、Webページからデータをスクレイピングできます​​

 取得したいデータのあるページのURLを記入するだけです。



 Power BIが、対象のページを解析して、「データ表」を表示します。



 Power BIの「データの取得」で、Webページ内の表からデータを得る場合、右下の「データの変換」ボタンをクリックすると、Power Query エディターの画面になります。
 
 Power Query エディターで、「1行目をヘッダーにする」「列名の設定・変更」「列のピボットの解除」「年のテキストから年の数字の抽出」「月のテキストから月の数字の抽出」などの前処理をGUIで設定することができます。​

 Power Query エディターの画面では、データが表示されますが、あくまでもデータのイメージが表示されているだけで、Power Query エディターの画面で個々のセルのデータを書き換えたりするわけではありません。
 
 Power Query エディターの画面では、列単位、行単位でどのような前処理を行うのか、という処理の内容を設定するだけです。 


▼Power Query エディターで、「1行目をヘッダーとして使用」の処理をすると、取得対象データの1行目が列名になります

​​​


▼1月から12月の列を選択した状態で、右クリックし、「列のピボット解除」を選択して、月別のデータが横方向(行方向)になっているのを、縦方向(列方向)のデータに変換します




▼「列のピボット解除」を行うと月別のデータが縦方向(列方向)に変換されます




 クエリの処理は、画面の右端の「処理のステップ」欄に処理の順に一覧が表示されています。この「処理のステップ」を削除すれば、処理を取り消すことができます。処理を簡単に取り消すことができるので、気軽に試行錯誤をすることもできます。


▼年のテキスト「1891年」から数字「1891」を取り出した列を追加する

 Power BIのグラフ作成では、年や月の「数字」だけのデータがあると便利なので、年や月の数字だけを取り出した列を追加します。 

 年の列を選択し、右クリックで表示されるメニューで「例から列を追加する」を選択します。サンプル値の入力窓が開いたら、「1891年」の行から「1891」を取り出すので、抽出後のイメージの「1891」を入力して「OK」をクリックします。すると、年の列から年の数字だけを抽出した列が追加されます。
 プルダウンで候補が表示されるので、候補から選ぶこともできます。




 月のテキスト「1月」から数字「1」を取り出した列を追加する場合も、同様の方法で、サンプル値に「1」を入力して「OK」をクックします。
 
 このように、Power Query エディターには、よくある処理のパターンがメニューに登録されていて、GUIで選択するだけで適用できるようになっています。 

 Power Queryの設定が終了したら、「閉じて適用」をクリックします。元のデータに対して、設定したクエリの処理が行われ、クエリ処理後のデータを得ることができます。

 Power BIは、クエリ処理後のデータを用いて、グラフ作成などを行います。なお、元のデータは変更されず、元の形で残っています。



▼Power BIとExcelのPower Query エディターは、全く同じではないようです

 Power BIとExcelのPower Query エディターは、基本機能は同じだと思いますが、ExcelのPower Query エディターでできたことが、Power BIでできない場合がありました。

 Power BIのPower Query エディターで、「年月」のテキスト型の列を「年月日」の日付型の列に変換しようとしましたが、エラーになってしまいます。ExcelのPower Query エディターでは変換できるので、アプリによって違いがあるようです。
 
 Excelには、「10-23」というセルも強制的に「10月23日」にしてしまうような、きわめて強力な「日付の重力」があるので、「なるほど、Excelらしい」と、妙に納得してしまいました。

 Power BIとExcelのどちらのPower Query エディターを利用すればいいのか、悩ましいところです。​​​

 Power BIのグラフ・レポート作成機能はすぐれているので、Power BIでアウトプットすることを想定すると、Power BIで前処理もできれば、Power BIで一連の処理が完結するので、シンプルで一番よいと思います。
 しかし、Power BIでエラーになる前処理は、Excelで試してみるということも必要かもしれません。

 Power BI以外でもデータを利用したい場合は、当然
ExcelのPower Query エディターを利用することになります。今のところ、Power BI Desktopから前処理済みのデータを書き出す機能がないようです。

 ただし、データ書き出し機能がなくても、
Excelでデータを入手する方法はあります。

 今回のようにWebサイトからデータを取り込むようなクエリの場合でも、Power BIの「詳細エディター」で表示される処理コードを、Excelの「空のクエリ」の「詳細エディター」に貼り付ければ、Power BIと同じようにExcelでもWebサイトからデータを取得することができます。逆に、Excelで作成したクエリの「処理コード」をPower BIに貼り付けることもできます。

 とりあえず、クエリで前処理したデータの汎用性を考えると、ExcelのPower Query エディターを利用するのがよさそうです。


※気象庁のサイト(http://www.data.jma.go.jp/cpdinfo/temp/list/mon_wld.html)

▼下記は、今回の
Power Queryの処理コードの例です(GUIの操作で自動的に作成されたコードです。このコードが、Power Queryの正体のようなものです):このコードを「詳細エディター」に貼り付ければ、気象庁のサイトからデータをスクレイピングして、データの前処理をすることができます。
​​-----------------------------------------------------
let
    ソース = Web.Page(Web.Contents("https://www.data.jma.go.jp/cpdinfo/temp/list/mon_wld.html")),
    Data0 = ソース{0}[Data],
    変更された型 = Table.TransformColumnTypes(Data0,{{"Column1", type text}, {"Column2", type text}, {"Column3", type text}, {"Column4", type text}, {"Column5", type text}, {"Column6", type text}, {"Column7", type text}, {"Column8", type text}, {"Column9", type text}, {"Column10", type text}, {"Column11", type text}, {"Column12", type text}, {"Column13", type text}}),
    昇格されたヘッダー数 = Table.PromoteHeaders(変更された型, [PromoteAllScalars=true]),
    変更された型1 = Table.TransformColumnTypes(昇格されたヘッダー数,{{"Column1", type text}, {"1月", type number}, {"2月", type number}, {"3月", type number}, {"4月", type number}, {"5月", type number}, {"6月", type number}, {"7月", type number}, {"8月", type number}, {"9月", type number}, {"10月", type number}, {"11月", type number}, {"12月", type number}}),
    #"名前が変更された列 " = Table.RenameColumns(変更された型1,{{"Column1", "年"}}),
    ピボット解除された列 = Table.UnpivotOtherColumns(#"名前が変更された列 ", {"年"}, "属性", "値"),
    #"名前が変更された列 1" = Table.RenameColumns(ピボット解除された列,{{"属性", "月"}, {"値", "平均気温偏差"}}),
    追加されたカスタム = Table.AddColumn(#"名前が変更された列 1", "カスタム", each Text.Combine({[年], "年",[月]})),
    挿入された年 = Table.AddColumn(追加されたカスタム, "年.1", each Date.Year(Date.From([年])), Int64.Type),
    追加されたカスタム列 = Table.AddColumn(挿入された年, "カスタム.1", each Text.Combine({Text.Start([カスタム], 5), Text.Middle([カスタム], 6), "1日"}), type text),
    挿入された月 = Table.AddColumn(追加されたカスタム列, "月.1", each Date.Month(Date.From([月])), Int64.Type),
    #"名前が変更された列 2" = Table.RenameColumns(挿入された月,{{"月.1", "月_n"}}),
    変更された型2 = Table.TransformColumnTypes(#"名前が変更された列 2",{{"カスタム.1", type date}}),
    #"名前が変更された列 3" = Table.RenameColumns(変更された型2,{{"年.1", "年_n"}})
in
    #"名前が変更された列 3"

------------------------------------------------

▼温暖化が進行している地球の夏を乗り切るためのグッズを楽天市場で検索​

楽天市場で「冷却枕」を見る

楽天市場で「Nクール」を検索する​

​楽天市場で「USB扇風機」のランクイン商品を検索する​​​

楽天市場で「ネッククーラー」を見る​


☆関連記事
​​▼「世界の平均気温偏差(℃)」のデータの前処理が、ExcelのPower Query エディターでもできました:Power Queryエディターは便利です!:簡単に行方向のデータを列方向にできます

▼気象庁の「世界の月平均気温偏差(℃)」のデータを、Accessのユニオンクエリで、横方向から縦方向にデータ形式を変換し、簡単に複数グラフの一覧を作成しました


▼世界の月平均気温偏差:6月は、2019年が過去最高になりました:7月も今年が過去最高水準に?



​​






Last updated  2019.09.08 06:12:49
コメント(0) | コメントを書く
2019.08.30
カテゴリ:Tips_Office
​​​​​​​​​​​​​ 楽天市場ランキング上位のレディース・ボトムス、「zootie:エアパンツ」の商品レビューの分析をしました。レビュー数は、17,000件を超えていますが、今回はスクレイピング可能な1500件のうち510件のレビューデータを取得しました。

 「購入した回数」では、「リピート」というレビューが189件となっていて、「はじめて」よりも多くなっています。
 


カラー​バリエーションがとても豊富​



▼レビューの日付の分布

 レビューの日付の分布を見ると、公開されているレビューは、過去2年間のものであることがわかります。春、夏、秋のレビューが多いようなので、春、夏、秋に向いているパンツであることがうかがえます。




▼レビュー件数の月別推移


▼性・年代別、性別、年代別にみたレビュー件数<スクレイピングしたレビューデータの確認>

 スクレイピングデータでも、全体のデータと同様に30代~40代がユーザーの中心になっています。




▼「購入した回数」別のレビュー件数:「リピート」の方がやや多くなっています



「購入した回数」が「はじめて」のレビューの「見出し」





「購入した回数」が「リピート」のレビューの「見出し」



 以下は、「ユーザーローカル テキストマイニングツール( https://textmining.userlocal.jp/ )で分析」

▼「購入した回数」が「リピート」(n=189)のレビュー中の単語によるワードクラウド



▼「購入した回数」が「リピート」のレビューでの単語の出現頻度

 名詞で「デニム」「ブラック」といった単語の出現頻度が高いのは、「リピート」で購入した商品のことのようです。

 動詞では、「伸びる」の出現頻度が高くなっています。

 形容詞で出現頻度が高い「やすい」は、「はきやすい」「うごきやすい」などの一部のようです。




▼「購入した回数」が「リピート」のレビューの単語の共起分析

 単語の共起分析では、「履く(はく)」と「やすい」、「動く」と「やすい」、「心地」と「良い」、「ストレッチ」と「きく」、「違う」と「色」と「欲しい」などの共起関係が見られます。




▼「購入した回数」が「リピート」のレビューの単語の2次元マップ




▼「購入した回数」が「リピート」のレビューの単語の「係り受け分析」








▼「購入した回数」が「リピート」のレビューの単語の階層クラスター分析

 「心地」「よい」といった単語と、「生地」「ストレッチ」といった単語が近い関係にあることがわかります。



 今回、商品レビューを分析したパンツでは、色違いを複数そろえている人も見られました。「リピート」が多いということは、この商品に対する利用者の満足度の高さを示していると思います。


--------------------------------------------------------------
▼「利用者サイズ」の項目のあるレビューが含まれていたので、Rコードの変更が必要でした

 「ファッション」ジャンルの商品のスクレイピングは、今回が初めてですが、以前のレビューには、「利用者サイズ」という項目がありました。そこで、「利用者サイズ」の項目を設けて、コードを変更しています。

 いずれ、古いレビューは表示されなくなるはずなので、1500件以上のレビューがある場合は、この変更も不要になると思われます。

 試行で書き出したcsvファイルには、<U+00A0>という文字列が見られました。これは、Unicodeの「ノーブレークスペース」だそうで、確かにページのソースにその文字列があったので、コードで削るようにしました。


​☆関連記事​
▼【再改訂版コード】:「R言語」による楽天市場の商品レビューのスクレイピングコードの再改訂版:グラフ作成コードなどを追加:「素焼きアーモンド」の商品レビューのデータを取得:意外と多い「はじめて」の購入

▼「R言語」による楽天市場の商品レビューのスクレイピングコードの改訂版です:Excelで項目を切り分ける作業が不要になりました

▼楽天市場の
特定の商品のレビューを「R言語」でスクレイピングするコード:一部の項目の空欄・欠損値(missing values)を「NA」に置き換えてデータフレームを作成:継ぎはぎのコードですが・・・


▼JPRiDEの新モデル・完全ワイヤレスイヤホン「JPRiDE TWS-520」のアマゾン・カスタマーレビューのテキストを分析

▼「JPRiDE」ブランドのワイヤレスイヤホン「JPRiDE 708」の楽天市場のレビューのテキストを分析:ReviewMetaでアマゾンのカスタマーレビューの信頼性の高さを推定できるJPRiDEの製品​​

▼雑誌など第3者の高評価をアピールしている「JPRiDE(ジェイピー・ライド)」ブランドのワイヤレスイヤホン「JPA2」の楽天市場のレビューのテキスト分析です


▼JVCケンウッドの高評価イヤホン「HA-FX3X」とソニーの「MDR-EX450」のカスタマーレビューを比較

▼3000円クラスの高評価イヤホン「HA-FX3​のカスタマーレビューのテキスト分析を「User Local」の「AIテキストマイニング」で行ってみました:こんな分析ツールがあったとは、驚きです

▼カスタマーレビュー分析で、Microsoft Power BIの「Word Cloud」とスライサーの組み合わせは便利です:3000円クラスで、高評価のイヤホン「HA-FX3X」のカスタマーレビューのテキスト分析

▼アマゾンのカスタマーレビューを購入の判断材料にする場合、「ReviewMeta」(レビューメータ)によるチェックが役立ちます


​▼先日購入したイヤホン「HA-FX3X」のアマゾン・カスタマーレビュー分析:低音の良さ、コスパなどが高評価の理由のようです​:3000円クラスで、高評価のイヤホンです​
 ​​​​​​​​



[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

Rではじめるデータサイエンス [ Hadley Wickham ]
価格:4320円(税込、送料無料) (2019/9/14時点)





​​​​






Last updated  2019.09.14 07:14:32
コメント(0) | コメントを書く

全37件 (37件中 1-10件目)

1 2 3 4 >

PR

Recent Posts

◆アマゾン・プライム・ビデオ:「プライミーバル(Primeval)」シーズン1、エピソード1を観ました
◆How Windows Sonic looks like.​​:Windows Sonic for Headphonesの音声処理の特徴:7.1.2chテストトーンの録音データ分析の続編です:周波数、レベル、時間差の組み合わせで立体音響を表現?
◆How Windows Sonic looks like.​​:Windows Sonic for Headphonesの音声と2chステレオ音声の比較:7.1.2chテストトーンの比較で明らかになった違い:一目で違いがわかりました
◆Netflixで「FLASH(フラッシュ)」のシーズン1を見ています:Dolby Atmos for Headphones(ドルビー・アトモス・フォー・ヘッドホン)の効果を視覚化してみました
▼楽天市場の商品レビューの分析:【R】のコードで半自動化を目指します:カレンダーヒートマップ編
◆iPhone 11 is Dolby Atmos compatible, the new 10.2-inch iPad is Dolby Digital Plus compatible: The problem is compatible content: Will Apple TV+ be the source ?
▼NASAのNEOデータの可視化の試み:「R」によるアニメーショングラフ:小惑星(Asteroid)の散布図です
▼iPhone11はDolby Atmos対応、新しい10.2インチiPadはDolby Digital Plus対応です:しかし、問題は対応するコンテンツが配信されるのかどうかです:Apple TV+はモバイル端末向けのDolby Atmosなどのサラウンドサウンドのコンテンツ源になるのでしょうか?
▼楽天市場の商品レビューの分析:【R】のコードで半自動化を目指します:テキストマイニング編
▼ブルーレイレコーダーが普及していない米国の録画機器事情:ソニーのnasneのようなネットワーク接続のハードディスクレコーダー(DVR)が全盛のようです

Category

Archives

Calendar

Comments

Rakuten Card

Rakuten Ranking

Free Space


Copyright (c) 1997-2019 Rakuten, Inc. All Rights Reserved.