NoteBook of 《Data Analysis with Python》
3.IPython基礎
Tab自動補齊
解釋
%run命令
- %run 執行全部文件
- %run -i 訪問變量
- Ctrl-C中斷執行
- %paste能夠粘貼剪切板的一切文本
- 通常使用%cpaste由於能夠改
鍵盤快捷鍵
魔術命令
4.Numpy基礎:數組和矢量計算
ndarray:多維數組對象
建立ndarray
- np.array() #將輸入數據轉換成ndarray
- np.asarray() #將輸入轉換成ndarray
- np.zeros() zeros_like #全零數組
- np.ones()ones_like #全一數組
- np.empty()empty_like #建立數組只分配內存不賦值
- np.arange() #返回 range版的ndarray
- eye、identify #N*N單位矩陣
ndarray類型
- int、uint8 16 32 64
- float 16 32 64 128
- complex 64 128 256 浮點數表示的複數
- bool
- object python對象類型
- string_ 固定長度的字符串
- unicode_ 固定長度的Unicode類型
- astype能夠顯示轉換成其餘類型
數組和標量之間的計算
批量計算html
基本的索引和切片
- 數組切片是原始數據,對切片的任何修改都會直接修改原始數據
- 若須要複製一個副本就須要顯示的複製.copy()
- 訪問單個元素arr[0][2]=arr[0,2]
- 注意區分1和:1 #前者表示第二行,後者表示到第一行
- and or 在布爾型數據中無效
花式索引
- 花式索引就是將數據複製到新數組中
- 轉置 .T transpose swapaxes
通用函數ufunc:元素級數組函數
-
一元ufuncpython
- abs、fabs
- sqrt平方根
- square平方
- exp指數
- log、log十、log二、log1p對數
- sign正負號
- ceil大於等於該值的最小整數
- floor小於等於該值的最大整數
- rint四捨五入到最接近的整數
- modf小數和整數部分分別返回
- isnan布爾型數組返回NaN非數字
- isfinite、isinf布爾型返回有窮和無窮
- cos、sosh、sin、sinh、tan、tanh雙曲線三角函數
- arc cos、sosh、sin、sinh、tan、tanh反三角
- logical_not 計算not x的真值
-
二元ufuncweb
- add相加
- subtract數組一減二
- multiply相乘
- divide、floor_divide除法,向下取整
- power A B 計算A^B
- maximum、fmax fmax會忽略NaN
- minimum、fmin
- mod求模
- copysign將二數組的值的符號複製給第一個數組的值
- greater、greater_equal、less、less_equal、equal、not_equal比較運算,產生布爾型,至關於>,>=
- logical_and,logical_or,logical_xor & | ^
利用數組進行數據處理
- 用數組表達式代替循環叫矢量化
- numpy.where=x if condition else y
- [(x if c else y)for x,y,z in zip(x,y,c)]=np.where(c,x,y)
數學和統計方法
-
基本數組統計方法正則表達式
- sum 對數組中所有元素或某軸向的元素求和
- mean 算術平均值
- std、var 標準差和方差
- min、max最大值和最小值
- argmin、argmax最大最小元素的索引
- cumsum全部元素的累計和
- cumprod全部元素的累計積
-
用於布爾型數組的方法mongodb
- sum計算true的個數
- any測試是否存在一個或多個true
- all 檢測數組中是否全部值都是true
-
排序數據庫
-
數組的結合運算json
- np.unique找出數組中的惟一值並返回已排序的結果
- intersect1d(x,y)返回有序的公共元素結果
- union1d(x,y)返回並集的有序結果
- in1d(x,y)返回x的元素是否包含於y的布爾型數組
- setdiff1d(x,y)返回集合的差,x中不在y中
- setxor1d(x,y)異或存在某一可是不一樣時存在2者
數組文件的輸入和輸出
- 二進制讀寫
- np.save
- np.load
- np.savez將多個數組保存到一個壓縮文件中
- 讀取文本文件
- np.loadtxt
- np.genfromtxt
- np.savetxt
線性代數
- 矩陣乘法
- 經常使用函數
- diag 返回矩陣的對角線元素,或將一維數組轉換成矩陣
- cot矩陣乘法
- trace對角線元素和
- det 矩陣行列式值
- eig特徵值和特徵向量
- inv求逆
- pinv計算矩陣的僞逆
- qrQR分解
- svd奇異值分解
- solve Ax=b的解
- lstsq Ax=b的最小二乘解
- 隨機數生成
- numpy.random
- seed肯定隨記生成數的種子
- permutation返回一個序列的隨記排列或一個隨記排列的範圍
- shuffle對一個序列直接隨記排列
- rand產生均勻分佈的樣本值
- randint從給定的範圍內隨機選取整數
- randn產生標準狀態分佈的隨機值
- binomial產生二項分佈的樣本值
- normal產生高斯分佈的樣本值
- beta產生B分佈的樣本值
- chisquare產生卡方分佈的樣本值
- gamma產生gamma分佈的樣本值
- uniform產生[0,1)均勻分佈的樣本值
5.pandas入門
pandas數據結構介紹
-
Series (data,index=v)api
- 一組數據和一組索引組成的一維數組
- 當作是一個定長的有序字典
- 能夠直接經過字典建立
- 在數值運算中會自動對齊
- 索引能夠經過直接賦值的方式修改
-
DataFrame數組
- 表格型的數據結構
- 直接傳入由等長列表或np數組組成的字典
- 能夠指定列序列columns
- 經過相似字典標記da.date或屬性da['date']的方式獲取一個列爲Series(擁有原來df相同的索引)
- 爲不存在的列賦值時會建立一個新列
- 嵌套字典的外層鍵做爲列,內層做爲行索引
- 能夠穿給DF的數據[二維ndarray、數組元組列表組成的字典、np的結構化數組、Series組成的字典、字典組成的字典、字典或Series組成的列表、列表或元組組成的列表、DF、np的MaskedArray]
- index對象不可修改
-
index的方法和屬性:數據結構
- append連接另一個index產生新的index
- diff計算差集獲得一個index
- intersection計算交集
- union\isin計算是否包含在參數集合中的布爾型數組
- delete刪除索引i出的元素並獲得新的index
- drop、insert、is_monotonic、is_unique、unique
基本功能
彙總和計算描述統計
- 規約方法
- axis df行用0,列用1
- skipna跳過na值,默認是True
- level層次化索引就根據level分組規約
- describe返回多個列彙總信息
count、describe、min、max、argmin、argmax、idxmin、idxmax、quantile、sum、mean、median、mad、var、std、skew、kurt、cumsum、cummin、cummax、cumprod、diff、pct_change
- 相關係數和協方差
- 3.x只保留了一個 items() 方法
- Series中corr用於計算相關係數[重疊、非NA、索引對齊]
- cov計算協方差
- df的cov、corr會返回完整的矩陣
- df的corrwith計算其列或行和另外一個Series或df
- unique.sort()返回一組惟一值有序數組
- value_counts()返回一個Series各值出現的頻率,pd.
處理缺失數據
- NA處理方法
- dropna、fillna
- isnull、notnull
- 過濾缺失數據
- dropna返回一僅含非空數據和索引值的Series=data.notnull();對於df會丟棄任何含有na的行,傳入how='all'只丟棄全爲NA的行;丟棄列則傳入axis=1
- thresh參數
- 填充缺失數據
- fillna方法參數
- value用於填充的值或字典對象
- method填充方法,默認ffill
- axis默認0即行,axis=1爲列
- inplace是否產生副本
- limit填充最大連續數量
層次化索引
- 能以低維度形式處理高維度數據
- 能夠經過unstack方法從新排到一個df中[stack逆運算]
- 還能夠爲軸標籤指定名稱
- 重排分層排序
- swaplevel能夠交換兩個層級並返回新的
- sortlevel
- df將一個列或多個當作行索引
- set_index(['c','d'),drop=False)
- reset_index()
pandas的其餘話題
- 整數索引
- Series的iget_value
- df的irow和icol
- Panel數據
- Panel中的每一項都是一個df
- df有to_ panel方法[逆運算是to_frame]
6.數據加載存儲和文件格式
讀取文本格式的數據
- pandas解析函數
- read_csv從文件、url、文件型對象加載帶分隔符的對象,默認分隔符是逗號,
- read_table同上,默認分隔符是製表符\t;指定分隔符sep=','=read_csv
- read_fwf讀取定寬列格式數據
- read_clipboard讀取剪切板數據
- read_csv/read_table
- 能夠指定索引和列名,也可傳入列名列表作成多層索引
- 當處理不固定分隔符時使用正則表達式來做爲分隔符
- skiprows跳行
- na_values接收用於表示缺失值的字符串
函數參數:path、sep|delimiter、header、index_col、names、skiprows、na_values、comment、parse_dates、keep_date_col、converters、dayfirst、date_parser、nrows、iterator、chunksize、skip_footer、verbose、encoding、squeeze、thousands
- 逐塊讀取文本文件
- nrows指定讀取幾行
- chunksize指定逐塊讀取的大小
- 將數據寫出到文本文件
- to_csv能夠指定分隔符[from_csv]
- 缺失值默認是空字符串,能夠經過na_rep指定標記值
- 默認會輸出行列索引,能夠經過index=False,header=False禁用
- 也能夠只輸出部分列
- 手動處理分隔符格式
- JSON 數據
- json.load加載json數據
- json.dump轉換爲json對象
- pandas.to_json[from_json]
- XML、HTML
- findall和XPath
- py2.x中的urllib2 =py3.x 中的urllib.request
- The StringIO and cStringIO modules are gone. Instead, import the io module and use io.StringIO or io.BytesIO for text and data respectively.
- ixml.objectify解析xml
二進制數據格式
- pandas.save和pandas.load 讀寫pickle形式數據
- HDF5格式(hierarchical data format層次數據格式)
- python中有兩個接口PyTables&h5py
- 處理海量數據要好好研究這兩個接口
- pd.ExcelFile讀取Excel文件
使用HTML和Web API
使用數據庫
In python 2, zip returned a list. In python 3, it returns an iterable object. But you can make it into a list just by calling list on it.
list(zip(*ngram))[0]=zip(*nagram)[0]
存取MongoDB的數據
7.數據規整化:清洗、轉換、合併、重塑
合併數據集
重塑reshape和軸向旋轉pivot
- 重塑層次化索引
- stack 列-->行 df-->Series 默認濾除缺失值
- unstack 行-->列 Series-->df
- 將長格式轉換成寬格式
數據轉換
- 移除重複數據
- df.duplicated()返回一個布爾型Series表示是否重複行
- drop_duplicates返回一個移除了重複行的df;默認是判斷所有列,也能夠指定列;默認保留第一個值,也能夠保留最後一個
- 利用匿名函數或映射進行數據轉換
- 替換值
- 重命名軸索引
- map直接修改原始數據,rename建立數據集的轉換版[能夠結合字典實現對部分軸索引的修改],也可inplace=True修改原數據
- 離散化和麪元劃分
- 檢測和過濾離羣值
- np.random.permutation
- df.take
- 計算指標/啞變量
- 將分類變量轉換爲虛擬矩陣或指標矩陣
- pd.get_dummies(prefix加前綴)結合cut
字符串操做
- 字符串對象方法
- split()結合strip(修剪空白符,換行符)
- '::'.join()
- find[找不到返回-1]和index[找不到會引起異常]
- count返回子字符串出現的次數
- replace將指定字符替換成指定字符,刪除就替換空字符
- 內置字符串方法
- count、endswith、startswith、join、index、find、rfind、replace、strip、rstrip、lstrip、split、lower、upper、ljust、rjust
- 正則表達式
- 經過re.compile建立regex對象能夠節省大量時間若是對許多字符串應用同一個正則表達式
- findall返回全部匹配項的列表,finditer逐個迭代返回
- search返回第一個匹配項
- match從字符串起始位置開始匹配,返回第一個,不然None
- sub將匹配到的替換成指定字符串,並返回新的字符串subn前n個
- re.IGNORECASE忽略大小寫
- split將匹配到的拆分紅數段
- pandas中矢量化的字符串函數
- 獲取矢量化的元操做:str.get;str[]
- 矢量化的字符串方法
- cat、contains、count、endswith、startswith、findall、get、join、len、lower、upper、match、pad、center、repeat、replace、slice、split、strip、rstrip、lstrip
8.繪圖和可視化
matplotlib入門
- matplotlib的實例庫和文檔是成爲繪圖高手的最佳資源
- Figure & Subplot
- matplotlib的圖像都位於Figure對象中
- pyplot.subplots的參數
- nrows、ncols、sharex、sharey、subplot_kw、 **fig_wk
- subplots_adjust調整圖像間距
- 顏色、標記和線型
- plot(linestyle=、color=)經常使用顏色有縮寫,任意RGB
- 轉折點的標記marker=o;drawstyle插值繪圖方式
- 刻度、標籤和圖例
- 設置刻度和刻度標籤
- set_xticks選擇要設置刻度的位置
- ser_xticklables就是設置刻度的標籤
- set_xlable設置軸標籤
- set_title設置標題
- 添加圖例
- 在添加subplot的時候傳入lable
- ax.legend|plt.legend(loc='best')自動選一個最好的地方
- 註解或在Subplot上繪圖
- 註解能夠經過text、arrow、annotate添加
- text能夠文本繪製在指定座標
- 在圖表上添加一個圖形,須要先建立一個塊對象shp而後經過ax.add_oatch(shp)將其添加到subplot中
- 圖片保持Figure.savefig
- fname、dpi、facecolor、edgecolor、format、bbox_inches
- matplotlib配置
pandas中的繪圖函數
- 線形圖
- Series.plot方法默認就是線形圖
- label、ax、style、alpha、kind、logy、use_index、rot、xticks、yticks、xlim、ylim、grid
- df.plot會在一個subplot中爲各列繪製一條線並自動建立圖例
- subplots、sharex、sharey、figsize、title、legend、sort_columns
- 要更深刻須要多學matplotlib API
- 柱狀圖
- kind='bar'垂直|kind='barh'水平
- Series索引會被用做刻度=df.行索引,列索引會做分組
- stacked=True堆積柱狀圖
- 直方圖和密度圖
- hist生成直方圖
- plot kind='kde'生成密度圖
- 兩者一般一塊兒使用
- 散佈圖
- plt.scatter觀察兩個一維數據序列之間的關係
- pd.scatter_matrix散佈圖矩陣
- basemap地圖插件
- 圖形庫mayavi
9.數據聚合與分組運算
GroupBy分組
- split-apply-combine
- 分組鍵中的缺失值可使結果包含在NA組了吧
- 對分組進行迭代
- 選取一個或一組列
- 經過字典或Series分組,索引和分組軸要對齊
- 經過函數進行分組
- 將函數、數組、列表、字典、Series混合使用進行分組
- 根據索引級別分組[層次化索引]
數據聚合:從數組產生標量值的數據轉換過程
數組運算和轉換
- groupby的transform方法,會將一個函數運用到各個分組
- apply:通常性的'拆分-應用-合併'
- group_keys=False禁止分組鍵
- 分位數quantile和桶bucket分析
透視表和交叉表
- 透視表pivot table根據一個或多個鍵並根據行、列鍵將數據分配到各個舉行區域裏
- pd.pivot_table|df.pivot_table參數
- margins=True aggfunc= 、values、index、columns、fill_value
- 交叉表crosstab:用於計算分組頻率的特殊透視表
- crosstab前兩參數能夠是數組、Series、數組列表
關於basemap的種種問題
- geos始終沒法安裝好
- basemap沒法直接安裝whl也安裝不了
- win10 64 py3.5
時間序列
日期和時間數據類型及工具
- datetime、time、calendar
- date.timedelta表示兩個datetime對象之間的時間差
- 字符串和datetime之間的相互轉換
- str和strftime能夠將datetime轉換成字符串
- datetime.strptime能夠將格式化字符串裝換成datetime對象;解析已知格式
- dateutil包的parser.parse方法解析全部格式;實用但不完美
- datetime格式定義
- %Y 四位數年 %y %m %d 兩位數
- %H 24H制 %I 12H制 %M %S
- %w 星期幾[0,6] %U 每一年的第幾周,星期天爲界,%W,星期一爲界
- %z UTC時區偏移量 %F Y-m-d %D m/d/y
- 特定於當前環境的
- %a 星期幾簡稱、%A星期全稱
- %b月份簡稱 %B
- %c完整日期和時間 %p am,pm
- %x適合於當前地區的日期格式,%X時間格式
時間序列基礎
- pd最基本的時間序列就是以時間戳爲索引的Series
- 索引、選取、子集構造
- 傳入能夠被解析成日期的字符串
- 傳入年、月便可選取數據切片
- 可使用字符串日、datetime、Timestamp
- 對非惟一時間戳進行聚合使用groupby
日期的範圍、頻率、移動
- resample將時間序列轉換成一個具備固定頻率的時間序列
- pd.date_range會生成指定長度的daretimeindex
- 時間序列的基礎頻率
- D日曆日 B工做日 H T分 S WOM每個月的星期幾
- 移動數據 pd.shift
時區處理
- pytz包
- 本地化和轉換
- tz_localize、tz_convert轉換到別的時區
- Timestamp對象的轉換
- 不一樣時區之間的運算
- 時期及其算術運算
- 時期的頻率轉換
- 按季度計算的時期頻率
- 將Timestamp轉換成Period[or相反]
- 經過數組建立PeriodIndex
重採樣和頻率轉換
- 重採樣resample是指將時間序列從一個頻率轉換到另一個頻率
- 降採樣、升採樣,非降非升採樣
- 方法參數
- freq、how、axis、fill_method、closed、label、loffset、limit、kind、convention
- OHLC重採樣,open、high、low、close
- 經過groupby進行重採樣
- 升採樣和插值
- 經過時期進行重採樣
時間序列繪圖
- pd時間序列的繪圖功能比mt好
- 移動窗口函數rolling_mean
- 用戶自定義移動窗口函數rolling_apply,能從片斷中產生單個值
性能和內存使用的注意事項
- pandas對數據對齊和重採樣進行了高度優化
- 規則頻率之間的轉換優化
金融和經濟數據應用
數據規整方面
- 時間序列以及截面對齊
- pandas能夠在算術運算中自動對齊數據
- 經過一組不一樣索引的Series構建df
- 頻率不一樣的時間序列的運算
- 頻率轉換resample和重對齊reindex
- 使用Period索引的兩個不一樣頻率的時間序列之間的運算必須進行顯示轉換
- 時間和當前數據選取
- at_time、between_time
- 將Timestamp傳入asof能夠獲得時間點最近的值(如果na的話)
- 拼接多個數據源
- pd.concat
- df.combine_first
分組變換和分析
NumPy高級應用
ndarray對象的內部機制
高級數組操做
- 向數組的reshape傳入一個表示新形狀的元組便可
- C[行優先&內存相鄰]和Fortran[列優先&內存相鄰]順序
- order='C' || order='F'
- 數組的拆分和合並
- np.concatenate能夠指定軸將一個數組序列(元組或列表等)鏈接到一塊兒
- 比較方便的是np.vstack|np.hstack
- np.split將數組沿指定軸拆分爲多個數組
- concatenate、vstack、row_stack、hstack、column_stack、dstack、split、hsplit、vsplit、dsplit
- r_、c_
- 元素的重複操做tile&repeat
- 花式索引的等價函數take&put
廣播
- 後緣維度的軸長相符,其中一方長度爲1
- 沿其餘軸向廣播
- 利用廣播機制設置數組的值
ufunc高級應用
- ufunc實例方法
- reduce、accumulate、reduceat、outer
- 自定義ufunc
結構化和記錄式數組
- 定義結構化dtype,使用元組列表,字典式訪問
- 嵌套dtype和多維字段
和排序有關的話題
- ndarray的sort實例方法是直接排序,原始數據會消失
- 而np.sort會建立一個已排序的副本,還能夠指定排序軸
- 間接排序:argsort、lexsort
- python對象數組只能用快排排序
- np.searchsorted在有序數組中查找元素,返回位置座標
- Numpy的Matrix類
高級輸入輸出
- 內存映像文件能夠處理內存放不下的大文件
- np.memmap會將大文件分紅小段來讀寫
性能建議
- 將python的循環和邏輯轉換成數組運算和布爾數組運算
- 多用廣播
- 多使用數組切片避免複製數據
- 使用ufunc
- 考慮Cython
- 連續內存