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

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

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

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

Q&A

1回答

4073閲覧

散布図(濃淡図)のグラフ化を行いたいです

kamijou

総合スコア0

Python

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

0グッド

0クリップ

投稿2020/04/27 01:03

編集2020/04/27 01:19

pythonで散布図(濃淡図)を作成していました。
matplotlibを実装中に以下のエラーメッセージが発生しました。

エラーメッセージ

C:\Users\comp1\Desktop\python_lesson>python Tc-Te_0005.py sys:1: DtypeWarning: Columns (2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47) have mixed types.Specify dtype option on import or set low_memory=False. sys:1: DtypeWarning: Columns (2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47) have mixed types.Specify dtype option on import or set low_memory=False. <class 'str'> Traceback (most recent call last): File "C:\Users\comp1\AppData\Local\Programs\Python\Python37\lib\site-packages\matplotlib\axis.py", line 1573, in convert_units ret = self.converter.convert(x, self.units, self) File "C:\Users\comp1\AppData\Local\Programs\Python\Python37\lib\site-packages\matplotlib\category.py", line 61, in convert unit.update(values) File "C:\Users\comp1\AppData\Local\Programs\Python\Python37\lib\site-packages\matplotlib\category.py", line 212, in update cbook._check_isinstance((str, bytes), value=val) File "C:\Users\comp1\AppData\Local\Programs\Python\Python37\lib\site-packages\matplotlib\cbook\__init__.py", line 2128, in _check_isinstance type_name(type(v)))) TypeError: 'value' must be an instance of str or bytes, not a float The above exception was the direct cause of the following exception: Traceback (most recent call last): File "Tc-Te_0005.py", line 40, in <module> plt.scatter(data.iloc[8:, 40], data.iloc[8:, 42]) File "C:\Users\comp1\AppData\Local\Programs\Python\Python37\lib\site-packages\matplotlib\pyplot.py", line 2816, in scatter None else {}), **kwargs) File "C:\Users\comp1\AppData\Local\Programs\Python\Python37\lib\site-packages\matplotlib\__init__.py", line 1565, in inner return func(ax, *map(sanitize_sequence, args), **kwargs) File "C:\Users\comp1\AppData\Local\Programs\Python\Python37\lib\site-packages\matplotlib\cbook\deprecation.py", line 358, in wrapper return func(*args, **kwargs) File "C:\Users\comp1\AppData\Local\Programs\Python\Python37\lib\site-packages\matplotlib\axes\_axes.py", line 4372, in scatter x = self.convert_xunits(x) File "C:\Users\comp1\AppData\Local\Programs\Python\Python37\lib\site-packages\matplotlib\artist.py", line 178, in convert_xunits return ax.xaxis.convert_units(x) File "C:\Users\comp1\AppData\Local\Programs\Python\Python37\lib\site-packages\matplotlib\axis.py", line 1576, in convert_units f'units: {x!r}') from e matplotlib.units.ConversionError: Failed to convert value(s) to axis units: 8 13.32512.34513.89513.32514.37613.81412.49612.6... 9 13.32512.34513.89513.32514.37613.81412.49612.6... 10 13.40712.34513.89513.32514.37613.81412.49612.6... 11 13.40712.34513.89513.32514.37613.81412.49612.6... 12 13.40712.34513.89513.32514.37613.81412.49612.6... ... 20979 NaN 20980 NaN 20981 NaN 20982 NaN 20983 NaN Name: c40, Length: 20976, dtype: object

該当のソースコード

import numpy as np import matplotlib.pyplot as plt import seaborn as sns import pandas as pd import os import glob sns.set() sns.set_style('whitegrid') sns.set_palette('gray') col_names = [ 'c{0:02d}'.format(i) for i in range(49) ] list = glob.glob('C:/Users/comp1/Desktop/python_lesson/A000005_csv_daily/202003/*.csv') count=0 for row in list: file = pd.read_csv(row,encoding="shift_jis", names=col_names) if(count==0): data = file count = 1 else: data = data + file data.describe() x = data.iloc[8:, 40] y = data.iloc[8:, 42] x = str(x) y = str(y) print(type(x)) fig = plt.figure() ax = fig.add_subplot(1, 1, 1) ax.scatter(x, y, s=10, alpha=0.01) plt.scatter(data.iloc[8:, 40], data.iloc[8:, 42]) plt.ylabel('Tcm-2') plt.xlabel('Tem-2') plt.show()

試したこと

複数のcsvデータを読み込み、それを一つのグラフにする際に
plt.scatter(data.iloc[8:, 40], data.iloc[8:, 42])
の行でエラーが出てしまいます

解答よろしくお願いいたします。

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

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

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

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

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

hayataka2049

2020/04/27 01:09

