#5.1便捷数据获取
步骤:
数据收集、数据整理、数据描述、数据分析
数据获取(本地,网络数据)
#下载nltk语料库
import nltk
nltk.download()
from nltk.corpus import gutenberg
print(gutenmberg)

#5.2 数据准备
数据准备(预处理)过程中常常需要进行数据的处理,例如数据清洗包括缺失值和异常值处理,数据变换如规范化数据,数据规约如属性规约(选择部分有代表性的属性)等,在Python有很多进行数据预处理的快速方法,以数据清洗中的缺失值处理为例,在实际过程中常常会发现有的数据是缺失(NaN)的,这些值是需要特别处理的。缺失值的判断可利用numpy中的isnan()函数,而对于Series或DataFrame,缺失值的判断和处理非常的方便,例如df.dropna()可以删掉含NaN(NA)的行,df.dropna(how='all')只丢弃全为NaN的那些行,也可以进行值的插补,例如用0、均值、中位数或众数等进行填充插补,也可用插值法即基于已知点建立插值函数f(x),通过xi求得f(xi)来近似替代,常用方法有拉格朗日插值法和牛顿插值法NaN。

创建时间序列:
>>>import pandas as pd 
>>>dates=pd. date_range(20170520', periods=7) 
>>>dates 
<class' pandas. tseries. index. Datetimelndex'> 、
[2017-05-20,…,2017-05-26]
Length:7, Freq:D, Timezone: None 
>>>import numpy as np 
>>>datesdf=pd. DataFrame(np. random. randn(7,3), index=dates, columns=list(ABC)) 
>>>datesdf

              A          B        C 
2017-05-20 1.302600 -1.214708  1.411628 
2017-05-21 -0.512343 2.277474  0.403811 
2017-05-22 -0.788498 -0.217161 0.173284 
2017-05-23 1.042167 -0.453329 -2.107163 
2017-05-24 -1.628075 1.663377  0.943582 
2017-05-25 -0.091034 0.335884  2.455431
2017-05-26 -0.679055 -0.865973 0.246970

#5.3数据显示
显示方式:
显示行索引
显示列索引
显示数据的值
显示数据描述

>>>list(djidfindex) #行索引[0,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,26,27,28,29]
>>>list(djidf. columns) #列索引
[' code',' name', lasttrade]
>>>dijdf. values #查看值
array([[' MMM','3M',195.8], 
      …, 
[' WMT","Wal-Mart',78.77]], dtype=object) 
>>>djidf. describe 
<bound method NDFrame. describe of code name lasttrade
0                                   MM   3M   195.80 
…,
29                                 WMT Wal-Mart 78.77>

a.lasttrade #查看a数据最后一列

#5.4数据选择
选择方式:
·选择行
·选择列
·选择区域
·筛选(条件选择)

a.loc[1:5] #选择1道5列数据
a.loc[:,['code','lasttrade']] #得到两列索引

a.iloc[1:6,[0,2]] #选择1,2,3,4,5行中的第0列和第2列

#5.5 简单统计与处理
简单统计与筛选
a.lasttrade.mean() #求平均值

#排序
按最近一次成交价对30只道指成分股股票进行排序。根据排序结果列出前三甲公司名。
>>>tempdf=djidf. sort_values(by=' lasttrade', ascending=False) 
    code            name   lasttrade 
12    GS   Goldman Sachs      215.39 
0    MMM              3M      195.80 
3     BA          Boeing      180.76 
26   UNH     UnitedHealth     172.59 
...
>>>tempdf[:3].name #前三甲公司
12 Goldman Sachs 
0             3M 
3         Boeing 
Name:name,dtype:object


#计数统计:
统计本年度1月份的股票开盘天数?
>>>t=quotesdf[(quotesdf. index>='2017-01-01)&(quotesdf. index<'2017-02-01)]
>>>len(t) 
20

#统计近一年每个月的股票开盘天数?
#strptime():将一个字符串变成time格式
import time
...
listtemp=[]
for i in range(len(quotesdf)):
   temp=time. strptime(quotesdf. index[i],"9%Y-%m-%d") 
   listtemp.append(temp.tm_mon) 
tempdf=quotesdf.copy() 
tempdf[' month]=listtemp 
print(tempdf['month'].value_counts())

Output:
8  23
3  23 
6  22 
12 21 
11 21 
10 21 
9  21 
5  21 
7  20 
1  20 
4  19 
2  19 
Name:month, 
dtype:int64

#5.6 Grouping(分类汇总)
#Q1:统计近一年每个月的股票开盘天数?
>>>x=tempdf.groupby('month’).count()
>>>x.close

#Q2:统计近一年每个月的总成交量?
>>>tempdf.groupby('month).sum().volume
#基于月份进行统计,总量,成交量
#高效方式:对成交量进行求和
>>>tempdf.groupby('month).volume.sum()

#有一个记录了爱吃苏式或广式月饼的用户DataFrame:
>>> mooncakes_df
        name gender  age taste of mooncake
0      Liuzi      M   21   Cantonese-style
1    Huangqi      F   32          Su-style
2   Yuanyuan      F   35          Su-style
3      Duyue      F   14   Cantonese-style
4  Zhangtian      M   33   Cantonese-style
若要统计mooncakes_df中分别爱吃两种口味月饼的人数,用如下代码实现:
>>> mooncakes_df.groupby("taste of mooncake").age.count()
taste of mooncake
Cantonese-style    3
Su-style           2
Name: age, dtype: int64
#使用groupby()方法结合一些统计函数在做数据的分组统计时非常有用,另外,值得注意的是,groupby()还常常与apply()函数连用,apply()函数可将函数作用在一个Series对象上默认是DataFrame的列,也可以是行,最后将结果尽可能的聚合后返回。apply()函数的自由度很高,它的最基本形式为“DataFrame.apply(func, axis = 0)”,func是函数,可以自己实现,默认axis为0,表示apply()函数会自动遍历DataFrame的每一列数据(一个Series)按相应函数功能对其进行处理,处理结束后将所有结果组合后返回,若axis设为1则遍历处理DataFrame的每一行数据。例如对一个原始的或用切片等方式处理后的DataFrame对象,要统计该DataFrame每列的最大值可用df.apply(max),每行的最大值可用df.apply(max, axis=1)来快速实现。

#5.7 Merge(合并)
1.append追加:
把公司本年度1月1日至1月5日间的股票交易信息合并到近一年中前两天的股票信息中?
>>>p = quotesdf[:2] #前两天的信息
>>>q=quotesdf['2017-01-01:2017-01-05] #一号到五号的信息
>>>p.append(q) #两部分合并追加
 
2.concat连接:
将美国运通公司近一年股票数据中的前5个和后5个合并。
>>>pieces=[tempdf[:5],tempdf[len(tempdf)-5:] #先有两个对象
>>>pd.concat(pieces) #把两个对象连接
#Q1:两个不同逻辑结构的对象能否连接?
>>>piece1=quotesdf[:3]#不含月份的数据
>>>piece2=tempdf[:3]#含有月份的数据
>>>pd.concat([piece1,piece2],ignore_index=True)#不使用连接轴上索引值,可以连接

3.join连接(两张表要有共同字段,和数据库表连接相同)
#Q1:将美国运通公司和可口可乐公司近一年中每个月的交易总量表(包含公司代码)与30只道琼斯成分股股票信息合并。
>>>pd.merge(djidf.drop(['lasttrade'],axis =1),AKdfon ='code')