python之人工智能与机器学习——一、使用jupyter notebook进行numpy、pandas和matplotlib相关练习,并解释图灵测试

一、前言

阅读本文前建议先阅读以下两篇文章:
python基本语法

anaconda及jupyternotebook安装及使用方法

机器学习领域最热门的开发语言当属Python。Python是一种兼容性非常好的脚本语言,可运行在多种计算机平台和操作系统中,如UNIX、Windows、Mac OS等。
Python语言简单易学,而且运转良好。它能够进行自动内存回收,支持面向对象编程,拥有强大的动态数据类型和库的支持,最重要的是语法简单而强大。Python是开源项目,与大部分传统编程语言不同,Python体现了极其自由的编程风格。
即使没有Python语言基础,只要具备基本的编程思想,学习Python也不困难。在科学和金融领域,Python应用非常广泛。
Python语言的最大不足是性能问题,程序的运行效率不如Java或者C程序高。不过在必要的时候,可以使用Python调用C编译的程序。
常见的Python集成开发环境有PyCharm、Eclipse+PyDev等。而从方便学习的角度,Anaconda集成开发环境具有很多优点,广为采用。
Anaconda是一个开源的Python发行版本,可以看作是增值版的Python,其中包含规模数据处理、预测分析和科学计算等的包及其支持模块,是进行数据分析的有力工。
Jupyter Notebook是Web交互计算环境,Jupyter Notebook文当(.ipynb)实际上是一个JSON文档,可以包含代码、文本、数学公式、图形和多媒体。
使用JupyterNotebook,可以让文档和代码相辅相成,具有优秀的可视化能力,使用户能够专注于数居分析过程。
本文内容主要使用JupyterNotebook进行编写代码进行练习。

学习python基础知识,使用jupyter和numpy进行不少于10道题的基础练习

import numpy as np
#创建一个一维ndarray
a=np.array([1,2,3])
print(a)
[1 2 3]
import numpy as np
#创建二维数组
a=np.array([[1,2],[3,4]])
print(a)
[[1 2]
 [3 4]]
import numpy as np
#使用ndmin参数设置数组的最小维度
a=np.array([1,2,3,4,5],ndmin=2)
print(a)
[[1 2 3 4 5]]
import numpy as np
#使用dtype参数设置数组类型为复数
a=np.array([1,2,3],dtype=complex)
print(a)
[1.+0.j 2.+0.j 3.+0.j]
#numpy数据类型的使用
import numpy as np
x=np.float32(5)
print('x为:',x)
print('x对象的data属性为:',x.data)
print('x对象的size属性为:',x.size)
print('x对象的维度属性为:',x.ndim)
y=np.bool_(x)
print('转换为bool类型的x为:',y)
z=np.float16(y)
print('True值转换为float16类型为:',z)
x为: 5.0
x对象的data属性为: <memory at 0x000001FF7710F720>
x对象的size属性为: 1
x对象的维度属性为: 0
转换为bool类型的x为: True
True值转换为float16类型为: 1.0
#使用dtype对象设置数据类型
import numpy as np
x=np.array(5,dtype='float32')
print('a为:',x)
print('x对象的data属性为:',x.data)
print('x对象的size属性为:',x.size)
print('x对象的维数为:',x.ndim)
y=np.array(x,dtype="bool_")
print('转换为bool类型的x为:',y)
z=np.array(y,dtype="float16")
print('True值转换为float16类型为:',z)
a为: 5.0
x对象的data属性为: <memory at 0x000001FF773EED60>
x对象的size属性为: 1
x对象的维数为: 0
转换为bool类型的x为: True
True值转换为float16类型为: 1.0
#使用astype()转换DataFrame
import pandas as pd
df=pd.DataFrame([{'qty':'3','num':'50'},{'qty':'7','num':'20'}])
print(df.dtypes)
print('-------------------------')
print('astype转换后的dtypes')
df['qty']=df['qty'].astype('int')
df['num']=df['num'].astype('float64')
print(df.dtypes)


