七週成爲數據分析師--python篇④

python 篇

講講python吧,主要分爲數據科學環境、基礎、numpy和pandas、數據可視化、數據分析案例、數據分析平臺這幾塊。

1. 數據環境
數據環境anaconda(狂蟒之災),可以直接百度清華鏡像下載。接着構建運行環境 jupyter notebook,最後寫下第一行代碼print(‘hello world’),告訴大家我來啦!
2.基礎小知識
操作方面:
shift+tab 常常用來看函數的內涵步驟
shift+回車 執行完跳至下一單元格
ctrl+回車 單純執行本單元格
python 很注重縮進,特別是if elif這樣的嵌套時,
左縮進 Ctrl + [
右縮進 Ctrl + ]
加註釋 Alt + 3
去註釋 Alt + 4

知識點:
轉義字符
在這裏插入圖片描述
type()查詢數據類型

例如type(1)=int; type(1.1)=float;type(‘a’)=str;拓展至其他float(1)=1.1;int(1.1)=1;str(1)=‘1’

講講餘數、整除
3//2=1 7//2=3 (表示去餘數,取商)
3/2=1.5 7/2=3.5(正常的除法)
3%2=1 7%2=1 4%2=0 (表示取餘數,常常用來判定是否整除)
講到這裏要講一點整除這樣的邏輯判斷,在SQL和PYTHON中都是用‘==’,兩個等於號。等於在語言裏面的概念其實是賦值。

字符串
在這裏,‘’和“”其實表達的意思都差不多,也可以用來表示字符串,但就是用法不一樣,比如存在嵌套的情況,“hello ‘xcw’”或者‘hello “xcw”’,如果裏面既有雙引號又有單引號,或是其他一些特殊符號就用’’'來包裹。

一些邏輯運算

‘1’+‘1’會報錯;int(‘1’)+1不會報錯
True、False 表述時一定要大寫首字哦,稱爲布爾的一種數據類型,type(True)=bool,True表示1,False表示0
比如True +1=2,可以運算。False+1=1,可以運算。
(1<2)+1=2,可以運算
1<2+1=1,在運算中,先算加減乘除,再判斷邏輯條件。

None和‘ ’

None表示的是缺失而不是0,常常sql 中left join 出來的會有很多none,none+1是無法運算的,把他想象成一個單元格的缺失。而‘’
表示的是值爲空,也不是爲0。 兩者的區別可以認爲‘’表示的是有這樣一個單元格,但是還沒賦上值,而none表示的是連這個單元格都還沒有,直接缺失了。

變量
比如 a是一個變量,可以是字符串也可以重新賦值
a=1,b=2
a+b=3
a=2
a+b=4


數據結構
python中的數據結構有三個,
列表[]類似數組
字典{} 也稱鍵值對例a={‘name’:‘xcw’}
元組()
列表有序,查詢快,增刪慢,所佔空間小(類似數組),允許賦值修改
字典無序,查詢慢,增刪快,所佔空間大(類似鏈表),不論多少查詢速度都是相等的,允許賦值修改
元組不可替換修改,但可以索引。

1、列表
num=[1,2,3]
len(num)=3
len([1,2,3,4])=4
列表有點類似我們大學學的線性代數,矩陣。

2、索引,有時候也叫切片。
可以索引位置、關鍵值key。
比如num[0],表示取num列表的第一個位置。
涉及到兩個知識點,第一在python中,只要是索引都是用[],
第二,英文中習慣把0當做順序第一位,比如num[2]表示索引第3個位置,num[-1]表示索引最後一個位置。

索引一個段落num[0:1] 其中num=[1,2,3]
只反饋[1] 原因是 系統默認左閉右開,比如想取前兩個數,我們要用num[0:2],當然默認num[ :2]也行,系統會自動索引到第2個位置;num[0:]表示從第一個位置,索引到最後一個位置

索引的是列,向一列切片。合併是按行,例如num=[[1,2],[3,4]] num[0]+num[1]=[1,2,3,4],比如索引後直接相加,表示的是合併,並不是值相加

