1. 程式人生 > >第七週:Python

第七週:Python

本人目前是python小白,所以此篇筆記相對圖片內容較多,邏輯層級盡最大努力整理了一下。課程相對我這小白需要慢慢吸收,鑑於課程較多還是決定分段整理一下。

【python的應用場景】

重複性的東西編寫指令碼

和對於大資料量的操作

 

【資料搭建的環境】

不建議自己在網上找下載,建議下載anaconda,可在清華映象裡面下載anaconda,下載安裝之後可在桌面上找到程式image.png

jupyer Notebook 為本次學習的常用專案,可進行視覺化介面操作,分段

shift+游標執行

image.png

【python基礎】

1.資料型別:

數值型,直接輸入可以進行計算

image.png

可用type進行資料型別的判斷

image.png

返回整除的結果

image.png

顯示餘數的結果

image.png

int整數直接計算

image.png

在python裡面單雙引號基本沒有影響,但是在一段話表示的時候裡面有單引號,整段話兩邊套上雙引號才能識別,都為單引號系統則識別不了。相反,整句裡面用雙引號,整句的時候則用單引號作為系統區分。

image.png

系統報錯,將單引號改成雙引號就可以識別(雙引號為具體內容的邊界)

邊界用三引號的時候,內容可以包含單雙引號的。

字串:字元串同樣不能直接進行計算,可用int轉換成數字進行計算。

bool陣列(ture預設為1,false預設為0):是可以進行與數字加減運算的

image.png

注意,第一個字母要大寫

None:代表缺失值,不能進行運算(相當於表格內畫斜線的格子)

“”:代表空值

 

2.變數,對應的叫“常量”

a=1

變數=1(不加引號的時候就是變數,中文也可以,但是不建議用,因為相容性差)

image.png

同時給對個變數賦值:a,b=1,2

 

3.三大結構:列表、字典、元組

【列表】num=[1,2,3]表示資料裡面有1,2,3,可以對其進行運算

len()列表裡面有幾個元素

訪問列表裡面有幾個元素:列表名[]  第一個位置是“0”表示

image.png

查詢sql、增加、更改、刪除

shift+tab幫助鍵查

insert(位置,插入內容)插入

apped(插入內容)在末尾新增內容,但是插入的是唯一的值,不能新增多個因素

變數=變數+[內容1,內容2]新增多個因素可以此方法

image.png

pop(位置)刪除,直接空的話預設刪除末尾的數字

更改

image.png

二維列表的建立

image.png

image.png

image.png

【元組】:()

元組不能修改,與列表對比

【字典】:0

鍵key值value對

在磁碟上佔用空間比較大,查詢效果一直會很快

image.png

image.png

set()將列表集合化,相當並集去重

list(set())將set進行巢狀變成新的列表

image.png

image.png

4.控制流:if  for  while

【if】判斷

image.png

【while】迴圈

image.png

image.png

【for】for i  in range(10)   10代表一個列表

for優點就是不容易形成死迴圈

image.png

 需要1~100之間的數字

image.png

image.png

換一種寫法,一句等同以上三句的效果

 

5.def命名函式

”:“換行縮排表示def內部的函式內容

image.png

image.png

1~10之間求平方

map()全匹配

image.png

image.png

免除了定義函式的苦惱

python有很多第三方庫,可以進行載入使用

載入:import collection

其中collection為第三方模組

image.png

常用包:

image.png

特性是用法比較簡單,並且有很多共享的第三方包

 

 


下期內容o(* ̄︶ ̄*)o:

【Numpy和Pands】這兩個是常用於統計分析,可以幫我們處理上千條資料

Numpy包進行載入

image.png

 

Python的特點是語法比較簡單,並且有很多可以共享的第三方包其中今天提到的Numpy和Pandas這兩個包常用語統計分析,這兩個包會幫助我們保證速度的處理上千條資料。

【Numpy包進行載入和使用】

image.png

image.png

image.png

可用type檢視資料型別

利用a變數對陣列進行賦值

