日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python数据分析可视化

發布時間:2023/12/14 python 72 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python数据分析可视化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

python數據分析&可視化

【目錄】

1.jupyter

2.pandas

2.數據分析

3.數據展現與報告撰寫

4.Apriori算法

5.RFM模型

6.NumPy

7.可視化進階

8.機器學習導論

(一)Jupyter

(二)pandas

import pandas as pd

1. pandas 庫的基本數據結構

1. Series

①組成

Series 主要由一組數據及其對應的索引組成。

②創建

? pd.Series() 就是創建 Series 對象的方法。這個方法包含的參數有很多。

? 主要先講解一種借助列表來創建 Series 對象的方法,也就是:pd.Series(data)。當我們將列表傳給參數 data 之后,在默認情況下,pd.Series(data)會自動為列表中的每一個元素分配對應的數字索引。默認索引是從 0 開始,以 0, 1, 2, 3,… 的形式按序分配給列表中的元素。當然,也可以人為設定 Series 對象的索引,只不過這不是這節課的重點。

輸入;

# 創建Series對象 surname = pd.Series(['趙', '錢', '孫', '李'], index = ['學生1', '學生2', '學生3', '學生4']) # 查看surname surname

輸出:

? 但其實除了列表以外,還有很多其他的方式可以創建Series:

2.DataFrame
①結構

? DataFrame對象是一種表格型的數據結構,包含行索引、列索引以及一組數據。

②創建

? 創建 DataFrame 對象的方法是:pd.DataFrame()。和創建 Series 對象一樣,創建 DataFrame 對象的參數也有很多。這節課會主要講解一種借助字典來創建 DataFrame 對象的方法,也就是:pd.DataFrame(data)。這里需要將一組數據傳給參數 data,數據的形式可以是字典。

? 不過要注意:各鍵所對的值的長度如果不相等,就意味著數據是長短不一的,這樣的字典如果傳給了參數data,則會報錯。

? 方法一:傳入字典

# 創建 DataFrame 對象 class_df = pd.DataFrame({'年齡': [25, 18, 23, 18],'性別': ['女', '女', '女', '男']}) # 查看 class_df class_df

? 方法二:傳入n維數組

# 創建DataFrame對象 import numpy as np class_df2 = pd.DataFrame(np.array([[25, '女'],[18, '女'],[23, '女'],[18, '男']]),columns = ['年齡', '性別'],index = [1, 2, 3, 4]) # 查看 class_df2 class_df2

? 方法三:傳入多個嵌套列表

goods_info = [['巧克力', 77.675, '47箱', '廣東佛山倉'], ['牛奶', 58.755, '40箱', '廣東揭陽倉'], ['威化餅干', 7.385, '285盒', '廣西南寧倉'], ['火腿腸', 34.823, '20件', '廣西柳州倉'], ['巧克力', 62.648, '30箱', '廣東揭陽倉'], ['牛奶', 45.75, '12箱', '廣西柳州倉'], ['威化餅干', 5.235, '148盒', '廣東佛山倉'], ['火腿腸', 33.736, '28件', '廣東佛山倉'] ]goods_df = pd.DataFrame(goods_info) goods_df

觀察兩個數據的內容,可以發現1.3的區別。

1)以字典作為數據傳入時,字典的會作為 DataFrame 對象的列名顯示,而字典的會作為對象的列數據顯示。

2)以嵌套列表作為數據傳入時,列表的元素會作為 DataFrame 對象的行數據顯示,且會為數據默認生成從 0 開始的列名。

③列名設置

1 帶列名直接創建

# 設置列表 students_info = [['小藍', '語文', '79'], ['小邱', '數學', '83'], ['小李', '英語', '92']]# 使用列表創建 DataFrame 對象,同時設置列名 students_df = pd.DataFrame(students_info, columns=['姓名', '科目', '分數']) students_df

2 補充、修改列名(賦值操作)

# 修改 goods_df 的列名 goods_df.columns = ['名稱', '單價', '庫存', '地址'] goods_df
3.Series 對象和 DataFrame 對象的聯系

? DataFrame 對象可以被看作是由 Series 對象所組成的。想要驗證這層聯系,可以通過 df['列索引'] 這個索引操作來實現。

2.導入數據文件

? pandas 庫為讀取各種文件類型的數據提供了非常簡便高效的方法。

1.csv

pd.read_csv(path, encoding) 就是其中一種高效讀取 csv 文件的方法,返回的是一個 DataFrame 對象。這個方法有很多參數,這里先介紹兩種最常用的:path,encoding。

? 對于參數 path,需要傳一個文件路徑給它。可以是相對路徑,也可以是絕對路徑。對于參數 encoding,需要傳一個文件編碼格式給它。文件編碼格式的選取需要根據所讀文件的編碼格式來定。

2.excel

? 它可以以 DataFrame 格式讀取 Excel 文件的數據,并返回一個 DataFrame 對象。

3.部分總結

4.數據預處理

1.數據清洗

首先了解一下查看的方法:

  • 直接輸入 DataFrame 對象的名稱能查看數據的前后 5 行

  • 可以使用df.head()或df.tail()方法查看數據。對DataFrame 對象使用 df.head() 方法默認可以查看數據的前 5 行,df.tail() 方法則默認可以查看數據的后 5 行。當然自己加進去數字,就是前、后幾行的意思。

①處理缺失值

**1 查看基本信息 **

? 在實際的數據分析項目中,面對龐大的數據我們自然不能依賴肉眼的觀測。有一個工具能幫助我們提煉出基本的數據信息,從而能讓我們對于整體的數據有一個大概的印象。這個方法就是df.info()。

當非空數據與數據總量不一致時,說明這份數據有可能存在缺失值,處理這些缺失值的第一步,就是找到它們。

2 查找缺失值

? 在 pandas 庫中,我們可以使用 isna() 方法來查找 DataFrame 對象以及 Series 對象中的缺失值。它可以將查找結果以 DataFrame 對象或者 Series 對象的形式進行返回。df.isna()返回的是 DataFrame 對象,Series.isna() 返回的就是 Series 對象。返回對象中的內容都是布爾值,缺失數據會用 True 來表示,False 則代表這里的數據不缺失。

3 刪除缺失值(!記得一定要進行賦值操作,把它重新賦給原來那個)

# 刪除所有缺失值 mask_data = mask_data.dropna() # 查看數據基本信息總結 mask_data.info()

? 如果我們需要針對某幾列的缺失數據進行刪除,就需要用到df.dropna()的 subset 參數。它可以指定 dropna() 方法刪除一列或多列數據中含有缺失值的行。我們可以把要指定的列名寫進中括號[]中,然后賦值給 subset 參數,就可以限定 dropna() 方法的刪除范圍。

# 刪除'品牌', '上牌時間', '里程數(km)', '保值率'四列數據缺失的行 test_data = test_data.dropna(subset=['品牌', '上牌時間', '里程數(km)', '保值率']) # 查看 test_data 的基本信息總結 test_data.info()
②處理重復值

1 查找重復值

? 我們可以直接使用 df.duplicated()(中文意思:重復的)方法來查找 DataFrame 對象中的重復數據。

? 可以看到,這里的返回結果很長,我們完全沒有辦法用肉眼進行觀察。

? 我們可以將 mask_data.duplicated() 返回的結果放入中括號 [] 中,用來索引 mask_data 數據,查看 mask_data 數據中重復的行。

2 刪除重復行

? 可以使用 pandas 庫的 df.drop_duplicates() 方法直接刪除 DataFrame 對象中重復出現的整行數據。

? 我們能看見 mask_data 的表頭下面是空的,說明到這里已經沒有重復數據了。

? 值得一提的是,df.drop_duplicates() 方法并不會將所有重復的行都刪除。這里你要弄清重復出現的行與重復的行之間的區別,在 pandas 庫中只有重復出現的數據才會被判定為重復數據.,df.drop_duplicates() 方法刪除的也都是重復出現的行,因此所有重復數據的第一行都會保留。

######③處理異常值

1 檢查異常值

? 介紹一個檢查數據是否存在異常的方法 —— describe()。describe 單詞在英語里是描述的意思,而在 pandas 庫中 describe() 方法則可以查看 Series 對象或者DataFrame 對象的 描述性統計信息。

? 在計算機系統里,e+n 代表的是 10 的 n 次方。

2 抽取數據范圍(布爾索引)

? 在pandas庫中,有一種篩選數據的方法叫做布爾索引。之前我們有學過使用 df['列索引'] 來提取某一列的信息。在 pandas 庫中,我們還可以在 df[] 中通過表達式的形式來提取一定范圍的數據。比如我們想選擇 mask_data 數據中,單價一列小于等于 200 的數據,就可以設置條件表達式 mask_data['單價'] <= 200。把它加入括號中索引:mask_data[mask_data['單價'] <= 200],就可以選取 mask_data 數據中單價這一列小于等于 200 的數據。

# 篩選單價小于等于 200 的數據 mask_data = mask_data[mask_data['單價'] <= 200]

? 要注意,布爾索引用的也是中括號嗷。

總結:

2.數據整理
1.日期datetime

① 轉換日期數據

? 在 pandas 庫中我們可以使用 pd.to_datetime(arg, format) 來將 DataFrame 對象或者 Series 對象的數據類型轉換成 datetime 類型。其中的 arg 參數為我們要轉換的數據,它可以是DataFrame 對象或 Series 對象。我們這次要轉換的數據為 mask_data 中的’日期’字段,所以對應的 arg 參數就是 mask_data[‘日期’]。format 參數為 datetime 類型的日期格式,比如說這份數據,它是以年-月-日的形式出現的,那么它對應的 format 就是 ‘%Y-%m-%d’(year-month-day的縮寫)。

# 轉換日期數據,并設置對應的日期格式 date_data = pd.to_datetime(mask_data['日期'], format = '%Y-%m-%d') # 查看 date_data date_data

? 將’日期’字段轉換成 datetime 類型后,我們就可以直接從中提取月份信息。

② 提取月份信息

? 這一步需要用到 Series.dt.month。其中的 Series 指的就是剛才日期數據轉換完后的 Series 對象,我將它賦值到了變量 date_data。Series.dt 可以把 datetime 類型的數據轉成一種方便我們提取日期或時間的對象。這種對象包含多種屬性,其中有 year(年)、month(月)、day(日)等。想要獲取這份數據的年、月、日的信息,可以通過 Series.dt.year、Series.dt.month 以及 Series.dt.day 來獲取。

# 提取日期數據中的月份信息 month_data = date_data.dt.month

③ 添加新列

? 在 pandas 庫中,我們可以直接用 df['colname'] = Series 的方式來為原數據添加新的一列。colname 指的是要添加的新列的列名。在這個案例中,colname 就是月份。也就是說直接對新增的這列數據進行賦值,就能為 DataFrame 對象添加新列。因此最后添加’月份’字段到原數據的代碼就是:mask_data['月份'] = month_data。

# 將月份數據添加到原數據中 mask_data['月份'] = month_data # 查看原數據 mask_data

④ 總結

2.數據排序

①排序sort_values

sort_values() 方法,可以對指定列進行排序操作。(默認是升序排列)

#根據某列的值進行升序排序 sorted_goods=newgoods_df.sort_values(by='單價') #如果我們不想對上面的數據集進行排序,只想提取出【單價】列,單獨進行排序 newgoods_df['單價'].sort_values()

