python数据分析之单因素分析线性拟合及地理编码
作者:不再依然07 发布时间:2021-02-09 06:46:20
标签: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[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:\医学大数据课题\论文终稿修改\scientific report\返修\市区县相关分析 _2231.xls")
实现效果:
二、实现地理编码
输入:中文地址信息,例如安徽为县天城镇都督村冲里18号
输出:经纬度坐标,例如107.34799754989581 30.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)
结果展示:
来源:https://blog.csdn.net/sinat_41858359/article/details/124531484


猜你喜欢
- 目录定时器概念实现一个简单的定时程序方案一方案二定时器概念什么是定时器呢?它是指从指定的时刻开始,经过一个指定时间,然后触发一个事件,用户可
- 本文先抓取网络上的表情图像,然后利用百度 AI 识别表情包上的说明文字,并利用表情文字重命名文件,这样当发表情包时,不需要逐个打开查找,直接
- mock.js简介官方链接:Mock.js (mockjs.com)前端开发人员用来模拟虚拟数据,拦截ajax请求,方便模拟后端接口安装np
- 目录1. 什么是竞态2. 如何消除竞态3. Go 提供的并发工具3.1 互斥锁3.2 读写互斥锁3.3 Once3.4 竞态检测器4. 小结
- 在本人看来,HTML 5是一个妥协方案,虽不激进,但更能推动技术的继续进步。没有命名空间,元素也不要求闭合(当然这并不是优点),浏览器也可以
- 很多人说设计是力求细节的,在网页设计里表达出的细节就是图标。图标在一个设计里带来了额外的注解并且使设计里的对象和元素引起用户的注意。以下介绍
- 本文实例讲述了python中尾递归用法。分享给大家供大家参考。具体分析如下:如果一个函数中所有递归形式的调用都出现在函数的末尾,我们称这个递
- 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对
- 目录时间戳相减装饰器timeit模块重复调用 timeit()cProfile性能分析工具时间戳相减在代码执行前后各记录一个时间点,两个时间
- 用js实现漂亮的雪花飘过效果:步骤:页面基本样式,雪花旋转动画效果body{ width: 100vw; height: 100vh; ba
- <html> <head> <script type="text/javascript"&
- 场景我们一般没必要过度优化 Go 程序性能。但是真正需要时,Go 提供的 pprof 工具能帮我们快速定位到问题。比如,我们团队之前有一个服
- 今天项目中遇到了中文编码的zip文件,处理了蛮长时间,所以记录下,以免下次踩坑。Python2下Python2中读取zip文件,zipfil
- mysql replace实例说明:UPDATE tb1 SET f1=REPLACE(f1, 'abc', 'de
- 如下所示:def ref_txt_demo(): f = open('1.txt', 'r') data =
- 求N的阶乘本题要求编写程序,计算N的阶乘。输入格式:输入在一行中给出一个正整数 N。输出格式:在一行中按照“produc
- 当使用vue做登录的时候,我们会把拿到的部分用户信息存在vuex+cookie中,我们知道,vuex的数据是会随着浏览器刷新而丢失的,此时我
- 本文用于对之前openCV知识点学习的复习及实践。要求达到以下效果:一、基本流程思路分析本项目本质上就是进行模板匹配。注:为多用到所学知识,
- MySQL5的乱码问题可以用下面的方法解决:1.设置phpMyAdmin Language:Chinese simplified (zh-u
- 前期准备首先,使用Python内置的Turtle绘图库需要在程序前添加以下代码:import turtle也可以写成这样:from turt