一樣可以接受與陣列一樣的切片,簡單運算

image.png

image.png

能夠進行多維資料結構

image.png

注意資料型別的區別“int32“

 

【Pandas包】價效比會相對較高一些(因為是基於Numpy開發的)--操作方面更加習慣,資料框的形式。

進行載入並重命名為pd:import pandas as pd

image.png

其主要有兩個資料結構:

1.Series,一維的,在tab搜尋時首字母S要大寫

image.png

從0開始到4結束,索引

有一些比較高的屬性shift+tab調出檢視裡面支援哪些引數

image.png

結果區別

image.png

索引查詢

image.png

索引也可以進行多個值索引,索引是列表表示,所以需要有方括號。

image.png

最外面的方括號代表索引方式

裡面的方括號,代表索引的內容一個列表

image.png

比較智慧的可以自動補缺

image.png

特性:原始的數值型別的內容增加一個字串,則整體都會變成字串,資料型別會保證統一。

基礎是一維的近似於陣列的結構。

2.dataframe 二維的,視覺上比較接近表格

相當於無數的一維疊加起來,支援多形式輸入

通過字典來輸入資料框:

image.png

會發現順序改變,是因為字典本身就是無需的

進行一維輸入:會發現,兩者不等價,資料結構是不一樣的

image.png

對資料框進行切片,資料型別進行變換

image.png

等價程式碼df.age,與別的一起寫有可能會報錯,建議用方括號的切片形式

基於行的切片

image.png

同時可切多個值

image.png

image.png

image.png

以上主要是些標準的查詢

單獨搜尋某一值

image.png

字串的更改

image.png

針對的是某個行和某個列

 

某一個特定值的篩選“年齡為18歲的”

方法1:邏輯判斷

image.png

image.png

外面的df是提取出來,裡面的df代表的是邏輯判斷。

提取結構就是TRUE的結果內容

image.png

多條件的篩選查詢

image.png

同時滿足這兩個條件的,“|”為並集

方法2:邏輯判斷

image.png

iloc和loc查詢(可同時滿足兩個引數進行切片的)

iloc所在行的數字進行索引,是針對第幾行的

image.png

loc是針對標籤進行切片的

image.png

(可同時滿足兩個引數進行切片的)

image.png

image.png

df.ix是可以行和標籤一起使用,但是還是會報錯,不建議使用。

image.png

【讀入.csv檔案:read.csv】

首先把檔案放在相同的目錄下面

image.png

本身預設讀取就是utf所以讀取會很順暢

如果改成讀取gbk則會報錯,如果讀取gbk需要進行設定解析編碼

image.png

檢視前幾行:

image.png

檢視尾行:df.tail()

檢視資料型別依然用:df.info()

image.png

image.png

image.png

image.png

還可以繼續追加篩選過濾條件

image.png

 

【資料的篩選】

1.轉至

表名稱.T,可將表格快速的轉至image.png

2.排序

【values】函式

方法1:排序的依據by="排序依據"

image.png

方法2:通過陣列也可以進行排序

df.avg.sort_values()

二者區別是,如果用陣列調,返回的是陣列,在資料框裡面調直接返回的是資料框。

ascending=False改變排序升序為降序

對欄位進行排序:直接把條件加入

image.png

列出的表不是根據實際的中文順序進行的,介意的話需建另一張表格進行調整。

【index】按照索引的排序

image.png

【rank】函式

image.png

image.png

預設順序為升序排列,新增ascending引數改為降序

method引數預設為加權平均,改為“min”直接用排序第一個,符合現實使用的習慣。改為“first”則排序不考慮並列情況直接按照順序來進行。

3.查詢重複

image.png

直接可查出有多少個唯一值

image.png

加個count可直接查找出合計數量

4.描述性統計

image.png

image.png

5.累計累加

image.png

6.分段統計

使用更加適合分段統計的cut函式

=pd.cut(df.avg.bins=5) 系統自動分割成5部分

也可以自定義區間,然後命名

image.png

常用於使用者分級、消費水平分割等使用場景

