國內(nèi)做批發(fā)的網(wǎng)站百度醫(yī)生在線問診
接上篇《60、Pandas中DataFrame對象的操作(一)》
上一篇我們講解了DataFrame對象的簡介、基本操作及數(shù)據(jù)清洗相關(guān)的內(nèi)容。本篇我們來繼續(xù)講解DataFrame對象的統(tǒng)計分析、可視化以及數(shù)據(jù)導(dǎo)出與保存相關(guān)內(nèi)容。
一、DataFrame的統(tǒng)計分析
在數(shù)據(jù)分析和處理中,Pandas的DataFrame提供了強大的統(tǒng)計分析功能,幫助我們深入理解數(shù)據(jù)的分布、趨勢和特征。以下將詳細(xì)介紹描述性統(tǒng)計、分組聚合以及數(shù)據(jù)透視表等關(guān)鍵功能。
1、描述性統(tǒng)計
描述性統(tǒng)計是數(shù)據(jù)分析的第一步,它通過計算一系列統(tǒng)計量來概括數(shù)據(jù)的中心趨勢、離散程度和分布形態(tài)。在Pandas中,我們可以輕松地對DataFrame中的數(shù)值列進(jìn)行描述性統(tǒng)計分析。
●計算均值(Mean):均值是所有觀測值的算術(shù)平均值,能夠反映數(shù)據(jù)的中心位置。使用.mean()方法計算DataFrame中所有數(shù)值列的均值,或者通過指定列名來計算特定列的均值。
●計算中位數(shù)(Median):中位數(shù)是將一組數(shù)據(jù)從小到大排列后,位于中間位置的數(shù)。當(dāng)數(shù)據(jù)中存在極端值時,中位數(shù)比均值更能反映數(shù)據(jù)的中心趨勢。使用.median()方法計算中位數(shù)。
●計算眾數(shù)(Mode):眾數(shù)是數(shù)據(jù)集中出現(xiàn)次數(shù)最多的數(shù)。Pandas的DataFrame沒有直接的.mode()方法來計算眾數(shù),但可以使用scipy.stats.mode或pandas.Series.mode()(對于Series)來實現(xiàn)。對于DataFrame,通常需要先選擇一列,然后應(yīng)用此方法。
●計算標(biāo)準(zhǔn)差(Standard Deviation):標(biāo)準(zhǔn)差是衡量數(shù)據(jù)離散程度的一種指標(biāo),表示數(shù)據(jù)點與均值的平均距離。使用.std()方法計算標(biāo)準(zhǔn)差。
# 示例代碼 ?
import pandas as pd
import numpy as np# 創(chuàng)建一個包含不同類型數(shù)據(jù)的表
data = {'編號': [1, 2, 3, 4, 5, 6],'姓名': ['張三', '李四', '王五', '趙六', '孫七', '李雷'],'年齡': [25, 30, 28, 22, 35, 25],'薪資': [50000, 60000, 70000, 80000, 40000, 50000],'入職日期': ['2020-01-01', '2021-02-15', '2022-03-01', '2021-04-15', '2020-05-01', '2020-01-01'], ?# 日期時間字符串'類別': ['A', 'B', 'A', 'C', 'C', 'A'] ?# 分類數(shù)據(jù)
}# 將數(shù)據(jù)字典轉(zhuǎn)換為DataFrame
df = pd.DataFrame(data)print("薪資列均值:", df['薪資'].mean())
print("年齡中位數(shù):", df['年齡'].median())
# 對于眾數(shù),需要先選擇一列
mode_val = df['類別'].mode()[0]
print("類別眾數(shù):", mode_val)
print("薪資標(biāo)準(zhǔn)差", df['薪資'].std())
測試結(jié)果:
2、分組聚合
分組聚合是數(shù)據(jù)分析中常用的技術(shù),它允許我們將數(shù)據(jù)按照一個或多個鍵進(jìn)行分組,然后對每個組應(yīng)用聚合函數(shù)來計算統(tǒng)計量。
●使用groupby()方法進(jìn)行分組:groupby()方法根據(jù)一個或多個列的值將數(shù)據(jù)分成多個組。分組后,可以使用聚合函數(shù)對每組數(shù)據(jù)進(jìn)行操作。
●聚合函數(shù):Pandas提供了多種聚合函數(shù),如sum()(求和)、mean()(均值)、count()(計數(shù))、max()(最大值)、min()(最小值)等。這些函數(shù)可以直接應(yīng)用于groupby()的結(jié)果上。
# 分組求和
grouped_sum = df.groupby('類別').sum()
print("分組求和(薪資為例):")
print(grouped_sum[['薪資']])# 分組計算均值,僅對數(shù)值列操作
numeric_cols = ['年齡', '薪資'] ?# 指定要計算的數(shù)值列
grouped_mean = df.groupby('類別')[numeric_cols].mean()print("分組計算均值(薪資和年齡為例):")
print(grouped_mean)
測試結(jié)果:
3、數(shù)據(jù)透視表
數(shù)據(jù)透視表是一種強大的數(shù)據(jù)分析工具,它能夠以表格的形式展示數(shù)據(jù)的分組匯總信息,便于進(jìn)行數(shù)據(jù)的比較和分析。使用pivot_table()方法創(chuàng)建數(shù)據(jù)透視表:pivot_table()方法能夠根據(jù)一個或多個鍵對數(shù)據(jù)進(jìn)行分組,并對每個組應(yīng)用聚合函數(shù)來計算統(tǒng)計量。與groupby()相比,pivot_table()提供了更靈活的布局選項,如指定行索引、列索引和值。
# 示例代碼 ?
# 創(chuàng)建一個示例DataFrame
data2 = {'產(chǎn)品': ['蘋果', '香蕉', '蘋果', '橙子', '香蕉', '蘋果', '橙子', '香蕉'],'地區(qū)': ['北方', '南方', '北方', '北方', '南方', '南方', '南方', '北方'],'銷售量': [50, 60, 70, 80, 90, 100, 110, 120],'銷售額': [250, 300, 350, 400, 450, 500, 550, 600]
}df = pd.DataFrame(data2)# 打印原始DataFrame
print("原始DataFrame:")
print(df)# 創(chuàng)建數(shù)據(jù)透視表
# 索引為'產(chǎn)品',列為'地區(qū)',聚合函數(shù)為sum(對銷售量和銷售額進(jìn)行求和)
pivot_table = pd.pivot_table(df, values=['銷售量', '銷售額'], index=['產(chǎn)品'], columns=['地區(qū)'], aggfunc='sum')# 打印數(shù)據(jù)透視表
print("\n數(shù)據(jù)透視表:")
print(pivot_table)
測試效果:
在上面的代碼中,values參數(shù)指定了要匯總的列,index參數(shù)指定了行索引列,columns參數(shù)指定了列索引列,aggfunc參數(shù)指定了聚合函數(shù)。通過這種方式,我們可以輕松地創(chuàng)建出復(fù)雜的數(shù)據(jù)透視表,以滿足不同的數(shù)據(jù)分析需求。
二、DataFrame的可視化
在數(shù)據(jù)分析和數(shù)據(jù)科學(xué)領(lǐng)域,數(shù)據(jù)可視化是理解數(shù)據(jù)分布、趨勢和關(guān)系的關(guān)鍵步驟。Pandas庫雖然主要聚焦于數(shù)據(jù)處理,但它與強大的可視化庫(如Matplotlib和Seaborn)的無縫集成,使得從數(shù)據(jù)處理到數(shù)據(jù)可視化的流程變得極為順暢。以下將詳細(xì)介紹如何使用Pandas結(jié)合Matplotlib和Seaborn庫進(jìn)行DataFrame的可視化。
1、整合Matplotlib進(jìn)行繪圖
Matplotlib是Python中最基礎(chǔ)且廣泛使用的繪圖庫之一,它提供了大量的繪圖功能,能夠生成出版級別的圖表。Pandas的DataFrame和Series對象可以直接與Matplotlib集成,方便地將數(shù)據(jù)轉(zhuǎn)換為圖形。
(1)繪制柱狀圖
柱狀圖是展示分類數(shù)據(jù)(如不同類別的銷售量)的一種直觀方式。
import pandas as pd
import matplotlib.pyplot as plt# 示例數(shù)據(jù)
data = {'產(chǎn)品': ['蘋果', '香蕉', '橙子'], '銷售量': [100, 150, 120]}
df = pd.DataFrame(data)# 設(shè)置Matplotlib支持中文
plt.rcParams['font.sans-serif'] = ['SimHei'] ?# 設(shè)置為黑體
plt.rcParams['axes.unicode_minus'] = False ?# 解決保存圖像時負(fù)號'-'顯示為方塊的問題# 繪制柱狀圖
df.plot(kind='bar', x='產(chǎn)品', y='銷售量')
plt.title('產(chǎn)品銷售量')
plt.xlabel('產(chǎn)品')
plt.ylabel('銷售量')
plt.show()
測試效果:
(2)繪制折線圖
折線圖常用于展示時間序列數(shù)據(jù)或連續(xù)變量的變化趨勢。
# 假設(shè)我們有時間序列數(shù)據(jù) ?
data = {'日期': ['2023-01', '2023-02', '2023-03'], '銷售額': [200, 250, 300]} ?
df = pd.DataFrame(data) ?
df['日期'] = pd.to_datetime(df['日期']) ?# 確保日期是datetime類型 ?# 繪制折線圖 ?
df.plot(kind='line', x='日期', y='銷售額') ?
plt.title('銷售額變化趨勢') ?
plt.xlabel('日期') ?
plt.ylabel('銷售額') ?
plt.xticks(rotation=45) ?# 旋轉(zhuǎn)x軸標(biāo)簽以便閱讀 ?
plt.show()
測試效果:
(3)繪制餅圖
餅圖用于展示各部分在整體中的比例。
# 使用之前的銷售數(shù)據(jù) ?
df.plot(kind='pie', y='銷售量', labels=df['產(chǎn)品'], autopct='%1.1f%%') ?
plt.title('產(chǎn)品銷售量比例') ?
plt.ylabel('') ?# 餅圖通常不需要y軸標(biāo)簽 ?
plt.show()
測試效果:
2、使用Seaborn庫進(jìn)行更高級的可視化
Seaborn是基于Matplotlib的高級繪圖庫,它提供了更多的繪圖功能和更美觀的默認(rèn)樣式,與Pandas的集成也非常方便。
Seaborn能夠自動處理Pandas DataFrame的索引和列名,使得繪圖過程更加簡潔。同時,Seaborn提供了多種類型的圖表,如散點圖、箱型圖、熱力圖等,以及用于統(tǒng)計分析和數(shù)據(jù)探索的功能。
(1)散點圖
散點圖用于展示兩個變量之間的關(guān)系。
import seaborn as sns ?# 假設(shè)我們有兩個變量 ?
data = {'體重': [50, 60, 70, 80, 90], '身高': [160, 170, 180, 190, 200]} ?
df = pd.DataFrame(data) ?# 繪制散點圖 ?
sns.scatterplot(x='身高', y='體重', data=df) ?
plt.title('身高與體重的關(guān)系') ?
plt.show()
測試結(jié)果:
(2)箱型圖
箱型圖用于展示數(shù)據(jù)的分布,包括中位數(shù)、四分位數(shù)、異常值等。
# 使用之前的銷售數(shù)據(jù) ?
sns.boxplot(x='產(chǎn)品', y='銷售量', data=df) ?
plt.title('產(chǎn)品銷售量的分布情況') ?
plt.show()
測試結(jié)果:
(3)熱力圖
熱力圖用于展示矩陣數(shù)據(jù)中的數(shù)值大小,常用于展示相關(guān)性矩陣或頻率矩陣。
# 繪制熱力圖
# 創(chuàng)建數(shù)據(jù)集
data = {'助攻數(shù)': [4, 5, 5, 6, 7, 8, 8, 10],'籃板數(shù)': [12, 14, 13, 7, 8, 8, 9, 13],'得分': [22, 24, 26, 26, 29, 32, 20, 14]}
df = pd.DataFrame(data)# 計算相關(guān)矩陣
corr_matrix = df.corr()# 顯示結(jié)果,保留三位小數(shù)
print(corr_matrix.round(3))# 繪制熱力圖
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm')
plt.show()
測試結(jié)果:
通過以上示例,我們可以看到Pandas結(jié)合Matplotlib和Seaborn庫能夠輕松實現(xiàn)DataFrame的可視化,無論是基礎(chǔ)的圖表類型還是更高級的數(shù)據(jù)可視化需求,都能輕松展示。
三、DataFrame的導(dǎo)出與保存
1、導(dǎo)出為CSV文件
CSV(Comma-Separated Values)是一種常用的文本文件格式,用于存儲表格數(shù)據(jù),包括數(shù)字、文本等。Pandas提供了to_csv()方法,可以方便地將DataFrame導(dǎo)出為CSV文件?!窕居梅?#xff1a;
import pandas as pd# 創(chuàng)建一個包含不同類型數(shù)據(jù)的表
data = {'編號': [1, 2, 3, 4, 5, 6],'姓名': ['張三', '李四', '王五', '趙六', '孫七', '李雷'],'年齡': [25, 30, 28, 22, 35, 25],'薪資': [50000, 60000, 70000, 80000, 40000, 50000],'入職日期': ['2020-01-01', '2021-02-15', '2022-03-01', '2021-04-15', '2020-05-01', '2020-01-01'], ?# 日期時間字符串'類別': ['A', 'B', 'A', 'C', 'C', 'A'] ?# 分類數(shù)據(jù)
}# 將數(shù)據(jù)字典轉(zhuǎn)換為DataFrame
df = pd.DataFrame(data)df.to_csv('data.csv', index=False) ?# index=False表示不保存行索引
●高級選項:
sep:指定字段分隔符,默認(rèn)為逗號,。
encoding:指定文件的編碼格式,如utf-8。
columns:指定要導(dǎo)出的列,通過列名列表實現(xiàn)。
header:是否寫入列名作為文件頭部,默認(rèn)為True。
效果:
2、導(dǎo)出為Excel文件
Excel文件因其良好的兼容性和用戶友好的界面,在數(shù)據(jù)分析領(lǐng)域廣受歡迎。Pandas通過to_excel()方法支持將DataFrame導(dǎo)出為Excel文件,但需要注意的是,這要求安裝了openpyxl或xlwt庫作為引擎。
●安裝必要的庫(如果尚未安裝):
pip install openpyxl
●基本用法:
df.to_excel('data.xlsx', index=False, engine='openpyxl')
●高級選項:
sheet_name:指定工作表名,默認(rèn)為'Sheet1'。
startrow和startcol:指定開始寫入的行和列(從0開始計數(shù))。
float_format:浮點數(shù)的格式化字符串,如'%.2f'表示保留兩位小數(shù)。
測試效果:
3、導(dǎo)出為其他格式(可選)
Pandas不僅限于導(dǎo)出為CSV和Excel文件,還支持多種其他格式,如SQL數(shù)據(jù)庫、JSON文件等,這為數(shù)據(jù)分析師提供了極大的靈活性。
●導(dǎo)出到SQL數(shù)據(jù)庫:
使用to_sql()方法可以將DataFrame直接保存到SQL數(shù)據(jù)庫中。這需要先安裝數(shù)據(jù)庫連接庫(如sqlalchemy和相應(yīng)的數(shù)據(jù)庫驅(qū)動)。
from sqlalchemy import create_engine ?# 創(chuàng)建數(shù)據(jù)庫連接引擎 ?
engine = create_engine('sqlite:///mydatabase.db') ?# 將DataFrame保存到SQL表 ?
df.to_sql('tablename', con=engine, if_exists='replace', index=False)
●導(dǎo)出為JSON文件:
JSON格式因其輕量級和易于閱讀的特性,在Web開發(fā)中廣泛應(yīng)用。Pandas的to_json()方法可以將DataFrame轉(zhuǎn)換為JSON格式的字符串或文件。
# 導(dǎo)出為JSON字符串
json_str = df.to_json(orient='records')# 或直接寫入文件
df.to_json('data.json', orient='records', lines=True)
orient參數(shù)控制JSON對象的結(jié)構(gòu),常見的選項有'split', 'records', 'index', 'columns', 'values', 和 'table'。
測試效果:
至此,關(guān)于DataFrame對象的統(tǒng)計分析、可視化以及數(shù)據(jù)導(dǎo)出與保存相關(guān)內(nèi)容已介紹完畢,下一篇我們來講解DataFrame對象的案例實踐。
轉(zhuǎn)載請注明出處:https://guangzai.blog.csdn.net/article/details/140753857