読者です 読者をやめる 読者になる 読者になる

駄文型

プログラミングとか英語とかの話題を中心にした至極ちゃらんぽらんな日記です。

kafka-docker で作った kafka クラスタに Elixir クライアントから接続する

kafka-docker でローカルに kafka クラスタを構築する - 駄文型 の続き。kafkaex/kafka_ex という Kafka クライアントで Producer を作ってみます。

ライブラリの取得

mix.exs を編集して mix deps.get するだけ。

参考: Introduction to Mix - Elixir

defmodule ProducerSampleEx.Mixfile do
  # ...

  def application do
    [
      applications: [
        :kafka_ex,
        :snappy
      ]
    ]
  end

  defp deps do
    [
      {:kafka_ex, "~> 0.6.5"},
      {:snappy, git: "https://github.com/fdmanana/snappy-erlang-nif"}
    ]
  end
end
$ mix deps.get

設定

まず、kafka-docker でローカルに kafka クラスタを構築する - 駄文型 で作った Kafka コンテナのポートを確認。今回は 32776 32778

$ docker-compose ps
                Name                              Command               State                          Ports
-----------------------------------------------------------------------------------------------------------------------------------
66f23109d78a_kafkadocker_zookeeper_1   /bin/sh -c /usr/sbin/sshd  ...   Up      0.0.0.0:32777->2181/tcp, 22/tcp, 2888/tcp, 3888/tcp
kafkadocker_kafka_1                    start-kafka.sh                   Up      0.0.0.0:32778->9092/tcp
kafkadocker_kafka_2                    start-kafka.sh                   Up      0.0.0.0:32776->9092/tcp

次にKafkaEx.Config – kafka_ex を参考に config.exs を書く。以下は最低限の設定。

config :kafka_ex,
  brokers: [
    {"192.168.145.65", 32776}, # {"hostname", port}
    {"192.168.145.65", 32778}
  ],
  consumer_group: :no_consumer_group,
  use_ssl: false

iex で確認

iex -S mix で立ち上げる。設定がおかしいとここでエラーがでる。

$ iex -S mix
Erlang/OTP 19 [erts-8.3] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]


11:53:23.055 [debug] Succesfully connected to broker "192.168.145.65":32776

11:53:23.056 [debug] Succesfully connected to broker "192.168.145.65":32778

11:53:23.075 [debug] Establishing connection to broker 1009: "192.168.145.65" on port 32778

11:53:23.076 [debug] Succesfully connected to broker "192.168.145.65":32778

11:53:23.076 [debug] Establishing connection to broker 1010: "192.168.145.65" on port 32776

11:53:23.077 [debug] Succesfully connected to broker "192.168.145.65":32776
Interactive Elixir (1.4.2) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)>

つながった! metadata/1 で確認できる。

iex(1)> KafkaEx.metadata(topic: "topic")
%KafkaEx.Protocol.Metadata.Response{brokers: [%KafkaEx.Protocol.Metadata.Broker{host: "192.168.145.65",
   node_id: 1009, port: 32778, socket: nil},
  %KafkaEx.Protocol.Metadata.Broker{host: "192.168.145.65", node_id: 1010,
   port: 32776, socket: nil}],
 topic_metadatas: [%KafkaEx.Protocol.Metadata.TopicMetadata{error_code: :no_error,
   partition_metadatas: [%KafkaEx.Protocol.Metadata.PartitionMetadata{error_code: :leader_not_available,
     isrs: [], leader: -1, partition_id: 0, replicas: []},
    %KafkaEx.Protocol.Metadata.PartitionMetadata{error_code: :no_error,
     isrs: [1010], leader: 1010, partition_id: 3, replicas: [1010]},
    %KafkaEx.Protocol.Metadata.PartitionMetadata{error_code: :no_error,
     isrs: [1010], leader: 1010, partition_id: 1, replicas: [1010]},
    %KafkaEx.Protocol.Metadata.PartitionMetadata{error_code: :no_error,
     isrs: [1009], leader: 1009, partition_id: 2, replicas: [1009]}],
   topic: "topic"}]}

