Python爬虫——城市数据分析与市场潜能计算(Pandas库)

使用Python进行城市市场潜能分析

简介

本教程将指导您如何使用Python和Pandas库来处理城市数据,包括GDP、面积和城市间距离。我们将计算每个城市的市场潜能,这有助于了解各城市的经济影响力。

步骤 1: 准备环境

确保您的环境中安装了Python和以下库:

  • pandas
  • numpy
  • matplotlib

可以通过以下命令安装缺失的库:

bash 复制代码
pip install pandas numpy matplotlib openpyxl

步骤 2: 读取数据

使用Pandas读取包含城市名称、年份、GDP、面积和城市ID的Excel文件。

python 复制代码
import pandas as pd

# 读取数据
data_df = pd.read_excel('283地级市数据.xlsx', sheet_name='Sheet1', header=0)

步骤 3: 数据预处理

确保数据框的索引和列名正确设置,以便进行后续计算。

python 复制代码
# 设置城市ID为索引
data_df.set_index('id', inplace=True)

步骤 4: 读取距离数据

读取城市间距离数据,确保第一行和第一列包含城市ID。

python 复制代码
distance_df = pd.read_excel('规整化的283地级市的欧氏距离(带标题).xlsx', index_col=0, header=0)

步骤 5: 计算市场潜能

计算每个城市的市场潜能,考虑其GDP和与其他城市的距离。

python 复制代码
import numpy as np

# 计算di值
dii_values = (2/3) * (data_df['area'] / np.pi)**0.5

# 初始化市场潜能DataFrame
market_potential_df = pd.DataFrame(index=data_df.index, columns=data_df['year'].unique())

# 计算市场潜能
for year in market_potential_df.columns:
    for city_id in market_potential_df.index:
        Y_i = data_df.loc[city_id, 'gdp']
        dii = dii_values.loc[city_id]
        MP_i = Y_i / dii if not np.isnan(Y_i) else 0
        for other_city_id in distance_df.index:
            if city_id != other_city_id:
                Y_j = data_df.loc[other_city_id, 'gdp']
                d_ij = distance_df.loc[city_id, other_city_id]
                MP_i += Y_j / d_ij if not np.isnan(Y_j) else 0
        market_potential_df.loc[city_id, year] = MP_i

步骤 6: 输出结果

将计算结果输出到新的Excel文件。

python 复制代码
output_file_path = '市场潜能结果.xlsx'
market_potential_df.to_excel(output_file_path)
print(f"市场潜能数据已成功输出到 {output_file_path}")

步骤 7: 可视化分析

使用matplotlib绘制特定城市的市场潜能变化。

python 复制代码
import matplotlib.pyplot as plt

# 绘制石家庄2003-2015年的市场潜能散点图
shijiazhuang_id = 3  # 石家庄市的城市ID
shijiazhuang_potential = market_potential_df.loc[shijiazhuang_id, (market_potential_df.columns >= 2003) & (market_potential_df.columns <= 2015)]
plt.figure(figsize=(10, 6))
plt.scatter(shijiazhuang_potential.index, shijiazhuang_potential.values, color='blue')
plt.title('石家庄2003-2015年市场潜能散点图')
plt.xlabel('年份')
plt.ylabel('市场潜能')
plt.grid(True)
plt.show()

结论

本教程提供了一个完整的流程,从读取城市数据到计算市场潜能,最后将结果可视化。这有助于理解各城市的经济影响力和相互关系。

python 复制代码
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import os

plt.rcParams['font.sans-serif'] = ['SimHei']  # 黑体
plt.rcParams['font.family'] = 'sans-serif'
plt.rcParams['axes.unicode_minus'] = False  # 正确显示负号

# 读取GDP和面积数据,假设第一列为城市名称,第二列为年份,第三列为GDP,第四列为面积,第五列为城市ID
data_df = pd.read_excel('283地级市数据.xlsx', sheet_name='Sheet1', header=0)

