質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.41%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

2回答

224閲覧

列と行を同時に指定する方法

puyo_q

総合スコア0

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2023/12/03 12:25

実現したいこと

csvファイル(3クラスの成績表)を使ってCクラスの数学の成績のヒストグラムをプロットする。
(bins = 10、データは数学、物理、英語の順番になっている)

前提

phthonである特定のクラスのヒストグラムを作る課題です。
列(数学)だけなら指定する方法は分かるのですが、行(Cクラス)も指定するとなるとどうすればいいのか分かりません。

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

エラーメッセージ

該当のソースコード

phthon

1import numpy as np 2import pandas as pd 3import matplotlib.pyplot as plt 4 5df = pd.read_csv("seiseki2.csv",index_col=0) 6print(df.iloc["B"][:, 0].mean()) 7print(df.iloc["B"][:, 0].std()) 8 9x = np.random.normal(50, 30, 1000) 10plt.hist(x, bins=10) 11plt.show()

試したこと

5、6行目で列と行を同時に指定出来ないか試したが、上手くいかなかった。

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

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

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

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

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

melian

2023/12/03 12:33

seiseki2.csv の中身がよく判りませんので、先頭数行程度を質問に追記してもらえませんか?
puyo_q

2023/12/03 13:51

,Math,English,Physics C,98,93,59 B,11,66,20 B,58,70,18 A,92,36,83 C,31,23,98 A,53,44,57 C,8,30,51 ・ ・ ・ という感じです。
guest

回答2

0

CSV ファイルからクラスの情報もインデックスではなく列(列名: 'class')として読み込み,それを用いて必要なデータを抽出するのもひとつの方法かもしれません。

下記に記述例を示します。

Python

1import numpy as np 2import pandas as pd 3import matplotlib.pyplot as plt 4 5df = pd.read_csv('seiseki2.csv') 6df = df.rename(columns={df.columns[0]: 'class'}) 7print(df.iloc[:6]) 8# class Math English Physics 9# 0 B 59 49 81 10# 1 C 70 49 48 11# 2 C 43 47 77 12# 3 B 78 48 58 13# 4 A 57 56 77 14# 5 A 53 51 73 15 16print(f"{df.loc[df['class'] == 'B', 'Math'].mean() :.2f}") 17# 60.40 18print(f"{df.loc[df['class'] == 'B', 'Math'].std() :.2f}") 19# 11.45 20 21data = df.loc[df['class'] == 'C', 'Math'] 22plt.hist(data, bins=range(0, 101, 10)) 23plt.show()

描画結果 

投稿2024/03/20 06:45

編集2024/03/20 07:06
little_street

総合スコア387

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

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

0

私:

seiseki2.csv の中身がよく判りませんので、先頭数行程度を質問に追記してもらえませんか?

puyo_q さん:

,Math,English,Physics
C,98,93,59
B,11,66,20
B,58,70,18
A,92,36,83
C,31,23,98
A,53,44,57
C,8,30,51



という感じです。

※ 以下、seiseki2.csv の中身は適当に乱数で作成しています

python

1import numpy as np 2import pandas as pd 3import matplotlib.pyplot as plt 4 5df = pd.read_csv("seiseki2.csv",index_col=0) 6print(df.loc["B", "Math"].mean()) 7print(df.loc["B", "Math"].std()) 8 9df.loc["C", "Math"].hist(bins=10, range=(0, 100)) 10plt.show() 11 12# 66.6 13# 17.66323140282501

イメージ説明

投稿2023/12/03 13:52

編集2023/12/03 14:02
melian

総合スコア20167

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.41%

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

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

質問する

関連した質問