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

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

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

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

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

Q&A

解決済

2回答

2028閲覧

csvファイルから度数分布表の表示したい

Ririko

総合スコア1

Matplotlib

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

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

0グッド

0クリップ

投稿2021/04/14 04:26

編集2021/04/14 06:52

前提・実現したいこと

取り込んだramen.csvを解析し、度数分布が表示されるようにしたい
ここに質問の内容を詳しく書いてください。
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。

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

エラーメッセージ

The default interactive shell is now zsh.
To update your account to use zsh, please run chsh -s /bin/zsh.
For more details, please visit https://support.apple.com/kb/HT208050.
toko/opt/anaconda3/bin/activateAir:kivy sandairisatoko$ source /Users/sandairisa
/Users/sandairisatoko/opt/anaconda3/envs/Kivy/bin/python /Users/sandairisatoko/Desktop/kivy/image/vanalysis09.py
(base) sandairisatokonoMacBook-Air:kivy sandairisatoko$ /Users/sandairisatoko/opt/anaconda3/envs/Kivy/bin/python /Users/sandairisatoko/Desktop/kivy/image/vanalysis09.py
conda activate Kivy
/Users/sandairisatoko/opt/anaconda3/envs/Kivy/bin/python /Users/sandairisatoko/Desktop/kivy/image/vanalysis09.py
Traceback (most recent call last):
File "/Users/sandairisatoko/Desktop/kivy/image/vanalysis09.py", line 56, in <module>
ax.hist(X.iloc[:,i], bins=10, color='#000000')
File "/Users/sandairisatoko/opt/anaconda3/envs/Kivy/lib/python3.6/site-packages/matplotlib/init.py", line 1447, in inner
return func(ax, *map(sanitize_sequence, args), **kwargs)
File "/Users/sandairisatoko/opt/anaconda3/envs/Kivy/lib/python3.6/site-packages/matplotlib/axes/_axes.py", line 6576, in hist
self._process_unit_info(xdata=x[0], kwargs=kwargs)
File "/Users/sandairisatoko/opt/anaconda3/envs/Kivy/lib/python3.6/site-packages/matplotlib/axes/_base.py", line 2189, in _process_unit_info
kwargs = _process_single_axis(xdata, self.xaxis, 'xunits', kwargs)
File "/Users/sandairisatoko/opt/anaconda3/envs/Kivy/lib/python3.6/site-packages/matplotlib/axes/_base.py", line 2172, in _process_single_axis
axis.update_units(data)
File "/Users/sandairisatoko/opt/anaconda3/envs/Kivy/lib/python3.6/site-packages/matplotlib/axis.py", line 1466, in update_units
default = self.converter.default_units(data, self)
File "/Users/sandairisatoko/opt/anaconda3/envs/Kivy/lib/python3.6/site-packages/matplotlib/category.py", line 107, in default_units
axis.set_units(UnitData(data))
File "/Users/sandairisatoko/opt/anaconda3/envs/Kivy/lib/python3.6/site-packages/matplotlib/category.py", line 176, in init
self.update(data)
File "/Users/sandairisatoko/opt/anaconda3/envs/Kivy/lib/python3.6/site-packages/matplotlib/category.py", line 211, in update
cbook._check_isinstance((str, bytes), value=val)
File "/Users/sandairisatoko/opt/anaconda3/envs/Kivy/lib/python3.6/site-packages/matplotlib/cbook/init.py", line 2251, in _check_isinstance
type_name(type(v))))
TypeError: 'value' must be an instance of str or bytes, not a float
(base) sandairisatokonoMacBook-Air:kivy sandairisatoko$ conda activate Kivy
(Kivy) sandairisatokonoMacBook-Air:kivy sandairisatoko$ /Users/sandairisatoko/opt/anaconda3/envs/Kivy/bin/python /Users/sandairisatoko/Desktop/kivy/image/vanalysis09.py
Traceback (most recent call last):
File "/Users/sandairisatoko/Desktop/kivy/image/vanalysis09.py", line 56, in <module>
ax.hist(X.iloc[:,i], bins=10, color='#000000')
File "/Users/sandairisatoko/opt/anaconda3/envs/Kivy/lib/python3.6/site-packages/matplotlib/init.py", line 1447, in inner
return func(ax, *map(sanitize_sequence, args), **kwargs)
File "/Users/sandairisatoko/opt/anaconda3/envs/Kivy/lib/python3.6/site-packages/matplotlib/axes/_axes.py", line 6576, in hist
self._process_unit_info(xdata=x[0], kwargs=kwargs)
File "/Users/sandairisatoko/opt/anaconda3/envs/Kivy/lib/python3.6/site-packages/matplotlib/axes/_base.py", line 2189, in _process_unit_info
kwargs = _process_single_axis(xdata, self.xaxis, 'xunits', kwargs)
File "/Users/sandairisatoko/opt/anaconda3/envs/Kivy/lib/python3.6/site-packages/matplotlib/axes/_base.py", line 2172, in _process_single_axis
axis.update_units(data)
File "/Users/sandairisatoko/opt/anaconda3/envs/Kivy/lib/python3.6/site-packages/matplotlib/axis.py", line 1466, in update_units
default = self.converter.default_units(data, self)
File "/Users/sandairisatoko/opt/anaconda3/envs/Kivy/lib/python3.6/site-packages/matplotlib/category.py", line 107, in default_units
axis.set_units(UnitData(data))
File "/Users/sandairisatoko/opt/anaconda3/envs/Kivy/lib/python3.6/site-packages/matplotlib/category.py", line 176, in init
self.update(data)
File "/Users/sandairisatoko/opt/anaconda3/envs/Kivy/lib/python3.6/site-packages/matplotlib/category.py", line 211, in update
cbook._check_isinstance((str, bytes), value=val)
File "/Users/sandairisatoko/opt/anaconda3/envs/Kivy/lib/python3.6/site-packages/matplotlib/cbook/init.py", line 2251, in _check_isinstance
type_name(type(v))))
TypeError: 'value' must be an instance of str or bytes, not a float
(Kivy) sandairisatokonoMacBook-Air:kivy sandairisatoko$

