2016-06-22 6 views
2

私はPythonには新人ですが、パンダの有用性を認識していますので、以下の問題を解決するためにパンダを使用するのを手伝ってもらえますか?パンダで2つの変数の関係をプロットする

Iがどのように見えるバスとデータセットを有する:

BusModel;BusID;ModeName;Value;Unit;UtcTime 
Alpha;0001;Engine hours;985;h;2016-06-22 19:58:09.000 
Alpha;0001;Engine hours;987;h;2016-06-22 21:58:09.000 
Alpha;0001;Engine hours;989;h;2016-06-22 23:59:09.000 
Alpha;0001;Fuel consumption;78;l;2016-06-22 19:58:09.000 
Alpha;0001;Fuel consumption;88;l;2016-06-22 21:58:09.000 
Alpha;0001;Fuel consumption;98;l;2016-06-22 23:59:09.000 

ファイルは.csv形式であり、セミコロンで区切られて(;)。 UtcTimeに基づいて「エンジンの時間」と「燃料消費量」の関係を「日毎の平均値を計算する」ことによってプロットしたいと思います。さらに、データセット内のすべてのバス(0001だけでなく0002、0003など)のグラフをプロットしたいと思います。私は単純なループでそれをどうすることができますか?以下のインタラクティブモード

import pandas as pd 

df = pd.read_csv('bus.csv', sep=";", parse_dates=['UtcTime']) 

答えて

2

スタートは、あなたが直接データで使用できる機能をDataFrameで遊んと発見を開始することができるはずです。 IDでバスのリストを取得するには:

>>> bus1 = df[df.BusID == 1] 
>>> bus1 

あなたが必要とするバスのIDで1を置き換えてください。これにより、サブDataFrameが返されます。

>>> bus1[bus1.ModeName == "Engine hours"].plot() 
>>> bus1[bus1.ModeName == "Fuel consumption"].plot() 
>>> plt.show() 
:BusIDの1を取得し、ちょうど彼らのエンジンの時間が行うには:あなたはあなたがプロットを開始することができ、必要なデータをグループ化したら

>>> bus1[bus1.ModeName == "Engine hours"] 

あなたはすぐに

>>> bus1.Value.describe() 

を行うことによって、列の統計情報を取得することができます

ドキュメントに関する説明があります。 http://pandas.pydata.org/pandas-docs/stable/を参照してください。

1

本当にパンダを使いたい場合は、この簡単なことを覚えておいてください。ループを使わないでください。ループはスケーラブルではないため、組み込み関数を使用してみてください。まず、あなたのデータフレームを読みましょう:

import pandas as pd 
data = pd.read_csv('bus.csv',sep = ';') 

私の答えは弱点ですが、私は効率的に日付を管理する方法がわかりません。だから、UtcTimeから日が含まれていdayという名前の列を作成します(私はこのdata['day'] = data['UtcTime'].apply(lambda x: x[:10])ようMethodeのを適用する使用しますが、それはそれをしないように隠されたループだ!)

を次に単一のバスのデータだけを取るために、スライス方法を試してみてください。

data_bus1 = data[data.BusID == 1] 

最後にGROUPBY機能を使用します。

data_bus1[['Modename','Value','day']].groupby(['ModeName','day'],as_index = False).mean() 

それとも、別のデータフレームであなたのバスを分離する必要がない場合、あなたは全体のdatにgroupbyを使用することができますがa:

data[['BusID','ModeName','Value','day']].groupby(['BusID','ModeName','day'],as_index = False).mean() 
関連する問題