2016-11-15 8 views
0

私はPython 3.5とMatplotlibを使用しています。私は1ヶ月未満のpythonの経験を持っていますが、グラフィカルに表現する必要があるCSVファイルにデータがあります。体重(ポンド)、身長(インチ)、BMIの3つの列しかありません。見たい場合はhereです。私はちょうど4つのBMIグループ(BMIが20より大きく、25より大きいが30より小さいか、20より大きいが25より小さいBMIグループのそれぞれについて異なるシンボルと色を持つ高さ対重量散布図を作成したい、および20未満)。PythonとMatplotlibを使用してCSVデータから散布図を作成するにはどうすればよいですか?

これまで私がこれまで持っていたことは次のとおりです。私はこれを行うより効率的な方法があるように感じる。どんな助けやアイデアも大歓迎です!

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

data2 = pd.read_csv('BMIData.csv') 

bmi1 = data2[(data2.BMI<20)] 
bmi2 = data2[(data2.BMI>20) & (data2.BMI<=25)] 
bmi3 = data2[(data2.BMI>25) & (data2.BMI<=30)] 
bmi4 = data2[(data2.BMI>30)] 

bmi1h = bmi1.height.values 
bmi1w = bmi1.weight.values 

bmi2h = bmi2.height.values 
bmi2w = bmi2.weight.values 

bmi3h = bmi3.height.values 
bmi3w = bmi3.weight.values 

bmi4h = bmi4.height.values 
bmi4w = bmi4.weight.values 

plt.scatter(bmi1h, bmi1w, color='r', marker='*', label='Less than 20') 
plt.scatter(bmi2h, bmi2w, color='b', marker='^', label='20 to 25') 
plt.scatter(bmi3h, bmi3w, color='c', marker='x', label='25 to 30') 
plt.scatter(bmi4h, bmi4w, color='m', label='Greater than 30') 

plt.xlabel('Height (in)') 
plt.ylabel('Weight (lb)') 
plt.title('BMI Data') 
plt.legend() 

plt.axis([63,80,100,400]) 


plt.savefig('BMIplot.png', dpi=300) 

plt.show() 
` 

答えて

0

次のようにCSVファイルを読み込むことができます。

import numpy as np 
import matplotlib.pyplot as plt 

file = open('BMIdata.csv','r') 
readings = file.readlines() 
readings.pop(0) 
height = [] 
weight = [] 
BMI = [] 
for reading in readings: 
    h, w,B = reading.strip('\r\n').split(',') 
    height.append(h) 
    weight.append(w) 
    BMI.append(B) 

リスト:身長、体重を、BMIは、表の見出しせずにそれぞれのデータが含まれています。

0

これを行う方法はたくさんあります。私が頻繁に使用する1つの方法は、DataFrameのコピーではなくブール型インデクサー配列を作成することです。 Indexing and Selecting Dataのドキュメントを参照してください。

data2 = pd.read_csv('BMIData.csv') 

bmi1 = (data2.BMI<20) 
bmi2 = (data2.BMI>20) & (data2.BMI<=25) 
bmi3 = (data2.BMI>25) & (data2.BMI<=30) 
bmi4 = (data2.BMI>30) 

plt.scatter(data2.loc[bmi1,'height'], data2.loc[bmi1,'weight'], color='r', marker='*', label='Less than 20') 
plt.scatter(data2.loc[bmi2,'height'], data2.loc[bmi2,'weight'], color='b', marker='^', label='20 to 25') 
plt.scatter(data2.loc[bmi3,'height'], data2.loc[bmi3,'weight'], color='c', marker='x', label='25 to 30') 
plt.scatter(data2.loc[bmi4,'height'], data2.loc[bmi4,'weight'], color='m', label='Greater than 30') 

もう一つの方法は、あなたのデータフレームに追加の列を作成し、(1,2,3,4またはコードを書くことであろう「BMI1」、「bmi2」など:あなたのコードは、その後に簡略化されています)、次に各グループを抽出するためにパンダ(Documentation)にgroupby()を使います。 Seabornを使用することもできます。これは、グループに分割できるデータに対してこれらの種類の操作を行うのに非常に便利です。

関連する問題