Python實驗 、Pandas 分組與聚合
阿新 • • 發佈:2020-12-20
1、內容
1 、 程式題 ①以年級資訊為分組鍵,對學生資訊進行分組,並輸出大一學生的資訊 ②分別計算出四個年級中身高最高的學生 ③計算大一學生和大二學生的平均體重 2 、北京租房資料統計分析(續) ( 3 )按照具體戶型(如 3 室 2 廳)或戶型中的室(如 3 室)進行分組,統 計每種戶型的數量、最高 / 最低 / 平均租價等資訊; 按照區域(如海淀)進行分組,統計房源數量、最高 / 最低 / 平均租價等資訊。 3 、讀取美國大選資料,利用分組聚合、視覺化等方法進行簡要的統計分析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沒有東西拿來練手的時候可以上去隨便下載一個數據開始分析。註冊花了很長時間~~不過最後還是成功上去了~非常好的一個網站!!!