1

次のデータ形式の csv ファイルがあるとします。

ID, Name, Gender, Q1
1, ABC, Male, "A1;A2"
2, ACB, Male, "A2;A3;A4"
3, BAC, Female, "A1"

データ仮想化ツールが適切に処理できるように、次の形式に変換したいと思います。

ID, Name, Gender, Questions, Responses
1, ABC, Male, Q1, A1
1, ABC, Male, Q1, A2
2, ACB, Male, Q1, A2
2, ACB, Male, Q1, A3
2, ACB, Male, Q1, A4
3, BAC, Female, Q1, A1

LibreOffice の機能を使用すると、Q1 列を のような異なる列Text to Columnsに簡単に分離できますが、行の転置と繰り返しに行き詰まります。A1;A2A1, A2

追加情報:

  • データは Google フォーム経由で収集されますが、残念ながら、Google スプレッドシートでは複数選択の質問への回答が のようなセミコロン区切り記号を使用して 1 つのセルに保存されA1;A2;A3...ますが、私の視覚化ツールはこの基礎となるデータ構造を認識できず、それらを単一の文字列としてのみ処理するため、集計/グループ化が困難になります。

  • 実際のデータ (調査結果) には、約 5000 エントリがあり、それぞれにこのような処理が必要な複数のセルがあり、約 100,000 エントリのテーブルになります。変換を自動化する方法が必要です。

  • 私がデータを分析/視覚化するために使用するツールは「Tableau Public 」です。それらには、そのようなタスクを半自動化する Excel 用のデータ リシェーパー プラグインがあります(各行に 1 つのデータのみが含まれていることを確認するセクションを参照) が、LibreOffice の代替手段はありません。

4

2 に答える 2

2

他のアプリケーションにエクスポートする前に、Google スプレッドシートで JavaScript を使用してデータを変換できます。以下は、サンプル データ用に作成した簡単なスクリプトです。

function transformRows() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var rows = sheet.getDataRange();
  var numRows = rows.getNumRows();
  var values = rows.getValues();

  var newSheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet("Result");
  var header = values[0].slice(0, values[0].length - 1);

  header.push("Question");
  header.push("Answer");
  newSheet.appendRow(header);

  var question = values[0][values[0].length - 1];

  // Note: Code below is inefficient and may exceed 6-minute timeout for sheets with 
  //       more than 1k rows. Change it to batch updating to speed up. 
  // Ref: https://developers.google.com/apps-script/reference/spreadsheet/range#setValues%28Object%29
  for (var i = 1; i <= numRows - 1; i++) {
    var row = values[i];
    var answers = row[row.length - 1].split(";");
    for (var ansi = 0; ansi < answers.length; ansi++) {
      var newRow = row.slice(0, row.length - 1);
      newRow.push(question);
      newRow.push(answers[ansi]);
      newSheet.appendRow(newRow);
    }
  }
};

使用するには:

  1. 開いたシートでスクリプト エディターを開きます (ツール -> スクリプト エディター...)。
  2. スプレッドシート用の空のプロジェクトを作成する
  3. コードをエディターに貼り付けます
  4. 保存して実行します (実行 -> transformRows)
  5. スプレッドシートに戻ると、新しいシートが作成され、変換されたデータが入力されます。
于 2013-04-22T10:18:22.953 に答える