中國城市資本流動問題探索
資料來源:
資料:全國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 frombokeh.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個城市
→ “北上深”越來越強大的資本力量,正在逐步地穿透中國經濟的底層——三四線城市