Python DBSCAN 聚类算法实战:原理 + 代码 + 案例

5 阅读6分钟

你想了解经济学领域中常用的Python库,核心需求是明确不同库的定位、用途和适用场景,方便针对性学习和使用。下面我会按“经济学核心工作流程”分类梳理,每个库都说明核心用途典型应用场景极简示例,确保你能快速对应到自己的研究/工作需求。

一、数据处理与清洗(经济学基础环节)

经济学研究的第一步是处理各类数据(面板数据、时间序列、调研数据),这类库是“刚需中的刚需”。

1. pandas(核心中的核心)

  • 核心用途:结构化数据的清洗、合并、筛选、分组、时间序列处理,替代Excel/Stata的核心数据处理功能;
  • 典型场景:处理国家统计局面板数据、计算GDP增长率/通胀率、筛选特定年份/地区的经济数据;
  • 极简示例
    import pandas as pd
    
    # 读取宏观经济数据(CSV格式)
    df = pd.read_csv('macro_data.csv')
    # 筛选2010年后中国的GDP数据,删除缺失值
    china_gdp = df[(df['country']=='中国') & (df['year']>=2010)][['year', 'gdp']].dropna()
    # 计算GDP同比增长率
    china_gdp['gdp_growth'] = china_gdp['gdp'].pct_change() * 100
    print(china_gdp.head())
    

2. numpy(数值计算底层库)

  • 核心用途:矩阵运算、数值求解、数组操作,是pandas/statsmodels等库的底层支撑;
  • 典型场景:经济模型的矩阵求解(如投入产出模型)、生成模拟数据(如随机效用模型);
  • 极简示例
    import numpy as np
    
    # 构建投入产出矩阵(简化版)
    input_output = np.array([[0.2, 0.1], [0.3, 0.4]])
    # 计算里昂惕夫逆矩阵(经济学投入产出分析核心)
    leontief = np.linalg.inv(np.eye(2) - input_output)
    print("里昂惕夫逆矩阵:\n", leontief)
    

二、计量经济学分析(经济学专业核心)

这是经济学区别于其他领域的核心模块,能完成回归、检验、时间序列分析等专业任务,替代Stata/EViews。

1. statsmodels(计量分析首选)

  • 核心用途:经典计量模型估计与检验,覆盖OLS、面板回归、ARIMA、VAR、格兰杰因果、协整检验等;
  • 典型场景:消费函数回归(凯恩斯模型)、通胀率时间序列预测、政策效应面板分析;
  • 极简示例(OLS回归)
    import statsmodels.api as sm
    
    # 构建变量:y=消费支出,x=可支配收入(需加常数项)
    y = china_gdp['gdp']  # 以GDP为被解释变量示例
    x = sm.add_constant(np.arange(len(y)))  # 时间趋势项为解释变量
    # 拟合OLS模型并输出结果(系数、P值、R²)
    model = sm.OLS(y, x).fit()
    print(model.summary())
    

2. linearmodels(面板数据专用)

  • 核心用途:弥补statsmodels面板分析的不足,支持固定效应、随机效应、动态面板(GMM)等;
  • 典型场景:省级面板数据的政策效应分析、企业面板数据的生产率研究;
  • 极简示例
    from linearmodels import PanelOLS
    
    # 构造面板数据格式(设置个体和时间索引)
    df_panel = df.set_index(['country', 'year'])
    # 拟合固定效应面板回归
    model = PanelOLS.from_formula('gdp ~ 1 + investment + EntityEffects', data=df_panel)
    results = model.fit(cov_type='clustered', cluster_entity=True)
    print(results.summary())
    

3. arch(金融计量专用)

  • 核心用途:波动率建模,支持GARCH、EGARCH等模型;
  • 典型场景:股票收益率波动率分析、通胀波动率预测(宏观金融);
  • 极简示例
    from arch import arch_model
    
    # 构建GARCH(1,1)模型分析收益率波动率
    returns = np.random.randn(1000)  # 模拟收益率数据
    model = arch_model(returns, vol='GARCH', p=1, q=1)
    results = model.fit()
    print(results.summary())
    

三、数据可视化(论文/报告必备)

经济学研究需要将结果可视化,这类库能绘制专业的学术图表、动态交互图表。

