🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

Q&A

解決済

2回答

1479閲覧

ProcessingでCSVデータを読み込みデータの計算をする方法

退会済みユーザー

退会済みユーザー

総合スコア0

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

0グッド

0クリップ

投稿2019/11/19 04:50

編集2020/01/29 05:53

前提・実現したいこと

Processingにおいて、Excelでつくったデータを読み込みそれをもとにグラフを作成しようとしています。データは読み込めたものの、そのデータを表示させることしかできなく、何をしたら良いかわからない状態です。
実現したいことは
①データを読み込む
②読み込んだデータ内で適当に選んだ数値と数値を足す
③データ内の数値すべてに共通の数値をかける
ことです。

発生している問題・エラーメッセージ

今のところ、実行するとデータの数値が実行結果として表示されてしまいます

該当のソースコード

void setup(){
background(255);
size(800,400);

Table csvData = loadTable("2.csv","csv"); fill(0); //1行目 text(csvData.getString(0,0), 10,20); text(csvData.getString(0,1), 50,20); text(csvData.getString(0,2), 90,20); //2行目 text(csvData.getString(1,0), 10,40); text(csvData.getString(1,1), 50,40); text(csvData.getString(1,2), 90,40); //3行目 text(csvData.getString(2,0), 10,60); text(csvData.getString(2,1), 50,60); text(csvData.getString(2,2), 90,60); noLoop(); //ループしない

}

void draw(){
stroke(0,25,62);

}

試したこと

配列を作ってみようと思いましたが、うまくいきませんでした。

補足情報(FW/ツールのバージョンなど)

Processing3.5.3

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/11/19 05:25

ご指摘ありがとうございます。コンビニエンスストアになっていたのを修正いたしました
Y.H.

2020/01/28 14:35

非道い質問者ですね。。。
guest

回答2

0

ベストアンサー

グラフを書くならExcelのほうが早いし簡単ですよね?
学習目的か、なにか別の目的があるのかがわかったほうが回答しやすいです。

自力で描きたい場合は、こちらがわかりやすそうです。
棒グラフをプログラムで作ってみる – Yasushi Noguchi Class

手っ取り早く表示するなら、このライブラリが参考コードもあってわかりやすそうでした。
giCentre utilities — giCentre

適当にggっただけなので、他にもっといいものがあるかもしれません。

配列で詰まっておられるようなので、簡単にサンプルを作ってみました。

自力版

Processing

