#判斷兩次類聚中心點坐標
def random_kid_is_same(x_randomz_first,y_random_first,y_random_second,x_randomz_second):
if x_randomz_first==x_randomz_second and y_random_first==y_random_second :
a= False
else:
a=True
return a
a=random_kid_is_same(x_randomz_first,y_random_first,y_random_second,x_randomz_second)
print(a)
while a:
for i in range(0, len(x)):
for j in range(0, 3):
dic.append(math.sqrt((x[i] - x_randomz_first[j]) * (x[i] - x_randomz_first[j]) + (y[i] - y_random_first[j]) * (
y[i] - y_random_first[j])))#求距離
if dic[2] < dic[0] and dic[2] < dic[1]: # 2號距離最小
result_x_num2.append(x[i])
result_y_num2.append(y[i])
dic = []
elif dic[0] < dic[1] and dic[0] < dic[2]: # 0號距離最小
result_x_num0.append(x[i])
result_y_num0.append(y[i])
dic = []
elif dic[1] < dic[0] and dic[1] < dic[2]: # 1號最小
result_x_num1.append(x[i])
result_y_num1.append(y[i])
dic = []
for i_1 in range (0,len(result_x_num0)):#取0號類別里的數據
result_x+=result_x_num0[i_1]
#print(result_x_num0)
x_randomz_second.append(result_x/len(result_x_num0))
for i_3 in range (0,len(result_y_num0)):
result_y+=result_y_num0[i_3]
y_random_second.append(result_x/len(result_x_num0))
for i_2 in range (0,len(result_x_num1)):#取1號類別里的數據
result_x+=result_x_num1[i_2]
print(len(result_x_num1))
x_randomz_second.append(result_x /(len(result_x_num1)))
for i_4 in range (0,len(result_y_num1)):
result_y+=result_y_num1[i_4]
y_random_second.append(result_y/len(result_y_num1))
for i_5 in range(0, len(result_x_num2)):#取2號類別里的數據
result_x += result_x_num2[i_5]
x_randomz_second.append(result_x / len(result_x_num2))
for i_6 in range(0, len(result_y_num2)):
result_y += result_y_num2[i_6]
y_random_second.append(result_y / len(result_y_num2))
a=random_kid_is_same(x_randomz_first,y_random_first,y_random_second,x_randomz_second)
x_randomz_first=x_randomz_second
y_random_first=y_random_second
plt.scatter(result_x_num0,result_y_num0,color='black')
plt.scatter(result_x_num1,result_y_num1,color='red')
plt.scatter(result_x_num2,result_y_num2,color='green')
plt.legend(['第一類','第二類','第三類'])
plt.savefig('d:/home2.png')
plt.show()
Knn算法:
import matplotlib.pyplot as plt
import numpy as np
import random
from numpy import *
import math
#編程邏輯:
# 將原始的數據所有的屬性分開存在數組中,順序一致,將要配置的電影的信息都存在一個數組里,
# 用歐式公式求出相似度,將電影名稱和相似度存放在字典里,對字典進行排序(從小到大),
# 然后按照排序出的結果根據電影名稱查找每個電影對應的類型名稱,將所有類型名稱存在一個數組里
# 然后查找每種類型名稱出現的次數,將類型名稱和次數存放在字典里,在對字典進行排序(從大到小)
# 取出第一個數據的電影類型為要所求的電影類型,將此類型添加到要求的電影信息數組中
#數據準備
fill_name=['寶貝當家','美人魚','澳門風云3','功夫熊貓3','諜影重重','葉問3','我的特工爺爺','奔愛','夜孔雀','代理情人','新步步驚心','倫敦淪陷']
funny_lens=[45,21,54,39,5,3,6,7,9,9,8,2]
hug_lens=[2,17,9,0,2,2,4,46,39,38,34,3]
fighting_lens=[9,5,11,31,57,65,21,4,8,2,17,55]
fill_type=['喜劇片','喜劇片','喜劇片','喜劇片','動作片','動作片','動作片','愛情片','愛情片','愛情片','愛情片','動作片']
fill_need_name=['唐人街探案',23,3,17]
#參數規(guī)定
k_numebr=4
result={}
dict={}
dict_result={}
dic=0
type_name=[]
count_fight=0
count1_fun=0
count1_love=0
#求出要求的電影的屬性和樣本點求距離
for i in range(0,len(fill_name)):
dic= math.sqrt((fill_need_name[1]-funny_lens[i])**2+(fill_need_name[2]-hug_lens[i])**2+(fill_need_name[3]-fighting_lens[i])**2)
result[fill_name[i]]=dic
#將數列排序 按value的值從小到大進行排序 給dict 此時dict的類型為list- list里的每一個元素為元組類型
dict= sorted(result.items(), key=lambda d:d[1], reverse = False)
print("相似度排序:-----------------")
for i in range (0,k_numebr):#按照要求k值進行截取
a=list(dict[i])#dict為list型 但是list中每一個元素為元組型,需要再轉換為list型
print(a)#打印出按從小帶大的排序取前k個
#按照電影名稱查找每個電影的類型
for j in range(0,len(fill_name)):
if fill_name[j]==a[0]:
type_name.append(fill_type[j])
#遍歷出來的所有電影類型名稱 查找每個電影的類型出現的次數 存放到字典里
for i in range (0,len(type_name)):
if type_name[i]=='動作片':
count_fight+=1
elif type_name[i]=='喜劇片':
count1_fun+=1
elif type_name[i]=='愛情片':
count1_love+=1
dict_result['動作片']=count_fight
dict_result['喜劇片']=count1_fun
#print(type_name)
print("相似度前四個所對應的電影類型出現的次數-----------")
print(dict_result)
#將存放電影類型的字典按照出現次數的大小從大到小排列 此時dict_2為list型,list中每一個元素為元組型
dict_2= sorted(dict_result.items(), key=lambda d:d[1], reverse = True)
b=list(dict_2[0])#把list中第一個元組轉換成數組 再取第一個數據為 所需要的類型
#print(b[0])
#將 找到的電影類型添加到原來電影信息的數組中
fill_need_name.append(b[0])
print("所求結果:-----------------")
print(fill_need_name)
5)python面向程序和爬蟲
Python可以面向過程編程也可以面向對象編程,爬蟲是從網頁下載指定的格式的內容
class Human():
def __init__(self,name,age):
self._name=name
self._age=age
def talk(self):
print("Human can talk")
def display(self):
print(self._name+"-"+str(self._age))
def __str__(self):
return self._name+"-"+str(self._age)
def __repr__(self):
return self.__str__()
def getAge(self):
return self._age
def add_human(name,age):
s=Human(name,age)
return s
name='小剛'
age=22
a=add_human(name,age)
print(a)
import urllib.request
import re
def get_html(url):
page=urllib.request.urlopen(url)
html=page.read()
return html
reg= r'src=" (.+?\.jpg)" .width '
reg_img=re.compile(reg)#編譯
html=get_html('http://tieba.baidu.com/p/1753935195')
html=html.decode('utf-8')
imglist=reg_img.findall(html)
三、心得總結
在大數據和云計算快速的發(fā)展的今天,python以語法簡單功能強大成為學習大數據的一個理想的編程語言,在用python語言編程的時候發(fā)現跟其他語言有著明顯的區(qū)別,python簡化在其他語言中相對復雜繁瑣的語法結構,但是在集成開發(fā)軟件中,python需要按照嚴格的格式編程,如java是以分號作為程序結束的標記,并不要求在編程中需要有格式要求,然后python集成工具中寫程序需要按照格式編程,這點在剛開始編程是會找不清每個部分所對應的級別,會造成很多編程錯誤,而當熟悉這種格式要求時,發(fā)現python這種簡潔的要求更加簡化的編程過程,編程速度也會有很大提高,邏輯也會更加清晰
Python中的變量并不需要提前設定變量類型,系統是自動添加數據類型,所以在編程中,要把握準確很大變量的類型,尤其在和元組,數組,字典相互使用的時候要注意類型的變化
個人認為在python編程中最重要的一步是在進行編程時想明白每個數組是用什么數據類型進行存放,當確定好數據類型后,python以它簡單強大的語法,會使編程變得更加效率和簡單!
相關推薦
>>本文地址:http://liujunjsxg.cn/dxs/2018/45463.html
聲明:本站稿件版權均屬中公教育優(yōu)就業(yè)所有,未經許可不得擅自轉載。
1 您的年齡
2 您的學歷
3 您更想做哪個方向的工作?
上一篇 【實習報告】Python實習總結