版權(quán)聲明:本文為作者原創(chuàng)文章,可以隨意轉(zhuǎn)載,但必須在明確位置標明出處?。?!
從今天開始將進入Python數(shù)據(jù)分析的學(xué)習(xí),最終的目標是向機器學(xué)習(xí)方向靠攏,用到的數(shù)據(jù)將會是金融股票數(shù)據(jù),也順帶學(xué)習(xí)學(xué)習(xí)金融知識,我想不管你是那種類型的人,個人覺得都有必要學(xué)習(xí)和了解金融行業(yè)。
這兩年人工智能、機器學(xué)習(xí)十分火爆,國內(nèi)在這方面的人才缺口也比較大,不管是谷歌的AlphaGo還是,無人駕駛、百度機器人、阿里達摩院的成立,種種跡象都標明人工智能在未來5到10年將會呈現(xiàn)井噴式的發(fā)展,他將會用到醫(yī)療、工業(yè)、農(nóng)業(yè)、交通等等行業(yè),所以我們有必要去學(xué)習(xí)它、了解它、使用它,才能在未來占有一席之地。冰凍三尺非一日之寒,學(xué)習(xí)也一樣,人工智能和機器學(xué)習(xí)的起點都比較高,我們只能一點一點的去理解它、靠近它,就像打怪升級一樣、需要不聽的學(xué)習(xí)技能、買裝備、升級裝備、最終才能去打BOSS。
數(shù)據(jù)分析是我們必須要掌握的技能、Python中的數(shù)據(jù)分析用到的是pandas庫,該庫的核心是numpy, numpy是一個用Python實現(xiàn)的科學(xué)計算包,它包含一個強大的N維數(shù)組對象Array、成熟的函數(shù)庫、實用的線性代數(shù)、傅里葉變換和隨機數(shù)生成函數(shù)。下面就開始正式進入pandas的學(xué)習(xí)。
pandas的數(shù)據(jù)結(jié)構(gòu)
pandas有三種數(shù)據(jù)結(jié)構(gòu)
- Series:一維數(shù)組,與Numpy中的一維array類似。二者與Python基本的數(shù)據(jù)結(jié)構(gòu)List也很相近,其區(qū)別是:List中的元素可以是不同的數(shù)據(jù)類型,而Array和Series中則只允許存儲相同的數(shù)據(jù)類型,這樣可以更有效的使用內(nèi)存,提高運算效率。
- DataFrame: 二維的表格型數(shù)據(jù)結(jié)構(gòu)。多個Series結(jié)構(gòu)就組成了DataFrame數(shù)據(jù)結(jié)構(gòu),這里需要特別注意的是DataFrame是按照列來存儲的。
- Panel: 三維的數(shù)組,可以理解為DataFrame的容器。
Series的一些操作
-
Series定義
Series(data, index=index),data參數(shù)可以是整形、字符串、dict、ndarray、常量值。index是索引值,如果數(shù)據(jù)類型是ndarray,index的長度需要和data的長度一致,如果index沒有指定,那么索引將會從[0,....., len(data) -1]遞增。- ndarray數(shù)據(jù)類型
import pandas as pd
import numpy as np
s = pd.Series(np.random.randn(5), index=['a','b','c','d','e'])
print(s)
s = pd.Series(np.random.randn(5))
print(s)
OUT:
a -0.620323
b -0.189133
c 1.677690
d -1.480348
e -0.539061
dtype: float64
0 1.748631
1 -0.291825
2 1.002143
3 0.558046
4 1.119569
dtype: float64
-
字典(dict)類型數(shù)據(jù)
因為字典是key-value結(jié)構(gòu)存儲的,key相當于字典的索引了,那么在創(chuàng)建Series的時候若是不指定index參數(shù),Series就默認使用字典的key來作為所以,若是指定了則在字典中去關(guān)聯(lián)索引,如下:
import pandas as pd
import numpy as np
data = {'a':10, 'b':20, 'c':30}
s = pd.Series(data)
print(s)
s = pd.Series(data, index=['b', 'c', 'a', 'd'])
print(s)
OUT:
a 10
b 20
c 30
dtype: int64
b 20.0
c 30.0
a 10.0
d NaN
dtype: float64
-
常量作為輸入數(shù)據(jù)
如果是常量作為輸入數(shù)據(jù),常量值將會被重復(fù)index長度個數(shù)
import pandas as pd
import numpy as np
s = pd.Series(5, index=['b', 'c', 'a', 'd'])
print(s)
s = pd.Series(5)
print(s)
OUT:
b 5
c 5
a 5
d 5
dtype: int64
0 5
dtype: int64
切片、索引、dict操作
Series既然是一維數(shù)組類型的數(shù)據(jù)結(jié)構(gòu),那么它支持想數(shù)組那樣去操作它。通過數(shù)組下標索引、切片都可以去操作他,且它的data可以是dict類型的,那么它肯定也就支持字典的索引方式。
import pandas as pd
import numpy as np
s = pd.Series(np.random.randn(5), index=['a','b','c','d','e'])
print(s)
# 下標索引
print('下標索引方式s[0] = : %s' % s[0])
# 字典訪問方式
print('字典訪問方式s[b] = :%s' % s['b'])
# 切片操作
print('切片操作s[2:]\n:%s' % s[2:])
print('a' in s)
print('k' in s)
OUT:
a -0.799676
b -1.581704
c -1.240885
d 0.623757
e -0.234417
dtype: float64
下標索引方式s[0] = : -0.799676067487
字典訪問方式s[b] = :-1.58170351838
切片操作s[2:]:
c -1.240885
d 0.623757
e -0.234417
True
False
Series的算術(shù)操作
有了numpy這個科學(xué)計算包后,對數(shù)組中的算術(shù)操作我們不需要去遍歷每個元素然后對它進行計數(shù)。
- Series加法運算:
import pandas as pd
import numpy as np
s1 = pd.Series(np.random.randn(3), index=['a','b','c'])
s2 = pd.Series(np.random.randn(3), index=['a','b','c'])
s3 = pd.Series(np.random.randn(2), index=['a','b'])
s4 = pd.Series(np.random.randn(2), index=['e','f'])
print(s1)
print(s2)
# 對應(yīng)索引的值相加
print('索引值相同的登結(jié)果:\n%s\n' % (s1 + s2))
print(s1)
print(s3)
# 對應(yīng)索引的值相加
print('索引值部分不相同的登結(jié)果:\n%s\n' % (s1 + s3))
print(s1)
print(s4)
# 對應(yīng)索引的值相加
print('索引值都不相同的登結(jié)果:\n%s\n' % (s1 + s4))
OUT:
a 0.271685
b 0.547691
c -0.143253
dtype: float64
a -1.603913
b -0.464923
c 0.471518
dtype: float64
索引值相同的登結(jié)果:
a -1.332227
b 0.082768
c 0.328266
dtype: float64
a 0.271685
b 0.547691
c -0.143253
dtype: float64
a -0.690966
b 1.131122
dtype: float64
索引值部分不相同的登結(jié)果:
a -0.419281
b 1.678812
c NaN
dtype: float64
a 0.271685
b 0.547691
c -0.143253
dtype: float64
e -1.898507
f 0.153425
dtype: float64
索引值都不相同的登結(jié)果:
a NaN
b NaN
c NaN
e NaN
f NaN
dtype: float64
- Series乘法運算:
import pandas as pd
import numpy as np
s1 = pd.Series(np.random.randn(3), index=['a','b','c'])
s2 = pd.Series(np.random.randn(3), index=['a','b','c'])
print(s1)
print(s2)
print('s1 * s2 = \n%s' % (s1 * s2))
print('s1 * 10 = \n%s' % (s1 * 10))
OUT:
a -0.149056
b 0.637856
c -1.357440
dtype: float64
a -0.443937
b -0.695017
c 2.217806
dtype: float64
s1 * s2 =
a 0.066171
b -0.443321
c -3.010538
dtype: float64
s1 * 10 =
a -1.490556
b 6.378556
c -13.574397
dtype: float64
算術(shù)操作都是按照索引去操作的,如果一個兩個Series的對所不同,那么他們的結(jié)果將是一個union操作,他們的非交集將會用缺省值NaN代替。
okay, Series的介紹就到這里,希望你能跟我一起去學(xué)習(xí),去進步