【スプレッドシート】特定の文字があれば、行に色を付ける

この記事の説明

スプレッドシートで特定の文字があったときに、対象の行を塗りつぶしたいケースがありますよね。

でもいちいち、色を塗っていては不便です。

そこで、この記事では、スプレッドシートに特定の文字が入力された行に色を塗る方法を紹介します!

参考書籍

実行手順

色を変更したい列を選んでください

f:id:gotto50105010:20200927153035p:plain

表示形式→条件付き書式を選択

  • セルの書式設定の条件:カスタム数式を選択
  • 下の空白セルに、「=$C1="終了"」と入力
    • 任意の文字のため、終了や完了など、入力したいものを記入
  • 書式設定のスタイルで塗りつぶしたい色を選択
  • 記入し終えたら「完了」ボタンを押す

f:id:gotto50105010:20200927153154p:plain

C列に”終了”と入力すると灰色になる

f:id:gotto50105010:20200927152946p:plain

もう一つ条件を追加

ステータスが「未着手」だと、行を赤くする

  • 手順は先程と同じく、塗りつぶしたい列を選択
  • 条件付き書式のボタンを押す
  • 次は、=$C1="未着手"と記入
  • 赤色を選択しましょう

f:id:gotto50105010:20200927153652p:plain

この通り、複数の条件を設定することが可能です。
そのため、終了や未着手など、強調したい色があれば、設定をどんどん追加してみてください。

f:id:gotto50105010:20200927153711p:plain

参考書籍

なお、記載のためにこちらのページを参考にいたしました。

【BigQuery】string_aggの使い方

BigQueryには、データ加工のために便利な関数がたくさん用意されています。

今回は、複数行にまたがる文字列の加工に便利なSTRING_AGGという関数を紹介します。

STRING_AGGにできること

以下のように、ユーザーが購入した果物が格納されたテーブルがあります。

ユーザー 果物
A りんご
A バナナ
A いちご
B バナナ
B さくらん

このテーブルから、購入した果物をユーザー単位でまとめて、以下のように集計したいときにSTRING_AGGを使います。

ユーザー 果物
A りんご,バナナ,いちご
B バナナ,さんくらんぼ

STRING_AGGの書き方

ユーザー単位に購入した果物をまとめるには、以下のように書きます。

SELECT
    ユーザー,
    STRING_AGG(果物)
FROM
    table
GROUP BY
   ユーザー

参考書籍

このようにデータを加工するためには、様々なテクニックがあります。
STRING_AGGのように、便利な関数を知っているとSQLだけで、いろんなことが可能になります。

そんなときは、以下の書籍で前処理の方法と関数を知っておくと良いでしょう!

【SQL】CASE文を重ねて使う方法

CASE文とは

SQLを利用しているとCASE文を利用するケースが多いと思います。

通常は、このようなCASE文になりますが、

SELECT
    CASE
        WHEN col = '○○' THEN 1
        ELSE 0
FROM
    table

複雑な条件が重なると

SELECT
    CASE
        WHEN col = '○○' AND col2 = '☓☓' AND col3 = '▲' THEN A
        WHEN col = '○○' AND col2 = '□□' AND col3 = '▽' THEN B
        WHEN col = '♢' AND col2 = '➂' AND col3 = '〆' THEN C
        ELSE 0
FROM
    table

WHENの中に、何個も条件が入り、
非常に長い条件文ができあがってしまいます。

この対処法として、CASE文をうまく重ねて利用する方法をご紹介します。

もしCASE文について、知識が不安な方や、
もう少しCASE文の基礎知識を身に着けたい方は、
こちらの書籍がおすすめです。

スッキリわかるSQL入門 第2版 ドリル222問付き! (スッキリシリーズ)

スッキリわかるSQL入門 第2版 ドリル222問付き! (スッキリシリーズ)

CASE文を重ねる

早速、CASE文を重ねた例文をご紹介します。

SELECT
    CASE
        WHEN col = '○○' THEN 
        CASE
            WHEN col2 = '☓☓' AND col3 = '▲' THEN A
            WHEN col2 = '□□' AND col3 = '▽' THEN B
            ELSE NULL
        END
        WHEN col = '♢' AND col2 = '➂' AND col3 = '〆' THEN C
        ELSE 0
    END
FROM
    table

このように、1つ目のCASE文の中に
もうひとつCASE文を書きます。

すこし文章が複雑に見えますが、
条件を書く回数が減るので、メンテナンス性も向上します。

Tableauで営業日(平日数)を計算する!

はじめに

Tableauを利用して営業日を計算したい時があると思います。
お仕事されている方なら、土日を含めた日付を計算するよりも営業日の日付計算をすることの方が多いのではないでしょうか。

今回は、Tableauで日付計算を行う際に、単なる日付の差分を計算するのではなく、
営業日(平日数)を計算
したいと思います。

