0、關(guān)于輸入
jupyter中可以寫成:

也可以寫成:

但是多對雙引號或者多對單引號使用時,會出錯

可以用\作為轉(zhuǎn)義字符

1、求兩個列表的合集

2、從元組中取值

3、關(guān)于控制流(94課)
(1)if

只要有一個執(zhí)行了,if語句就會自動跳出
if 里面也可以直接嵌套 if ,但是要注意縮進(jìn)
(2)循環(huán)語句--while

a.1.直接跳出整個循環(huán)--break
它只是跳出整個循環(huán)

結(jié)果就是:只會輸出1-5的 count 的值
a.2.只是跳過當(dāng)前循環(huán)這一步--continue

這里的結(jié)果就是:會輸出除了 5 之外的1-10的 count 的值
(3)循環(huán)語句--for

(4)range

a.1.字典被用于for循環(huán)中

(5)往列表中加入一系列的值
第一種方法:

第二種辦法:更pythonic的方式

兩種結(jié)果是一樣的
插入偶數(shù)

(6)從字典里取一些值

4、python函數(shù)
當(dāng)某個地方需要復(fù)用時,需要用到函數(shù)

(1)print和return的區(qū)別

print只是一個輸出的值,不會把指賦給變量

(2)參數(shù)
函數(shù)中也可以使用第三個參數(shù),例如充當(dāng)一個四則運(yùn)算器

利用函數(shù)做一個統(tǒng)計(jì)的定義

另一種比較python的寫法:

(2)map函數(shù):map(函數(shù),一個列表)

map也可以用內(nèi)置函數(shù):map(內(nèi)置函數(shù),一個列表)

map也可以套雙層:map(內(nèi)置函數(shù),map(func,一個列表))
(3)匿名函數(shù)(可與map函數(shù)配合使用)
lambda x:x*x:第一個 x是輸入的,輸出的則是:x*x
它可以省去中間的很多邏輯,只管輸入和輸出

5、導(dǎo)入包
一個模塊(包)里含有很多個可以直接用的函數(shù),利用import導(dǎo)入這個模塊

還有很多第三方包
csv、math 數(shù)學(xué)、datetime 時間、pandas、numpy
也可在網(wǎng)上關(guān)鍵字搜索和練習(xí):python 元素次數(shù)
6、numpy、pandas
(1)numpy

numpy的數(shù)據(jù)類型是:int32、float64等,是C語言專屬的,和一般的類型不太一樣
(2)pandas

pandas 有兩種數(shù)據(jù)類型:
series:類似于array數(shù)組,它是一維的
dataframe:是二維的,更加類似于Excel表
a-1 pandas--series
-1- 定義:近似數(shù)組的一維結(jié)構(gòu)

-2- 切片

-3- 直接更改值

-4- 字典和series數(shù)組互換

-5- 格式轉(zhuǎn)換

series和dataframe里面的數(shù)據(jù)類型是統(tǒng)一的
a-2 pandas--dataframe
-1- 字典轉(zhuǎn)換成dataframe結(jié)構(gòu)

-2- series轉(zhuǎn)換成數(shù)據(jù)框

-3- 數(shù)據(jù)框的概述

-4- 取數(shù)據(jù)框的行的切片

-5- 多列切片

-6- 修改某列的值

-7- 修改索引

-8- 邏輯判斷

-9- 多條件判斷-query的使用

-10- 列的計(jì)算

-11- .iloc? .loc方法

7、讀取文件后的一系列操作
(1)讀取文件

(2)修改字段名

(3)查看數(shù)據(jù)

(4)更改數(shù)據(jù)類型

(5)多重切片
類似于前面講dataframe的時候的內(nèi)容
8、pandas的高階函數(shù)
(1)行列轉(zhuǎn)置--用于矩陣運(yùn)算

(2)排序

(3)排名

(4)查多少個唯一值

(5)描述

(6)常用的函數(shù)

(7)分段:把某字段的某些范圍的分為一組

(8)聚合函數(shù)
-1- 分組

(9)復(fù)雜計(jì)算--循環(huán)
例如,計(jì)算不同城市之間最大值和最小值的差值
當(dāng)遇到這樣的要求的時候,需要使用到循環(huán)語句

