From 8b231696f6e0f5cd9ed31a1616cff0fefad7a327 Mon Sep 17 00:00:00 2001 From: Cricial <2911646453@qq.com> Date: Fri, 20 Sep 2024 09:26:39 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A8=A1=E5=9E=8B=E9=80=BB=E8=BE=91=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E5=AE=8C=E6=88=90=EF=BC=8C=E6=B2=A1=E6=9C=89=E5=86=85?= =?UTF-8?q?=E5=AE=B9=E7=9A=84=E8=BE=93=E5=87=BA=20=E5=92=8C=E5=AF=B9?= =?UTF-8?q?=E4=BA=8E=20=E6=95=B0=E6=8D=AE=E5=BA=93=E7=9A=84=E8=B0=83?= =?UTF-8?q?=E6=95=B4=20=E4=B9=9F=E6=B2=A1=E6=9C=89=E8=B7=91=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/csv-editor.xml | 70 ++++ __pycache__/controller_db.cpython-38.pyc | Bin 8257 -> 8317 bytes __pycache__/firm.cpython-38.pyc | Bin 7799 -> 8462 bytes __pycache__/my_model.cpython-38.pyc | Bin 10329 -> 10789 bytes __pycache__/product.cpython-38.pyc | Bin 1446 -> 1331 bytes controller_db.py | 13 +- firm.py | 124 +++++- input_data/Firm_amended.csv | 2 +- input_data/firm_industry_relation.csv | 476 ++++++++++++++++++++++ input_data/xv_with_exp.csv | 2 +- input_data/测试 BomNodes.csv | 108 +++++ input_data/测试 Firm_amended 170.csv | 171 ++++++++ my_model.py | 191 ++++++++- product.py | 12 +- 测试数据 产业 数据.py | 43 ++ 测试数据 产业-原材料消耗-产品生产量.py | 42 ++ 测试数据 BomNodes.csv.py | 15 + 测试数据 Firm_amended.csv.py | 36 ++ 测试数据 companies_devices.csv | 11 + 测试数据 companies_materials.csv | 11 + 测试数据 companies_products.csv | 11 + 测试数据 consumed_materials.csv | 24 ++ 测试数据 device_salvage_values.csv | 11 + 测试数据 material_device_product_ids.csv | 101 +++++ 测试数据 produced_products.csv | 22 + 测试数据 products_materials_equipment.csv | 101 +++++ 测试数据 产品通编码.py | 25 ++ 测试数据 材料设备产品.py | 42 ++ 测试数据 设备id和设备残值.py | 25 ++ 测试数据_firm_industry_relation.csv.py | 17 + 30 files changed, 1671 insertions(+), 35 deletions(-) create mode 100644 input_data/firm_industry_relation.csv create mode 100644 input_data/测试 BomNodes.csv create mode 100644 input_data/测试 Firm_amended 170.csv create mode 100644 测试数据 产业 数据.py create mode 100644 测试数据 产业-原材料消耗-产品生产量.py create mode 100644 测试数据 BomNodes.csv.py create mode 100644 测试数据 Firm_amended.csv.py create mode 100644 测试数据 companies_devices.csv create mode 100644 测试数据 companies_materials.csv create mode 100644 测试数据 companies_products.csv create mode 100644 测试数据 consumed_materials.csv create mode 100644 测试数据 device_salvage_values.csv create mode 100644 测试数据 material_device_product_ids.csv create mode 100644 测试数据 produced_products.csv create mode 100644 测试数据 products_materials_equipment.csv create mode 100644 测试数据 产品通编码.py create mode 100644 测试数据 材料设备产品.py create mode 100644 测试数据 设备id和设备残值.py create mode 100644 测试数据_firm_industry_relation.csv.py diff --git a/.idea/csv-editor.xml b/.idea/csv-editor.xml index c775f95..f5b85e2 100644 --- a/.idea/csv-editor.xml +++ b/.idea/csv-editor.xml @@ -24,6 +24,13 @@ + + + + + + @@ -52,6 +59,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/__pycache__/controller_db.cpython-38.pyc b/__pycache__/controller_db.cpython-38.pyc index 293cecea00c6798f71d96541b5990d671444bb8b..46bb379e735566e33ddad6eb2ef0a9f42fada6f8 100644 GIT binary patch delta 1667 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 delta 2652 zcma)8Uu+a*5Z`b2Zg2Olw^y#c{<)U6{1I6s_ zCLA{?sc5nEpf#=)c>OvPIx95FQeCoiqDi8ux-=Vz-q^{#r%X5;b=#-w_DSUR(QLAB)xW-E5=vQ$^Eci)hPrArNF$3K<9 zAW>Hf(#&V1dTSv8lB}&xss1lP-cDR%Z$Jo>s?EA3e1XsPNDCTiX;bq1jPC+op6t2a zTi0y8OG4Ty-H;dbV0B%;#B4Stf!1c5xoRX?&|R<@g>91Lpt9tk4@^@J8QLoi>pJLa z^#la`gDnB#EhC%(rluS+;KbKm?cy8d3`>gE*gp28I2Jo9?!-oN8PK^W1L3X6kx9Q; zAD>(7Ri9wTjYGcg@SyCuhdK9nsPdv~dsU8RVVrw4*ACOJ$E(H4Y>}6Xfnz4anD11^ zL%rsfXKIdBws{WycZrX+e(}Aw=P1^kr;xM*iNos;1CeAyNwTD($|{4O644|xqMy>L zXmSj{{1f}zNNB8Ov7ryM!7X5E%3Om#VZ4Y9c9Vs&yPY?;3H1Vqo!6%MfrH}rEQqAA9_*d!*Q=^!~JLzGXD83)m%^26j z-SpaybnPI)pmiqL3NL_abYOdSIsb zATBBY=f!O1?x3>`Y3UDI<4^i0NgG!3a= zF!&j9J3G7X1^h6I1T`O(JNLPm;Tt2SZr%kvKSE;bFDzAuXJ+D<%%?>Eu+ zvy_m7UM8Yl(iK0j5OfQ-h=OYRehYM#K}V>~EGOJ@;@kGzD}?51^tKiWb)EW51`3~xOxMh|2T|Zt=$K^9%)bE9a^~g7^!_Dc-1vX*U#;|R zwo>9@yc{@HpZ8!e2v}$oOC<-IjXQ8A!N4~$<}T{syhrdhk>wu9c1EybS>WuWA;)QHf^mEOJ=tP=kXf>J7>g>&wE*)hMC){Req`ao}kz@V@306M1+MKy^5>A0kZ>fgBEjwn1B~Q diff --git a/__pycache__/my_model.cpython-38.pyc b/__pycache__/my_model.cpython-38.pyc index 36151650435222515b599e6493e66453b90b15ef..2a5336d192c4e927e9550f2483cffbccb88b13b1 100644 GIT binary patch delta 3367 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 Kd6Va}vI7A8xI&u% delta 465 zcmYL_ze~eF6vyw9kX)OjvEuLgW0G2jPU2*RB2;t`q12&EsL82dwB@c2Iv4C3?tc&} zI63=gxMXz~2NyTry9^23hxg6M@Acy4~bt|qB}OZU>p`h4ufY(o0> zGqFhD>5@h%eLbVI^zYbaU>1(*&^EQzl)kYFyqHnps+O^3qY#0*G%ohFv4naN;R3SC zNDSkLXdDi%`TbbJ7%mrjY5}W2eH$OUTF;@b0%kPxMuNvY;!+NU%% 0: + if self.is_prf_size: + lst_firm_size = [firm.size_stat[-1][0] for firm in lst_firm_material_connect] + lst_prob = [size / sum(lst_firm_size) for size in lst_firm_size] + select_alt_supply = self.random.choices(lst_firm_material_connect, weights=lst_prob)[0] + else: + select_alt_supply = self.random.choice(lst_firm_material_connect) + return select_alt_supply + + def seek_machinery_supply(self, machinery_type): + lst_firm_machinery_connect = [] # 符合条件 可选择的上游 + upper_i_machinery = [] # 特定 资源的上游 企业集合 + for firm in self.upper_i: + for sub_list in firm.R: + if sub_list[0] == machinery_type: + upper_i_machinery.append(firm) + # 没有 上游 没有 材料的情况,也就是紊乱的情况 + # if len(upper_i_machinery)==0: + + if self.is_prf_conn: + for firm in upper_i_machinery: + if self.firm_network.has_edge(self.unique_id, firm.unique_id) or self.firm_network.has_edge( + firm.unique_id, self.unique_id): + lst_firm_machinery_connect.append(firm) + if len(lst_firm_machinery_connect) == 0: + if self.is_prf_size: + lst_size = [firm.size_stat[-1][0] for firm in upper_i_machinery] + lst_prob = [size / sum(lst_size) for size in lst_size] + select_alt_supply = \ + self.random.choices(upper_i_machinery, weights=lst_prob)[0] + else: + select_alt_supply = self.random.choice(upper_i_machinery) + elif len(lst_firm_machinery_connect) > 0: + if self.is_prf_size: + lst_firm_size = [firm.size_stat[-1][0] for firm in lst_firm_machinery_connect] + lst_prob = [size / sum(lst_firm_size) for size in lst_firm_size] + select_alt_supply = self.random.choices(lst_firm_machinery_connect, weights=lst_prob)[0] + else: + select_alt_supply = self.random.choice(lst_firm_machinery_connect) + return select_alt_supply + + def handle_material_request(self, material_list): + for list in self.P: + if list[0] == material_list[0]: + list[1] -= material_list[1] + + def handle_machinery_request(self, machinery_list): + for list in self.C: + if list[0] == machinery_list[0]: + list[1] -= machinery_list[1] + + def refresh_R(self): + self.R1[self.model.t] = self.R + + def refresh_C(self): + self.C1[self.model.t] = self.C + + def refresh_P(self): + self.P1[self.model.t] = self.P + def clean_before_trial(self): self.dct_request_prod_from_firm = {} diff --git a/input_data/Firm_amended.csv b/input_data/Firm_amended.csv index 9561f52..55bac16 100644 --- a/input_data/Firm_amended.csv +++ b/input_data/Firm_amended.csv @@ -169,4 +169,4 @@ 167,SZ,2021,78220000000,24.43927396,41100000000,L,9.500843462,13371,qichacha,Non_Beijing,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 168,SH,2021,10350000000,22.23155657,4519000000,L,8.528528701,5057,qichacha,Non_Beijing,,,,1,,,,,,,,,,,,,,,,,,1,1,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1 169,SH,2021,2.30233E+11,24.27012079,34704000000,L,8.55120807,5173,qichacha,Non_Beijing,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -170,,,,18.42068074,100000000,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +170,,,,18.42068074,100000000,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, \ No newline at end of file diff --git a/input_data/firm_industry_relation.csv b/input_data/firm_industry_relation.csv new file mode 100644 index 0000000..3dcc5e8 --- /dev/null +++ b/input_data/firm_industry_relation.csv @@ -0,0 +1,476 @@ +Firm_Code,Product_Code +0,1.4.4 +1,2.1.1.5 +2,1.1.3 +3,1.3.1.4 +3,1.3.1.5 +3,1.3.1.6 +3,1.3.4.1 +4,1.2.2 +5,1.4.5.3 +5,1.4.5.4 +5,1.4.5.5 +5,1.4.5.9 +6,1.3.1.2 +6,2.1.2.1 +6,2.1.2.2 +6,2.1.2.3 +6,2.1.2.4 +7,2.2 +8,1.4.1.1 +9,1.3.3.6 +9,1.3.3.7 +10,1.3.3.5 +11,1.4.4.2 +12,1.2.1 +13,1.2.2 +13,2.1.3.1 +13,2.1.3.2 +13,2.1.3.3 +13,2.1.3.4 +13,2.1.3.5 +13,2.1.3.6 +13,2.1.3.7 +13,2.1.4.1.1 +13,2.1.4.1.2 +13,2.1.4.1.3 +13,2.1.4.1.4 +13,2.1.4.2.1 +13,2.1.4.2.2 +13,2.3.1 +13,2.3.2 +13,2.3.3 +14,1.3.3.4 +14,1.3.4.3 +15,1.3.3.5 +16,1.1.3 +16,2.3.1 +16,2.3.2 +16,2.3.3 +17,1.4.2.4 +18,1.3.3.2 +19,1.4.2.1 +20,1.3.1.2 +21,1.3.1.3 +22,1.2.1 +22,1.2.2 +22,1.3.3.6 +22,2.1.1.1 +22,2.1.1.2 +22,2.1.1.3 +22,2.1.1.4 +22,2.1.1.5 +22,2.1.3.1 +22,2.1.3.2 +22,2.1.3.3 +22,2.1.3.4 +22,2.1.3.5 +22,2.1.3.6 +22,2.1.3.7 +22,2.1.4.1.1 +22,2.1.4.1.2 +22,2.1.4.1.3 +22,2.1.4.1.4 +22,2.1.4.2.1 +22,2.1.4.2.2 +22,2.3.1 +22,2.3.2 +22,2.3.3 +23,1.1.2 +23,1.3.3.1 +23,1.3.3.2 +23,1.3.3.3 +23,1.3.3.4 +23,1.4.2.7 +23,2.1.3.6 +23,2.3.1 +23,2.3.2 +23,2.3.3 +24,1.1.1 +25,1.3.1.7 +26,2.1.3.1 +26,2.1.3.2 +26,2.1.3.3 +26,2.1.3.4 +26,2.1.3.5 +26,2.1.3.6 +26,2.1.3.7 +27,1.4.4.2 +28,2.2 +29,1.3 +30,1.4.2.6 +31,1.3.3.3 +31,2.1.4.1.1 +31,2.1.4.1.2 +31,2.1.4.1.3 +31,2.1.4.1.4 +31,2.1.4.2.1 +31,2.1.4.2.2 +32,1.2.3 +33,2.1.2.1 +33,2.1.2.2 +33,2.1.2.3 +33,2.1.2.4 +34,1.3.3.3 +35,1.1.3 +36,1.1.1 +37,1.4.1.2 +37,1.4.1.4 +37,1.4.2.2 +37,1.4.3.1 +37,1.4.4.3 +37,1.4.5.2 +38,2.1.1.1 +38,2.1.1.2 +38,2.1.1.3 +38,2.1.1.4 +38,2.1.1.5 +39,1.3.1 +40,1.4.2.1 +40,1.4.2.5 +40,1.4.3.3 +40,1.4.4 +41,1.4.1.2 +41,1.4.1.5 +41,1.4.3.1 +41,1.4.3.2 +41,1.4.3.4 +41,1.4.3.5 +41,1.4.5 +42,1.3.1.1 +42,1.3.1.3 +42,1.3.1.4 +43,1.3.1.5 +43,1.3.1.6 +44,1.1.1 +45,1.3.3.1 +45,1.3.4.1 +45,1.3.4.2 +45,2.1.4.1.1 +45,2.1.4.1.2 +45,2.1.4.1.3 +45,2.1.4.1.4 +45,2.1.4.2.1 +45,2.1.4.2.2 +46,1.3.1.2 +47,2.1.1.1 +47,2.1.1.2 +47,2.1.1.3 +47,2.1.1.4 +47,2.1.2.1 +47,2.1.2.2 +47,2.1.2.3 +47,2.1.2.4 +47,2.1.3.6 +48,1.2.2 +49,1.3.1.1 +49,1.3.1.4 +49,1.3.1.6 +49,1.3.3.1 +49,2.1.2.1 +49,2.1.2.2 +49,2.1.2.3 +49,2.1.2.4 +50,1.3.1.5 +51,1.4.2.1 +52,1.4.5.5 +53,1.4.1.3 +53,1.4.1.4 +53,1.4.1.5 +53,1.4.2.3 +53,1.4.2.4 +53,1.4.3.3 +53,1.4.3.4 +53,1.4.3.5 +53,1.4.3.6 +53,1.4.4.4 +53,1.4.5.2 +53,1.4.5.3 +53,1.4.5.6 +53,1.4.5.7 +53,1.4.5.8 +54,1.4.1.3 +54,1.4.2.4 +54,1.4.4.3 +55,1.4.1.1 +55,1.4.1.2 +55,1.4.1.3 +55,1.4.2.1 +55,1.4.2.2 +55,1.4.4.4 +56,1.1.1 +56,1.3.1.7 +57,1.3.3.3 +57,2.3.1 +57,2.3.2 +57,2.3.3 +58,1.2.2 +58,1.3.1.6 +58,1.3.2 +58,1.3.4.1 +58,1.3.4.2 +58,1.3.4.3 +58,2.1.2 +59,1.4.2.5 +60,2.1.1.1 +60,2.1.1.2 +60,2.1.1.3 +60,2.1.1.4 +60,2.1.1.5 +61,1.3.3.3 +62,1.3.1.2 +62,2.1.2.1 +62,2.1.2.2 +62,2.1.2.3 +62,2.1.2.4 +63,1.4.1.1 +63,1.4.2.4 +63,1.4.4.5 +64,1.1.2 +65,1.2.1 +66,1.2.1 +67,1.2 +68,1.3.1.1 +68,1.3.1.2 +68,1.3.1.3 +69,1.1.1 +70,1.3.3.2 +70,1.3.3.4 +71,1.3.1.2 +72,1.3.1.2 +73,2.1.3 +74,1.3.3.2 +74,2.1.3 +75,1.3.3 +76,1.3.1.3 +77,1.3.3.6 +77,1.3.4 +78,2.1.1.1 +78,2.1.1.2 +78,2.1.1.3 +78,2.1.1.4 +78,2.1.1.5 +79,1.3.1.1 +79,1.3.1.4 +79,1.3.1.6 +79,2.1.2 +79,2.1.3.1 +79,2.1.3.2 +79,2.1.3.3 +79,2.1.3.4 +79,2.1.3.5 +79,2.1.3.6 +79,2.1.3.7 +79,2.1.4.1 +79,2.1.4.2 +79,2.3.1 +79,2.3.2 +79,2.3.3 +80,1.3.4 +80,2.1.1 +81,1.3.4 +81,2.1.2 +81,2.1.4.1 +81,2.1.4.2 +82,2.1.2.1 +82,2.1.2.2 +82,2.1.2.3 +82,2.1.2.4 +83,1.3.3.2 +84,2.1.2 +84,2.1.4 +84,2.3 +85,1.3.1 +85,2.1.1 +86,1.1 +87,1.1.1 +88,1.1.3 +89,1.1.2 +89,1.2.1 +89,1.3.3.1 +90,1.3.1.7 +91,1.2.1 +92,1.3.3.4 +93,1.3.1 +94,1.1 +95,1.2.3 +95,2.3 +96,1.2.1 +96,1.2.3 +97,1.2 +97,1.3.3 +97,2.1.3 +98,2 +99,1.1.2 +99,1.2.1 +99,1.3.1 +99,1.3.3 +99,2.1 +99,2.3 +100,1.3.1 +101,1.1.1 +102,2 +102,2.1.4 +103,1.1.1 +104,1.1.1 +105,1.1 +106,1.1 +106,1.2 +106,1.3 +106,2.1.1 +106,2.1.3 +106,2.2 +107,1.4.3.3 +108,2.1.3 +108,2.2 +109,1.3.3.1 +110,1.3.3.5 +111,1.3.1.6 +111,1.3.3.1 +111,1.3.4.1 +112,1.3.3.7 +113,1.1.1 +114,1.3.5.1 +115,1.1.3 +115,2.1.4 +116,1.3.1.7 +117,2.1.1.1 +117,2.1.1.2 +117,2.1.1.3 +117,2.1.1.4 +117,2.1.1.5 +117,2.1.4.1.1 +117,2.1.4.1.2 +117,2.1.4.1.3 +117,2.1.4.1.4 +117,2.1.4.2.1 +117,2.1.4.2.2 +118,1.3.3.6 +119,1.3.1.1 +120,1.2.3 +121,1.4.2.4 +122,1.4.2.6 +123,1.1.2 +124,1.2.1 +124,2.3 +125,1.2.3 +126,1.1 +126,1.2 +126,1.4 +126,2.1.1.5 +126,2.1.3 +126,2.2 +126,2.3 +127,1.1.1 +127,1.1.3 +128,1.1.2 +129,1.1.2 +129,1.2.3 +130,1.3.2 +130,1.3.4.1 +130,1.3.4.2 +130,1.3.4.3 +130,1.3.5 +131,2.1.1.1 +131,2.1.1.2 +131,2.1.1.3 +131,2.1.1.4 +131,2.1.1.5 +132,1.3.3.2 +133,1.4.1.3 +133,1.4.4.1 +134,1.3.3.5 +135,1.1.3 +135,1.3.2.1 +135,1.3.4.1 +135,2.1.3.1 +135,2.1.3.2 +135,2.1.3.3 +135,2.1.3.4 +135,2.1.3.5 +135,2.1.3.6 +135,2.1.3.7 +135,2.2 +136,1.2.1 +137,2.1.4.1.1 +137,2.1.4.1.2 +137,2.1.4.1.3 +137,2.1.4.1.4 +137,2.1.4.2.1 +137,2.1.4.2.2 +138,1.3.1.5 +139,1.3.3.7 +140,1.4.1.1 +140,1.4.1.4 +140,1.4.1.5 +140,1.4.5.1 +140,1.4.5.3 +140,1.4.5.4 +140,1.4.5.9 +141,1.3.3.2 +142,1.4.1.1 +142,1.4.2 +142,1.4.3 +143,2.1.1.1 +143,2.1.1.2 +143,2.1.1.3 +143,2.1.1.4 +143,2.1.1.5 +144,2.1.2.1 +144,2.1.2.2 +144,2.1.2.3 +144,2.1.2.4 +145,1.3.1.4 +146,1.3.1.1 +147,1.1.2 +148,2.1.1 +148,2.1.3 +148,2.2 +149,2.1.2.1 +149,2.1.2.2 +149,2.1.2.3 +149,2.1.2.4 +150,1.1.1 +151,1.3.5.1 +152,1.4.4.1 +153,1.3.1.1 +153,1.3.1.4 +154,2.1.4.1.1 +154,2.1.4.1.2 +154,2.1.4.1.3 +154,2.1.4.1.4 +154,2.1.4.2.1 +154,2.1.4.2.2 +155,2.3 +156,1.3.1.7 +157,1.4.1 +158,1.4.4.1 +159,2.1.2 +160,1.4.1.3 +161,2.3.1 +161,2.3.2 +161,2.3.3 +162,1.4.5.6 +162,1.4.5.7 +163,2.1.4.1.1 +163,2.1.4.1.2 +163,2.1.4.1.3 +163,2.1.4.1.4 +163,2.1.4.2.1 +163,2.1.4.2.2 +164,1.3.3.6 +165,2.1.2.1 +165,2.1.2.2 +165,2.1.2.3 +165,2.1.2.4 +166,1.2.3 +167,1.1.1 +168,1.1.2 +168,1.3.3.1 +168,1.3.3.2 +168,1.3.3.4 +168,2.3.1 +168,2.3.2 +168,2.3.3 +169,1.1.1 +170,1 diff --git a/input_data/xv_with_exp.csv b/input_data/xv_with_exp.csv index 0730991..b2d8ff3 100644 --- a/input_data/xv_with_exp.csv +++ b/input_data/xv_with_exp.csv @@ -2,4 +2,4 @@ 7,TRUE,TRUE,uniform,5,0.3,3,3 5,FALSE,FALSE,normal,10,0.5,5,2 3,,,,15,0.7,7,1 -,, \ No newline at end of file +,,,,, \ No newline at end of file diff --git a/input_data/测试 BomNodes.csv b/input_data/测试 BomNodes.csv new file mode 100644 index 0000000..157bf18 --- /dev/null +++ b/input_data/测试 BomNodes.csv @@ -0,0 +1,108 @@ +Index,Code,Level,Name,产业种类 +0,1,0,工业互联网,0 +1,1.1,1,工业自动化硬件,1 +2,1.1.1,2,工业计算芯片,0 +3,1.1.2,2,工业控制器,0 +4,1.1.3,2,工业服务器,0 +5,1.2,1,工业互联网网络,1 +6,1.2.1,2,网络互联服务,0 +7,1.2.2,2,标识解析服务,0 +8,1.2.3,2,数据互通服务,0 +9,1.3,1,工业软件,1 +10,1.3.1,2,设计研发软件,0 +11,1.3.1.1,3,计算机辅助设计CAD,0 +12,1.3.1.2,3,计算机辅助工程CAE,0 +13,1.3.1.3,3,计算机辅助制造CAM,0 +14,1.3.1.4,3,计算机辅助工艺过程设计CAPP,0 +15,1.3.1.5,3,产品数据管理PDM,1 +16,1.3.1.6,3,产品生命周期管理PLM,1 +17,1.3.1.7,3,电子设计自动化EDA,1 +18,1.3.2,2,采购供应软件,1 +19,1.3.2.1,3,供应链管理SCM,1 +20,1.3.3,2,生产制造软件,1 +21,1.3.3.1,3,制造执行系统MES,1 +22,1.3.3.2,3,分布式控制系统DCS,0 +23,1.3.3.3,3,数据采集与监视控制系统SCADA,1 +24,1.3.3.4,3,可编程逻揖控制系统PLC,1 +25,1.3.3.5,3,企业资产管理系统EAM,1 +26,1.3.3.6,3,运维保障系统MRO,1 +27,1.3.3.7,3,故障预测与健康管理PHM,1 +28,1.3.4,2,企业运营管理软件,1 +29,1.3.4.1,3,企业资源计划ERP,1 +30,1.3.4.2,3,客户关系管理CRM,1 +31,1.3.4.3,3,人力资源管理HRM,1 +32,1.3.5,2,仓储物流软件,0 +33,1.3.5.1,3,仓储物流管理WMS,1 +34,1.4,1,工业互联网安全管理,1 +35,1.4.1,2,设备安全,1 +36,1.4.1.1,3,工业防火墙,1 +37,1.4.1.2,3,下一代防火墙,0 +38,1.4.1.3,3,防毒墙,1 +39,1.4.1.4,3,入侵检测系统,1 +40,1.4.1.5,3,统一威胁管理系统,1 +41,1.4.2,2,控制安全,1 +42,1.4.2.1,3,工控安全监测与审计,1 +43,1.4.2.2,3,工控主机卫士,1 +44,1.4.2.3,3,工控漏洞扫描,0 +45,1.4.2.4,3,安全隔离与信息交换系统,1 +46,1.4.2.5,3,安全日志与审计,1 +47,1.4.2.6,3,隐私计算,1 +48,1.4.2.7,3,工控原生安全,1 +49,1.4.3,2,网络安全,1 +50,1.4.3.1,3,网络漏洞扫描和补丁管理,0 +51,1.4.3.2,3,流量检测,1 +52,1.4.3.3,3,APT检测,0 +53,1.4.3.4,3,攻击溯源,0 +54,1.4.3.5,3,负载均衡,1 +55,1.4.3.6,3,沙箱类设备,0 +56,1.4.4,2,平台安全,1 +57,1.4.4.1,3,身份鉴别与访问控制,0 +58,1.4.4.2,3,密钥管理,0 +59,1.4.4.3,3,接入认证,0 +60,1.4.4.4,3,工业应用行为监控,1 +61,1.4.4.5,3,安全态势感知,0 +62,1.4.5,2,数据安全,0 +63,1.4.5.1,3,恶意代码检测系统,1 +64,1.4.5.2,3,数据防泄漏系统,1 +65,1.4.5.3,3,数据审计系统,0 +66,1.4.5.4,3,数据脱敏,1 +67,1.4.5.5,3,敏感数据发现与监控,0 +68,1.4.5.6,3,数据容灾备份,0 +69,1.4.5.7,3,数据恢复,1 +70,1.4.5.8,3,数据加密,1 +71,1.4.5.9,3,数据防火墙,0 +72,2,0,工业互联网平台,1 +73,2.1,1,PaaS,0 +74,2.1.1,2,开发工具,1 +75,2.1.1.1,3,算法建模工具,1 +76,2.1.1.2,3,低代码开发工具,0 +77,2.1.1.3,3,流程开发工具,1 +78,2.1.1.4,3,组态建模工具,1 +79,2.1.1.5,3,数字孪生建模工具,1 +80,2.1.2,2,工业模型库,1 +81,2.1.2.1,3,数据算法模型,0 +82,2.1.2.2,3,业务流程模型,0 +83,2.1.2.3,3,研发仿真模型,0 +84,2.1.2.4,3,行业机理模型,1 +85,2.1.3,2,工业物联网,1 +86,2.1.3.1,3,物联网服务,0 +87,2.1.3.2,3,平台基础服务,1 +88,2.1.3.3,3,工业引擎服务,1 +89,2.1.3.4,3,应用管理服务,1 +90,2.1.3.5,3,容器服务,1 +91,2.1.3.6,3,微服务,1 +92,2.1.3.7,3,制造类API,0 +93,2.1.4,2,工业大数据,1 +94,2.1.4.1,3,工业大数据存储,1 +95,2.1.4.1.1,4,关系型数据库,0 +96,2.1.4.1.2,4,分布式数据库,1 +97,2.1.4.1.3,4,实时数据库,0 +98,2.1.4.1.4,4,时序数据库,0 +99,2.1.4.2,3,工业大数据管理,0 +100,2.1.4.2.1,4,数据质量管理,1 +101,2.1.4.2.2,4,数据安全管理,1 +102,2.2,1,IaaS,0 +103,2.3,1,边缘层,0 +104,2.3.1,2,工业数据接入,0 +105,2.3.2,2,边缘数据处理,0 +106,2.3.3,2,协议转换,1 diff --git a/input_data/测试 Firm_amended 170.csv b/input_data/测试 Firm_amended 170.csv new file mode 100644 index 0000000..a8bd955 --- /dev/null +++ b/input_data/测试 Firm_amended 170.csv @@ -0,0 +1,171 @@ +Code,Company Name,原材料,库存商品,设备数量,Revenue,Total Employees (People),Type_Region,Self-supply Business (Yes/No),Revenue_Log,production_output,demand_quantity +1,Company_1,284.02,982.67,452.15,29692.44,963,Suburban,Yes,10.298647746934053,204.215,481.402 +2,Company_2,591.75,232.7,597.47,37552.56,222,Urban,No,10.533496830634064,553.747,253.175 +3,Company_3,514.2,466.73,388.52,23557.62,355,Urban,No,10.067204613987071,227.852,377.42 +4,Company_4,893.84,633.71,580.73,89135.78,496,Urban,No,11.397916104118977,221.073,483.384 +5,Company_5,306.54,844.63,474.67,60818.82,117,Suburban,Yes,11.015654559530484,391.467,209.654 +6,Company_6,830.89,831.11,177.37,73695.09,279,Rural,No,11.207691454519859,372.737,473.089 +7,Company_7,483.95,603.67,603.02,73826.05,832,Rural,Yes,11.209466929335226,186.302,485.395 +8,Company_8,483.1,525.24,116.64,83568.26,242,Rural,Yes,11.333419061909991,437.664,500.31 +9,Company_9,958.73,267.31,682.18,36015.98,351,Suburban,No,10.491718007837608,433.217,460.873 +10,Company_10,946.82,215.02,393.99,26255.05,324,Suburban,No,10.175613630469309,472.399,381.682 +11,Company_11,454.76,689.55,232.49,84782.37,81,Suburban,Yes,11.3478428992222,243.249,260.476 +12,Company_12,323.83,177.09,624.04,26639.31,170,Suburban,No,10.19014322341799,321.404,148.382 +13,Company_13,425.17,396.05,274.2,31290.59,265,Rural,No,10.351072692349652,287.42,490.517 +14,Company_14,109.55,739.42,406.11,87814.36,788,Suburban,No,11.38298031978054,148.611,401.955 +15,Company_15,202.82,923.13,100.91,43238.15,487,Suburban,No,10.674478486379028,210.091,336.282 +16,Company_16,160.02,615.97,486.87,32433.19,658,Urban,No,10.386937560174536,327.687,459.002 +17,Company_17,292.47,762.76,981.28,22436.39,755,Rural,Yes,10.018439473254828,433.128,232.247 +18,Company_18,331.51,800.32,145.21,65352.83,631,Rural,Yes,11.087556023393986,388.521,358.151 +19,Company_19,508.01,104.76,862.05,67955.82,579,Rural,No,11.126613067125563,576.205,465.801 +20,Company_20,484.81,906.52,943.38,70611.44,692,Urban,No,11.164947450014383,325.33799999999997,513.481 +21,Company_21,769.67,739.38,736.02,76562.51,383,Suburban,Yes,11.245862810333419,455.602,197.96699999999998 +22,Company_22,533.36,234.46,657.71,38283.05,722,Urban,No,10.552762518463977,416.771,354.336 +23,Company_23,641.84,872.33,487.84,42673.07,791,Suburban,Yes,10.661323321098049,183.784,208.184 +24,Company_24,700.51,197.06,621.79,66410.79,503,Urban,No,11.10361482226283,257.179,341.051 +25,Company_25,628.84,292.82,571.1,72622.08,997,Urban,No,11.19302428680546,240.11,317.884 +26,Company_26,653.23,970.24,221.15,81298.66,667,Suburban,No,11.305884813235249,382.115,371.323 +27,Company_27,747.52,130.58,938.29,73435.38,990,Urban,No,11.204161114818818,214.829,339.752 +28,Company_28,878.41,322.67,211.96,77726.12,556,Rural,No,11.260946644601198,438.196,371.841 +29,Company_29,758.14,433.16,956.4,33200.84,568,Suburban,No,10.410330455789328,458.64,510.81399999999996 +30,Company_30,916.25,613.21,455.27,43485.34,347,Rural,No,10.680179148781386,252.527,267.625 +31,Company_31,900.34,969.81,394.83,50244.63,433,Rural,No,10.824658954539137,373.483,322.034 +32,Company_32,996.22,755.3,640.05,33162.77,550,Urban,No,10.409183140139199,514.005,450.622 +33,Company_33,515.17,844.15,161.39,57032.93,853,Rural,Yes,10.951384099299384,272.139,470.517 +34,Company_34,540.93,578.49,650.09,74078.09,806,Suburban,Yes,11.21287508605031,236.00900000000001,334.093 +35,Company_35,366.24,940.41,849.01,19617.56,483,Rural,Yes,9.884180362490643,519.901,169.624 +36,Company_36,405.22,450.03,380.13,11929.17,371,Rural,No,9.386741940165397,290.013,425.522 +37,Company_37,760.77,517.35,208.94,86851.29,464,Suburban,No,11.371952624754107,145.894,425.077 +38,Company_38,818.17,404.74,315.82,78053.26,201,Suburban,Yes,11.265146693168688,265.582,258.817 +39,Company_39,586.03,697.5,155.23,42210.17,931,Suburban,No,10.650416466250073,158.523,523.603 +40,Company_40,814.27,687.38,477.47,18756.58,673,Urban,Yes,9.839299903169191,295.747,192.427 +41,Company_41,872.52,234.9,598.33,33207.98,178,Urban,No,10.410545487468179,269.833,469.252 +42,Company_42,318.98,744.42,671.43,45471.87,404,Rural,No,10.72484917199056,178.143,350.898 +43,Company_43,453.11,750.88,926.15,99013.81,875,Suburban,No,11.503014614337706,490.615,434.311 +44,Company_44,130.39,274.92,629.0,13707.42,384,Urban,Yes,9.525692571040127,474.9,479.039 +45,Company_45,578.76,368.08,890.9,26604.81,901,Rural,No,10.188847305490215,324.09000000000003,202.876 +46,Company_46,265.4,987.58,137.93,39924.26,335,Suburban,No,10.594739438158781,349.793,331.54 +47,Company_47,743.33,304.14,867.21,90417.33,567,Urban,Yes,11.412191231547315,371.721,453.33299999999997 +48,Company_48,873.08,651.74,589.46,49837.92,599,Urban,Yes,10.816531419043114,371.946,299.308 +49,Company_49,797.72,610.35,866.25,71390.29,680,Urban,Yes,11.17591714468184,317.625,432.772 +50,Company_50,173.31,403.93,398.59,19134.31,577,Rural,No,9.859238337632949,383.859,427.331 +51,Company_51,713.05,943.63,786.47,33400.45,814,Suburban,No,10.416324651927923,242.647,554.305 +52,Company_52,769.5,939.62,827.64,15891.9,622,Urban,No,9.673564824440492,500.764,351.95 +53,Company_53,424.01,131.65,979.59,68631.67,998,Rural,Yes,11.13650936898853,240.959,315.401 +54,Company_54,923.68,474.15,214.87,18889.97,631,Suburban,Yes,9.84638637235242,403.487,459.368 +55,Company_55,671.6,928.96,584.73,93556.96,965,Suburban,No,11.446325727652052,191.473,350.15999999999997 +56,Company_56,740.88,450.42,624.08,75711.44,741,Rural,Yes,11.234684550861001,524.408,318.08799999999997 +57,Company_57,409.56,660.05,574.35,30617.71,416,Rural,No,10.32933387869449,211.435,536.956 +58,Company_58,436.2,294.82,599.98,78445.43,977,Urban,Yes,11.270158502799614,276.998,387.62 +59,Company_59,516.54,770.6,290.97,37174.96,441,Suburban,Yes,10.523390695335847,419.097,475.654 +60,Company_60,721.93,305.6,412.97,98848.66,842,Urban,Yes,11.501345272614115,316.297,280.193 +61,Company_61,712.26,395.66,391.41,92570.96,996,Urban,No,11.435730764537892,151.14100000000002,496.226 +62,Company_62,498.75,142.06,747.78,71608.94,917,Rural,Yes,11.178975205489529,536.778,380.875 +63,Company_63,623.33,901.33,397.15,23513.3,567,Suburban,Yes,10.065321497485543,362.715,297.333 +64,Company_64,263.36,133.88,830.99,20195.09,241,Urban,Yes,9.913194784536234,392.099,319.336 +65,Company_65,479.22,672.42,688.79,41600.33,951,Suburban,No,10.635863378910198,528.879,334.922 +66,Company_66,586.48,947.72,733.06,13215.54,624,Rural,Yes,9.489148688859606,487.306,478.648 +67,Company_67,145.29,158.54,178.11,64118.35,910,Rural,Yes,11.068485873391767,260.811,258.529 +68,Company_68,267.7,992.49,846.41,83839.88,127,Urban,No,11.336664068256136,552.641,188.77 +69,Company_69,207.33,621.93,942.4,54187.36,793,Suburban,Yes,10.900202949897876,349.24,518.733 +70,Company_70,107.17,406.95,154.29,15249.9,383,Suburban,Yes,9.632328224637009,506.429,294.717 +71,Company_71,835.06,230.35,568.8,91044.0,294,Rural,No,11.419098185126074,318.88,291.506 +72,Company_72,149.12,861.62,775.5,97301.35,155,Urban,No,11.485568142692438,360.55,156.912 +73,Company_73,385.5,741.6,846.34,19971.89,201,Rural,Yes,9.902081063894537,205.63400000000001,445.55 +74,Company_74,363.13,524.32,314.91,46296.94,763,Rural,Yes,10.742831147177496,255.491,284.313 +75,Company_75,647.69,363.06,973.17,77340.29,460,Urban,No,11.25597031483101,381.317,278.769 +76,Company_76,439.41,498.97,944.89,30625.18,754,Rural,Yes,10.329577825380776,526.489,258.94100000000003 +77,Company_77,466.64,397.98,979.11,86794.57,418,Rural,Yes,11.371299341087946,417.911,347.664 +78,Company_78,641.64,202.48,850.07,29307.04,807,Urban,No,10.285583039181757,259.007,379.164 +79,Company_79,732.01,600.48,239.65,93479.02,864,Rural,Yes,11.445492305071953,246.965,195.201 +80,Company_80,922.97,177.28,277.08,83955.43,883,Urban,Yes,11.33804134177189,500.70799999999997,222.297 +81,Company_81,627.27,621.58,542.03,87676.13,277,Urban,No,11.38140496343402,546.203,518.727 +82,Company_82,165.15,637.29,220.57,35181.96,313,Urban,Yes,10.468288730213176,371.057,246.515 +83,Company_83,819.04,221.6,785.02,16422.34,471,Urban,No,9.706397881988158,424.502,273.904 +84,Company_84,495.01,235.24,793.64,18346.41,797,Suburban,No,9.817189194015675,465.36400000000003,229.501 +85,Company_85,189.98,626.37,530.14,49793.11,669,Suburban,No,10.815631900027373,492.014,420.998 +86,Company_86,786.61,983.8,224.61,27511.88,420,Urban,No,10.222373190369527,296.461,200.661 +87,Company_87,775.36,813.93,242.21,94867.05,336,Rural,Yes,11.460231716720575,458.221,433.536 +88,Company_88,316.03,569.38,505.27,31548.83,265,Suburban,Yes,10.35929178328807,307.527,299.603 +89,Company_89,411.42,968.1,873.75,17001.83,274,Suburban,No,9.741076264303647,220.375,534.142 +90,Company_90,360.91,720.1,917.41,33781.07,582,Suburban,Yes,10.427655865407793,473.741,252.091 +91,Company_91,358.16,611.27,878.08,94174.16,361,Urban,Yes,11.452901112955821,500.808,146.816 +92,Company_92,353.58,598.11,973.92,46314.41,797,Suburban,No,10.743208422753485,540.392,251.358 +93,Company_93,796.81,261.4,254.01,36160.77,589,Suburban,No,10.495730108527182,202.401,310.681 +94,Company_94,479.78,168.81,256.88,40033.55,561,Rural,No,10.597473131541856,467.688,210.978 +95,Company_95,500.33,585.43,362.28,58187.29,708,Urban,No,10.971422224990354,253.228,302.033 +96,Company_96,267.69,499.92,214.82,79427.15,318,Suburban,No,11.282595528333824,179.482,373.769 +97,Company_97,755.05,985.95,179.24,82469.43,673,Suburban,Yes,11.320182958199297,140.924,446.505 +98,Company_98,302.62,320.94,594.75,51363.17,367,Suburban,No,10.84667665764297,510.475,362.262 +99,Company_99,714.96,972.27,684.7,26131.27,620,Rural,No,10.170887960471719,552.47,208.496 +100,Company_100,945.42,505.3,509.87,57539.11,222,Urban,Yes,10.960220169485046,174.987,338.54200000000003 +101,Company_101,160.02,165.31,985.52,97438.02,772,Urban,Yes,11.486971762540222,329.552,243.002 +102,Company_102,445.92,108.59,838.78,65823.19,990,Rural,No,11.094727486834918,310.878,233.59199999999998 +103,Company_103,591.79,603.5,225.38,17043.42,511,Suburban,Yes,9.74351948447026,211.538,287.179 +104,Company_104,252.06,450.61,405.59,57402.73,571,Rural,No,10.95784714215228,316.55899999999997,462.206 +105,Company_105,165.62,951.39,306.5,45833.17,398,Rural,Yes,10.73276334377794,173.65,386.562 +106,Company_106,255.06,128.16,259.17,13244.48,616,Urban,No,9.491336140837323,395.91700000000003,362.506 +107,Company_107,447.35,180.41,643.05,70700.8,449,Rural,No,11.166212167237902,476.305,380.735 +108,Company_108,781.83,434.34,550.93,81277.04,720,Suburban,Yes,11.305618844826347,450.093,377.183 +109,Company_109,169.85,134.46,977.71,94591.41,473,Suburban,No,11.45732194753443,239.77100000000002,273.985 +110,Company_110,125.7,708.42,777.62,11615.85,473,Rural,Yes,9.360125823758061,452.762,334.57 +111,Company_111,866.33,981.73,892.43,14848.63,251,Suburban,Yes,9.605662884082752,436.243,392.63300000000004 +112,Company_112,725.77,590.82,558.44,15328.79,949,Urban,Yes,9.63748803854849,397.844,518.577 +113,Company_113,958.57,191.31,188.92,97104.67,310,Urban,Yes,11.483544747870583,305.892,306.85699999999997 +114,Company_114,729.39,511.32,120.71,69592.56,191,Urban,No,11.150412944056944,457.071,390.93899999999996 +115,Company_115,365.17,638.89,288.41,18567.32,982,Rural,Yes,9.829158325138039,372.841,401.517 +116,Company_116,265.79,429.39,476.28,86839.57,716,Urban,No,11.371817672344777,372.628,356.579 +117,Company_117,559.33,264.97,113.88,15724.66,744,Rural,Yes,9.66298545971327,444.388,394.933 +118,Company_118,781.96,443.32,862.47,74245.47,273,Rural,No,11.215132044702743,427.247,508.196 +119,Company_119,890.02,331.77,697.16,83693.72,772,Rural,Yes,11.334919223794108,531.716,428.002 +120,Company_120,358.86,588.14,768.94,84336.55,101,Urban,No,11.342570620606638,188.894,371.886 +121,Company_121,589.37,192.81,994.71,30198.07,651,Urban,Yes,10.315533294036035,451.471,426.937 +122,Company_122,808.28,297.7,455.05,30809.46,875,Urban,Yes,10.335577064660097,157.505,494.828 +123,Company_123,988.78,307.96,869.8,44511.43,310,Suburban,Yes,10.703501289105592,455.98,326.878 +124,Company_124,461.81,849.69,521.11,84053.28,549,Suburban,Yes,11.339206162465574,425.111,217.18099999999998 +125,Company_125,438.73,683.75,458.4,34747.89,771,Rural,Yes,10.455874129724979,386.84,305.873 +126,Company_126,791.33,299.04,650.17,84231.54,634,Urban,Yes,11.341324714414265,208.017,494.13300000000004 +127,Company_127,369.59,143.99,204.6,27639.11,536,Rural,Yes,10.22698707765262,338.46,479.959 +128,Company_128,524.05,885.87,431.91,22997.06,766,Suburban,Yes,10.04312166065388,507.19100000000003,410.405 +129,Company_129,677.07,490.74,311.48,21524.13,781,Rural,No,9.97692991036063,444.148,564.707 +130,Company_130,178.2,260.51,858.09,83651.2,562,Rural,No,11.334411051799224,185.809,333.82 +131,Company_131,691.31,398.92,644.53,87442.53,582,Rural,No,11.378737056558094,443.453,357.131 +132,Company_132,189.46,575.78,346.71,13257.65,284,Rural,Yes,9.492330023297646,296.671,473.946 +133,Company_133,488.33,731.67,953.18,26643.92,489,Rural,Yes,10.190316260976394,559.318,406.83299999999997 +134,Company_134,369.02,465.67,667.29,78924.61,793,Suburban,No,11.27624837201392,238.72899999999998,205.902 +135,Company_135,738.44,879.57,465.81,92477.88,609,Suburban,No,11.434724759768017,365.581,546.844 +136,Company_136,758.99,786.45,658.38,52134.69,989,Urban,Yes,10.861585841104548,218.838,231.899 +137,Company_137,464.53,270.67,133.65,25976.63,552,Suburban,Yes,10.164952566645338,168.365,274.453 +138,Company_138,580.02,793.08,931.46,40643.76,471,Rural,Yes,10.612600597657721,362.146,444.002 +139,Company_139,274.51,795.06,500.42,35139.32,233,Rural,Yes,10.46707601038709,281.04200000000003,458.451 +140,Company_140,959.71,868.21,107.06,49994.95,428,Rural,Yes,10.81967727930944,361.706,578.971 +141,Company_141,354.71,563.01,350.48,42908.83,610,Urban,No,10.666832911242361,272.048,357.471 +142,Company_142,396.03,603.89,128.42,39303.37,668,Urban,No,10.579065544817109,332.842,170.603 +143,Company_143,892.61,311.16,670.46,43027.27,864,Suburban,Yes,10.669589379711221,549.046,279.26099999999997 +144,Company_144,486.76,626.8,943.16,39879.69,50,Rural,No,10.593622450725602,318.31600000000003,189.676 +145,Company_145,917.34,288.69,643.88,55254.01,873,Suburban,Yes,10.919696195931778,281.38800000000003,371.73400000000004 +146,Company_146,435.58,284.0,802.41,14442.55,517,Suburban,Yes,9.577933989653928,362.241,241.558 +147,Company_147,202.67,381.12,247.09,64747.68,871,Rural,Yes,11.07825314880404,335.709,272.267 +148,Company_148,394.8,297.97,982.49,64826.8,825,Suburban,No,11.079474377086543,261.249,240.48000000000002 +149,Company_149,703.7,551.4,223.33,52703.5,186,Rural,No,10.872437145986403,325.333,248.37 +150,Company_150,271.26,639.62,669.86,54145.21,286,Urban,No,10.899424790529425,392.986,361.126 +151,Company_151,741.21,534.21,734.27,99208.27,649,Urban,Yes,11.504976656733618,459.427,365.121 +152,Company_152,946.16,900.51,456.7,12725.19,836,Rural,Yes,9.451338772544975,533.67,282.616 +153,Company_153,230.74,396.22,221.36,44064.93,469,Rural,No,10.693419506970148,279.136,139.074 +154,Company_154,390.33,162.83,592.72,41020.68,592,Urban,Yes,10.621831608768346,283.272,484.033 +155,Company_155,729.59,982.05,479.26,33549.17,191,Suburban,No,10.420767402898578,377.926,280.959 +156,Company_156,873.45,147.99,568.87,10530.31,621,Urban,No,9.262013044390788,262.887,409.345 +157,Company_157,799.45,990.69,784.19,76686.49,803,Rural,No,11.247480831032389,299.419,216.945 +158,Company_158,491.74,143.25,906.25,59283.77,370,Suburban,No,10.990090854439025,558.625,390.174 +159,Company_159,367.87,208.07,473.62,83903.97,372,Suburban,Yes,11.33742820957182,282.362,264.787 +160,Company_160,564.46,355.27,733.19,61663.32,609,Urban,No,11.029444543649397,275.319,363.446 +161,Company_161,607.02,300.46,718.76,99731.85,231,Suburban,No,11.510240363309093,538.876,257.702 +162,Company_162,363.2,676.84,915.1,81358.78,101,Urban,No,11.306624035526434,493.51,285.32 +163,Company_163,976.79,481.49,329.12,87221.77,246,Urban,No,11.37620923470151,221.912,377.679 +164,Company_164,738.36,396.44,379.5,95322.53,249,Rural,No,11.465021473034172,364.95,406.836 +165,Company_165,785.54,427.37,589.4,84393.08,683,Suburban,No,11.343240686701314,288.94,373.554 +166,Company_166,992.29,576.28,173.55,43056.45,352,Rural,No,10.670267324417088,470.355,363.229 +167,Company_167,346.54,528.08,728.16,68761.38,309,Rural,Yes,11.138397529103418,195.816,262.654 +168,Company_168,523.22,482.95,699.79,58914.32,735,Rural,No,10.983839464028723,344.979,293.322 +169,Company_169,891.58,418.18,511.08,28763.31,576,Urban,Yes,10.26685589561593,178.108,286.158 +170,Company_170,712.0,906.86,583.05,16881.59,957,Urban,Yes,9.73397895802674,309.305,519.2 diff --git a/my_model.py b/my_model.py index 1792522..891cb67 100644 --- a/my_model.py +++ b/my_model.py @@ -14,7 +14,6 @@ from product import ProductAgent class MyModel(Model): def __init__(self, params): - # 属性 self.is_prf_size = params['prf_size'] self.prf_conn = params['prf_conn'] @@ -60,12 +59,15 @@ class MyModel(Model): self.is_prf_size = bool(params['prf_size']) self.remove_t = int(params['remove_t']) self.int_netw_prf_n = int(params['netw_prf_n']) + # 方法执行 self.initialize_product_network(params) self.initialize_firm_network() self.initialize_firm_product_network() self.add_edges_to_firm_network() self.connect_unconnected_nodes() + self.resource_integration() + self.j_comp_consumed_produced() self.initialize_agents() self.initialize_disruptions() @@ -74,18 +76,33 @@ class MyModel(Model): self.product_network = nx.adjacency_graph(json.loads(params['g_bom'])) except Exception as e: print(f"Failed to initialize product network: {e}") + # 赋予 产业的量 + # 产业种类 + data = pd.read_csv('测试数据 products_materials_equipment.csv') + self.type = data + # 设备c折旧比值 + device_salvage_values = pd.read_csv('测试数据 device_salvage_values.csv') + self.device_salvage_values = device_salvage_values def initialize_firm_network(self): # Read the firm data - firm = pd.read_csv("input_data/Firm_amended.csv") + + firm = pd.read_csv("input_data/测试 Firm_amended 170.csv") + firm['Code'] = firm['Code'].astype('string') firm.fillna(0, inplace=True) - firm_attr = firm.loc[:, ["Code", "Type_Region", "Revenue_Log"]] + + firm_attr = firm.loc[:, ["Code", "Type_Region", "Revenue_Log", "原材料", "设备数量", "库存商品"]] + + firm_industry_relation = pd.read_csv("input_data/firm_industry_relation.csv") + firm_industry_relation['Firm_Code'] = firm_industry_relation['Firm_Code'].astype('string') firm_product = [] - for _, row in firm.loc[:, '1':].iterrows(): - firm_product.append(row[row == 1].index.to_list()) - firm_attr.loc[:, 'Product_Code'] = firm_product + + grouped = firm_industry_relation.groupby('Firm_Code')['Product_Code'].apply(list) + firm_product.append(grouped) + + firm_attr['Product_Code'] = firm_attr['Code'].map(grouped) firm_attr.set_index('Code', inplace=True) self.G_Firm.add_nodes_from(firm["Code"]) @@ -97,21 +114,15 @@ class MyModel(Model): self.Firm = firm def initialize_firm_product_network(self): - """ Initialize the firm-product network """ - # Read the firm-product data - Firm_Prod = pd.read_csv("input_data/Firm_amended.csv") - Firm_Prod.fillna(0, inplace=True) - # Stack the firm-product relationships into a DataFrame - firm_prod = pd.DataFrame({'bool': Firm_Prod.loc[:, '1':].stack()}) - firm_prod = firm_prod[firm_prod['bool'] == 1].reset_index() - firm_prod.drop('bool', axis=1, inplace=True) - firm_prod.rename({'level_0': 'Firm_Code', 'level_1': 'Product_Code'}, axis=1, inplace=True) - firm_prod['Firm_Code'] = firm_prod['Firm_Code'].astype('string') + firm_industry_relation = pd.read_csv("input_data/firm_industry_relation.csv") + firm_industry_relation['Firm_Code'] = firm_industry_relation['Firm_Code'].astype('string') + # 将 'firm_prod' 表中的每一行作为图中的节点 + self.G_FirmProd.add_nodes_from(firm_industry_relation.index) - self.G_FirmProd.add_nodes_from(firm_prod.index) - # Assign attributes to the firm-product nodes - firm_prod_labels_dict = {code: firm_prod.loc[code].to_dict() for code in firm_prod.index} + # 为每个节点分配属性 + firm_prod_labels_dict = {code: firm_industry_relation.loc[code].to_dict() for code in + firm_industry_relation.index} nx.set_node_attributes(self.G_FirmProd, firm_prod_labels_dict) def add_edges_to_firm_network(self): @@ -204,19 +215,52 @@ class MyModel(Model): def initialize_agents(self): """ Initialize agents and add them to the model. """ for ag_node, attr in self.product_network.nodes(data=True): - product = ProductAgent(ag_node, self, name=attr['Name']) + # 产业种类 + type2 = self.type.loc[ag_node, '种类'] + + device_salvage_values = self.type.loc[ag_node, '设备残值'] + + j_comp_data_consumed = self.data_consumed.loc[ag_node] + + j_comp_data_produced = self.data_consumed.loc[ag_node] + + product = ProductAgent(ag_node, self, name=attr['Name'], type2=type2, + device_salvage_values=device_salvage_values, + j_comp_data_consumed=j_comp_data_consumed, + j_comp_data_produced=j_comp_data_produced, ) + self.add_agent(product) # self.grid.place_agent(product, ag_node) - ##print(f"Product agent created: {product.name}, ID: {product.unique_id}") for ag_node, attr in self.firm_network.nodes(data=True): a_lst_product = [agent for agent in self.product_agents if agent.unique_id in attr['Product_Code']] + + n_equip_c = self.Firm.loc[ag_node, '设备数量'] + + demand_quantity = self.Firm.loc[ag_node, 'production_output'] + + production_output = self.Firm.loc[ag_node, 'demand_quantity'] + + c_price = self.Firm.loc[ag_node, 'c_price'] + + # 资源 资源库存信息 利用 firm_resource + R = self.firm_resource_R.loc[ag_node] + P = self.firm_resource_R.loc[ag_node] + C = self.firm_resource_R.loc[ag_node] + firm_agent = FirmAgent( ag_node, self, type_region=attr['Type_Region'], revenue_log=attr['Revenue_Log'], + n_equip_c=n_equip_c, a_lst_product=a_lst_product, + demand_quantity=demand_quantity, + production_output=production_output, + c_price=c_price, + R=R, + P=P, + C=C ) self.add_agent(firm_agent) @@ -258,6 +302,33 @@ class MyModel(Model): elif isinstance(agent, ProductAgent): self.product_agents.append(agent) + def resource_integration(self): + data_R = pd.read_csv("测试数据 companies_materials.csv") + data_C = pd.read_csv("测试数据 companies_devices.csv") + data_P = pd.read_csv("测试数据 companies_products.csv") + firm_resource_R = (data_R.groupby('Firm_Code')[['材料id', '材料数量']] + .apply(lambda x: x.values.tolist())) + firm_resource_C = (data_C.groupby('Firm_Code')[['材料id', '材料数量']] + .apply(lambda x: x.values.tolist())) + + firm_resource_P = (data_P.groupby('Firm_Code')[['材料id', '材料数量']] + .apply(lambda x: x.values.tolist())) + + self.firm_resource_R = firm_resource_R + self.firm_resource_C = firm_resource_C + self.firm_resource_P = firm_resource_P + + def j_comp_consumed_produced(self): + data_consumed = pd.read_csv('测试数据 consumed_materials.csv') + data_produced = pd.read_csv('测试数据 produced_products.csv') + data_consumed = (data_consumed.groupby('产业id')[['消耗材料id', '消耗材料数量']] + .apply(lambda x: x.values.tolist())) + data_produced = (data_produced.groupby('产业id')[['制造产品id', '制造产品数量']] + .apply(lambda x: x.values.tolist())) + + self.data_consumed = data_consumed + self.data_produced = data_produced + def step(self): # 1. Remove edge to customer and disrupt customer up product for firm in self.company_agents: @@ -303,5 +374,83 @@ class MyModel(Model): for firm in self.company_agents: firm.clean_before_trial() + # 3. 判断是否需要购买资源 判断是否需要购买机器 + purchase_material_firms = {} + purchase_machinery_firms = {} + material_list = [] + machinery_list = [] + list_seek_material_firm = [] # 每一个收到请求的企业 + list_seek_machinery_firm = [] # 每一个收到请求的企业 + for firm in self.company_agents: + # 资源 + for sub_list in firm.R: + if sub_list[1] <= firm.s_r: + required_material_quantity = firm.S_r - sub_list[1] + (material_list + .append([sub_list[0], required_material_quantity])) + purchase_material_firms[firm] = material_list + # 设备 + for sub_list in firm.C: + # 对于设备的required_machinery_quantity 要有所改变 根据残值而言! 每一个周期固定减少残值值 x firm 里面定义 + sub_list[2] -= firm.x + if sub_list[2] <= 0: # 残值小于等于 0 时 + sub_list[1] -= 1 + required_machinery_quantity = firm.C1[0][1] - sub_list[1] # 补回原来的量 也就是 1 + (machinery_list + .append([sub_list[0], required_machinery_quantity])) + purchase_machinery_firms[firm] = machinery_list + + # 寻源并发送请求 决定是否接受供应 并更新 + + for material_firm, sub_list in purchase_material_firms: + for material_list in sub_list: + (list_seek_material_firm + .append(material_firm.seek_material_supply(material_list[0]))) + if len(list_seek_material_firm) != 0: + for seek_material_firm in list_seek_material_firm: + seek_material_firm.handle_material_request(material_list) # 更新产品 + for R_list in firm.R: + R_list[1] = firm.S_r + + for machinery_firm, sub_list in purchase_machinery_firms: + for machinery_list in sub_list: + (list_seek_machinery_firm + .append(machinery_firm.seek_machinery_supply(machinery_list[0]))) + if len(list_seek_machinery_firm) != 0: + for seek_machinery_firm in list_seek_machinery_firm: + seek_machinery_firm.handle_machinery_request(machinery_list) + for C_list, C0_list in zip(firm.C, firm.C0): + C_list[1] = C0_list[1] # 赋值回去 + C_list[2] = C0_list[2] + + # 消耗资源过程 + consumed_material = [] + for product in firm.a_lst_product: + for sub_list_data_consumed in product.j_comp_data_consumed: + consumed_material_id = sub_list_data_consumed[0] + consumed_material_num = sub_list_data_consumed[1] + consumed_material.append([consumed_material_id, consumed_material_num]) + for sub_list_consumed_material in consumed_material: + for sub_list_material in firm.R: + if sub_list_material[0] == sub_list_consumed_material[0]: + sub_list_material[1] = sub_list_material[1] - sub_list_consumed_material[1] + # 生产产品过程 + produced_products = [] + for product in firm.a_lst_product: + for sub_list_produced_products in product.j_comp_data_consumed: + produced_products_id = sub_list_produced_products[0] + produced_products_num = sub_list_produced_products[1] + produced_products.append([produced_products_id, produced_products_num]) + for sub_list_data_produced_products in produced_products: + for sub_list_products in firm.P: + if sub_list_products[0] == sub_list_data_produced_products[0]: + sub_list_products[1] = sub_list_products[1] - sub_list_data_produced_products[1] + # 刷新 R状态 + firm.refresh_R() + # 刷新 C状态 + firm.refresh_C() + # 刷新 P状态 + firm.refresh_P() + # Increment the time step self.t += 1 diff --git a/product.py b/product.py index 51181ed..8d32c77 100644 --- a/product.py +++ b/product.py @@ -1,13 +1,22 @@ from mesa import Agent + class ProductAgent(Agent): - def __init__(self, unique_id, model, name): + def __init__(self, unique_id, model, name, type2, device_salvage_values, j_comp_data_consumed, j_comp_data_produced): # 调用超类的 __init__ 方法 super().__init__(unique_id, model) # 初始化代理属性 self.name = name self.product_network = self.model.product_network + if type2 == 0: + self.is_equip = True + else: + self.is_mater = True + self.device_salvage_values = device_salvage_values + + self.j_comp_data_produced = j_comp_data_produced + self.j_comp_data_consumed = j_comp_data_consumed def a_successors(self): # 从 product_network 中找到当前代理的后继节点 @@ -22,4 +31,3 @@ class ProductAgent(Agent): # 通过 unique_id 查找前驱节点对应的代理对象,直接从 self.product_agents 列表中获取 return [agent for agent in self.model.product_agents if agent.unique_id in predecessors] - diff --git a/测试数据 产业 数据.py b/测试数据 产业 数据.py new file mode 100644 index 0000000..70db33a --- /dev/null +++ b/测试数据 产业 数据.py @@ -0,0 +1,43 @@ +import pandas as pd +import numpy as np + +# 设置随机种子 +np.random.seed(42) + +# 生成企业和设备数据 +num_rows = 10 # 每个表的行数 + +# 构造数据 +company_ids = np.random.randint(1000, 1100, size=num_rows) +device_ids = np.random.randint(100, 200, size=num_rows) +material_ids = np.random.randint(0, 100, size=num_rows) +product_ids = np.random.randint(0, 200, size=num_rows) + +device_quantities = np.random.randint(50, 200, size=num_rows) +material_quantities = np.random.randint(100,200, size=num_rows) +product_quantities = np.random.randint(20, 100, size=num_rows) + +# 创建三个表格的数据框 +df_devices = pd.DataFrame({ + '企业id': company_ids, + '设备id': device_ids, + '设备数量': device_quantities +}) + +df_materials = pd.DataFrame({ + '企业id': company_ids, + '材料id': material_ids, + '材料数量': material_quantities +}) + +df_products = pd.DataFrame({ + '企业id': company_ids, + '产品id': product_ids, + '产品数量': product_quantities +}) + +# 保存为CSV文件 +df_devices.to_csv('测试数据 companies_devices.csv', index=False) +df_materials.to_csv('测试数据 companies_materials.csv', index=False) +df_products.to_csv('测试数据 companies_products.csv', index=False) + diff --git a/测试数据 产业-原材料消耗-产品生产量.py b/测试数据 产业-原材料消耗-产品生产量.py new file mode 100644 index 0000000..930c2cb --- /dev/null +++ b/测试数据 产业-原材料消耗-产品生产量.py @@ -0,0 +1,42 @@ +import pandas as pd +import numpy as np + +# 设置随机种子,确保结果可重复 +np.random.seed(42) + +# 定义产业数量 +num_industries = 10 + +# 创建产业ID列表 +industry_ids = [i for i in range(0, num_industries + 1)] + +# 为每个产业生成随机的材料id、消耗量、产品id和制造量 +consumed_materials_data = [] +produced_products_data = [] + +for industry in industry_ids: + # 每个产业消耗的材料(生成1到3个随机材料ID和消耗量) + num_materials = np.random.randint(1, 4) + for _ in range(num_materials): + material_id = np.random.randint(0, 100) + consumption_quantity = np.random.randint(50, 500) + consumed_materials_data.append([industry, material_id, consumption_quantity]) + + # 每个产业制造的产品(生成1到3个随机产品ID和制造量) + num_products = np.random.randint(1, 4) + for _ in range(num_products): + product_id = np.random.randint(100, 201) + production_quantity = np.random.randint(100, 1000) + produced_products_data.append([industry, product_id, production_quantity]) + +# 创建两个数据框 +df_consumed_materials = pd.DataFrame(consumed_materials_data, columns=['产业ID', '消耗材料ID', '消耗量']) +df_produced_products = pd.DataFrame(produced_products_data, columns=['产业ID', '制造产品ID', '制造量']) + +# 保存两个数据框为CSV文件 +file_path_consumed = '测试数据 consumed_materials.csv' +file_path_produced = '测试数据 produced_products.csv' + +df_consumed_materials.to_csv(file_path_consumed, index=False) +df_produced_products.to_csv(file_path_produced, index=False) + diff --git a/测试数据 BomNodes.csv.py b/测试数据 BomNodes.csv.py new file mode 100644 index 0000000..95ddd87 --- /dev/null +++ b/测试数据 BomNodes.csv.py @@ -0,0 +1,15 @@ +import pandas as pd +import random +import numpy as np + +# 生成170条测试数据的函数 +data=pd.read_csv('input_data/BomNodes.csv') +# 生成数据 +df = pd.DataFrame(data) +df['产业种类'] = [random.choice([0, 1]) for _ in range(107)] + +# 显示前几行 +print(df.head()) + +# 保存数据到CSV文件 +df.to_csv('input_data/测试 BomNodes.csv', index=False) diff --git a/测试数据 Firm_amended.csv.py b/测试数据 Firm_amended.csv.py new file mode 100644 index 0000000..016c029 --- /dev/null +++ b/测试数据 Firm_amended.csv.py @@ -0,0 +1,36 @@ +import pandas as pd +import random +import numpy as np + + +# 生成170条测试数据的函数 +def generate_test_data(num_rows=170): + data = { + 'Company ID': [i for i in range(1, num_rows + 1)], # 生成1到170的公司ID + 'Company Name': [f'Company_{i}' for i in range(1, num_rows + 1)], # 生成公司名称 + '原材料': [round(random.uniform(100, 1000), 2) for _ in range(num_rows)], # 原材料 + '库存商品': [round(random.uniform(100, 1000), 2) for _ in range(num_rows)], # 库存商品 + '固定资产原值': [round(random.uniform(100, 1000), 2) for _ in range(num_rows)], # 固定资产原值 + 'Revenue': [round(random.uniform(10000, 100000), 2) for _ in range(num_rows)], # Revenue + 'Total Employees (People)': [random.randint(50, 1000) for _ in range(num_rows)], # 员工总数 + 'Type_Region': [random.choice(['Urban', 'Rural', 'Suburban']) for _ in range(num_rows)], # 区域类型 + 'Self-supply Business (Yes/No)': [random.choice(['Yes', 'No']) for _ in range(num_rows)] # 自营业务 + } + + df = pd.DataFrame(data) + + # 添加Revenue_Log列 + df['Revenue_Log'] = np.log(df['Revenue']) + df['production_output'] = df['固定资产原值'] / 10+np.random.randint(100, 500, size=len(df)) + df['demand_quantity'] = df['原材料'] / 10 +np.random.randint(100, 500, size=len(df)) + return df + + +# 生成数据 +df_test_data = generate_test_data() + +# 显示前几行 +print(df_test_data.head()) + +# 保存数据到CSV文件 +df_test_data.to_csv('input_data/测试 Firm_amended 170.csv', index=False) diff --git a/测试数据 companies_devices.csv b/测试数据 companies_devices.csv new file mode 100644 index 0000000..ae382cb --- /dev/null +++ b/测试数据 companies_devices.csv @@ -0,0 +1,11 @@ +企业id,设备id,设备数量 +1051,187,104 +1092,199,113 +1014,123,180 +1071,102,100 +1060,121,184 +1020,152,70 +1082,101,122 +1086,187,67 +1074,129,181 +1074,137,138 diff --git a/测试数据 companies_materials.csv b/测试数据 companies_materials.csv new file mode 100644 index 0000000..7b42404 --- /dev/null +++ b/测试数据 companies_materials.csv @@ -0,0 +1,11 @@ +企业id,材料id,材料数量 +1051,1,159 +1092,63,113 +1014,59,108 +1071,20,189 +1060,32,152 +1020,75,101 +1082,57,183 +1086,21,191 +1074,88,159 +1074,48,170 \ No newline at end of file diff --git a/测试数据 companies_products.csv b/测试数据 companies_products.csv new file mode 100644 index 0000000..725ee0b --- /dev/null +++ b/测试数据 companies_products.csv @@ -0,0 +1,11 @@ +企业id,产品id,产品数量 +1051,58,63 +1092,169,27 +1014,187,66 +1071,14,54 +1060,189,97 +1020,189,55 +1082,174,69 +1086,189,23 +1074,50,21 +1074,107,25 diff --git a/测试数据 consumed_materials.csv b/测试数据 consumed_materials.csv new file mode 100644 index 0000000..8348aef --- /dev/null +++ b/测试数据 consumed_materials.csv @@ -0,0 +1,24 @@ +产业ID,消耗材料ID,消耗量 +0,51,398 +0,14,156 +0,71,238 +1,74,137 +1,99,409 +1,23,180 +2,37,435 +2,63,493 +3,21,302 +3,88,98 +4,61,224 +4,61,100 +5,72,216 +6,8,395 +6,52,435 +7,80,469 +7,49,409 +8,62,451 +9,47,320 +9,71,264 +9,61,345 +10,52,329 +10,25,266 diff --git a/测试数据 device_salvage_values.csv b/测试数据 device_salvage_values.csv new file mode 100644 index 0000000..47d1118 --- /dev/null +++ b/测试数据 device_salvage_values.csv @@ -0,0 +1,11 @@ +设备id,设备残值 +151,97 +192,382 +114,109 +171,881 +160,673 +120,140 +182,671 +186,318 +174,779 +174,353 diff --git a/测试数据 material_device_product_ids.csv b/测试数据 material_device_product_ids.csv new file mode 100644 index 0000000..53a9fc6 --- /dev/null +++ b/测试数据 material_device_product_ids.csv @@ -0,0 +1,101 @@ +材料id,设备id,产品id +51,192,14 +71,160,20 +82,186,74 +74,187,116 +99,123,130 +21,152,1 +87,129,37 +1,163,187 +20,132,57 +21,188,48 +90,158,169 +91,159,14 +61,161,174 +61,150,107 +54,163,130 +50,106,20 +72,138,17 +3,188,59 +13,108,89 +52,101,83 +91,159,198 +43,107,174 +34,177,80 +35,149,103 +3,101,133 +53,103,190 +17,189,43 +33,173,189 +99,113,94 +47,114,199 +77,186,189 +39,184,81 +52,123,153 +88,159,123 +40,128,14 +44,164,88 +70,108,87 +0,107,62 +10,180,135 +34,134,32 +4,140,27 +6,172,71 +11,133,32 +47,122,61 +87,136,98 +43,185,34 +64,198,100 +46,177,130 +0,104,141 +26,108,14 +89,141,123 +76,150,62 +95,151,131 +93,200,150 +14,142,28 +35,112,159 +70,158,85 +27,165,169 +44,161,184 +5,127,27 +43,183,29 +61,174,127 +91,188,189 +96,100,120 +26,161,120 +76,102,197 +71,126,136 +61,136,50 +43,123,58 +31,195,179 +61,157,51 +11,138,129 +2,200,112 +55,180,186 +1,101,53 +86,200,128 +18,101,52 +43,189,159 +69,131,67 +54,174,183 +16,137,23 +68,197,138 +15,196,200 +58,169,92 +2,119,186 +35,118,89 +66,118,147 +95,170,51 +32,139,127 +38,181,103 +0,110,184 +88,149,150 +30,193,41 +98,106,143 +89,159,112 +1,100,47 +11,168,36 +31,108,98 +18,147,130 +19,123,53 diff --git a/测试数据 produced_products.csv b/测试数据 produced_products.csv new file mode 100644 index 0000000..8631620 --- /dev/null +++ b/测试数据 produced_products.csv @@ -0,0 +1,22 @@ +产业ID,制造产品ID,制造量 +0,182,314 +1,152,869 +1,187,591 +2,132,559 +3,158,610 +3,141,575 +3,159,882 +4,163,604 +4,102,584 +4,150,746 +5,103,700 +5,159,113 +6,159,554 +6,143,608 +6,107,134 +7,105,665 +7,103,921 +8,143,261 +8,173,369 +9,179,848 +10,140,256 diff --git a/测试数据 products_materials_equipment.csv b/测试数据 products_materials_equipment.csv new file mode 100644 index 0000000..0e5ae40 --- /dev/null +++ b/测试数据 products_materials_equipment.csv @@ -0,0 +1,101 @@ +产品id,种类 +1,材料 +2,材料 +3,材料 +4,材料 +5,材料 +6,材料 +7,材料 +8,材料 +9,材料 +10,材料 +11,材料 +12,材料 +13,材料 +14,材料 +15,材料 +16,材料 +17,材料 +18,材料 +19,材料 +20,材料 +21,材料 +22,材料 +23,材料 +24,材料 +25,材料 +26,材料 +27,材料 +28,材料 +29,材料 +30,材料 +31,材料 +32,材料 +33,材料 +34,材料 +35,材料 +36,材料 +37,材料 +38,材料 +39,材料 +40,材料 +41,材料 +42,材料 +43,材料 +44,材料 +45,材料 +46,材料 +47,材料 +48,材料 +49,材料 +50,材料 +51,材料 +52,材料 +53,材料 +54,材料 +55,材料 +56,材料 +57,材料 +58,材料 +59,材料 +60,材料 +61,材料 +62,设备 +63,设备 +64,设备 +65,设备 +66,设备 +67,设备 +68,设备 +69,设备 +70,设备 +71,设备 +72,设备 +73,设备 +74,设备 +75,设备 +76,设备 +77,设备 +78,设备 +79,设备 +80,设备 +81,设备 +82,设备 +83,设备 +84,设备 +85,设备 +86,设备 +87,设备 +88,设备 +89,设备 +90,设备 +91,设备 +92,设备 +93,设备 +94,设备 +95,设备 +96,设备 +97,设备 +98,设备 +99,设备 +100,设备 diff --git a/测试数据 产品通编码.py b/测试数据 产品通编码.py new file mode 100644 index 0000000..d7a4b31 --- /dev/null +++ b/测试数据 产品通编码.py @@ -0,0 +1,25 @@ +import pandas as pd +import numpy as np + +# 设置数据行数 +total_rows = 100 # 总共100行 +material_count = 61 # 前61行为材料 + +# 生成产品id +product_ids = np.arange(1, total_rows + 1) + +# 生成种类,前61行是材料,后面是设备 +categories = ['材料'] * material_count + ['设备'] * (total_rows - material_count) + +# 创建数据框 +df_products = pd.DataFrame({ + '产品id': product_ids, + '种类': categories +}) + +# 保存为CSV文件 +file_path_products = '测试数据 products_materials_equipment.csv' +df_products.to_csv(file_path_products, index=False) # index=False 不保存行索引 + +# 打印文件路径 +print(f"CSV 文件已生成,路径为: {file_path_products}") diff --git a/测试数据 材料设备产品.py b/测试数据 材料设备产品.py new file mode 100644 index 0000000..1172cbf --- /dev/null +++ b/测试数据 材料设备产品.py @@ -0,0 +1,42 @@ +import pandas as pd +import numpy as np + +# 设置随机种子,以便结果可重复 +np.random.seed(42) + +# 定义生成数据的行数 +num_rows = 100 # 生成 100 行数据 + +# 创建空列表来存储生成的ID +material_ids = [] +device_ids = [] +product_ids = [] + +# 生成材料、设备、产品的ID,确保同一行内的ID不重复 +for _ in range(num_rows): + mat_id = np.random.randint(0, 100) # 材料ID范围 0-99 + dev_id = np.random.randint(100, 201) # 设备ID范围 100-199 + + # 确保产品ID在当前行与材料ID和设备ID不重复 + while True: + prod_id = np.random.randint(0, 201) + if prod_id != mat_id and prod_id != dev_id: + break + + material_ids.append(mat_id) + device_ids.append(dev_id) + product_ids.append(prod_id) + +# 创建数据框,将三个ID列结合起来 +df_ids = pd.DataFrame({ + '材料id': material_ids, + '设备id': device_ids, + '产品id': product_ids +}) + +# 指定文件路径并保存为CSV文件 +file_path_ids = '测试数据 material_device_product_ids.csv' +df_ids.to_csv(file_path_ids, index=False) # index=False 表示不保存行索引 + +# 打印文件路径 +print(f"CSV 文件已生成,路径为: {file_path_ids}") diff --git a/测试数据 设备id和设备残值.py b/测试数据 设备id和设备残值.py new file mode 100644 index 0000000..cb313e3 --- /dev/null +++ b/测试数据 设备id和设备残值.py @@ -0,0 +1,25 @@ +import pandas as pd +import numpy as np + +# 设置随机种子以确保结果可重复 +np.random.seed(42) + +# 定义行数,即生成多少个设备 +num_rows = 10 + +# 生成设备id(例如100到200之间的设备ID) +device_ids = np.random.randint(100, 200, size=num_rows) + +# 生成设备残值,假设范围在1000到10000之间 +device_salvage_values = np.random.randint(10, 1000, size=num_rows) + +# 创建数据框,将设备id和设备残值结合起来 +df_devices = pd.DataFrame({ + '设备id': device_ids, + '设备残值': device_salvage_values +}) + +# 保存为CSV文件 +file_path_devices = '测试数据 device_salvage_values.csv' +df_devices.to_csv(file_path_devices, index=False) + diff --git a/测试数据_firm_industry_relation.csv.py b/测试数据_firm_industry_relation.csv.py new file mode 100644 index 0000000..fd989f7 --- /dev/null +++ b/测试数据_firm_industry_relation.csv.py @@ -0,0 +1,17 @@ +import pandas as pd + +Firm_Prod = pd.read_csv("input_data/Firm_amended.csv") +Firm_Prod.fillna(0, inplace=True) + +# Stack the firm-product relationships into a DataFrame +firm_prod = pd.DataFrame({'bool': Firm_Prod.loc[:, '1':].stack()}) +firm_prod = firm_prod[firm_prod['bool'] == 1].reset_index() +firm_prod.drop('bool', axis=1, inplace=True) +firm_prod.rename({'level_0': 'Firm_Code', 'level_1': 'Product_Code'}, axis=1, inplace=True) +firm_prod['Firm_Code'] = firm_prod['Firm_Code'].astype('string') + +# 保存为新的 CSV 文件 +output_file_path = 'input_data/firm_industry_relation.csv' +firm_prod.to_csv(output_file_path, index=False) + +print(f"新的 CSV 文件已保存到: {output_file_path}")