码云地址:给我点个赞就行奥
https://gitee.com/MaLuBuShiWo/zhuxiaofeng/tree/master
注:我是直接粘贴的代码 大家在jupyter notebook 里面看会更方便看
下面的python基础统合实践需要使用的库
http://pan.baidu.com/s/1dENAUTr
http://pan.baidu.com/s/1geN6QbD
注:使用中文输入法输入的运算符号 会出现报错情况
python数据运算
In [1]:
#整数运算
10+20
Out[1]:
30
In [2]:
#整数与浮点数减法
30-60.5
Out[2]:
-30.5
In [43]:
#整数与浮点数乘法
4*8.9
Out[43]:
35.6
In [6]:
#整数与整数相除
5/4
Out[6]:
1.25
In [7]:
#整数取模运算
5%4
Out[7]:
1
In [8]:
#幂指数运算
2.0**3
Out[8]:
8.0
比较运算
In [9]:
#整数比较
10<20
Out[9]:
True
In [11]:
10>20
Out[11]:
False
In [13]:
#整数与浮点数比较
30<30.0
Out[13]:
False
In [15]:
30<=30.0
Out[15]:
True
In [16]:
30.0<=30.0
Out[16]:
True
In [17]:
#判断两个值是否相等
30==40
Out[17]:
False
In [19]:
#判断两个值不想等
30!=40
Out[19]:
True
赋值运算
将一些数据赋值给自定义的变量,python在声明变量时不需要预告知类型。
In [ ]:
In [22]:
#将一个元组赋值给变量t
t= (1,'abc',0.4)
#下列代码数错误的因为我们都知道 元组内部元素是不可以修改的
#t[0]=2
In [ ]:
In [25]:
#将一个列表赋值给变量l
l=[1,'abc',0.4]
#试图更改列表l的第一个元素
l[0]=2
l[0]+=1
l
Out[25]:
[3, 'abc', 0.4]
逻辑运算 与(and) 或(or)非(not)
In [27]:
#与 二者都是true才能 true
True and True
Out[27]:
True
In [28]:
#或 有一个是true 就是true
True or False
Out[28]:
True
In [29]:
#非 取得相反的布尔值
not False
Out[29]:
True
成员运算
主要是面向元组 列表 字典。 通过运算符in询问是否有某个元素在元组或者列表里面出现,或者检视某个键(key)是否在字典里存在。
In [41]:
# 一个列表一个元组一个字典
l=[1,'abc',0.4]
t= (1,'abc',0.4)
d={1:'1','abc':0.1,0.4:80}
In [36]:
#询问列表l中是否有0.4
0.4 in l
Out[36]:
True
In [37]:
#询问元组t中是否有1
1 in t
Out[37]:
True
In [39]:
#询问字典d中是否有键‘abc’
'adc' in d
Out[39]:
False
In [42]:
#in 只能用来考量是否有键值(key) 不能告诉你是否有值(value)
0.1 in d
Out[42]:
False
分支语句
In [45]:
b = False
c = True
if b:
print ("b is True!")
elif c:
print ("c is True!")
else:
print ("Both are False!")
c is True!
循环控制
In [50]:
#对字典d的键进行循环遍历,输出每组键值对
d={1:'1','abc':0.1,0.4:80}
for k in d:
print(k,':',d[k])
1 : 1 abc : 0.1 0.4 : 80
In [53]:
# 关键字def
#定义一个名为foo的函数 传入参数x。
def foo(x):
return x**2
#调用函数foo 传入参数为8.0 观察输出
foo(8)
Out[53]:
64
In [55]:
#直接使用import导入math工具包
import math
#调用math包下的exp函数求自然指数
#exp() 方法返回x的指数,e的x幂
math.exp(2)
Out[55]:
7.38905609893065
In [57]:
#从(from) math工具包里指定导入exphanshu,并且对exp 函数重新明名为ep
from math import exp as ep
#使用函数exp的临时代替名称调用
ep(2)
Out[57]:
7.38905609893065
In [68]:
import warnings#忽略警告
warnings.filterwarnings("ignore")
In [31]:
#导入pandas工具包,并且更名为pd。
import pandas as pd
#调用pandas工具包的 read_csv 函数/模块,传入训练/测试文件的地址,获得返回的数据并且存至变量df_train/df_test
df_train = pd.read_csv("breast-cancer-train.csv")
df_test=pd.read_csv("breast-cancer-test.csv")
In [32]:
# 看一下测试数据的列名
df_test.columns
Out[32]:
Index(['Unnamed: 0', 'Clump Thickness', 'Cell Size', 'Type'], dtype='object')
In [33]:
#选取'Clump Thickness'和'Type' 特征作为测试数据
df_test=df_test[['Clump Thickness','Cell Size', 'Type']]
In [34]:
#看前面5行
df_test.head()
Out[34]:
Clump Thickness | Cell Size | Type | |
---|---|---|---|
0 | 1 | 2 | 0 |
1 | 1 | 1 | 0 |
2 | 1 | 1 | 0 |
3 | 5 | 5 | 1 |
4 | 1 | 1 | 0 |
In [35]:
#把测试数据的正负样本分开
#恶心肿瘤
df_test_nagative=df_test[df_test['Type']==0]
In [36]:
df_test_nagative.head(2)
Out[36]:
Clump Thickness | Cell Size | Type | |
---|---|---|---|
0 | 1 | 2 | 0 |
1 | 1 | 1 | 0 |
In [37]:
#良性肿瘤
df_test_positive=df_test[df_test['Type']==1]
In [39]:
df_test_positive.head(2)
Out[39]:
Clump Thickness | Cell Size | Type | |
---|---|---|---|
3 | 5 | 5 | 1 |
7 | 6 | 6 | 1 |
In [40]:
#导入matplotlib工具包中的pyplot 并命名为plt
import matplotlib.pyplot as plt
plt.xlabel('Clump Thickness')#x轴名称
plt.ylabel('Cell Size')#y轴名称
#绘制良性肿瘤样本点 标记为红色的。
plt.scatter(df_test_positive['Clump Thickness'],df_test_positive['Cell Size'],marker='o',s=200,c='red')
plt.xlabel('Clump Thickness')
plt.ylabel('Cell Size')
#绘制恶性肿瘤样本点 标记为蓝色的。
plt.scatter(df_test_nagative['Clump Thickness'],df_test_nagative['Cell Size'],marker='x',s=200,c='blue')
#绘制一条直线
import numpy as np
intercept = np.random.random([1]) #随机初始化截距
coef=np.random.random([2])#随机初始化系数
lx=np.arange(0,12)
In [58]:
intercept
Out[58]:
array([0.1024919])
In [57]:
coef
Out[57]:
array([0.73044324, 0.28469882])
In [60]:
lx=np.arange(0,12)#输入x
lx
Out[60]:
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
In [62]:
ly=(-intercept-lx*coef[0])/coef[1]
In [63]:
ly
Out[63]:
array([ -0.36000114, -2.92567122, -5.49134129, -8.05701137, -10.62268144, -13.18835151, -15.75402159, -18.31969166, -20.88536174, -23.45103181, -26.01670188, -28.58237196])
In [64]:
#绘制这条直线
plt.plot(lx,ly,c='yellow')
plt.xlabel('Clump Thickness')
plt.ylabel('Cell Size')
plt.scatter(df_test_nagative['Clump Thickness'],df_test_nagative['Cell Size'],marker='x',s=200,c='blue')
plt.scatter(df_test_positive['Clump Thickness'],df_test_positive['Cell Size'],marker='o',s=200,c='red')
plt.plot(lx,ly,c='yellow')
In [66]:
#导入LogisticRegression分类模型
#模型是一条直线
from sklearn.linear_model import LogisticRegression
lr=LogisticRegression()
In [69]:
#使用训练数据训练模型的参数 即系数和截距
lr.fit(df_train[['Clump Thickness','Cell Size']],df_train[['Type']])
Out[69]:
LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True, intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1, penalty='l2', random_state=None, solver='liblinear', tol=0.0001, verbose=0, warm_start=False)
In [70]:
#看训练后的模型在测试集上面的准确率
lr.score(df_test[['Clump Thickness','Cell Size']],df_test[['Type']])
Out[70]:
0.9371428571428572
In [79]:
intercept=lr.intercept_
coef=lr.coef_[0,:]
In [80]:
ly=(-intercept-lx*coef[0])/coef[1]
In [82]:
plt.plot(lx,ly,c='green')
plt.xlabel('Clump Thickness')
plt.ylabel('Cell Size')
plt.scatter(df_test_nagative['Clump Thickness'],df_test_nagative['Cell Size'],marker='x',s=200,c='blue')
plt.scatter(df_test_positive['Clump Thickness'],df_test_positive['Cell Size'],marker='o',s=200,c='red')