测试工具开发 - 数据分析及可视化

1
2
3
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
}

一、csv库

Python 天生支持读取 CSV 格式数据并且是可配置的(这个我们看到是必不可少的)。

在 Python 里边有个模块 csv ,它包含了 CSV 读取/生成所需的所有支持,并且它遵守 RFC 标准(除非你覆盖了相应的配置),因此默认情况下它是能够读取和生成合法的 CSV 文件

创建一个像常规编写器一样操作的对象,但将字典映射到输出行。的字段名的参数是一个sequence标识,其中在传递给字典值的顺序按键的writerow()方法被写入到文件中

二、 pandas 使用方法

对于数据科学家,无论是数据分析还是数据挖掘来说,Pandas是一个非常重要的Python包。

它不仅提供了很多方法,使得数据处理非常简单,同时在数据处理速度上也做了很多优化,使得和Python内置方法相比时有了很大的优势。

1. 导入数据

  • pd.read_csv(filename):从CSV文件导入数据
  • pd.read_table(filename):从限定分隔符的文本文件导入数据
  • pd.read_excel(filename):从Excel文件导入数据
  • pd.read_sql(query, connection_object):从SQL表/库导入数据
  • pd.read_json(json_string):从JSON格式的字符串导入数据
  • pd.read_html(url):解析URL、字符串或者HTML文件,抽取其中的tables表格
  • pd.read_clipboard():从你的粘贴板获取内容,并传给read_table()
  • pd.DataFrame(dict):从字典对象导入数据,Key是列名,Value是数据

输出数据、增、删、查、改

2. 查看、检查数据

df:任意的Pandas DataFrame对象【比如pd的返回值】

s:任意的Pandas Series对象

  • df.head(n):查看DataFrame对象的前n行
  • df.tail(n):查看DataFrame对象的最后n行
  • df.shape():查看行数和列数
  • df.info():查看索引、数据类型和内存信息
  • df.describe():查看数值型列的汇总统计 s.
  • s.value_counts(dropna=False):查看Series对象的唯一值和计数
  • df.apply(pd.Series.value_counts):查看DataFrame对象中每一列的唯一值和计数
  • df.dropna()#删除包含缺失值的行
  • df[[“a”,”b”]] #直接取出对应a ,b的列数据
  • df.iloc:切位置,以序列号去切 df.iloc[:10]
1
2
3
4
5
6
7
8
import pandas as pd
RAW_DATA_DIR = 'data_raw/'
##将一个或多个路径正确地连接起来
sample_tsv_path = os.path.join(RAW_DATA_DIR, 'normal_1/airsim_rec.txt')
#读取数据
sample_tsv = pd.read_csv(sample_tsv_path, sep='\t')
#查看数据
sample_tsv.head()

三、Matplotlib画图

在使用Matplotlib画图时,我遇到了一个尴尬的情况,那就是当x轴的标签名字很长的时候,在绘制图形时,发生了x轴标签互相

重叠的情况。本文主要通过一个简单的示例,探索了以上描述问题的4种解决方法。

示例:

1
2
3
4
5
6
7
import pandas as pd
import matplotlib.pyplot as plt
# 准备数据
data = {'sport_type':['running', 'walking', 'variable speed running', 'variable speed walking', 'swimming'], 'score':[88, 55, 68, 77, 80]}
df = pd.DataFrame(data)
# 绘制图形
plt.bar(df['sport_type'], df['score'])

绘图结果:

img

在使用上述数据进行绘图的时候,就出现了本文一开始描述的问题,我们可以从柱状图看到,除了第1个x轴标签之外,后面4个都发生了重叠。

1. 拉长画布

既然x轴标签是由于横向空间不足,导致发生了重叠,那么,我们只需要将图形的横向空间拉长即可,也就是设置一个更大的画布。

1
2
fig = plt.figure(figsize=(12,4))    # 设置画布大小
plt.bar(df['sport_type'], df['score'])

绘图结果:

img

2. 调整标签字体大小

方法二是方法一的逆向思路,既然可以调大画布,那么反过来,我们也可以调小x轴标签字体。