7.分位法進行分割統計

分位法函式:.qcut()

image.png

x具體的內容例如df.avg

q排名幾等分

retbins是否包含開區間閉區間

precision分割出來的精度

duplicates是否要進行些去重操作

 

【資料的聚合】

聚合函式:mysql不支援分組排名,則可用此函式groupby

image.png

通過for迴圈可把分組內容打印出來進行檢視

image.png

【多表關聯】

三種關聯方法

1.merge根據鍵值,對的是某一列

image.png

同名去重不同名保留

附加:
修改表的欄位名稱可用rename()函式
也可把行名提取出來,然後從0開始查其位置進行更改,再賦值的方法(一般用於只改一個,比較簡單)
col=list(df.columns)
col[0]='all'
df.columns=col

2.join針對索引進行

image.png

針對的是固定的索引例如日期

3.concat堆疊,對應的是物件

image.png

兩張表格上下放一起,“暴力組合”

之間是上下拼接,增加函式 .axis=1 進行左右拼接,對不上的預設為空值。

應用場景:例如1~12月份相同欄位的銷售統計的拼接彙總等。

【多重索引】

方法1:可用切片

image.png

方法2:資料框型別的

image.png

不借助groupby進行設定多重索引的方法:set_index

image.png

把列變成索引進行排序,輸出可達到整理在一起的效果

image.png

反過來把索引變成列,增加函式reset_index()即可

image.png

這時後面可直接[]去引用。

【pandas裡面預處理函式---文字函式】

需求:想把表格內某一列帶方括號的欄位去掉方括號。

思路1:直接進行左右兩邊切掉(不成功,因為操作是針對陣列進行的,是針對索引的切片)

image.png

思路2:呼叫 .str()(可行)

例如:.str.count統計字串出現的次數

.str.find(“資料”)從哪個位置開始統計

.str都是針對值裡面的字串進行的操作

image.png

需求:繼續把單引號排除

思路1:用空值替換單引號(不可行)

image.png

因為replace針對的是表格內具體的某一值進行替換,所以,上面對錶格內欄位進行替換並沒有成功。

思路2:增加.str (可行)

image.png

【空值&去重】

1.空值

對錶賦予空值,及對空值進行再賦值

image.png

image.png

2.刪除重複元素

image.png

去重方法1:

image.png

去重方法2:相對更簡單

image.png

 

【apply】

幫助我們把一個函式或者自定義函式應用到所有的行或者列裡面進行處理,可大大提高資料分析的效率。

需求示例:

薪資顯示數值後面加上K,例如11.5K

方法1:

image.png

用 .str將浮點資料轉成文字再進行拼接

方法2:

image.png

輸入x,輸出的是 . str和k進行拼接

輸入從position.avg來

apply的優點是特別快

方法3:等價方法2(在裡面可加進去簡單的判斷)

image.png

方法4:

image.png

注意,直接position會直接報錯,因為物件不能針對整個表,其中引數axis預設為0,是空值對應函式應用到列裡面。需要把它設定為=1,說明函式設定應用到列,對這一列陣列進行操作,指明是x.avvg則可成功。

1.apply聚合(分組)

需求:不同城市下面新增排名前5的職位。

分析需求:

①對不痛城市--分組

②前5---排序

image.png

方法1:記住輸入和輸出

image.png

資料拆開後再合併

方法2:

image.png

通過控制引數,變成升序

image.png

agg和apply的區別:agg聚合後針對固定的行和列,apply的靈活性比較高,可以對資料進行拆分再組合,不涉及行數的變化用agg是可以的。

image.png

agg直接呼叫方法;

image.png

等價於:

image.png

比較高階的用法是,可以同時應用多個函式

image.png

【資料透視表】可以處理超大的資料對比Excel透視

image.png

首選要考慮“我想要的資料透視表形式是什麼樣子的”

values:具體的哪個值進行計算

index:按照什麼來進行聚合,例如“city”

columns:列是設什麼樣子的,例如“workyear”

