前回そろえたデータをmatplotlibでグラフ化したいと思います。
データ
貨物数ごとの売却額、利益等まとめられています。
元々あったデータをCSV化したものです。
長いので抜粋。
PS C:\Users\tsuru\tools\cargo-profits> cat '.\special cargo profits.csv' -head 5 Crates,Sell,PPC (Price per crate),Profit @ 2k PC,Profit @ 4k PC,Profit @ 6k PC,Time @ 2k,Time @ 4k,Time @ 6k,PPH @ 2k,PPH @ 4k,PPH @ 6k 1,10000,10000,8000,6000,4000,5:00,7:00,8:00,92664,50633,29162 2,22000,11000,18000,14000,10000,13:00,7:00,8:00,80838,118143,72904 3,36000,12000,30000,24000,18000,22:00,17:00,8:00,83565,83624,131227 4,52000,13000,44000,36000,28000,30:00:00,17:00,19:00,88829,125436,86331
グラフ化対象
前回も書きましたが
- Crates(箱数)
- Sell(売却額)
- Profit @ xk(利益)
- PPH @ xk(1時間当たりの利益)
を出します。
仕入れ数ごと(1個、2個、3個)に上記を出すので3つのグラフを作成します。
コード
50行以内に収まったので全部張ります。
3つのグラフを一気に出したかったので、保存することにしました。
- profits.py
import csv import matplotlib.pyplot as plt with open('special cargo profits.csv' , 'r') as f: reader = csv.DictReader(f) data = [x for x in reader] def Aggregate(key): item = [] for i in data: item.append(int(i[key])) # Convert integer return item def Create_graph(profit, pph, filename=None): fig = plt.figure() ax1 = fig.add_subplot() # Add second axes ax2 = ax1.twinx() l1 = ax1.bar(Cr, Se, color='orange') l2 = ax1.plot(Cr, profit, color='red') l3 = ax2.plot(Cr, pph) # Add legend [f:id:paloma69:20210403132835p:plain]and labels plt.legend((l1[0],l2[0],l3[0]), ('Sell','Profit','Profit Per Hour')) plt.title('Special cargo profits at {}'.format(filename)) ax1.set_xlabel('Crates') ax1.set_ylabel('Sells and profits ($)') ax2.set_ylabel('Profits Per Hour ($)') # For auto scale plt.tight_layout() plt.savefig('{}.png'.format(filename)) Cr = Aggregate('Crates') Se = Aggregate('Sell') Pr6 = Aggregate('Profit @ 6k PC') Ph6 = Aggregate('PPH @ 6k') Pr4 = Aggregate('Profit @ 4k PC') Ph4 = Aggregate('PPH @ 4k') Pr2 = Aggregate('Profit @ 2k PC') Ph2 = Aggregate('PPH @ 2k') Create_graph(Pr6, Ph6, '6k purchase') Create_graph(Pr4, Ph4, '4k purchase') Create_graph(Pr2, Ph2, '2k purchase')
実行
上記を実行すると3つのグラフが作成されます。
PS C:\Users\tsuru\tools\cargo-profits> ls ディレクトリ: C:\Users\tsuru\tools\cargo-profits Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 2021/04/02 23:50 1309 profits.py -a---- 2021/03/26 23:32 1401 special cargo profits.csv
PS C:\Users\tsuru\tools\cargo-profits> python .\profits.py PS C:\Users\tsuru\tools\cargo-profits> ls ディレクトリ: C:\Users\tsuru\tools\cargo-profits Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 2021/04/03 11:33 52959 2k purchase.png -a---- 2021/04/03 11:33 51299 4k purchase.png -a---- 2021/04/03 11:33 51554 6k purchase.png -a---- 2021/04/02 23:50 1309 profits.py -a---- 2021/03/26 23:32 1401 special cargo profits.csv
グラフ
作成できたところで各グラフを見てみましょう。
仕入れ数を増やすごとに1個当たりの仕入れ値が上がります。
売却額も売る個数によって高くなっていきます。
1時間当たりの利益が今回の比較対象になります。
ソロ売りの貨物9個を比較します。
1個ずつ仕入れ: 仕入れ値は1個あたり$2000
売値に対して利益が高いです。
1時間当たりの利益は波がありますね。
これは集荷ミッションの度にクールタイムがあるので1個ずつで溜めると中々の時間がかかります。
9個売りだと$92500ちょい下の利益率です。
2個ずつ仕入れ: 仕入れ値は1個あたり$4000
2個ずつ仕入れだと同じく偶数個ずつ売っていけば1時間当たりの利益が上がりますね。
9個売りだとタイミングが悪く$115000付近の利益ですね。
3個ずつ仕入れ: 仕入れ値は1個あたり$6000
3個だと売価に対する利益はだいぶ下がりますが、1時間当たりの利益はそこそこですね。
集められるスピードが効いています。
9個売りだと仕入れ数との関係で波がトップに来ていて$140000ほどの利益になります。
まとめ
1時間当たりの利益で比較した場合は集める時間の少ない3個仕入れが効率が良いようです。
とは言っても攻略サイト等で研究されつくしており、今回わざわざ検証するようなことでもないのですが、久しぶりにmatplotlibを触りたくなったので今回の記事を思いつきました。
2軸目を使って棒グラフと折れ線を出力させるというのがテーマにありましたが、意外と手こずらずに作成することができました。
いちおうExcelで予行練習もしましたが、期待通りのグラフが作成できてよかったですw
今思い返すと2軸目も単位を揃えた方がよりいいグラフになったと思いますが、とりあえず今回はこの辺で。
2軸目はfigure関数が肝ですね。この他にも複数のグラフを一度に出力などもできるみたいなのでまた機会があれば触ってみます。
おまけ
極秘貨物で儲けるとオフィスが散らかってきます。
だいぶ売ったのでいい感じに散らかってきましたw