なお、今回ご紹介する方法では、祝日を考慮しない営業日の計算となりますので、
ご利用の際には、その点を注意していただけると幸いです。

対象データ

Tableauでよく利用されるサンプルスーパーストアのデータを利用します。
このデータに含まれる オーダー日出荷日 を対象に平日数を計算していきましょう。

ちなみに、普通に日付の差分を計算するときには、 DATEDIFF('day', オーダー日, 出荷日) とすれば計算ができます。

【準備】対象のデータを変換する

はじめにデータの下ごしらえが必要になります。
営業日を計算するにあたって、起点となる日(オーダー日)と終点の日(出荷日)で、
少し処理が異なるので、気をつけてください。

起点日の準備

それでは、営業日計算のスタートとなる日付を対象に、下ごしらえです。
Tableauの計算フィールドを開いて、以下のスクリプトを記入してください。

IF DATEPART('weekday', オーダー日) = 1 THEN DATEADD('day', 1, オーダー日)
ELSEIF DATEPART('weekday', オーダー日) = 7 THEN DATEADD('day', 2, オーダー日)
ELSE オーダー日
END

IF文の中でややこしい計算をしていますね。
分解して見ていきましょう。

DATEPART('weekday', オーダー日)にて、計算対象の日を曜日に変換しております。
また、曜日と言っても月曜火曜と文字列ではなく、曜日を数値に変換しております。

日曜日が1で土曜日は7となる計算を実行しております。

DATEPART('weekday', オーダー日) = 1
これは、計算対象の日付が日曜日の場合を判定しております。

DATEPART('weekday', オーダー日) = 1 THEN DATEADD('day', 1, オーダー日)
そして、日曜日だった場合には、1日追加しております。
つまり、日曜日の日付を月曜日に変換しているんですね。

2行目も同じような処理をしております。

ELSEIF DATEPART('weekday', オーダー日) = 7 THEN DATEADD('day', 2, オーダー日)
こちらは、土曜日の場合、2日追加して月曜日に変換しております。

3行名は、一番シンプルですね。

ELSE オーダー日
IF文の中で、日曜と土曜日を月曜日に変換してきました。
残るは平日のため、変換をせずにそのままの日付を返しております。

さて、これで起点となる日の準備は完了です。

終点日の準備

次に、計算の終点となる日付の準備に入ります。
起点日のときと計算式はよく似ていますね。

待ちえないように気をつけてください。

IF DATEPART('weekday', 出荷日) = 1 THEN DATEADD('day', -2, 出荷日)
ELSEIF DATEPART('weekday', 出荷日) = 7 THEN DATEADD('day', -1, 出荷日)
ELSE 出荷日
END

DATEPART('weekday', 出荷日) = 1 THEN DATEADD('day', -2, 出荷日)
1行目のIF文で出てきた処理です。
何をしているかというと出荷日が日曜日だった場合、2日さかのぼって先週の金曜日に変換しております。

ELSEIF DATEPART('weekday', 出荷日) = 7 THEN DATEADD('day', -1, 出荷日)
2行目も同様の処理を行っております。
出荷日が土曜日だった場合、1日さかのぼって金曜日に変換しております。

さて、ここまでで準備は完了しました。

【計算】営業日(平日日)を計算

営業日を計算するにあたっての、起点となる日と終点となる日の準備をしてきました。
次は、いよいよ営業日の数を計算しましょう。

営業日(平日数)を計算

MIN(DATEDIFF('day', 起点日, 終点日)) +1 -2 * DATEDIFF('week', 起点日, 終点日))

DATEDIFF('day', 起点日, 終点日)) +1
起点日と終点日の日付差分を取得してプラス1日をしております。

-2 * DATEDIFF('week', 起点日, 終点日)
起点日と終点日の週の違いを取得して、その差にマイナス2をかけております。

上記2つを合わせて、最小値を計算することで営業日を計算することが可能なのです。

【結果】正しく計算できているか確認しよう

さて、実際に計算までやってみました。
実際に営業日の計算ができているか確認してみましょう。

f:id:gotto50105010:20190320234702p:plain

例えば、1番上に表示されている行を見てください。

起点日:2018年10月6日
終点日:2018年10月8日
営業日:1日

計算した日付を取り上げると、10/8(月)のみ営業日と計算しております。
10/6(土),10/7(日)は、平日ではないため営業日の計算には入っておりません。

もっとTableauについて、いろいろ学びたい。使いこなしたいという方には、
以下の書籍をオススメします。

計算フィールドのことから、fixedの使い方まで網羅的に載っているので、
Tableauを利用される際には、お手元に1冊あっても損はないでしょう。

参考書

Tableauデータ分析 ~実践から活用まで~

Tableauデータ分析 ~実践から活用まで~

