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

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

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

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

Python

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

Q&A

1回答

1195閲覧

Pythonにて文字列が含まれているCSVファイルからグラフを作る方法

antman

総合スコア1

CSV

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

Python

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

0グッド

0クリップ

投稿2021/11/05 05:42

編集2021/11/05 06:37

前提・実現したいこと

pythonを使い始めて10日の初心者です。
数値と文字列を含んだCSVファイルを読み込んでその中の一部のデータを用いてグラフを表示させるプログラムを作ろうと頑張っています。
CSVファイルのデータの形は42000行1列で頭と途中に文字列を含んでいます。
具体的には49行目、50行目、62行目を用いてグラフのx軸の値を次のように作り、
x=49行目+50行目*(0~62行目回数分)
y軸の値は65行目~1445行目までの値を使ってxyグラフを作りたいです。
49行目、50行目、62行目、65行目~1445行目までは数値で、それ以外は文字が含まれています。

色々調べたのですが、範囲を指定する方法がさっぱり分かりません。
もっと自分で1から勉強すべきなのですが、大変申し訳ないのですがpythonに詳しい方、ぜひ教えていただきたいです。
よろしくお願いいたします。

CSVファイルの中身の簡単な図解(数字、文字は適当です)

(1行目)abcd



(49行目)10
(50行目)0.5



(62行目)1381
(63行目)abcd
(64行目)abcd
(65行目)6987



(1445行目)5984

該当のソースコード

Python

1import pandas as pd 2import os, tkinter, tkinter.filedialog, tkinter.messagebox 3 4root = tkinter.Tk() 5root.withdraw() 6 7filetype = [("", "*.csv")] 8 9dirpath = os.path.abspath(os.path.dirname(file)) 10 11tkinter.messagebox.showinfo('fileselect', 'ファイルを選択してください') 12 13filepath = tkinter.filedialog.askopenfilename(filetypes = filetype, initialdir = dirpath) 14 15dataset = pd.read_csv(filepath) 16 17dataset[65:1445].plot()

このコードで文字が含まれていないCSVデータをグラフ化することができました

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

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

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

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

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

1T2R3M4

2021/11/05 05:52 編集

>早急に必要 ならば有償で頼める方を探した方がいいですよ。
bsdfan

2021/11/05 06:17

x=49行目+50行目*(0~62行目回数分) の意味がよくわかりません。49: 1234, 50: 6587, 62: 2689 の場合はどうなるのでしょう? xとyの個数が合わない場合もあるのでしょうか? 急ぐのなら、Excel等の表計算ソフトで、手でデータを並べ替えるのもありだと思います。
antman

2021/11/05 06:48 編集

わかりにくくてすみません。図解のほうを修正しておきますね。 数字が適当なのでこの例はおかしくなってしまいますね。xとyの個数は一致しないといけません。 実際は49:10,50:0.5,62:1381になります。 このとき、yのデータ数は(65行目)~(1445行目)なので、1381個になって62行目のxのデータ数と一致します。 これを踏まえて、x=49行目+50行目*(0~62行目回数分)の意味はxのデータを49行目の値である10にてスタートして、+0.5を62行目の値である1381回繰り返し0.5ずつ増加したしたデータを1381個作りたいということです。 私も最初Exelでやろうとしたのですがこのようなファイルが大量にあり手作業でやると果てしない作業量になるのでpythonでやりたいです。
guest

回答1

0

こんな感じでしょうか。

read_csv()で、header=Noneしないと1行目がヘッダとして扱われるので、行がずれます。

python

1import pandas as pd 2 3dataset = pd.read_csv(filepath, header=None, dtype=str) 4# 扱いやすいようにarrayに変換 5dataset = dataset[0].array 6 7n = int(dataset[61]) 8x = float(dataset[48]) + float(dataset[49]) * np.arange(n) 9y = dataset[64:64 + n].astype(float) 10 11pd.DataFrame({'x': x, 'y': y}).plot('x', 'y')

投稿2021/11/05 08:15

bsdfan

総合スコア4794

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

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

antman

2021/11/05 08:39

アンサーありがとうございます。 教えて頂いたコードを入れてみると「could not convert string to float: 'XPS'」というエラーメッセージが出てくるのですがこれは何が原因なのでしょうか?
bsdfan

2021/11/05 08:57

65行目からのデータに XPS という文字列が入り込んでいるためのエラーです。 dataset[48], dataset[49], dataset[61], dataset[64]あたりが想定の数字になっているかprintしてチェックしてみてください。行番号があっていないかもしれないです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問