あとは produce/4 で送るだけ!トピック名、パーティション番号、メッセージを渡す。

iex(2)> KafkaEx.produce("topic", 0, "msg") # opt は省略
:leader_not_available

11:56:41.715 [error] Leader for topic topic is not available

あれ?どうやら、トピック名が topic だとだめそう。別のトピックを指定すると通る。

iex(3)> KafkaEx.produce("new_topic", 0, "msg")
:ok

(追記) 使えなかったのはトピックではなくパーティションだった。リーダーが使用不可になっている。それがなぜかは不明だが。。。

kafka-console-consumer.sh で確認

前回同様、 Kafka Shell を起動して

$ start-kafka-shell.sh 192.168.145.65 192.168.145.65:32777 # Kafka Shell を起動

kafka-console-consumer.sh を叩く。 KafkaEx.produce/4 でもう一度送り、メッセージが表示されればOK!!!

$ kafka-console-consumer.sh --topic new_topic --zookeeper $ZK
Using the ConsoleConsumer with old consumer is deprecated and will be removed in a future major release. Consider using the new consumer by pas
sing [bootstrap-server] instead of [zookeeper].
msg

ハマったところ

  • config.exs の設定
    • brokers{"192.168.145.65", "32776"} と設定してしまう凡ミスを犯していた。
  • トピック名が topic だとだめそう。
  • mix.exs の設定
    • kafka_ex の README.md には mod: {MyApp, []}, という行があったので入れていた。
    • これはモジュールのコールバックの設定を行うためのもの。
    • 入れておくと MyApp.start/2 (今回の場合 ProducerSampleEx.start/2 )を実行しようとしてしまう。
    • 今回は不要なので削除した。

Apache Kafka入門

Apache Kafka入門

広告を非表示にする

kafka-docker でローカルに kafka クラスタを構築する

参考

環境

  • OS X El Captain 10.11.6
  • docker 17.03.1-ce
  • docker-compose 1.11.2

手順

1. Download kafka-docker

$ git clone git@github.com:wurstmeister/kafka-docker.git

2. Update docker-compose.yml

docker-compose.yml を編集して zookeeper の Port と KAFKA_ADVERTISED_HOST_NAME を変更します。

version: '2'
services:
  zookeeper:
    image: wurstmeister/zookeeper
    ports:
      - "2181:2181" # "2181"に変更する
  kafka:
    build: .
    ports:
      - "9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: 192.168.99.100 # ifconfig で調べる
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

3. Start the cluster

起動します。

$ docker-compose up -d

4. Scale Kafka instances

Kafkaのインスタンスを2つにしてみます。

$ docker-compose scale kafka=2

5. Note ZK_PORT

Kafka Shell に入る前に zookeeper コンテナのポートを確認しておきます。

                Name                              Command               State                          Ports
-----------------------------------------------------------------------------------------------------------------------------------
66f23109d78a_kafkadocker_zookeeper_1   /bin/sh -c /usr/sbin/sshd  ...   Up      0.0.0.0:32774->2181/tcp, 22/tcp, 2888/tcp, 3888/tcp
kafkadocker_kafka_1                    start-kafka.sh                   Up      0.0.0.0:32775->9092/tcp
kafkadocker_kafka_2                    start-kafka.sh                   Up      0.0.0.0:32773->9092/tcp

この場合、 ZK_PORT32774 でした。

6. Start Kafka Shell

Kafka Shell を起動して Kafka の設定を行います。

$ ./start-kafka-shell.sh $DOCKER_HOST_IP $ZK_HOST:$ZK_PORT
  • $DOCKER_HOST_IP: DockerホストのIP。 dockcer-compose.ymlKAFKA_ADVERTISED_HOST_NAME に設定した値。
  • $ZK_HOST: この場合は $DOCKER_HOST_IP と同じ。
  • $ZK_PORT: 5.で調べた値。