1
2
plt.tick_params(axis='x', labelsize=8)    # 设置x轴标签大小
plt.bar(df['sport_type'], df['score'])

绘图结果:

img

3. 横纵颠倒

只要我们将纵向柱状图改成横向柱状图,那么就不会存在这种问题。

1
plt.barh(df['sport_type'], df['score'])    # 绘制横向柱状图

img

4. 标签旋转

我们只需要将x轴的标签旋转一定的角度,就可以让其不再发生重叠。

1
2
plt.bar(df['sport_type'], df['score'])
plt.xticks(rotation=-15) # 设置x轴标签旋转角度

绘图结果:

img

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import numpy as np
import matplotlib.pyplot as plt

plt.figure('正弦曲线') # 调用figure函数创建figure(1)对象,可以省略,这样那plot时,它就自动建一个啦;

t = np.arange(0.0, 4.0, 0.1)
s = np.sin(np.pi*t)
plt.plot(t, s, 'g--o', label = 'sinx')

plt.legend() # 显示右上角的那个label,即上面的label = 'sinx'
plt.xlabel('time (s)') # 设置x轴的label,pyplot模块提供了很直接的方法,内部也是调用的上面当然讲述的面向对象的方式来设置;
plt.ylabel('voltage (mV)') # 设置y轴的label;
#plt.xlim(-1,3) # 可以自己设置x轴的坐标的范围哦;
#plt.ylim(-1.5,1.5)
plt.title('About as simple as it gets, folks')
plt.grid(True) # 显示网格;

plt.show()

四、matplotlib.pyplot.text()

1
2
matplotlib.pyplot.text(x, y, s, fontdict=None, withdash=False, **kwargs)
1

通过函数方式,向a x e s axesaxe**s对象添加t e x t texttex**t对象,确切的说是向a x e s axesaxe**s的( x , y ) (x,y)(x,y)位置添加s ss文本。返回一个text实例。

参数详解

  1. x, y : scalars 防止text的位置

  2. s : str 内容text

  3. fontdict : dictionary, optional, default: None 一个定义s格式的dict

  4. withdash : boolean, optional, default: False。如果True则创建一个 TextWithDash实例。

    以下为其他常用参数1

  5. fontsize设置字体大小,默认12,可选参数 [‘xx-small’, ‘x-small’, ‘small’, ‘medium’, ‘large’,‘x-large’, ‘xx-large’]

  6. fontweight设置字体粗细,可选参数 [‘light’, ‘normal’, ‘medium’, ‘semibold’, ‘bold’, ‘heavy’, ‘black’]

  7. fontstyle设置字体类型,可选参数[ ‘normal’ | ‘italic’ | ‘oblique’ ],italic斜体,oblique倾斜

  8. verticalalignment设置水平对齐方式 ,可选参数 : ‘center’ , ‘top’ , ‘bottom’ ,‘baseline’

  9. horizontalalignment设置垂直对齐方式,可选参数:left,right,center

  10. rotation(旋转角度)可选参数为:vertical,horizontal 也可以为数字

  11. alpha透明度,参数值0至1之间

  12. backgroundcolor标题背景颜色

  13. bbox给标题增加外框 ,常用参数如下:

    1. boxstyle方框外形
    2. facecolor(简写fc)背景颜色
    3. edgecolor(简写ec)边框线条颜色
    4. edgewidth边框线条大小

五、设置图的pylab样式

我们在使用matplotliblib画图的时候经常会遇见中文或者是负号无法显示的情况,我们会添加下面两句话:

1
2
3
4
5
from matplotlib.pylab import mpl

mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus']=False
12345

实际上,pylot使用rc配置文件来自定义图形的各种默认属性,称之为rc配置或rc参数。通过rc参数可以修改默认的属性,包括窗体大小、每英寸的点数、线条宽度、颜色、样式、坐标轴、坐标和网络属性、文本、字体等。

设置相关的配置

