數(shù)據(jù)分析與可視化實(shí)驗(yàn)報(bào)告_第1頁
數(shù)據(jù)分析與可視化實(shí)驗(yàn)報(bào)告_第2頁
數(shù)據(jù)分析與可視化實(shí)驗(yàn)報(bào)告_第3頁
數(shù)據(jù)分析與可視化實(shí)驗(yàn)報(bào)告_第4頁
數(shù)據(jù)分析與可視化實(shí)驗(yàn)報(bào)告_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、 數(shù)據(jù)分析與可視化實(shí)驗(yàn)報(bào)告 (20212022學(xué)年秋季學(xué)期) 課程代碼 B課程名稱 數(shù)據(jù)分析與可視化 專業(yè)班級(jí) 2019級(jí)計(jì)科 1 班 學(xué)生學(xué)號(hào) 1 學(xué)生姓名 楊嘉豪 指導(dǎo)教師 房曉南信息工程學(xué)院2021年9月18日實(shí)驗(yàn)項(xiàng)目名稱項(xiàng)目三:使用DataFrame進(jìn)行數(shù)據(jù)處理操作實(shí)驗(yàn)地點(diǎn)明遠(yuǎn)樓C107大數(shù)據(jù)管理與應(yīng)用實(shí)驗(yàn)室實(shí)驗(yàn)日期2021年9 月 18日小組成員個(gè)人小組成員分工情況個(gè)人實(shí)驗(yàn)所用設(shè)備、材料、軟件等:1、臺(tái)式計(jì)算機(jī)(i5處理器以上,8G以上內(nèi)存);2、Python運(yùn)行環(huán)境、Anaconda軟件;3、保證每臺(tái)機(jī)器能夠連接到Internet。實(shí)驗(yàn)?zāi)康模?. 復(fù)習(xí)并編程掌握理論課堂講授的Ser

2、ies、時(shí)序數(shù)據(jù)和DataFrame的基本概念和方法;2. 掌握pandas中DataFrame的概念,掌握常用的生成DataFrame的函數(shù)和方法;3. 掌握使用DataFrame進(jìn)行基本的數(shù)據(jù)處理和操作的能力。實(shí)驗(yàn)內(nèi)容、步驟、結(jié)果、心得體會(huì):1、實(shí)驗(yàn)內(nèi)容1、結(jié)合理論課程進(jìn)度,熟悉Pandas課本案例和代碼內(nèi)容,動(dòng)手編寫代碼實(shí)現(xiàn)課堂講解的主要部分,并將核心代碼放到實(shí)驗(yàn)步驟部分,將主要結(jié)果放到結(jié)果部分,結(jié)果部分的截圖選取5張即可。2、參照Pandas官網(wǎng)的()入門教程,以泰坦尼克號(hào)乘客數(shù)據(jù)作為分析對(duì)象,完成一個(gè)Pandas完整的案例分析,要求案例的10個(gè)分析子模塊每個(gè)模塊都要在實(shí)驗(yàn)報(bào)告步驟中寫

3、出核心代碼和注釋,然后每個(gè)模塊截取一張代表性圖片作為實(shí)驗(yàn)結(jié)果部分,完成實(shí)驗(yàn)報(bào)告。2、實(shí)驗(yàn)步驟(主要代碼和注釋,配以必要文字說明)實(shí)驗(yàn)1#一維數(shù)組#自動(dòng)創(chuàng)建從0開始的非負(fù)整數(shù)索引s1 = pd.Series(range(1, 20, 5)#使用字典創(chuàng)建Series, 使用字典的“鍵”作為索引s2 = pd.Series('Chinese':90, 'maths':92, 'Python':98, 'physics':87)#修改指定索引對(duì)應(yīng)的值s13 = -17s2'maths' = 93print('s1原

4、始數(shù)據(jù)'.ljust(20, '=')print(s1)print('s1所有的值加5'.ljust(20, '=')print(s1+5)print('s2數(shù)據(jù)的直方圖'.ljust(20, '=')s2.hist()()#兩個(gè)Series對(duì)象相加print('兩個(gè)Series對(duì)象相加'.ljust(20, '=')print(pd.Series(range(5)+pd.Series(range(5,10)print('兩個(gè)不等長Series對(duì)象相加'.lj