7. Create Topic

トピック名 topicパーティション数4でトピックを作成します。トピックについては こちらkafka-topics.sh の詳しい使い方は こちら

$ $KAFKA_HOME/bin/kafka-topics.sh --create --topic topic \
--partitions 4 --zookeeper $ZK --replication-factor 1 # `$KAFKA_HOME/bin/` は省略できました。

確認

1. Describe topic

トピック名、パーティション数などを確認します。

$ ./start-kafka-shell.sh $DOCKER_HOST_IP $ZK_HOST:$ZK_PORT
$ $KAFKA_HOME/bin/kafka-topics.sh --describe --topic topic --zookeeper $ZK
Topic:topic     PartitionCount:4        ReplicationFactor:1     Configs:
        Topic: topic    Partition: 0    Leader: 1002    Replicas: 1002  Isr: 1002
        Topic: topic    Partition: 1    Leader: 1010    Replicas: 1010  Isr: 1010
        Topic: topic    Partition: 2    Leader: 1009    Replicas: 1009  Isr: 1009
        Topic: topic    Partition: 3    Leader: 1010    Replicas: 1010  Isr: 1010 

2. Start a producer

kafka-console-producer.shkafka-console-consumer.sh を使ってみます。まずは producer を起動します。

$ $KAFKA_HOME/bin/kafka-console-producer.sh --topic=topic \
--broker-list=`broker-list.sh`

3. Start a consumer

次に、別のシェルから consumer を起動します。 producer 側のシェルに入力した文字が表示されれば成功です!

$ ./start-kafka-shell.sh $DOCKER_HOST_IP $ZK_HOST:$ZK_PORT
$ $KAFKA_HOME/bin/kafka-console-consumer.sh --topic=topic --zookeeper=$ZK

おわり

コンテナを止めます。

$ docker-compose stop

ハマったところ

  1. zookeeper コンテナのポート設定
    • 2181:2181 から 2181 に変更する必要がありました。
  2. KAFKA_ADVERTISED_HOST_NAME の設定
    • チュートリアルに「Macの場合は docker-machine ip で確認した値を入れる」とあったので、docker-machine上でコンテナを立ち上げないとだめなのか?といろいろ右往左往してしましました。
  3. start-kafka-shell.sh に渡す zookeeper のポート
    • docker-compose ps あるいは docker ps で確認する必要があったのですが、はじめは間違った値を入れていました。
  4. トピックの設定
    • パーティション数を4にしたかったのですが、うまくいかずに kafka-topics.sh --delete したり kafka-topics.sh --alter したりしてました。

続編: kafka-docker で作った kafka クラスタに Elixir クライアントから接続する - 駄文型

Kafka: The Definitive Guide: Real-time Data and Stream Processing at Scale

Kafka: The Definitive Guide: Real-time Data and Stream Processing at Scale

Apache Kafka入門

Apache Kafka入門

広告を非表示にする

ITエンジニアとデザイナーが英語を勉強するなら「ITの英語」がおすすめ

medium.com

このゴールデンウィークで「ITの英語」を読んだ。機械学習やVR、デザインやマネジメントなど、おもしろいトピックが多いので、英語を勉強したいと思っているプログラマやデザイナーに強くおすすめしたい。以下のような人には特に強くおすすめする。

  • IT、特にシリコンバレーやベイエリアの会社のテクノロジーに興味がある。
  • だが、英語のブログやニュース記事を読むのは少しむずかしいと感じている。
  • 英語力はTOEICで言うと500超えくらい。
  • 英文を読みながら語彙力を強化したい。