? 另外,不單是 DataFrame 對象可以調用 sort_values() 方法,Series 對象也能調用該方法。但要注意的是,使用 DataFrame 對象調用 sort_values() 方法時,可以通過參數 by 來指定某一列。而 Series 對象調用該函數時,函數沒有參數 by。原因是 Series 對象不具備列索引(列名)。這一細節點,在書寫代碼時需要多加留意。

②重置索引

# 重置數據 sorted_goods 的行索引 reset_goods = sorted_goods.reset_index(drop=True) reset_goods
3.數據四舍五入
# 保留【體重】列的數據到一位小數 humans_df['體重']=round(humans_df['體重'],1) humans_df

? 這里有兩個是一定要注意的,一個是注意第一行是把df里的某一列重新賦值,而不是對整個df賦值;還要注意round是獨立函數,并不需要跟在什么再加個點的后面。

4.函數處理 s.agg(func)

①單個函數處理

? 方法 agg() 中的參數 func 可以為自定義的函數名,這里在使用時需要注意,傳入自定義的函數時,只需要寫上函數名,不需要加上括號以及函數的參數。

#定義一個切掉最后一個字符的函數(可用來去掉數值后的單位) def new_fuc(data):number=data[:-1]return int(number)# 使用 agg() 方法對【庫存】列的數據進行切片處理 reset_goods['庫存'] = reset_goods['庫存'].agg(new_func) reset_goods

? 其實這個傳入的數據類型是要很重視的!!對吧因為這個稍微有那么一點點奇怪至少超出我現有的底層邏輯范圍,我暫時就只能構建一下中層邏輯了。

? 雖說這個函數對傳入的data切去了最后一個字符,但我們要認清data的本質,它是某一列中的一個,也就是說,這是對待某一個對象的函數,不是對某一列的函數,所以必然用不到for i in xxx的循環去遍歷某一個列呀,因為它在被agg使用的時候就包含了這樣的逐個取出了。也就是說,agg這個函數的使用,本身就是對這一列的每一個元素逐個使用了!所以下面這段代碼一定是不對的!同時還忘記了非常關鍵的return!

#錯誤代碼示例 ## 定義函數,以替換【數量】列的“-”為 0 #def exchange(data): # for i in range(len(data)): # if data[i]='-': # data[i]=0 #foods_df['數量'].agg(exchange)#正確代碼示范 def exchange(data):if data='-':data=0return data foods_df['數量'].agg(exchange)

②多個函數處理(傳入字典、且只支持部分特定函數)

# 定義字典 dict_2 !! 注意后面不帶括號嗷 dict_2 = {'單價': 'mean', '庫存': 'sum' } # 同時計算各食品的平均單價和總庫存量 reset_goods.groupby('名稱').agg(dict_2)

? 代碼可分為3步進行理解:

1)使用 reset_goods.groupby('名稱') 讓數據按【名稱】列進行分組;

2)定義一個字典 dict_2,字典的鍵為我們需要操作的列名,如 '單價'、'庫存'。字典的值為我們需要操作的函數名,這里我們需要求平均值函數 mean(),求和函數 sum()。(可使用的函數可參照下表:)同樣需要注意的是,操作的函數只需要函數名,不需要函數名后的括號以及函數的參數

3)分組后的數據調用 agg() 方法時,為方法的參數 func 傳入字典 dict_2,可以同時得到各食品的平均單價和總庫存量。

5.數據類型轉換

? Python 提供了一個 astype() 方法,該方法可以將 Series/DataFrame 對象轉換為指定的數據類型。astype() 方法中的參數 dtype,我們可以為其賦上需要的數據類型,如 int、str 等。其中,由于參數 dtype 是 astype() 方法的第一個位置參數,所以我們在使用時無需寫為 astype(dtype=int),可以直接寫為 astype(int)。

6.數據批量替換

? replace() 方法中的參數 to_replace 可以是一個字典,字典可以將指定的列數據替換為不同的值。

亂入階段小小結:

5.數據寫入

1.csv

? 使用 df.to_csv() 方法,將清洗好的數據寫入 csv 文件中。

# 保存清洗干凈的數據 mask_data.to_csv('./工作/mask_data_clean.csv', encoding = 'utf-8')

?

? 打開文件后你會發現,最左側多了一列數據。這個數據是 DataFrame 對象的行索引。pandas 庫將 csv 文件讀取為 DataFrame對象 時都會自動生成行索引。所以我們寫入時也會把行索引單獨作為一列寫進數據文件中。這里我們可以使用 df.to_csv() 方法的 index 參數來限制 DataFrame 對象的行索引是否寫入到 csv 文件。它的默認值為 True,會讓你寫入的 csv 文件包含一列行索引。如果我們把這個參數設置為 index = False 就可以取消寫入行索引,不用將行索引那一列寫入 csv 文件。

# 保存清洗干凈的數據,并取消寫入行索引 mask_data.to_csv('./工作/mask_data_clean.csv', index = False)
2.excel

? to_excel() 函數可以以 DataFrame 格式將數據寫入到 Excel 文件。

? 因為 Excel 表中默認有行索引,所以如果數據的行索引在工作簿中不具備參考價值,建議不寫入到工作簿中。

階段性小總結:

1.基本的數據處理

2.較為進階的數據處理

6. 數據分析(分組聚合)

1.單層分組聚合

? 單層分組聚合操作指的是針對某一個組進行聚合操作。

? df.groupby(by)['列索引'].mean()即為按某列索引分組并求出該組的平均值的方法。

? 注意,那個by的地方,圓括號里帶不帶方括號都可,結果一樣。但是一定要理解原理,這里的方括號可行只是因為可以看作一個只有一個內容的列表吧,因為有多層分組的存在才導致了它可行,但你可以看到,它絕對不是作為col那樣的含義,因為在多層里再套方括號,它就不行了。

grade_df2 =grade_df.groupby(['性別'])['成績'].median() grade_df2 = grade_df.groupby('性別')['成績'].median()

?

? 求平均值只是聚合操作的一種,聚合操作還有很多,幾個常用的聚合操作方法如下:

2. 多層分組聚合

? 唯一的不同點在于索引的層數上。層數的不同體現在參數 by 的賦值方式上。在單層分組聚合操作的時候,只需要將一個列索引傳給參數 by 就可以了。而多層分組聚合操作需要傳多個列索引給參數 by。

? 需要注意的是,這些列索引在傳進參數 by 之前,需要先被放進一個“容器”里,這個容器可以是列表。

# 獲取不同性別的學生處于不同班級時的平均分 grade_df4 = grade_df.groupby(['性別', '班級'])['成績'].mean() # 查看grade_df4 grade_df4

? 注意,里面可不能再套方括號啦。

如果再多一層:

? 雖然通過多層分組聚合的方法,可以求出不同組別下的學生考試成績的情況,但是返回的結果看起來卻有些冗雜,所有的組別信息都扎堆出現在了一個 Series 對象的索引中。

? s.unstack() 函數就是解決這個問題的常見方法。它可以將一個多層分組聚合后的 Series 對象轉變成 DataFrame 對象。

# 對grade_df5使用unstack函數 grade_df5.unstack()

? s.unstack() 這個方法是針對多層分組聚合后的 Series 對象來使用的。作用就是將其索引的最后一列轉變成 DataFrame 對象的列索引,而剩下的索引則轉變成 DataFrame 對象的行索引。

# 獲取上圖所示的表格 grade_df6 = grade_df.groupby(['班級', '眼鏡', '性別'])['成績'].mean().unstack() # 查看grade_df6 grade_df6

7.數據可視化

1.導入中文字體
# 導入matplotlib庫的pyplot模塊 from matplotlib import pyplot as plt # 設置中文字體 plt.rcParams['font.family'] = ['Source Han Sans CN']

? plt.rcParams['font.family'] 可以獲取 matplotlib 庫中的字體,'Source Han Sans CN' 指的是我們課程系統自帶的中文字體。plt.rcParams['font.family'] = ['Source Han Sans CN'] 意味著我們將課程中自帶的中文字體添加到了 matplotlib 的字體庫中。

? 而不同系統下自帶的中文字體是不一樣的,以下為Windows 和 Mac OS 系統下的常用中文字體。

2.單條折線圖
series.plot(kind='line', figsize=(7, 7), title='此人月考成績')

? 繪制單條折線圖的代碼是:s.plot()。同樣的,這個方法有很多可以傳入的參數,主要的是以下三個參數:

3.多條折線圖
# 創建三位學生成績的df students_grade = pd.DataFrame({'李健': [80, 85, 89, 91, 88, 95],'王聰': [95, 92, 90, 85, 75, 80],'過凡': [90, 91, 92, 91, 90, 91]}, index=['2月', '3月', '4月', '5月', '6月', '7月']) # 繪制多條折線圖 students_grade.plot(kind='line', figsize=(7, 7), title='月考成績')

多條折線圖的繪制方法是:df.plot()。它和單條折線圖相比,最大的區別就在于:多條折線圖是針對一個 DataFrame 對象來繪制的,而單條折線圖是針對一個 Series 對象來繪制的.df.plot() 默認會將每一列數據用 s.plot() 繪制成單條折線圖,然后合并到同一張圖上。而剛才提到的三個參數:kind、figsize、title 以及補充給你的幾個參數,df.plot() 都是可以沿用的,效果也相同。

4.餅圖
# 導入數據 my_data = pd.read_csv('./工作/clean_data.csv', encoding='utf-8') # 查看my_data my_data # 獲取行業的頻率分布 profession = my_data['行業'].value_counts()/my_data['行業'].value_counts().sum() # 繪制行業頻率分布的餅圖 profession.plot(kind='pie', autopct='%.2f%%', figsize=(7, 7), title='行業頻率分布圖', label='')
5.條形圖
# 獲取崗位的頻率分布 position = my_data['崗位'].value_counts()/my_data['崗位'].value_counts().sum() # 繪制崗位的頻率分布條形圖 position.plot(kind='bar', figsize=(13, 6), title='崗位頻率分布條形圖')

(三)matplotlib

0.數據可視化工具

? 首先介紹一下數據可視化的主流工具:

? Tableau 和 PowerBI 均為數據可視化工具的頭部選手,它們的功能比較接近,主要是制作數據看板。其中 Tableau 偏商業分析,可視化偏標準化,需要付費。PowerBI 適合所有類型的用戶,可視化更具定制化,但是自定義和共享儀表板需要付費。而 Python 作為一種編程語言,通過調用第三方可視化庫作圖,覆蓋的圖表種類很多,定制化非常強,并且免費。再加上 Python 基本涵蓋了數據分析的整個流程:從數據處理到數據分析,再到數據展現。可以說是行云流水,一氣呵成。

? 在 Python 中有幾個常用的第三方可視化庫:pandas、matplotlib 以及 seaborn。

? 更傾向于推薦 matplotlib 庫,主要原因是:

1)matplotlib 庫相較于 pandas 繪圖以及 seaborn 繪圖工具更為底層,因此,matplotlib庫中的繪圖函數、參數相對更多,我們可以根據自己的風格自由選擇。

2)從應用范圍上來看,在 python 數據分析領域,matplotlib 庫是與 numpy 庫、pandas 庫并駕齊驅的三庫之一,被稱作 python 數據分析的“三劍客”,由此可見其應用范圍之廣。

1.導入庫
from matplotlib import pyplot as plt
2.畫布的生成與保存

? 生成畫布用到的是 pyplot 模塊下的 figure 函數,即 plt.figure()。其中的參數 figsize 可以控制畫布的長和寬,一般用元組的形式進行賦值。

# 生成畫布,并設置畫布的大小 plt.figure(figsize=(6, 6))

