python數(shù)據(jù)分析之單因素分析線性擬合及地理編碼
更新時間:2022年06月24日 17:02:05 作者:不再依然07
這篇文章主要介紹了python數(shù)據(jù)分析之單因素分析線性擬合及地理編碼,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
一、單因素分析線性擬合
- 功能:線性擬合,單因素分析,對散點圖進行線性擬合,并放大散點圖的局部位置
- 輸入:某個xlsx文件,包含'患者密度(人/10萬人)'和'人口密度(人/平方千米)'兩列
- 輸出:對這兩列數(shù)據(jù)進行線性擬合,繪制散點
實現(xiàn)代碼:
import pandas as pd from pylab import mpl from scipy import optimize import numpy as np import matplotlib.pyplot as plt def f_1(x, A, B): ? ? return A*x + B def draw_cure(file): ? ? data1=pd.read_excel(file) ? ? data1=pd.DataFrame(data1) ? ? hz=list(data1['患者密度(人/10萬人)']) ? ? rk=list(data1['人口密度(人/平方千米)']) ? ? hz_gy=[] ? ? rk_gy=[] ? ? for i in hz: ? ? ? ? hz_gy.append((i-min(hz))/(max(hz)-min(hz))) ? ? for i in rk: ? ? ? ? rk_gy.append((i-min(rk))/(max(rk)-min(rk))) ? ? n=['玄武區(qū)','秦淮區(qū)','建鄴區(qū)','鼓樓區(qū)','浦口區(qū)','棲霞區(qū)','雨花臺區(qū)','江寧區(qū)','六合區(qū)','溧水區(qū)','高淳區(qū)', ? ? ? ?'錫山區(qū)','惠山區(qū)','濱湖區(qū)','梁溪區(qū)','新吳區(qū)','江陰市','宜興市', ? ? ? ?'鼓樓區(qū)','云龍區(qū)','賈汪區(qū)','泉山區(qū)','銅山區(qū)','豐縣','沛縣','睢寧縣','新沂市','邳州市', ? ? ? ?'天寧區(qū)','鐘樓區(qū)','新北區(qū)','武進區(qū)','金壇區(qū)','溧陽市', ? ? ? ?'虎丘區(qū)','吳中區(qū)','相城區(qū)','姑蘇區(qū)','吳江區(qū)','常熟市','張家港市','昆山市','太倉市', ? ? ? ?'崇川區(qū)','港閘區(qū)','通州區(qū)','如東縣','啟東市','如皋市','海門市','海安市', ? ? ? ?'連云區(qū)','海州區(qū)','贛榆區(qū)','東??h','灌云縣','灌南縣', ? ? ? ?'淮安區(qū)','淮陰區(qū)','清江浦區(qū)','洪澤區(qū)','漣水縣','盱眙縣','金湖縣', ? ? ? ?'亭湖區(qū)','鹽都區(qū)','大豐區(qū)','響水縣','濱海縣','阜寧縣','射陽縣','建湖縣','東臺市', ? ? ? ?'廣陵區(qū)','邗江區(qū)','江都區(qū)','寶應縣','儀征市','高郵市', ? ? ? ?'京口區(qū)','潤州區(qū)','丹徒區(qū)','丹陽市','揚中市','句容市', ? ? ? ?'海陵區(qū)','高港區(qū)','姜堰區(qū)','興化市','靖江市','泰興市', ? ? ? ?'宿城區(qū)','宿豫區(qū)','沭陽縣','泗陽縣','泗洪縣'] ? ? mpl.rcParams['font.sans-serif'] = ['FangSong'] ? ? plt.figure(figsize=(16,8),dpi=98) ? ? p1 = plt.subplot(121) ? ? p2 = plt.subplot(122) ? ? p1.scatter(rk_gy,hz_gy,c='r') ? ? p2.scatter(rk_gy,hz_gy,c='r') ? ? p1.axis([0.0,1.01,0.0,1.01]) ? ? p1.set_ylabel("患者密度(人/10萬人)",fontsize=13) ? ? p1.set_xlabel("人口密度(人/平方千米)",fontsize=13) ? ? p1.set_title("人口密度—患者密度相關性",fontsize=13) ? ? for i,txt in enumerate(n): ? ? ? ? p1.annotate(txt,(rk_gy[i],hz_gy[i])) ? ? A1, B1 = optimize.curve_fit(f_1, rk_gy, hz_gy)[0] ? ? x1 = np.arange(0, 1, 0.01) ? ? y1 = A1*x1 + B1 ? ? p1.plot(x1, y1, "blue",label='一次擬合直線') ? ? x2 = np.arange(0, 1, 0.01) ? ? y2 = x2 ? ? p1.plot(x2, y2,'g--',label='y=x') ? ? p1.legend(loc='upper left',fontsize=13) ? ? # # plot the box ? ? tx0 = 0;tx1 = 0.1;ty0 = 0;ty1 = 0.2 ? ? sx = [tx0,tx1,tx1,tx0,tx0] ? ? sy = [ty0,ty0,ty1,ty1,ty0] ? ? p1.plot(sx,sy,"purple") ? ? p2.axis([0,0.1,0,0.2]) ? ? p2.set_ylabel("患者密度(人/10萬人)",fontsize=13) ? ? p2.set_xlabel("人口密度(人/平方千米)",fontsize=13) ? ? p2.set_title("人口密度—患者密度相關性",fontsize=13) ? ? for i,txt in enumerate(n): ? ? ? ? p2.annotate(txt,(rk_gy[i],hz_gy[i])) ? ? p2.plot(x1, y1, "blue",label='一次擬合直線') ? ? p2.plot(x2, y2,'g--',label='y=x') ? ? p2.legend(loc='upper left',fontsize=13) ? ? plt.show() if __name__ == '__main__': ? ? draw_cure("F:\醫(yī)學大數(shù)據(jù)課題\論文終稿修改\scientific report\返修\市區(qū)縣相關分析 _2231.xls")
實現(xiàn)效果:
二、實現(xiàn)地理編碼
- 輸入:中文地址信息,例如安徽為縣天城鎮(zhèn)都督村沖里18號
- 輸出:經(jīng)緯度坐標,例如107.34799754989581 30.50483335424108
- 功能:根據(jù)中文地址信息獲取經(jīng)緯度坐標
實現(xiàn)代碼:
import json from urllib.request import urlopen,quote import xlrd def readXLS(XLS_FILE,sheet0): ? ? rb= xlrd.open_workbook(XLS_FILE) ? ? rs= rb.sheets()[sheet0] ? ? return rs def getlnglat(adress): ? ? url = 'http://api.map.baidu.com/geocoding/v3/?address=' ? ? output = 'json' ? ? ak = 'fdi11GHN3GYVQdzVnUPuLSScYBVxYDFK' ? ? add = quote(adress)#使用quote進行編碼 為了防止中文亂碼 ? ? # add=adress ? ? url2 = url + add + '&output=' + output + '&ak=' + ak ? ? req = urlopen(url2) ? ? res = req.read().decode() ? ? temp = json.loads(res) ? ? return temp def getlatlon(sd_rs): ? ? nrows_sd_rs=sd_rs.nrows ? ? for i in range(4,nrows_sd_rs): ? ? # for i in range(4, 7): ? ? ? ? row=sd_rs.row_values(i) ? ? ? ? print(i,i/nrows_sd_rs) ? ? ? ? b = (row[11]+row[12]+row[9]).replace('#','號') # 第三列的地址 ? ? ? ? print(b) ? ? ? ? try: ? ? ? ? ? ? lng = getlnglat(b)['result']['location']['lng'] ?# 獲取經(jīng)度并寫入 ? ? ? ? ? ? lat = getlnglat(b)['result']['location']['lat'] ?#獲取緯度并寫入 ? ? ? ? except KeyError as e: ? ? ? ? ? ? lng='' ? ? ? ? ? ? lat='' ? ? ? ? ? ? f_err=open('f_err.txt','a') ? ? ? ? ? ? f_err.write(str(i)+'\t') ? ? ? ? ? ? f_err.close() ? ? ? ? ? ? print(e) ? ? ? ? print(lng,lat) ? ? ? ? f_latlon = open('f_latlon.txt', 'a') ? ? ? ? f_latlon.write(row[0]+'\t'+b+'\t'+str(lng)+'\t'+str(lat)+'\n') ? ? ? ? f_latlon.close() if __name__=='__main__': ? ? # sle_xls_file = 'F:\醫(yī)學大數(shù)據(jù)課題\江蘇省SLE數(shù)據(jù)庫(兩次隨訪合并).xlsx' ? ? sle_xls_file = "F:\醫(yī)學大數(shù)據(jù)課題\數(shù)據(jù)副本\江蘇省SLE數(shù)據(jù)庫(兩次隨訪合并) - 副本.xlsx" ? ? sle_data_rs = readXLS(sle_xls_file, 1) ? ? getlatlon(sle_data_rs)
結果展示:
到此這篇關于python數(shù)據(jù)分析之單因素分析線性擬合及地理編碼的文章就介紹到這了,更多相關python數(shù)據(jù)分析內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
python使用paramiko實現(xiàn)ssh的功能詳解
這篇文章主要介紹了python使用paramiko實現(xiàn)ssh的功能詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-03-03詳解Python中import模塊導入的實現(xiàn)原理
這篇文章主要給大家介紹了Python中import模塊導入的實現(xiàn)原理,主要從什么是模塊,import搜索路徑以及導入原理這三個方面給大家介紹,感興趣的小伙伴跟著小編一起來看看吧2023-08-08