極速數(shù)據(jù)可視化!七個(gè)Pandas繪圖函數(shù)助你事半功倍
一、簡(jiǎn)介
在使用Pandas分析數(shù)據(jù)時(shí),會(huì)使用Pandas函數(shù)來(lái)過(guò)濾和轉(zhuǎn)換列,連接多個(gè)數(shù)據(jù)幀中的數(shù)據(jù)等操作。
但是,生成圖表——將數(shù)據(jù)在數(shù)據(jù)幀中可視化——通常比僅僅查看數(shù)字更有幫助。
Pandas具有幾個(gè)繪圖函數(shù),可以使用它們快速輕松地實(shí)現(xiàn)數(shù)據(jù)可視化。我們將在本教程中介紹這些函數(shù)。
【示例代碼】:https://github.com/balapriyac/python-data-analysis/blob/main/pandas-plotting-fns/pandas_plotting_functions.ipynb
二、創(chuàng)建Pandas數(shù)據(jù)幀
首先創(chuàng)建一個(gè)用于分析的示例數(shù)據(jù)幀。我們將創(chuàng)建一個(gè)名為df_employees的數(shù)據(jù)幀,其中包含員工記錄。
我們將使用Faker和NumPy的隨機(jī)模塊來(lái)填充數(shù)據(jù)幀,生成200條記錄。
注意:如果你的開(kāi)發(fā)環(huán)境中沒(méi)有安裝Faker,請(qǐng)使用pip安裝:pip install Faker。
運(yùn)行以下代碼片段來(lái)創(chuàng)建df_employees,并向其中填充記錄:
import pandas as pd
from faker import Faker
import numpy as np
# 實(shí)例化Faker對(duì)象
fake = Faker()
Faker.seed(27)
# 為員工創(chuàng)建一個(gè)數(shù)據(jù)幀
num_employees = 200
departments = ['Engineering', 'Finance', 'HR', 'Marketing', 'Sales', 'IT']
years_with_company = np.random.randint(1, 10, size=num_employees)
salary = 40000 + 2000 * years_with_company * np.random.randn()
employee_data = {
'EmployeeID': np.arange(1, num_employees + 1),
'FirstName': [fake.first_name() for _ in range(num_employees)],
'LastName': [fake.last_name() for _ in range(num_employees)],
'Age': np.random.randint(22, 60, size=num_employees),
'Department': [fake.random_element(departments) for _ in range(num_employees)],
'Salary': np.round(salary),
'YearsWithCompany': years_with_company
}
df_employees = pd.DataFrame(employee_data)
# 顯示數(shù)據(jù)幀的頭部
df_employees.head(10)
我們?cè)O(shè)置了種子以便重現(xiàn)結(jié)果。所以每次運(yùn)行此代碼,都會(huì)得到相同的記錄。
以下是數(shù)據(jù)幀的前幾條記錄:
圖片
df_employees.head(10)的輸出結(jié)果
三、Pandas繪圖函數(shù)
1. 散點(diǎn)圖
散點(diǎn)圖通常用于了解數(shù)據(jù)集中任意兩個(gè)變量之間的關(guān)系。
對(duì)于df_employees數(shù)據(jù)幀,讓我們創(chuàng)建一個(gè)散點(diǎn)圖來(lái)可視化員工年齡和工資之間的關(guān)系。這將幫助我們了解員工年齡和工資之間是否存在一定的相關(guān)性。
要繪制散點(diǎn)圖,我們可以使用plot.scatter(),如下所示:
# 散點(diǎn)圖:年齡與工資
df_employees.plot.scatter(x='Age', y='Salary', title='Scatter Plot: Age vs Salary', xlabel='Age', ylabel='Salary', grid=True)
對(duì)于此示例數(shù)據(jù)幀,我們并未看到員工年齡和工資之間的任何相關(guān)性。
2. 折線圖
折線圖適用于識(shí)別連續(xù)變量(通常是時(shí)間或類(lèi)似刻度)上的趨勢(shì)和模式。
在創(chuàng)建df_employees數(shù)據(jù)幀時(shí),我們已經(jīng)定義了員工在公司工作年限與工資之間的線性關(guān)系。因此,讓我們看一下顯示工作年限與平均工資變化的折線圖。
我們先按工作年限分組找到平均工資,然后使用plot.line()繪制折線圖:
# 折線圖:平均工資隨工作年限的變化趨勢(shì)
average_salary_by_experience = df_employees.groupby('YearsWithCompany')['Salary'].mean()
df_employees['AverageSalaryByExperience'] = df_employees['YearsWithCompany'].map(average_salary_by_experience)
df_employees.plot.line(x='YearsWithCompany', y='AverageSalaryByExperience', marker='o', linestyle='-', title='Average Salary Trend Over Years of Experience', xlabel='Years With Company', ylabel='Average Salary', legend=False, grid=True)
圖片
由于我們選擇使用員工在公司工作年限的線性關(guān)系來(lái)填充薪資字段,因此可以清晰地看到折線圖反映了這一點(diǎn)。
3. 直方圖
可以使用直方圖來(lái)可視化連續(xù)變量的分布情況,方法是將數(shù)值劃分成區(qū)間或分段,并顯示每個(gè)分段中的數(shù)據(jù)點(diǎn)數(shù)量。
讓我們使用plot.hist()繪制直方圖來(lái)了解員工年齡的分布情況,如下所示:
# 直方圖:年齡分布
df_employees['Age'].plot.hist(title='Age Distribution', bins=15)
圖片
4. 箱形圖
箱形圖有助于了解變量的分布、擴(kuò)散情況,并用于識(shí)別異常值。
讓我們創(chuàng)建一個(gè)箱形圖,比較不同部門(mén)間的工資分布情況,從而對(duì)組織部的工資分布情況進(jìn)行高層次的比較。
箱形圖還有助于確定薪資范圍以及每個(gè)部門(mén)的有用信息,如中位數(shù)薪資和潛在的異常值等。
在這里,我們使用根據(jù)“部門(mén)(Department)”分組的“薪資(Salary)”列來(lái)繪制箱形圖:
# 箱形圖:按部門(mén)分列的薪金分布情況
df_employees.boxplot(column='Salary', by='Department', grid=True, vert=False)
圖片
從箱線圖中,我們可以看到某些部門(mén)的薪資分布比其他部門(mén)更廣泛。
5. 條形圖
如果想要了解變量在出現(xiàn)頻率方面的分布情況,可以使用條形圖。
現(xiàn)在,讓我們使用plot.bar()繪制一個(gè)條形圖來(lái)可視化員工數(shù)量:
# 條形圖:按部門(mén)的員工數(shù)量
df_employees['Department'].value_counts().plot.bar(title='Employee Count by Department')
圖片
6. 面積圖
面積圖通常用于可視化在連續(xù)軸或分類(lèi)軸上的累積分布變量。
對(duì)于員工數(shù)據(jù)幀,我們可以繪制不同年齡組的累積薪資分布圖。為了將員工映射到基于年齡組的區(qū)間中,我們需要使用pd.cut()。
然后,我們通過(guò)“年齡組(AgeGroup)”對(duì)薪資進(jìn)行累積求和。為了得到面積圖,我們使用plot.area():
# 面積圖:不同年齡組的累積薪資分布
df_employees['AgeGroup'] = pd.cut(df_employees['Age'], bins=[20, 30, 40, 50, 60], labels=['20-29', '30-39', '40-49', '50-59'])
cumulative_salary_by_age_group = df_employees.groupby('AgeGroup')['Salary'].cumsum()
df_employees['CumulativeSalaryByAgeGroup'] = cumulative_salary_by_age_group
df_employees.plot.area(x='AgeGroup', y='CumulativeSalaryByAgeGroup', title='Cumulative Salary Distribution Over Age Groups', xlabel='Age Group', ylabel='Cumulative Salary', legend=False, grid=True)
7. 餅圖
餅圖有助于可視化各個(gè)部門(mén)在整體組織中的薪資分布比例。
對(duì)于我們的示例,創(chuàng)建一個(gè)餅圖來(lái)顯示組織中各個(gè)部門(mén)的薪資分布是很有意義的。
我們通過(guò)部門(mén)對(duì)員工的薪資進(jìn)行分組,然后使用plot.pie()來(lái)繪制餅圖:
# 餅圖:按部門(mén)劃分的薪資分布
df_employees.groupby('Department')['Salary'].sum().plot.pie(title='Department-wise Salary Distribution', autopct='%1.1f%%')
四、總結(jié)
以上就是7個(gè)用于快速數(shù)據(jù)可視化的Pandas繪圖函數(shù)。也可以嘗試使用matplotlib和seaborn生成更漂亮的圖表。但是對(duì)于快速數(shù)據(jù)可視化,上述這些函數(shù)非常方便。