數據分析快速總結

數據分析總結:
導入import numpy as np
np.version #version查看numpy的版本
type()查看數據的類型
xx.dtype 查看數據中元素的類型
xx.shape #shape數據的形狀
導入
import matplotlib.pyplot as plt
例如:
cat =plt.imread("./cat.jpg")#imread是讀取照片的位置
plt.imshow(cat)#展現cat數據
plt.show()
重要:
nd6 = np.array([[[1,2,3,5],[4,5,6,5]],[[1,2,3,5],[4,5,6,5]]])
nd6.shape
#這個一定要看懂
坑:
rgb jpg格式的圖片0-255

np.ones(shape, dtype=None, order='C')
例:
	ones = np.ones((456,730,3),dtype = "float")
	ones
numpy.zeros(shape, dtype=float, order=’C’)
	參數:
		shape:int或int類型序列,表示矩陣形狀
		dtype:輸出的數據類型
		order:‘C’ 或者 ‘F’,表示數組在內存的存放次序是以行(C)爲主還是以列(F)爲主
np.zeros((456,730,3),dtype="float")
	zeros的使用方法】

	B=zeros(n):生成n×n全零陣。

	B=zeros(m,n):生成m×n全零陣。

	B=zeros([m n]):生成m×n全零陣。

	B=zeros(d1,d2,d3……):生成d1×d2×d3×……全零陣或數組。

	B=zeros([d1 d2 d3……]):生成d1×d2×d3×……全零陣或數組。

	B=zeros(size(A)):生成與矩陣A相同大小的全零陣。


numpy.full(shape, fill_value, dtype=None, order=’C’)
	參數:
			shape:int或int類型序列,表示矩陣形狀
			fill_value:填充值
			dtype:輸出的數據類型
			order:‘C’ 或者 ‘F’,表示數組在內存的存放次序是以行(C)爲主還是以列(F)爲主
nd4 = np.full(12,fill_value=1024)


numpy.eye(N, M=None, k=0, dtype=float)
	參數:
			N:行數
			M:列數
			k:對角線偏移
			dtype:輸出的數據類型
	對角矩陣(主對角線上元素都爲1,其他元素都爲0)——對角線向右上方偏移k(k>0向右上方偏移,k<0向左下方偏移)
	例:
		 np.eye(2, dtype=int)
		 np.eye(3, k=1)

 np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

  np.random.randint(low, high=None, size=None, dtype='l')#生成一個整數或N維整數數組,取數範圍:若high不爲None時,取[low,high)之間隨機整數,否則取值[0,low)之間隨機整數。
  例:
  	 nd1=np.random.randint(0,255,size=(3,4,2))


  numpy.random.rand(d0, d1, ..., dn):生成一個[0,1)之間的隨機浮點數或N維浮點數組
  例:



  numpy.random.randn(d0, d1, ..., dn):生成一個浮點數或N維浮點數組,取數範圍:正態分佈的隨機樣本數。
  例:
  	np.random.randn(10,2,1)


  np.arange([start, ]stop, [step, ]dtype=None)
  例:
  	np.arange(start = 5,stop = 10,dtype= float)
  	np.random.random(size=(12,2))
  numpy.random.choice(a, size=None, replace=True, p=None):從序列中獲取元素,若a爲整數,元素取值爲np.range(a)中隨機數;若a爲數組,取值爲a數組元素中隨機元素。
   例:


ndarray的屬性:
	4個必記參數: ndim:維度 shape:形狀(各維度的長度) size:總長度
索引總結:
	l[4]  4代表的下座標
	可以根據索引修改數據:
		nd[1,1,1]=0
	切片:
		同理
數據反轉:
	例子:
		nd1=[27, 86, 82, 15,  4,  1,  1, 84, 23, 55, 61]
		反轉:
			nd[::-1]
		結果:
			nd1=[61, 55, 23, 84,  1,  1,  4, 15, 82, 86, 27]