qty    object
num    object
dtype: object
-------------------------
qty      int32
num    float64
dtype: object
#使用axis参数设置当前轴
import numpy as np
arr=np.array([[0,1,2],[3,4,5]])
print(arr)
print(arr.sum(axis=0))
print(arr.sum(axis=1))

[[0 1 2]
 [3 4 5]]
[3 5 7]
[ 3 12]
#使用reshape函数调整数组的形状
import numpy as np
arr=np.array([0,1,2,3,4,5,6,7])
#显示数组arr的rank
print('秩为:',arr.ndim)
arr3D=arr.reshape(2,2,2)
print(arr3D)
print('秩为:',arr3D.ndim)
秩为: 1
[[[0 1]
  [2 3]]

 [[4 5]
  [6 7]]]
秩为: 3
#显示数组的维度
import numpy as np
a=np.array([[1,2,3],[4,5,6]])
print(a.shape)
(2, 3)
#调整数组大小
import numpy as np
a=np.array([[1,2,3],[4,5,6]])
a.shape=(3,2)
print(a)
#a.shape=(4,2)不能转大,会报错
#print(a)
a.shape=(6,1)
print(a)
a.shape=(1,6)
print(a)
[[1 2]
 [3 4]
 [5 6]]
[[1]
 [2]
 [3]
 [4]
 [5]
 [6]]
[[1 2 3 4 5 6]]
#创建dtype类型数组
import numpy as np
myarr=np.array([1,2,3],dtype=np.float32)
print(myarr.dtype)
float32
#创建一个空数组
import numpy as np
x=np.empty([1,2,3],dtype=int)
print(x)
[[[0 1 2]
  [3 4 5]]]
#创建一个全0数组
import numpy as np
#默认为浮点数
x=np.zeros(5)
print(x)
#设置类型为整型
y=np.zeros((5,),dtype=np.int)
print(y)
#自定义类型
z=np.zeros((2,2),dtype=[('x','i4'),('y','i4')])
print(z)
[0. 0. 0. 0. 0.]
[0 0 0 0 0]
[[(0, 0) (0, 0)]
 [(0, 0) (0, 0)]]

第一章基础练习

print("Run code in this cell!")
Run code in this cell!
# This is the first title
## This is the first title
### This is the first title

效果如下:
在这里插入图片描述

print('Run the code in this cell')
Run the code in this cell

第二章基础练习题

## 第二章基础练习题
str='picture'
print(str[1:3])
print(str[-3:-1])
print(str[3:-1])
print(str[-6:7])
print(str[2:])
print(str*2)
print(str+'test')
ic
ur
tur
icture
cture
picturepicture
picturetest
list = ['a',56,1.13,'hello world',[7,8,9]]
print(list)
print(list[4])
print(list[-1:3])
print(list[1:])
print(type(list),type(list[2]),type(list[4]))
['a', 56, 1.13, 'hello world', [7, 8, 9]]
[7, 8, 9]
[]
[56, 1.13, 'hello world', [7, 8, 9]]
<class 'list'> <class 'float'> <class 'list'>
a=[1,2,3,4,5,6]
print(a)
a[0]=9
print(a)
a.append('我在尾巴上')
print(a)
a[2:5]=[]
print(a)
a.pop(1)
print(a)
[1, 2, 3, 4, 5, 6]
[9, 2, 3, 4, 5, 6]
[9, 2, 3, 4, 5, 6, '我在尾巴上']
[9, 2, 6, '我在尾巴上']
[9, 6, '我在尾巴上']
import random #引入随机数模块,以生成随机数
#定义 fib_loop函数,构造斐波那契数列
def fib_loop(n):
    listNum=[]
    a,b=0,1
    #for结构,循环体重复运行n次
    for i in range(n):
        a,b=b,a+b
        listNum.append(a)
        #print(i,listNum)
    return listNum
