# python数据统计分析之单因素分析线性拟合及地理编码

> 作者/来源: UCloud 运营管理员
> 发布时间: 2023-01-12T02:25:00.000Z
> 分类: 其他
> 标签: AI, 数据库, Python
> 原文链接: http://117.50.162.249:3000/yun/articles/645

---

# python数据统计分析之单因素分析线性拟合及地理编码

> 来源: https://www.ucloud.cn/yun/130251.html
> 作者: 89542767
> 发布日期: 发布于2023-01-12 10:25

本文关键阐述了python数据统计分析之单因素分析线性拟合及地理编码，文章内容紧扣主题开展详尽的基本介绍，具有很强的实用价值，必须的朋友可以学习一下

　　一、单因素分析线性拟合

　　作用：线性拟合，单因素分析，对趋势线开展线性拟合，并变大趋势线的部分位子

　　键入：某一xlsx文档，含有'病人相对密度（人/10数万人）'和'人口密度散布（人/平方公里）'二列

　　导出：对此二列信息进行线性拟合，制作矩形图

　　完成编码：

```
　　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=['玄武区','秦淮区','建邺区','鼓楼区','浦口区','栖霞区','雨花台区','江宁区','六合区','溧水区','高淳区',
　　'锡山区','惠山区','滨湖区','梁溪区','新吴区','江阴市','宜兴市',
　　'鼓楼区','云龙区','贾汪区','泉山区','铜山区','丰县','沛县','睢宁县','新沂市','邳州市',
　　'天宁区','钟楼区','新北区','武进区','金坛区','溧阳市',
　　'虎丘区','吴中区','相城区','姑苏区','吴江区','常熟市','张家港市','昆山市','太仓市',
　　'崇川区','港闸区','通州区','如东县','启东市','如皋市','海门市','海安市',
　　'连云区','海州区','赣榆区','东海县','灌云县','灌南县',
　　'淮安区','淮阴区','清江浦区','洪泽区','涟水县','盱眙县','金湖县',
　　'亭湖区','盐都区','大丰区','响水县','滨海县','阜宁县','射阳县','建湖县','东台市',
　　'广陵区','邗江区','江都区','宝应县','仪征市','高邮市',
　　'京口区','润州区','丹徒区','丹阳市','扬中市','句容市',
　　'海陵区','高港区','姜堰区','兴化市','靖江市','泰兴市',
　　'宿城区','宿豫区','沭阳县','泗阳县','泗洪县']
　　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&lt;i&gt;,hz_gy&lt;i&gt;))
　　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&lt;i&gt;,hz_gy&lt;i&gt;))
　　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:医学大数据课题论文终稿修改scientific report返修市区县相关分析_2231.xls")
```

![01.png](https://ucloud-blog.cn-bj.ufileos.com/articles/130251/images/130251_000.png)

      二、完成地理编码

　　键入：汉语地址信息，比如安徽省为县天城镇大都督村冲里18号

　　导出：经纬度坐标，比如107.3479975498958130.50483335424108

　　作用：依据汉语详细地址信息收集经纬度坐标

　　完成编码：

```
　　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']#获取经度并写入
　　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:医学大数据课题江苏省SLE数据库（两次随访合并）.xlsx'
　　sle_xls_file="F:医学大数据课题数据副本江苏省SLE数据库（两次随访合并）-副本.xlsx"
　　sle_data_rs=readXLS(sle_xls_file,1)
　　getlatlon(sle_data_rs)
```

![02.png](https://ucloud-blog.cn-bj.ufileos.com/articles/130251/images/130251_001.png)

       综上所述，这篇文章就给大家介绍到这里了，希望可以给大家带来帮助。