該当のソースコード

ソースコード #-*- coding: utf-8 -*- # matplotlibで作図する練習06:いろいろな度数分布図を描く(複数グラフ) # システム関係のコマンドライブラリ import sys # データベースライブラリ pandas import pandas as pd # 計算用のライブラリ numpy import numpy as np # 作図ライブラリ matplotlib import matplotlib.pyplot as plt # 日本語フォントを設定するためのライブラリ from matplotlib.font_manager import FontProperties fp = FontProperties(fname=r'./fonts/mplus-2p-black.ttf', size=10) # figureオブジェクトを生成する fig = plt.figure() # データを読み込む try: ramen = pd.read_csv('./data/ramen.csv') except: print('Data File Read Error: Exit') sys.exit() # 前回の課題からの再利用:度数分布を作成する対象のみを抜き出したデータフレームをつくる X = ramen.loc[:, ['Brand','Variety','Style','Country','Stars','Top Ten']] # 作図用に日本語のラベルをつくる ramen_vnames=['雰囲気','清潔さ','設備','場所','安全','スタッフ','値打ち感'] # figureを生成する:普通の棒グラフを使った度数分布 fig, axes = plt.subplots(3,3) cmax = len(X.columns) for i, ax in enumerate(axes.flat): if i >= cmax: break else: #sns.violinplot(X.iloc[:,i], showmedians=True, color='#ED7D31', ax=ax) ax.hist(X.iloc[:,i], bins=10, color='#000000') #ax.boxplot(X.iloc[:,i], showfliers=False, patch_artist=True, boxprops=dict(facecolor='#70AD47')) ax.set_title(ramen_vnames[i], fontproperties=fp) ax.set_xlabel('評定値', fontproperties=fp,color='#70AD47') ax.set_ylabel('度数', fontproperties=fp, color='#70AD47') # 余白を調整する plt.subplots_adjust(wspace=0.6, hspace=1.0) # 表示する plt.show()

試したこと

ここに問題に対して試したことを記載してください。

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

jeanbiego

2021/04/14 04:39

・同じ質問が2つ投稿されているので、どちらか消してください。 ・このコードの問題点はどこですか。エラーがあるならエラー文を質問欄に載せてください。 ・再現できるcsvデータ(ダミーデータでもよい)があると回答がつきやすいです。
meg_

2021/04/14 05:09

質問タグの「PHP」はどう関係していますか?
Ririko

2021/04/14 05:18

すみません、PHPではなく、Pythonです、編集し直しておきます。 ご指摘ありがとうございます。
Ririko

2021/04/14 05:29

@jeanbiego こちらもご指摘ありがとうございます。 初めて利用したので、教えていただけてよかったです。
jeanbiego

2021/04/14 05:59

>Ririkoさん 伝え忘れました、エラーは「全文」を載せるようにお願いします。でないと、どこの箇所が原因かわかりづらいので。
Ririko

