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

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

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

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

Matplotlib

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

Python

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

Q&A

解決済

2回答

2354閲覧

Pythonでのcsv読み込みエラー&ヒートマップの質問

Kinsho

総合スコア18

CSV

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

Matplotlib

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

Python

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

0グッド

0クリップ

投稿2020/10/13 13:03

編集2020/10/13 13:11

本来質問は1つずつするべきなのは承知しておりますが,元が同じコードで関連しており2個分解決を待って順次質問する時間がないのでまとめさせていただきます.

質問1つ目(could not convert string to float:)

シミュレーションの結果確認のためにPythonのヒートマップを使いたいのですが,csvが通ってくれません.

また一部のデータについてexcelの方で保存方法などをいじってたらなぜか通るようになったのですが,何がよかったのかさっぱり分かりません.元々のシミュレーションで使っているc++のコードから出力されてくるcsvがそのまま通る仕様にしたいので,「手動で毎回excelを開いて設定をいじる」といった方法ではなく根本的な解決法を教えてほしいです.

またこのエラー文について調べたところ,「数字の前後に"があるために失敗している」などといった記述が見られましたがテキストで開いてみてもそのようなこともないような気がして,結局原因や対処法が分かりません.

因みに下のプログラムを通過したcsvの例はt=0vxvy.csv,下記のエラーを出されるcsvの例はt=10vxvy.csvです.

該当のソースコード

Python

1import math 2import numpy as np 3import matplotlib.pyplot as plt 4 5p2=np.loadtxt('t=10vxvy.csv',delimiter=',') 6 7 8yy,zz=[],[] 9y=p2[0,:] 10z=p2[:,0] 11y=y[1:] 12z=z[1:] 13 14for num in range(len(y)): 15 yy.append(y) 16for num in range(len(z)): 17 zz.append(z) 18Y=np.array(yy) 19Z=np.array(zz).T 20 21p2=np.delete(p2,0,1) 22p2=np.delete(p2,1,0) 23 24plt.contourf(Y,Z,p2,5) 25plt.xlabel('vx') 26plt.ylabel('vy') 27plt.colorbar() 28plt.show()

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

--------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-34-3624bbc7010d> in <module> 3 import matplotlib.pyplot as plt 4 ----> 5 p2=np.loadtxt("t=10vxvy.csv",delimiter=',') 6 7 ~\Anaconda3\lib\site-packages\numpy\lib\npyio.py in loadtxt(fname, dtype, comments, delimiter, converters, skiprows, usecols, unpack, ndmin, encoding, max_rows) 1137 # converting the data 1138 X = None -> 1139 for x in read_data(_loadtxt_chunksize): 1140 if X is None: 1141 X = np.array(x, dtype) ~\Anaconda3\lib\site-packages\numpy\lib\npyio.py in read_data(chunk_size) 1065 1066 # Convert each value according to its column and store -> 1067 items = [conv(val) for (conv, val) in zip(converters, vals)] 1068 1069 # Then pack it according to the dtype's nesting ~\Anaconda3\lib\site-packages\numpy\lib\npyio.py in <listcomp>(.0) 1065 1066 # Convert each value according to its column and store -> 1067 items = [conv(val) for (conv, val) in zip(converters, vals)] 1068 1069 # Then pack it according to the dtype's nesting ~\Anaconda3\lib\site-packages\numpy\lib\npyio.py in floatconv(x) 761 if '0x' in x: 762 return float.fromhex(x) --> 763 return float(x) 764 765 typ = dtype.type ValueError: could not convert string to float:

質問2つ目(グラデーションについて)

イメージ説明

先ほど掲載したコードを(偶然?)通過したcsv(t=0vxvy.csv)についてのヒートマップです.
縦軸横軸は±10^6を確保したいですが,散らばっている点の数は高々1000であり現実的には1格子内に100以上集まることはなく最低値は0なので[0,99]の範囲内で20色程度のグラデーションにしたいです.それについてplt.contourf(Y,Z,p2,5)をいじってみましたが,うまく変わりません.
またグラデーションの色のパターンはmatplotlibでは変更できないのでしょうか?(白→赤,白→青,虹色みたいなやつです)
調べたらseabornというツールで色を変更している記事は見つかりましたが元々私はPython自体初心者なのでよく分からず困っています.

文章がやや分かりにくくて申し訳ありませんが,以上2点についてアドバイスよろしくお願いします.

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

Anacondaは一括して本日アップデートしました。

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

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

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

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

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

meg_

2020/10/13 13:06

> Pythonなどのバージョンは最新のものにしてあります. インストール方法によってもバージョンは変わることがありますので明記しましょう。
guest

回答2

0

ベストアンサー

あなたのデータを使ってヒートマップを描いてみました。
Seabornが便利なのでいつも使ってます。
カラーマップ名はmatplotlibのサイトから拝借
Matplotlib Colormap

import seaborn as sns import pandas as pd data = pd.read_csv('10vxvy.csv', index_col=0) #data = pd.read_csv('0vxvy.csv', index_col=0) data = data.iloc[20:60, 20:60] # まわりの範囲を省略 sns.heatmap(data, cmap='Oranges');

イメージ説明

よろしかったら、参考にしてください。

投稿2020/10/13 14:16

technocore

総合スコア7337

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

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

Kinsho

2020/10/13 16:18

こんなにシンプルに書けるとは感動です. ありがとうございました!
guest

0

質問1つめのみ。
うまくいったCSVには行末に「,」(カンマ)がなく、うまくいかなかったCSVには行末に「,」がありますね。
うまくいかなかったCSVの行末のカンマを取り除いて実行したらいかがでしょうか。

投稿2020/10/13 14:10

ikapy

総合スコア1167

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

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

Kinsho

2020/10/13 16:17

確かによく見たらそうなっていますね. 元のコードをそのように修正したらうまくいきました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問