在進(jìn)行統(tǒng)計(jì)分析時(shí),pandas
提供了多種工具來幫助我們理解數(shù)據(jù)。pandas
提供了多個(gè)聚合函數(shù),其中包括均值、標(biāo)準(zhǔn)差、最大值、最小值等等。
此外,pandas
還可以進(jìn)行基于列的統(tǒng)計(jì)分析,例如通過groupby()
函數(shù)對(duì)數(shù)據(jù)進(jìn)行聚合,并計(jì)算每組的統(tǒng)計(jì)分析結(jié)果。
除了基本的統(tǒng)計(jì)分析之外,pandas
還可以進(jìn)行更高級(jí)的分析,例如基于時(shí)間序列的分析等。
總之,pandas
是一個(gè)非常強(qiáng)大的數(shù)據(jù)處理工具,可以幫助我們更輕松地進(jìn)行數(shù)據(jù)分析和探索。
1. 一般統(tǒng)計(jì)
拿到數(shù)據(jù)之后,第一步我們會(huì)通過一些常用的統(tǒng)計(jì)信息來大體了解下數(shù)據(jù)的整體情況。pandas
中常用的統(tǒng)計(jì)函數(shù)有:
- .sum():計(jì)算對(duì)象的總和
- .mean():計(jì)算對(duì)象的平均值
- .median():計(jì)算對(duì)象的中位數(shù)
- .max():計(jì)算對(duì)象的最大值
- .min():計(jì)算對(duì)象的最小值
- .count():計(jì)算對(duì)象數(shù)量
- .std():計(jì)算對(duì)象標(biāo)準(zhǔn)差
- .var():計(jì)算對(duì)象方差
通過agg
函數(shù)可以一次將所有的統(tǒng)計(jì)信息分析出來。
import pandas as pd
df = pd.DataFrame(
{
"數(shù)學(xué)": [100, 88, 94, 76, 84],
"語文": [98, 80, 86, 76, 90],
"英語": [95, 91, 86, 95, 83],
},
index=["小紅", "小明", "小汪", "小李", "小張"],
)
df.agg(["sum", "mean", "median","max", "min", "count", "std", "var"])
2. 分組統(tǒng)計(jì)
如果要分析的數(shù)據(jù)集中不同的多個(gè)行存在同屬于一個(gè)分類時(shí),可以先分組之后再用上面的統(tǒng)計(jì)分析方法。
比如下面的示例,按年級(jí)分組統(tǒng)計(jì)的是同一個(gè)年級(jí)中所有學(xué)生的成績(jī)情況,而按學(xué)生分組統(tǒng)計(jì)的則是該學(xué)生在各個(gè)年級(jí)階段的成績(jī)情況。
按年級(jí)分組統(tǒng)計(jì):
(agg
函數(shù)除了可以指定統(tǒng)計(jì)函數(shù),還可以指定統(tǒng)計(jì)的列,下面的示例只統(tǒng)計(jì)了語文和數(shù)學(xué)情況)
df = pd.DataFrame(
{
"姓名": ["小紅", "小明", "小紅", "小明", "小汪", "小汪"],
"年級(jí)": ["初二", "初一", "初一", "初二", "初一", "初二"],
"數(shù)學(xué)": [100, 88, 94, 76, 84, 78],
"語文": [98, 80, 86, 76, 90, 88],
"英語": [95, 91, 86, 95, 83, 65],
},
)
agg_funcs = ["max", "min", "mean"]
df.groupby(by="年級(jí)").agg({"語文": agg_funcs, "數(shù)學(xué)": agg_funcs})
按學(xué)生分組統(tǒng)計(jì):
df.groupby(by="姓名").agg({"語文": agg_funcs, "數(shù)學(xué)": agg_funcs})
3. 透視表
pandas
透視表(Pivot Table)是數(shù)據(jù)分析中的一種非常強(qiáng)大的功能,可以實(shí)現(xiàn)數(shù)據(jù)的按列匯總、按行匯總、按列和行同時(shí)匯總、數(shù)據(jù)透視和數(shù)據(jù)分析等功能。
同樣使用上一節(jié)中的示例數(shù)據(jù),原始數(shù)據(jù)中,年級(jí),姓名和分?jǐn)?shù)混在一起,要看按人或者按年級(jí)查看成績(jī)情況的時(shí)候,需要進(jìn)行過濾和排序等操作。
如果使用透視表的話,可以將原始數(shù)據(jù)中的某些列的值作為新的索引,某些列的值作為新的列,那么數(shù)據(jù)會(huì)更加一目了然。
另外,透視表的結(jié)果用來繪制折線圖,柱狀圖等也非常方便。
用年級(jí)作為索引,姓名作為列名的透視表:
df = pd.DataFrame(
{
"姓名": ["小紅", "小明", "小紅", "小明", "小汪", "小汪"],
"年級(jí)": ["初二", "初一", "初一", "初二", "初一", "初二"],
"數(shù)學(xué)": [100, 88, 94, 76, 84, 78],
"語文": [98, 80, 86, 76, 90, 88],
"英語": [95, 91, 86, 95, 83, 65],
},
)
pd.pivot_table(df, values=["數(shù)學(xué)", "語文", "英語"], index=["年級(jí)"], columns=["姓名"])
用姓名作為索引,年級(jí)作為列名的透視表:
pd.pivot_table(df, values=["數(shù)學(xué)", "語文", "英語"], index=["姓名"], columns=["年級(jí)"])
4. 同比和環(huán)比
同比和環(huán)比是統(tǒng)計(jì)中經(jīng)常用到的概念,用來評(píng)估數(shù)據(jù)的變化情況。
同比一般指跟上一年度同一時(shí)期統(tǒng)計(jì)的數(shù)據(jù)的比較,環(huán)比一般指跟上一次統(tǒng)計(jì)的數(shù)據(jù)的比較。
原始數(shù)據(jù)如下(某同學(xué)初中三年每學(xué)期的平均分):
df = pd.DataFrame(
{
"年級(jí)": ["初一上", "初一下", "初二上", "初二下", "初三上", "初三下"],
"平均分": [90, 85, 86, 80, 90, 88],
},
)
df
環(huán)比就是看每個(gè)學(xué)期比上個(gè)學(xué)期是否進(jìn)步:
df["平均分環(huán)比"] = df["平均分"].pct_change(periods=1)
df
第一條數(shù)據(jù)是NaN
,因?yàn)樗鼪]有上一條數(shù)據(jù)可以參考。pct_change
得出的數(shù)值就是同比增長(zhǎng)的百分比,負(fù)數(shù)表示下降的百分比。
同比就是比較每個(gè)學(xué)年同學(xué)期的成績(jī)變化,比如初二上和初一上比較,初三下和初二下比較等等。
df["平均分同比"] = df["平均分"].pct_change(periods=2)
df
我們觀察這個(gè)示例數(shù)據(jù),同比與環(huán)比的差別僅僅在于:同比是隔一個(gè)數(shù)據(jù)比較,而環(huán)比是相鄰的數(shù)據(jù)比較。
所以,用pct_change
來計(jì)算同比的時(shí)候,只要設(shè)置periods
參數(shù)為2
即可。periods
參數(shù)默認(rèn)為1
,所以其實(shí)計(jì)算環(huán)比的時(shí)候也可以不設(shè)置periods
參數(shù)。文章來源:http://www.zghlxwxcb.cn/news/detail-474368.html
5. 總結(jié)回顧
本篇介紹的數(shù)據(jù)統(tǒng)計(jì)時(shí)常用的幾種方法,其中分組統(tǒng)計(jì)和透視表是使用比較頻繁的。
上面的示例主要介紹統(tǒng)計(jì)的函數(shù),假造的數(shù)據(jù)非常簡(jiǎn)單,其實(shí)在數(shù)據(jù)統(tǒng)計(jì)時(shí),統(tǒng)計(jì)前清理數(shù)據(jù),排序數(shù)據(jù)等才是耗費(fèi)時(shí)間最長(zhǎng)的過程。文章來源地址http://www.zghlxwxcb.cn/news/detail-474368.html
到了這里,關(guān)于【pandas基礎(chǔ)】--數(shù)據(jù)統(tǒng)計(jì)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!