listPlan=['吃零食','学习','学习','学习','看电影','学习','旅游','睡觉','学习']
listNum=fib_loop(6)
varIdx=random.randint(0,5)
varRandom=listNum[varIdx]
print('今日计划:',listPlan[varRandom])
        
今日计划: 学习
lis=['蚂蚱','螳螂','蝈蝈','蝗虫','蛐蛐']
#直接遍历
for item in lis:
    print(item)
#按索引遍历
for i in enumerate(lis):
    print(i)
#对于列表类型,还有一种通过下标遍历的方式,如使用range()函数
for i in range(len(lis)):
    print(lis[i])
蚂蚱
螳螂
蝈蝈
蝗虫
蛐蛐
(0, '蚂蚱')
(1, '螳螂')
(2, '蝈蝈')
(3, '蝗虫')
(4, '蛐蛐')
蚂蚱
螳螂
蝈蝈
蝗虫
蛐蛐
#修改字典
dict={'name':'zara','class':'first'}
#添加add
dict['Gender']='femal'
print(dict)
#修改update
dict.update({'name':'tom'})
print(dict)
#通过update增加/修改多个数据源
dict.update({'age':30,'No':'001','class':'second'})
print(dict)
#删除字典元素
del dict['No']
print(dict)
#清空字典元素
dict.clear()
print(dict)
{'name': 'zara', 'class': 'first', 'Gender': 'femal'}
{'name': 'tom', 'class': 'first', 'Gender': 'femal'}
{'name': 'tom', 'class': 'second', 'Gender': 'femal', 'age': 30, 'No': '001'}
{'name': 'tom', 'class': 'second', 'Gender': 'femal', 'age': 30}
{}
#创建集合
var = set()   #或者使用{}进行创建集合
print(var,type(var))
var = {'你好啊','我也好','大家好'}
print(var,type(var))
result = '大家好' in var
print(result)
result = '大家好' not in var
print(result)
#添加删除集合元素
var.add('她好吗')
print(var)
var.remove('大家好')
print(var)
set() <class 'set'>
{'大家好', '你好啊', '我也好'} <class 'set'>
True
False
{'大家好', '她好吗', '你好啊', '我也好'}
{'她好吗', '你好啊', '我也好'}

用Jupyter完成numpy例题练习

import numpy as np
#创建一个一维ndarray
a=np.array([1,2,3])
print(a)
[1 2 3]
import numpy as np
#创建二维数组
a=np.array([[1,2],[3,4]])
print(a)
[[1 2]
 [3 4]]
import numpy as np
#使用ndmin参数设置数组的最小维度
a=np.array([1,2,3,4,5],ndmin=2)
print(a)
[[1 2 3 4 5]]
import numpy as np
#使用dtype参数设置数组类型为复数
a=np.array([1,2,3],dtype=complex)
print(a)
[1.+0.j 2.+0.j 3.+0.j]
#numpy数据类型的使用
import numpy as np
x=np.float32(5)
print('x为:',x)
print('x对象的data属性为:',x.data)
print('x对象的size属性为:',x.size)
print('x对象的维度属性为:',x.ndim)
y=np.bool_(x)
print('转换为bool类型的x为:',y)
z=np.float16(y)
print('True值转换为float16类型为:',z)
x为: 5.0
x对象的data属性为: <memory at 0x000001FF7710F720>
x对象的size属性为: 1
x对象的维度属性为: 0
转换为bool类型的x为: True
True值转换为float16类型为: 1.0
#使用dtype对象设置数据类型
import numpy as np
x=np.array(5,dtype='float32')
print('a为:',x)
print('x对象的data属性为:',x.data)
print('x对象的size属性为:',x.size)
print('x对象的维数为:',x.ndim)
y=np.array(x,dtype="bool_")
print('转换为bool类型的x为:',y)
z=np.array(y,dtype="float16")
print('True值转换为float16类型为:',z)
a为: 5.0
x对象的data属性为: <memory at 0x000001FF773EED60>
x对象的size属性为: 1
x对象的维数为: 0
转换为bool类型的x为: True
True值转换为float16类型为: 1.0
#使用astype()转换DataFrame
import pandas as pd
df=pd.DataFrame([{'qty':'3','num':'50'},{'qty':'7','num':'20'}])
print(df.dtypes)
print('-------------------------')
print('astype转换后的dtypes')
df['qty']=df['qty'].astype('int')
df['num']=df['num'].astype('float64')
print(df.dtypes)


