python數(shù)據(jù)分析之單因素分析線性擬合及地理編碼
一、單因素分析線性擬合
- 功能:線性擬合,單因素分析,對(duì)散點(diǎn)圖進(jìn)行線性擬合,并放大散點(diǎn)圖的局部位置
- 輸入:某個(gè)xlsx文件,包含'患者密度(人/10萬(wàn)人)'和'人口密度(人/平方千米)'兩列
- 輸出:對(duì)這兩列數(shù)據(jù)進(jìn)行線性擬合,繪制散點(diǎn)
實(shí)現(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萬(wàn)人)']) ? ? 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ū)','雨花臺(tái)區(qū)','江寧區(qū)','六合區(qū)','溧水區(qū)','高淳區(qū)', ? ? ? ?'錫山區(qū)','惠山區(qū)','濱湖區(qū)','梁溪區(qū)','新吳區(qū)','江陰市','宜興市', ? ? ? ?'鼓樓區(qū)','云龍區(qū)','賈汪區(qū)','泉山區(qū)','銅山區(qū)','豐縣','沛縣','睢寧縣','新沂市','邳州市', ? ? ? ?'天寧區(qū)','鐘樓區(qū)','新北區(qū)','武進(jìn)區(qū)','金壇區(qū)','溧陽(yáng)市', ? ? ? ?'虎丘區(qū)','吳中區(qū)','相城區(qū)','姑蘇區(qū)','吳江區(qū)','常熟市','張家港市','昆山市','太倉(cāng)市', ? ? ? ?'崇川區(qū)','港閘區(qū)','通州區(qū)','如東縣','啟東市','如皋市','海門市','海安市', ? ? ? ?'連云區(qū)','海州區(qū)','贛榆區(qū)','東海縣','灌云縣','灌南縣', ? ? ? ?'淮安區(qū)','淮陰區(qū)','清江浦區(qū)','洪澤區(qū)','漣水縣','盱眙縣','金湖縣', ? ? ? ?'亭湖區(qū)','鹽都區(qū)','大豐區(qū)','響水縣','濱??h','阜寧縣','射陽(yáng)縣','建湖縣','東臺(tái)市', ? ? ? ?'廣陵區(qū)','邗江區(qū)','江都區(qū)','寶應(yīng)縣','儀征市','高郵市', ? ? ? ?'京口區(qū)','潤(rùn)州區(qū)','丹徒區(qū)','丹陽(yáng)市','揚(yáng)中市','句容市', ? ? ? ?'海陵區(qū)','高港區(qū)','姜堰區(qū)','興化市','靖江市','泰興市', ? ? ? ?'宿城區(qū)','宿豫區(qū)','沭陽(yáng)縣','泗陽(yáng)縣','泗洪縣'] ? ? 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萬(wàn)人)",fontsize=13) ? ? p1.set_xlabel("人口密度(人/平方千米)",fontsize=13) ? ? p1.set_title("人口密度—患者密度相關(guān)性",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萬(wàn)人)",fontsize=13) ? ? p2.set_xlabel("人口密度(人/平方千米)",fontsize=13) ? ? p2.set_title("人口密度—患者密度相關(guān)性",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ī)學(xué)大數(shù)據(jù)課題\論文終稿修改\scientific report\返修\市區(qū)縣相關(guān)分析 _2231.xls")
實(shí)現(xiàn)效果:
二、實(shí)現(xiàn)地理編碼
- 輸入:中文地址信息,例如安徽為縣天城鎮(zhèn)都督村沖里18號(hào)
- 輸出:經(jīng)緯度坐標(biāo),例如107.34799754989581 30.50483335424108
- 功能:根據(jù)中文地址信息獲取經(jīng)緯度坐標(biāo)
實(shí)現(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進(jìn)行編碼 為了防止中文亂碼 ? ? # 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('#','號(hào)') # 第三列的地址 ? ? ? ? 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ī)學(xué)大數(shù)據(jù)課題\江蘇省SLE數(shù)據(jù)庫(kù)(兩次隨訪合并).xlsx' ? ? sle_xls_file = "F:\醫(yī)學(xué)大數(shù)據(jù)課題\數(shù)據(jù)副本\江蘇省SLE數(shù)據(jù)庫(kù)(兩次隨訪合并) - 副本.xlsx" ? ? sle_data_rs = readXLS(sle_xls_file, 1) ? ? getlatlon(sle_data_rs)
結(jié)果展示:
到此這篇關(guān)于python數(shù)據(jù)分析之單因素分析線性擬合及地理編碼的文章就介紹到這了,更多相關(guān)python數(shù)據(jù)分析內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python爬蟲多次請(qǐng)求超時(shí)的幾種重試方法(6種)
這篇文章主要介紹了python爬蟲多次請(qǐng)求超時(shí)的幾種重試方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12python使用paramiko實(shí)現(xiàn)ssh的功能詳解
這篇文章主要介紹了python使用paramiko實(shí)現(xiàn)ssh的功能詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03簡(jiǎn)單的連接MySQL與Python的Bottle框架的方法
這篇文章主要介紹了簡(jiǎn)單的連接MySQL與Python的Bottle框架的方法,主要基于mysql-connector插件,需要的朋友可以參考下2015-04-04詳解Python中import模塊導(dǎo)入的實(shí)現(xiàn)原理
這篇文章主要給大家介紹了Python中import模塊導(dǎo)入的實(shí)現(xiàn)原理,主要從什么是模塊,import搜索路徑以及導(dǎo)入原理這三個(gè)方面給大家介紹,感興趣的小伙伴跟著小編一起來(lái)看看吧2023-08-08