市機(jī)器人密度數(shù)據(jù)分析全攻略:從zip預(yù)檢到回歸驗(yàn)證)
簡介地級(jí)市機(jī)器人安裝密度與存量密度數(shù)據(jù)是一份面向政府機(jī)構(gòu)、企業(yè)和研究者的區(qū)域產(chǎn)業(yè)分析資料旨在量化機(jī)器人在地級(jí)市的普及程度與歷史積累為地方產(chǎn)業(yè)升級(jí)、技術(shù)引進(jìn)和投資決策提供數(shù)據(jù)支撐。壓縮包共4個(gè)文件以xlsx數(shù)據(jù)表格為核心輔以txt使用說明、html數(shù)據(jù)來源索引和pdf導(dǎo)讀材料整體大小僅1.28MB便于下載后快速檢索和分析。目前已有154人學(xué)習(xí)下載。通過其中的安裝密度與存量密度指標(biāo)可對比各主要地級(jí)市的自動(dòng)化水平識(shí)別高滲透區(qū)域和潛在增長點(diǎn)也可服務(wù)于機(jī)器人制造企業(yè)的市場布局、教育機(jī)構(gòu)課程規(guī)劃以及研究機(jī)構(gòu)的區(qū)域比較分析。進(jìn)一步地這些數(shù)據(jù)還能為地方政府的政策扶持、高校專業(yè)設(shè)置和企業(yè)技術(shù)引進(jìn)提供量化依據(jù)幫助相關(guān)方更精準(zhǔn)地把握技術(shù)應(yīng)用現(xiàn)狀與演變趨勢。1. 這里有一份「地級(jí)市機(jī)器人密度」數(shù)據(jù)先看懂它再談分析手里拿到一份名為“地級(jí)市-機(jī)器人安裝密度、存量密度數(shù)據(jù).zip”的壓縮包做產(chǎn)業(yè)分析的人第一反應(yīng)通常是這能用來干什么直白地說這份數(shù)據(jù)解決的是“機(jī)器人產(chǎn)業(yè)在地級(jí)市層面到底長什么樣”的問題。它把抽象的產(chǎn)業(yè)熱度拆成兩個(gè)可量化、可比對的指標(biāo)——安裝密度和存量密度讓分析人員不用去翻各省統(tǒng)計(jì)年鑒、不用去爬企業(yè)名錄就能快速建立一張全國地級(jí)市的機(jī)器人滲透率地圖。適合三類人一是做產(chǎn)業(yè)園區(qū)規(guī)劃和招商的政府側(cè)人員二是機(jī)器人廠商和核心零部件企業(yè)的市場戰(zhàn)略部門三是看硬科技賽道的投資機(jī)構(gòu)分析師。不過先提醒一句這類 zip 數(shù)據(jù)很少是“打開就能用”的字段口徑、行政區(qū)劃變更、缺失值處理都是繞不開的關(guān)這篇文章把這些事一次講透。2. 拆解這份地級(jí)市機(jī)器人密度 zip數(shù)據(jù)分級(jí)、口徑與關(guān)鍵字段2.1 先別急著 unzip先做這三步預(yù)檢拿到 zip 之后我見過太多人直接雙擊解壓、打開 CSV 就開始畫圖結(jié)果做到一半發(fā)現(xiàn)城市名對不上、密度值忽大忽小回頭查數(shù)據(jù)口徑才發(fā)現(xiàn)是“累計(jì)值除以當(dāng)年人口”和“當(dāng)年新增值除以當(dāng)年人口”混在一起。所以第一步永遠(yuǎn)是預(yù)檢。預(yù)檢分三步都不復(fù)雜但能省掉后面幾小時(shí)的返工。第一步看 zip 內(nèi)部文件清單確認(rèn)是一張總表還是按年份拆分第二步用文本編輯器或者less、head命令直接看原始文件的編碼和前 20 行重點(diǎn)確認(rèn)分隔符、表頭行數(shù)、以及是否存在 BOM第三步檢查文件命名里是否包含“修訂”“V2”“最終版”這類字樣——如果有說明這份數(shù)據(jù)可能出過口徑修正最好把同目錄下的說明文檔一起找出來。# 第一步列出 zip 內(nèi)部文件清單不解壓 unzip -l 地級(jí)市-機(jī)器人安裝密度、存量密度數(shù)據(jù).zip # 第二步查看前 15 行原始內(nèi)容確認(rèn)編碼和分隔符 unzip -p 地級(jí)市-機(jī)器人安裝密度、存量密度數(shù)據(jù).zip *.csv | head -15 # 第三步檢查是否存在同名但帶修訂字樣的文件 unzip -l 地級(jí)市-機(jī)器人安裝密度、存量密度數(shù)據(jù).zip | grep -E 修訂|V2|最終參數(shù)說明unzip -l只列清單不解壓適合快速摸清家底u(yù)nzip -p把文件內(nèi)容直接打到標(biāo)準(zhǔn)輸出配合head -15可以不改動(dòng)磁盤的情況下快速看格式。第三步的grep -E用的正則把常見修訂標(biāo)記一次性篩出來如果沒有輸出就說明命名上沒做區(qū)分后面的口徑核驗(yàn)就要更仔細(xì)。很多人忽略編碼問題——這類數(shù)據(jù)經(jīng)常是 GBK 編碼直接用 pandas 讀會(huì)出現(xiàn)亂碼預(yù)檢時(shí)如果能用file命令看到編碼信息是最好的。2.2 安裝密度與存量密度兩個(gè)口徑兩種讀法這是整份數(shù)據(jù)最核心的分辨點(diǎn)。安裝密度和存量密度看起來只是“當(dāng)年新增”與“累計(jì)保有”的區(qū)別但實(shí)際使用場景完全不同。安裝密度衡量的是“當(dāng)下這個(gè)城市正在發(fā)生什么”適合觀察產(chǎn)業(yè)熱度的邊際變化比如某個(gè)城市今年安裝密度突然翻倍說明有頭部廠商擴(kuò)產(chǎn)或新項(xiàng)目落地。存量密度衡量的是“這個(gè)城市已經(jīng)積累了什么”適合判斷產(chǎn)業(yè)基礎(chǔ)比如一個(gè)城市存量密度很高但安裝密度連續(xù)三年下滑說明市場已經(jīng)趨向飽和增量機(jī)會(huì)有限。常見的表格結(jié)構(gòu)通常是這樣的字段名常見變體含義說明典型口徑城市 / 地級(jí)市名稱地級(jí)行政區(qū)名稱需注意“市轄區(qū)”“縣級(jí)市”是否混入年份統(tǒng)計(jì)對應(yīng)年份注意是自然年還是財(cái)年robots_installed / 當(dāng)年安裝量該年新安裝機(jī)器人臺(tái)數(shù)不包括二手機(jī)器人轉(zhuǎn)售robots_stock / 年末存量該年末在用機(jī)器人臺(tái)數(shù)含往年安裝仍在用的不含已報(bào)廢常住人口 / 年末人口計(jì)算密度時(shí)的分母是否采用第七次人口普查修正值機(jī)器人安裝密度 / density_new安裝量 / 常住人口通常單位是臺(tái)/萬人或臺(tái)/十萬人口機(jī)器人存量密度 / density_stock存量 / 常住人口同上2.3 用 pandas 做第一條預(yù)覽流水線加載、去空格、按地級(jí)市聚合預(yù)檢通過后就可以正式把數(shù)據(jù)加載進(jìn)分析環(huán)境。這里我建議寫一份固定的“啟動(dòng)腳本”而不是每次用交互式環(huán)境一行一行敲。啟動(dòng)腳本做的事情是把 CSV 讀進(jìn)來、處理編碼和空格、打印基本統(tǒng)計(jì)量、然后把地級(jí)市和年份的雙重索引確認(rèn)一遍。import pandas as pd # 關(guān)鍵參數(shù)讀入時(shí)指定編碼sep 用默認(rèn)逗號(hào) df pd.read_csv( 地級(jí)市-機(jī)器人安裝密度、存量密度數(shù)據(jù).csv, encodinggbk, # 這類數(shù)據(jù) mdash 用 GBK enginepython, # 避免 C 引擎在混合編碼下報(bào)錯(cuò) dtype{城市: str, 年份: str} # 防止城市代碼前導(dǎo)零丟失 ) # 清洗字段名去掉不可見字符和首尾空格 df.columns [c.strip().replace(\ufeff, ) for c in df.columns] # 去除城市名稱中的空格常見臟數(shù)據(jù) df[城市] df[城市].astype(str).str.replace( , ) # 只保留地級(jí)市層級(jí)剔除省直轄縣級(jí)行政單位這類特殊行 city_list df[城市].str.endswith(市) df_city df[city_list].copy() # 做一個(gè)最基本的交叉驗(yàn)證查看每個(gè)城市的年份覆蓋情況 pivot_coverage df_city.pivot_table( index城市, columns年份, values存量密度, aggfunccount ) print(pivot_coverage.head()) print(城市數(shù)量:, df_city[城市].nunique()) print(年份范圍:, df_city[年份].min(), -, df_city[年份].max())參數(shù)說明encodinggbk是這類政府?dāng)?shù)據(jù)最常見的編碼如果讀出來是亂碼可以換gb2312或utf-8逐一試enginepython在字段中混有特殊字符時(shí)更穩(wěn)缺點(diǎn)是速度慢但這份數(shù)據(jù)規(guī)模不大完全夠用。str.endswith(市)這個(gè)過濾條件很實(shí)用能把“北京市”“蘇州市”正常保留同時(shí)剔除“省直轄縣級(jí)行政單位”“自治區(qū)直轄縣級(jí)行政單位”這類特殊條目——但這里有個(gè)坑后面會(huì)細(xì)說。3. 讓這批數(shù)據(jù)在業(yè)務(wù)里發(fā)光從城市畫像到入庫分析3.1 城市分級(jí)畫像頭部、腰部、尾部怎么劃分?jǐn)?shù)據(jù)加載干凈之后第一個(gè)值得做的分析是城市分級(jí)。不是所有城市都需要同一套招商或市場策略一份密度數(shù)據(jù)最直接的產(chǎn)出就是“把全國地級(jí)市按機(jī)器人產(chǎn)業(yè)狀態(tài)分層”。常見的分法是用存量密度排序再疊加安裝密度的增速。存量密度前 10% 的城市是頭部它們的特點(diǎn)是產(chǎn)業(yè)基礎(chǔ)厚、供應(yīng)鏈完整適合做技術(shù)升級(jí)和高端產(chǎn)品試驗(yàn)田10% 到 50% 是腰部城市增速往往最快是廠商渠道下沉的主戰(zhàn)場最后 50% 是尾部大部分處于觀望期招商策略要側(cè)重“樣板間效應(yīng)”而不是鋪量。import numpy as np # 取最近一年的數(shù)據(jù)做截面分析 latest_year df_city[年份].max() df_recent df_city[df_city[年份] latest_year].copy() # 分別計(jì)算存量密度和安裝密度的分位點(diǎn) df_recent[存量分檔] pd.qcut( df_recent[存量密度], q[0, 0.1, 0.5, 1.0], labels[尾部, 腰部, 頭部] ) df_recent[安裝增速] df_recent[安裝密度].pct_change() # 按分檔做聚合看每檔城市的平均安裝密度和城市數(shù)量 summary df_recent.groupby(存量分檔).agg( 城市數(shù)量(城市, count), 平均安裝密度(安裝密度, mean), 平均存量密度(存量密度, mean) ) print(summary.round(2))參數(shù)說明pd.qcut用的是分位數(shù)切分q[0, 0.1, 0.5, 1.0]的意思是把數(shù)據(jù)切成 0-10%、10%-50%、50%-100% 三段這樣頭部、腰部、尾部的比例分別是 10%、40%、50%——這個(gè)比例不是固定的你可以按自己業(yè)務(wù)場景調(diào)整比如想看更極端的頭部效應(yīng)就切成[0, 0.05, 0.3, 1.0]。pct_change算的是環(huán)比變化率如果這份數(shù)據(jù)是多年面板這一步能看出頭部城市是“穩(wěn)增長”還是“爆發(fā)式”。不過要注意pct_change在跨年份數(shù)據(jù)上直接這么用是有缺陷的它只能看相鄰兩行如果面板數(shù)據(jù)里有城市缺失了某一年算出來的增速就是跨年度的假增速。更好的做法是先pivot成寬表再按年差計(jì)算。3.2 增速交叉分析把存量密度和安裝密度放在一起讀存量密度告訴你“底子”安裝密度告訴你“勢頭”。兩個(gè)指標(biāo)交叉起來能畫出一個(gè)四象限高存量高安裝是成熟擴(kuò)張型高存量低安裝是存量博弈型低存量高安裝是新興突破型低存量低安裝是待開發(fā)型。這個(gè)分法和波士頓矩陣的思路一樣換成產(chǎn)業(yè)數(shù)據(jù)場景也很好用。實(shí)際操作時(shí)別直接在 Excel 里畫散點(diǎn)圖就完事應(yīng)該把每個(gè)象限的城市列表導(dǎo)出來對照當(dāng)年當(dāng)?shù)氐漠a(chǎn)業(yè)政策看是否有對應(yīng)關(guān)系。比如低存量高安裝的城市大概率匹配了新建機(jī)器人產(chǎn)業(yè)園或者頭部廠商新設(shè)基地高存量低安裝的城市則往往對應(yīng)傳統(tǒng)制造業(yè)重鎮(zhèn)在產(chǎn)業(yè)升級(jí)前的觀望期。# 用中位數(shù)做分界線劃分四象限 median_stock df_recent[存量密度].median() median_install df_recent[安裝密度].median() def assign_quadrant(row): if row[存量密度] median_stock and row[安裝密度] median_install: return 成熟擴(kuò)張 if row[存量密度] median_stock and row[安裝密度] median_install: return 存量博弈 if row[存量密度] median_stock and row[安裝密度] median_install: return 新興突破 return 待開發(fā) df_recent[象限] df_recent.apply(assign_quadrant, axis1) # 輸出每個(gè)象限的城市清單方便核對 quadrant_counts df_recent.groupby(象限)[城市].agg(list).to_dict() for quadrant, cities in quadrant_counts.items(): print(f{quadrant}: {len(cities)} 個(gè)城市) print( 舉例:, cities[:8])參數(shù)說明中位數(shù)做分界線的優(yōu)點(diǎn)是抗極端值干擾缺點(diǎn)是會(huì)把城市機(jī)械地分成數(shù)量相近的四塊難免有些“強(qiáng)行分類”的感覺。如果業(yè)務(wù)上已經(jīng)有明確的目標(biāo)城市清單可以改用自定義閾值比如“存量密度大于 100 臺(tái)/萬人算高存量”這樣分界線才有業(yè)務(wù)含義而不是純粹的統(tǒng)計(jì)切分。apply在這里逐行判斷數(shù)據(jù)量小無所謂如果后續(xù)要做全國縣域級(jí)數(shù)據(jù)分析建議用np.select向量化處理。3.3 把密度結(jié)果并入經(jīng)濟(jì)統(tǒng)計(jì)表的 JOIN 寫法分析做完之后數(shù)據(jù)大概率要落到 BI 報(bào)表或者部門共享的數(shù)據(jù)庫里。這時(shí)最常見的需求是把機(jī)器人密度數(shù)據(jù)和已有的宏觀經(jīng)濟(jì)數(shù)據(jù)表合并。這里有一個(gè)多數(shù)人都會(huì)踩的坑城市名稱格式不一致。經(jīng)濟(jì)統(tǒng)計(jì)表里寫作“蘇州”機(jī)器人數(shù)據(jù)里寫作“蘇州市”直接JOIN會(huì)丟一半數(shù)據(jù)。-- 先把機(jī)器人數(shù)據(jù)里的城市名統(tǒng)一去掉市后綴再執(zhí)行 JOIN -- 注意本條 SQL 直接可跑但建議先執(zhí)行 UPDATE 做一次清洗 UPDATE robot_density SET city_clean REPLACE(city_name, 市, ); SELECT e.city_name, e.gdp_2023, r.density_stock, r.density_install FROM econ_stats e LEFT JOIN robot_density r ON e.city_name r.city_clean WHERE e.province NOT IN (北京, 上海, 天津, 重慶);參數(shù)說明REPLACE把“蘇州市”變成“蘇州”但這里有個(gè)隱患——“北京市”會(huì)被替換成“北京”這沒問題可“江蘇省”如果混進(jìn)了城市字段也會(huì)被誤傷成“江蘇”。所以WHERE里先排除四個(gè)直轄市是必要的它們的城市名本身就是省域名稱和地級(jí)市數(shù)據(jù)結(jié)構(gòu)不同。LEFT JOIN以經(jīng)濟(jì)統(tǒng)計(jì)表為主表保證每個(gè)城市都在結(jié)果里機(jī)器人數(shù)據(jù)缺失時(shí)會(huì)顯示NULL——這個(gè)NULL本身就是信號(hào)說明該城市沒有機(jī)器人產(chǎn)業(yè)統(tǒng)計(jì)這和“密度為 0”是兩種不同的業(yè)務(wù)含義入庫時(shí)要小心區(qū)分。4. 地級(jí)市機(jī)器人密度數(shù)據(jù)的四個(gè)坑識(shí)別、排錯(cuò)與清洗以下每一條都是我在實(shí)際分析這類數(shù)據(jù)時(shí)真實(shí)遇到過的按“現(xiàn)象 → 原因 → 解決”寫清楚方便你遇到同類問題時(shí)直接對照排查。4.1 城市名一對多地級(jí)市和縣級(jí)市混在同一列現(xiàn)象拿到數(shù)據(jù)后一數(shù)城市數(shù)量發(fā)現(xiàn)多了幾十個(gè)仔細(xì)看發(fā)現(xiàn)有“昆山市”“江陰市”這類縣級(jí)市和“蘇州市”“無錫市”混在同一列。原因原始收集渠道用了企業(yè)注冊地的行政區(qū)劃名稱部分縣級(jí)市的企業(yè)數(shù)量多、產(chǎn)業(yè)占比高渠道方直接把它們單列了。解決在過濾條件里增加“是否為地級(jí)市”的輔助判斷。可以用國家的行政區(qū)劃代碼表做匹配代碼第 3-4 位為00的是地級(jí)市否則是縣級(jí)市或者區(qū)。# 用行政區(qū)劃代碼過濾取第 3-4 位判斷層級(jí) df_city[區(qū)劃代碼] df_city[區(qū)劃代碼].astype(str).str.zfill(6) # 地級(jí)市的特征第 3-4 位為 00且第 5-6 位為 00 df_prefecture df_city[ (df_city[區(qū)劃代碼].str[2:4] 00) (df_city[區(qū)劃代碼].str[4:6] 00) ] print(過濾后城市數(shù):, df_prefecture[城市].nunique())參數(shù)說明如果原始數(shù)據(jù)里沒有區(qū)劃代碼字段就只能用名稱后綴來猜——但“市”這個(gè)后綴完全沒有區(qū)分度這時(shí)建議另找一份最新的《全國地級(jí)及以上行政區(qū)劃代碼表》做LEFT JOIN寧可少匹配幾個(gè)也不能把縣級(jí)市混進(jìn)地級(jí)市的面板里否則后面的城市排名和分級(jí)全會(huì)失真。4.2 密度值突然跳變口徑從“累計(jì)”變成了“當(dāng)年新增”現(xiàn)象某個(gè)城市 2021 年的存量密度比 2020 年下降了一半檢查原始安裝量數(shù)據(jù)并沒有大幅減少。原因該城市 2021 年的數(shù)據(jù)收集口徑發(fā)生了變化此前上報(bào)的是“歷年累計(jì)引進(jìn)機(jī)器人數(shù)量”2021 年開始改用“當(dāng)年實(shí)際新增”口徑分母也可能從“年末常住人口”換成了“年均人口”。解決這類跳變沒有自動(dòng)修復(fù)的辦法只能人工核對明顯突變城市的原始值編輯成前后口徑一致的序列。操作上可以先計(jì)算每個(gè)城市的“密度環(huán)比變化率”把變化率超過 200% 或低于 50% 的城市篩出來再逐一確認(rèn)。4.3 一列里面有隱藏字符從 Excel 粘貼進(jìn) CSV 時(shí)留下的空格和 NBSP現(xiàn)象用pandas讀進(jìn)來print(df[城市].unique())發(fā)現(xiàn)“蘇州”和“蘇州 ”末尾帶一個(gè)看不見的空格是兩條記錄。原因原始文件從 Windows Excel 另存為 CSV 時(shí)或者經(jīng)過在線表格工具中轉(zhuǎn)時(shí)字符編碼和空白字符被做了手腳常見的是\xa0不間斷空格混入字段。解決在清洗階段統(tǒng)一用正則把所有空白字符替換掉包括\xa0、\t、\n和普通空格。# 清洗城市字段消除所有不可見空白 import re df_city[城市_clean] df_city[城市].apply( lambda x: re.sub(r[\s\u00a0\u3000], , str(x)) ) # 驗(yàn)證清洗效果確認(rèn)沒有重復(fù)城市名 assert df_city[城市_clean].is_unique False or len(df_city[城市_clean]) len(df_city[城市_clean].unique())參數(shù)說明\u00a0是 NBSP\u3000是中文全角空格這兩個(gè)即使你把strip()用到爛也去不掉。re.sub一次把三種全清掉。這里的assert寫法值得說明如果原始數(shù)據(jù)里確實(shí)存在同名不同區(qū)的特殊情況assert會(huì)直接報(bào)錯(cuò)這時(shí)候反而是件好事——它能逼你面對“城市名并不能唯一標(biāo)識(shí)一行”這個(gè)事實(shí)盡早決定是否要引入?yún)^(qū)劃代碼做復(fù)合主鍵。4.4 缺失值被填成了 0真“沒有”和假“沒有”混在一起現(xiàn)象某城市連續(xù)三年安裝數(shù)據(jù)都是 0但查詢當(dāng)?shù)匦侣劙l(fā)現(xiàn)該市三年前簽約了一個(gè)機(jī)器人本體項(xiàng)目。原因數(shù)據(jù)源在匯總的時(shí)候把未統(tǒng)計(jì)到的城市填了 0而不是留空或者NULL。這在產(chǎn)業(yè)數(shù)據(jù)里是特別大的隱患——0 代表“統(tǒng)計(jì)過沒有”NULL代表“沒統(tǒng)計(jì)到”兩者業(yè)務(wù)含義完全不同。解決先看數(shù)據(jù)字典或者文件說明里有沒有提“0 值處理”通常不會(huì)寫。最可靠的辦法是交叉驗(yàn)證用企業(yè)工商數(shù)據(jù)查該城市是否有機(jī)器人相關(guān)企業(yè)的存續(xù)記錄如果有說明密度為 0 很可能是缺失而不是真零。5. 進(jìn)階驗(yàn)證用回歸殘差給這批數(shù)據(jù)做質(zhì)量門禁數(shù)據(jù)清洗、入庫、初版分析做完之后很多人就急著出報(bào)告了。但我習(xí)慣在出任何結(jié)論之前做一道“質(zhì)量門禁”——用回歸殘差來檢驗(yàn)這份數(shù)據(jù)是否值得深度信任。思路是這樣的機(jī)器人的存量密度理論上和城市的制造業(yè)基礎(chǔ)用 GDP 第二產(chǎn)業(yè)增加值衡量、人口規(guī)模、以及人均收入水平強(qiáng)相關(guān)。用這些宏觀變量對存量密度做回歸觀察哪些城市的殘差特別大。如果一批公認(rèn)的制造業(yè)強(qiáng)市殘差很大且方向一致都是預(yù)測值高于實(shí)際值那說明數(shù)據(jù)里的存量密度系統(tǒng)性偏低如果只有個(gè)別城市殘差異常大概率是那個(gè)城市的數(shù)據(jù)質(zhì)量有問題。import statsmodels.api as sm # 假設(shè) df_merged 已經(jīng)把密度數(shù)據(jù)和經(jīng)濟(jì)數(shù)據(jù)合并好了 df_model df_merged.dropna(subset[存量密度, GDP, 常住人口, 第二產(chǎn)業(yè)占比]) X df_model[[GDP, 常住人口, 第二產(chǎn)業(yè)占比]] X sm.add_constant(X) # 加入截距項(xiàng) y df_model[存量密度] model sm.OLS(y, X).fit() # 計(jì)算殘差標(biāo)出絕對值最大的 10 個(gè)城市 df_model[殘差] model.resid outliers df_model.reindex(df_model[殘差].abs().sort_values(ascendingFalse).index)[:10] print(outliers[[城市, 存量密度, 殘差]])參數(shù)說明df_model要求所有用于回歸的變量都不能有空值所以先dropna。sm.add_constant必不可少——如果不加截距項(xiàng)模型會(huì)強(qiáng)制過原點(diǎn)R2的參考價(jià)值會(huì)失真。殘差絕對值大的城市不一定是數(shù)據(jù)錯(cuò)了也可能是出現(xiàn)了真正的爆發(fā)型增長比如特斯拉超級(jí)工廠所在的城市機(jī)器人存量密度會(huì)顯著高于同等 GDP 水平的城市。所以這一道門禁的目的不是“刪掉異常值”而是“圈出需要人工復(fù)核的名單”把人工核對的精力用在最可疑的幾十個(gè)城市上而不是對三百個(gè)城市逐一翻年鑒。如果回歸殘差整體偏高比如超過 60% 城市的殘差超過均值的兩倍說明你手里的這份密度數(shù)據(jù)和宏觀基本面嚴(yán)重脫節(jié)——這時(shí)候就別急著出報(bào)告了回頭重新核對口徑大概率是存量密度的單位搞錯(cuò)了或者部分城市的存量數(shù)據(jù)根本不是同一年份。以上這套流程從預(yù)檢、字段口徑拆解、清洗、入庫到回歸驗(yàn)證走下來一份地級(jí)市機(jī)器人密度數(shù)據(jù)能挖出的價(jià)值遠(yuǎn)超“畫一張分布圖”的層次。我個(gè)人的血淚經(jīng)驗(yàn)是拿到這類 zip 數(shù)據(jù)的第一天花兩小時(shí)把編碼、空格、口徑、缺失值四件事全部理清后面分析能省一周的返工時(shí)間?,F(xiàn)在這份數(shù)據(jù)具體是不是值得投入深度分析你可以先跑一遍文里的預(yù)檢腳本看看城市覆蓋率和年份連續(xù)性結(jié)果再?zèng)Q定。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取