Python数据分析入门笔记

Pandas和Numpy

pandas和numpy都是数据分析中经常用到的库两者功能上有许多不同.

pandas和numpy都是科学计算包

Numpy擅长处理多维数组和矩阵,它常见用于数据分析方向.

Pandas是一个以数据分析而创建的模块,以Numpy为基础,内含许多类和标准化的数据模型和函数.能帮我们高效快速地处理数据集,因此是大数据和机器学习的根基

Numpy在多维数组的应用

运算

数组本身的运算

例1.

data = [1,2,3,4,5,6]
x = np.array(data)#使用列表生成数组
print(x)#打印数组
print(x.dtype)#数组的数据元素的类型
print(x.ndim)#维度的个数
print(x.shape)#各个维度的大小
print(x*2)#数组乘
print(x>2)#数组判断

[1,2,3,4,5,6]
int64
1
(6,)
[2,4,6,8,10,12]
[true,false,false,false,false,false]
两数组之间的运算

numpy两个数组间的运算能直接进行,数组的运算参考线性代数.
例2.

# np.add 这是一个相加函数
data1 = np.array([[1.1,2],[3,4.1],[5.2,6]])
data2 = np.array([[3.1,5],[6,4],[9.8,3]])
print(data1+data2)
print(np.add(data1, data2))

[[  4.2   7. ]
 [  9.    8.1]
 [ 15.    9. ]]
[[  4.2   7. ]
 [  9.    8.1]
 [ 15.    9. ]]

索引

索引的意思也就是查找,就是准确地查找到数组的某个位置的数据.
例3.

#对数组进行乘法和布尔判断运算
x = np.array([1,2,3]) 
print(x*2) 
print(x>2) 

[1 2]
2
2

切片

numpy和pandas都是可以切片的,numpy的切片是连续的,pandas可以进行不连续切片.

numpy切片的过程是从第一个想要的对象到最后一个不想要的对象之前的连续的对象就是最后得到的对象.
相当于是一个左闭右开区间.
接下来是一个具体的例子可以用来理解.
例4.

x = np.array(np.arange(1,9,1))
print(x)
print(x[1:3]) # 右边开区间
print(x[:3]) # 左边默认为 0
print(x[1:])# 右边默认为元素个数
print(x[0:7:2]) #下标递增2

[1 2 3 4 5 6 7 8]
[2 3]
[1 2 3]
[2 3 4 5 6 7 8]
[1 3 5 7]

其他功能

numpy也有重塑和转置数组的功能
x = np.arange(12).reshape(2,3,2).其中(维度数,每个维度的对象个数,递增的跨度),每个参数的意义,其中每个参数相乘最后要等于对象的总个数.
转置函数就是T或者swapaxes.转置后的效果相当于数组的转置,参考线性代数.

Pandas

文件读取

首先导入 pandas 并命名。import padans as pd
文件读取的函数是 pd.read_csv,这代表读取一个文本格式的数据。
读取文件
在Pandas中读取文件,如果文件和代码文件不在同一个文件夹下面,需要输入文件的具体路径.
例1.

import pandas as pd
NACIS2016= pd.read_csv('NACIS2016.csv')

读取文件的部分
例2.

#head函数将帮你调取出前五行数据以便观察这个数据的行列信息
NACIS2016.head()

索引和切片

pandas和numpy有的索引和切片非常的相似,但是比numpy多一些拓展的功能比如说可以进行不连续切片.
pandas的切片和索引有两个函数loc和iloc.

loc函数

loc 函数根据行标的内容进行索引.通过行标签索引行数据.

NACIS2016.loc[0]#loc[0]表示索引的是第1行(index 是整数)
data = [[1,2,3],[4,5,6]]
index = ['d','e']
columns=['a','b','c']
df = pd.DataFrame(data=data, index=index, columns=columns)#loc也可以接受str标签

loc函数同样可以切片,方法跟numpy一样.

iloc函数