方法一:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
matplotlib.rcParams[‘figure.figsize’]   #图片像素
matplotlib.rcParams[‘savefig.dpi’] #分辨率
plt.savefig(‘plot123_2.png’, dpi=200) #指定分辨率
plt.rcParams['savefig.dpi'] = 300 #图片像素
plt.rcParams['figure.dpi'] = 300 #分辨率
# 默认的像素:[6.0,4.0],分辨率为100,图片尺寸为 600&400
# 指定dpi=200,图片尺寸为 1200*800
# 指定dpi=300,图片尺寸为 1800*1200
# 设置figsize可以在不改变分辨率情况下改变比例

plt.rcParams['figure.figsize'] = (5.0, 4.0) # 显示图像的最大范围
plt.rcParams['image.interpolation'] = 'nearest' # 差值方式,设置 interpolation style
plt.rcParams['image.cmap'] = 'gray' # 灰度空间


#设置rc参数显示中文标题
#设置字体为SimHei显示中文
plt.rcParams['font.sans-serif'] = 'SimHei'
#设置正常显示字符
plt.rcParams['axes.unicode_minus'] = False
#设置线条样式
plt.rcParams['lines.linestyle'] = '-.'
#设置线条宽度
plt.rcParams['lines.linewidth'] = 3
123456789101112131415161718192021222324

方法二:

1
2
3
4
5
6
为了方便配置,可以使用rc函数,下面的例子同时配置点标识符、线宽和颜色:

matplotlib.rc(“lines”, marker=”x”, linewidth=2, color=”red”)
如果希望恢复到缺省的配置(matplotlib载入时从配置文件读入的配置)的话,可以调用 rcdefaults 函数。

12345

恢复默认参数

1
2
3
4

matplotlib.rcdefaults()
如果手工修改了配置文件,希望重新从配置文件载入最新的配置的话,可以调用:
12

更新参数

1
matplotlib.rcParams.update( matplotlib.rc_params() )

六、zip() 函数

用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。

如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。

zip 方法在 Python 2 和 Python 3 中的不同:在 Python 3.x 中为了减少内存,zip() 返回的是一个对象。如需展示列表,需手动 list() 转换。

如果需要了解 Pyhton3 的应用,可以参考 Python3 zip()

语法

zip 语法:

1
zip([iterable, ...])

参数说明:

  • iterabl — 一个或多个迭代器;

返回值

返回元组列表。

实例

以下实例展示了 zip 的使用方法:

1
2
3
4
5
6
a = [1,2,3]
b = [4,5,6]
c = [4,5,6,7,8]
zipped = zip(a,b) # 打包为元组的列表 [(1, 4), (2, 5), (3, 6)]
zip(a,c) # 元素个数与最短的列表一致 [(1, 4), (2, 5), (3, 6)]
zip(*zipped) # 与 zip 相反,*zipped 可理解为解压,返回二维矩阵式 [(1, 2, 3), (4, 5, 6)]

七、例名词解读

1、总股本

表示股票数量总和,包括流通股本和非流通股本。一家公司的股本一般不是固定不变的,比如当公司股价上涨到一定程度时,由于每股的价格比较高导致不易流通,则可以通过拆股的方式增加股本,此时股民手中的股票总价值不变,只是每股价值变小了。

某些公司可能同时在 A 股和港股(H股)上市,则总股本为 A 股股本加上港股股本。

2、总市值

即总股本 * 每股价格,表示股份制公司的股票总价值。同样,对于 AH 股,总市值等于 A 股市值加上 H 股市值。

3、流通股

即流通股本,表示能够在股票市场交易的股票总数。流通股比例大,股票的流通性就比较强,庄家就不易控盘,同时该股不易成为黑马。相反,流通股比例比较小,庄家就很容易吸筹建仓,能快速拉升股价,成为黑马的机率较大。如果在没庄家的介入的前提下,流通股本比例大的股票价格波动相对要小一些。

4、流通值

即流通市值,计算方法是流通股本*每股价格。

5、市盈率

英文全称 Price to Earning Ratio,简称 PE。计算方法为公司总市值 / 一年净利润,也可以用每股价格/每股利润,所以也叫“股价收益比率”。由于“一年净利润”中的“一年”可以有不同的定义,因此市盈率又分为以下几种。

  1. 静态市盈率:PE(静),以当前总市值,除以过去一年的净利润。反映了去年企业的经营状况及基于去年业绩的当前公司估值情况,是股票软件中经常出现的指标。
  2. 滚动市盈率:PE(TTM) ,以当前总市值,除以过去十二个月(TTM 意思为 Trailing Twelve Months)的净利润。反映了过去十二个月企业的真实盈利状况,是对上市公司实时估值的反映。
  3. 动态市盈率:PE(动),是指以当前总市值,除以预估今年全年的净利润。

