python学习—第一步—Python小白逆袭大神(第三天)

人工智能常用python库

numpy——科学计算库

是使用Python进行科学计算的基础软件包,包含强大的N维数组对象和向量运算。

数组创建(list,tuple,初始占位符)

  1. 使用array函数从列表list或元组tuple中创建数组。

  2. 能够创建具有初始占位符的函数(zeros、ones、empty)

    (1)numpy.zeros(shape, dtype=float, order=‘C’)

​ 形状:整数或整数元组,定义数组的尺寸。

​ dtype(可选):数据类型,默认为numpy.float64。

​ 顺序(可选):{‘C’, ‘F’},定义在内存中存储数据的顺序,,即行主要(C样式)或列主要(Fortran样式)

​ (2)numpy.ones:可以创建指定长度或者形状的全1数组

​ (3)empty():创建一个数组,其初始内容是随机的,取决于内存的状态

​ (4)arange():创建一个数组,内容是数字,可定义步长

​ (5)reshape():重新定义数组的形状

​ (6)数组的属性(维度、形状、元素个数、元素类型)

数组计算

不用编写循环即可对数据执行批量运算。这通常叫做矢量化(vectorization)。

大小相等的数组之间的任何算术运算都会将运算应用到元素级。同样,数组与标量的算术运算也会将那个标量值传播到各个元素。

1、基本运算(加减乘除幂):行数列数相同,其中数据直接计算

2、矩阵乘法dot(第一个列数等于第二个行数)

3、单个矩阵其它运算有:求和、最大最小值及其下标、均值、转置、多维变一维

sum max min argmin argmax mean tranpose() flatten()

数组索引与切片

取数组的行(列)、某行某列的元素、一行的部分列

pandas——数据分析库

是建立在numpy基础上的高效数据分析处理库,常与numpy和matplotlib一同使用。

核心数据结构有两个。

Series-键值对(键可重复)

Series是一种类似于一维数组的对象,它由一维数组(各种numpy数据类型)以及一组与之相关的数据标签(即索引)组成。

1、使用列表和字典实例化

2、可指定索引、获取值和索引

3、可通过索引(列表)获取单个或一组值

4、可进行加减乘除幂的运算

import numpy as np
a=['a','b','c','d','e']
b=[100,200,100,400,500]
s=pd.Series(a,index=b)
print(s)
print(type(s))
dic={'a':1,'b':2}
print(pd.Series(dic))
print(s.values)
print(s.index)
print(s[100,400])

-------------------------------------
import pandas as pd
s = pd.Series(np.array([1,2,3,4,5]), index=['a', 'b', 'c', 'd', 'e'])
print(s+s)
print(s*s)
print(s**3)
1、实例化
100    a
200    b
100    c
400    d
500    e
dtype: object
<class 'pandas.core.series.Series'>
a    1
b    2
dtype: int64
2、获取值和索引
['a' 'b' 'c' 'd' 'e']
Int64Index([100, 200, 100, 400, 500], dtype='int64')
3、通过索引获取值
100    a
100    c
dtype: object
400    d
100    a
100    c
dtype: object
4、加减乘除运算
a     2
b     4
c     6
d     8
e    10
dtype: int32
a     1
b     4
c     9
d    16
e    25
dtype: int32
a      1
b      8
c     27
d     64
e    125
dtype: int32

5、数据对齐

在算术运算中自动对齐不同索引的数据,Series 和多维数组的主要区别在于, Series 之间的操作会自动基于标签对齐数据。因此,不用顾及执行计算操作的 Series 是否有相同的标签。
obj1 = pd.Series({"Ohio": 35000, "Oregon": 16000,  "Utah": 5000})
print(obj1)
obj2 = pd.Series({"California": np.nan, "Ohio": 35000, "Oregon": 16000, })
print(obj2)
print(obj1 + obj2)
Ohio      35000
Oregon    16000
Utah       5000
dtype: int64
California        NaN
Ohio          35000.0
Oregon        16000.0
dtype: float64
California        NaN
Ohio          70000.0
Oregon        32000.0
Utah              NaN
dtype: float64

6、索引和切片

s = pd.Series(np.array([1,2,3,4,5]), index=['a', 'b', 'c', 'd', 'e'])
print(s[1:])
print(s[1:] + s[:-1])
b    2
c    3
d    4
e    5
dtype: int32
a    NaN
b    4.0
c    6.0
d    8.0
e    NaN
dtype: float64

DateFrame(可行列索引)

DataFrame是一个表格型的数据结构,类似于Excel或sql表,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等),DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共用同一个索引)。

1、使用多维数组字典、列表字典、Series字典生成