# 读取距离数据,第一行为城市ID,第一列为城市ID
distance_df = pd.read_excel('规整化的283地级市的欧氏距离(带标题).xlsx', index_col=0, header=0)

# 计算di值
dii_values = (2/3) * (data_df['area'] / np.pi)**0.5

# 初始化市场潜能DataFrame,使用城市ID作为索引
market_potential_df = pd.DataFrame(index=data_df['id'].unique(), columns=data_df['year'].unique())

# 计算市场潜能
for year in market_potential_df.columns:
    for city_id in market_potential_df.index:
        # 找到当前城市和年份对应的GDP
        city_data = data_df[(data_df['id'] == city_id) & (data_df['year'] == year)]
        if city_data.empty:
            continue  # 如果没有找到数据,跳过这个城市和年份
        Y_i = city_data['gdp'].values[0]
        dii = dii_values[city_id]
        MP_i = Y_i / dii if not np.isnan(Y_i) else 0
        for other_city_id in distance_df.index:
            if city_id != other_city_id:
                # 找到其他城市和年份对应的GDP
                other_city_data = data_df[(data_df['id'] == other_city_id) & (data_df['year'] == year)]
                if other_city_data.empty:
                    continue  # 如果没有找到数据,跳过这个城市
                Y_j = other_city_data['gdp'].values[0]
                d_ij = distance_df.loc[city_id, other_city_id]
                MP_i += Y_j / d_ij if not np.isnan(Y_j) else 0
        market_potential_df.loc[city_id, year] = MP_i

# 读取Excel文件到DataFrame
market_potential_df = pd.read_excel('市场潜能结果.xlsx')

# 确保ID列是DataFrame的索引
market_potential_df.set_index('id', inplace=True)

# 筛选石家庄市的数据,城市ID为3
shijiazhuang_id = 3  # 石家庄市的城市ID
shijiazhuang_potential = market_potential_df.loc[shijiazhuang_id, (market_potential_df.columns >= 2003) & (market_potential_df.columns <= 2015)]

# 确保年份是数值类型
shijiazhuang_potential.index = pd.to_numeric(shijiazhuang_potential.index, errors='coerce')

# 绘制散点图
plt.figure(figsize=(10, 6))
plt.scatter(shijiazhuang_potential.index, shijiazhuang_potential.values, color='blue')
plt.title('石家庄2003-2015年城市潜力散点图')
plt.xlabel('年份')
plt.ylabel('城市潜力')
plt.grid(True)
plt.show()

​​​​​​

相关推荐
倒流时光三十年16 分钟前
第三阶段 26 · highlight 高亮(返回命中片段)
后端·python·django
久久学姐2 小时前
Python+Playwright+Pytest+BDD,用FSM打造高效测试框架
python·pytest·bdd·playwright·fsm
Zane19942 小时前
闭包到底"闭"住了什么?一文讲透 LEGB 规则与循环里的闭包陷阱
后端·python
Lumi_Peak3 小时前
Claude思考了42秒,我的代码质量直接提升了一个档次
python·claude
m沐沐3 小时前
【机器学习】DBSCAN聚类算法——原理、参数调优与实战
人工智能·python·深度学习·算法·机器学习·聚类·dbscan
梅孔立3 小时前
推荐一个 Python 开源项目:AI 模板填充 + Markdown 转 Word,面向 Aspose 模板引擎的效率神器
人工智能·python·开源
码农小韩4 小时前
AIAgent应用开发——大模型理论基础与应用(七)
python·学习·ai·大模型·agent
CodeLinghu4 小时前
LangSmith Evaluate实战评估Agent
人工智能·python·语言模型·llm
起司喵喵4 小时前
推荐一款基于 Python 和 Rust 开发的跨平台 GUI 自动化库!
python·rust·自动化
过期的秋刀鱼!4 小时前
学习曲线-过拟合和欠拟合要做什么以及原因
人工智能·python·深度学习·算法·机器学习·模型评估