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

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

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

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

Python

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

Q&A

解決済

1回答

1740閲覧

python csv グラフ、散布図の表示(float,'')

kuma07

総合スコア9

CSV

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

Python

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

0グッド

0クリップ

投稿2020/07/25 07:02

編集2020/07/27 02:28

株価の移動平均グラフ、ゴールデンクロス位置を散布図で実現させたいプログラミング初心者です。

プログラムを実行すると、終値、移動平均のグラフは表示されるのですが、散布図のY軸がうまく表示できません。添付のファイルのように散布図のY軸は下記の’22,288.14’となってますが、本来はこの「22,288.14」はN255上の数値(N=15 のときはN255のY軸は22,288.14)と一致させたいのですが一致できないです

イメージ説明説明ジ説明](28b32ff52f3793afd4a3f98233950e9d.png)明](821275e844b03dd02ed3806af5dce030.png)](0712aa29bf2a5a32c80d741317563cd1.png)

終値のグラフは、下記でfloatに変換したうえで描いております
一方、散布図は、mydf1をiloc関数で抽出しております

散布図のY座標は
golden_y= ['22,288.14']のように’’があるからではと思いましたが
map関数をns=map(lambda s:float(s),golden_y)を試しましたがうまく変換できなかったです。
よく理解できていないです。

考えられる原因などにつきましてアドバイスいただけますと大変ありがたいです。
わかりにくい質問で申し訳ありませんがよろしくお願いいたします。

python

1<こちらはわかりにくいコードですので、もう1つ下のコードをご確認ください> 2#移動平均GC DCを描く 3 4import numpy as np 5import pandas as pd 6import matplotlib.pyplot as plt 7from sklearn import linear_model 8from sklearn import metrics 9 10#CSVファイルの読み込み 11 12mydf1=pd.read_csv('NIKKEI20200719.csv') 13 14#DATEで順番の並び替え 15mydf1=mydf1.sort_values(by=['DATE']) 16 17#print(mydf.head()) 18N=len(mydf1) 19print('N=',N) 20 21nikkei=mydf1['FINISH'] 22nikkei=nikkei.apply(lambda x: x.replace(',','')).astype(np.float)#これで終値グラフはfloat 23 24types=[[5,25],[25,75],[13,26]] 25for short_day,long_day in types: 26 #移動平均 27 rolling_s=nikkei.rolling(short_day).mean().fillna(0) 28 rolling_l=nikkei.rolling(long_day).mean().fillna(0) 29 #print('MA=',rolling_s.tail()) 30 31 #クロスを確認 32 over = rolling_s > rolling_l 33 over_major=(over+over.shift(1)+over.shift(2))>=2 34 golden=(over_major!=over_major.shift(1))&(over_major==True) 35 dead=(over_major!=over_major.shift(1))&(over_major==False) 36 37 #列追加 38 #0:クロスなし、1:GC、-1:DC 39 col_name = 'cross_' + str(short_day)+'_'+str(long_day) 40 mydf1[col_name]=[x+y*-1 for x,y in zip(golden,dead)] 41 mydf1[col_name]=np.append(np.array([0]*(long_day+3)),mydf1[col_name][long_day+3:]) 42 43 #チャート 44 plt.plot(range(len(mydf1)),nikkei,label='N255') 45 plt.plot(range(short_day-1,len(mydf1)),rolling_s[short_day-1:],color='r',label='MA'+str(short_day)) 46 plt.plot(range(long_day-1,len(mydf1)),rolling_l[long_day-1:],color='g',label='MA'+str(long_day)) 47 plt.legend(loc='upper left') 48 plt.grid() 49 plt.xlim(len(mydf1)-250,len(mydf1)+1)# 50 51 52 crosses=mydf1[mydf1[col_name]!=0] 53 golden_x = [] 54 golden_y = [] 55 golden_day=[] 56 dead_x=[] 57 dead_y=[] 58 dead_day=[] 59 for i in range(len(crosses)): 60 if (crosses.iloc[i][col_name]==1): 61 golden_x.append(crosses.index[i]) 62 golden_y.append(crosses.iloc[i]['FINISH'])#golden_y はリストを参照にする 63 golden_day.append(crosses.iloc[i]['DATE'])# 64 else: 65 dead_x.append(crosses.index[i]) 66 dead_y.append(crosses.iloc[i]['FINISH'])# 67 dead_day.append(crosses.iloc[i]['DATE'])# 68 69 plt.scatter(golden_x,golden_y,c='black',s=80,marker='^') 70 71 plt.show()

python