np.hstack與np.vstack  水平級聯與垂直級聯,處理自己,進行維度的變更
np.hstack如果是水平的 就變成垂直的 就是列變成行
np.vstack如果是垂直的 就變成水平的 就是行變成列
切分:
	np.split
	np.vsplit
	np.hsplit
np.hsplit:一行爲基準 進行切分	np.hsplit(nd, [1,3,5])就是1單獨一份 3單獨一份,5單獨一份 其他一份
np.vsplit;一列爲基準 進行切分

np.split(nd, [2], axis = 1)
#axis = 0  和vsplit一樣的效果     axis = 1 和 hspilt一樣的效果

np.sum 和 np.nansum 的區別 nan not a number
	nan與數相加還是nan


矩陣積np.dot()
	np.dot(nd1,nd2)#兩個ndarray 在進行相乘的時候,一個數據的行和一個數據 的列必須相同

必記:
	astype數據類型轉化的函數
	例子:
		a=dtype('uint8')
		b=a.astype('uint32')		
	cat.flags.writeable = True #改成可寫
	np.concatenate()

	運算:sum 和 max最大 min最小 mean平均數 argmin最小數的下座標 argmin、argsum同理
	nd.sum(axis = 0) 列爲準 上下數相加
	nd.sum(axis = 1) 行爲準 一行相加
	ndarray的矩陣操作: + - / * 系統函數:add subtract
	np.sort()不改變輸入  含義:這個函數不改變原始的數據 排序後 再次打印原始的數據 還是以前的數據
	ndarray.sort()本地處理,不佔用空間,但改變輸入  含義:這個函數改變了原始的數據 再次打印 打印的排序後的數據
	np.partition(a,k)
		當k爲正時,我們想要得到最小的k個數
		當k爲負時,我們想要得到最大的k個數
	luban.shape#就是降維操作

	#cv2在讀圖片的時候,是以BGR格式     RGB
	sanpang = cv2.imread("./cv2_change_head/j.jpg")
	plt.imshow(sanpang[::,::,::-1])

	#作用,加載各種算法的類
	cascade = cv2.CascadeClassifier()

	#加載算法
	cascade.load("./cv2_change_head/haarcascade_frontalface_default.xml")
	#識別人臉
	face = cascade.detectMultiScale(sanpang)
	face


Pandas的數據結構
		import pandas as pd
		from pandas import Series,DataFrame
		import numpy as np
	Series是一種類似與一維數組的對象,由下面兩個部分組成:
			values:一組數據(ndarray類型)
			index:相關的數據索引標籤
			Series 就是對ndarray的包裝
		索引:
			s[["pi","a"]] 裏面還要套一個括號

			方法二:loc操作
			s.loc["pi"] 左閉右閉
			總結:兩個中括號出來的數據,就是當前數據類型, 一箇中括號是元素的類型
		(2) 隱式索引:
				s.iloc[0:2]
			loc 進行切片的時候, 左閉右閉    iloc進行切片的時候左閉右開
		Series的基本概念:
			shape,類型
			size,幾維數據
			index,行數據
			values列數據
		head(),tail()快速查看Series對象的樣式
		xxx.head(3)查看前3行數據
		xxx.tail(3)查看後3行數據


		#===============================================
		重點:
			導入
				csv文件或者 excel表格, 或者txt
				例:data = pd.read_csv("./president_heights.csv")
							pd.read_excel
				還可以是json數據 html數據
		可以使用pd.isnull(),pd.notnull(),或自帶isnull(),notnull()函數檢測缺失數據
		pd.isnull(s)
		#返回的結果 Series   每個元素是boolean
		如果有空的數據則是返回True
		pd.notnull()
		如果不是空的數據則是返回True
		#================================================
		創建Series
		例:
			s = Series(data = np.random.randint(0,150,size = 5), index = ["張三","李四","Sara","Lisa","Michale"], 
           name = "Python")
         Series之間的運算,在運算中自動對齊不同索引的數據,如果索引不對應,則補NaN。