Tableauデータ分析~入門から実践まで~

Tableauデータ分析~入門から実践まで~

【tableau】1行ごとに色をつける

行ごとに色を付ける

Tableauでグラフやクロス表を作成していると、行が全て同じ色になっており、
ちょっと見にくくなってしまうことがあります。

まあ、そのままでも見れるのですが、行ごとに色が着いていると
見やすくなるので是非設定しておいた方がよいでしょう。

行すべて同じ色

f:id:gotto50105010:20190317231233p:plain

行ごとに色が違う

f:id:gotto50105010:20190317231237p:plain

見比べてみると、やっぱり行単位で縞々になっている方が、見やすいですよね。

行単位で色をつける方法

では、早速行単位に色を付ける方法をご紹介します。
ちなみに、今回の参考文献はこちらです。

Tableauデータ分析~入門から実践まで~

Tableauデータ分析~入門から実践まで~

手順①

行ごとに色を付けたいところにマウスを移動し、
右クリックを押します。

f:id:gotto50105010:20190317231244p:plain

手順②

書式設定を選択し、網掛けの部分を選択しましょう。
すると、下の方に バンド サイズ という項目があります。

f:id:gotto50105010:20190317231306p:plain

手順③

バンド サイズ のスライドバーを右に1つづらしてみましょう。
すると、クロス表の行ごとに色がつきました。

f:id:gotto50105010:20190317231310p:plain

ちなみに、このスライドバーをもっとずらしてみると、
2行や3行単位で色を付けることができます。

参考文献

Tableauデータ分析~入門から実践まで~

Tableauデータ分析~入門から実践まで~

【時系列分析】ドル円レートを予測する!

目次

ドル円のレート情報を取得

まずはじめに、予測するためには過去の為替相場が必要です。

今回情報を取得するもととしては、quandlという株価などの経済指標をダウンロードすることができるサイトからデータを取得しました。

サイト全体が英語しか書かれていないのですが、
必要なデータを取得する方法は至って簡単です。

プログラミングをされる方は、Pythonというプログラミング言語をご存知でしょう。

quandlからデータを取得する際には、Pythonを利用することでドル円為替相場のデータを取得しました。

サンプルコード

事前にパッケージをインストールしておきましょう。

pip install quandl

Pythonのコードとしては、至ってシンプル。

import quandl

data = quandl.get('BOE/XUDLJYD')

はい。これだけです笑

めっちゃ簡単でしょ笑

期間指定をしなければ1975年1月から数日前までのデータを取得することができるので、
データボリュームとしては十分なボリュームでしょう。

為替相場の推移を確認

まずは、全体感を見てみましょう。

f:id:gotto50105010:20190316183147p:plain

1980年代くらいから、ドル相場が下がり始めて、
1990年代には100円/ドルくらいになりましたね。

以降は100円前後を推移しているかなといった感じでしょうか。

f:id:gotto50105010:20190316183152p:plain

直近2年に絞って見てみると、だいたい110円前後を推移している感じですね。

予測の流れ

さて、今後の分析の流れを記載していきます。

まずは、以下のような書籍を参考に時系列分析を進めます。
実践的な書籍であると共に、サンプルコードも豊富に載っているので、
これから時系列解析をやってみたいと言う方には参考になるのではないでしょうか。

現場ですぐ使える時系列データ分析 ~データサイエンティストのための基礎知識~

現場ですぐ使える時系列データ分析 ~データサイエンティストのための基礎知識~

時系列分析と状態空間モデルの基礎: RとStanで学ぶ理論と実装

時系列分析と状態空間モデルの基礎: RとStanで学ぶ理論と実装

上記書籍にのっとり、時系列の初歩的な分析から季節性・周期性を考慮した予測モデルを構築していきます。

1ヶ月位先を予測してみて、どのくらいまで予測精度を高められるか試してみようかなと考えております。

遅延するプロジェクトとその対策

いつの間にか遅延していくプロジェクト

仕事をしていると”プロジェクト”という取り組みをみんな経験したことがあるでしょう。

そして、もう一つみんなが経験していることとして、
プロジェクトが遅延して辛い経験をしたということです。

残業や休日出勤をしてなんとかスケジュール通りに間に合わせたり、
先輩や同僚に手伝ってもらいながら深夜まで作業をするなんて経験をされた方も少ないはずです。

今回は、いつの間にか遅延しているプロジェクトの要因対策をお話していきます。

ちなみに参考文献は、以下のようなプロジェクトマネジメントの良書になります。
「プロジェクトが思い通りに進まない」「初めてプロジェクトマネジャーになる」といった方々に大変参考になる書籍です。

ぜひ、手元にあって損はないかと思います。

予定通り進まないプロジェクトの進め方

予定通り進まないプロジェクトの進め方

予定通り進まない要因と対策