? 輸出結果<Figure size 432x432 with 0 Axes>表示生成了一個空白的畫布對象。畫布大小為 6 英寸x6 英寸,默認分辨率為 72 像素/英寸,所以像素為 432x432。

? 如果要將 jupyter 沙盒中生成的圖形保存到本地,可以用 plt.savefig()對畫布進行保存,這里只需要設置它的路徑參數。

# 前面已經作完圖了哈 # 保存畫布,并設置保存路徑 plt.savefig('./工作/各月總訂單量趨勢圖.png')
3.設置x/y坐標值
1.直接用列表創建series對象

? x 是指坐標點的橫坐標(簡稱 x 坐標值),y 是指坐標點的縱坐標(簡稱 y 坐標值),它們均為可迭代對象,你可以理解為有序的元素序列,比如 x = (x1, x2, x3, ……, xn),y = (y1, y2, y3, ……, yn)。

? 這里以 Series 對象為例設置 x/y 坐標值。

# 設置 x/y 坐標值 x = pd.Series(['第一季度', '第二季度', '第三季度', '第四季度']) y = pd.Series([160, 200, 180, 155])
2.讀取已有的series對象
# 設置 x 坐標值 x=series.index # 設置 y 坐標值 y=series.values
4.繪制圖表
1.折線圖
# 生成畫布,并設置畫布的大小 plt.figure(figsize=(6, 6)) # 設置 x/y 坐標值 x = pd.Series(['第一季度', '第二季度', '第三季度', '第四季度']) y = pd.Series([59, 70, 68, 56])# 繪制折線圖,并調整線條顏色為湖藍色 plt.plot(x, y, color='dodgerblue')

相關常用參數:

matplotlib相關顏色:

? 參數 marker 可以設置數據標記點的形狀,有點、圓、加號等,常見為字符串類型,有以下這些:

2.柱狀圖

? 和折線圖一樣,繪制柱狀圖也需要設置 x/y 坐標值,不同的是柱狀圖繪圖函數 plt.bar()的參數是 x 和 height,height 表示柱子的高,對應 y 坐標值。

# 生成畫布,并設置畫布的大小 plt.figure(figsize=(6, 6)) # 設置 x/y 坐標值 x = pd.Series(['第一季度', '第二季度', '第三季度', '第四季度']) y = pd.Series([59, 70, 68, 56])# 繪制柱狀圖,并調整顏色為深橘色,透明度為 60% plt.bar(x, height=y, color='darkorange', alpha=0.6)
3.餅圖

? 餅圖和折線圖、柱狀圖在圖像特征方面差異蠻大的,它只用到了 x 表示餅圖中各個扇形面積的大小。

# 生成畫布,并設置畫布的大小 plt.figure(figsize=(6,6)) # 設置扇形面積值(x值) x=pd.Series([59,70,68,56]) # 設置百分比小數的位數:保留百分比小數點后兩位 autopct='%.2f%%' # 設置百分比字體大小和顏色 textprops={'fontsize':12,'color':'black'} # 設置餅圖的“爆炸效果”:讓扇形遠離圓心 explode=[0.1,0,0,0] # 設置不同扇形的顏色 colors=['cornflowerblue', 'salmon', 'yellowgreen', 'orange'] # 繪制餅圖 plt.pie(x,autopct=autopct,textpros=textpros,explode=explode,colors=colors)

?

5.設置圖表標題

? 圖表標題默認放在圖表頂部,向讀者傳遞圖表的名稱。設置圖表標題用的是 plt.title()函數,包含兩個參數:第一個參數 label 設置圖表的標題名,常見為字符串類型;第二個參數 fontsize 設置標題的字體大小,需要向它傳入一個代表字體大小的數值。

# 生成畫布,并設置畫布的大小 plt.figure(figsize=(6, 6)) # 繪制柱狀圖 plt.bar(x, height=y, color='darkorange', alpha=0.6)# 設置圖表標題名及字體大小 plt.title('2020年各季度研發費用分布圖', fontsize=20)

? 稍稍拓展一下,如果想設置更豐富的字體樣式,可以用 fontdict 參數代替 fontsize。fontdict 是一個包含許多參數的字典,以思源黑體字體為例,詳見以下表格👇。

# 生成畫布,并設置畫布的大小 plt.figure(figsize=(6, 6)) # 繪制柱狀圖 plt.bar(x, height=y, color='darkorange', alpha=0.6)# 設置圖表標題名及字體大小 plt.title('2020年各季度研發費用分布圖', fontdict={'family': 'Source Han Sans CN', 'color': 'blue', 'weight': 'bold', 'size': 16})
6.設置坐標軸

? 主要考慮坐標軸刻度和坐標軸標題:

1.坐標軸刻度

? 設置 x、y 軸刻度的函數分別是 plt.xticks()和 plt.yticks()。調用這兩個函數,就可以根據 x、y 坐標值自動生成 x、y 軸刻度字體大小。

# 生成畫布,并設置畫布的大小 plt.figure(figsize=(6, 6)) # 設置 x/y 坐標值 x = pd.Series(['第一季度', '第二季度', '第三季度', '第四季度']) y = pd.Series([59, 70, 68, 56]) # 繪制柱狀圖 plt.bar(x, height=y, color='darkorange', alpha=0.6)# 設置坐標軸的刻度字體大小 plt.xticks(fontsize=12) plt.yticks(fontsize=12)

? 當然,坐標軸刻度是可以自定義的,比如調整刻度的間隔、標簽名稱等。不過在此先不作過多贅述。

2.坐標軸標題
# 設置坐標軸的標題名及字體大小 plt.xlabel('季度', fontsize=15) plt.ylabel('研發費用(百萬元)', fontsize=15)

? 拓展一下,在上述函數中還可以添加參數 ha和va,設置標題文本的對齊方式:與水平對齊方式有關的參數 ha,可選’left’、‘right’、'center’等,以及與垂直對齊方式有關的參數 va,可選 ‘center’、 ‘top’、 ‘bottom’、 'baseline’等。

7.設置圖例

? 設置圖例用到 plt.legend()函數,其中的參數labels表示圖例名稱,對應圖中的多個條件,通常傳入可迭代對象,比如列表、Series 對象等。

# 設置圖例為'研發費用變化'、'研發費用分布' plt.legend(['研發費用變化','研發費用分布'])
8.設置數據標簽

? 數據標簽是指坐標點上方顯示的標簽,用于呈現每個坐標點的數據信息。添加數據標簽用到 plt.text()函數,它有幾個參數,分別是 x、y、s、ha、va 以及 fontsize。

? 調用 plt.text()函數可以在圖表的指定位置添加文本,但是每次只能添加一個。這里需要重點強調 x、y 的用法,x、y 表示所添加文本的位置,受到函數本身的屬性限制,常見為數值或者字符串類型,這與繪圖函數中 x、y 可以傳入可迭代對象有很大的差異。

? 更為簡潔的代碼可以借助 zip()函數實現。可以將 zip()函數理解為拉鏈,x=(x1, x2, x3,……, xn)為拉鏈的左邊,y=(y1, y2, y3,……, yn)為拉鏈的右邊,經過 zip()函數,就合并為(x1, y1), (x2, y2), (x3, y3),……,(xn, yn)。

? zip()函數可以從 x、y 元素序列中依次取出元素,按照順序進行一對一匹配。

# 設置數據標簽 for a, b in zip(x, y):plt.text(a, b, b, ha='center', va='bottom', fontsize=12)
9.總結

? 其實有的時候要注意的點是,每個要傳進去的參數是什么格式,比如數字、字符串、列表、字典,這些一定要搞清楚了。我覺得這一切都和維度有關,比如列表,它是在同一個維度進行縱向延申的,只要封在了一個列表里,它就是一個類型的東西,你加進去很多個都是同類型的具體對應不同而已;但是字典就用在多個維度,比如每一個東西對應了一個什么或幾個什么。所以我感覺,很多時候,用列表是為了強調它們的并列性,防止被認為是多個維度的東西;而用字典傳入是因為確實是同一事物的多個維度,所以只能用字典傳入。

階段小結:

(四)關聯分析與Apriori算法

1.關聯分析

? 關聯分析,是一門分析技術,用于發現大量數據中,各組數據之間的聯系

? 交易中的不同物品可稱為一個。所以,這4條交易記錄,一共含有4個項(商品類目):“薯條”,“可樂”,“奶茶”,“漢堡”。0個或多個項的集合,可稱為一個項集,一般用{X}的形式表示項集,k 個項組成的項集,叫 k 項集。

1.支持度

? **支持度(Support)**可以表示項集在事務中出現的概率(頻率),你也可以理解成顧客對某一個項集的“支持程度”。

? {X}的支持度 = {X}在事務中出現的次數 / 事務總數

? 需要人為地設定一個支持度,名為最小支持度,用于篩掉那些不符合需求的項集。被留下來的項集(≥ 最小支持度),被稱為頻繁項集

? 有了頻繁項集,就可以生產關聯規則了。關聯分析是探索數據之間聯系的技術,而數據之間的聯系,我們用關聯規則來表示,表達式為:{X}→{Y}(X 和 Y 之間不存在相同項)。規則有順序之分,為了方便描述,我們把規則前面的項集叫前件,把規則后面的項集叫后件。但是,怎么知道這種聯系是否可靠?如果可靠,到底有多可靠?哪個更可靠?

#####2.置信度

? 置信度(Confidence)可用于衡量關聯規則的可靠程度,表示在前件出現的情況下,后件出現的概率。一般來說,概率越高,規則的可靠性越強。

? 關聯規則{X}→{Y}的置信度 = {X,Y}的支持度 / {X}的支持度

? 同為關聯規則,可靠程度有“強”有“弱”。在實際業務中,也需要人為地設定置信度,名為最小置信度,用于篩掉一些不符合需求的關聯規則。被留下來的關聯規則( ≥ 最小置信度),叫做強關聯規則

? 眾所周知,在自然界,不同物種之間,不僅有“互惠互利”的合作關系,也有“勢不兩立”的競爭關系。關聯規則也一樣,既有促進關系,也有抑制關系。因而,還需引入**提升度(Lift)**對它們進行判斷。

3.提升度

? {X}→{Y}的提升度 = {X}→{Y}的置信度 / {Y}的支持度,意思是評估 X 的出現,對 Y 出現的影響有多大。

總結:

2.Apriori算法

? Apriori是用于挖掘出數據背后的關聯規則的一種算法,以下簡寫為 Apr 算法,它的流程可分為兩步(簡單了解它的運作原理即可,無需深究):

1.確定最小支持度和最小置信度

? 判斷它們是否“合適”的感覺很微妙,沒有特定的標準答案

? 其實總結起來就一個字:。一開始設定的最小支持度和置信度和理想狀態有一定偏差也沒關系,后續再慢慢調整

#####2.找出頻繁項集和強關聯規則

######1.頻繁項集

? 這一步,Apr 的算法主要依賴兩個性質:

1)一個項集如若是頻繁的,那它的非空子集也一定是頻繁的。假如購買{薯條,奶茶}的概率都很高,那購買{薯條}或{奶茶}的概率肯定也很高;

2)一個項集如若是非頻繁的,那包含該項集的項集也一定是非頻繁的。假設購買{薯條}的次數少,那購買{薯條,奶茶}的次數肯定也少。

? 在 Apr 算法出現之前,要找出所有的頻繁項集,就得先枚舉所有的項集,計算它們的支持度,然后和最小支持度(0.2)進行對比,篩選出頻繁項集。

? 但 Apr 算法不一樣,它對錯誤的“道路”進行了提前預判。一旦找到某個不滿足條件的“非頻繁項集”,包含該集合的其他項集不需要計算,更不用對比,通通繞開