iloc 以行所处的位置,也就是行号为基础进行索引,其中的 i 代表 integer,说明这个函数只接受数字。因此,我们要获取哪一行的信 息,就填入那一行对应的数字.iloc不支持str字符,会报错.

loc和iloc对比
例3.

print(NACIS2016.loc[:3, ['Kind of Business','Jan. 2016']])
print(NACIS2016.iloc[:3 , [1,2]] )

                       Kind of Business  Jan. 2016
0                    Motor vehicle and parts dealers      92341
1         Automobile and other motor vehicle dealers      84678
2            Automotive parts, acc., and tire stores       7663
3  Furniture, home furn, electronics, and applian...      17426
                             Kind of Business  Jan. 2016
0             Motor vehicle and parts dealers      92341
1  Automobile and other motor vehicle dealers      84678
2     Automotive parts, acc., and tire stores       7663
总结:loc是根据行标签索引,所以并不遵守左闭右开的规则,而iloc是根据行位来搜索,所以符合python的左闭右开区间.

数据合并

用pandas讲数据合并的时候有三种方法:merge,concat,join.
由于merge和join方法几乎一样,所以这里只讲一下merge和join.
合并方式:
1.inner join(取交集)
2.outer jion(取并集)
3.left jion(向左合并)
4.right jion(向右合并)

merge

merge有两种用法,一种是用左表调用 merge:DataFrame.merge(right, how=‘inner’, on=None, left_on=None, right_on=None),另一种是用pandas 调用 merge:pd.merge(left, right, how=‘inner’, on=None, left_on=None, right_on=None)

DataFrame:DataFrame是Python中Pandas库中的一种数据结构,它类似excel,是一种二维表。
或许说它可能有点像matlab的矩阵,但是matlab的矩阵只能放数值型值(当然matlab也可以用cell存放多类型数据),DataFrame的单元格可以存放数值、字符串等,这和excel表很像。
同时DataFrame可以设置列名columns与行名index,可以通过像matlab一样通过位置获取数据也可以通过列名和行名定位

print(NACIS2016_subset.merge(NACIS2017_subset, how='inner', on = ['NAICS  Code']))#第一种方法
print(pd.merge(NACIS2016_subset, NACIS2017_subset, how='inner', on = ['NAICS  Code']))#第二种方法
concat
Merge 的拼接是横向的,concat 则默认纵向拼接,同时可以设成横向 拼接。但 concat 的横向拼接不如 merge 那么好,所以我们用 concat 主要是纵向拼接。

其语法格式为:pd.concat(objs, axis=0, join=‘outer’)。第一位 是要拼接的数据表格组成的列表,第二位是以什么为轴来拼接,0 是 以行为轴,1 是以列为轴,默认值 0,第三位是合并方式。

pd.concat(objs, axis=0, join=‘outer’)
objs: series,dataframe或者是panel构成的序列lsit
axis: 需要合并链接的轴,0是行,1是列
join:连接的方式 inner,或者outer

#纵向拼接,列名需要一样
df1 = pd.DataFrame({'a':[1, 2, 3], 
                   'b':[1, 2, 3],
                   'c':[1, 2, 3]})
df2 = pd.DataFrame({'a':[1, 2, 3], 
                   'b':[1, 2, 3],
                   'c':[1, 2, 3]})
df3= pd.DataFrame({'a':[1, 2, 3], 
                   'b':[1, 2, 3],
                   'c':[1, 2, 3]})
frames = [df1, df2, df3] # 现将表构成list,然后在作为concat的输入
pd.concat(frames)

	a	b	c
0	1	1	1
1	2	2	2
2	3	3	3
0	1	1	1
1	2	2	2
2	3	3	3
0	1	1	1
1	2	2	2
2	3	3	3
横向拼接NACIS2016_subset, NACIS2017_subset,保留NACIS2016_subset,NACIS2016_subset全部行
frames = [NACIS2016_subset, NACIS2017_subset]
pd.concat(frames, axis=1, join='outer')