僕も英語のブログやニュースを読むのだが、場合によっては内容を理解するのが難しいことがある。例えばdocs.ruby-lang.orgのような公式ドキュメント以外を読む場合は普通事前にその記事の概要を知ることができない。言い換えれば、「何が書かれているか」は公式ドキュメントの場合は読む前にわかっていることが多いが、ブログやニュースの記事は中身を読むまで、その記事が言いたいことがわからない。そのため、「文中の各単語はわかるが、その文全体の意味がよくわからない」ということがよく起こる。多分読解力や熟語の知識の不足が原因なんだろうと思う。

「ITの英語」には日本語訳が付いているので、そういう事態は避けられる。英文を読みながら、日本語訳で自分の解釈が正しいかどうか確認できる。さらに、この本はインタビューやプレゼンテーションで構成されているので、ネイティブのリアルで自然な英語から、彼らがよく使う単語、熟語、フレーズを学ぶことができる。音声データはダウンロード可能。

ひとまず一通り読み終えたので、 DUO 3.0 と並行して音読とリスニングを継続して単語の定着を図る予定。

DUO 3.0

DUO 3.0

ITプロジェクトの英語(無料MP3音声付き) (ビジネスエキスパートEnglish)

ITプロジェクトの英語(無料MP3音声付き) (ビジネスエキスパートEnglish)

広告を非表示にする

Rによるデータサイエンス 読書メモ その3(所感あり)

Rによるデータサイエンス データ解析の基礎から最新手法まで

Rによるデータサイエンス データ解析の基礎から最新手法まで

目次

koheikimura.hatenablog.com

の続き。

16章 集団学習

  • 複数のモデルを組合せて精度の高いモデルを構築する手法
  • バギング libraly(adabag) bagging
    • ブートストラップというリサンプリング法で複数の学習データセットを作成
  • ブースティング boosting
    • 逐次重みの調整を繰り返す
  • ランダムフォレスト libraly(randomForest) randamForest
    • ランダムサンプリングしたデータに対してバギングを適用
    • 精度および計算リソースの節約の面でバギングとブースティングより ◯

17章 カーネル法サポートベクターマシン

  • カーネル法: カーネル関数 にりデータを別空間に射影
    • 別空間に射影すれば非線形データを線形モデルで分類できる可能性がある
  • カーネル主成分分析 libraly(kernlab) kpca
  • サポートベクタマシン ksvm

18章 ニューラルネットワーク

  • 神経細胞ニューロン)が多数並列に接続されたシステムを数理的にモデル化したもの
  • 出力結果が目標値に近づくように重みを変える計算を繰り返す
  • パターン認識,分類,ノイズが混在しているデータの処理が得意
  • モデルの分類
    • 教師あり ⇔ 教師なし
    • 階層型ネットワーク ⇔ 非階層型ネットワーク
  • 中間層ありの NN パッケージ nnet

深層学習

  • 階層型ネットワークに属す
  • 中間層を多く用いるため計算量が多い
  • 画像認識,音声認識 → 畳み込みNN (CNN)
  • 時系列データ → 再帰型 NN (RNN)
  • パッケージ ho2 darch mxnet deepnet など
    • この本では ho2 を例に
  • アルゴリズム,隠れ層の数,各層のユニット数,学習の回数をデータ構造に基いて決める必要がある
    • 関連知識と経験が必要

19章 ネットワーク分析

  • 何らかの関係の有無や度合いを分析
  • グラフ理論に基礎をおいていいるためグラフ分析とも
  • 隣接行列の作成 libraly(igraph) graph.adjacency
  • データフレームからグラフオブジェクトに変換 graph.data.frame
  • ネットワークの統計量
    • ノード数 vcount
    • エッジ数 ecount
    • 隣接ノード neighbors
    • 次数(自由度) degree
    • 密度 graph.density
    • 中心性 定義によっていろいろ(次数中心性,接近中心性など)
    • クラスターの係数 transitivity 隣り合うノードの間に三角形グループがいくつあるか
    • ニューマンの次数の相関係数 assortativity.degree 2つのノード間の次数の関連性
    • 最短パス値 shortest.paths
    • 平均パス average.path.length
  • 次数の平均,密度,中心性,クラスター係数などから複雑さを比較可能
  • グラフ間の差分 graph.difference
  • コミュニティ抽出 p244 表19.6
  • オーバーラッピングを許すコミュニティ抽出 linkcomm
  • ベイジアンネットワーク: 因果関係を推測