qty    object
num    object
dtype: object
-------------------------
qty      int32
num    float64
dtype: object
#使用axis参数设置当前轴
import numpy as np
arr=np.array([[0,1,2],[3,4,5]])
print(arr)
print(arr.sum(axis=0))
print(arr.sum(axis=1))

[[0 1 2]
 [3 4 5]]
[3 5 7]
[ 3 12]
#使用reshape函数调整数组的形状
import numpy as np
arr=np.array([0,1,2,3,4,5,6,7])
#显示数组arr的rank
print('秩为:',arr.ndim)
arr3D=arr.reshape(2,2,2)
print(arr3D)
print('秩为:',arr3D.ndim)
秩为: 1
[[[0 1]
  [2 3]]

 [[4 5]
  [6 7]]]
秩为: 3
#显示数组的维度
import numpy as np
a=np.array([[1,2,3],[4,5,6]])
print(a.shape)
(2, 3)
#调整数组大小
import numpy as np
a=np.array([[1,2,3],[4,5,6]])
a.shape=(3,2)
print(a)
#a.shape=(4,2)不能转大,会报错
#print(a)
a.shape=(6,1)
print(a)
a.shape=(1,6)
print(a)
[[1 2]
 [3 4]
 [5 6]]
[[1]
 [2]
 [3]
 [4]
 [5]
 [6]]
[[1 2 3 4 5 6]]
#创建dtype类型数组
import numpy as np
myarr=np.array([1,2,3],dtype=np.float32)
print(myarr.dtype)
float32
#创建一个空数组
import numpy as np
x=np.empty([1,2,3],dtype=int)
print(x)
[[[0 1 2]
  [3 4 5]]]
#创建一个全0数组
import numpy as np
#默认为浮点数
x=np.zeros(5)
print(x)
#设置类型为整型
y=np.zeros((5,),dtype=np.int)
print(y)
#自定义类型
z=np.zeros((2,2),dtype=[('x','i4'),('y','i4')])
print(z)
[0. 0. 0. 0. 0.]
[0 0 0 0 0]
[[(0, 0) (0, 0)]
 [(0, 0) (0, 0)]]

用Jupyter完成pandas例题练习

import pandas as pd
print(‘-----------列表创建一个Serise对象----------’)
s=pd.Series([1,2,3,4,5,6])
print(s)
print(‘-----------字典创建一个Serisse对象----------’)
#使用字典创建,索引值为字典的key值
s2=pd.Series({‘longitude’:39,‘latitude’:116,‘temperature’:26})
print(s2[‘latitude’])
print(‘-----------用序列做Serise的索引值----------’)
print(s2[0])


    -----------列表创建一个Serise对象----------
    0    1
    1    2
    2    3
    3    4
    4    5
    5    6
    dtype: int64
    -----------字典创建一个Serisse对象----------
    116
    -----------用序列做Serise的索引值----------
    39
    


