1. 程式人生 > >中國城市資本流動問題探索

中國城市資本流動問題探索

 

資料來源:

資料:全國2013-2016所有企業間的投融資資訊資料

1、檢視全國城際控股型投資關係

要求:
① 通過“data.xlsx”匯出csv後,直接通過gephi看全國投資情況,有什麼發現?
② 分別篩選出“同城投資”、“跨城投資”的TOP20,比較一下兩類投資的資料分佈
** 按照2013-2016年的彙總資料來計算
** 分開比較2013-2016四個年度的資料
** 需要繪製柱狀圖來輔助分析,這裡用matplotlib即可
提示:
① 原始資料中,同一年中的投資資料會重複記錄,所以需要將資料以'投資方所在城市','融資方所在城市','年份'這三個欄位做一個分組彙總
② 用df.plot(kind = 'bar')來繪製圖表,這裡index為城市名即可

 

 

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
% matplotlib inline

import warnings
warnings.filterwarnings('ignore') 
# 不發出警告

from bokeh.io import output_notebook
output_notebook()
# 匯入notebook繪圖模組

from bokeh.plotting import figure,show
from
bokeh.models import ColumnDataSource,HoverTool # 匯入圖表繪製、圖示展示模組 # 匯入ColumnDataSource模組

 

# 資料讀取,篩選出“同城投資”、“跨城投資”資料

df = pd.read_excel('C:/Users/Hjx/Desktop/專案12中國城市資本流動問題探索/data.xlsx')
# 資料讀取

df = df.groupby(['投資方所在城市','融資方所在城市','年份']).sum().reset_index()
# 彙總資料