1void setup() { 2 background(255); 3 size(800, 400); 4 noLoop(); 5 6 Table csvData = loadTable("2.csv", "header,csv"); 7 int rowCount = csvData.getRowCount(); // ヘッダを除いた行数(データ件数) 8 9 // データ分の配列を作成 10 String[] names = new String[rowCount]; // 名前の配列 11 int[] heights = new int[rowCount]; // 身長の配列 12 int[] weights = new int[rowCount]; // 体重の配列 13 float[] bmis = new float[rowCount]; // BMIの配列 14 15 // データを配列に代入 16 for (int i = 0; i < rowCount; i++) { 17 names[i] = csvData.getString(i, "名前"); 18 heights[i] = csvData.getInt(i, "身長"); 19 weights[i] = csvData.getInt(i, "体重"); 20 bmis[i] = weights[i] / ((heights[i] * 0.01) * (heights[i] * 0.01)); // 体重(kg) / (身長(m) * 身長(m)) 21 22 println("名前:" + names[i] + " 身長:" + heights[i] + "cm 体重:" + weights[i] + "kg BMI:" + bmis[i]); 23 } 24 25 // 表の表示 26 fill(0); 27 for (int i = 0; i < rowCount; i++) { 28 int y = 20 + i * 20; 29 text(names[i], 10, y); 30 text(heights[i], 50, y); 31 text(weights[i], 90, y); 32 text(bmis[i], 130, y); 33 } 34 35 // グラフ背景の表示 36 int scale = 10; // 数字が小さいので引き延ばす倍率 37 fill(250, 100, 100); // 肥満の色 38 rect(180, 0, 40 * scale, rowCount * 23); 39 40 fill(250, 250, 200); // 普通の色 41 rect(180, 0, 25 * scale, rowCount * 23); 42 43 fill(170, 250, 250); // 痩せの色 44 rect(180, 0, 18.5 * scale, rowCount * 23); 45 46 // グラフの表示 47 fill(127); 48 for (int i = 0; i < rowCount; i++) { 49 int y = 5 + i * 22; 50 rect(180, y, bmis[i] * scale, 15); 51 } 52}

実行結果

ライブラリ版

Processing

1import org.gicentre.utils.stat.*; // グラフライブラリを使えるようにする 2 3// 各関数(setupとdraw)で使えるようにBarChart型の変数を宣言 4BarChart barChart; 5 6void setup() 7{ 8 size(800, 400); 9 10 Table csvData = loadTable("2.csv", "header,csv"); 11 int rowCount = csvData.getRowCount(); // ヘッダを除いた行数(データ件数) 12 13 // データ分の配列を作成 14 String[] names = new String[rowCount]; // 名前の配列 15 int[] heights = new int[rowCount]; // 身長の配列 16 int[] weights = new int[rowCount]; // 体重の配列 17 float[] bmis = new float[rowCount]; // BMIの配列 18 19 // データを配列に代入 20 for (int i = 0; i < rowCount; i++) { 21 names[i] = csvData.getString(i, "名前"); 22 heights[i] = csvData.getInt(i, "身長"); 23 weights[i] = csvData.getInt(i, "体重"); 24 bmis[i] = weights[i] / ((heights[i] * 0.01) * (heights[i] * 0.01)); // 体重(kg) / (身長(m) * 身長(m)) 25 26 println("名前:" + names[i] + " 身長:" + heights[i] + "cm 体重:" + weights[i] + "kg BMI:" + bmis[i]); 27 } 28 29 // BarChartの作成・データをセット 30 barChart = new BarChart(this); 31 barChart.setData(bmis); 32 barChart.setBarLabels(names); 33 34 // 最大値・最小値の設定 35 barChart.setMinValue(0); 36 barChart.setMaxValue(40); 37 38 // 色の設定 39 barChart.setAxisColour(0); 40 barChart.setAxisLabelColour(0); 41 barChart.setAxisValuesColour(0); 42 43 // 軸の表示 44 barChart.showValueAxis(true); 45 barChart.showCategoryAxis(true); 46} 47 48void draw() 49{ 50 background(255); 51 52 // 表示範囲を決めグラフの表示 53 barChart.draw(15, 15, width - 30, height - 30); 54 noLoop(); 55}

実行結果
2.csv

csv

1名前,身長,体重 2Aさん,182,80 3Bさん,167,48 4Cさん,170,98

投稿2019/11/23 07:51

編集2024/03/04 09:23
TN8001

総合スコア9862

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/12/02 13:03

回答ありがとうございます。 拙い質問に答えてくださったこと非常に嬉しく思います。 大変恐縮ではございますが、回答を実行してみたところ、うまく表示されませんでした。自力版のデータを配列に代入のfor文の中身を教えていただきたいです。
TN8001

2019/12/02 20:42

自力版のコードと私の"2.csv"(回答の最後についています)で表示されませんか? csvをUTF-8で保存してください。思い当たるのはそれくらいです。 それでも回答コードが動かない場合は、エラーが出ているならばそれをコピペしていただいてコメントください。 forの内容ですが まずヘッダー付きのcsv(1行目に各桁の名前が付いているもの)を読み込む場合、Table csvData = loadTable("2.csv", "header,csv");とheader,と入れる必要があります。 csvData.getString(0, "名前")等、そのヘッダーを指定してアクセスができます。 この場合csvData.getString(0, 0)と同じ意味です。ヘッダーを飛ばして2行目の最初の桁 "Aさん"になります。 heights[i] = csvData.getInt(i, "身長");(csvData.getInt(i, 1);) を例にとりますと heights[0] = csvData.getInt(0, "身長"); heights[1] = csvData.getInt(1, "身長"); heights[2] = csvData.getInt(2, "身長"); とやっていることになります。 同じように名前・体重も取得し何か計算をされたいようだったので、例としてBMI(Body Mass Index 肥満度を表す指数のひとつ)を計算しました。 回答コードは動いてmimaiさんのcsvにうまく適用できない時や、配列やforについての疑問があれば新たに質問を立てていただけたらと思います。
退会済みユーザー

退会済みユーザー

2019/12/09 02:50

ご丁寧に解説ありがとうございます。勉強になりました。 また、csvをUTF-8で保存したら上手くいきました。 TN8001さんのおかげでなんとか自分がつくりたいと思っていたプログラムが完成しました。 本当にありがとうございました。
guest

0

コンピュータはあなたが指示した通りにしか動きません。「適当に」とか「同じ数を」とかいう指示は通用しません。
まず、あなたが「何をさせたいのか」をはっきり把握しましょう。なにをさせたいのかがわからなければどういう指示を出せばいいのか(どういうプログラムを与えればいいのか)がわかる訳ありませんから。

投稿2019/11/19 14:53

thkana

総合スコア7703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/12/02 13:05

回答ありがとうございます。 もっとたくさん考えて、やってみます。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問