9、pandas多表關(guān)聯(lián)操作
pandas中有三種關(guān)聯(lián)方法:concat(堆疊),join(用于索引),merge(根據(jù)鍵值,用得最多)
(1)merge
基本用法:在數(shù)據(jù)框下調(diào)用


另一種用法:

(2)join
針對索引,可能會出問題;如果是時間序列的數(shù)據(jù)框,join會比較方便(左右拼接在一起)

(3)concat
堆疊,相當(dāng)于sql里的union,把兩張表格上下拼接在一起

應(yīng)用場景:
現(xiàn)有各個月份的銷售明細(xì)表,銷售明細(xì)表的字段肯定是一樣的,所以這時候用concat進(jìn)行拼接,合并成一張大表,然后再對這張大表進(jìn)行分析
10、多重索引
(1)groupby多重索引

(2)多重索引的變化使用

11、預(yù)處理函數(shù)
問題:
比如數(shù)據(jù)框里的某個字段中存儲的是:[" "," "," "] 這樣的數(shù)據(jù),這種數(shù)據(jù)在數(shù)據(jù)庫里的話是不可用的,怎么去除方括號和單引號呢?

str方法里面還有很多其他的函數(shù)
12、數(shù)據(jù)處理
(1)處理空值

Tips:
在python里有兩種空值,一種是Null,另一種是np.NaN。一般沒多大區(qū)別,但建議用后者,后者是C語言類型的空值
(2)刪除重復(fù)值

13、高級函數(shù)--apply
(1)用法1
既可以針對series,也可以針對dataframe
把一個函數(shù)應(yīng)用到所有列(行)上

上面最后一種方法也可以得到想要的結(jié)果,但這里要解釋一下:
1.apply函數(shù)里面是有參數(shù)的,默認(rèn)的是按列應(yīng)用,也就是axis=0;這里axis=1 表示按行應(yīng)用函數(shù)
2.直接在數(shù)據(jù)框中去調(diào)用apply時,表示針對數(shù)據(jù)框的整個都去應(yīng)用(這里是按列),但是在定義函數(shù)里就要去指明是哪一列。這里是按行,但是每行里面有很多列,所以要指明哪一列,所以就用了x.avg. 也可以按下面方法轉(zhuǎn)化一下。

(2)apply應(yīng)用到聚合函數(shù)
新的需求:求不同城市下面薪資排名前五的數(shù)據(jù)

新的需求:如果要求返回的前幾是由參數(shù)決定的呢?

(3)agg函數(shù)

agg和apply的區(qū)別
1.agg后面不能引用func函數(shù),寫成agg('func')
2.agg應(yīng)用了其他聚合函數(shù)后,就變成了上海對應(yīng)的是一行,北京對應(yīng)的是一行;而apply則是,上海對應(yīng)的有多行,北京對應(yīng)的有多行
14、數(shù)據(jù)透視表

問題:要對某個值進(jìn)行某種統(tǒng)計(jì)計(jì)算,比如對上面的workyear的平均值求平均,或者對他的top求sum

15、ETL--鏈接數(shù)據(jù)庫
(1)步驟
a.1.最好建議用pandas鏈接數(shù)據(jù)庫,先安裝一個包,方法如下圖

遇到找不到安裝包時,有時候可能會出想找不到,則有可能是安裝路徑改變了
遇到兩個版本的python,可以寫成pip3

a.2.安裝好包之后正常導(dǎo)入一下,就可以使用了

host: 主機(jī)位置,如果是本機(jī),就輸入:127.0.0.1;或者直接用localhost;在工作中使用,內(nèi)網(wǎng)或者其他的,就要問網(wǎng)管
user: 賬戶名
password:密碼
db:數(shù)據(jù)庫名稱
port:端口,一般是磨人的
charset:文本編碼,根據(jù)自己的情況,如果是gbk,就寫gbk
a.3.接下來就是,創(chuàng)建游標(biāo)

a.4.注意:打開了游標(biāo)之后,一定要關(guān)閉游標(biāo)

(2)怎樣連接數(shù)據(jù)庫后生成可用的數(shù)據(jù)框-pandas