DataFrame
	是一個【表格型】的數據結構,可以看做是【由Series組成的字典】(共用同一個索引)。DataFrame由按一定順序排列的多列數據組成。設計初衷是將Series的使用場景從一維拓展到多維。DataFrame既有行索引,也有列索引。
	行索引:index
	列索引:columns
	值:values(numpy的二維數組)
	DataFrame以字典的鍵作爲每一【列】的名稱,以字典的值(一個數組)作爲每一列。
	創建:
		例:
			df1 = DataFrame(data = {"Python":[99,101,120,78],
                   "數學":[120,136,141,149],
                   "漢語":[123,114,130,117]}, 
            index = list("abcd"))
			df1
				Python	數學	漢語	英語
				a	99	120	123	NaN
				b	101	136	114	NaN
				c	120	141	130	NaN
				d	78	149	117	NaN
	DataFrame的索引
			可以將DataFrame的列獲取爲一個Series。返回的Series擁有原DataFrame相同的索引,且name屬性也已經設置好了,就是相應的列名。

		對行進行索引
		- 使用.ix[]來進行行索引
		- 使用.loc[]加index來進行行索引     左閉右閉
		- 使用.iloc[]加整數來進行行索引     左閉右開


			對行進行索引的額時候使用loc或者iloc   對列進行索引的時候,直接使用中括號

#但是一定要注意 一箇中括號和兩個中括號的區別, 列不能切片的

	 Series與DataFrame之間的運算
		使用Python操作符:以行爲單位操作(參數必須是行),對所有行都有效。(類似於numpy中二維數組與一維數組的運算,但可能出現NaN)
		使用pandas操作函數:
		    axis=0:以列爲單位操作(參數必須是列),對所有列都有效。
			axis=1:以行爲單位操作(參數必須是行),對所有行都有效。
	Series與DataFrame之間的區別
		Series 可以簡單地被認爲是一維的數組。 
		Series 和一維數組最主要的區別在於 Series 類型具有索引( index )。
		可以調用as_matrix()將其轉換爲ndarray類型的對象
		DataFrame對象
			將數個 Series 按列合併而成的二維數據結構,每一列單獨取出來是一個 Series

=========================================================================
Series也可以創建多層索引
例:
s = Series(data = [1,2,3,“a”],
index = [[“a”,“a”,“b”,“b”], [“期中”,“期末”,“期中”,“期末”]])
s

			#三層索引
				df = DataFrame(data = np.random.randint(0,150,size = 8),
				              index = [["a","a","a","a","b","b","b","b"],
				                       ["期中","期中","期末","期末","期中","期中","期末","期末"],
				                       ["一單元","二單元","一單元","二單元","一單元","二單元","一單元","二單元"]],
				              columns = ["Python"])
				df
				#隱式創建
	造pd.MultiIndex
		方式1:
			df1 = DataFrame(data = np.random.randint(0,100,size = 8),
	               index = pd.MultiIndex.from_arrays([["a","a","a","a","b","b","b","b"],
	                       ["期中","期中","期末","期末","期中","期中","期末","期末"],
	                       ["一單元","二單元","一單元","二單元","一單元","二單元","一單元","二單元"]]),
	               columns = ["Python"])
			df1
		方式2:
			df3 = DataFrame(np.random.randint(0,150,size = 4),
	               index = pd.MultiIndex.from_tuples([("a",1),("a",2),("b",1),("b",2)]),
	               columns = ["Python"])
			df3
		方式3:
			df4 = DataFrame(np.random.randint(0,150,size = (8,2)),
	               index = pd.MultiIndex.from_product([list("abcd"), ["期中","期末"]]), 
	               columns = ["Python","數學"])
			df4
	索引的堆(stack)
		df4.unstack() #把第二層行索引變成了列索引
		df4.unstack(level = 0) #把行索引變成列索引
		#stack 是把列變成行索引
		總結:使用stack()的時候,level等於哪一個,哪一個就消失,出現在行裏。
				使用stack()的時候,level等於哪一個,哪一個就消失,出現在行裏。
	聚合操作:
		需要指定axis
		和unstack()相反,聚合的時候,axis等於哪一個,哪一個就保留
		例:
			div()平均數
			df4.sum(axis =0) 列爲主
			df4.sum(axis = 1) 行爲主
			df4.std()標準差
	=====================================================================
	pandas的拼接操作
		注意:在進行pandas 級聯的時候, 一定要注意軸的變化
		參數ignore_index  含義:重新索引
		pd.concat()默認axis=0
		例:
