一个在线 Python
编程环境,每行的代码在敲击 Shift + Enter
后单独执行,便于初学者快速掌握编程语言。 Jupyter 可以完美利用 Python 丰富的数据分析和科学计算的工具库,实现一些非大数据的分析计算需求。
用于操作行列数据,方便地实现各种数据分析的形式。
由于 Python 本身的限制,如果需要计算的数据太大,而无法一次载入内存,则需要分块导入数据,并对查询做相应的修改。
(现充请跳过本节,直接访问线上地址,点击 Welcome to Python.ipynb
)
在命令行中输入:
pip install jupyterpip install pandaspip install matplotlib
cd到指定目录,启动:
jupyter notebook
在 Jupyter Notebook 中,Pandas 是操作数据的工具,matplotlib 是执行作图的工具。
在 Cell 中输入并执行:
import pandas as pdimport matplotlib.pyplot as plt
在 Cell 中输入并执行:
df = pd.read_csv('./data.csv', index_col='id')
由于在线环境无法创建文件,也可以执行以下语句创建一个 DataFrame
:
dates = pd.date_range('20130101', periods=6)df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))
index_col
的作用是索引,是为了高效查询建立的特殊数据结构,简单说(不准确)是黄页
现在想象你手边有Excel(当然你也可以真的开一个)显示如下表格:
date(索引) | A | B | C | D |
---|---|---|---|---|
2013-01-01 | 0.469112 | -0.282863 | -1.509059 | -1.135632 |
2013-01-02 | 1.212112 | -0.173215 | 0.119209 | -1.044236 |
2013-01-03 | -0.861849 | -2.104569 | -0.494929 | 1.071804 |
2013-01-04 | 0.721555 | -0.706771 | -1.039575 | 0.271860 |
2013-01-05 | -0.424972 | 0.567020 | 0.276232 | -1.087401 |
2013-01-06 | -0.673690 | 0.113648 | -1.478427 | 0.524988 |
行的选取
在 Cell 中输入并执行:
rows = df[0:3]
选择第0行至第3行,结果如灰色区域所示:
date(索引) | A | B | C | D |
---|---|---|---|---|
2013-01-01 | 0.469112 | -0.282863 | -1.509059 | -1.135632 |
2013-01-02 | 1.212112 | -0.173215 | 0.119209 | -1.044236 |
2013-01-03 | -0.861849 | -2.104569 | -0.494929 | 1.071804 |
2013-01-04 | 0.721555 | -0.706771 | -1.039575 | 0.271860 |
2013-01-05 | -0.424972 | 0.567020 | 0.276232 | -1.087401 |
2013-01-06 | -0.673690 | 0.113648 | -1.478427 | 0.524988 |
2.列的选取
cols = df[['A', 'B', 'C']]
选择列A,B,C,结果如灰色区域所示:
date(索引) | A | B | C | D |
---|---|---|---|---|
2013-01-01 | 0.469112 | -0.282863 | -1.509059 | -1.135632 |
2013-01-02 | 1.212112 | -0.173215 | 0.119209 | -1.044236 |
2013-01-03 | -0.861849 | -2.104569 | -0.494929 | 1.071804 |
2013-01-04 | 0.721555 | -0.706771 | -1.039575 | 0.271860 |
2013-01-05 | -0.424972 | 0.567020 | 0.276232 | -1.087401 |
2013-01-06 | -0.673690 | 0.113648 | -1.478427 | 0.524988 |
3.块的选取
df.loc['20130102':'20130104',['A','B']]
选择行和列组成的数据块,结果如灰色区域所示:
date(索引) | A | B | C | D |
---|---|---|---|---|
2013-01-01 | 0.469112 | -0.282863 | -1.509059 | -1.135632 |
2013-01-02 | 1.212112 | -0.173215 | 0.119209 | -1.044236 |
2013-01-03 | -0.861849 | -2.104569 | -0.494929 | 1.071804 |
2013-01-04 | 0.721555 | -0.706771 | -1.039575 | 0.271860 |
2013-01-05 | -0.424972 | 0.567020 | 0.276232 | -1.087401 |
2013-01-06 | -0.673690 | 0.113648 | -1.478427 | 0.524988 |
Pandas 中的基本数据结构有二,Series
和 Dataframe
。 Series
用来创建行,也可以理解为一维数组。 Dataframe
用来创建块,或称为矩阵,表格。
创建一个数组[1,1,2,3,5]:
s = pd.Series([1,1,2,3,5])
创建一个 6x4
的表格块,单元格内容为随机数列名为 A,B,C,D。
pd.DataFrame(np.random.randn(6,4), columns=list('ABCD'))
从已有的列创建一个新的列
df['sumAB'] = pd.Series(df['A'] + df['B'], index=df.index)df['10A'] = pd.Series(df['A']*10, index=df.index)
df['A'] + df['B']
表示两列对应单元格的相加
df['A']*10
表示列A每个单元格 *10
运算后df的值如下:
date(索引) | A | B | C | D | sumAB | 10A |
---|---|---|---|---|---|---|
2013-01-01 | 0.469112 | -0.282863 | -1.509059 | -1.135632 | 0.186249 | 4.69112 |
2013-01-02 | 1.212112 | -0.173215 | 0.119209 | -1.044236 | 1.038897 | 12.12112 |
2013-01-03 | -0.861849 | -2.104569 | -0.494929 | 1.071804 | -2.966418 | -8.61849 |
2013-01-04 | 0.721555 | -0.706771 | -1.039575 | 0.271860 | 0.014784 | 7.21555 |
2013-01-05 | -0.424972 | 0.567020 | 0.276232 | -1.087401 | 0.142048 | -4.24972 |
2013-01-06 | -0.673690 | 0.113648 | -1.478427 | 0.524988 | -0.560042 | -6.73690 |
在方括号中加入判断条件来过滤行,条件必需返回 True
或者 False
df[(df.index >= '2013-01-01') & (df.index <= '2013-01-03')] df[df['A'] > 0]
为了快速了解数据的结构,一些值得掌握的指令如下:
# 查看表头5行
df.head(5)
# 查看表末5行 df.tail(5) # 查看列的名字 df.columns # 查看表格当前的值 df.values # 查看所有列的统计描述,包括平均值,标准差,最大最小值,以及25%,50%,75%的 percentile 值 df.describe() # 对表按照A列升序排序 df.sort_values(by=’A’)
Pandas 与 matplotlib 配合使用,可以支持几乎所有常用的图表形式,这里以常用的直方图为例,来观察一个典型的独立随机变量的正态分布:
# 首先打开图表行内显示%matplotlib inline# 生成600个随机数(符合正态分布),存放在 Series 或 DataFrame 的某一列中nd = pd.Series(np.random.randn(600))# bins 表示直方图的方块数# range 表示图表显示的范围nd.hist(bins=100, range=(-5,5))
结果如图所示:
经过了这几节,想必现充们仅仅学会了例子中的代码,如果想进一步了解,请参考以下文档:
1.Pandas 官方文档
2.Jupyter 演示版
进一步的使用需要对 Python 和 Pandas 做全面的了解,可以参考以下书籍:
1.利用Python进行数据分析
2.Python Cookbook
/* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */ var disqus_shortname = 'chenhfblog'; // required: replace example with your forum shortname /* * * DON'T EDIT BELOW THIS LINE * * */ (function() { var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true; dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js'; (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq); })();
GITHUB
josherichchenATgmail.com