20章 アソシエーション分析

  • マーケット・バスケット・トランザクションデータの分析
  • libraly(arules)
  • 相関ルール apriori 商品の組合せの規則を抽出
  • 頻出アイテムの抽出 eclat
  • 抽出結果の補助分析 dissimilarity

21章 時系列分析

  • 時系列データ: 一定の時間間隔で測定・観測したデータ
  • libraly(stats)
  • 時系列データの図示 ts.plot
  • 自己共分散と自己相関
  • スペクトル分析 spec.pgram 周期性を解析(トレンドやノイズを除去するようなイメージ)
  • 単位今検定 libraly(tseris) adf.text データがランダムウォークかどうか
  • AR(自己回帰)モデル ar
  • ARMA/ARIMAモデル arima ARモデルに誤差の移動平均を加えたモデル
  • 成分の分解 stl トレンド,周期変動,残差に分解

22章 生存分析

  • イベントが起きるまでの時間とイベントとの関係に焦点
  • 機械システムの故障や患者の疾患,死亡を対象
  • libraly(survival)
  • ノンパラメトリックモデル survfit
  • セミパラメトリックモデル coxph
  • パラメトリックモデル survreg
  • 共変量(時間以外の説明変数)の有無,分布を仮定するか否かに違い

全体の感想

網羅的に手法をカバーしているので課題に対してどの手法を使うべきか?の検討に使うことができる。網羅的な分,説明が短いので入門書として使うのは厳しい。Rについても統計についても,すでにある程度知っている,あるいは昔学習したが忘れているくらいの知識レベルだとちょうどいい印象。Rの関数の使い方だけでなく,結果データの見方や手法の選び方も解説しているので実用性は高い。一度目を通しておけばリファレンスとして使えそう。さらに深く知りたければ参考文献に載っている各手法の専門書を読むとよさそう。

Rによるデータサイエンス データ解析の基礎から最新手法まで

Rによるデータサイエンス データ解析の基礎から最新手法まで

広告を非表示にする

Rによるデータサイエンス 読書メモ その2

Rによるデータサイエンス データ解析の基礎から最新手法まで

Rによるデータサイエンス データ解析の基礎から最新手法まで

目次

koheikimura.hatenablog.com

の続き。

9章 クラスター分析

  • 個体や変数を分類する方法は教師ありと教師なしに大別される
  • この章では教師なしの場合

階層的クラスター分析

  • 樹形図(dendrogram)ができる
  • クラスタリング法,凝縮型階層手法とも
  • プロセス
    1. データから距離(あるいは類似度)を求める dist
    2. クラスター分析の手法を選択 hclust
    3. コーフェン行列を求める
    4. 樹形図を作成 plot
    5. 結果について検討 heatmap
  • 近い個体から順にペアにしてクラスタを作っていくようなイメージ
  • クラスタ間の距離を求める必要がある

その他

  • k平均法 kmeans
  • モデルに基づいたクラスター分析 hclass

10章 自己組織化マップ

  • わからん

11章 線形回帰分析

  • 回帰分析とは: 説明変数をから目的変数を求めることができる統計モデルをつくる
  • 線形回帰分析: 目的変数と説明変数を1次関数の関係としてモデル化
  • 非線形回帰分析: 2次関数以上
  • 線形単回帰分析 lm
    • 最小二乗法
    • 説明変数が1つ
  • 線形重回帰分析 lm
    • 単に 重回帰分析 と言った場合,線形重回帰分析を指す
    • 説明変数が複数