pd.concat([df1, df3], axis = 1)
					a	b	c	d	e	f
					1	a1	b1	c1	d1	e1	f1
					2	a2	b2	c2	d2	e2	f2
					3	a3	b3	c3	d3	e3	f3
			pd.concat([df1, df2])默認axis=0
						a	b	c
					1	a1	b1	c1
					2	a2	b2	c2
					3	a3	b3	c3
					4	a4	b4	c4
					5	a5	b5	c5
					6	a6	b6	c6

			使用多層索引 keys
				concat([x,y],keys=['x','y'])
			不匹配級聯
				外連接:補NaN(默認模式)
				df1
				a	b	c
				1	a1	b1	c1
				2	a2	b2	c2
				3	a3	b3	c3

				df5  = make_df(list("abcd"), [3,4,5,6])
				df5

					a	b	c	d
				3	a3	b3	c3	d3
				4	a4	b4	c4	d4
				5	a5	b5	c5	d5
				6	a6	b6	c6	d6
				pd.concat([df1, df5], join = "outer")
					a	b	c	d
				1	a1	b1	c1	NaN
				2	a2	b2	c2	NaN
				3	a3	b3	c3	NaN
				3	a3	b3	c3	d3
				4	a4	b4	c4	d4
				5	a5	b5	c5	d5
				6	a6	b6	c6	d6
			內連接:只連接匹配的項
				pd.concat([df1,df5], join = "inner")
					a	b	c
				1	a1	b1	c1
				2	a2	b2	c2
				3	a3	b3	c3
				3	a3	b3	c3
				4	a4	b4	c4
				5	a5	b5	c5
				6	a6	b6	c6
				df6 = make_df(list("abcz"), [3,4,7,8])
				df6
				df6.columns
				pd.concat([df1,df2,df5,df6], join_axes=[df6.columns])
				#連接指定的軸
					a	b	c	z
				1	a1	b1	c1	NaN
				2	a2	b2	c2	NaN
				3	a3	b3	c3	NaN
				4	a4	b4	c4	NaN
				5	a5	b5	c5	NaN
				6	a6	b6	c6	NaN
				3	a3	b3	c3	NaN
				4	a4	b4	c4	NaN
				5	a5	b5	c5	NaN
				6	a6	b6	c6	NaN
				3	a3	b3	c3	z3
				4	a4	b4	c4	z4
				7	a7	b7	c7	z7
				8	a8	b8	c8	z
		使用append()函數添加
			s1 = ["123"]
			s1.append("456")
	使用pd.merge()合併
	===========================
	merge與concat的區別在於,merge需要依據某一共同的行或列來進行合併
	使用pd.merge()合併時,會自動根據兩者相同column名稱的那一列,作爲key來進行合併。
	注意每一列元素的順序不要求一致
---==================================
	一對一合併:
df1 = DataFrame({"age":[30,22,36],
                "work":["tech","accounting","sell"],
                "sex":["男","女","女"]}, 
               index = list("abc"))
			df1
				age	sex	work
			a	30	男	tech
			b	22	女	accounting
			c	36	女	sell
			df2 = DataFrame({"home":["上海","安徽","山東"],
                "work":["tech","accounting","sell"],
                "weight":[60,50,40]}, index = list("abc"))
			df2
				home	weight	work
			a	上海	60	tech
			b	安徽	50	accounting
			c	山東	40	sell

			
			df1.merge(df2)
			age	sex	work	home	weight
			0	30	男	tech	上海	60
			1	22	女	accounting	安徽	50
			2	36	女	sell	山東	40
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章