イメージが湧きやすいように、具体的なプロジェクトを想定してお話を進めていきますね。

あたなは、webサイトを運営する会社の分析部門に属しています。
ある日、上司から「ユーザーのアクセス状況がわかるダッシュボードを作って欲しい」と依頼を受けました。

ダッシュボードで見たいのは以下の3つです。

この3つをダッシュボード化して、毎日チェックするようにしましょう。

さて、作業を進めていると上司から呼び出され追加の依頼が来ました。

「新規とリピーターの割合も知りたいな、あと、セッション中のPV数も見れると助かるよ。」

当初のダッシュボード作成依頼から新たに2つの要素が加わりました。

困ったものですね、、最初の3つをダッシュボード化するためにデータを集め、ダッシュボードのデザインも練っていたところに、
急に2つの要素が入ってきて、デザインもデータの取り方も大きな修正が発生してしまいました。

あたなは毎日夜遅くまで残業し、休日も出勤してなんとかダッシュボードを作成することができました。

そして、上司にダッシュボードを見せたところ、
「うーん、なんか思っていたのと違うかな。もっとこう、どんなユーザーが減ってきたのか見たいんだよね。」

机をひっくり返して、胸ぐらを掴みたくなる気持ちをグッと抑えましょう。
「わかりました」と返事をして、席について深呼吸。
「(結局、何が見たいんだよ。。わかんねぇよ。。。。)」

さて、これまでの例を踏まえて、具体的な遅延の要因を探っていきましょう。

依頼者の要求

今回、上司である依頼者からはダッシュボードを作成してほしいと言われました。
そして、あなたはダッシュボード作成に取り掛かりました。

まずここで考えてほしいことがあります。

なぜ、依頼者はダッシュボードが必要だったのでしょうか?

ユーザーのアクセス状況を日々チェックすることで、依頼者は何を実現したかったのでしょうか? もちろん、「ただ毎日ダッシュボードを眺めるだけ」なんて理由があるはずはありません。

ダッシュボードを作成してチェックするということは、何かを実現したい意思があるからでしょう。

上司からダッシュボードを作成してほしいと依頼をされたときには、
まず、ダッシュボードを作成する意図を確認するべきでした。

それでは、上司にダッシュボード作成の意図を確認してみましょう。
すると、このような回答が返ってきました。

「最近、売上が減少してきて、それがユーザーのアクセスの減少じゃないかと思っている。」

なるほど、だからダッシュボードを作成することで、
ユーザーのアクセスをモニタリングしようとしたのです。

唐突な追加要望

プロジェクトを進めていく中で、突然依頼が発生しましたね。

「新規とリピーターの割合も知りたいな、あと、セッション中のPV数も見れると助かるよ。」
そう、この2つが急に発生しました。

これも、プロジェクトが開始する段階で、依頼者の要求を正しく理解していれば、
こんな唐突にお願いされることなんて無かったかもしれません。

そもそも、ダッシュボード作成の目的は、サイトの売上減少です。

そこから逆算して、どんな項目をダッシュボード化するべきだったのかを事前に上司とすり合わせておけば、唐突な依頼が発生することは無かったでしょう。

もしくは、唐突な依頼が来ても、それは今回のダッシュボードの目的とはズレていると議論し、今回のプロジェクトの中には含まれなかったかもしれません。

利用目的

ダッシュボードの作成依頼をしてきたのは、上司でした。

ということは上司だけがダッシュボードを見るのでしょうか??

ダッシュボードを見たあとの具体的なアクションがイメージできないと
どんな見せ方をするべきなのか、何を強調するべきなのかを検討することができません。

従って、今回のダッシュボード作成の依頼が来た段階で、
誰が見るのか、どのタイミングで見るのか、見たあとどんな行動を起こすのか確認するべきでした。

これを明確に想定することができていたら、ダッシュボードのデザイン検討の際に、有効な情報となります。 また、現場レベルの人が見るのか、マネジメント層が見るのか次第で、情報の粒度も変わってきます。

このように、ダッシュボードを見ると言っても、誰が何の目的で、見たあとのアクションをヒアリングしておきましょう。

まとめ

さて、これまでの内容をおさらいしておきましょう。

プロジェクトがスケジュール通りに進まない要因としては、

  • 依頼者の要求を正確に理解できていないこと
  • プロジェクトで実現できたときに、依頼者はどんなアクションを起こすのか理解していないこと

この2つがあると思います。

その他にも様々な要因が存在すると思いますが、まずはこの大きな2つの要素がプロジェクトの進行に大きな影響を与えていると言えるでしょう。

参考文献

予定通り進まないプロジェクトの進め方

予定通り進まないプロジェクトの進め方

PMBOK対応 童話でわかるプロジェクトマネジメント

PMBOK対応 童話でわかるプロジェクトマネジメント