12章 非線形回帰分析

  • ロジスティック回帰 nls
    • ロジスティック関数 y = a / (1 + b * e^cx) を用いる
  • 多項式回帰 nls
    • 例えば3次多項式の場合 y = a + b * x + c * x^2 + d * x^3
  • 一般線形モデル glm
  • 平滑化回帰
    • わからん

13章 線形判別分析

  • 判別分析: 学習データを用いて判別モデルを構築,所属不明の個体の識別に使う
  • 線形判別分析は散布図にプロットされた個体を直線で分割するイメージ(p162 図13.1)
  • library(MASS) lda
  • 学習データとテストデータを分ける手法として 交差確認 がある
    • lda に引数 CV=TRUE を渡す
  • 線形判別分析は等分散の制約条件があることと,大量の変数には向いていないため非線形判別分析に押され気味らしい

14章 非線形判別分析

  • library(MASS)
  • 二次式による判別分析 qda 使い方は lda とほぼおなじ
  • k 最近傍法が最も多く用いられる
  • 近年では機械学習のアプローチによる判別分析が提案(15〜19章)

距離による判別分析

  • 学習データからグループの中心を求め,未知の個体は中心との距離が一番小さいグループに属すると判別
  • グループ数が3以上でも使える
  • データの確率分布かの条件もない
  • マハラノビス距離が多く用いられる mahalanobis

k 最近傍法(k最近隣法,k-NN法) knn

  • library(klaR)
  • 判別する個体の周辺 k 個の多数決でグループを決定
  • 距離の測度としては ユークリッド距離 が一般的
  • k の値は何がいいか明確な基準はなく,データに依存
  • 九工大の実証実験で使用

ベイズ判別法

  • 個体がグループに属する確率を ベイズ定理 で求め,最大のグループに属すると判別
  • 分布条件あり
  • library(klaR) NaitiveBayes

15章 ツリーモデル

  • 回帰分析,判別分析の1つ
  • 回帰木,分類木,決定木とも
  • 説明変数の値を何らかの基準で分岐させ,判別・予測のモデルを構築
  • rpart
  • ツリーのグラフ rpart.plot plot.party fancyRpartPlot
  • rpart のほかに tree , ctree パッケージもある
    • ctree は回帰木は作れない

次はこちら:

koheikimura.hatenablog.com

Rによるデータサイエンス データ解析の基礎から最新手法まで

Rによるデータサイエンス データ解析の基礎から最新手法まで

広告を非表示にする

Rによるデータサイエンス 読書メモ その1

Rによるデータサイエンス データ解析の基礎から最新手法まで

Rによるデータサイエンス データ解析の基礎から最新手法まで

目次

第I部 Rとデータマイニングの基礎

構文や基本的な関数など,基本のおさらい。統計の用語も軽く説明がある。Rを使ったことがあるが体系的に勉強してない or Rを久しぶりに使う など再入門にちょうどいい。初心者向けではない。

1章 データマイニングR言語

  • オブジェクト、関数、制御文、RStudio、パッケージ

2章 データの入出力と編集

  • ベクトル、行列、データフレーム、配列、リスト
  • 入力 read.csv, scan
  • 出力 write, write.table, sink
  • 結合 rbind, cbind
  • 並び替え sort, rev, sort.list
  • よく使う関数一覧 p28
  • データの尺度
    • 量的データ: 間隔尺度、比例尺度
    • 質的データ: 名目尺度、順序尺度
  • summary

3章 データの演算と固有値,基本統計量

4章 データの可視化

  • 棒グラフ,円グラフ,ヒストグラム,折れ線グラフ,箱ひげ図,散布図
  • 作図環境とグラフの利用
    • ここは無視してRStudio使った方がいいと思う

第II部 Rによるデータ解析・データマイニング

ここからが本題。

5章 主成分分析

  • 多変数データを少ない変数に縮約する
  • princomp