? 憑借新生成的頻繁項集,就可以開始“制造”關聯規則了。

2.關聯規則

? 值得注意的是,因為頻繁 1 項集只有一個項,無法構成具有指導意義的關聯關系(≥ 2 項),可直接忽略。

? Apr 算法會先產生一系列后件項數為1的關聯規則,與最小置信度進行比較,得到一部分強關聯規則。然后,頻繁項集繼續生成后件項數為2的關聯規則,再對它們的置信度進行比較,又收獲一批強關聯規則。當無法從剩下的頻繁項集中生成新的關聯規則時,該過程就結束了。

? 關聯規則的支持度,和構建規則的頻繁項集的支持度一致。

? 若是這些強關聯規則正好是你想要的,那就進一步計算它們的提升度。相反,若是你對篩選出來的強關聯規則不滿意,那我們就得重新調整最小支持度和最小置信度,再計算一次。

? 盡管 Apr 算法已經對原始的關聯分析做了優化,但手動計算依然繁瑣,特別是當我想要調整最小支持度或者最小置信度的時候。如果能把 Apr 算法的計算流程抽象成函數,將最小支持度、最小置信度和最小提升度設置成參數,通過調整參數來查看關聯規則,想怎么調就怎么調就好了。實際上,Python 早已可以實現。

3. Python 調用 apriori 函數

? 提供這一便利的是apyori模塊下的apriori函數, apyori模塊屬于 Python 的第三方模塊。

from apyori import apriori orders = [['薯條', '可樂'], ['薯條', '可樂', '奶茶'], ['漢堡', '薯條', '可樂'], ['漢堡', '可樂']] results=apriori(orders,min_support=0.2,min_confidence=0.7) results

? 這段代碼返回的是一串<generator object apriori at 0x7fa21646ec50>,<generator>是一個生成器對象,它是一種用于節省空間的運算機制,可以通過循環遍歷的形式對它里面的數據進行訪問:

for result in results:print(result)

? 得到的是一堆略顯復雜,但實際具有很強結構性的東西:(每個都不過是自定義元組內嵌套列表又在內嵌套了一層自定義元組罷遼,逐層提取然后把各個有意義的數據轉化成所需的數據結構就好)

RelationRecord(items=frozenset({'可樂'}), support=1.0, ordered_statistics=[OrderedStatistic(items_base=frozenset(), items_add=frozenset({'可樂'}), confidence=1.0, lift=1.0)]) RelationRecord(items=frozenset({'薯條'}), support=0.75, ordered_statistics=[OrderedStatistic(items_base=frozenset(), items_add=frozenset({'薯條'}), confidence=0.75, lift=1.0)]) RelationRecord(items=frozenset({'奶茶', '可樂'}), support=0.25, ordered_statistics=[OrderedStatistic(items_base=frozenset({'奶茶'}), items_add=frozenset({'可樂'}), confidence=1.0, lift=1.0)]) RelationRecord(items=frozenset({'漢堡', '可樂'}), support=0.5, ordered_statistics=[OrderedStatistic(items_base=frozenset({'漢堡'}), items_add=frozenset({'可樂'}), confidence=1.0, lift=1.0)]) RelationRecord(items=frozenset({'薯條', '可樂'}), support=0.75, ordered_statistics=[OrderedStatistic(items_base=frozenset(), items_add=frozenset({'薯條', '可樂'}), confidence=0.75, lift=1.0), OrderedStatistic(items_base=frozenset({'可樂'}), items_add=frozenset({'薯條'}), confidence=0.75, lift=1.0), OrderedStatistic(items_base=frozenset({'薯條'}), items_add=frozenset({'可樂'}), confidence=1.0, lift=1.0)]) RelationRecord(items=frozenset({'薯條', '奶茶'}), support=0.25, ordered_statistics=[OrderedStatistic(items_base=frozenset({'奶茶'}), items_add=frozenset({'薯條'}), confidence=1.0, lift=1.3333333333333333)]) RelationRecord(items=frozenset({'薯條', '奶茶', '可樂'}), support=0.25, ordered_statistics=[OrderedStatistic(items_base=frozenset({'奶茶'}), items_add=frozenset({'薯條', '可樂'}), confidence=1.0, lift=1.3333333333333333), OrderedStatistic(items_base=frozenset({'奶茶', '可樂'}), items_add=frozenset({'薯條'}), confidence=1.0, lift=1.3333333333333333), OrderedStatistic(items_base=frozenset({'薯條', '奶茶'}), items_add=frozenset({'可樂'}), confidence=1.0, lift=1.0)]) RelationRecord(items=frozenset({'薯條', '漢堡', '可樂'}), support=0.25, ordered_statistics=[OrderedStatistic(items_base=frozenset({'薯條', '漢堡'}), items_add=frozenset({'可樂'}), confidence=1.0, lift=1.0)])

? 先來簡單了解一下幾個陌生的數據類型:

  • RelationRecord(關系記錄)和 OrderedStatistic(有序的統計數據)是模塊作者自定義的命名元組(namedtuple),可以理解成一種通過名稱訪問的元組。

  • frozenset是一種不可變的集合,使用list()函數,可以將它轉換成我們熟悉的列表形態。

    然后再來了解一下數據的結構:

  • 一條“關系記錄”(RelationRecord),包含了頻繁項集的基本信息:頻繁項集items,支持度support和統計列表ordered_statistics。

  • 一條“統計列表”(ordered_statistics),包含了該頻繁項集下構建的所有強關聯規則OrderedStatistic。

  • 一條“強關聯規則”(OrderedStatistic),包含了該規則的基本信息:前件items_base,后件items_add,置信度confidence,提升度lift。

    ? 雖然這樣一梳理,數據清晰了不少,但這樣的展現形式還是太“反人類”了,需要進一步抽取關鍵信息。抽取的重點,是由前件和后件組成的強關聯規則,以及它們的支持度置信度提升度。若找到前件為空集的強關聯規則,那么,這條規則其實沒有什么現實意義,可直接刪除。

results=apriori(orders,min_support=0.2,min_confidence=0.7) for result in results:support=round(result.support,3)for rule in result.ordered_statistics:head_set=list(rule.item_base)tail_set=list(rule.item_add)if head_set=[]:continuerelated_catogry=str(head_set)+'→'+str(tail_set)confidence=round(rule.confidence,3)lift=round(rule.lift,3)print(related_catogory,support,confidence,lift)

(五)RFM模型

1.模型簡介

1.原理

1)R(Recency):最近一次消費時間間隔,指用戶最近一次消費時間距離現在的時間間隔,上一次消費時間離現在越近,再次消費的幾率越大。即 R 值越小,用戶的活躍度越大,用戶的價值就越高;

2)F(Frequency):消費頻率,指用戶一段時間內消費了多少次,購買頻率越高,說明用戶對品牌產生一定的信任和情感維系。即 F 值越大,用戶的忠誠度就越大,用戶的價值就越高;

3)M(Monetary):消費金額,指用戶一段時間內的消費金額,消費金額越高,說明用戶對產品的購買力越大。即 M 值越大,用戶的購買力就越大,用戶的價值就越高。

? 這三項數據作為衡量客戶價值和客戶創利能力的重要工具和手段,也是 RFM 模型的三個重要指標。

2.作用

? RFM 模型多用于精細化運營服務。

? 如果根據 RFM 模型將用戶細分為 8 類,還能進一步對不同價值的用戶使用不同的運營策略,獲取并保留關鍵性用戶,針對價值高的客戶制定促銷策略。

2.RFM模型構建流程

1.計算R、F、M的值

? 得到 R、F、M 這 3 個指標,一般需要的信息有:用戶名稱/用戶 ID、消費記錄(如消費時間、消費金額)。

#####2.根據 RFM 的閾值,對用戶進行分類

? 獲得閾值,可以對 RFM 各值采取分區域評分,再計算各值平均數的方式,該方式會分為三個步驟:

1)給 R、F、M 各值按價值劃分打分區間(如何定義打分的范圍,需要結合具體的業務來調整)

2)計算價值的平均值

3)用戶分類(將兩個用戶的 RFM 值與各值的平均值進行對比。)

? 如果一行里的 R 值打分大于平均值,就標記該行的 R 值打分為“高”,反之標記為“低”。F、M 值亦是同理。

? 然后,再將標記好的 RFM 高低值與用戶分類規則表進行對比,可以得出用戶屬于哪種類別。

(六)NumPy

1.numpy簡介

? NumPy 是一個開源的 Python 科學計算基礎庫。

1)在性能方面:NumPy 的計算操作由預編譯好的 C 代碼快速執行。所以比之 Python,它的運算速度常常更快。

2)在存儲方面:NumPy 同樣也設計了一個更好的存儲結構來提高計算效率。

? 第一板塊,可以說是最基礎的板塊:ndarray 數組。

? 第二個板塊:ufunc 通用函數。就像一套能處理數組的工具,它能對 NumPy 數組中的元素逐個進行操作。和 Python 內置的 math 模塊類似,它主要用于實現一些較為基礎的數組運算,例如求和、求平方根等。

? 第三個板塊是用于科學計算的子模塊包。這些子模塊包內包括隨機數包、線性代數包,矩陣包等內容。這些子模塊包,就像各種能處理數組的工具包。在這些工具包內還有各式各樣的工具來幫助你完成復雜的科學計算。

導入numpy庫:

import numpy as np

2.ndarray數組

1.n維數據

① 一維

? 一維數據一般由線性方式組織的數據構成。

② 二維

? 二維數據是由多個一維數據構成的數據,它是一維數據的組合。

? 平時常見的表格同樣也是由多行一維數據堆疊而成的。它也是一種典型的二維數據。

③三維

? 三維數據是由一維數據或二維數據在一個新的維度上擴展而成的。

? 同為二維數據的表格在時間維度做上拓展后,也可以變成三維數據。

2.創建 ndarray
np.array(列表/元組)

傳入一維列表

# 創建一維的列表 list_1 list_1 = [1, 2, 3]# 創建數組 array_1 array_1 = np.array(list_1) # 查看數組 array_1 array_1# array([1, 2, 3])

傳入二維列表

# 創建二維的列表 list_2 list_2 = [[0, 0, 0],[10, 10, 10],[20, 20, 20],[30, 30, 30]]# 創建數組 array_2 array_2 = np.array(list_2) # 查看數組 array_2 array_2#array([[ 0, 0, 0], # [10, 10, 10], # [20, 20, 20], # [30, 30, 30]])

傳入三維列表

# 創建三維的列表 list_3 list_3 = [[[0, 0, 0],[10, 10, 10],[20, 20, 20],[30, 30, 30]],[[0, 0, 0],[10, 10, 10],[20, 20, 20],[30, 30, 30]],[[0, 0, 0],[10, 10, 10],[20, 20, 20],[30, 30, 30]]]# 創建數組 array_3 array_3 = np.array(list_3) # 查看數組 array_3 array_3#array([[[ 0, 0, 0], # [10, 10, 10], # [20, 20, 20], # [30, 30, 30]],# [[ 0, 0, 0], # [10, 10, 10], # [20, 20, 20], # [30, 30, 30]],# [[ 0, 0, 0], # [10, 10, 10], # [20, 20, 20], # [30, 30, 30]]])

? 除了 array() 方法,NumPy 還提供了其他辦法來創建數組,有需要時,可以再補充學習。以下表格內提到的方法各有優劣。而在使用時,我們可以根據實際情況來選擇對應的方法創建數組。