横向拼接,concat不如merge方便,且功能局限

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1 目标检测的定义 目标检测(Object Detection)的任务是找出图像中所有感兴趣的目标(物体),确定它们的类别和位置,是计算机视觉领域的核心问题之一。由于各类物体有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具有挑战性的问题。 目标检测任务可分为两个关键的子任务,目标定位和目标分类。首先检测图像中目标的位置(目标定位),然后给出每个目标的具体类别(目标分类)。输出结果是一个边界框(称为Bounding-box,一般形式为(x1,y1,x2,y2),表示框的左上角坐标和右下角坐标),一个置信度分数(Confidence Score),表示边界框中是否包含检测对象的概率和各个类别的概率(首先得到类别概率,经过Softmax可得到类别标签)。 1.1 Two stage方法 目前主流的基于深度学习的目标检测算法主要分为两类:Two stage和One stage。Two stage方法将目标检测过程分为两个阶段。第一个阶段是 Region Proposal 生成阶段,主要用于生成潜在的目标候选框(Bounding-box proposals)。这个阶段通常使用卷积神经网络(CNN)从输入图像中提取特征,然后通过一些技巧(如选择性搜索)来生成候选框。第二个阶段是分类和位置精修阶段,将第一个阶段生成的候选框输入到另一个 CNN 中进行分类,并根据分类结果对候选框的位置进行微调。Two stage 方法的优点是准确度较高,缺点是速度相对较慢。 常见Tow stage目标检测算法有:R-CNN系列、SPPNet等。 1.2 One stage方法 One stage方法直接利用模型提取特征值,并利用这些特征值进行目标的分类和定位,不需要生成Region Proposal。这种方法的优点是速度快,因为省略了Region Proposal生成的过程。One stage方法的缺点是准确度相对较低,因为它没有对潜在的目标进行预先筛选。 常见的One stage目标检测算法有:YOLO系列、SSD系列和RetinaNet等。 2 常见名词解释 2.1 NMS(Non-Maximum Suppression) 目标检测模型一般会给出目标的多个预测边界框,对成百上千的预测边界框都进行调整肯定是不可行的,需要对这些结果先进行一个大体的挑选。NMS称为非极大值抑制,作用是从众多预测边界框中挑选出最具代表性的结果,这样可以加快算法效率,其主要流程如下: 设定一个置信度分数阈值,将置信度分数小于阈值的直接过滤掉 将剩下框的置信度分数从大到小排序,选中值最大的框 遍历其余的框,如果和当前框的重叠面积(IOU)大于设定的阈值(一般为0.7),就将框删除(超过设定阈值,认为两个框的里面的物体属于同一个类别) 从未处理的框中继续选一个置信度分数最大的,重复上述过程,直至所有框处理完毕 2.2 IoU(Intersection over Union) 定义了两个边界框的重叠度,当预测边界框和真实边界框差异很小时,或重叠度很大时,表示模型产生的预测边界框很准确。边界框A、B的IOU计算公式为: 2.3 mAP(mean Average Precision) mAP即均值平均精度,是评估目标检测模型效果的最重要指标,这个值介于0到1之间,且越大越好。mAP是AP(Average Precision)的平均值,那么首先需要了解AP的概念。想要了解AP的概念,还要首先了解目标检测中Precision和Recall的概念。 首先我们设置置信度阈值(Confidence Threshold)和IoU阈值(一般设置为0.5,也会衡量0.75以及0.9的mAP值): 当一个预测边界框被认为是True Positive(TP)时,需要同时满足下面三个条件: Confidence Score > Confidence Threshold 预测类别匹配真实值(Ground truth)的类别 预测边界框的IoU大于设定的IoU阈值 不满足条件2或条件3,则认为是False Positive(FP)。当对应同一个真值有多个预测结果时,只有最高置信度分数的预测结果被认为是True Positive,其余被认为是False Positive。 Precision和Recall的概念如下图所示: Precision表示TP与预测边界框数量的比值 Recall表示TP与真实边界框数量的比值 改变不同的置信度阈值,可以获得多组Precision和Recall,Recall放X轴,Precision放Y轴,可以画出一个Precision-Recall曲线,简称P-R
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值