aggfunc:具體形成什麼樣子的值,預設是“mean”

image.png

多重索引同樣可以

image.png

呼叫np,所以要用np.mean等計算方式,直接mean則會報錯

image.png

也可在此表格進行繼續接片

image.png

其中margins引數=Ture是在透視表下面新增彙總專案

dropna=Ture,就是把一些空值砍掉

 

透視表的一些高階用法:

需求:只想要對平均薪資進行平均,top進行求和,想要計算values的值是有針對性的。

方法:aggfuns裡面把列表改成字典

image.png

應用場景,對處理大資料量的統計提供很好的工具。

【連結資料庫】

建議用pandas連結資料庫,會比較方便

需要安裝一依賴包

image.png

老師在講的時候說新人在安裝依賴包的時候回會遇到些問題,很幸運~我就遇到了~~~

安裝包的時候出現“pip不是內部外部,或其他可執行的程式”的報錯

方法:需要把環境配置一下,

此電腦-->屬性-->高階-->環境變數-->Path-->把ananconda裡面含有pip程式的兩個檔案的位置路徑放進去-->儲存-->呼叫cmd(win+r,輸入cmd)-->成功

image.png

image.png

 

1.連結資料庫方式1

import pymysql   #載入變數
conn=pymysql.connect(
host='localhost', #定義新的變數連結,可以直接輸入localhost,也可以直接輸入本地的地址127.0.0.11因為mysql一般都是本地所以這兩種方法均可
user='root', #資料庫使用者名稱稱
password='12346', #賬號密碼
db='data', #想要連結的資料庫
port=3306, #輸入埠,預設的,如果有變化自己更改即可
charset='utf8' #文字編碼如果是gbk則改成gbk對應

建立後呼叫一個方法(直接記住)

conn.cursor()

之後可以用 .execute()來進行sql語句的輸入

image.png

如果需要把所有的結果都執行出來

data=cur.fetchall()

不過會以元組的形式輸出,需要簡單處理一下

image.png

image.png

進行增刪該查後的結果提交操作可用  .conn.commit()方可提交

開啟遊標之後,需要養成好的習慣進行關閉

cur.close()

同樣,資料庫連線進行關閉

conn.close()

2.連線資料庫方式2

pandas在資料庫的應用最關鍵的是sql和con

可直接先把sql語句寫好

要注意的是連結是比較特殊的,新的連結方式 .orm幫助資料讀寫的sqlalchemy

image.png

從讀取到處理然後到寫入資料庫的過程:

①讀取表:

image.png

如果忘記資料庫中有哪些表的具體名頭可以用此函式進行檢視

reader('show tables')

②處理合並多表格

image.png

③按照需求條件,分組彙總,提取部分數值轉換重置成資料框

image.png

④檢視資料型別是否需要更改

result.info()

⑤寫入資料庫

image.png

引數if_exists指的是他是否存在了 ='fail' 是預設的,也就是說如果表存在的話,則寫入是失敗的。

把引數修改成  ='append'  是指插入資料,即表存在的話則是插入資料,表不存在的話則會是新建資料,

引數index,如果 =True 是代表寫入的時候把資料框裡面的索引變成一列進行儲存;一般會更改為 =False 不寫入。

image.png

返回mysql資料庫檢視

image.png

會發現新匯入的表格的欄位型別和之前的不太相符,不是預想的最優形式。

建議在開始做的時候,預先在資料庫中建好,設定好新的表格表頭及型別,然後再進行匯入。

並且注意,在python匯入執行步驟時候,如不小心執行了多次,則在資料庫中也會相應的重複增加多次的資料,所以操作要小心謹慎。

當在資料庫建表的時候欄位小於匯入欄位的時候,python會報錯。

當在資料庫建表的時候欄位大於匯入欄位的時候,python則可正常寫入,在資料庫中可自動匹配為空。

⑥寫入 .csv

image.png

 

*********    end********

********  準備進入實戰篇  *******

 

轉自:https://ask.hellobi.com/blog/cbdingchebao/10505