? 補充一點,不同于 Python ,ndarray 數組要求所有的元素類型相同。所以,通過 array() 方法創建數組時,傳入的數據參數需要統一其內部元素的數據類型。

3.ndarray的特征
1.維度(ndim.shape.size)

①相關概念

? 先明確兩個概念:軸(axis)、秩(rank)

1)軸(axis)簡單來說就是維度。在實際使用時,我們會用從 0 開始的數字表示不同的維度,像:axis = 0、axis = 1、axis = 2 等。

2)秩(rank)比較好理解,就是指維度的數量。

數組每次新增的軸,也就是最外圍的維度,都為 0。

②查看屬性

? 3 個可用于查看數組維度信息的屬性,它們分別是:shape、ndim、size。

1)shape 屬性表示數組的形狀,即各個維度上的數據長度。當你調用它時,會返回一個元組作為結果。

# 查看數組 array_2 array_2#array([[ 0, 0, 0], # [10, 10, 10], # [20, 20, 20], # [30, 30, 30]])# 調用屬性 shape,查看數組形狀 array_2.shape#(4, 3)

? 一定要注意,這個排列順序是從axis=0開始的,但是axis=0對應的始終是最新加進去的那一個維度(上圖其實表達的已經很直觀了)。如果從它形式上的格式來理解,就是從最外面一層中括號開始剝,最外面第一層剝開有幾個并列的,它在axis=0上的長度就是幾,再往里剝,axis逐漸變大。

2)ndim 屬性能表示軸/維度的數量,調用 ndim 屬性后,代碼會以整數形式返回數組的維度數量。

