Python_part 1

一、python基本操作

1、jupyter快捷键:a和b添加新行;m是转换为Markdown模式,y是code模式。执行:shift+enter;自动补全:tab;帮助文档:shift+tab。

2、三剑客:numpy/pandas/matplotlib【最好管理员模式安装,此时jupyter notebook出来是英文,且很卡;以普通用户身份打开,为中文版,且很顺畅】

3、数组和列表的区别:①字符串》浮点型》整型;②数组中存储的数据元素必须是统一类型。

4、三种方式返回数组:

① array();

② matplotlib.pyplot 【读取图片使用.imread(读入)和.imshow(显示)】;

③ zero()、one()、linspace()、arange()、random系列。

5、numpy的常用属性:shape(行数,列数,颜色数)/ndim/size/dtype('元素类型')

6、切片操作:切前两行/列 =》将图片上下左右翻转,arr[行切片,列切片],arr[::-1,::-1] #将数组的行列倒置;

7、reshape(行数,列数):数组内数据行列变形。

8、级联操作:将多个numpy数组进行横向或纵向的拼接 =》将图片上下左右拼接,numpy.concatenate((数组1,数组2),axis=1),为横向拼接;axis=0,为纵向拼接。若有数组3,即三维数组,则有axis=2。必须同一维度!

9、常用的聚合操作:sum、max、min、mean

10、常用的数学函数:三角函数(sin/cos/tan)、numpy.around(数组,decimals),返回指定数字的四舍五入值,decimals:舍入的小数位数(默认为0,若为负,整数将四舍五入到小数点左侧的位置)。

11、矩阵相关

① numpy.eye() 返回一个单位矩阵。

② array.T 返回该数组转置后的矩阵。

③ numpy.dot(数组1,数组2) 返回数组乘法之后的矩阵。


二、pandas基本操作

(1) Series(values, index), values:一组数据;index:相关数据的索引标签。由列表/numpy/字典创建。仅为一维数据源。

(2) DataFrame(values,columes,index)是一个表格型的数据结构,按照一定顺序排列的多列数据组成。有行和列索引及值,以此扩展series,是多维。 由ndarray或字典创建。

DataFrame的属性:values、columns、index、shape,无dtype。

DataFrame的索引操作:对行、队列、元素进行索引。iloc:隐式索引;loc:显式索引。

DataFrame的切片操作:对行、列进行切片。

- 索引:

  - df[col]:取列

  - df.loc[index]:取行

  - df.iloc[index,col]:取元素

- 切片:

  - df[index1:index3]:切行

  - df.iloc[:,col1:col3]:切列

(3) 时间数据类型的转换:pd.to_datetime(col);将某一列设置为行索引:df.set_index()。


三、实践

1、需求:股票分析

① 使用tushare包(财经类)获取某股票的历史行情数据。

df=tushare.get_k_data(code,start)   #获取网上数据,股票代码和开始时间

df.to_XXX  # 将网上数据存到本地

df=pd.read_csv('./XXX.xxx')   #将本地数据读入到df

② 输出该股票所有收盘比开盘上涨3%以上的日期。

df[(df['close']-df['open'])/df['open']>=0.03].index

③ 输出该股票所有开盘比前日收盘跌幅超过2%的日期。

df[(df['open']-df['close'].shift(1))/df['close'].shift(1)<=-0.02].index

④ 假如从2010年1日1日开始,每月第一个交易日买入1手股票,每年最后一个交易日卖出所有股票,到今天为止,收益如何?

df.resample('M').first()   #数据重新取样,每月第一个交易日

2、双均线策略

① 均线的计算分析

② 金叉&死叉

③ 练习:假如我从2010年1月1日开始,厨师资金为10万元,金叉尽量买入,死叉全部卖出,则到今天为止,我的炒股收益率如何?

3、清洗缺失值、空值、重复值、异常值

① 处理丢失数据:None和np.nan(NaN),区别:np.nan是float类型;None是NoneType类型。

注:数据分析中常常使用某些形式的运算来处理原始数据,若原数据中的空值为NAN的形式,则不会干扰或中断运算;NAN可以参与运算;None不可以参与运算。在pandas中,若遇到None形式的空值,则会强制转换成NAN形式。

② 处理空值:isnull连用any,notnull连用all,dropna(可直接删除缺失的行或列),fillna(覆盖缺失值)。

③ 去重:df[列索引].unique,该列中有哪些不同的元素。

④ 处理异常值:若占比小,则删除;若样本量很小,可考虑使用均值或其他统计量取代;将其视为缺失值,利用统计模型填补。

4、DateFrame的级联&合并操作

区别:merge需要依据某一共同列来合并,使用pd.merge()时,会自动根据两者相同column名称的那一列,作为key来进行合并;注:每一列元素的顺序不要求一致。

map是series的方法,只能被series调用。

排序实现的随机抽样:take()【只能使用隐式索引】、np.random.permutation() 【随机排列序列】。


四、pandas的高级操作:

① 映射:创建一个映射关系列表,把values元素和一个特定的标签或字符串绑定(给一个元素值提供不同的表现形式)。

② 分组聚合:groupby()函数,查看分组情况;

高级数据聚合:使用groupby分组后,也可使用transform和apply提供的自定义函数实现更多的运算。

df.groupby('item')['price'].sum() === df.groupby('item')['price'].apply(sum)

③ 透视表:一种可以对数据动态排布并分类汇总的表格格式。

pivot_table(index,values,columns,aggfunc),index参数是分类汇总的分类条件。

优点:灵活性高,操作性强,脉络清晰易理解。

练习:查看哈登对阵每个队伍的得分,则需对每个队伍进行分类并计算其各类得分的平均值;想看对阵同一对手在不同主客场下的数据,分类条件为对手和主客场。

④ 交叉表:是一种用于计算分组的特殊透视图,对数据进行汇总。

pd.crosstab(index,colums),index:分类数据,交叉表的行索引;columns:列索引。

df.describ(),将有数据的列统计出均值,最大最小值等数据。

df[列索引].value_counts():统计列中各元素出现的次数。

⑤ plt.plot(x,y):绘制线性图(单条/多条),设置坐标系的比例plt.figure(figsize=(a,b)),设置图例legend()和轴的标识;图例保存,figure.savefig()。

柱状图:plt.bar(索引,数据值,条形宽度);

散点图:scatter(x,y,s,c),s指标量,c指颜色;

饼图:pie(x);

直方图:hist(bins,normed,color,orientation)。

你可能感兴趣的:(Python_part 1)