data = {'state': ['Ohio', 'Nevada', 'Nevada'], 'year': [2000,2001, 2002], 'pop': [1.5, 2.4, 2.9]}
frame = pd.DataFrame(data)
print(frame)
print(type(frame))
d = {'one': pd.Series([1., 2., 3.], index=['a', 'b', 'c']),
     'two': pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])}
print(pd.DataFrame(d))
执行结果:
    state  year  pop
0    Ohio  2000  1.5
1  Nevada  2001  2.4
2  Nevada  2002  2.9
<class 'pandas.core.frame.DataFrame'>
   one  two
a  1.0  1.0
b  2.0  2.0
c  3.0  3.0
d  NaN  4.0

2、可指定列索引顺序

frame2 = pd.DataFrame(data, columns=['year', 'state', 'pop', 'debt'], index=['one', 'two', 'three'])
print(frame2)
执行结果:
       year   state  pop debt
one    2000    Ohio  1.5  NaN
two    2001  Nevada  2.4  NaN
three  2002  Nevada  2.9  NaN

3、可以列名为索引获取值

print(d['one'])
a    1.0
b    2.0
c    3.0
dtype: float64

4、一列值的修改

frame2['debt'] = 16.5
print(frame2)
frame2['new'] = frame2['debt' ]* frame2['pop'] 
print(frame2)
执行结果:
       year   state  pop  debt    new
one    2000    Ohio  1.5  16.5  24.75
two    2001  Nevada  2.4  16.5  39.60
three  2002  Nevada  2.9  16.5  47.85
       year   state  pop  debt    new
one    2000    Ohio  1.5  16.5  24.75
two    2001  Nevada  2.4  16.5  39.60
three  2002  Nevada  2.9  16.5  47.85

Matplotlib——绘制二维图形库

是一个主要用于绘制二维图形的Python库,由各种可视化类构成,内部结构复杂。matplotlib.pylot是绘制各类可视化图形的命令字库。

1、绘制折线图(y是关于x的函数)

import matplotlib.pyplot as plt
import numpy as np 
x = np.linspace(-1,1,50) #等差数列
y1 = 2*x + 1
y2 = x**2
plt.figure()#生成画布
plt.plot(x,y1)
plt.figure(figsize=(7,5))
plt.plot(x,y2)
plt.show()

2、绘制不同的y1、y2

import matplotlib.pyplot as plt
import numpy as np 

plt.figure(figsize=(7,5))
plt.plot(x,y1,color='red',linewidth=1)
plt.plot(x,y2,color='blue',linewidth=5)
plt.xlabel('x',fontsize=20)
plt.ylabel('y',fontsize=20)
plt.show()

l1, = plt.plot(x,y1,color='red',linewidth=1)
l2, = plt.plot(x,y2,color='blue',linewidth=5)
plt.legend(handles=[l1,l2],labels=['aa','bb'],loc='best')#图例
plt.xlabel('x')
plt.ylabel('y')
plt.xlim((0,1))  #x轴只截取一段进行显示
plt.ylim((0,1))  #y轴只截取一段进行显示
plt.show()

3、散点图

dots1 =np.random.rand(50)
dots2 =np.random.rand(50)
plt.scatter(dots1,dots2,c='red',alpha=0.5) #c表示颜色,alpha表示透明度
plt.show()

4、柱状图

x = np.arange(10)
y = 2**x+10
plt.bar(x,y,facecolor='#9999ff',edgecolor='white')#柱状图的柱有里面的颜色和外面的框框
plt.show()

x = np.arange(10)
y = 2**x+10
plt.bar(x,y,facecolor='#9999ff',edgecolor='white')
for ax,ay in zip(x,y):
    plt.text(ax,ay,'%.1f' % ay,ha='center',va='bottom')#显示值
plt.show()

PIL库——图像处理库

PIL库是一个具有强大图像处理能力的第三方库。图像的组成:由RGB三原色组成,RGB图像中,一种彩色由R、G、B三原色按照比例混合而成。0-255区分不同亮度的颜色。图像的数组表示:图像是一个由像素组成的矩阵,每个元素是一个RGB值。

1、读取图像并获取图像相关参数

from PIL import Image
import matplotlib.pyplot as plt
img = Image.open('F:/图片/壁纸/2000953.jpg')
plt.imshow(img)
plt.show(img)
print(img.mode)
a,b=img.size
print(img.size)

可以使用 img.show()显示图片,但是它调用的是计算机上显示图片的工具,等同于在计算机打开图片。

2、图片旋转rotate()、剪切crop()、缩放resize()、transpose左右旋转transpose(Img.FLIP_LEFT_RIGHT)、上下旋转(Img.FLIP_TOP_BOTTOM)

from PIL import Image
import matplotlib.pyplot as plt
img = Image.open('F:/图片/壁纸/2000953.jpg')
img1=img.rotate(50)
plt.imshow(img1)
plt.show(img1)