篩選數(shù)據(jù)可以在df這里切片,也可以在SQL語句處用where篩選,就看電腦性能了,前者是占用本地資源,后者是在SQL里解決占用sql服務(wù)器的資源
16、ETL--寫入數(shù)據(jù)庫

也可以用下面的代碼來執(zhí)行


注意:
1. 利用上面的方法,寫入數(shù)據(jù)庫的問題就是,表的屬性會和其他表不一樣,最好還是,先在數(shù)據(jù)庫里新建一張表,設(shè)置好字段,然后再寫入到這張表中
2. 如果要在寫入到這個表上數(shù)據(jù),可以比原表的列少,它會自動填充空值,但是不能比原表字段多
直接寫入csv

17、用jupyter寫數(shù)據(jù)報告
在jupyter里用Markdown ,寫一個簡單的數(shù)據(jù)報告
可以百度搜索:Markdown 語法
18、繪圖
(1)各種圖形的方法
折線圖:plot
柱形圖:bar
直方圖:hist
箱型圖:box
密度圖:kde
面積圖:area
散點(diǎn)圖:scatter
餅圖:pie
散點(diǎn)圖矩陣:scatter_matrix

(2)柱形圖繪制
a. 繪制堆積柱形圖

問題:怎樣變成百分比堆積柱形圖
b. 繪制水平軸的堆積柱形圖

(3)直方圖

怎樣繪制多重直方圖
比如表示不同教育程度的薪資的直方圖

(4)箱線圖

還有一種簡單的方法

(5)密度圖

(6)面積圖

(7)散點(diǎn)圖
主要是x和y

散點(diǎn)圖矩陣
這里會有一個問題:沒辦法看出三者之間的關(guān)系,以下方法可以直接用矩陣展現(xiàn)出來

應(yīng)用場景:RFM的繪圖方式,好用率超過powerbi和Excel
(8)餅圖
適用于:分類在10個以下,而且有一個分類占比比較大

另外
還有一些pandas的繪圖法,寫法不太一樣而已
19、繪圖進(jìn)階
可以解決前面在圖形里無法顯示中文的問題


(1)繪圖元素
表示方法
整個畫布用:figure表示
標(biāo)題:title
數(shù)據(jù):data
X軸:
x軸刻度:xtick
x軸標(biāo)簽:xlabel
y軸
(2)代碼
去除圖表上方的內(nèi)存地址

tips:
用matplotlib去繪圖,其實(shí)邏輯就是相當(dāng)于在一張畫布上去疊加每個圖層,圖層上放的就是圖表的各個元素。

問題:如果有多條折線,那再用legend挨個命名,豈不是很麻煩?

練習(xí)
不同城市下的薪資水平的散點(diǎn)圖

20、繪制子圖
會用的方法就是:plt.subplot(幾行,幾列,繪制第幾張子圖)

關(guān)于這個占位,其實(shí)可以靈活的運(yùn)用,而且不光是把同類型的圖表組合,也可以把不同類型的圖表組合。
下圖舉了兩個例子

21、seaborn包-高級圖表繪制

各種圖表表示方法
分布:
distplot:概率分布圖 (參數(shù)kde=false,就變成了密度圖)
kdeplot:概率密度圖? (參數(shù)kde=false,就變成了分布圖)
joinplot:聯(lián)合密度圖? (相當(dāng)于:散點(diǎn)圖的上方和右邊有個直方圖)
pairplot:多變量圖? (散點(diǎn)圖矩陣)
分類:
boxplots:箱線圖
????參數(shù) hue:加一個對比
violinplots:提琴圖
????類似于箱線圖,左右是曲線,表示的密度,參數(shù)split=true,會有個對比
barplot:柱形圖
factorplot:因子圖
????plt.figure() 會失效,factorplot 里自帶一個size參數(shù);
????kind='box"則會繪制出箱線圖,也就是kind參數(shù)是可以變的
????參數(shù) col_wrap:表示把畫布分成幾列,列封裝
????數(shù)據(jù)類型:6-8個時適用于
線性:
lmplot:回歸圖
heatmap:熱力圖
這些天又把python學(xué)了一遍,更有收獲了,課程很簡單,學(xué)著會上癮的。