ベンチマークエンジニアリングコード分析-1
26325 ワード
注意事項
プロジェクトは2022年4月14日のデータに基づきます.
プロジェクトコード全体Github
ライブラリリスト
import seaborn as sns # 그래프 라이브러리, matplotlib 확장형
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker # x, y축 스타일 변경을 위한 라이브러리
import plotly # 그래프 라이브러리이지만 matplotlib와 다르게 반응형이고 디자인도 깔끔해서 더 좋음.
import plotly.graph_objs as go
import plotly.express as px
from plotly.subplots import make_subplots
import numpy as np
import pandas as pd # 데이터 처리 관련 라이브러리
データプリプロセッシング1
loss_eq=pd.read_csv(r'Ukrine_Russia_War\archive\russia_losses_equipment.csv')
print(loss_eq.tail())
> 실행결과
date day aircraft helicopter tank APC field artillery MRL military auto fuel tank drone naval ship anti-aircraft warfare special equipment mobile SRBM system
43 2022-04-09 45 151 136 705 1895 335 108 1363 76 112 7 55 25.0 4.0
44 2022-04-10 46 152 137 722 1911 342 108 1384 76 112 7 55 25.0 4.0
45 2022-04-11 47 154 137 725 1923 347 111 1387 76 119 7 55 25.0 4.0
46 2022-04-12 48 157 140 732 1946 349 111 1406 76 124 7 63 25.0 4.0
47 2022-04-13 49 158 143 739 1964 358 115 1429 76 132 7 64 25.0 4.0
これはまずデータをロードして見た結果です.このデータには、各軍物資に対する破壊カウント値のみがリストされています.eq_cost = [21.43, 12.8, 0.5, 0.039, 2, 2.3, 0.06, 600, 115, 20]
loss_eq.drop(['fuel tank', 'drone', 'special equipment'], axis=1, inplace=True) #계산불가능 값 제외
loss_eq['date'] = pd.to_datetime(loss_eq['date']) ## Object를 datetime으로 형변환
まず、軍隊の物資列の順番に、私が調査した費用値をeq costに入れます.また、まずロードされるloss eq値のうち、不要だと思うガソリンタンク、無人機、特殊設備の値を除きます.
pandaで任意のデータフレームをトリガする方法では、axisは重要な値であり、デフォルト値は0であり、行の値を表す.
axis = 1
の場合、このメソッドはカラム、カラムに触れるためのメソッドです.したがって、各名前に一致するカラムは削除されます.それから直接価格をinplaceに変えます.この値のデフォルトはFalseです.Trueでない場合は、代入演算子として再入力します.
現在のloss eq値では、
date
columnはオブジェクトの形状であり、これをdatetimeに変換します.データプリプロセッシング2
loss_eq_Calc = loss_eq.copy()
i = 0
for x in loss_eq.columns.to_list()[2:]: # 계산
loss_eq_Calc[x] = loss_eq[x] * eq_cost[i]
i += 1
loss_eq_Calc.fillna(0,inplace=True) # 결측치 제거
print(loss_eq_Calc.tail())
> 실행결과 # 단위는 $M임.
date day aircraft helicopter tank APC field artillery MRL military auto naval ship anti-aircraft warfare mobile SRBM system
43 2022-04-09 45 3235.93 1740.8 352.5 73.905 670 248.4 81.78 4200 6325 80.0
44 2022-04-10 46 3257.36 1753.6 361.0 74.529 684 248.4 83.04 4200 6325 80.0
45 2022-04-11 47 3300.22 1753.6 362.5 74.997 694 255.3 83.22 4200 6325 80.0
46 2022-04-12 48 3364.51 1792.0 366.0 75.894 698 255.3 84.36 4200 7245 80.0
47 2022-04-13 49 3385.94 1830.4 369.5 76.596 716 264.5 85.74 4200 7360 80.0
そして、私が欲しい각 군물자별 손실비용
のデータを加工するためにloss eq Calc値を作成しました.基本構造が同じなのでloss eqからコピーします.また、loss eqでは、私が計算するのに必要なcolumnは1列目dateと2列目dayを除くすべての列なので、リストは
.columns.to_list()
で、3列目から順番に受け取り、forの形でドアを回します.そして,
loss_eq_Calc.fillna()
メソッドを用いて,0の値をすべてNaNの値に変換する.運転結果から効果があることがわかります.
データプリプロセッシング3
last_index = len(loss_eq_Calc.index)-1
last_date = loss_eq_Calc['date'][last_index].date().strftime("%d %B %Y")
military_total_losses_cost = loss_eq_Calc.iloc[-1:,2:].sort_values(by=[last_index],axis=1,ascending=False).T # .T로 인덱스와 열을 바꿔줌
military_total_losses_cost.rename(columns={last_index:'losses_cost'}, inplace = True)
military_total_losses_cost
はオブジェクトであり、loss eq Calcデータは日付ごとにデータが蓄積されるため、最終日付は合計データの合計となる.したがって、最後の日付の計算値のみに基づいてグラフを生成するために、新しいオブジェクトが作成されます.
まず、最後のインデックスの値とdateの値を知るが、データは絶えず追加されるため、生成された
military_total_losses_cost
はloss_eq_Calc.iloc[-1:,2:]
の値をsort_values()
関数ソートの値に渡す.loss_eq_Calc.iloc[-1:,2:]
これはどういう意味ですか?ilocは、後の座標値に基づいてデータフレームにアクセスする方法である.-1:
は、後から1番目です.これは最後の値を意味し、2:
は3列目から始まることを意味する.sort_values()
関数の値はby=[last_index]
であり、対last_index
の値はaxis=1
であることを示すため、列の値はascending=False
であり、降順で並べ替えてください..T
があります.これは改行列です.つまり、元のmilitary_total_losses_cost
の列はaircraft, helicopter, tank ....
であったが、これがインデックスとなる.military_total_losses_cost.rename()
関数を書くのは、グラフィック生成を容易にするため、元の形状の列の名前がlast_index
の値をlosses_cost
に名前を変更したためです.データプリプロセッシング4
# 그래프 x,y축 지정을 위한 전처리
military_total_losses_cost.reset_index(inplace=True)
military_total_losses_cost.rename(columns={'index':'equipment_name'},inplace=True)
print(military_total_losses_cost)
> 실행결과
equipment_name losses_cost
0 anti-aircraft warfare 7360.000
1 naval ship 4200.000
2 aircraft 3385.940
3 helicopter 1830.400
4 field artillery 716.000
5 tank 369.500
6 MRL 264.500
7 military auto 85.740
8 mobile SRBM system 80.000
9 APC 76.596
最後に、x軸をグラフィックでインデックスとして指定できますが、これは私たちが望む順序ではなく、indexの英語辞書の順序でインデックスreset_index
を再指定します.元のインデックスは、index
というカラム名の新しいカラムによって作成されるべきで、equipment_name
と名前を変更します.実行結果から,効果は理想的であることがわかる.
データプリプロセッシング5
# 각 카테고리 별 군대 구분
air_units = ['helicopter', 'aircraft']
naval_units = ['naval ship']
ground_units = ['APC', 'military auto', 'tank', 'field artillery', 'MRL','anti-aircraft warfare', 'mobile SRBM system']
def murge_category(unit):
if unit in ground_units:
return "Ground Units"
elif unit in naval_units:
return "Naval Units"
else:
return "Air Units"
military_total_losses_cost['unit_type'] = military_total_losses_cost['equipment_name'].apply(lambda x : murge_category(x))
print(military_total_losses_cost)
> 실행결과
equipment_name losses_cost unit_type
0 anti-aircraft warfare 7360.000 Ground Units
1 naval ship 4200.000 Naval Units
2 aircraft 3385.940 Air Units
3 helicopter 1830.400 Air Units
4 field artillery 716.000 Ground Units
5 tank 369.500 Ground Units
6 MRL 264.500 Ground Units
7 military auto 85.740 Ground Units
8 mobile SRBM system 80.000 Ground Units
9 APC 76.596 Ground Units
前処理が長いですね...その後、各軍隊の物資に基づいて軍隊を区分してこそ、軍隊の合算値やグラフを生成することができるため、このような方法で前処理を行った.pandasデータフレームに
['column_name']
を貼り付けると、既存の列にシリーズが読み込まれ、ない場合は新しいシリーズcolumn_name
が貼り付けられます.ここで,
.apply()
メソッドを用いてlambdaの各値murge_category
メソッドから得られた値を渡す.結果から良い応用が見られた.
📜 n/a.結論
どうしたことか、前処理の歳月だけが少なくなった.これは、前処理がデータの可視化において非常に重要であることを示しています?!次の記事では、データをグラフィックに格納する方法と、グラフィックを何らかの方法で加工する方法について説明します.
Reference
この問題について(ベンチマークエンジニアリングコード分析-1), 我々は、より多くの情報をここで見つけました
https://velog.io/@galion/텀프로젝트-코드-분석-1
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
Reference
この問題について(ベンチマークエンジニアリングコード分析-1), 我々は、より多くの情報をここで見つけました https://velog.io/@galion/텀프로젝트-코드-분석-1テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol