1. 程式人生 > 其它 >Python實驗 、Pandas 分組與聚合

Python實驗 、Pandas 分組與聚合

技術標籤:Python實驗資料分析python

1、內容

1 程式題 ①以年級資訊為分組鍵,對學生資訊進行分組,並輸出大一學生的資訊 ②分別計算出四個年級中身高最高的學生 ③計算大一學生和大二學生的平均體重 2 、北京租房資料統計分析(續) 3 )按照具體戶型(如 3 2 廳)或戶型中的室(如 3 室)進行分組,統 計每種戶型的數量、最高 / 最低 / 平均租價等資訊; 按照區域(如海淀)進行分組,統計房源數量、最高 / 最低 / 平均租價等資訊。 3 、讀取美國大選資料,利用分組聚合、視覺化等方法進行簡要的統計分析
注: 1 )資料來源: https://www.kaggle.com/unanimad/us-election-2020 共分為 4 部分: governor (州長)、 house (眾議院)、 president (總統) senate (參議院)選舉 2 )政黨可按照 REP (共和黨)、 DEM (民主黨)和其他政黨進行分組 3 )本題為開放題,請同學們自行設定所要統計的資訊; 也可以前往 Kaggle 網站選擇其他資料集進行簡要分析。 4 、自定義題目:處理從 Kaggle 網站下載的 Netflix 資料。

2、原始碼清單

1 程式題
#以年級資訊為分組鍵,對學生資訊進行分組,並輸出大一學生的資訊 
import numpy as np 
import pandas as pd 
info_df=pd.DataFrame({'年級':['大一','大二','大三','大四','大二','大三','大一','大三 ','大四'], 
                      '姓名':['李巨集卓','李思真','張振海','趙鴻飛','白蓉','馬騰飛',' 張曉凡','金紫萱','金燁'], 
                      '年齡':[18,19,20,21,19,20,18,20,21], 
                      '性別':['男','女','男','男','女','男','女','女','男'], 
                      '身高(cm)':[175,165,178,175,160,180,167,170,185], 
                      '體重 (kg)':[65,60,70,75,55,70,52,53,73]},index=[1,2,3,4,5,6,7,8,9]) 
info_df.index.name='序號' 
info_df.columns.name='專案' 
print(info_df)
#輸出大一學生的資訊
gob=info_df.groupby('年級') 
group1=dict([x for x in gob])['大一'] 
print(group1)
#分別計算出四個年級中身高最高的學生
data1=gob['身高(cm)'].max() 
data2=pd.merge(info_df,data1,on=['身高(cm)','年級'],how='right') 
print(data2)
#計算大一學生和大二學生的平均體重
print('大一學生的平均體重:',group1['體重(kg)'].apply('mean')) 
print('大二學生的平均體重:',dict([x for x in gob])['大二']['體重 (kg)'].apply('mean'))

2、北京租房資料統計分析(續)

#按照具體戶型(如 3 室 2 廳)或戶型中的室(如 3 室)進行分組
group_obj=data.groupby('戶型') 
room_group=dict([x for x in group_obj])['3 室 2 廳']
#統計每 種戶型的數量、最高/最低/平均租價等資訊
print('3 室 2 廳戶型最高價:',room_group['價格(元/月)'].max()) 
print('3 室 2 廳戶型最低價:',room_group['價格(元/月)'].min()) 
print('3 室 2 廳戶型平均價:',room_group['價格(元/月)'].mean())
#按照區域(如海淀)進行分組,統計房源數量、最高/最低/平均租價等資訊
gobj=data.groupby('區域')#按照區域分組 
group_haidian=dict([x for x in gobj])['海淀']#分出海淀區 
print('海淀區房源:',group_haidian['戶型'].count())#房源總數 
print('海淀區最高價:',group_haidian['價格(元/月)'].max()) 
print('海淀區最低價:',group_haidian['價格(元/月)'].min()) 
print('海淀區平均價:',group_haidian['價格(元/月)'].mean())

3、美國大選資料分析

import pandas as pd 
import numpy as np 
from openpyxl import load_workbook 
#輸入資料
data1=pd.read_csv(r'E:\實驗資料\governors_county.csv') 
data2=pd.read_csv(r'E:\實驗資料\governors_county_candidate.csv') 
data3=pd.read_csv(r'E:\實驗資料\governors_state.csv') 

#檢查是否有缺失值和空值
pd.isnull(data1) 
pd.isnull(data2) 
pd.isnull(data3)

#刪除空值和缺失值
data1.dropna() 
data2.dropna() 
data3.dropna()

#刪除重複值
data1.drop_duplicates()
data2.drop_duplicates() 
data3.drop_duplicates()

#檢測是否有異常值
data3.boxplot(column=['state','votes','electoral_vote'])

#根據 state 一列合併 data1 和 data3
merged_by_state= pd.merge(data1,data3,left_on='state',right_on='state',how='left') print(merged_by_state)

#根據 state 一列將 data1 分組之後分別輸出分組情況
group_o=data1.groupby('state') 
for i in group_o: 
    print(i) 
group1=dict([x for x in group_o])['Montana'] 
print(group1) 
group2=dict([x for x in group_o])['New Hampshire'] 
print(group2)

#算數處理。求蒙大拿和新罕布林兩州的票數總和
total_votes_montana=group1['total_votes'].sum() 
print('蒙大納州的有效票數總和為:',total_votes_montana) total_votes_NewHampshire=group2['total_votes'].sum() 
print('新罕布林州的有效票數總和為:',total_votes_NewHampshire)

4、Netflix影視資料分析

#匯入 csv 檔案 
import pandas as pd 
import numpy as np 
import re 
netflix_data=pd.read_csv(r'E:\實驗資料\netflix_titles.csv')

#刪除空值和缺失值 
netflix_data=netflix_data.dropna() 

#刪除重複值 
netflix_data=netflix_data.drop_duplicates() 

#根據體裁分類並顯示電影一組 
nf_group=netflix_data.groupby('type') 
movie_group=dict([x for x in nf_group])['Movie']

#從電影一組取出只有一集的電影 
minut=movie_group['duration'].str.contains('min') 
min_group=movie_group[minut] 

#算數處理 
#電影時常轉換為整型 
min_group['duration']=min_group['duration'].map(lambda x: str(x)[:-3]) 
min_group['duration']=min_group['duration'].apply(pd.to_numeric) min_group['duration']=min_group['duration'].astype(dtype='int') 

#找出一集電影中時常最長的 
longest_movie=min_group['duration'].max() 
print('電影時長最長為:',longest_movie)

#根據發行時間分組並顯示 2019 年發行的所有影視作品 year_group=netflix_data.groupby('release_year') 
twenty_nineteen_group=dict([x for x in year_group])[2019]

#求出 2019 年發行的影視作品總數 
tng_count=twenty_nineteen_group['show_id'].count() 
print('2019 年發行的影視作品總數為:',tng_count) 

#求出 2019 年發行的影視作品種類總數 list_count=twenty_nineteen_group['listed_in'].drop_duplicates().count() 
print('2019 年發行的影視作品種類總數為:',list_count)

老師在要求裡面有提到Kaggle這個網站,上去看了一下,資料特別多。當學了python沒有東西拿來練手的時候可以上去隨便下載一個數據開始分析。註冊花了很長時間~~不過最後還是成功上去了~非常好的一個網站!!!