data_tc = df[df['
投資方所在城市'] == df['融資方所在城市']] data_tc = data_tc.sort_values(by = '投資企業對數',ascending = False).reset_index() del data_tc['index'] # 篩選出“同城投資”資料 data_kc = df[df['投資方所在城市'] != df['融資方所在城市']] data_kc = data_kc.sort_values(by = '投資企業對數',ascending = False).reset_index() del data_kc['index'] # 篩選出“跨城投資”資料

 

# 比較一下“同城投資”、“跨城投資”TOP20的資料分佈
# 按照2013-2017年的彙總資料來計算,比較

tc_sum = data_tc.groupby(['投資方所在城市','融資方所在城市']).sum().sort_values(by = '投資企業對數',ascending = False)
del tc_sum['年份']
# 彙總“同城投資”資料

kc_sum = data_kc.groupby(['投資方所在城市','融資方所在城市']).sum().sort_values(by = '投資企業對數',ascending = False)
del kc_sum['年份']
# 彙總“跨城投資”資料
# 檢視“同城投資”
tc_sum.iloc[:20]
# 檢視“跨城投資”
kc_sum.iloc[:20]

 

tc_sum.iloc[:20].plot(kind = 'bar',grid = True, figsize = (10,4),color = 'blue',alpha = 0.7)
kc_sum.iloc[:20].plot(kind = 'bar',grid = True, figsize = (10,4),color = 'green',alpha = 0.7)

 結論1
① 從2013-2016的彙總資料來看,投資比數“同城投資”>“跨城投資”
② “同城投資”中領頭的城市為北上廣深及部分二線強城市,其中 深圳>北京>上海>>其他城市
③ “跨城投資”中領頭的城市仍為北上廣深(相互投資),或者北上廣深向周邊城市投資(城市群)

 

# 比較一下“同城投資”、“跨城投資”TOP20的資料分佈
# 分開比較2013-2016四個年度的資料

def f1(year):
    tc_year = data_tc[data_tc['年份'] == year].sort_values(by = '投資企業對數',ascending = False)
    kc_year = data_kc[data_kc['年份'] == year].sort_values(by = '投資企業對數',ascending = False)
    tc_year.index = tc_year['投資方所在城市']
    kc_year.index = kc_year['投資方所在城市'] + '-' + kc_year['融資方所在城市']
    # 篩選該年的“同城投資”、“跨城投資”
    #print('%i年同城投資TOP20:' % year)
    #print(tc_year.iloc[:20])
    #print('-----')
    #print('%i年跨城投資TOP20:' % year)
    #print(kc_year.iloc[:20])
    #print('-----')
    return(tc_year.iloc[:20],kc_year.iloc[:20])
    # 輸出該年“同城投資”、“跨城投資”TOP20 
# 建立函式

 

# 繪製圖表

fig,axes = plt.subplots(4,2,figsize=(12,15))
plt.subplots_adjust(wspace = 0.1,hspace=0.5)
f1(2013)[0]['投資企業對數'].plot(kind = 'bar',grid = True, color = 'blue',alpha = 0.7,ax = axes[0,0],title = '同城投資 - 2013年',ylim = [0,40000])
f1(2013)[1]['投資企業對數'].plot(kind = 'bar',grid = True, color = 'green',alpha = 0.7,ax = axes[0,1],title = '跨城投資 - 2013年',ylim = [0,3000])
# 2013年
f1(2014)[0]['投資企業對數'].plot(kind = 'bar',grid = True, color = 'blue',alpha = 0.7,ax = axes[1,0],title = '同城投資 - 2014年',ylim = [0,40000])
f1(2014)[1]['投資企業對數'].plot(kind = 'bar',grid = True, color = 'green',alpha = 0.7,ax = axes[1,1],title = '跨城投資 - 2014年',ylim = [0,3000])
# 2014年
f1(2015)[0]['投資企業對數'].plot(kind = 'bar',grid = True, color = 'blue',alpha = 0.7,ax = axes[2,0],title = '同城投資 - 2015年',ylim = [0,40000])
f1(2015)[1]['投資企業對數'].plot(kind = 'bar',grid = True, color = 'green',alpha = 0.7,ax = axes[2,1],title = '跨城投資 - 2015年',ylim = [0,3000])
# 2015年
f1(2016)[0]['投資企業對數'].plot(kind = 'bar',grid = True, color = 'blue',alpha = 0.7,ax = axes[3,0],title = '同城投資 - 2016年',ylim = [0,40000])
f1(2016)[1]['投資企業對數'].plot(kind = 'bar',grid = True, color = 'green',alpha = 0.7,ax = axes[3,1],title = '跨城投資 - 2016年',ylim = [0,3000])
# 2016年

 

 

 

結論2
 ① 分開2013-2016年來看,每年“同城投資”、“跨城投資”均呈上升趨勢
 ② “同城投資”中,頭部城市仍為北上深(沒有廣州),且隨著時間推移,越來越拉開和其他城市的“同城投資”差距(注意這個結論)
③ “跨城投資”中,投資關係較強的城市為“北京-上海” > “北京-深圳” > “上海-深圳” → 一線城市之間投資力度較大

 ** 接下來詳細挖掘一下“全國跨城市資本流動情況”

 

 

2、2013-2016年全國跨城市資本流動情況

要求:
① 結合“中國城市程式碼對照表.xlsx”資料,給2013-2016年“跨城投資”的彙總資料新增城市的經緯度
② 通過2013-2016年“跨城投資”的彙總資料,在gephi中繪製“城市關係圖”
** 這裡gephi中“點標籤”只顯示投資筆數TOP20的城市
③ 通過2013-2016年“跨城投資”的彙總資料,在echarts中繪製“全國跨城市資本流動OD圖”
** 這裡通過qgis的外掛,做點轉線
** 通過echart製作最後的資本
** 這裡line的value為投資筆數
提示:
① gephi製圖所需要匯出的csv參考課程資料裡的模板:邊檔案 → edge_model.csv;點檔案 → node_model.csv(主要注意列名)
** 其中邊資料的value需要做標準化處理 → 0-1之間
** gephi中單獨顯示某些城市的點標籤方法 → 匯入資料後,設定label,然後用label來顯示標籤,其中label只標註top20的資料
② qgis中需要安裝外掛“LinePlotter”來轉線
③ shapefile轉geojson時:注意shapefile保持wgs84地理座標系

 

# 讀取“中國城市程式碼對照表.xlsx”資料及重新設定kc_sum資料的index

city = pd.read_excel(r'E:\Python資料分析\專案\12資本\中國城市程式碼對照表.xlsx')
kc_sum.reset_index(inplace = True) 

 

 

# 結合“中國行政程式碼對照表.xlsx”資料,給2013-2016年“跨城投資”的彙總資料新增城市的經緯度

kc_data = pd.merge(kc_sum,city[['城市名稱','經度','緯度']],left_on ='投資方所在城市',right_on = '城市名稱')
kc_data = pd.merge(kc_data,city[['城市名稱','經度','緯度']],left_on ='融資方所在城市',right_on = '城市名稱')
kc_data = kc_data[['投資方所在城市','融資方所在城市','投資企業對數','經度_x','緯度_x','經度_y','緯度_y']] 
kc_data.columns = ['投資方所在城市','融資方所在城市','投資企業對數','lng_tz','lat_tz','lng_rz','lat_rz']
kc_data.head()

# 匯出gephi製圖資料

gephi_edge = kc_data[['投資方所在城市','融資方所在城市','投資企業對數']]
gephi_edge.columns = ['source','target','weight']
gephi_edge['weight'] = (gephi_edge['weight'] - gephi_edge['weight'].min())/(gephi_edge['weight'].max() - gephi_edge['weight'].min())
gephi_edge.to_csv('C:/Users/Hjx/Desktop/gephi_edge.csv',index = False)
# 匯出邊資料

citys = list(set(gephi_edge['source'].tolist()+gephi_edge['target'].tolist()))
gephi_nodes = pd.DataFrame({'Id':citys})  
# 篩選出所有的城市節點,並生成dataframe
top_node = gephi_edge.sort_values(by = 'weight',ascending = False)
top_node20 = top_node['source'].drop_duplicates().iloc[:20]
top_node20_df = pd.DataFrame({'Id':top_node20, 'Label':top_node20})
# 篩選出投資對數較大,且不重複的前20個城市,並生成dataframe
gephi_nodes = pd.merge(gephi_nodes,top_node20_df,on = 'Id',how = 'left')
# 合併,給點資料增加label欄位
gephi_nodes.to_csv('C:/Users/Hjx/Desktop/gephi_nodes.csv',index = False)
# 匯出點資料

print('finished!')

 

# 匯出qgis製圖資料

kc_data.to_csv('C:/Users/Hjx/Desktop/qgisdata.csv',index = False)
print('finished!')

結論3 
① 通過“全國跨城市資本流動OD圖”可以明顯看到
 ** 三個亮點密集的區域:長三角城市群、珠三角城市群、北京-天津城市群
 ** 這三個城市群與成都-重慶西部城市群構成了一個鑽石形狀
 ** 在鑽石之外,僅有星星點點的東北和西部的幾個亮點遊離;
 ** 而這顆大鑽石內的資本流動,佔據了全國資本流動的90%以上!!
② 通過“城市關係圖”可以發現:
 ** 城際投資的全國城市拓撲關係 → 以“北上深”為中心的城市網路

 

3、深挖跨城市資本流動:錢從哪裡來,到哪裡去?

要求:
① 近四年對外控股型投資筆數最多的10個城市是哪些?
② 近四年吸引對外控股型投資筆數最多的10個城市又是哪些?
③ 從2013年到2016年,資本流動兩大陣營的變化趨勢:“北上深陣營”、“本地化陣營”
** “北上深陣營”:最大的外來投資方為北上深之一的城市
** “本地化陣營”:這裡簡化計算,將非“北上深陣營”都劃入“本地化陣營”
** 該問題從“北上深陣營”歷年來城市數量佔比來看
** 可以qgis輔助繪製城市空間分佈
提示:
① 資本流動兩大陣營在計算中,主要以“融資方所在城市”為物件研究
② 資本流動兩大陣營變化趨勢計算中,可以構建函式,以年份為引數
③ 如何得到某年融資城市對應的最大的外來投資城市?
** 首先按照“融資方所在城市”做groupby分組,計算“投資企業對數”的max,得到一個Series
** Series通過reset_index轉化為dataframe
** 再通過和源資料merge,找到該融資城市的最大外來投資對應的“投資方城市”,這裡merge中的引數 on = ['融資方所在城市','投資企業對數']
④ 為了在qgis中製圖,需要給資料新增經緯度資訊,這裡只需要新增“融資方所在城市”的經緯度
⑤ 為了qgis更好識別陣營型別,資料“陣營”欄位用數字表示:0代表“本地化陣營”,1代表“北上深陣營”
⑥ qgis中製圖時,既不屬於“本地化陣營”又不屬於“北上深陣營”的城市,顏色填充和“本地化陣營”一樣即可

 

# 近四年對外控股型投資筆數最多的10個城市是哪些?

result1 = kc_sum[['投資方所在城市','投資企業對數']].groupby('投資方所在城市').sum().sort_values(by = '投資企業對數',ascending = False).iloc[:10]
result1
# 近四年吸引對外控股型投資筆數最多的10個城市又是哪些?

result2 = kc_sum[['融資方所在城市','投資企業對數']].groupby('融資方所在城市').sum().sort_values(by = '投資企業對數',ascending = False).iloc[:10]
result2

 

result1.plot(kind = 'bar',grid = True, figsize = (10,4),color = 'red',alpha = 0.7, rot = 0)
result2.plot(kind = 'bar',grid = True, figsize = (10,4),color = 'black',alpha = 0.7, rot = 0)

結論4
① 通過“對外控股型投資筆數-城市排名TOP10”可以看出
 ** 北京、上海、深圳毫無懸念地包攬了前三名,且在量級上遠遠超過了其他城市 → 北上深在一定程度上控制著全國的資金流向和經濟命脈
 ** 杭州 → 第四名,表現最為亮眼的省會城市,崛起的新一線城市
** 廣州 → 第五名,江湖人稱“北上廣”三兄弟的廣州,在對外投資的控制力上已經與另兩位兄弟漸行漸遠了
 ** 前10名中有5名都是長三角區域的城市,可以看到長三角地區資本的活躍程度
② 通過“吸引對外控股型投資筆數-城市排名TOP10”可以看出
 ** 吸引外來控股型投資筆數最多的前三名的仍然是北上深
** 在外來資本流入城市的榜單中,嘉興擠掉了南京,進入前十名 → 相比資本對外輸出,嘉興是一個更受資本青睞的城

 

# 從2013年到2016年,資本流動兩大陣營的變化趨勢:“北上深陣營”、“本地化陣營”
# ** “北上深陣營”:最大的外來投資方為北上深之一的城市
# ** “本地化陣營”:這裡簡化計算,將非“北上深陣營”都劃入“本地化陣營”

def f2(year):
    kc_datai = data_kc[data_kc['年份']==year]
    x = kc_datai[['融資方所在城市','投資企業對數']].groupby('融資方所在城市').max().reset_index()
    city_tz_max = pd.merge(kc_datai,x,on = ['融資方所在城市','投資企業對數'],how = 'right')
    # 資料整理 → 得到融資城市的最大外來投資對應的“投資方城市”
    city_tz_max['陣營'] = 0
    city_tz_max['陣營'][(city_tz_max['投資方所在城市'] == '北京') |
                        (city_tz_max['投資方所在城市'] == '上海') | 
                        (city_tz_max['投資方所在城市'] == '深圳') ] = 1
    # 劃分“北上深陣營”、“本地化陣營”
    city_tz_max = pd.merge(city_tz_max,city[['城市名稱','經度','緯度']],left_on ='融資方所在城市',right_on = '城市名稱')
    city_tz_max = city_tz_max[['投資方所在城市','融資方所在城市','投資企業對數','陣營','經度','緯度']] 
    # 新增融資方所在城市經緯度
    dici = {}
    dici['北上深陣營城市資料量'] = city_tz_max['陣營'].value_counts().iloc[1]
    dici['本地化陣營城市資料量'] = city_tz_max['陣營'].value_counts().iloc[0]
    # 計算“北上深陣營”、“本地化陣營”的城市數量,並放入一個字典
    return(city_tz_max,dici)
# 建立函式

zy_year = pd.DataFrame([f2(2013)[1],f2(2014)[1],f2(2015)[1],f2(2016)[1]],index = ['2013年','2014年','2015年','2016年'])
zy_year['北上深陣營佔比'] = zy_year['北上深陣營城市資料量']/(zy_year['北上深陣營城市資料量'] + zy_year['本地化陣營城市資料量'])
zy_year[['北上深陣營城市資料量','本地化陣營城市資料量']].plot(kind='bar',grid = True,colormap='Blues_r',rot = 0,
                                                              stacked=True,figsize = (10,4),ylim = [0,400])
# 繪製堆疊圖檢視佔比變化趨勢
zy_year

# 資料匯出csv,qgis繪圖

f2(2013)[0].to_csv('C:/Users/Hjx/Desktop/year2013.csv',index = False)
f2(2014)[0].to_csv('C:/Users/Hjx/Desktop/year2014.csv',index = False)
f2(2015)[0].to_csv('C:/Users/Hjx/Desktop/year2015.csv',index = False)
f2(2016)[0].to_csv('C:/Users/Hjx/Desktop/year2016.csv',index = False)
print('finished!')

 

 

結論5 
“北上深陣營”高歌猛進,“本地化陣營”節節敗退
 ① 2013年,“北上深陣營”的地盤僅僅侷限於國內少數相對發達地區,以及各省省會城市
 ② 隨著時間的推移,“北上深陣營”的勢力範圍逐步擴大,東北和內蒙的大部分地區納入了“北上深陣營”
 ③ 越來越多的中小型城市也逐漸成為“北上深陣營”的一員
 ④ 2014年,90%的控股型城際投資去向了99個城市,而到了2017年,90%的城際投資只去向了60個城市
 → “北上深”越來越強大的資本力量,正在逐步地穿透中國經濟的底層——三四線城市