dataの実態がわからないと回答のしようがないので、編集して情報を追加してください。
hayataka2049

2020/04/27 01:10

それとコードやエラーメッセージは<code>ボタンで挿入できるコードブロック内に入れてください。
kamijou

2020/04/27 01:14

すいません。 もう一度質問を打ち直します。
hayataka2049

2020/04/27 01:19 編集

仮にコード全文があっても、ファイル読み込みがあるコードの場合、実際のファイル(同じフォーマットのダミーでもいいですが)と日本語の説明がないと見る側からしたら理解不能、と申し上げておきます。そしてコードブロックを使わないとインデントが消えて全然読めません(teratailの仕様上)。
magichan

2020/04/27 01:29

一応聞いておきますが、複数のCSVファイルを読み込んむ際に data = data + file としておりますが、各CSVデータの値を「足し合わせた」データをプロットしたいというので間違いありませんか?
kamijou

2020/04/27 01:33

一つのグラフ上に、各csvデータの (data.iloc[8:, 40], data.iloc[8:, 42]) のデータをプロット したいというイメージです。
magichan

2020/04/27 01:37 編集

あとできましたら、 data.describe() の行の次の行あたりで print(data.head()) print(data.dtypes) print(data.shape) を実行して、その(それぞれの)結果を貼っていただけませんでしょうか
kamijou

2020/04/27 01:48

C:\Users\comp1\Desktop\python_lesson>python Tc-Te_0005.py sys:1: DtypeWarning: Columns (2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47) have mixed types.Specify dtype option on import or set low_memory=False. sys:1: DtypeWarning: Columns (2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47) have mixed types.Specify dtype option on import or set low_memory=False. <class 'str'> Traceback (most recent call last): File "Tc-Te_0005.py", line 45, in <module> df = pd.DateFrame(np.data.iloc[8:, 40], data.iloc[8:, 42], columns=['Tcm-2','Tem-2']) File "C:\Users\comp1\AppData\Local\Programs\Python\Python37\lib\site-packages\pandas\__init__.py", line 263, in __getattr__ raise AttributeError(f"module 'pandas' has no attribute '{name}'") AttributeError: module 'pandas' has no attribute 'DateFrame' C:\Users\comp1\Desktop\python_lesson>python Tc-Te_0005.py sys:1: DtypeWarning: Columns (2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47) have mixed types.Specify dtype option on import or set low_memory=False. sys:1: DtypeWarning: Columns (2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47) have mixed types.Specify dtype option on import or set low_memory=False. c00 c01 ... c47 c48 0 VP0300VP0300VP0300VP0300VP0300VP0300VP0300VP03... DataLogger(PC)Ver.1.64DataLogger(PC)Ver.1.64Da... ... NaN NaN 1 ... ----------------------------------------------... NaN 2 年月日年月日年月日年月日年月日年月日年月日年月日年月日年月日年月日年月日年月日年月日年月日年... 時分秒時分秒時分秒時分秒時分秒時分秒時分秒時分秒時分秒時分秒時分秒時分秒時分秒時分秒時分秒時... ... 総合室外機電流値総合室外機電流値総合室外機電流値総合室外機電流値総合室外機電流値総合室外機電... NaN 3 ... floatfloatfloatfloatfloatfloatfloatfloatfloatf... NaN 4 ... 11111111111111111111111111 NaN [5 rows x 49 columns] c00 object c01 object c02 object c03 object c04 object c05 object c06 object c07 object c08 object c09 object c10 object c11 object c12 object c13 object c14 object c15 object c16 object c17 object c18 object c19 object c20 object c21 object c22 object c23 object c24 object c25 object c26 object c27 object c28 object c29 object c30 object c31 object c32 object c33 object c34 object c35 object c36 object c37 object c38 object c39 object c40 object c41 object c42 object c43 object c44 object c45 object c46 object c47 object c48 float64 dtype: object (20984, 49) <class 'str'> Traceback (most recent call last): File "C:\Users\comp1\AppData\Local\Programs\Python\Python37\lib\site-packages\matplotlib\axis.py", line 1573, in convert_units ret = self.converter.convert(x, self.units, self) File "C:\Users\comp1\AppData\Local\Programs\Python\Python37\lib\site-packages\matplotlib\category.py", line 61, in convert unit.update(values) File "C:\Users\comp1\AppData\Local\Programs\Python\Python37\lib\site-packages\matplotlib\category.py", line 212, in update cbook._check_isinstance((str, bytes), value=val) File "C:\Users\comp1\AppData\Local\Programs\Python\Python37\lib\site-packages\matplotlib\cbook\__init__.py", line 2128, in _check_isinstance type_name(type(v)))) TypeError: 'value' must be an instance of str or bytes, not a float The above exception was the direct cause of the following exception: Traceback (most recent call last): File "Tc-Te_0005.py", line 43, in <module> plt.scatter(data.iloc[8:, 40], data.iloc[8:, 42]) File "C:\Users\comp1\AppData\Local\Programs\Python\Python37\lib\site-packages\matplotlib\pyplot.py", line 2816, in scatter None else {}), **kwargs) File "C:\Users\comp1\AppData\Local\Programs\Python\Python37\lib\site-packages\matplotlib\__init__.py", line 1565, in inner return func(ax, *map(sanitize_sequence, args), **kwargs) File "C:\Users\comp1\AppData\Local\Programs\Python\Python37\lib\site-packages\matplotlib\cbook\deprecation.py", line 358, in wrapper return func(*args, **kwargs) File "C:\Users\comp1\AppData\Local\Programs\Python\Python37\lib\site-packages\matplotlib\axes\_axes.py", line 4372, in scatter x = self.convert_xunits(x) File "C:\Users\comp1\AppData\Local\Programs\Python\Python37\lib\site-packages\matplotlib\artist.py", line 178, in convert_xunits return ax.xaxis.convert_units(x) File "C:\Users\comp1\AppData\Local\Programs\Python\Python37\lib\site-packages\matplotlib\axis.py", line 1576, in convert_units f'units: {x!r}') from e matplotlib.units.ConversionError: Failed to convert value(s) to axis units: 8 13.32512.34513.89513.32514.37613.81412.49612.6... 9 13.32512.34513.89513.32514.37613.81412.49612.6... 10 13.40712.34513.89513.32514.37613.81412.49612.6... 11 13.40712.34513.89513.32514.37613.81412.49612.6... 12 13.40712.34513.89513.32514.37613.81412.49612.6... ... 20979 NaN 20980 NaN 20981 NaN 20982 NaN 20983 NaN Name: c40, Length: 20976, dtype: object というエラーコードになりました
guest