2021/04/14 06:53

>jeanbiego すみません、載せ直しました。 ご指摘ありがとうございます。
guest

回答2

0

参考になりそうなスレッドを見つけました。listやseriesでは同様のエラーが起きるが、numpy配列では起きないとあります。原因は文字列データ群にnp.nanが含まれていることにあるようです。
histplot with categorical values crashes with missing data, though numerical values work fine #2295

実際、
plt.bar(["a", "b", np.nan], [1, 2, 3]) TypeError: 'value' must be an instance of str or bytes, not a floatを返しますが、
plt.bar(np.array(["a", "b", np.nan]), [1, 2, 3]) はグラフを表示ししました。

というわけで、これを試してみてください。

python3

1ax.hist(X.iloc[:,i].to_numpy(), bins=10, color='#000000')

投稿2021/04/14 14:35

編集2021/04/14 14:37
jeanbiego

総合スコア3966

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

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

0

ベストアンサー

回答にはなっていませんが、Windowsではフォントを変えるだけで表示されました。
ただし、データは簡単なものです。

イメージ説明

そのため、エラーの原因は不明です。

変更したコードは以下です。

python

1#-*- coding: utf-8 -*- 2 3# matplotlibで作図する練習06:いろいろな度数分布図を描く(複数グラフ) 4 5# システム関係のコマンドライブラリ 6import sys 7 8# データベースライブラリ pandas 9import pandas as pd 10 11# 計算用のライブラリ numpy 12import numpy as np 13 14# 作図ライブラリ matplotlib 15import matplotlib.pyplot as plt 16 17# 日本語フォントを設定するためのライブラリ 18from matplotlib.font_manager import FontProperties 19#fp = FontProperties(fname=r'./fonts/mplus-2p-black.ttf', size=10) #Windowsなので次行に変更 20fp = FontProperties(fname=r'C:\WINDOWS\Fonts\msgothic.ttc', size=10) 21 22# figureオブジェクトを生成する 23#fig = plt.figure() 不要なのでコメント化 24 25 26# データを読み込む 27#try: 28# ramen = pd.read_csv('./data/ramen.csv') 29#except: 30# print('Data File Read Error: Exit') 31# sys.exit() 32# 33# 前回の課題からの再利用:度数分布を作成する対象のみを抜き出したデータフレームをつくる 34 35#X = ramen.loc[:, ['Brand','Variety','Style','Country','Stars','Top Ten']] 36#以下でテスト用のデータフレーム作成 37import io 38 39indata = '''Brand,Variety,Style,Country,Stars,Top Ten 4050,50,50,50,50,70 4150,50,50,50,70,50 4250,50,50,70,50,50 4350,50,70,50,50,50 4450,70,50,50,50,50 4570,50,50,50,50,50 4650,50,50,50,50,50 4750,50,50,50,50,90 4850,50,50,50,90,50 4950,50,50,90,50,50 5050,50,90,50,50,50 5150,90,50,50,50,50 5290,50,50,50,50,50 5350,50,50,50,50,50''' 54 55with io.StringIO(indata) as f: 56 X = pd.read_csv(f, sep=',', engine='python') 57 58# 作図用に日本語のラベルをつくる 59 60ramen_vnames=['雰囲気','清潔さ','設備','場所','安全','スタッフ','値打ち感'] 61 62# figureを生成する:普通の棒グラフを使った度数分布 63 64fig, axes = plt.subplots(3,3) 65 66cmax = len(X.columns) 67 68 69for i, ax in enumerate(axes.flat): 70 if i >= cmax: 71 break 72 else: 73 #sns.violinplot(X.iloc[:,i], showmedians=True, color='#ED7D31', ax=ax) 74 ax.hist(X.iloc[:,i], bins=10, color='#000000') 75 #ax.boxplot(X.iloc[:,i], showfliers=False, patch_artist=True, boxprops=dict(facecolor='#70AD47')) 76 ax.set_title(ramen_vnames[i], fontproperties=fp) 77 ax.set_xlabel('評定値', fontproperties=fp,color='#70AD47') 78 ax.set_ylabel('度数', fontproperties=fp, color='#70AD47') 79 80 81# 余白を調整する 82plt.subplots_adjust(wspace=0.6, hspace=1.0) 83 84# 表示する 85plt.show()

これを流してみて表示されるようでしたら、コードの問題ではなくデータの問題ですね。

投稿2021/04/14 12:08

ppaul

総合スコア24670

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

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

Ririko

2021/04/14 14:09

ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問