2017-09-27 5 views
0

以下のコードを使用してグラフをプロットし、1時間あたりの速度を表示しようとしました。膨大な数の行を処理するときに空のプロット

import pandas as pd 
import datetime 
import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib import style 
style.use('ggplot') 
import glob, os 

taxi_df = pd.read_csv('ChicagoTaxi.csv') 

taxi_df['trip_start_timestamp'] = pd.to_datetime(taxi_df['trip_start_timestamp'], format = '%Y-%m-%d %H:%M:%S', errors = 'raise') 
taxi_df['trip_end_timestamp'] = pd.to_datetime(taxi_df['trip_end_timestamp'], format = '%Y-%m-%d %H:%M:%S', errors = 'raise') 

#For filtering away any zero values when trip_Seconds or trip_miles = 0 
filterZero = taxi_df[(taxi_df.trip_seconds != 0) & (taxi_df.trip_miles != 0)] 
filterZero['trip_seconds'] = filterZero['trip_seconds']/60 
filterZero['trip_seconds'] = filterZero['trip_seconds'].apply(lambda x: round(x,0)) 
filterZero['speed'] = filterZero['trip_miles']/filterZero['trip_seconds'] 
filterZero['speed'] *= 60 

filterZero = filterZero.reset_index(drop=True) 

filterZero.groupby(filterZero['trip_start_timestamp'].dt.strftime('%w'))['speed'].mean().plot() 
plt.xlabel('Day') 
plt.ylabel('Speed(Miles per Minutes)') 
plt.title('Mean Miles per Hour By Days') 
plt.show() #Not working 

例行

0  2016-01-13 06:15:00 8.000000 
1  2016-01-22 09:30:00 10.500000 

小さなデータセット:[1250219行×2列]

ビッグデータセット:[15172212行×2列]小さなデータセットについて

コード完璧に動作し、プロットが表示されます。しかし、私が1500万行のデータセットを使用しようとしたとき、mean()を実行していても値が "inf"だったので、プロットは空でした。ここで何か間違っているのですか?

0 inf 
1 inf 
... 
5 inf 
6 inf 

速度は「1時間あたりのマイル数」です。私はすべての時間形式を試していたので、写真に不一致が残っています。あなたが行うので、私は本当に確認することはできません

enter image description here

+0

を丸めずに試してみてください。むしろプロットされた部分が非常に端にあるか軸の外側にあることがあります。 – ImportanceOfBeingErnest

+0

ズームアウトロット - 場合によっては – doctorlove

+0

小さいデータセットと大きいデータセットのプロットを示す2つの画像で質問を更新しました。 – WhiteSolstice

答えて

0

:成功したプロット(小規模なデータセット)の

enter image description here

画像:(大きなデータセット)をプロット失敗したの

画像あなたのデータセットの実際の例を提供していませんが、私はあなたの問題が列trip_secondsから来ていると確信しています。列trip_secondsでの自分の価値観の一部が30≤している場合は、この行は0.0にそれらを丸めます

filterZero['trip_seconds'] = filterZero['trip_seconds']/60 
filterZero['trip_seconds'] = filterZero['trip_seconds'].apply(lambda x: round(x,0)) 

は、これらの2行を参照してください。

filterZero['speed'] = filterZero['trip_miles']/filterZero['trip_seconds'] 

したがって、この行は(何/ 0.0 = INFのような)いくつかのinf値で充填されます。アレイのmean()infの値にすると、infに関係なく戻ります。考慮すべき

2つのこと:

  1. の列trip_secondsで自分の価値観を秒単位で実際にある場合は、その後、60で自分の価値観を分割した後、彼らはマイルあたりで、あなたの速度を行いますされ、数分になります分ではなく、1時間あたり。

  2. あなたは、私が何とかプロットが本当に空であることを疑う回

+0

明らかにそれは本当に問題でした。それを指摘していただきありがとうございます。私はパンダの最小機能が60を示したのでゼロを得る可能性は決して考えなかった。 – WhiteSolstice

関連する問題