6章 因子分析

  • 変数間の相関関係から共通因子を求める
  • 例: 教科(算数,理科,国語など)別の成績データから2つの因子(理系,文系)にまとめる
  • factanal シンプルだがカスタマイズ性が低い,最尤法のみ
  • psych パッケージ fa 因子の推定法を指定可能
  • 因子の推定方法や回転方法によって結果が変わることがある
    • 探索的に方法を変えて結果を見る必要がある

7章 対応分析

  • わからん

8章 多次元尺度法

  • MDS: Multi-Dimensional Scaling
  • データの個体間の類似度or距離を2〜3次元に射影
  • データの構造やパターンを考察可能
  • パッケージ stats 関数 dist, cmdscale

次はこちら:

koheikimura.hatenablog.com

Rによるデータサイエンス データ解析の基礎から最新手法まで

Rによるデータサイエンス データ解析の基礎から最新手法まで

広告を非表示にする

現代人のための統計リテラシーその1 構成概念を直接測定しようとしてはいけない

観察しようとする構成概念を直接測定しようとしてはいけない。これは心理学系の研究において常識であり鉄則である。構成概念は文字通り概念であり、そもそも直接測定できない。

構成概念

construct

理研究などにおいて、人の行動のメカニズムを説明するために、研究者によって人為的に構成された概念のこと。

構成概念の例として「思いやり」、「リーダーシップ」、「社交性」などが挙げられるが、これらは直に見たり、測定したりすることはできない。そのため、ある構成概念の存在を仮定した場合、その構成概念の影響を受けるであろう複数の行動や態度を測定し、構成概念の存在を検証する。因子分析は構成概念の探索や検証に用いることの多い手法であり、抽出された因子を構成概念と見なしている。

構成概念 | 統計用語集 | 統計WEB

素人がアンケートを作成すると、しばしば「構成概念を直接測定しようとした」アンケートが生まれる。例えば、従業員満足度を調査しようとして以下のような質問を設けるのはあまり有効な方法ではない。

Q. あなたは現在の業務に満足していますか。
5. 満足 - 4. やや満足 - 3. 普通 - 2. やや不満 - 1. 不満

これは構成概念を直接測定しようとした質問の典型だ。この質問でわかるのは「従業員が【あなたは現在の業務に満足していますか。】という質問に対して何と答えたか」であって、「従業員の業務への満足度」ではない。「従業員の業務への満足度」を測定したいなら、「従業員の業務への満足度」とは何かを定義し、分解し、客観的・定量的に測定可能な変数まで分解する必要がある。たとえば「従業員の業務への満足度」という構成概念の場合、以下のように分解できる。

従業員の業務への満足度
├── 希望する業務内容と現状の業務との距離
│   ├── 現在の業務内容
│   ├── 希望する業務内容
└── 業務量
    ├── 現在の業務量
    └── 残業時間 など
※この分解が妥当かどうかはひとまず置いておいてください。

ある程度分解していけば、直接測定可能な変数まで落とし込める。構成概念はこれらの変数の総体であり、直接測定することはできない。

直接測定すべきでないのは、なにもこういった概念に限らない。自然科学の分野においても、多くの場合観測したいものを直接測定できないので、しない。中学校の理科の実験を思い出してほしい。目に見えない二酸化炭素を観測するには石灰水を使う。石灰水に二酸化炭素を吹き込むと、炭酸カルシウムが生成し、白濁する。実験では二酸化炭素を直接観測しようとせず、石灰水の白濁を観測する。

物理量には適正な測定方法があり、構成概念もまた同じである。適正に分解して構成概念を観測できず、さらにその先にある目標を達成できない。

その1としたけど続かないかもしれない。

統計学が最強の学問である

統計学が最強の学問である

統計学が最強の学問である[実践編]---データ分析のための思想と方法

統計学が最強の学問である[実践編]---データ分析のための思想と方法

広告を非表示にする