8.数据分析及可视化
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]
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 种解决方法。
示例:
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'])
绘图结果:
在使用上述数据进行绘图的时候,就出现了本文一开始描述的问题,我们可以从柱状图看到,除了第 1 个 x 轴标签之外,后面 4 个都发生了重叠。
1. 拉长画布
既然 x 轴标签是由于横向空间不足,导致发生了重叠,那么,我们只需要将图形的横向空间拉长即可,也就是设置一个更大的画布。
fig = plt.figure(figsize=(12,4)) # 设置画布大小
plt.bar(df['sport_type'], df['score'])
绘图结果:
2. 调整标签字体大小
方法二是方法一的逆向思路,既然可以调大画布,那么反过来,我们也可以调小 x 轴标签字体。
plt.tick_params(axis='x', labelsize=8) # 设置x轴标签大小
plt.bar(df['sport_type'], df['score'])
绘图结果:
3. 横纵颠倒
只要我们将纵向柱状图改成横向柱状图,那么就不会存在这种问题。
plt.barh(df['sport_type'], df['score']) # 绘制横向柱状图
4. 标签旋转
我们只需要将 x 轴的标签旋转一定的角度,就可以让其不再发生重叠。
plt.bar(df['sport_type'], df['score'])
plt.xticks(rotation=-15) # 设置x轴标签旋转角度
绘图结果:
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()
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 实例。
参数详解
x, y : scalars 防止 text 的位置
s : str 内容 text
fontdict : dictionary, optional, default: None 一个定义 s 格式的 dict
withdash : boolean, optional, default: False。如果 True 则创建一个
TextWithDash
实例。以下为其他常用参数1:
fontsize
设置字体大小,默认 12,可选参数 [‘xx-small’, ‘x-small’, ‘small’, ‘medium’, ‘large’,‘x-large’, ‘xx-large’]fontweight
设置字体粗细,可选参数 [‘light’, ‘normal’, ‘medium’, ‘semibold’, ‘bold’, ‘heavy’, ‘black’]fontstyle
设置字体类型,可选参数[ ‘normal’ | ‘italic’ | ‘oblique’ ],italic 斜体,oblique 倾斜verticalalignment
设置水平对齐方式 ,可选参数 : ‘center’ , ‘top’ , ‘bottom’ ,‘baseline’horizontalalignment
设置垂直对齐方式,可选参数:left,right,centerrotation
(旋转角度)可选参数为:vertical,horizontal 也可以为数字alpha
透明度,参数值 0 至 1 之间backgroundcolor
标题背景颜色bbox
给标题增加外框 ,常用参数如下:boxstyle
方框外形facecolor
(简写 fc)背景颜色edgecolor
(简写 ec)边框线条颜色edgewidth
边框线条大小
五、设置图的 pylab 样式
我们在使用 matplotliblib 画图的时候经常会遇见中文或者是负号无法显示的情况,我们会添加下面两句话:
from matplotlib.pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus']=False
12345
实际上,pylot 使用 rc 配置文件来自定义图形的各种默认属性,称之为 rc 配置或 rc 参数。通过 rc 参数可以修改默认的属性,包括窗体大小、每英寸的点数、线条宽度、颜色、样式、坐标轴、坐标和网络属性、文本、字体等。
设置相关的配置
方法一:
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
方法二:
为了方便配置,可以使用rc函数,下面的例子同时配置点标识符、线宽和颜色:
matplotlib.rc(“lines”, marker=”x”, linewidth=2, color=”red”)
如果希望恢复到缺省的配置(matplotlib载入时从配置文件读入的配置)的话,可以调用 rcdefaults 函数。
12345
恢复默认参数
matplotlib.rcdefaults()
如果手工修改了配置文件,希望重新从配置文件载入最新的配置的话,可以调用:
12
更新参数
matplotlib.rcParams.update( matplotlib.rc_params() )
六、zip() 函数
用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。
zip 方法在 Python 2 和 Python 3 中的不同:在 Python 3.x 中为了减少内存,zip() 返回的是一个对象。如需展示列表,需手动 list() 转换。
如果需要了解 Pyhton3 的应用,可以参考 Python3 zip()。
语法
zip 语法:
zip([iterable, ...])
参数说明:
- iterabl -- 一个或多个迭代器;
返回值
返回元组列表。
实例
以下实例展示了 zip 的使用方法:
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。计算方法为公司总市值 / 一年净利润,也可以用每股价格/每股利润,所以也叫“股价收益比率”。由于“一年净利润”中的“一年”可以有不同的定义,因此市盈率又分为以下几种。
- 静态市盈率:PE(静),以当前总市值,除以过去一年的净利润。反映了去年企业的经营状况及基于去年业绩的当前公司估值情况,是股票软件中经常出现的指标。
- **滚动市盈率:PE(TTM) ,以当前总市值,除以过去十二个月(TTM 意思为 Trailing Twelve Months)**的净利润。反映了过去十二个月企业的真实盈利状况,是对上市公司实时估值的反映。
- 动态市盈率: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面
- 识别算法(算法组 开发组)
- 测试人员需要这个身份证上传功能--有识别率的测试点
- 测试只能一个个手动去测试---反馈工作量特别大
- 有没有工具可以提供效率
- 需要开发组开发一个工具(测试开发来做)
- 测试开发工具开发。。。。。。。