img_crop_result = img.crop((100,200,500,800))
#crop()四个参数分别是:(左上角点的x坐标,左上角点的y坐标,右下角点的x坐标,右下角点的y坐标)
plt.imshow(img_crop_result)
plt.show(img_crop_result)

#缩放,长和宽到原来的0.6倍,Image.ANTIALIAS:尽量高质量地缩放
img_resize_result = img.resize((int(a*0.4),int(b*0.4)),Image.ANTIALIAS)
plt.imshow(img_resize_result)
plt.show(img_resize_result)

#左右镜像
img_lr = img.transpose(Image.FLIP_LEFT_RIGHT)
#左右旋转
#展示左右镜像图片
plt.imshow(img_lr)  
plt.show(img_lr)   
#上下镜像
img_bt = img.transpose(Image.FLIP_TOP_BOTTOM)
#上下旋转
#展示上下镜像图片
plt.imshow(img_bt)  
plt.show(img_bt)

计算机视觉领域应用

  • 数据增强

    • 深度神经网络一般需要大量的训练数据才能获得比较理想的结果。

      数据量有限时,可以通过数据增强来增加训练样本的多样性。

      例如:反转、噪声(random)、旋转、裁剪、缩放、模糊等

      随机亮度调整

  • 训练过程可视化

    • 误差与准确率变化趋势图绘制
  • 数据可视化分析

作业

区域分布柱状图

1、获取数据

import matplotlib.pyplot as plt
import numpy as np 
import json
import matplotlib.font_manager as font_manager
%matplotlib inline
with open('20200422.json', 'r', encoding='UTF-8') as file:
         json_array = json.loads(file.read())
zones = []
for star in json_array:
    zone = star['zone']
    zones.append(zone)
print(len(zones))
print(zones)
zone_list = []
count_list = []
for zone in zones:
    if zone not in zone_list:
        count = zones.count(zone)
        zone_list.append(zone)
        count_list.append(count)
print(zone_list)
print(count_list)

​ 或者

df = pd.read_json('20200422.json')
grouped=df['name'].groupby(df['zone'])
s = grouped.count()
zone_list = s.index
count_list = s.values

​ 2、画图

# 设置显示中文
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
plt.figure(figsize=(20,15))
plt.bar(range(len(count_list)), count_list,color='r',tick_label=zone_list,facecolor='#9999ff',edgecolor='white')
# 这里是调节横坐标的倾斜度,rotation是度数,以及设置刻度字体大小
plt.xticks(rotation=45,fontsize=20)
plt.yticks(fontsize=20)
plt.legend()
plt.title('''《青春有你2》参赛选手''',fontsize = 24)
plt.show()

饼状图绘制

1、获取数据

import matplotlib.pyplot as plt
import numpy as np
import json
import matplotlib.font_manager as font_manager
%matplotlib inline
df = pd.read_json('20200422.json')
grouped=df['name'].groupby(df['weight'])
s = grouped.count()
weight_list = s.index
count_list = s.values
print(weight_list)
print(count_list)
执行结果:
Index(['40kg', '41kg', '42kg', '43kg', '44kg', '45kg', '46kg', '47kg',
       '48.5kg', '48kg', '49kg', '50kg', '51.5kg', '51kg', '52.5kg', '52kg',
       '53kg', '54kg', '55kg', '56kg', '58kg', '59kg'],
      dtype='object', name='weight')
[ 2  1  4  4  9  5 12 11  1 19 11 12  1  3  1  4  1  2  1  2  2  1]

2、数据分析

weight=['<=45kg','45~50kg','50~55kg','>55kg']
counts=[0,0,0,0]
for w in range(len(weight_list)):
    if weight_list[w]<='45kg':
        counts[0]=counts[0]+count_list[w]
    elif weight_list[w]>'45kg' and weight_list[w]<='50kg':
        counts[1]=counts[1]+count_list[w]
    elif weight_list[w]>'50kg' and weight_list[w]<='55kg':
        counts[2]=counts[2]+count_list[w]
    else:
        counts[3]=counts[3]+count_list[w]
print(counts)
执行结果:
[25, 66, 13, 5]

3、饼状图绘制

plt.rcParams['font.sans-serif']=['SimHei']
ex=[0,0,0.1,0]
plt.pie(counts,labels=weight,autopct="(%1.1f%%)",explode=ex)
#explode:每个饼块相对于饼圆半径的偏移距离,取值为小数。形式为类1维数组结构,值越大偏移距离越远。
plt.title('''《青春有你2》参赛选手体重饼状图''',fontsize = 24)
plt.show()

题外话:这两天感觉Typora这个记笔记的软件不错,直接在那里记笔记了,图片什么的复制不过来,不搞了就

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值