python多元线性回归预测分析:python数据分析之单因素分析
python多元线性回归预测分析:python数据分析之单因素分析from scipy import optimize3import pandas as pd2from pylab import mpl
实现功能:
线性拟合:单因素分析,对散点图进行线性拟合,并放大散点图的局部位置
实现代码:
1 |
import pandas as pd |
2 |
from pylab import mpl |
3 |
from scipy import optimize |
4 |
import numpy as np |
5 |
import matplotlib.pyplot as plt |
7 | |
8 |
def f_1(x A B): |
9 |
return A*x B |
10 | |
11 |
def draw_cure(file): |
12 |
data1=pd.read_excel(file) |
13 |
data1=pd.DataFrame(data1) |
14 |
hz=list(data1['患者密度(人/10万人)']) |
15 |
rk=list(data1['人口密度(人/平方千米)']) |
16 |
hz_gy=[] |
17 |
rk_gy=[] |
18 | |
19 |
for i in hz: |
20 |
hz_gy.append((i-min(hz))/(max(hz)-min(hz))) |
21 | |
22 |
for i in rk: |
23 |
rk_gy.append((i-min(rk))/(max(rk)-min(rk))) |
24 | |
25 |
n=['玄武区' '秦淮区' '建邺区' '鼓楼区' '浦口区' '栖霞区' '雨花台区' '江宁区' '六合区' '溧水区' '高淳区' |
26 |
'锡山区' '惠山区' '滨湖区' '梁溪区' '新吴区' '江阴市' '宜兴市' |
27 |
'鼓楼区' '云龙区' '贾汪区' '泉山区' '铜山区' '丰县' '沛县' '睢宁县' '新沂市' '邳州市' |
28 |
'天宁区' '钟楼区' '新北区' '武进区' '金坛区' '溧阳市' |
29 |
'虎丘区' '吴中区' '相城区' '姑苏区' '吴江区' '常熟市' '张家港市' '昆山市' '太仓市' |
30 |
'崇川区' '港闸区' '通州区' '如东县' '启东市' '如皋市' '海门市' '海安市' |
31 |
'连云区' '海州区' '赣榆区' '东海县' '灌云县' '灌南县' |
32 |
'淮安区' '淮阴区' '清江浦区' '洪泽区' '涟水县' '盱眙县' '金湖县' |
33 |
'亭湖区' '盐都区' '大丰区' '响水县' '滨海县' '阜宁县' '射阳县' '建湖县' '东台市' |
34 |
'广陵区' '邗江区' '江都区' '宝应县' '仪征市' '高邮市' |
35 |
'京口区' '润州区' '丹徒区' '丹阳市' '扬中市' '句容市' |
36 |
'海陵区' '高港区' '姜堰区' '兴化市' '靖江市' '泰兴市' |
37 |
'宿城区' '宿豫区' '沭阳县' '泗阳县' '泗洪县'] |
38 | |
40 |
mpl.rcParams['font.sans-serif'] = ['FangSong'] |
41 |
plt.figure(figsize=(16 8) dpi=98) |
42 |
p1 = plt.subplot(121) |
43 |
p2 = plt.subplot(122) |
44 | |
45 |
p1.scatter(rk_gy hz_gy c='r') |
46 |
p2.scatter(rk_gy hz_gy c='r') |
47 | |
48 |
p1.axis([0.0 1.01 0.0 1.01]) |
49 |
p1.set_ylabel("患者密度(人/10万人)" fontsize=13) |
50 |
p1.set_xlabel("人口密度(人/平方千米)" fontsize=13) |
51 |
p1.set_title("人口密度—患者密度相关性" fontsize=13) |
52 | |
53 |
for i txt in enumerate(n): |
54 |
p1.annotate(txt (rk_gy[i] hz_gy[i])) |
55 | |
56 |
A1 B1 = optimize.curve_fit(f_1 rk_gy hz_gy)[0] |
57 |
x1 = np.arange(0 1 0.01) |
58 |
y1 = A1*x1 B1 |
59 |
p1.plot(x1 y1 "blue" label='一次拟合直线') |
60 |
x2 = np.arange(0 1 0.01) |
61 |
y2 = x2 |
62 |
p1.plot(x2 y2 'g--' label='y=x') |
63 |
p1.legend(loc='upper left' fontsize=13) |
64 | |
65 |
# # plot the box |
66 |
tx0 = 0;tx1 = 0.1;ty0 = 0;ty1 = 0.2 |
67 |
sx = [tx0 tx1 tx1 tx0 tx0] |
68 |
sy = [ty0 ty0 ty1 ty1 ty0] |
69 |
p1.plot(sx sy "purple") |
70 | |
71 |
p2.axis([0 0.1 0 0.2]) |
72 |
p2.set_ylabel("患者密度(人/10万人)" fontsize=13) |
73 |
p2.set_xlabel("人口密度(人/平方千米)" fontsize=13) |
74 |
p2.set_title("人口密度—患者密度相关性" fontsize=13) |
75 | |
76 |
for i txt in enumerate(n): |
77 |
p2.annotate(txt (rk_gy[i] hz_gy[i])) |
78 | |
79 |
p2.plot(x1 y1 "blue" label='一次拟合直线') |
80 |
p2.plot(x2 y2 'g--' label='y=x') |
81 |
p2.legend(loc='upper left' fontsize=13) |
82 | |
83 |
plt.show() |
84 | |
85 |
if __name__ == '__main__': |
86 |
draw_cure("F:\医学大数据课题\论文终稿修改\scientific report\返修\市区县相关分析 _2231.xls") |
实现效果:
关注V数据杂坛学习更多!