ベンチマークエンジニアリングコード分析-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値では、datecolumnはオブジェクトの形状であり、これを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_costloss_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.結論


    どうしたことか、前処理の歳月だけが少なくなった.これは、前処理がデータの可視化において非常に重要であることを示しています?!次の記事では、データをグラフィックに格納する方法と、グラフィックを何らかの方法で加工する方法について説明します.