市场广泛谈及市盈率通常指的是静态市盈率,通常用来作为比较不同价格的股票是否被高估或者低估的指标。 市盈率反映了在每股盈利不变的情况下,当派息率为 100%,并且所得股息没有进行再投资的条件下,经过多少年投资可以通过股息全部收回。一般情况下,一支股票市盈率越低,市价相对于股票的盈利能力越低,表明投资回收期越短,投资风险就越小,股票的投资价值就越大;反之则结论相反。当公司亏损即净利润为负数的时候,无法计算市盈率。

6、市净率

英文全称为 Price-to-Book Ratio,简称 PB,计算公式为公司总市值 / 所有者权益,也即每股股价除以每股净资产。

股票净值是决定股票市场价格走向的主要根据。上市公司的每股内含净资产值高而每股市价不高的股票,即市净率越低的股票,其投资价值越高,相反则投资价值就越小。但在判断投资价值时还要考虑当时的市场环境以及公司经营情况、盈利能力等因素。

市净率能够较好地反映出”有所付出,即有回报”,它能够帮助投资者寻求哪个上市公司能以较少的投入得到较高的产出,对于大的投资机构,它能帮助其辨别投资风险。

这里要指出的是:市净率不适用于短线炒作,提高获利能力。

市净率可用于投资分析。每股净资产是股票的本身价值,它是用成本计量的,而每股市价是这些资产的现在价格,它是证券市场上交易的结果。市价高于价值时企业资产的质量较好,有发展潜力,反之则资产质量差,没有发展前景。优质股票的市价都超出每股净资产许多,一般说来市净率达到 3 可以树立较好的公司形象。市价低于每股净资产的股票,就像售价低于成本的商品一样,属于”处理品”。当然,”处理品”也不是没有购买价值,问题在于该公司今后是否有转机,或者购入后经过资产重组能否提高获利能力,是市价与每股净资产之间的比值,比值越低意味着风险越低。

市净率的作用还体现在可以作为确定新发行股票初始价格的参照标准。如果股票按照溢价发行的方法发行的话,要考虑按市场平均投资潜力状况来定溢价幅度,这时股市各种类似股票的平均市盈率便可作为参照标准。

7、股息和股息率

股息就是股票的利息,是指股份公司从提取了公积金、公益金的税后利润中按照股息率派发给股东的收益。股息(TTM)指的是过去十二个月的股息。

股息率,是一年总股息与当时市价的比例,也即每股股息 / 每股股价。股息率(TTM)则为过去 12 个月的股息率。

股息率越高说明公司越愿意把挣来的利润分给股东。

8、ROA

资产回报率,是用来衡量每单位资产创造出多少利润的指标。计算方法通常为税后净营业利润 / 平均资产。

9、ROE

净资产收益率,一般用于衡量一家公司运用自由资本的效率。计算方法通常为净收入 / 平均股本。

10、换手率

当日股票转手买卖的频率,计算公式为成交量 / 流通股本。通常换手率越高意味着股价可能起伏较大。

11、振幅

股票开盘后的当日最高价和最低价之间的差的绝对值与昨日收盘价的百分比,它在一定程度上表示股票的活跃程度。

12、每手

即每手股数。股票一手是证券市场的一个交易的最低限额,每个市场的规定不一样。A 股一手固定为 100 股;港股则不固定,可以是任意股数;美股则每手固定为 1 股。

  • 一个app注册的时候需要身份证
  • 你上传身份证2面
  • 识别算法(算法组 开发组)
  • 测试人员需要这个身份证上传功能--有识别率的测试点
  • 测试只能一个个手动去测试---反馈工作量特别大
  • 有没有工具可以提供效率
  • 需要开发组开发一个工具(测试开发来做)
  • 测试开发工具开发。。。。。。。