データ分析

RedashはPieチャートの配色が自動的に決定される


皆さんこんにちは、昨晩坂道ダッシュ*3して下半身筋肉痛のリンクバル佐藤です。

唐突ですが、弊社では社内向けダッシュボードにRedashを使用しています。

ところで

Redashとは

Redashはデータを簡単に可視化してデータをシェアできるツールです。
データ・ソースはRedshift・Bigquery・MySQLなどに対応しています。詳しくここ

主な特徴

  • Query
    クエリをwebインターフェイスで記述できます。
  • Visualize
    クエリ結果を9種類のフォーマットで可視化できます。
    ダッシュボードで可視化したグラフやテーブルをシェアすることができます。
  • share
    作ったデータやクエリはシェアすることができます。

続きを読む


Tableauを使って阪神タイガースを可視化してみた。


こんにちは。

エンジニアの佐藤です。

Tableau、始めました。
(有志者とともに社内勉強会開催中)

▼目次

  1. Tableauとは
  2. 阪神タイガースを可視化
  3. ディメンションとは
  4. メジャーとは
  5. シートを作成
  6. おわり

Tableauとは

Tableauとは、

タブローソフトウェア(Tableau Software)は、BI(ビジネスインテリジェンス)に特化したインタラクティブなデータの視覚化ツール。

wikipediaより抜粋

 

です。

グラフを作っているのかをブログネタにしようと企んでいたのですが・・・・

続きを読む


Pagespeedapiを使ってみた


リンクバルの船寄と申します。
web系の開発者なら、誰もがお世話になっているPageSpeed Insights
apiから利用してみたので、ご紹介させて頂きます。

やりたかったこと

  • PageSpeed Insightsを利用して、画像の最適化について指摘されている項目を抽出し、日本語かつsjiscsvファイルとして保存したい。
  • URLを記載したリストファイルを準備し、リストに記載されているURLをANALYZEしたい。
  • 実行時間をなるべく短縮したい。

やったこと

golangで使って簡単なコマンドツールを作ってみました。

実行環境は以下の通り

  • macOS Sierra 10.12.3
  • go version go1.8 darwin/amd64

事前準備

  • 公式clientを準備する
    https://github.com/google/google-api-go-client/tree/master/pagespeedonline/v2
go get google.golang.org/api/pagespeedonline/v2
  • sjisでcsvへ保存したかったので、エンコーディングパッケージを準備する
go get golang.org/x/text/encoding/japanese
  • ANALYZEするURLを記載したリストを準備する

ソースコード

結果

結果はresult.csvへ出力されます
ツールを実行することにより、下記の形式でcsvファイルを出力することができました。

実行日時 2017-03-30 13:59:22.807444599 +0900 JST
mobile/desctop mobile
対象ページのURL http://hogehoge.com
対象ページのTITLE hogehoge title
対象ページのSPEED SCORE 56
指摘ルール名 画像を最適化する
指摘内容サマリ(Summary) 画像に適切なフォーマットと圧縮を選ぶことで、データ サイズを大きく削減できます。
指摘内容詳細 http://hogehoge.com/assets/fuga.jpg を圧縮すると 113.4 KB(74%)削減できます。
指摘画像URL http://hogehoge.com/assets/fuga.jpg

※1 PageSpeed Insights画像の最適化について指摘されている箇所のみが、一行づつ出力されます。
※2 表が長くて収まらないので、縦向きに記載しております。

サイトからポチポチするより断然効率化できますよ。
ご興味ある方は使ってみてください。

リンクバルではエンジニアを積極募集中です。
興味のある方は、こちらからご応募ください!


Twitter APIとMeCabで街コンのエゴサーチをした話


社会人2年目エンジニアの関です。

突然ですがリンクバルの主要サービスと言えば・・・そう「街コン」ですね。
日頃街コンジャパンという街コンのサイトを保守・運用しているわけですが、やはり一般ユーザからのサービスへの評価が一番気になるところです。
しかしユーザ一人一人にインタビューするわけにもいかないですし、Twitterとかでエゴサーチをしようにも情報量が多すぎていまいち価値のある評価が良く分からない。
そこで今回は、Twitter APIとMeCabを使って「街コン」に関するツイートの中からより重要な単語・ツイートを分析・発見していきたいと思います。
続きを読む


【WordPress】投稿を集計するただひとつのプラグイン「Site Posts Stats」


社会人2年目エンジニアの関です。