1. matplotlib/seaborn(基础可视化)

  • 核心用途:绘制静态图表(折线图、散点图、柱状图、热力图),适配学术论文格式;
  • 典型场景:GDP增长率时间序列图、不同国家通胀率对比图、变量相关性热力图;
  • 极简示例
    import matplotlib.pyplot as plt
    import seaborn as sns
    
    # 设置中文显示(解决经济学图表中文乱码)
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.rcParams['axes.unicode_minus'] = False
    
    # 绘制GDP增长率折线图
    plt.figure(figsize=(10, 6))
    plt.plot(china_gdp['year'], china_gdp['gdp_growth'], marker='o', color='darkblue')
    plt.title('2010-2023年中国GDP增长率')
    plt.xlabel('年份')
    plt.ylabel('增长率(%)')
    plt.grid(alpha=0.3)
    plt.show()
    
    # 绘制变量相关性热力图(seaborn)
    sns.heatmap(df[['gdp', 'investment', 'consumption']].corr(), annot=True, cmap='Blues')
    

2. plotly(动态交互可视化)

  • 核心用途:绘制动态交互图表,支持缩放、悬停查看数值,适合报告/演示;
  • 典型场景:省级GDP动态地图、时间序列交互图、多维度经济指标仪表盘;
  • 极简示例
    import plotly.express as px
    
    # 绘制动态GDP增长率折线图(可交互)
    fig = px.line(china_gdp, x='year', y='gdp_growth', title='中国GDP增长率(可交互)')
    fig.update_layout(xaxis_title='年份', yaxis_title='增长率(%)')
    fig.show()
    

四、经济数据获取(一手数据来源)

经济学研究常需要爬取/调取公开数据,这类库能高效获取数据,替代手动下载。

1. requests/BeautifulSoup(网络爬虫)

  • 核心用途:爬取网页上的公开经济数据(如国家统计局、Wind、世界银行);
  • 典型场景:爬取月度CPI数据、各省市财政收支数据;
  • 极简示例
    import requests
    from bs4 import BeautifulSoup
    
    # 爬取世界银行公开数据(简化版)
    url = 'http://api.worldbank.org/v2/country/chn/indicator/NY.GDP.MKTP.CD?format=json'
    response = requests.get(url)
    data = response.json()[1]  # 解析JSON数据
    gdp_data = [(item['date'], item['value']) for item in data if item['value']]
    print('中国GDP数据前5条:', gdp_data[:5])
    

2. pandas-datareader(金融/宏观数据调取)

  • 核心用途:直接调取权威数据源(世界银行、IMF、美联储、雅虎财经);
  • 典型场景:调取美联储利率数据、世界银行人均GDP数据、股票市场数据;
  • 极简示例
    import pandas_datareader as pdr
    
    # 调取世界银行的中国人均GDP数据(1960-2023)
    data = pdr.wb.download(indicator='NY.GDP.PCAP.CD', country='CN', start=1960, end=2023)
    print(data.head())
    

五、进阶:经济模型与预测

适合需要做量化分析、机器学习预测的经济学方向(如计量经济学进阶、量化金融)。

1. scikit-learn(机器学习预测)

  • 核心用途:经济指标预测、分类分析,支持回归、随机森林、梯度提升等;
  • 典型场景:GDP增速预测、消费行为分类、信用风险评估;
  • 极简示例
    from sklearn.ensemble import RandomForestRegressor
    from sklearn.model_selection import train_test_split
    
    # 用随机森林预测GDP(模拟数据)
    X = df[['investment', 'consumption', 'export']]  # 特征变量
    y = df['gdp']  # 目标变量
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
    
    model = RandomForestRegressor(n_estimators=100)
    model.fit(X_train, y_train)
    print('GDP预测准确率:', model.score(X_test, y_test))
    

2. numba(加速数值计算)

  • 核心用途:加速自定义经济模型的计算(如DSGE模型、Agent-Based模型);
  • 典型场景:大规模数值模拟、复杂经济模型求解;
  • 极简示例
    from numba import jit
    
    # 用numba加速GDP增长率计算(大规模数据)
    @jit(nopython=True)  # 编译加速
    def calc_gdp_growth(gdp_array):
        growth = np.zeros_like(gdp_array)
        for i in range(1, len(gdp_array)):
            growth[i] = (gdp_array[i] - gdp_array[i-1]) / gdp_array[i-1] * 100
        return growth
    
    gdp_array = np.array(china_gdp['gdp'])
    growth = calc_gdp_growth(gdp_array)
    print('加速后的增长率计算结果:', growth[:5])