回答1

0

うーん、どうしましょうか。。
修正依頼にて作業を行ってもらった手前、一応回答をかいておきます。

問題は多々ありそうです。

1つ目は、data.dtype を表示してもらった結果、すべての列のtypeがobjectになっております。
これはデータが数値として読めていないことを意味しております(文字列データとして扱われてます)

2つ目は、読み込んだ複数のCSVの扱い方が明らかに間違っております。
現状 CSVを読み込む毎にループ内の処理にて

data = data + file

と行っておりますが、これでは DataFrame同士の結合ではなく DataFrame同士の足し算として扱われます。
(修正依頼にて質問した回答ではそのような意図はなさそうなのでこれも直す必用があります)

また、1つ目の問題点と2つ目の問題点が合わさって、現状では複数の複数のセルで 文字列同士の結合(足し合わせ) が大量に発生していそうです。
data.head()
の表示結果で
年月日年月日年月日年月日年月日年月日年月日年月日年月日年月日年月日年月日年月日年月日年月日年
のように同じ文字列が結合されたデータが出力されているのがそうです。
多分どこかのセルに '年月'という文字列データが入っており、複数のDataFrame同士で足し合わせた結果このようなデータが作成されたのかと思います。

で修正方法としては、とりあえずはデータの読み込み部を直すのが先かと思います。

本来ならば CSVデータ全てを真っ当なデータとして読み出せるように修正をするのが正攻法だと思うのですが手元にデータも無いので、とりあえずは点をプロットするのに必用な41列目と43列目のデータのみの読みこむように修正してみました。

Python

1import matplotlib.pyplot as plt 2import seaborn as sns 3import pandas as pd 4import glob 5 6sns.set() 7sns.set_style('whitegrid') 8sns.set_palette('gray') 9 10col_names = [ 'c{0:02d}'.format(i) for i in range(49) ] 11lst = glob.glob('C:/Users/comp1/Desktop/python_lesson/A000005_csv_daily/202003/*.csv') 12data = [] 13for row in lst: 14 df = pd.read_csv(row,encoding="shift_jis", names=col_names) 15 data.append(df.iloc[8:, [40,42]].astype(float)) 16df = pd.concat(data, ignore_index=True) 17df.columns = ['x', 'y'] 18print(df) 19 20ax = plt.subplot() 21ax.scatter(df.x, df.y, s=10, alpha=0.01) 22ax.set_ylabel('Tcm-2') 23ax.set_xlabel('Tem-2') 24plt.show()

とりあえず、こんな感じで動作するのではないでしょうか。

手元にデータが無い為、動作確認はしておりません。
エラーが発生するような場合には 202003 フォルダ以下のCSVファイルをとりあえず1つにしてみて動作を見てください。

投稿2020/04/27 04:18

magichan

総合スコア15898

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問