WordPressの開発で、テーマとかプラグインを自作しているとなんだか上級者っぽい感じしませんか?かっこよくないですか?
ということで、私もかっこいい上級者に一歩でも近づきたいのでプラグインを自作してみました。

今回の制作物は以下で公開しています。
概要や画面説明などはREADME.mdを見てください。
https://github.com/hseki-luckey/site-posts-stats
続きを読む


国勢調査のデータと R を使って結婚について考える


未婚のアラフォー、堀内(♂)です。

弊社は恋愛をテーマとする会社であるためか、我ら技術部のメンバーも既婚だったり、同棲していたり、恋人持ちだったりする割合が多いようです。僕が新卒で入った技術100%みたいな会社の壊滅的な状況と比べると異次元です。まあ、技術部は30代が多いですしね。みな結婚を考える時期です。

部署の外に目をやると、イベント系の方々がたくさんいます。弊社は基本的にイベント会社なのです。新卒でも恋人持ちが多いらしく(伝聞:あまり話したことがない)、そのリア充ぶりに卒倒しそうです。そんな中で、僕に恋人がいないのは日本の政治が悪いに違いなかろうと、国勢調査のデータを調べてみることにしました。ツールは R です。

まず、「国勢調査の配偶関係データを R で取得する」で作成した、都道府県別の婚姻状況データを読み込みます。このデータは、15歳以上の日本の居住者を、都道府県毎、年齢毎、性別毎に、「未婚」「離別」「死別」「配偶関係不詳」「有配偶」に分けて記載しています。一般的には未婚、既婚の2分類を使いますが、国勢調査では婚姻関係を結んだ後の離別(離婚)と死別(配偶者の死亡)も区別しています。

census <- read.csv('prefs.csv')
attach(census)
census$age <- as.integer(sub('歳.*', '', age))
census$area_code <- as.factor(area_code)
census$area <- ordered(area, levels=unique(area))
census$marital_status <- ordered(
  marital_status,
  levels=rev(c('未婚', '離別', '死別', '配偶関係「不詳」', '有配偶'))
)
detach()

このデータは、全人口と、日本人の人口の両方を持っているので、外国人比率も参考までに押さえておきましょう。

num_of_all <- sum(census[census$nationality=='総数(国籍)',]$value, na.rm=T)
num_of_japanese <- sum(census[census$nationality=='日本人',]$value, na.rm=T)
print(sprintf(
  '全人口は %s 人、外国人居住者は %s 人で、全体の %f %% を占める。',
  prettyNum(num_of_all, big.mark=','),
  prettyNum(num_of_all - num_of_japanese, big.mark=','),
  (num_of_all - num_of_japanese) / num_of_all * 100)
)
=> [1] "全人口は 109,754,177 人、外国人居住者は 2,129,711 人で、全体の 1.940437 % を占める。"

全人口1.1億というのは少ないと思われるでしょうが、このデータには15才未満が含まれていないのです。婚姻関係を追うものですから。

15歳で結婚

参考までに、15〜18才の婚姻状態を調べてみましょう。

census %>%
  dplyr::filter(age <= 18, nationality == '総数(国籍)', marital_status == '有配偶') %>%
  na.omit() %>%
  group_by(gender, age) %>%
  summarize(population=sum(value)) %>%
  spread(gender, population)

15歳の女性が144人、男性が86人も配偶者を持っているのですね。民法では女性16歳、男性18歳から婚姻が認められますが、国勢調査の「有配偶」は、届出の有無に関係なく、実態を表しています。事実上、周囲から夫婦であると認められている状態です。一般的な言葉で言えば「事実婚」です。

続きを読む


国勢調査の配偶関係データを R で取得する


平成27年国勢調査のうち、配偶関係(婚姻関係)のデータを R で取得します。ここでは estatapi パッケージを使います。appId は、e-statのサイトで事前に取得しておきましょう。

library(estatapi)
statslist %>%
  dplyr::filter(grepl('平成27年.*配偶', STATISTICS_NAME)) %>%
  select(`@id`, TITLE) %>%
  mutate(TITLE=substr(TITLE, 0, 50))

求めるデータの @id が 0003149791 であることがわかったので、メタ情報を取得します。

metainfo <- estat_getMetaInfo(appId='xxxxx', statsDataId='0003149791')
metainfo
metainfo$cat04
# A tibble: 10 × 3
@code @name @level