3、增、刪、替換
注意:一般調用函數都是xx.函數加()
增:num.insert(,),第一個_表示某某位置前,第二個表示對象
比如:
在第3個位置前加一個[7,8]
num.append(),表示在末尾加一個數,等同於num=num+[7,8]都只是合併的,如果要看相加,只有一種用numpy中轉化爲數組,另一種就是用for循環,具體可以看另一篇博文
在這裏插入圖片描述
[如圖是在第4行加了7,8

刪除num.pop(位置)
空白的話是默認刪去最後一個
替換直接用等號賦值,num[0]=1;num[0]=2;num,最後num輸出2
注意元組不能修改,比如a=(1,2),再使a=(3,4),此時是會報錯的

但元組的索引還是[],a=[1,2],a[0]=1是ok的
索引info[1][0] 舉例info=[[‘1’,‘2’,‘3’],[‘4’,‘5’,‘6’]] 輸出第二行第一列,輸出‘4’,這時4是字符串

快速生成幾列 row=[0]3=[0,0,0] row4=[[0,0,0],[0,0,0],[0,0,0],[0,0,0]] 4行3列

4、set(列表) 集合化
配合list去重,例如list(set([1,2,2,3,1])) 推出[1,2,3,1]
集合不能加減乘除,但可以求交集、並集、補集
例如:set(a)-set(b),差集,表示在a中排除b的值


- 字典 {}

鍵值對 ,‘key’: ‘value’

舉例a={‘name’:‘qinlu’,‘sex’:‘female’,‘age’=‘18’}
一般前面會加’id’:1

索引還是用a[‘id’]=1,a[‘name’] =qiulu,但比如索引a[1],這時候時會報錯的,因爲字典本身沒有什麼順序的概念。

講講區別只有字典可以直接索引字符串,前面元組和列表不能索引字符串,只能索引位置。
例a.keys(),提取字典的關鍵字,a.values(),提取字典的值

講講字典和列表的區別,字典無論多少,他的查找速度是相同的,性能佔比比較小,因爲他無序存放,但他佔的空間大。
而列表佔得空間小,但由於有序存放,他的後期效率會變慢,性能佔比大,查找速度會逐漸變慢。
字典允許修改,直接給key重新賦值,a[‘id’]=2。

  1. :a[鍵]=值,直接在後面加上鍵值對的賦值,
    比如a={‘a’:‘b’,‘c’:‘1’},a[‘5’]=‘d’,a={‘a’:‘b’,‘c’:‘1’,‘5’:d"}
  2. **刪 ** a.pop(‘鍵’),直接把鍵刪了,對應的值也會刪了

3、提取的是字典中的 鍵 、值、整個字典
a={‘name’:‘1’,‘b’:‘2’}
a.keys()=dict_keys([‘name’,‘b’])再加一個list(),直接列表化
list(a.value())=[‘1’,‘2’]
list(a.items())=[(‘name’,‘1’),(‘b’,‘2’)] []裏面是元組的形式

4、講講取字典的數 a.get()
a.get(‘鍵’,‘none’),表示取到就是keys對應的值,沒取到返回none

5、講講字典中的更新值a.setdefault()
比如a.setdefault(鍵,值)
如果在a中查到相應的鍵,就會替換更新,沒查到相應的鍵,就會自動在後面加上新的鍵值對

6、講講控制流
a=10
if a>10:
print(‘more than10’)
if a=10:
print…
else:
print(’’)

講講elif 和不加elif 區別
a = True
b=True
if a:
print(“代碼塊1”)
if b:
print(“代碼塊2”)
代碼塊1和代碼塊2都會被輸出,而再想一下如果是使用elif:

a = True
b=True
if a:
print(“代碼塊1”)
elif b:
print(“代碼塊2”)
只會輸出代碼塊1,而不會輸出代碼塊2了

elif翻譯過來大概是 ”否則的話如果…‘’

就是說一個是同時並列判斷,另一個有點互斥判斷,elif前如果 碰到true的邏輯,就會跳出判斷,而if碰到true,還是會往下繼續判斷下一個if是不是滿足條件。


最後再來講講循環語句(while,for)

1、while是一直循環+條件判斷,直到邏輯判斷爲false,同時記得要加邏輯判斷條件,不然會死循環。
break 直接斷開,但是要注意縮進

2、for i in range():,for 比較不容易死循環
print(i)

range(3,5),左閉右開,不含5

a=0
for i in range(1,11):
a=a+i #注意縮進,不然執行不了
print(a)

列表中的循環
a =[‘a’,‘b’,‘c’]
for i in a: #記得加:哦,帥哥
print(i)
a b c

字典中的循環
dict={‘a’:1,‘b’:3,‘c’:5}
for k in dict.keys():
print (k)
a b c

同時for 支持多循環
for v,m in dist.items()
print(k)
print(m)

循環進階
1、輸出1-100的數字
list=[]
for i in range(1,101):
list.append(i) #記得縮進!!!!!!!!!!
print(list)

2、取字典中的值進行平方
dict={‘a’:1,‘b’:2,‘c’:3}
[v**2 for v in dict.values()] #記得加上【】
[1,4,9]

3、輸出1-10偶數
[i for i in range(1,11)if i%2==0]
邏輯放後面,加[]


小運用的例子:

1、def() 定義函數
拿python構建四則運算器

def niubi(x,y,z):
    if z=='plus':
        return x+y
    elif z=='minus':
        return x-y 
    elif z=='time':
        return x*y
    elif z=='divide':
        return x/y
    else:
        return 0

定義一個函數名爲niubi
進行多次判斷,注意elif此時不是嵌套,是並列的邏輯判斷
輸入對應的值和計算方式!
2、用python充當excel

def desc(list):
    size=len(list)
    aver=sum(list)/size
    #計算中位數#
    list.sort()#先進行排序,由於中位數定義是從小到大取中間#
    if size%2 ==0:
        mid=(list[(size//2-1)]+list[(size//2)])/2
    else:
        mid=list[size//2]
    print('max=', max(list))
    print('min=', min(list))
    print('mid=', mid)
    print('size=', size)

list是一個列表也就是數組,看成線性代數的[]。三大數據結構之一,其他兩個是字典{},和元組()。

size//2表示去餘數的值,比如10//2=5,10/2=5,10%2=0(這個是取餘數,常用於判斷奇偶)

這樣,我們輸入的值也要是數組的形式,a=[1,2,3,4,5]類似這樣

由於實際之中,本身的值不一定會從小到大排列,因此要加一個list.sort()

最後輸入相應的數組值就好啦!
以生成1至100的數值,間隔4爲例

desc([i for i in range(1,100,4)])

如圖
3、+號和合並

在python項目中,很多時候需要對列表的各項進行加減操作,今天我們一起來學習一下吧!
當需要對列表進行相加時,一般意義上的【+】在python中卻表示連接的意思。這裏提供兩種方法供大家參考一下;第一種是利用【for】循環,第二種是利用numpy函數;首先構建兩個列表a和b;
在這裏插入圖片描述
需要注意的是,相加兩個列表的長度需要相等,所以在計算之前,可以使用【len】函數判斷是否相等,其實若是很簡單可以一眼看出的列表,這一步可以省去;在這裏插入圖片描述
定義一個空列表【c】用來當作新算出的列表;
c[]
接下來就可以使用一個【for】循環就能解決了,利用長度依次取出列表中的值,逐項相加,打印出【c】;

a=[1,2,3,4,5]
b=[2,3,4,5,6]

if len(a)==len(b):
c=[]
for i in range(len(a)):
c1=a[i]+b[i]
c.append(c1)
print( C)

在這裏插入圖片描述
第二種就是利用numpy包來執行,首先導入numpy包;利用【array】函數將列表轉換成數組形式,只有這種形式才能實現相加;
在這裏插入圖片描述
再利用numpy包的求和函數【sum】進行逐項相加,【axis】表示每一行中對應列數相加,可看出結果如下,對於大數據集來說,比之第一種要方便很多呢;

import numpy as np
a=[1,2,3,4,5]
b=[2,3,4,5,6]
a1=np.array(a)
b1=np.array(b)
print(a1)
print(b1)
c=np.sum([a1,b1],axis=0)
print©
在這裏插入圖片描述
axis=1
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章