Skip to content

Commit 0a2e911

Browse files
committed
2 parents 4b32c7c + b70f532 commit 0a2e911

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

60 files changed

+1165
-0
lines changed

README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,12 @@
5555
- [第59天:PyQuery 详解](http://www.justdopython.com/2019/10/07/python-spider-PyQuery-059)
5656
- [第 62 天:HTTP 入门]( https://github.com/JustDoPython/python-100-day/tree/master/day-062 )
5757
- [第74天:Python newspaper 框架](http://www.justdopython.com/2019/11/24/python-newspaper-074)
58+
- [第 79 天:数据分析之 Numpy]( https://github.com/JustDoPython/python-100-day/tree/master/day-079 )
5859
- [第92天:Python多线程之 Event 事件](http://www.justdopython.com/2019/11/05/python-event-092)
60+
- [第 94 天:数据可视化之 pandas]( https://github.com/JustDoPython/python-100-day/tree/master/day-094 )
61+
- [第 106 天:机器学习概览]( https://github.com/JustDoPython/python-100-day/tree/master/day-106 )
62+
- [第 112 天:机器学习算法之蒙特卡洛方法]( https://github.com/JustDoPython/python-100-day/tree/master/day-112 )
63+
- [第 117 天:机器学习算法之 K 近邻]( https://github.com/JustDoPython/python-100-day/tree/master/day-117 )
5964

6065
关注公众号:python技术,回复"python"一起学习交流
6166

day-079/__init__.py

Whitespace-only changes.

day-094/__init__.py

Whitespace-only changes.

day-106/__init__.py

Whitespace-only changes.

day-112/MonteCarlo.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import random
2+
3+
4+
def solve_pi(repeat = 20000) -> float:
5+
'''
6+
:param repeat: integral
7+
8+
:return: float
9+
'''
10+
count = 0
11+
for i in range(repeat):
12+
x = random.random()
13+
y = random.random()
14+
if x*x + y*y < 1.0:
15+
count += 1
16+
17+
ratio = count / repeat
18+
PI = 4 * ratio
19+
return PI
20+
21+
if __name__ == "__main__":
22+
repeat = int(input("请输入实验次数:"))
23+
print(solve_pi(repeat))

day-112/MonteCarlo_integral.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import random
2+
3+
4+
def solve_integral(repeat = 20000) -> float:
5+
'''
6+
:param repeat: integral
7+
8+
:return: float
9+
'''
10+
11+
count = 0
12+
for i in range(repeat):
13+
x = random.random()
14+
y = random.random()
15+
if y > x*x:
16+
count += 1
17+
18+
ratio = count / repeat
19+
integral = ratio * 1
20+
return integral
21+
22+
if __name__ == "__main__":
23+
repeat = int(input("请输入实验次数:"))
24+
print(solve_integral(repeat))

day-112/__init__.py

Whitespace-only changes.

day-117/Iris.csv

Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
Id,SepalLengthCm,SepalWidthCm,PetalLengthCm,PetalWidthCm,Species
2+
1,5.1,3.5,1.4,0.2,Iris-setosa
3+
2,4.9,3.0,1.4,0.2,Iris-setosa
4+
3,4.7,3.2,1.3,0.2,Iris-setosa
5+
4,4.6,3.1,1.5,0.2,Iris-setosa
6+
5,5.0,3.6,1.4,0.2,Iris-setosa
7+
6,5.4,3.9,1.7,0.4,Iris-setosa
8+
7,4.6,3.4,1.4,0.3,Iris-setosa
9+
8,5.0,3.4,1.5,0.2,Iris-setosa
10+
9,4.4,2.9,1.4,0.2,Iris-setosa
11+
10,4.9,3.1,1.5,0.1,Iris-setosa
12+
11,5.4,3.7,1.5,0.2,Iris-setosa
13+
12,4.8,3.4,1.6,0.2,Iris-setosa
14+
13,4.8,3.0,1.4,0.1,Iris-setosa
15+
14,4.3,3.0,1.1,0.1,Iris-setosa
16+
15,5.8,4.0,1.2,0.2,Iris-setosa
17+
16,5.7,4.4,1.5,0.4,Iris-setosa
18+
17,5.4,3.9,1.3,0.4,Iris-setosa
19+
18,5.1,3.5,1.4,0.3,Iris-setosa
20+
19,5.7,3.8,1.7,0.3,Iris-setosa
21+
20,5.1,3.8,1.5,0.3,Iris-setosa
22+
21,5.4,3.4,1.7,0.2,Iris-setosa
23+
22,5.1,3.7,1.5,0.4,Iris-setosa
24+
23,4.6,3.6,1.0,0.2,Iris-setosa
25+
24,5.1,3.3,1.7,0.5,Iris-setosa
26+
25,4.8,3.4,1.9,0.2,Iris-setosa
27+
26,5.0,3.0,1.6,0.2,Iris-setosa
28+
27,5.0,3.4,1.6,0.4,Iris-setosa
29+
28,5.2,3.5,1.5,0.2,Iris-setosa
30+
29,5.2,3.4,1.4,0.2,Iris-setosa
31+
30,4.7,3.2,1.6,0.2,Iris-setosa
32+
31,4.8,3.1,1.6,0.2,Iris-setosa
33+
32,5.4,3.4,1.5,0.4,Iris-setosa
34+
33,5.2,4.1,1.5,0.1,Iris-setosa
35+
34,5.5,4.2,1.4,0.2,Iris-setosa
36+
35,4.9,3.1,1.5,0.1,Iris-setosa
37+
36,5.0,3.2,1.2,0.2,Iris-setosa
38+
37,5.5,3.5,1.3,0.2,Iris-setosa
39+
38,4.9,3.1,1.5,0.1,Iris-setosa
40+
39,4.4,3.0,1.3,0.2,Iris-setosa
41+
40,5.1,3.4,1.5,0.2,Iris-setosa
42+
41,5.0,3.5,1.3,0.3,Iris-setosa
43+
42,4.5,2.3,1.3,0.3,Iris-setosa
44+
43,4.4,3.2,1.3,0.2,Iris-setosa
45+
44,5.0,3.5,1.6,0.6,Iris-setosa
46+
45,5.1,3.8,1.9,0.4,Iris-setosa
47+
46,4.8,3.0,1.4,0.3,Iris-setosa
48+
47,5.1,3.8,1.6,0.2,Iris-setosa
49+
48,4.6,3.2,1.4,0.2,Iris-setosa
50+
49,5.3,3.7,1.5,0.2,Iris-setosa
51+
50,5.0,3.3,1.4,0.2,Iris-setosa
52+
51,7.0,3.2,4.7,1.4,Iris-versicolor
53+
52,6.4,3.2,4.5,1.5,Iris-versicolor
54+
53,6.9,3.1,4.9,1.5,Iris-versicolor
55+
54,5.5,2.3,4.0,1.3,Iris-versicolor
56+
55,6.5,2.8,4.6,1.5,Iris-versicolor
57+
56,5.7,2.8,4.5,1.3,Iris-versicolor
58+
57,6.3,3.3,4.7,1.6,Iris-versicolor
59+
58,4.9,2.4,3.3,1.0,Iris-versicolor
60+
59,6.6,2.9,4.6,1.3,Iris-versicolor
61+
60,5.2,2.7,3.9,1.4,Iris-versicolor
62+
61,5.0,2.0,3.5,1.0,Iris-versicolor
63+
62,5.9,3.0,4.2,1.5,Iris-versicolor
64+
63,6.0,2.2,4.0,1.0,Iris-versicolor
65+
64,6.1,2.9,4.7,1.4,Iris-versicolor
66+
65,5.6,2.9,3.6,1.3,Iris-versicolor
67+
66,6.7,3.1,4.4,1.4,Iris-versicolor
68+
67,5.6,3.0,4.5,1.5,Iris-versicolor
69+
68,5.8,2.7,4.1,1.0,Iris-versicolor
70+
69,6.2,2.2,4.5,1.5,Iris-versicolor
71+
70,5.6,2.5,3.9,1.1,Iris-versicolor
72+
71,5.9,3.2,4.8,1.8,Iris-versicolor
73+
72,6.1,2.8,4.0,1.3,Iris-versicolor
74+
73,6.3,2.5,4.9,1.5,Iris-versicolor
75+
74,6.1,2.8,4.7,1.2,Iris-versicolor
76+
75,6.4,2.9,4.3,1.3,Iris-versicolor
77+
76,6.6,3.0,4.4,1.4,Iris-versicolor
78+
77,6.8,2.8,4.8,1.4,Iris-versicolor
79+
78,6.7,3.0,5.0,1.7,Iris-versicolor
80+
79,6.0,2.9,4.5,1.5,Iris-versicolor
81+
80,5.7,2.6,3.5,1.0,Iris-versicolor
82+
81,5.5,2.4,3.8,1.1,Iris-versicolor
83+
82,5.5,2.4,3.7,1.0,Iris-versicolor
84+
83,5.8,2.7,3.9,1.2,Iris-versicolor
85+
84,6.0,2.7,5.1,1.6,Iris-versicolor
86+
85,5.4,3.0,4.5,1.5,Iris-versicolor
87+
86,6.0,3.4,4.5,1.6,Iris-versicolor
88+
87,6.7,3.1,4.7,1.5,Iris-versicolor
89+
88,6.3,2.3,4.4,1.3,Iris-versicolor
90+
89,5.6,3.0,4.1,1.3,Iris-versicolor
91+
90,5.5,2.5,4.0,1.3,Iris-versicolor
92+
91,5.5,2.6,4.4,1.2,Iris-versicolor
93+
92,6.1,3.0,4.6,1.4,Iris-versicolor
94+
93,5.8,2.6,4.0,1.2,Iris-versicolor
95+
94,5.0,2.3,3.3,1.0,Iris-versicolor
96+
95,5.6,2.7,4.2,1.3,Iris-versicolor
97+
96,5.7,3.0,4.2,1.2,Iris-versicolor
98+
97,5.7,2.9,4.2,1.3,Iris-versicolor
99+
98,6.2,2.9,4.3,1.3,Iris-versicolor
100+
99,5.1,2.5,3.0,1.1,Iris-versicolor
101+
100,5.7,2.8,4.1,1.3,Iris-versicolor
102+
101,6.3,3.3,6.0,2.5,Iris-virginica
103+
102,5.8,2.7,5.1,1.9,Iris-virginica
104+
103,7.1,3.0,5.9,2.1,Iris-virginica
105+
104,6.3,2.9,5.6,1.8,Iris-virginica
106+
105,6.5,3.0,5.8,2.2,Iris-virginica
107+
106,7.6,3.0,6.6,2.1,Iris-virginica
108+
107,4.9,2.5,4.5,1.7,Iris-virginica
109+
108,7.3,2.9,6.3,1.8,Iris-virginica
110+
109,6.7,2.5,5.8,1.8,Iris-virginica
111+
110,7.2,3.6,6.1,2.5,Iris-virginica
112+
111,6.5,3.2,5.1,2.0,Iris-virginica
113+
112,6.4,2.7,5.3,1.9,Iris-virginica
114+
113,6.8,3.0,5.5,2.1,Iris-virginica
115+
114,5.7,2.5,5.0,2.0,Iris-virginica
116+
115,5.8,2.8,5.1,2.4,Iris-virginica
117+
116,6.4,3.2,5.3,2.3,Iris-virginica
118+
117,6.5,3.0,5.5,1.8,Iris-virginica
119+
118,7.7,3.8,6.7,2.2,Iris-virginica
120+
119,7.7,2.6,6.9,2.3,Iris-virginica
121+
120,6.0,2.2,5.0,1.5,Iris-virginica
122+
121,6.9,3.2,5.7,2.3,Iris-virginica
123+
122,5.6,2.8,4.9,2.0,Iris-virginica
124+
123,7.7,2.8,6.7,2.0,Iris-virginica
125+
124,6.3,2.7,4.9,1.8,Iris-virginica
126+
125,6.7,3.3,5.7,2.1,Iris-virginica
127+
126,7.2,3.2,6.0,1.8,Iris-virginica
128+
127,6.2,2.8,4.8,1.8,Iris-virginica
129+
128,6.1,3.0,4.9,1.8,Iris-virginica
130+
129,6.4,2.8,5.6,2.1,Iris-virginica
131+
130,7.2,3.0,5.8,1.6,Iris-virginica
132+
131,7.4,2.8,6.1,1.9,Iris-virginica
133+
132,7.9,3.8,6.4,2.0,Iris-virginica
134+
133,6.4,2.8,5.6,2.2,Iris-virginica
135+
134,6.3,2.8,5.1,1.5,Iris-virginica
136+
135,6.1,2.6,5.6,1.4,Iris-virginica
137+
136,7.7,3.0,6.1,2.3,Iris-virginica
138+
137,6.3,3.4,5.6,2.4,Iris-virginica
139+
138,6.4,3.1,5.5,1.8,Iris-virginica
140+
139,6.0,3.0,4.8,1.8,Iris-virginica
141+
140,6.9,3.1,5.4,2.1,Iris-virginica
142+
141,6.7,3.1,5.6,2.4,Iris-virginica
143+
142,6.9,3.1,5.1,2.3,Iris-virginica
144+
143,5.8,2.7,5.1,1.9,Iris-virginica
145+
144,6.8,3.2,5.9,2.3,Iris-virginica
146+
145,6.7,3.3,5.7,2.5,Iris-virginica
147+
146,6.7,3.0,5.2,2.3,Iris-virginica
148+
147,6.3,2.5,5.0,1.9,Iris-virginica
149+
148,6.5,3.0,5.2,2.0,Iris-virginica
150+
149,6.2,3.4,5.4,2.3,Iris-virginica
151+
150,5.9,3.0,5.1,1.8,Iris-virginica

day-117/KNN.py

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
'''
2+
__author__ = justdopython.com
3+
'''
4+
5+
6+
import matplotlib.pyplot as plt
7+
import numpy as np
8+
import pandas as pd
9+
from collections import Counter
10+
11+
12+
# 生成所要用到的数据集
13+
def getData() -> (np.ndarray, np.ndarray, np.ndarray, np.ndarray):
14+
iris = pd.read_csv('iris.csv').to_numpy()
15+
train_data = [] # 训练数据,与测试数据按 4:1 比例划分
16+
test_data = [] # 测试数据
17+
train_target = [] # 训练数据对应标签
18+
test_target = [] # 测试数据对应标签
19+
20+
# 原始数据集分为 3 个类别,分别是 0~49,50~99,100~149,各50个
21+
for i in range(3):
22+
offset = 50 * i
23+
data = iris[offset+0:offset+50, :]
24+
# data = np.random.shuffle(data)
25+
np.random.shuffle(data) # 就地随机打乱
26+
27+
# try:
28+
# train_data.append(data[0:39, 1:5].tolist())
29+
# train_target.append(data[0:39, 5].tolist())
30+
# test_data.append(data[40:, 1:5].tolist())
31+
# test_target.append(data[40:, 5].tolist())
32+
# except NameError:
33+
# train_data = data[0:39, 1:5].tolist()
34+
# train_target = data[0:39, 5].tolist()
35+
# test_data = data[40:, 1:5].tolist()
36+
# test_target = data[40:, 5].tolist()
37+
38+
train_data.extend(data[0:40, 1:5].tolist())
39+
train_target.extend(data[0:40, 5].tolist())
40+
test_data.extend(data[40:, 1:5].tolist())
41+
test_target.extend(data[40:, 5].tolist())
42+
43+
train_data = np.array(train_data)
44+
test_data = np.array(test_data)
45+
train_target = np.array(train_target)
46+
test_target = np.array(test_target)
47+
48+
return train_data, test_data, train_target, test_target
49+
50+
# 计算距离
51+
def calculateDistance(test_data, train_data) -> list:
52+
distance = []
53+
for i in range(len(test_data)):
54+
sub_dist = []
55+
for j in range(len(train_data)):
56+
dif_array = test_data[i] - train_data[j]
57+
dist = np.sqrt(np.sum(dif_array * dif_array))
58+
sub_dist.append(dist)
59+
60+
distance.append(sub_dist)
61+
62+
distance = np.array(distance)
63+
64+
return distance
65+
66+
# 求解结果
67+
def calculateResult(distance, K, train_target):
68+
results = []
69+
70+
for i in range(len(distance)):
71+
index = np.argsort(distance[i])[:K]
72+
result = train_target[index]
73+
74+
# result = pd.value_counts(result)
75+
76+
species = Counter(result).most_common(1)[0][0]
77+
78+
results.append(species)
79+
80+
return results
81+
82+
# 评估结果
83+
def estimateResult(results, test_target):
84+
right = 0
85+
print('-'*80)
86+
87+
for i in range(len(results)):
88+
print('Right Species = ', test_target[i], \
89+
', \tReal Species = ', results[i])
90+
91+
if results[i] == test_target[i]:
92+
right += 1
93+
94+
right_rate = right / len(results)
95+
print('-'*80)
96+
print("Right Rate: ", right_rate)
97+
print('-'*80)
98+
99+
100+
return
101+
102+
if __name__ == '__main__':
103+
print('-'*80)
104+
K = int(input("请输入 K 值:"))
105+
106+
train_data, test_data, train_target, test_target = getData()
107+
distance = calculateDistance(test_data, train_data)
108+
results = calculateResult(distance, K, train_target)
109+
110+
estimateResult(results, test_target)
111+
112+
113+
114+

day-117/__init__.py

Whitespace-only changes.

0 commit comments

Comments
 (0)