1 0000 総数(配偶関係) 1
2 0010 未婚 1
3 0020 有配偶 1
4 0040 死別 1
5 0050 離別 1
6 0070 配偶関係「不詳」 1
7 0080 (配偶関係別割合(%)) 未婚 1
8 0090 (配偶関係別割合(%)) 有配偶 1
9 0110 (配偶関係別割合(%)) 死別 1
10 0120 (配偶関係別割合(%)) 離別 1

メタ情報には、様々な「コード」が入っています。上記はカテゴリ04(cat04)のコードの例。

データ取得時間短縮のため、メタ情報の @code を用いて絞り込んだデータを取得します。データ取得には数分かかります。

census <- estat_getStatsData(
  appId='xxxxx',
  statsDataId='0003149791',
  cdCat02=c('0010', '0020'), # 男、女
  cdCat04=c('0010', '0020', '0040', '0050', '0070'), # 未婚、有配偶、死別、離別、配偶関係「不詳」
  cdCat05='00710' # 全域
)
census$tab_code <- NULL
census$表章項目 <- NULL
census$cat01_code <- NULL
census$cat02_code <- NULL
census$cat03_code <- NULL
census$cat04_code <- NULL
census$cat05_code <- NULL
census$`全域・人口集中地区(2015)` <- NULL
census$time_code <- NULL
census$`時間軸(年次)` <- NULL
names(census) <- c('nationality', 'gender', 'age', 'marital_status', 'area_code', 'area', 'value')
census <- census[!grepl('総数|平均|再掲', census$age),]
census <- census[!grepl('市部$|郡部$', census$area),]
attach(census)
census$nationality <- as.factor(nationality)
census$gender <- as.factor(gender)
census$age <- ordered(age, levels=c(paste(15:99, '歳', sep=''), '100歳以上'))
census$marital_status <- as.factor(marital_status)
census$area_code <- as.factor(area_code)
census$area <- as.factor(area)

都道府県別、都市別のデータを取り出します。

census_prefs <- census %>%
  dplyr::filter(
    area_code != '00000',
    as.numeric(levels(area_code))[area_code] %% 1000 == 0
  )

census_cities <- census %>%
  dplyr::filter(as.numeric(levels(area_code))[area_code] %% 1000 != 0)

今後の利用のために CSV で保存しておきます。

write.csv(census_prefs, 'prefs.csv', row.names=F)
write.csv(census_cities, 'cities.csv', row.names=F)

この中に入っているデータは、こんな形式のものです。


リンクバルでは、Ruby と React と R を使って世の中をハッピーにしたいエンジニアを募集中です。この記事にピンと来た方は、是非ご応募ください。


アプリ開発者必見!「Amazon Rekognition」 で素早く画像分析


リンクバル技術部の中村です。
「re:Invent 2016 Amazon」で発表された、AWSの新機能「Amazon Rekognition」をつかってみました。
Amazon Rekognition は、画像の分析をアプリケーションに簡単に追加できるようにするサービスです。
画像分析のハードルが一気にさがり、アプリケーションがより便利になると感じました。

AWS マネジメントコンソールから写真をアップロードして試す。

AWSの管理画面から、簡単に動作を試すことができます。

女性の写真

aws_rekoginition_woman

人であること、女性であることなどを判定しています。

海の写真

aws_rekoginition_sea

海の写真であることなどを判定しています。

料金

使った枚数だけ、課金されます。
オレゴンリージョンの例を挙げると、
処理画像 1,000 枚あたりの料金
1 か月あたり画像処理* 100 万枚まで 1.00 USD
執筆時点のレートで、一枚あたり約0.12円です。

料金表(オレゴン)

amazon_rekognition_%e6%96%99%e9%87%91_-_%e3%82%a2%e3%83%9e%e3%82%bd%e3%82%99%e3%83%b3_%e3%82%a6%e3%82%a7%e3%83%95%e3%82%99_%e3%82%b5%e3%83%bc%e3%83%92%e3%82%99%e3%82%b9

無料枠

無料枠が設定されています。
気軽に技術検証ができますね。

最初の 12 か月の間、

  • 1ヶ月あたり 5,000 枚の画像分析
  • 毎月1,000 件の顔メタデータを保存

おわりに

AWSの画像解析API Amazon Rekognitionを試しました。
高機能の画像解析が安価に使えるので、開発者は画像解析の技術向上はAWSに任せて、どのように使えば、ユーザーの満足度を上げられるかに注力できそうだと感じました。
SDKを使う事でプログラム中からも使う事ができます。

リンクバルでは、Ruby on Railsで開発された自社サービスを一緒に開発するエンジニアを募集しておりますので、興味を持っていただきましたら、ぜひお問い合わせください!