python에서 읽어온 CSV 데이터를 일정간격으로 무시하고 scatter 그리기 질문..

python   
   조회 5571   추천 1    

 

혹 python 다루시는 분이 계실것 같아 여쭤봅니다..


python에서 CSV 데이터를 읽어 온 뒤 scatter로 뿌리는 문제입니다.

CSV 데이터는 x_1, y_1, y_2로 되어 있고, 각 10,000개 씩의 값을 가진 20,000개의 좌표점입니다.


이를 대략 x축을 기준으로 1000간격에 해당하는 좌표점만 띄엄띄엄 scatter로 뿌리고 싶습니다.

이를 반복문을 써서


for step in range(10001):

         if step % 1000 == 0:

                x = x_1

                y1 = y_1

                y2 = y_2

x_1, y_1, y_2의 데이터를 1000간격씩 x, y1, y2에 새로 저장해


x,y1 그리고 x,y2를 scatter로 뿌리면 될꺼라 생각했는데, 생각이랑 다르게 안되네요.

어떻게 해야될까요..


아래는 제가 짜본 코드입니다.


import pandas as pd
import matplotlib.pyplot as plt

dataset=pd.read_csv("Basic.csv");
y_1= dataset.iloc[:,1].values.astype(float)
y_2= dataset.iloc[:,2].values.astype(float)
x_1= dataset.iloc[:,0].values.astype(float)


for step in range(10001):
    if step % 1000 == 0:
        y1 = y_1
        y2 = y_2
        x = x_1


plt.scatter(x, y1, marker='s', color='b')
plt.annotate('maximum: 0.3669', xy=(9991,0.3669), xytext=(6000,0.2), arrowprops=dict(arrowstyle="->", connectionstyle="arc3, rad=0.2"))

plt.scatter(x, y2, marker='^', color='r')
plt.annotate('maximum: 0.4869', xy=(9643,0.4869), xytext=(6000,0.65), arrowprops=dict(arrowstyle="->", connectionstyle="arc3, rad=-0.2"))


plt.ylim(0,1.0)

plt.legend(loc='upper left', frameon=False)

plt.show()


짧은글 일수록 신중하게.
변선주 2017-05
python은 잘 모릅니다만, 제가 사용하는 R에서 저라면 다음과 같은 방법으로 문제를 풀어보겠습니다.
순환구문에 의하여 점을 출력하는 방식으로 코드를 짜신 것 같습니다. 이럴 경우에 첫 번째나 그 근처 값을 가지는 다른 값은 plot에 보일 수 있으나 그렇지 않은 경우에는 첫 번째 plot 영역 밖의 값이라면 보이지 않습니다. 최대값과 최소값을 미리 확인하여 이 영역을 미리 plot에 정의하는 방법이 있습니다.
그보다 편한 방법으로는 그 몇 개의 값을 가지는 data 를 추출하여 별도의 data 를 만든 다음에 그냥 plot 해보겠습니다.
python 2017-05
생각해보니 반복구문에서, 10000을 1000으로 나눈값의 나머지가 0일 때마다 x_1, y_1, y_2의 리스트 값의 일부 요소를 취해 x, y1, y2에 저장해야하는데,

기존의 반복문에서 요소가 아닌, 리스트 값 전체를 계속해서 복사하고 있더라구요.....

그래서 간단하게 리스트에서 요소값만 찾아 다른 변수에 저장하도록 넣어서 풀었습니다.

혹 궁금하신 분 있을지도 몰라 코드 아래 붙입니다.


import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

dataset=pd.read_csv("Model 1 and 2 compariosn.csv");
y_1= dataset.iloc[:,1].values.astype(float)
y_2= dataset.iloc[:,2].values.astype(float)
x_1= dataset.iloc[:,0].values.astype(float)


x = np.zeros(40, dtype=float)
y1 = np.zeros(40, dtype=float)
y2 = np.zeros(40, dtype=float)



for step in range(x_1.size):
    if step % 250 == 0:
      stepnew=round(step/250)
        y1[stepnew] = y_1[step]
        y2[stepnew] = y_2[step]
        x[stepnew] = x_1[step]


plt.scatter(x, y1, marker='o', color='b')
plt.annotate('maximum: 0.3669', xy=(9991,0.3669), xytext=(6000,0.2), arrowprops=dict(arrowstyle="->", connectionstyle="arc3, rad=0.2"))

plt.scatter(x, y2, marker='^', color='r')
plt.annotate('maximum: 0.4869', xy=(9643,0.4869), xytext=(6000,0.65), arrowprops=dict(arrowstyle="->", connectionstyle="arc3, rad=-0.2"))

plt.xlim(x.min()-1000, x.max()+1000)
plt.ylim(0,1.0)

plt.legend(loc='upper left', frameon=False)

plt.show()


QnA
제목Page 4152/5715
2015-12   1730305   백메가
2014-05   5197573   정은준1
2020-08   3183   audacity
2017-02   4518   알파고
2017-03   4472   리오
2017-04   6464   네오네모
2017-04   4114   늘파란
2016-06   6176   차넷컴퓨터
2017-05   5572   python
2016-06   4486   봄들판에서다
2018-09   7063   페르세우스
2017-06   3386   Psychophysi…
2017-06   3096   NiteFlite9
2016-07   4915   김황중
2016-07   4814   미수맨
2009-01   5672   한성확
2016-09   4472   Everyharu
2018-01   3835   조형
2016-05   4530   박성만
2016-06   9871   e5472
2016-06   4405   PCMaster
2017-06   4413   쿠르