该数据集为日本1960年到2022年间的基建领域的投资数据,包含以下特征:
年份
价值
总计
建筑总计
住宅建筑
政府住宅建筑
私人住宅建筑
非住宅建筑
政府非住宅建筑
私人非住宅建筑
私人非住宅建筑(矿业和工业)
私人非住宅建筑(其他)
建筑维修(翻新或改造)
政府建筑维修
私人建筑维修
土木工程总计
政府土木工程
政府公共项目
政府其他土木工程
私人土木工程
重复总计(政府)
重复总计(私人)
重复建筑(政府)
重复建筑(私人)
重复土木工程(政府)
重复土木工程(私人)
私人非住宅建筑(非住宅建筑和土木工程)
#导入可视化库和计算库
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.linear_model import LogisticRegressionfrom sklearn import preprocessing
import matplotlib.pyplot as plt
import gc
import os
import randomimport numpy as np
import pandas as pd
import seaborn as snsimport warnings
warnings.filterwarnings('ignore')#可视化
from pyecharts import options as opts
from pyecharts.charts import *
from pyecharts.components import Table
from pyecharts.commons.utils import JsCode
from pyecharts.globals import ThemeType,SymbolType,ChartTypefrom pyecharts.charts import Line
from pyecharts.charts import Bar
from pyecharts.charts import Pie
from pyecharts.charts import Mapfrom pyecharts.charts import Sankeyfrom pyecharts.globals import ChartType
from pyecharts.commons.utils import JsCode
from pyecharts import options as opts
import warnings
warnings.filterwarnings('ignore')
#模型训练
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split, KFold, GridSearchCV
from sklearn.metrics import accuracy_score, classification_report
import xgboost as xgb
import lightgbm as lgb
from sklearn.metrics import confusion_matrix, classification_report
import itertools
from sklearn.preprocessing import MinMaxScaler
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, LSTM
data= pd.read_csv(r"/home/mw/input/12435156345/日本建筑行业投资数据集.csv")
#用info函数查看数据情况
data.info()
# 描述性统计
summary_stats = data.describe()# 展示描述性统计
summary_stats
通过这一步,我们能够了解数据的基本信息,如数据的大小、列的名称、数据类型等。
数据清洗与预处理
在实际的分析中,数据清洗是至关重要的一步,包括处理缺失值、重复值和格式不一致的问题:
# 检查缺失值
print(data.isnull().sum())# 处理缺失值
data.fillna(0, inplace=True) # 使用0填充缺失值(根据需要也可以使用其他方法)# 确保数据类型正确
data['Year'] = data['Year'].astype(int)
data['Total'] = data['Total'].astype(float)
data=data[data['Value'] == 'real'].copy()
这一步确保数据完整且一致,为后续的分析打好基础。
探索性数据分析(EDA)
在探索性分析中,我们需要回答我们的研究目标,结合该数据集,我们可以总结以下目标:
投资的总趋势是什么?
各个子类别(如住宅、非住宅、土木工程等)的投资有何变化?
政府与私营部门的投资占比如何?
# 绘制年度总投资趋势图
plt.figure(figsize=(10, 6))
plt.plot(data['Year'], data['Total'], marker='o')
plt.title('年度投资总趋势')
plt.xlabel('年份')
plt.ylabel('总投资额')
plt.grid(True)
plt.show()
# 按年份汇总总投资额
annual_investment = data.groupby('Year')['Total'].sum()# 绘制年度趋势图
plt.figure(figsize=(10, 6))
plt.plot(annual_investment.index, annual_investment.values, marker='o')
plt.title('年度投资趋势')
plt.xlabel('年度')
plt.ylabel('总投资额t')
plt.grid(True)
plt.show()
通过这张图表,我们能够直观地看到不同年份的投资变化趋势,识别出投资高峰期和低谷期。
各投资类别的趋势分析
# 分析建筑工程和土木工程的投资变化
plt.figure(figsize=(12, 8))
plt.plot(data['Year'], data['Architecture_Total'], label='建筑投资', marker='o')
plt.plot(data['Year'], data['Civil Engineering_Total'], label='基础建设投资', marker='o')
plt.title('分类投资总趋势')
plt.xlabel('年份')
plt.ylabel('总投资额')
plt.legend()
plt.grid(True)
plt.show()
这张图表展示了建筑工程和基础建设的投资变化情况,帮助我们理解不同领域的投资重心。
政府与私营部门投资对比分析
# 政府与私营部门在总投资中的占比
government_investment = data['Repeated_Total_Government']
private_investment = data['Repeated_Total_Private']# 绘制堆叠柱状图
plt.figure(figsize=(12, 8))
plt.bar(data['Year'], government_investment, label='政府投资')
plt.bar(data['Year'], private_investment, bottom=government_investment, label='私人投资')
plt.title('政府投资 vs 私人投资')
plt.xlabel('年份r')
plt.ylabel('投资总额')
plt.legend()
plt.grid(True)
plt.show()
这张图展示了政府和私营部门在总投资中的占比及变化,能够帮助我们分析公共项目与私营项目的投资结构。
不同领域的投资额对比
# 建筑工程投资中的政府与私营占比
arch_gov_investment = data[['Year', 'Architecture_Total', 'Repeated_Architecture_Government']].groupby('Year').sum()
arch_private_investment = data[['Year', 'Architecture_Total', 'Repeated_Architecture_Private']].groupby('Year').sum()arch_total_investment = arch_gov_investment['Architecture_Total']
arch_gov_percentage = (arch_gov_investment['Repeated_Architecture_Government'] / arch_total_investment) * 100
arch_private_percentage = (arch_private_investment['Repeated_Architecture_Private'] / arch_total_investment) * 100# 土木工程投资中的政府与私营占比
civil_gov_investment = data[['Year', 'Civil Engineering_Total', 'Repeated_Civil Engineering_Government']].groupby('Year').sum()
civil_private_investment = data[['Year', 'Civil Engineering_Total', 'Repeated_Civil Engineering_Private']].groupby('Year').sum()civil_total_investment = civil_gov_investment['Civil Engineering_Total']
civil_gov_percentage = (civil_gov_investment['Repeated_Civil Engineering_Government'] / civil_total_investment) * 100
civil_private_percentage = (civil_private_investment['Repeated_Civil Engineering_Private'] / civil_total_investment) * 100# 可视化展示建筑工程和土木工程的投资占比
plt.figure(figsize=(14, 8))# 基建领域
plt.subplot(2, 1, 1)
plt.plot(arch_gov_percentage.index, arch_gov_percentage, label='Government (Architecture)', color='blue')
plt.plot(arch_private_percentage.index, arch_private_percentage, label='Private (Architecture)', color='orange')
plt.title('建筑领域政府投资 VS 私人投资')
plt.xlabel('Year')
plt.ylabel('Percentage (%)')
plt.legend()
plt.grid(True)# 土木工程
plt.subplot(2, 1, 2)
plt.plot(civil_gov_percentage.index, civil_gov_percentage, label='Government (Civil Engineering)', color='green')
plt.plot(civil_private_percentage.index, civil_private_percentage, label='Private (Civil Engineering)', color='red')
plt.title('基建领域政府投资 VS 私人投资')
plt.xlabel('Year')
plt.ylabel('Percentage (%)')
plt.legend()
plt.grid(True)plt.tight_layout()
plt.show()
例如,在非住宅建筑中,分析政府与私营部门在不同子领域(如采矿、工业等)的投资占比。
# 非住宅建筑中各子领域的投资占比分析
non_residential_gov_investment = data[['Year', 'Architecture_Non Residential', 'Architecture_Non Residential_Government']].groupby('Year').sum()
non_residential_private_investment = data[['Year', 'Architecture_Non Residential', 'Architecture_Non Residential_Private']].groupby('Year').sum()non_residential_total_investment = non_residential_gov_investment['Architecture_Non Residential']
non_residential_gov_percentage = (non_residential_gov_investment['Architecture_Non Residential_Government'] / non_residential_total_investment) * 100
non_residential_private_percentage = (non_residential_private_investment['Architecture_Non Residential_Private'] / non_residential_total_investment) * 100# 可视化展示非住宅建筑中政府与私营部门的投资占比
plt.figure(figsize=(12, 6))
plt.plot(non_residential_gov_percentage.index, non_residential_gov_percentage, label='Government (Non-Residential Architecture)', color='purple')
plt.plot(non_residential_private_percentage.index, non_residential_private_percentage, label='Private (Non-Residential Architecture)', color='brown')
plt.title('非住宅建筑中政府与私营部门的投资占比')
plt.xlabel('Year')
plt.ylabel('Percentage (%)')
plt.legend()
plt.grid(True)
plt.show()
机器学习分析
我们想要根据不同投资类型(如住宅、非住宅、土木工程等)的投资额将市场进行分类:
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler# 选择用于聚类分析的列
cluster_data = data[['Architecture_Residential', 'Architecture_Non Residential', 'Civil Engineering_Total']]
cluster_data.fillna(0, inplace=True) # 填补缺失值# 数据标准化
scaler = StandardScaler()
scaled_cluster_data = scaler.fit_transform(cluster_data)# 使用K-means进行聚类分析
kmeans = KMeans(n_clusters=3) # 假设我们分为3类
kmeans.fit(scaled_cluster_data)
labels = kmeans.labels_# 将聚类结果添加回原数据
data['Cluster'] = labels# 可视化聚类结果
plt.figure(figsize=(10, 6))
plt.scatter(data['Architecture_Residential'], data['Architecture_Non Residential'], c=labels, cmap='viridis')
plt.xlabel('Residential Architecture Investment')
plt.ylabel('Non Residential Architecture Investment')
plt.title('K-means Clustering of Investment Types')
plt.show()
数据建模与预测
如果需要预测未来几年的投资趋势,可以使用回归模型等进行分析。回归分析是最经典的预测模型之一,在基建投资分析中可以用于预测某些关键变量(如总投资额)与其他因素(如年份、政策变化、市场条件)的关系。 我们使用前三年的数据作为特征,预测后续的数据。
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score# 假设我们已经加载了数据,并且清洗完毕
# 这里以“Total”列为目标变量# 构造滞后特征
data['lag_1'] = data['Total'].shift(1)
data['lag_2'] = data['Total'].shift(2)
data['lag_3'] = data['Total'].shift(3)# 删除缺失值(因为前几年的滞后特征会有缺失)
data = data.dropna()# 特征和目标变量
X = data[['lag_1', 'lag_2', 'lag_3']] # 使用前3年的投资作为特征
y = data['Total']# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 创建线性回归模型
model = LinearRegression()# 训练模型
model.fit(X_train, y_train)# 预测
y_pred = model.predict(X_test)# 评估模型
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print(f'Mean Squared Error: {mse}')
print(f'R-squared: {r2}')# 可视化预测结果
import matplotlib.pyplot as pltplt.figure(figsize=(10, 6))
plt.plot(data['Year'][-len(y_test):], y_test, label='实际投资额', marker='o')
plt.plot(data['Year'][-len(y_test):], y_pred, label='预测投资额', marker='o')
plt.title('实际 vs 预测投资总额')
plt.xlabel('年份')
plt.ylabel('总投资额')
plt.legend()
plt.grid(True)
plt.show()
结论与建议
通过以上分析,可以得出以下关键结论:
政府与私营部门的总体投资结构:政府投资在特定年份中有显著的占比(如在经济危机或重大基础设施建设时期),而私营部门在某些年份则表现出更高的活跃度(如市场景气时期)。
不同投资领域的投资结构:建筑工程中,政府投资往往集中在公共住宅和基础设施建设,而私营部门则更多关注商业、工业项目。土木工程中,政府投资占比更高,主要用于公共设施建设。
细分类别的市场主导性:在非住宅建筑中,私营部门在工业和商业投资方面占据主导,而政府则主要负责公共项目和特定政策驱动的投资
资料下载