```python
#修改Serise数据
s2=pd.Series({'longitude':39,'latitude':116,'temperature':26})
print(s2)
s2['latitude']=199
s2['temperature']+=3
print('--------修改后的数据---------')
print(s2)
#增加对象成员
#s2.append({'address':'重庆交通大学'})#会报错,因为‘重庆交通大学’是一个字符串,不能够被添加进类型为int64的Serise数据
print('--------增加后的数据---------')
s3=pd.Series({'hunmidity':98})
s2.append(s3)
print(s2)
#删除对象成员
print('--------删除后的数据---------')
s2.drop('latitude')
print(s2)
longitude       39
latitude       116
temperature     26
dtype: int64
--------修改后的数据---------
longitude       39
latitude       199
temperature     29
dtype: int64
--------增加后的数据---------
longitude       39
latitude       199
temperature     29
dtype: int64
--------删除后的数据---------
longitude       39
latitude       199
temperature     29
dtype: int64
print("-----从字典数据创建DataFrame对象-----")
import pandas as pd
dict={'col1':[1,2,5,7],'col2':['a','b','c','d']}
df=pd.DataFrame(dict)
df

-----从字典数据创建DataFrame对象-----
-----从列表组成的字典创建DataFrame-----
col1col2
01a
12b
23c
34d
47e
print("-----从列表组成的字典创建DataFrame-----")
import pandas as pd
lista=[1,2,3,4,7]
listb=['a','b','c','d','e']
df=pd.DataFrame({'col1':lista,'col2':listb})
df
-----从列表组成的字典创建DataFrame-----
col1col2
01a
12b
23c
34d
47e
import pandas as pd
import numpy as np
ser=pd.Series(np.arange(4),index=['A','B','C','D'])
data=pd.DataFrame(np.arange(16).reshape(4,4),index=['Bj','Sh','Gz','Sz'],columns=['q','r','s','t'])
print('ser[\'C\']:',ser['C'])
print('ser[2]:',ser[2])
print('data[\'q\']:',data['q'])
print('data[\'q\',\'t\']:',data[['q','t']])
ser['C']: 2
ser[2]: 2
data['q']: Bj     0
Sh     4
Gz     8
Sz    12
Name: q, dtype: int32
data['q','t']:      q   t
Bj   0   3
Sh   4   7
Gz   8  11
Sz  12  15
import pandas as pd
import numpy as np
ser=pd.Series(np.arange(4),index=['A','B','C','D'])
data=pd.DataFrame(np.arange(16).reshape(4,4),index=['Bj','Sh','Gz','Sz'],columns=['q','r','s','t'])
data['q']['Bj']=0
data['t']=0
data['s']['Sz']=0
data
<ipython-input-55-5ff38b1b4d88>:7: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  data['s']['Sz']=0
qrst
Bj0120
Sh4560
Gz89100
Sz121300
#DataFrame增加列
import pandas as pd
import numpy as np
ser=pd.Series(np.arange(4),index=['A','B','C','D'])
data=pd.DataFrame(np.arange(16).reshape(4,4),index=['Bj','Sh','Gz','Sz'],columns=['q','r','s','t'])
data['u']=0
data
qrstu
Bj01230
Sh45670
Gz8910110
Sz121314150
#增加行,需要新建一个dataframe用于存放需要添加的一行,再使用panda的contact函数将两个dataframe进行连接
import pandas as pd
import numpy as np
ser=pd.Series(np.arange(4),index=['A','B','C','D'])
data=pd.DataFrame(np.arange(16).reshape(4,4),index=['Bj','Sh','Gz','Sz'],columns=['q','r','s','t'])
newdata=pd.DataFrame(np.arange(4).reshape(1,4),index=['Cq'],columns=['q','r','s','t'])
pd.concat([data,newdata])

qrst
Bj0123
Sh4567
Gz891011
Sz12131415
Cq0123
#DataFrame对象的行列删除操作
import pandas as pd
import numpy as np
ser=pd.Series(np.arange(4),index=['A','B','C','D'])
data=pd.DataFrame(np.arange(16).reshape(4,4),index=['Bj','Sh','Gz','Sz'],columns=['q','r','s','t'])
data.drop('Sz')#删除一行


st
Bj23
Sh67
Gz1011
Sz1415
#DataFrame对象的行列删除操作
#drop()函数中参数axis,默认为0,0表示删除行,1表示删除列
import pandas as pd
import numpy as np
ser=pd.Series(np.arange(4),index=['A','B','C','D'])
data=pd.DataFrame(np.arange(16).reshape(4,4),index=['Bj','Sh','Gz','Sz'],columns=['q','r','s','t'])
data.drop(['q','r'],axis=1)#删除q列和r列
st
Bj23
Sh67
Gz1011
Sz1415
#DataFrame对象的行列删除操作
#drop()函数中参数inplace是逻辑型,默认为false,表示产生新的对象,原来的DataFrame对象的内容不变
import pandas as pd
import numpy as np
ser=pd.Series(np.arange(4),index=['A','B','C','D'])
data=pd.DataFrame(np.arange(16).reshape(4,4),index=['Bj','Sh','Gz','Sz'],columns=['q','r','s','t'])
data.drop(['Bj','Sh'],inplace=True)
qrst
Gz891011
Sz12131415
#matplotlib

用Jupyter完成matplotlib例题练习

import matplotlib.pyplot as plt
fig=plt.figure()#创建一个画布,
ax1=fig.add_subplot(2,2,1)#在画布上创建子图,可以指定子图的行数列数和标号
ax2=fig.add_subplot(2,2,2)
ax3=fig.add_subplot(2,2,3)
#在子图上绘制图形
rect=plt.Rectangle((0.4,0.25),0.2,0.5,color='r',alpha=0.3)#alpha代表颜色的透明度
ax1.add_patch(rect)
circle=plt.Circle((0.5,0.5),0.2,color='b',alpha=1)
ax2.add_patch(circle)
pgon=plt.Polygon([[0.2,0.25],[0.4,0.75],[0.6,0.25]],color='g',alpha=0.6)
ax3.add_patch(pgon)

在这里插入图片描述

#绘制简单直线图像
import matplotlib.pyplot as plt
import numpy as np
a=np.arange(10)
plt.xlabel('x')
plt.ylabel('y')
plt.plot(a,a*1,a,-a*1.5,a,a*2,a,-a*3,a,(a+2)*5)#绘制曲线可以用plot函数,前两个参数是两个轴的数据,第三个参数是控制曲线的格式字符串,可以选。前面的三个参数可以才一个函数中重复多次写,代表重复划线
plt.legend(['1x','1.5x','2x','3x','5x'])#指定图例
plt.title('simple lines')
plt.show()

在这里插入图片描述

#绘制sin(x)图像
import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(-10,10,1000)#在-10到10之间均匀的取1000个点
y=np.sin(x)
plt.plot(x,y,marker='.')#挨个对xy的坐标用.进行标注

在这里插入图片描述

解释解释什么是“图灵测试"?

图灵肯定机器可以思维的,他还对智能问题从行为主义的角度给出了定义,由此提出一假想:即一个人在不接触对方的情况下,通过一种特殊的方式,和对方进行一系列的问答,如果在相当长时间内,他无法根据这些问题判断对方是人还是计算机,那么,就可以认为这个计算机具有同人相当的智力,即这台计算机是能思维的。这就是著名的“图灵测试
要分辨一个想法是“自创”的思想还是精心设计的“模仿”是非常难的,任何自创思想的证据都可以被否决。图灵试图解决长久以来关于如何定义思考的哲学争论,他提出一个虽然主观但可操作的标准:如果一台电脑表现、反应和互相作用都和有意识的个体一样,那么它就应该被认为是有意识的。
为消除人类心中的偏见,图灵设计了一种“模仿游戏”即图灵测试:远处的人类测试者在一段规定的时间内,根据两个实体对他提出的各种问题的反应来判断是人类还是电脑。通过一系列这样的测试,从电脑被误判断为人的几率就可以测出电脑智能的成功程度。

总结

本文主要介绍了对一些常见的python语法进行练习,并在此基础上逐步学会使用jupyter notebook进行一些简单的数据处理,比如画图,画表格等。经过对本文所介绍的一些内容进行练习,对相关内容一定能够更好的掌握相应的知识。

参考

python基本语法

anaconda及jupyternotebook安装及使用方法

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值