5、ust(20, '=')print(pd.Series(range(3)+pd.Series(range(5,10)print('標(biāo)準(zhǔn)差、無偏方差、無偏標(biāo)準(zhǔn)差'.ljust(20,'=')print(pd.Series(range(6).std()print(pd.Series(range(6).var()print(pd.Series(range(6).sem()#時(shí)序數(shù)組print('間隔5天'.ljust(20,'=')print(pd.date_range(start = '', end =

6、 '',freq = '5D')print('間隔1周'.ljust(20,'=')print(pd.date_range(start = '', end = '',freq = 'W')print('3:00開始,間隔1分鐘,12個(gè)數(shù)據(jù)'.ljust(20,'=')print(pd.date_range(start = '', periods = 12, freq = 'T')print('查看指定日期是否閏年

7、'.ljust(20,'=')print(pd.Timestamp('').is_leap_year)#二維數(shù)組#模擬考試成績,使用人名字符串作為索引df = pd.DataFrame('Chinese':87,98,65,76, 'Math':65,78,95,82, 'Python':96,89,78,92, index = '張三','李四','王五','趙六')print(df)實(shí)驗(yàn)2超市營業(yè)額2#超市營業(yè)額2#讀取工號(hào)、姓名、時(shí)段、交

8、易額四項(xiàng)數(shù)據(jù),使用默認(rèn)索引df = pd.read_excel(r'超市營業(yè)額2.xlsx',usecols = '工號(hào)','姓名','時(shí)段','交易額')#輸出前10行數(shù)據(jù)print(df:10,end = 'nn')#讀取第一個(gè)worksheet中所有列#跳過1、3、5行,制定下標(biāo)為1的列中數(shù)據(jù)為DataFrame的行索引標(biāo)簽df = pd.read_excel(r'超市營業(yè)額2.xlsx',skiprows = 1,3,5, index_col = 1)print(df:10)

9、#讀取全部數(shù)據(jù),使用默認(rèn)索引df = pd.read_excel(r'超市營業(yè)額2.xlsx')print('下標(biāo)在【5,10】區(qū)間的行'.ljust(20,'=')#對(duì)行進(jìn)行切片,注意切片是限定的左閉右開區(qū)間print(df5:11)#iloc使用數(shù)字做索引print('索引為5的行'.ljust(20,'=')print(df.iloc5)print('下標(biāo)為3,5,10的行'.ljust(20,'=')print(df.iloc3,5,10,:)print('行下標(biāo)為3

10、,5,10,列下標(biāo)為0,1,4'.ljust(30,'=')print(df.iloc3,5,10,0,1,4)print('查看指定的列前5行數(shù)據(jù)'.ljust(20,'=')print(df'姓名','時(shí)段','交易額':5)print('下標(biāo)為3,5,10行的指定列'.ljust(20,'=')#loc和at使用標(biāo)簽文本做索引print(df.loc3,5,10,'姓名','交易額')print('行小標(biāo)為3,姓名

11、列的值'.ljust(20,'=')print(df.at3,'姓名')print('交易額高于1700元的數(shù)據(jù)'.ljust(20,'=')print(dfdf'交易額'>1700)print('交易總額'.ljust(20,'=')print(df'交易額'.sum()print('下午班的交易總額'.ljust(20,'=')print(dfdf'時(shí)段'='14:00-21:00'&#

12、39;交易額'.sum()print('張三下午班的交易情況'.ljust(20,'=')print(df(df.姓名='張三')&(df.時(shí)段='14:00-21:00'):10)print('日用品柜臺(tái)銷售總額'.ljust(20,'=')print(dfdf'柜臺(tái)'='日用品''交易額'.sum()print(''.ljust(20,'=')print(dfdf'姓名'.isin(&

13、#39;張三','李四')'交易額'.sum()print('交易額在指定范圍內(nèi)的記錄'.ljust(20,'=')print(dfdf'交易額'.between(800,850)print('查看交易額統(tǒng)計(jì)信息'.ljust(20,'=')print(df'交易額'.describe()print('交易額最小的三條記錄'.ljust(20,'=')print(df.nsmallest(3,'交易額')prin

14、t('交易額最大的五條記錄'.ljust(20,'=')print(df.nlargest(5,'交易額')print('最后一個(gè)日期'.ljust(20,'=')print(df'日期'.max()print('最小的工號(hào)'.ljust(20,'=')print(df'工號(hào)'.min()print('第一個(gè)最小交易額的行下標(biāo)'.ljust(20,'=')index = df'交易額'.idxmin()p

15、rint(index)print('第一個(gè)最小交易額'.ljust(20,'=')print(df.locindex,'交易額')print('按照交易額和工號(hào)降序排序'.ljust(20,'=')print(df.sort_values(by= '交易額','工號(hào)',ascending=False):12)print('不同時(shí)段的銷售總額'.ljust(20,'=')print(df.groupby(by='時(shí)段')'交易額&

16、#39;.sum()print('各柜臺(tái)的銷售總額'.ljust(20,'=')print(df.groupby(by='柜臺(tái)')'交易額'.sum()print('每個(gè)員工的交易額平均值'.ljust(20,'=')print(df.groupby(by='姓名')'交易額'.mean().round(2).sort_values()print('對(duì)分組結(jié)果進(jìn)行聚合'.ljust(20,'=')print(df.groupby(by=

17、'姓名').agg('max','min','mean','median')print('對(duì)分組聚合后的部分結(jié)果'.ljust(20,'=')print(df.groupby(by='姓名').agg('max','min','mean','median')'交易額')實(shí)驗(yàn)3數(shù)據(jù)清洗df = pd.read_excel(r'超市營業(yè)額2.xlsx')#異常值處理print(

18、'查看交易額低于200的數(shù)據(jù)'.ljust(20,'=')print(dfdf.交易額<200)#異常值區(qū)間df'交易額'.mean()+2*df'交易額'.std()df'交易額'.mean()-2*df'交易額'.std()#高度異常值區(qū)間df'交易額'.mean()+3*df'交易額'.std()df'交易額'.mean()-3*df'交易額'.std()print('查看交易額高于于3138的數(shù)據(jù)'.lju

19、st(20,'=') #異常值print(dfdf.交易額>3138)print('查看交易額高于于4043的數(shù)據(jù)'.ljust(20,'=') #高度異常值print(dfdf.交易額>4043)print('查看交易額低于200或者高于3138的數(shù)據(jù)'.ljust(20,'=')print(df(df.交易額<200) | (df.交易額>4940)print('查看交易額低于200或者高于4043的數(shù)據(jù)'.ljust(20,'=')print(df(df

20、.交易額<200) | (df.交易額>6745) #高度異常#低于200的交易額替換為200df.locdf.交易額<200,'交易額' = 200print('查看交易額低于200或者高于3138的數(shù)據(jù)'.ljust(20,'=')print(df(df.交易額<200) | (df.交易額>3138)#高于4940的交易額替換為均值1330df.locdf.交易額>4940,'交易額' = 1330print('查看交易額低于200或者高于3138的數(shù)據(jù)'.ljust(20

21、,'=')print(df(df.交易額<200) | (df.交易額>3138)#缺失值處理print('數(shù)據(jù)總行數(shù)'.ljust(20,'=')print(len(df)print('丟棄缺失值后的總行數(shù)'.ljust(20,'=')print(len(df.dropna()print('包含缺失值的行'.ljust(20,'=')print(dfdf'交易額'.isnull()print('使用每人交易額均值替換缺失值')dff =

22、deepcopy(df)for i in dffdff.交易額.isnull().index: i,'交易額' = round(dff.姓名=i,'姓名','交易額'.mean()print(110,124,168,:)#重復(fù)值處理print('數(shù)據(jù)總行數(shù)'.ljust(20,'=')print(len(df)print('重復(fù)數(shù)'.ljust(20,'=')print(dfdf.duplicated()#丟棄重復(fù)行df = df.drop_duplicates()print(

23、9;有效數(shù)據(jù)總行數(shù)'.ljust(20,'=')print(len(df)實(shí)驗(yàn)4#重新讀取數(shù)據(jù)列,指定多個(gè)索引df = pd.read_excel(r'超市營業(yè)額2.xlsx', index_col=1,5)#丟棄“工號(hào)”列df.drop('工號(hào)',axis=1,inplace=True)#按索引“柜臺(tái)”排序,查看前12行dff = df.sort_index(level="柜臺(tái)",axis=0)print("按索引“柜臺(tái)”排序,查看前12行" .ljust(20,'=')print

24、(dff:12)#按索引“柜臺(tái)”分組求和print("按照柜臺(tái)分組求和".ljust(20,'=')dfff = by(level='柜臺(tái)').sum()ns = '交易額總和'print(dfff)#數(shù)據(jù)清洗df = pd.read_excel(r'超市營業(yè)額2.xlsx', usecols='姓名','日期','時(shí)段','柜臺(tái)','交易額')#丟棄缺失值和重復(fù)值df.dropna(inplace=True)df.drop_dup

25、licates(inplace=True)#處理異常值df.locdf.交易額<200,'交易額'=200df.locdf.交易額>3000,'交易額'=3000#使用交叉表得到不同員工在不同柜臺(tái)的交易額平均值dff = pd.crosstab(df.姓名,df.柜臺(tái),df.交易額,aggfunc='mean')print('標(biāo)準(zhǔn)差'.ljust(20,'=')print()print('協(xié)方差'.ljust(20,'=')print()#時(shí)間接口import copyd

26、ff=opy(df)#把日期替換為周幾dff'日期'=pd.to_datetime(df'日期').dt.weekday_name#按照周幾分組,查看交易額平均值,四舍五入print("按照周幾分組,查看交易額平均值,四舍五入".ljust(20,'=')dff = by('日期').(round).name='周幾'print(dff)#日期中月份或天數(shù)包含2的交易數(shù)據(jù)第15到25行print('日期中月份或天數(shù)包含2的交易數(shù)據(jù)第15到25行'.ljust(20,'=&

27、#39;)print(dfdf.日期.(-5).ins('2')15:25)實(shí)驗(yàn)51、 Pandas 處理什么樣的數(shù)據(jù)df = pd.DataFrame( "Name": "Braund, Mr. Owen Harris", "Allen, Mr. William Henry", "Bonnell, Miss. Elizabeth", , "Age": 22, 35, 58, "Sex": "male", "male",

28、 "female", )Df#該describe()方法提供了 .csv 文件中數(shù)值數(shù)據(jù)的快速概覽DataFrame。#由于Name和Sex列是文本數(shù)據(jù),因此默認(rèn)情況下該describe()方法不考慮這些。df.describe()2、 讀寫表格數(shù)據(jù)#讀數(shù)據(jù)titanic = pd.read_csv("")titanic#查看前2行(2)#存儲(chǔ)為excel_excel("", sheet_name="passengers", index=False)#讀exceltitanic = pd.read_excel(&q

29、uot;", sheet_name="passengers")3、 選擇 a 的子集DataFrame#篩選年齡大于35的乘客above_35 = titanictitanic"Age" > 35above_35.head()#查看2、3艙的乘客class_23 = titanictitanic"Pclass".isin(2, 3)class_23.head()#切片,第 10 至 25 行和第 3 至 5 列9:25, 2:54、 在padas中創(chuàng)建圖表#直觀地比較 在倫敦和巴黎測量的值。air_.scatter(x

30、="station_london", y="station_paris", alpha=0.5)# 箱線圖。該box 方法適用于空氣質(zhì)量示例數(shù)據(jù):air_.box()#自定義、擴(kuò)展或保存結(jié)果圖。fig, axs = ots(figsize=(12, 4)air_.area(ax=axs)_ylabel("NO$_2$ concentration")ig("no2_")5、 從現(xiàn)有列創(chuàng)建派生的新列#表達(dá)NO2倫敦站的濃度(mg/m)3air_quality"london_mg_per_cubic"

31、 = air_quality"station_london" * 1.882air_()#檢查巴黎與安特衛(wèi)普值的比率并將結(jié)果保存在新列中air_quality"ratio_paris_antwerp" = ( air_quality"station_paris"/air_quality"station_antwerp")air_()6、 計(jì)算匯總統(tǒng)計(jì)量titanic = pd.read_csv(r'')#1.讀入泰坦尼克號(hào)數(shù)據(jù),生成一個(gè)新的dataframe對(duì)象titanic,并顯示其前10行。(1

32、0)#2.檢查泰坦尼克號(hào)這個(gè)數(shù)據(jù)集里有沒有重復(fù)值,并顯示檢查結(jié)果print('重復(fù)行'.ljust(20,'=')print(titaniccated()#3.求一下所有行的行數(shù),刪除年齡為缺失值的乘客記錄,存為一個(gè)新的DataFrame:“age_no_na",并用再次求一下刪除年齡缺失值后的行數(shù)。print('數(shù)據(jù)總行數(shù)'.ljust(20,'=')print(len(titanic)print('年齡缺失值的行'.ljust(20,'=')print(titanictitanic&#

33、39;Age'.isnull()print(len(titanic)age_no_na = titanictitanic'Age'.notna()print(len(age_no_na)#4.查看"Age"這一列的中位數(shù),然后查看“Age”和“Fare”這兩列的詳細(xì)統(tǒng)計(jì)信息。titanic'Age'.median()titanic'Age','Fare'.describe()#5.首先,求按照“Pclass”列分組后每組的平均年齡,然后求按照“Pclass”列分組后各數(shù)值列的均值,并嘗試分析并寫出從中發(fā)

34、現(xiàn)的規(guī)律。titanic'Pclass','Age'.groupby('Pclass').mean()by('Pclass').mean()#泰坦尼克號(hào)乘客的平均年齡titanic"Age".mean()#泰坦尼克號(hào)乘客的平均年齡和票價(jià)titanic"Age", "Fare".median()#男性和女性泰坦尼克號(hào)乘客的平均年齡titanic"Sex", "Age".groupby("Sex").mean()7、

35、 重塑表格的布局#根據(jù)乘客的年齡對(duì)泰坦尼克號(hào)的數(shù)據(jù)進(jìn)行排序。_values(by="Age").head()#我們專注于 NO2數(shù)據(jù)并且只使用每個(gè)位置的前兩個(gè)測量值(即每個(gè)組的頭)。#數(shù)據(jù)的子集將被稱為no2_subsetno2 = air_qualityair_quality"parameter" = "no2"no2_subset = _index().groupby("location").head(2)no2_subset8、 合并多個(gè)表中的數(shù)據(jù)#結(jié)合測量 NO2和PM2.5 , 兩個(gè)結(jié)構(gòu)相似的表,在一個(gè)表

36、中air_quality = pd.concat(air_quality_pm25, air_quality_no2, axis=0)air_()#在此特定示例中,parameter數(shù)據(jù)提供的列確??梢宰R(shí)別每個(gè)原始表。#這并非總是如此。該concat函數(shù)為keys參數(shù)提供了一個(gè)方便的解決方案,#添加了一個(gè)額外的(分層)行索引。例如:air_quality_ = pd.concat(air_quality_pm25, air_quality_no2, keys="PM25", "NO2")air_quality_.head()9、 處理時(shí)間序列數(shù)據(jù)#處理時(shí)間序列數(shù)據(jù)air_quality = pd.read_csv("air_quality_no2_")air_quality = air_e(columns="": "datetime")air_()#使用列datetime中的日期作為日期時(shí)間對(duì)象而不是純文本air_quality"datetime" =pd.to_datetime(air_quality"d

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論