從今天(2018-3-13)到3月26號本目錄下會更新《Python數(shù)據(jù)分析基礎》這本書的一些讀書筆記和思考干旧。
書目信息:
原書名: Foundations for Analysis with Python
中文翻譯版: Python數(shù)據(jù)分析基礎
原作:Clinton W粹断。Brownley
人民郵電出版社出版,2017年8月第一版。
本書關(guān)于基礎知識的內(nèi)容很多尊残,作者也說:
本書面向的讀者是那些經(jīng)常使用電子表格軟件進行數(shù)據(jù)處理,但從未寫過一行代碼的人悯辙。 因此對于數(shù)據(jù)的讀入講得比較多才避,重點講了csv、Excel哺壶、SQL的讀取與處理屋吨。關(guān)于一些建模和挖掘的算法講得比較少蜒谤。閱讀完本書后會補充一些算法的內(nèi)容(特別是關(guān)聯(lián)分析和聚類的算法)。
今天從第一章開始至扰,《Python數(shù)據(jù)分析基礎》整本書200多頁鳍徽,并不多,書中的內(nèi)容注重基礎敢课,對代碼的講解比較詳細(關(guān)于本書特點請參考README.md)阶祭。本書關(guān)于一些建模和挖掘的算法講得比較少,因此消化本書后會結(jié)合其他書(例如《數(shù)據(jù)挖掘?qū)д摗罚┲备眩瑫懸恍╆P(guān)于算法的筆記濒募。本系列筆記主要目的還是作為自己精讀本書和鞏固Python的筆記,同時也希望給閱讀《Python數(shù)據(jù)分析基礎》的人一個參考切厘。
這篇筆記略過一些安裝的細節(jié)萨咳,著重實踐第一章的基本數(shù)據(jù)存貯類型,會有一定跳躍疫稿,筆記中主要舉比較常用的例子用以說明比較重要的內(nèi)容培他,而不會面面俱到,不會完全按照書中的講解順序(因為這樣就變成對本書的一個復刻而不是閱讀消化了)遗座,但對于書中講到比較核心的內(nèi)容也會記得比較詳細舀凛,要理解本系列筆記需要一定的Python基礎,對小白可能不太友好途蒋。
目錄
- 運行環(huán)境與交互
- 數(shù)值
- 字符串
- 日期
運行環(huán)境與交互
本系列筆記基于Python 3.6猛遍;集成環(huán)境采用Anaconda;Excel編輯會用到MS的Excel 2016号坡;文本數(shù)據(jù)(如csv文件和一般Python腳本)采用Notepad++ v7.4.1進行編寫懊烤,Python腳本全采用UTF-8編碼。
代碼以及筆記的編輯主要是基于Anaconda包含的jupyter notebook(原來叫ipython notebook)宽堆,書中比較常用到Anaconda的Spyder腌紧,做數(shù)據(jù)科學的人一般會更習慣于用jupyter notebook,與本文同步的GitHub畜隶。
略過Anaconda以及其他軟件的安裝過程(因為我安了有一定時間了壁肋,也沒有截圖,需要了解運行環(huán)境配置的同學請參考Anaconda安裝等教程)籽慢。
書中花了一定篇幅講如何在命令行下運行Python腳本浸遗,其基本思路是用Notepad++等文本編輯工具編輯好以.py結(jié)尾的腳本文件后,在cmd下定位到文件所在目錄箱亿,輸入 python 文件名.py 運行跛锌,該方法對于Windows系統(tǒng)和Python3沒問題(如下圖)。在Mac下相應的命令為 chmod +x 文件名.py 再./文件名.py
數(shù)值
Python對數(shù)字的分類不像其他語言那么詳細届惋,并且支持大數(shù)察净,能裝下像C++語言的long類型都裝不下的數(shù)值驾茴。可以粗略地將Python的數(shù)字類型分為整數(shù)氢卡、浮點數(shù)、長整數(shù)以及復數(shù)晨缴。后續(xù)筆記會提到的numpy庫為了提高計算速度細分了int32 int64等類型译秦,這個后面再說。 數(shù)值類型的變量表達如下:(有其他語言基礎的人請區(qū)分主流的 int a=2; 以及go的 var a int=2 以及Python的)
a=2 #整數(shù) Python用#進行注釋
b=3.14 #浮點數(shù)
c=5/2 #Python3中得到浮點數(shù)2.5 而Python2得到的是整除的結(jié)果
d=5//2 #Python3的整除
e=5%2 #取余數(shù)
f=4+3j #復數(shù)類型
print(a,b,c,d,e) #輸出
print(type(c)) #type(val) 函數(shù)會返回val的數(shù)據(jù)類型
print(f)
#書中有簡單提到math庫击碗,由于展開需要講很多內(nèi)容筑悴,本處不展開,內(nèi)置math庫包含了很多數(shù)學運算函數(shù)
字符串
k='this is a string' #字符串類型
s="string2" #用單引號或者雙引號都可以稍途,其他語言一般用單引號表示一個字符
print(k,w)
# 正則表達式是很強大的字符串解析方式阁吝,可以實現(xiàn)很多功能
import re #引入一個庫 用 import 庫名
patz=re.compile(r'is')
pu=patz.search(k)
if pu!=None: #如果能匹配上
print(pu[0])
本身字符串內(nèi)置了一些很有用的處理方法,如下:
- s.join(lst) #使用s作為連接符連接序列l(wèi)st中的字符串元素
- s.split(w) #以w作為分隔符械拍,得到一個字符串列表
- s.strip(chr) #刪除開頭和結(jié)尾的字符chr
還有l(wèi)ower突勇、upper等函數(shù)。
# 例子
s1='*'.join(['a','b','c'])
s2='this is a str'.split(' ') #以空格切分
s3='**23456***'.strip('*')
print('s1={0:s}'.format(s1))
print(s2)
print(s3)
日期
日期也是數(shù)據(jù)分析經(jīng)常遇到的一種數(shù)據(jù)類型坷虑,特別是金融方面甲馋,時間序列分析是數(shù)據(jù)分析很重要的一個研究領域,本書中說:
日期在大多數(shù)商業(yè)應用中都是必不可少的迄损。你需要知道一個事件在何時發(fā)生定躏,距離這件事 發(fā)生還有多少時間,或者幾個事件之間的時間間隔芹敌。因為日期是很多應用的核心痊远。--P19
Python中提供了很多庫用于時間處理,內(nèi)置的datetime庫很挺好用的氏捞,也有很多第三方的日期時間庫碧聪。書中只講了datetime(至少第一章只講了datetime)。
from datetime import date,datetime,timedelta
today = date.today() #獲得今天的日期
yesterday=today-timedelta(days=-1)
print(today) #print 出來
print(yesterday)
print(today.year)
>>> #以圖靈的Happy Hacking 2018 編程日歷里的代碼舉例
>>> now=datetime.now()
>>> print(now.strftime('%Y-%m-%d')) #格式化輸出
2018-03-13
今天的學習先整理這些幌衣,明天會繼續(xù)《Python數(shù)據(jù)分析基礎》的學習矾削,會比較深入地記關(guān)于列表/元組/字典三種內(nèi)置數(shù)據(jù)保存方式,還有文本文件的讀寫豁护。 如果讀者有任何意見或建議哼凯,歡迎留言補充!