# 查看數組 array_2 array_2#array([[ 0, 0, 0], # [10, 10, 10], # [20, 20, 20], # [30, 30, 30]])# 調用屬性 ndim,查看數組的維度數量 array_2.ndim#2
  • size 屬性表示數組元素的個數,例如一個 n 行 m 列的二維數組的元素個數就是 n * m。
  • # 調用屬性 size,查看數組的元素個數 array_2.size#12

    ? 其實可以說,size屬性對應的那個數字,就是shape屬性里的幾個數字相乘。

    小總結:

    2.索引

    ? 同 Python 的列表類似,ndarray 數組也有能對元素進行索引操作的特點。索引操作用于獲取數組中特定位置的元素。

    ①普通索引

    ? 一維數組中,單個元素的索引會與列表的索引很相似。數組中的元素會有從 0 開始的數字作為其索引下標。

    array_1[索引值]

    ? 多維數組中的單個元素的索引,其實也和列表的嵌套索引很類似。在每條軸的方向上,我們分別取一個索引值,然后用逗號分割即可。

    array_1[索引值0,索引值1] array_1[索引值0,索引值1,索引值2]

    ? 不過還是要注意,這個順序還是按照axis從0到n的順序從左到右的。也就是說,依然是比低一階所新增的那個維度是0,或者說是最外面的那一層括號是axis=0。

    ②布爾索引

    # 打印布爾數組方便查看 print(array_2 < 20)#[[ True True True] # [ True True True] # [False False False] # [False False False]]# 用布爾數組索引數組 array_2 中的特定元素 array_2[array_2 < 20]#array([ 0, 0, 0, 10, 10, 10])

    ? 要注意嗷,這里使用布爾索引就和位置毫無關系啦!它只取決于各位置上元素是否滿足條件,而與位置坐標無關,賦值True/False以后,其值為True的會被提取出來。(其實跟前面那個pd里對df的操作挺相似的。)

    ③切片

    ? 切片是獲取數組元素子集的過程。它和列表的切片有點類似,簡單來說,就是取出兩個索引中間夾著的元素。

    ? 一維數組:

    ndarray[起點索引值: 終點索引值(取值時不包括): 步長]

    ? n維數組就是中間用逗號隔開了,還是要注意誰是axis=0就好。

    #利用索引配合切片來取該數組中所有第二行的元素 #array([[[0.2, 0.2, 0.2], # [0.3, 0.3, 0.3], # [0.4, 0.4, 0.4], # [0.5, 0.5, 0.5]],# [[0.2, 0.2, 0.2], # [0.3, 0.3, 0.3], # [0.4, 0.4, 0.4], # [0.5, 0.5, 0.5]],# [[0.2, 0.2, 0.2], # [0.3, 0.3, 0.3], # [0.4, 0.4, 0.4], # [0.5, 0.5, 0.5]]])# 切片取數組 array_b 中的目標元素 array_b[:, 1, :]

    方法:只要想象那個空間圖就好了。

    3.元素的數據類型

    在 ndarray 數組中,常見的元素數據類型有:

    ? 不同于 Python,這里整數、浮點數等都被區分為了各種位的長度。位的長度這個概念涉及一些計算機底層的理論,我們這里先暫時不去理解它。只需要知道之所以 NumPy 要如此精細管理 ndarray 的元素類型,是因為這樣有助于它合理使用存儲空間并優化性能。

    4.向量運算

    1)兩個數組 a 和 b 形狀相同,即滿足a.shape == b.shape時。此時,兩個數組在加減乘除后,它們內部對應位置的元素會一一對應做加減乘除。

    2)數組與一個形狀不一樣的數據進行運算時。但在這種情況下進行運算,不是隨便兩個形狀不一樣的數組都能進行運算的。

    ? 關于這一點,NumPy 有一套計算規則叫“廣播”(Broadcast)。把官方說明翻譯過來就是:兩個形狀不同數組間運算時,它們對應維度的長度必須相同,或者其中一方為 1(這是和常規計算好像不太一樣的!!),才可以運算成功,否則就會報錯。

    4.總結

    (七)Seaborn

    1.seaborn概述

    1.介紹

    1)Relational(關系)可以用來展示定量數據之間關系的趨勢,如離散程度或者數據隨時間變化的情況。

    2)Distribution(分布)可以用來展示定量數據的分布信息,比如頻數分布情況,數據的形態等。
    3)Categorical(分類)可以用來展示定性數據之間的分布或關系之類的信息,比如不同類別數據的大小,分布情況等。

    ? 其他的,如:Regression(回歸) 可用于畫出線性回歸圖形,Matrix(矩陣)可以畫熱力圖和聚類圖,Multiple(復合)可以用多個子圖或者二元圖實現不同條件之間的關系、頻數分布等功能。

    2.導入&中文字體調整
    import seaborn as sns import matplotlib.pyplot as plt # 設置中文字體(這一段在前面已經比較具體的整理過了) plt.rcParams['font.sans-serif'] = ['Source Han Sans CN']

    2.Relational 中的常見圖形

    1.散點圖
    1.介紹

    ? 散點圖可以比較直觀地觀察變量 x 與變量 y 之間的相互影響程度。對于那些變量之間存在密切關系,但是這些關系又不像數學或物理公式那樣能夠精確表達的,散點圖是一種很好的圖形工具。

    ? 在散點圖中,如果變量之間不存在線性關系,則表現為隨機分布的離散的點;如果變量間存在某種線性關系,那么大部分的數據點就會相對密集并以某種形態呈現。

    ? 在觀察散點圖的時候,還有一個概念需要我們理解——離群點。當變量間存在某種線性關系時,大部分的數據點會表現出相對密集的形態,但總有幾個不合群的數據點離集群較遠,我們可以稱這些點為離群點或異常點。

    2.語法

    ? 官方文檔推薦我們使用 seaborn.relplot() 這個函數來畫散點圖,記憶的話很容易,relplot 其實是 Relational Plot(關系圖形)的縮寫,我們要畫的圖是散點圖,散點圖屬于關系圖形,腦中建立起這樣的聯系,就不用去死記硬背函數名了。seaborn.relplot() 的語法和常用參數如下圖所示:

    ? 其中,參數 x、y 和 data 都是必選參數,x 和 y 一般為連續數據,可以理解為上面說的變量 x 和變量 y;data 指的是需要展示的數據集,推薦先把數據通過 pandas 讀取成 DataFrame 類型后再傳給參數 data。

    ? 可選參數hue,通過圖中的不同顏色表示不同含義,可以讓我們在圖中添加一個維度。

    ? 可選參數 size,它會根據傳入數據的大小在散點圖中生成大小不同的點。比如,我們把 ‘身高’ 傳給這個參數,那么在生成的圖形中,身高越大,點也就越大,反之亦然。

    ? 可選參數style,它可以在某一維度上,用點的不同形狀區分數據。

    ? 還有一個可選參數 kind,被我隱藏掉了,其值默認為 'scatter'(散點圖)。在畫散點圖時,可以不用寫這個參數。

    import pandas as pd student_info=pd.read_csv('./source-data/學生信息.csv') sns.relplot(x='身高',y='體重',data=student_info,hue='性別',size='體重',style='班級')

    ? 小tips:根據科學研究,人的眼睛對顏色比對形狀更敏感,因此,在做可視化時,我們可以優先考慮使用顏色來區分不同的數據。

    2.折線圖

    ? 折線圖也可以反映數據間的關系,只不過它一般使用時間維度作為 X 軸,數值維度作為 Y 軸。當我們想要了解某一維度在時間上的規律或者趨勢時,用折線圖是個比較不錯的選擇。relplot() 函數也是可以畫出折線圖的,基本的折線圖只需要在必選參數的基礎上,寫上我們剛才隱藏的參數 kind='line' 即可。

    population = pd.read_csv('./source-data/人口_sim.csv') sns.relplot(x='年份', y='年末總人口(萬人)', data=population, kind='line')

    3.Distribution中的常見圖形

    ? 本節將著重于直方圖的相關知識和語法,至于其他涉及較復雜統計知識的圖形,暫時先不講。

    1.直方圖概念

    ? 直方圖用于展示定量數據的分布情況,我們可以通過直方圖來觀察數據分布的大體形狀,比如:數據分布是否對稱,是右偏還是左偏等。

    ? 如果數據分布大體對稱的話,圖形會呈現出中間高,兩邊低,左右近似對稱的特點,就像上圖中間所示形狀一樣。

    ? 如果數據的眾數 < 中位數 < 平均數,那么分布大體就會呈現出右偏分布的情況,形狀上類似上圖左側部分。

    ? 如果數據的眾數 > 中位數 > 平均數,那么分布大體就會呈現出左偏分布的情況,形狀上類似上圖右側部分。

    2.直方圖語法

    ? 必選參數 x 和 data,與之前學過的一樣。x 一般為連續數據,data 指的是我們要展示的數據集。值得注意的是,在直方圖的函數中,少了必選參數 y,這是直方圖定義造成的結果。

    titanic_info = pd.read_csv('./source-data/泰坦尼克乘客信息.csv') titanic_infosns.displot(x='乘客年齡', data=titanic_info,hue='乘客性別' )

    4.Categorical中的常見圖形

    ? 我們今天只學習箱型圖的相關知識和對應語法。

    1.箱型圖概念

    ? 箱型圖又稱盒須圖、盒式圖或箱線圖,它可以反映一組數據的分布特點,如分布是否對稱,是否存在異常值,但其更適合對多組數據(分類數據)的分布特征進行比較。

    ? 當一個數據集同時包含分類變量和連續變量時,箱形圖可以提供連續變量隨著分類變量改變而變化的信息。它使用了5個關鍵數值對分布進行概括,即一組數據的上相鄰值、下相鄰值、第一四分位數、中位數和第三四分位數。至于數據集中的異常值,則會被繪制成單獨的點。

    ? 通過觀察箱型圖,我們可以直觀地了解到中位數,上相鄰值和下相鄰值這幾個描述數據分布情況的關鍵值,也可以清晰地看到數據集中是否存在異常值。如下圖所示,假如中位數在箱子中間位置的話,就說明這些數據是對稱分布的;箱子的長短也能體現分布情況,箱子較長意味著分布比較分散,若箱子很短,則數據分布得較為集中。

    2.箱型圖語法

    ? 值得注意的是,我們必須將控制圖形類別的參數 kind 寫為 kind='box',這樣才能畫出最基本的箱型圖。kind 的其他值還可以是:‘strip’ 對應的分布散點圖,‘swarm’ 對應的分簇散點圖,‘violin’ 對應的小提琴圖,‘boxen’ 對應的增強箱型圖,‘point’ 對應的點圖,‘bar’ 對應的條形圖和 ‘count’ 對應的計數圖。

    ? 可以先將類型按照一定順序存在列表中,再將這個列表傳給參數 order,這樣就可以讓類別按照一定順序從左到右依次排列了。

    chart_df = pd.read_csv('./source-data/購物表.csv') chart_df.head() # 創建順序列表 order_list order_list=['配飾', '鞋子', '衣服', '日用品', '書籍', '食品'] # 將順序列表傳給參數 order sns.catplot(x='類型', y='價格', data=chart_df, kind='box',order=order_list)

    總結:

    5.簡單介紹軸級和圖級

    ? 上面我們討論的所有圖形,是 Seaborn 根據統計學知識這一維度進行分類的。其實 Seaborn 對于圖形還有另一種分類的維度——是否將數據繪制到坐標軸上,按照此維度,Seaborn 的圖形還可以劃分為:axes-level(軸級) 和 figure-level(圖級)。我們剛才講過的所有函數(relplot()、displot() 和 catplot())其實都屬于 figure-level(圖級),這些函數都可以通過改變參數kind 的值來畫出不同的圖形。

    ? 簡單介紹散點圖、直方圖和箱型圖對應的 axes-level(軸級) 函數:

    6.可視化庫拓展

    1.seaborn

    可以繼續閱讀官方文檔學習,其文檔結構十分清晰;

    ? 但是,Matplotlib 和 Seaborn 生成的圖形,多有一種科技論文或學術期刊的風格,看起來有點嚴肅,而且都是些靜態的圖片,沒法交互。

    ? 所以,再簡單介紹兩個可交互的可視化庫,有興趣的話可以自學。

    2.Plotly

    ? Plotly 是著名的開源交互式繪圖工具。它包含眾多的圖形種類,支持統計、金融、地理、科技、三維繪圖等共計40余種交互式圖表的繪制。默認樣式生成的圖片如下所示,可以發現,圖片中是有交互欄的,更棒的是,當鼠標移動到圖形上時,會顯示出具體的數值,這比 Seaborn 要方便很多。Plotly 畫出的圖形配色生動,支持交互,又在圖形上方添加了交互欄,總體來說,是一種比較優秀的可視化庫。但其官方文檔略微復雜,且網上的中文資料較少,自學起來可能會有一定的難度。

    3.Pyecharts

    ? Pyecharts是基于 Echarts 開發的一個用于生成 Echarts 圖表的類庫,同樣支持交互操作。Echarts 是百度開源的一個數據可視化 JS 庫,憑借著良好的交互性,精巧的圖表設計,得到了眾多開發者的認可。而Pyecharts,實際上就是 Echarts 與 Python 的對接,支持 30 多種圖表。更重要的是,Pyecharts 的官方文檔是由中文撰寫的,自學起來沒有什么障礙.

    總結:

    總結

    以上是生活随笔為你收集整理的python数据分析可视化的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    国产亚洲精品久久网站 | 久久精品国产精品亚洲精品 | 天天射天天爽 | 夜夜躁狠狠躁日日躁视频黑人 | 久久国产精品免费看 | 蜜臀av性久久久久蜜臀aⅴ四虎 | 日韩av快播电影网 | 播五月综合 | www免费| 天天干人人| 超碰.com | 伊人五月天婷婷 | 在线看欧美 | 免费黄色在线网址 | 成人免费视频网站 | 日韩视频www | 国产激情电影综合在线看 | 美女黄视频免费 | 精品自拍网 | 久久天天躁夜夜躁狠狠85麻豆 | 中文字幕有码在线播放 | 亚洲精品乱码久久久久 | 免费看高清毛片 | 丁香综合网 | 天天爽天天爽夜夜爽 | 成人在线你懂得 | 国产91精品看黄网站在线观看动漫 | 精品久久久久久久久久岛国gif | 韩国av一区二区三区在线观看 | 国产综合香蕉五月婷在线 | 午夜精品久久久久久久99水蜜桃 | 黄色av观看 | 亚洲精品视频免费在线 | 中文字幕高清av | 婷婷精品国产欧美精品亚洲人人爽 | 美女视频黄是免费的 | 午夜精品99久久免费 | 国产成人精品一区二区 | 丁香婷婷基地 | 干天天 | 亚洲婷婷伊人 | 九九视频一区 | 欧美日韩在线视频一区二区 | 国产在线观看一 | 国产精品一区二区中文字幕 | 国产一区在线免费观看视频 | 少妇bbb搡bbbb搡bbbb | 国产精品免费在线观看视频 | 中文成人字幕 | 456成人精品影院 | www日韩精品| 精品久久久久久国产91 | 免费看短 | 国产91精品看黄网站在线观看动漫 | 国产成人福利在线观看 | 成人h在线观看 | 最新中文字幕在线资源 | 亚洲国产一区二区精品专区 | 日本中文字幕久久 | 天天操综合 | av免费片 | 91秒拍国产福利一区 | 国产视频一级 | 在线观看黄色小视频 | 欧美一区二区免费在线观看 | 国产一区久久久 | 麻豆视频在线观看 | 五月婷婷激情 | 81精品国产乱码久久久久久 | 亚洲蜜桃av | 久久久一本精品99久久精品66 | 一区二区视 | 国产精品免费一区二区三区在线观看 | 91久久在线观看 | 在线观看岛国片 | 国产一线天在线观看 | 国产日女人 | 亚洲国产精品一区二区尤物区 | 99久久这里有精品 | 中文字幕一区二区三区在线观看 | 成人h动漫在线看 | 久久久久这里只有精品 | 国产精品一区二区视频 | 久草线| 一区二区三区在线免费观看 | av在线色 | av在线免费观看黄 | 成人av资源网站 | 韩国精品福利一区二区三区 | 97av视频在线观看 | 黄色看片 | 亚洲高清色综合 | www.久久久精品 | 黄色国产成人 | 亚洲一区日韩在线 | 欧美午夜精品久久久久久浪潮 | 麻豆va一区二区三区久久浪 | 国产在线专区 | 午夜精品久久久久久久99热影院 | 香蕉手机在线 | 一区二区久久 | 亚洲精区二区三区四区麻豆 | 99精品免费在线观看 | 亚洲精品美女久久久久 | 99999精品视频 | 最新在线你懂的 | 亚洲精品免费视频 | 亚洲精选久久 | 国产精品一区二区三区在线看 | 韩国av一区二区 | 免费网站在线观看人 | 国产一区自拍视频 | 日韩黄色在线 | 国产精品一区二区电影 | 91看片成人 | 免费a视频在线 | 亚洲a免费| 又黄又爽的视频在线观看网站 | 国产午夜精品一区 | 不卡国产在线 | 狠狠色狠狠色综合日日小说 | 免费看黄色大全 | 欧美亚洲精品一区 | 亚洲欧洲日韩 | 久草在线免 | 欧美日韩免费在线观看视频 | 亚洲最新视频在线 | 三级a毛片 | 91福利视频在线 | 日韩电影中文字幕在线 | 国产午夜精品久久久久久久久久 | 久久精品亚洲国产 | 麻豆成人精品 | 麻豆视频免费播放 | 日本高清中文字幕有码在线 | 久久综合色婷婷 | 高清国产午夜精品久久久久久 | 一区二区理论片 | 久久综合成人 | 免费成人在线视频网站 | 精品亚洲男同gayvideo网站 | 在线亚洲观看 | 久久高清视频免费 | 在线观看国产高清视频 | 在线黄频 | 免费涩涩网站 | 欧美精品二 | 亚洲另类久久 | 国产二级视频 | 成人毛片久久 | 中文字幕一区二区三区四区久久 | 亚洲乱码国产乱码精品天美传媒 | 久草免费看 | 在线观看视频 | 国产亚洲欧美一区 | 一区二区三区影院 | 国产中文字幕免费 | 国产在线播放一区 | 午夜精品一二区 | 日韩视频一区二区三区在线播放免费观看 | 国产精品中文久久久久久久 | 中文字幕一区二区三区乱码不卡 | 日韩午夜视频在线观看 | 日韩高清不卡一区二区三区 | 一级淫片在线观看 | 国产一级大片免费看 | 国产又黄又硬又爽 | 香蕉97视频观看在线观看 | 婷婷视频在线播放 | 欧美一区成人 | 在线观看精品一区 | 国产欧美精品一区aⅴ影院 99视频国产精品免费观看 | 91精品国产自产在线观看 | 安徽妇搡bbbb搡bbbb | 国产中文字幕在线观看 | 国产啊v在线观看 | 美女视频久久 | 人人澡视频 | 欧美久久久久久久久久久 | 日韩av中文字幕在线免费观看 | 91人人视频在线观看 | 成人一区二区三区中文字幕 | 国产午夜精品久久 | 亚洲精品综合久久 | 奇米777777 | 天天射天天干天天插 | 中文字幕一区二区三区在线视频 | 4hu视频| 亚洲精品66 | 国产99久久久精品视频 | 国产一级免费播放 | 国产成人a v电影 | 97国产大学生情侣酒店的特点 | 超碰人人在| 欧美精品亚州精品 | 欧美久久久久久久久久久久 | 黄色aaa级片 | 国产 日韩 中文字幕 | 91精品国产乱码在线观看 | 99精品在线视频观看 | 免费看黄色毛片 | 久久综合色天天久久综合图片 | 在线91精品 | 中国一级特黄毛片大片久久 | 欧洲精品久久久久毛片完整版 | 国产看片网站 | 亚洲最大av在线播放 | 色橹橹欧美在线观看视频高清 | 午夜视频一区二区 | 日韩影视精品 | 亚洲精品久久久久久国 | 国产精品毛片一区二区 | 美女黄视频免费 | 毛片黄色一级 | 久久99精品国产91久久来源 | 久久婷综合 | 欧美日高清视频 | 成人在线观看日韩 | 日日操夜夜操狠狠操 | 日本 在线 视频 中文 有码 | 91精品欧美 | 91麻豆免费视频 | 91福利视频久久久久 | 一区二区三区av在线 | zzijzzij亚洲日本少妇熟睡 | 69xx视频 | 五月开心婷婷 | 久草免费在线观看视频 | 国产精品一区欧美 | 黄色片视频在线观看 | 色狠狠婷婷| 99精品视频在线播放观看 | 爱干视频 | 日韩在线视 | 日韩午夜精品福利 | 911香蕉视频 | 成人av电影免费 | 国产精品一区二区吃奶在线观看 | 五月天婷亚洲天综合网鲁鲁鲁 | 人人干网 | 亚洲91在线| 丁香5月婷婷 | 国产亚洲成av片在线观看 | 欧美婷婷色 | 成人午夜免费剧场 | 国产无套精品久久久久久 | 胖bbbb搡bbbb擦bbbb | 中文字幕免费高清 | 在线观看a视频 | 青青久视频 | 欧美精品中文 | av不卡中文字幕 | 精品美女在线视频 | 午夜免费电影院 | 欧美成人影音 | 久久久久久久久免费视频 | 波多野结衣综合网 | 99精品在线观看视频 | 伊人午夜 | 久久精品视频免费 | 91综合色| 91在线网站| 精品国内自产拍在线观看视频 | 日本中文乱码卡一卡二新区 | 亚洲一区二区三区精品在线观看 | 久久69精品久久久久久久电影好 | 精品国产色 | 国产不卡在线视频 | 欧美日韩裸体免费视频 | 中文字幕视频观看 | 国产资源在线观看 | 欧美日韩视频免费 | 日韩r级电影在线观看 | 国产精品一区二区果冻传媒 | 久久久久免费精品国产小说色大师 | 亚洲精品mv在线观看 | 精品1区2区| 在线免费视 | 国产在线色视频 | 久久色在线观看 | 粉嫩av一区二区三区免费 | av福利在线 | 欧美a影视 | 亚洲国产成人精品在线观看 | 久久99精品久久久久久三级 | 国产成人免费精品 | 99精品视频在线播放观看 | 一区二区免费不卡在线 | 国产高清视频在线播放 | 亚洲视频一区二区三区在线观看 | 久久九九视频 | 天天鲁一鲁摸一摸爽一爽 | 看片黄网站 | 亚洲综合视频在线 | 奇米7777狠狠狠琪琪视频 | 美国三级黄色大片 | 午夜 久久 tv| av黄网站 | 国产又粗又猛又黄又爽的视频 | 亚洲国产中文字幕 | 97超级碰碰碰碰久久久久 | 久久亚洲免费视频 | 中文字幕999 | 91片网| 美女激情影院 | 国产精品成人免费精品自在线观看 | 欧美激情综合五月色丁香小说 | 久久天堂精品视频 | 国产精品 亚洲精品 | 久章草在线观看 | 久久久国产一区二区 | 午夜视频在线瓜伦 | 欧美一级片在线观看视频 | 久久综合成人 | 亚洲mv大片欧洲mv大片免费 | 久久久精品免费看 | 欧美不卡视频在线 | 视频在线观看入口黄最新永久免费国产 | 天天操天操| 91久久国产自产拍夜夜嗨 | 国产欧美日韩视频 | 国产在线一区二区三区播放 | 最新婷婷色| 亚洲老妇xxxxxx | 成在线播放| 日本精品一 | 欧美analxxxx | 日日夜夜爱| av中文字幕亚洲 | 深爱激情五月婷婷 | 园产精品久久久久久久7电影 | 欧美精品在线免费 | 中文字幕在线视频第一页 | 色婷婷88av视频一二三区 | 免费麻豆视频 | 91精品国产成人 | 99久久精品日本一区二区免费 | 精品1区2区3区 | 午夜国产福利在线观看 | 日韩精品视频在线免费观看 | 久久成电影 | 国产在线精品区 | 麻豆系列在线观看 | 国产电影一区二区三区四区 | a天堂中文在线 | 成人网在线免费视频 | 日韩欧美一区二区在线 | 91丨九色丨国产丨porny精品 | 国产一区二区在线免费视频 | 久久高清免费视频 | 九色自拍视频 | 在线网站黄 | 国产欧美最新羞羞视频在线观看 | 丁香在线 | 视频一区久久 | 久久黄色网址 | 日本黄色特级片 | 亚洲精品综合在线观看 | 999国产| 福利视频导航网址 | 国产资源网站 | 亚洲理论片 | 91麻豆产精品久久久久久 | 在线看黄色的网站 | 亚洲精品乱码久久久久久9色 | 欧美天天干 | 伊甸园永久入口www 99热 精品在线 | 久久国产电影 | 国产精品视频免费观看 | 国产精品永久久久久久久www | 91精品视频在线免费观看 | 五月激情五月激情 | 欧美精选一区二区三区 | 亚洲综合干| 色综合色综合久久综合频道88 | 99久免费精品视频在线观看 | 欧美日韩午夜爽爽 | 男女拍拍免费视频 | 丁香久久婷婷 | 久久综合久久综合这里只有精品 | 97视频免费在线观看 | 在线观看视频亚洲 | 国产最新在线视频 | 国产毛片在线 | 欧美日韩一级视频 | 精品国产精品久久 | 成人免费一级 | 国产丝袜| 久久亚洲视频 | h网站免费在线观看 | 国产精品久久久久一区二区国产 | 久久久精华网 | 国产精品国产毛片 | 欧美专区日韩专区 | 久久国产精品99久久久久久老狼 | 色婷婷国产精品一区在线观看 | 久久尤物电影视频在线观看 | 亚洲精品www. | 人人草网站 | 国产污视频在线观看 | 中文字幕日本在线观看 | 992tv成人免费看片 | 天天综合网 天天 | 中文国产字幕在线观看 | 色伊人网 | 182午夜在线观看 | 福利网在线 | 成年人免费在线播放 | 天天综合天天做天天综合 | 五月天久久精品 | 玖玖玖在线观看 | 91精品国产综合久久婷婷香蕉 | 久久黄色网址 | 国产v欧美 | 欧美日韩另类视频 | 一二三区在线 | 欧美精品亚洲精品日韩精品 | 能在线观看的日韩av | 亚洲日本va中文字幕 | 少妇自拍av | 亚洲第一区在线观看 | 亚洲天堂va | 国产精品18久久久 | 日韩精品久久一区二区 | 中文字幕久久网 | 国产精品 999 | 中文字幕 国产专区 | 国内精品久久久久久久久 | 五月开心婷婷网 | 亚洲精品成人网 | 免费日韩视频 | 欧美孕妇视频 | av九九九 | 欧美精品在线视频 | 日日婷婷夜日日天干 | 伊人资源视频在线 | 日日夜夜人人精品 | 成人午夜电影在线观看 | 国产美女免费观看 | 国产一区不卡在线 | 日本午夜在线观看 | 亚洲成人在线免费 | 国产明星视频三级a三级点| 亚洲 成人 一区 | 国产精品免费小视频 | 欧美日韩69 | 人交video另类hd | 操操操夜夜操 | 成人一区二区三区在线 | 色婷婷丁香 | 九九在线视频免费观看 | 狠狠狠狠狠操 | 亚洲国产精品激情在线观看 | 亚洲精选视频免费看 | 国产女做a爱免费视频 | 色婷婷综合久久久中文字幕 | 91在线影院| 综合久久网站 | 丝袜网站在线观看 | 日韩午夜网站 | 在线综合 亚洲 欧美在线视频 | 国产综合香蕉五月婷在线 | 天天摸日日操 | 国产成人精品一区在线 | 国产黄色成人av | 四虎在线观看精品视频 | 婷婷伊人五月 | 亚洲一区二区三区毛片 | 国产 日韩 欧美 中文 在线播放 | 五月天六月婷 | 日日干天天 | 久久久久久久99精品免费观看 | 在线免费观看黄色 | 五月婷婷黄色 | 中文字幕av播放 | 在线观看爱爱视频 | 99久久激情 | 中文字幕在线看视频 | 丁香六月综合网 | 在线国产精品一区 | 天天干天天做天天爱 | 久久综合福利 | 日本中文字幕电影在线免费观看 | 亚洲每日更新 | 国产糖心vlog在线观看 | 成人h电影 | 久草免费在线观看视频 | 91在线精品一区二区 | 精品国产综合区久久久久久 | 片网站 | 五月天堂色 | 欧美精品久久久久久久久免 | 毛片精品免费在线观看 | 免费国产一区二区视频 | 激情网在线视频 | 国产精品黄网站在线观看 | 日本中文乱码卡一卡二新区 | 二区三区在线视频 | 欧美日韩不卡在线观看 | www激情com | 亚州精品一二三区 | 日韩色爱 | 黄色小说18 | 国产剧情在线一区 | 欧美一级黄色视屏 | 中文字幕日韩av | 欧美日本啪啪无遮挡网站 | 国产无遮挡猛进猛出免费软件 | 久久av免费 | 久久综合久久伊人 | 亚洲aⅴ一区二区三区 | 日韩精品一区二区三区视频播放 | 69av免费视频 | 欧美日韩久久不卡 | 国产精品日韩精品 | 国产高清在线免费 | 在线 精品 国产 | 中文字幕在线有码 | 麻豆视频大全 | 超碰人人超 | 99精品在线免费在线观看 | 成人超碰97 | 国产黑丝一区二区三区 | 国产亚洲欧美一区 | 9在线观看免费高清完整 | 色偷偷av男人天堂 | 成人久久电影 | 我爱av激情网 | 天天操天 | 亚洲视频中文 | 麻豆网站免费观看 | 伊人日日干| 国产日产精品一区二区三区四区的观看方式 | 国产五月色婷婷六月丁香视频 | 日韩在线观看中文字幕 | 综合天堂av久久久久久久 | 99日精品 | 狠狠干夜夜操 | 免费视频网 | 亚洲国产精品va在线看 | 久久成人在线 | 日本久久久久久科技有限公司 | 免费视频久久久久久久 | 国产欧美最新羞羞视频在线观看 | 国产区在线 | 国产一区视频在线播放 | 成全在线视频免费观看 | 日韩欧美在线综合网 | 99在线视频网站 | 成人黄色小说在线观看 | 天天射综合 | 色综合久久久 | 97国产精品久久 | 国产精品大片 | www视频免费在线观看 | 日本一区二区三区免费观看 | 国产区精品在线观看 | 国产免费黄视频在线观看 | 在线看日韩av | 在线不卡中文字幕播放 | 国产精品不卡在线播放 | 久久精久久精 | 99在线国产 | 午夜色性片 | 亚洲精选99 | 日本少妇久久久 | 国产视频丨精品|在线观看 国产精品久久久久久久久久久久午夜 | 免费看的黄色小视频 | 色94色欧美 | 久草免费福利在线观看 | 天天操天天操天天操天天操天天操 | 国产一级高清 | 亚洲精品乱码久久久久久高潮 | 国产精品久久久久久久久软件 | 欧美精品一区在线发布 | 永久免费的av电影 | 国产精品久久久久久电影 | 中文字幕日本特黄aa毛片 | 人人草人人草 | 在线观看免费视频 | 天堂av网站 | 国产在线一区观看 | 国产精品毛片一区视频播 | 成人av在线播放网站 | 免费观看版 | 精品在线免费视频 | av大片网址 | 午夜aaaa| 天天操天天草 | 99精品视频在线看 | 亚洲欧美日本A∨在线观看 青青河边草观看完整版高清 | 色噜噜日韩精品一区二区三区视频 | 久久精品人人做人人综合老师 | 中文在线资源 | 天天躁天天躁天天躁婷 | 国产伦精品一区二区三区在线 | 在线观看成人网 | 久久综合免费 | 色婷婷国产精品一区在线观看 | 国产精品久久久久久久久蜜臀 | 六月激情| 久久久久二区 | 天天射天天舔天天干 | 日韩电影久久 | 精品亚洲免费视频 | 日韩高清久久 | 亚洲 欧美 另类人妖 | 九九免费在线观看 | 久久久黄色免费网站 | 久草在线这里只有精品 | 91精品国产福利 | 日韩高清免费无专码区 | 天天干,天天射,天天操,天天摸 | 国产精品久久久久久久婷婷 | 毛片精品免费在线观看 | 亚洲91中文字幕无线码三区 | 久久久久久国产精品999 | 国产在线黄色 | 国产精品国产三级在线专区 | 久久精品中文 | 国产五码一区 | 亚洲黄色免费观看 | 丁香久久婷婷 | 亚洲视频网站在线观看 | 中文字幕视频免费观看 | 亚洲 欧美 综合 在线 精品 | 国产麻豆剧果冻传媒视频播放量 | h动漫中文字幕 | 欧美日韩国产三级 | 国产成人高清在线 | 91久久国产综合精品女同国语 | 久久午夜国产精品 | 成年人在线免费看片 | 日日爽天天 | 亚洲三级在线免费观看 | 日韩国产精品久久 | 免费观看第二部31集 | 超碰97免费在线 | 免费碰碰| 欧美成人基地 | 九色91av | 99性视频| 成人高清av在线 | 亚洲国产精品久久久久婷婷884 | 一区二区三区四区五区在线 | 亚洲精品99久久久久中文字幕 | 日日夜夜天天久久 | 在线观看网站黄 | 亚洲 欧美 另类人妖 | 久久激情视频 | 国产理论片在线观看 | 波多在线视频 | 精品国产伦一区二区三区免费 | 在线午夜电影神马影院 | 亚洲欧美国产精品18p | 国产一级黄色片免费看 | 国产一级不卡视频 | 日韩在线第一区 | av一区二区三区在线观看 | 日韩欧美视频二区 | 国产日产高清dvd碟片 | av不卡中文字幕 | 亚洲 综合 国产 精品 | 国产精品福利午夜在线观看 | 91爱爱电影 | 国产精品久久久久一区 | 日本中文字幕网址 | 久久久久久精 | 久久99国产精品久久99 | 91麻豆精品国产91 | 久久艹久久 | 国内精品久久久久影院一蜜桃 | 国产精品第一 | 久久久污 | 极品嫩模被强到高潮呻吟91 | 黄色成人影院 | 在线三级av | 狠狠操综合 | 日韩免费av在线 | 亚洲做受高潮欧美裸体 | 成人在线观看资源 | 四虎国产精品成人免费4hu | 午夜精品久久久久久久99 | 99精品在这里 | 最近中文字幕高清字幕在线视频 | 91视频 - 88av | 激情在线网址 | 国产三级精品三级在线观看 | 国产精品一区二区免费看 | 伊香蕉大综综综合久久啪 | 97超碰国产精品 | 亚洲国产精品第一区二区 | 日韩免费播放 | 久久国产精品久久w女人spa | 天堂av在线7| 免费 在线 中文 日本 | 黄av资源 | 九九热在线观看视频 | 亚洲一区久久久 | 韩国一区二区三区在线观看 | 亚洲免费av在线播放 | 国产成人777777| 日韩资源在线 | 日韩欧美高清免费 | 日韩精品一区二区三区免费观看视频 | 天天射天天爱天天干 | 最近中文字幕久久 | 欧美性生活一级片 | av三级在线免费观看 | 99精品免费 | 免费看色视频 | 黄色毛片大全 | 99精品免费观看 | 日韩精品视频免费看 | 久久全国免费视频 | 日韩理论片在线 | 色婷婷久久 | 国产精品美女久久久久久免费 | 97在线免费观看视频 | 亚洲欧美日韩精品一区二区 | 免费在线观看日韩欧美 | 国产亚洲无 | www色com| 日韩黄色在线电影 | 91看片淫黄大片一级在线观看 | 精品亚洲午夜久久久久91 | 97在线播放 | 在线视频1卡二卡三卡 | 久久久久久久久久久影视 | 欧美激情精品久久久久 | 在线观看v片| 婷婷激情综合网 | 98涩涩国产露脸精品国产网 | 欧美精品一二 | 国产又粗又猛又黄视频 | 在线观看日韩中文字幕 | 69久久99精品久久久久婷婷 | 国产精品第一页在线 | 天天插天天射 | 国产精品久久久久aaaa九色 | 国产中出在线观看 | av电影 一区二区 | 在线色亚洲 | 亚洲国产精品va在线 | 色婷婷激情综合 | 天天久久综合 | 亚洲国内精品视频 | 精品久久久久久亚洲综合网站 | 久久不射电影院 | 综合久久网站 | 三上悠亚一区二区在线观看 | 久久久久国产成人免费精品免费 | 亚洲午夜剧场 | 色婷婷在线播放 | 亚洲色图 校园春色 | 亚洲日本韩国一区二区 | 国产高清av在线播放 | 亚洲精品免费视频 | 中文字幕a在线 | 性色视频在线 | 日日操天天操狠狠操 | 在线看91| 日韩专区在线播放 | 欧美最猛性xxxxx免费 | 免费网站观看www在线观看 | 97视频在线观看成人 | 欧美日韩在线精品一区二区 | 精品久久91| 久久久久久久99精品免费观看 | 中文字幕五区 | 日本三级全黄少妇三2023 | a在线免费| 国产成人精品一区二三区 | 亚洲成年人在线播放 | 免费av在线网站 | 中文字幕在线视频免费播放 | 免费看片黄色 | 亚洲精品99久久久久久 | 99热播精品 | 国产精品久久久久久久久久 | 国产一卡久久电影永久 | 亚洲国产成人在线播放 | 黄色av电影在线 | 欧美ⅹxxxxxx | 久精品视频在线 | 97色涩| 91pony九色丨交换 | 国产91国语对白在线 | 精品国产一区二区三区四区vr | 欧美性极品xxxx做受 | 日韩免费不卡av | 91看毛片| 91高清免费 | 黄色精品一区二区 | 97国产超碰在线 | 日韩手机在线 | 狠狠的日日 | 国产精品3区 | 成人av一级片 | 天天射天天色天天干 | av久久在线 | 久久久久久久久久久久av | av资源免费看 | 波多野结衣视频一区 | 国产精品嫩草影视久久久 | 成人国产精品av | 91精品久久久久久久久 | 狠狠色伊人亚洲综合网站色 | 欧美乱大交 | 免费看一级黄色 | 久久免费高清视频 | 91在线观看黄 | 91女人18片女毛片60分钟 | 国产裸体永久免费视频网站 | 亚洲欧洲美洲av | 久久综合久久鬼 | 亚洲综合在线发布 | 国产网红在线观看 | 久久免费在线 | 99 色| 五月婷婷久| 久久九九视频 | 婷婷伊人综合 | 日本三级不卡 | 成人影片在线播放 | 久久99精品久久久久久 | 亚洲色图 校园春色 | 精品国产一区二区三区久久久久久 | 在线观看亚洲国产精品 | 爱射综合 | 99国产精品 | 狠狠操狠狠干天天操 | 96国产在线 | 66av99精品福利视频在线 | 人人澡超碰碰97碰碰碰软件 | 久久av高清 | 在线播放视频一区 | 国产精品女主播一区二区三区 | 在线观看岛国片 | av电影中文字幕在线观看 | 字幕网在线观看 | 国产欧美日韩一区 | 欧美一级看片 | 精品国产自在精品国产精野外直播 | 精品不卡av | 欧美日韩免费观看一区二区三区 | 99视频一区| av一区在线播放 | 久久综合中文字幕 | 久久精彩免费视频 | 欧美激情在线看 | 精品国产诱惑 | 91中文字幕 | av在线精品 | 中文字幕黄网 | 国产精品麻豆一区二区三区 | 国产美女久久 | 伊人成人精品 | 日韩色综合网 | 丁香六月婷婷开心婷婷网 | 亚洲婷婷综合色高清在线 | av一级在线 | 91豆麻精品91久久久久久 | 色综合 久久精品 | 久久久久久久国产精品影院 | 天天干天天干天天干天天干天天干天天干 | 亚洲天堂精品 | 婷婷激情小说网 | 久久亚洲婷婷 | 免费视频国产 | 国产在线看一区 | 黄色录像av | 亚洲免费一级 | 在线免费观看国产视频 | 中文字幕色播 | 欧美 亚洲 另类 激情 另类 | 日韩精品无 | 视频在线91 | 视频二区在线 | 亚洲国产精品影院 | 欧美福利在线播放 | 黄色av影院 | 一级大片在线观看 | 99热在线观看免费 | 涩涩成人在线 | 精品一区久久 | 国产美女久久 | 精品国产一区二区三区在线观看 | av免费高清观看 | 国产一区二区三区在线免费观看 | 在线观看mv的中文字幕网站 | 久久99视频免费观看 | 美女视频永久黄网站免费观看国产 | www.五月天婷婷| 国产精品影音先锋 | 日韩免费高清 | 91在线公开视频 | 国产高清一级 | 91精品日韩 | 丁香婷婷久久 | 日韩综合一区二区三区 | 中文免费在线观看 | 6080yy午夜一二三区久久 | 91看片网址 | 婷婷在线看 | 中文字幕精品www乱入免费视频 | 一级免费av | 日韩精品一区二区免费视频 | 日韩免费在线观看视频 | 国产精品自在欧美一区 | 一区二区三区日韩视频在线观看 | 天天射天天操天天色 | 91免费视频网站在线观看 | av中文字幕在线播放 | 精品久久久久久久久亚洲 | 麻豆一区在线观看 | 亚洲 欧美 变态 国产 另类 | 久久综合桃花 | 99视频这里只有 | 国产日韩精品一区二区 | 日日日视频 | 成人av影视观看 | 国产成人亚洲精品自产在线 | 久久久久久久久久久综合 | 五月婷在线视频 | 久草在线视频免费资源观看 | 成人黄色在线视频 | 美女久久99 | 亚洲第一区精品 | 婷婷激情站 | 天天操夜操视频 | 精品国产乱码一区二区三区在线 | 久久婷五月| 天天曰天天射 | 久草视频在线播放 | 18岁免费看片 | 国产在线观看不卡 | 久久国产福利 | www中文在线 | 国产手机视频精品 | 国产精品视频专区 | 91精品1区| 国产精品毛片一区视频 | 欧美日韩国产一二三区 | 免费观看黄色12片一级视频 | 亚洲成a人片在线观看网站口工 | a视频在线 | 手机在线看永久av片免费 | 国产精品视频免费在线观看 | 最近日本中文字幕a | 天天射射天天 | 青青河边草观看完整版高清 | 久久视频精品在线 | 久精品视频免费观看2 | 国产精品va在线播放 | 国产黄色片免费观看 | 国产精品一区二区吃奶在线观看 | 日韩69av| 亚洲精品啊啊啊 | 97视频在线| 精品国产精品国产偷麻豆 | 超碰公开97 | 精品在线观看一区二区 | 一区二区三区视频网站 | 久久精品免费 | 天天操天天射天天 | 久久综合九色综合97_ 久久久 | 在线电影av | 国产精品一区二区在线 | 97麻豆视频| 中文字幕色婷婷在线视频 | 黄色的视频网站 | 在线观看视频国产一区 | 国产96在线 | 亚洲精品国产免费 | 亚洲欧美日本A∨在线观看 青青河边草观看完整版高清 | 在线欧美最极品的av | 国产亚洲在线视频 | 国产精品毛片一区二区在线看 | 欧美成人h版在线观看 | 91在线porny国产在线看 | 久久精品精品电影网 | 亚洲成人在线免费 | 一区三区视频在线观看 | 日韩伦理一区二区三区av在线 | 狠狠操欧美 | 婷婷综合av | 中文字幕久久精品 | 日韩电影在线一区 | 中文字幕一区二区在线观看 | 探花视频在线观看免费版 | 在线 日韩 av | 婷婷丁香色 | 香蕉视频在线网站 | 91字幕| 国产精品mv在线观看 | 在线影院中文字幕 | 久久久国产一区二区三区 |