1<こちらを確認してもらえると助かります> 2#移動平均GC DCを描く 3import numpy as np 4import pandas as pd 5import matplotlib.pyplot as plt 6from sklearn import linear_model 7from sklearn import metrics 8 9#CSVファイルの読み込み 10mydf1=pd.read_csv('NIKKEI20200726.csv') 11 12#DATEで順番の並び替え 13mydf1=mydf1.sort_values(by=['DATE']) 14 15#print(mydf.head()) 16N=len(mydf1) 17print('N=',N) 18 19nikkei=mydf1['FINISH'] 20nikkei=nikkei.apply(lambda x: x.replace(',','')).astype(np.float)#これで終値グラフはfloat 21 22plt.plot(range(len(mydf1)),nikkei,label='N255') 23 24golden_x = [15] 25golden_y = [] 26golden_y.append(mydf1.iloc[15][1])#golden_y はリストを参照にする 27ns=map(lambda s:float(s),golden_y)## 28#print(list(ns)) 29print('golden_x=',golden_x) 30print('golden_y=',golden_y) 31 32#チャート 33plt.legend(loc='upper left') 34plt.xlim(0,len(mydf1)+1)#修正 35 36plt.scatter(golden_x,golden_y,c='black',marker='^') 37 38plt.show() 39 40> 引用テキスト 41```CSV 42コード 43DATE FINISH START HIGH LOW VOLUME RATE 442020/7/17 22,696.42 22,807.57 22,857.82 22,643.52 558.65M -0.32% 452020/7/16 22,770.36 22,907.96 22,925.90 22,739.42 894.44M -0.76% 462020/7/15 22,945.50 22,817.91 22,965.56 22,800.11 725.70M 1.59% 472020/7/14 22,587.01 22,631.87 22,677.02 22,538.78 609.65M -0.87% 482020/7/13 22,784.74 22,591.81 22,784.74 22,561.47 712.47M 2.22% 492020/7/10 22,290.81 22,534.97 22,563.68 22,285.07 788.05M -1.06% 502020/7/9 22,529.29 22,442.30 22,679.08 22,434.38 651.67M 0.40% 512020/7/8 22,438.65 22,481.61 22,667.95 22,438.65 649.12M -0.78% 522020/7/7 22,614.69 22,649.90 22,742.28 22,540.44 626.64M -0.44% 532020/7/6 22,714.44 22,341.27 22,734.11 22,325.75 580.11M 1.83% 542020/7/3 22,306.48 22,266.91 22,312.44 22,154.97 516.77M 0.72% 552020/7/2 22,145.96 22,182.68 22,267.51 22,072.11 735.69M 0.11% 562020/7/1 22,121.73 22,338.30 22,360.31 22,039.56 673.60M -0.75% 572020/6/30 22,288.14 22,335.10 22,448.30 22,273.38 741.69M 1.33% 582020/6/29 16,995.04 22,255.05 22,281.38 21,969.59 737.16M -2.30% 592020/6/26 12,512.08 22,424.37 22,589.14 22,408.27 666.39M 1.13% 602020/6/25 18,259.79 22,287.87 22,423.41 22,165.14 808.20M -1.22% 612020/6/24 12,534.32 22,541.01 22,663.29 22,479.86 669.68M -0.07% 622020/6/23 12,549.05 22,636.06 22,693.89 22,257.14 - 0.50%

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

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

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

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

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

kuma07

2020/07/25 07:28

貴重なアドバイアスありがとうございます。 大変失礼いたしました。 <CODE>で入力し、CSVのデータの一部も置いてみました。
yymmt

2020/07/26 07:18

> 添付のファイルのように散布図のY軸はすべて同じ位置にあります 添付のファイルが表示されていません。どのような状態でしょうか?
kuma07

2020/07/27 01:50

わかりにくく申し訳ありません。 単純化したコードと結果の図表を添付いたしました。 よろしくお願いいたします
guest

回答1

0

ベストアンサー

golden_y= ['22,288.14']のように’’があるからではと思いましたが

map関数をns=map(lambda s:float(s),golden_y)を試しましたがうまく変換できなかったです。

変換に失敗する理由は数値にコンマが含まれるためです。一旦コンマを削除して下さい。
またmatplotlib.scatter()の引数として渡すためにリストとして取り出して下さい。

python

1golden_y = list(map(lambda s: float(s.replace(",", "")), golden_y))

投稿2020/07/27 03:55

yymmt

総合スコア1615

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

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

kuma07

2020/07/27 08:52

ありがとうございます。こちらが原因でした。このコードを入れたらうまくいきました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問