真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

agg函數(shù)python,agg函數(shù)和map函數(shù)的區(qū)別

利用 Python 分析 MovieLens 1M 數(shù)據(jù)集

MovieLens數(shù)據(jù)集是一個(gè)關(guān)于電影評分的數(shù)據(jù)集,里面包含了從IMDB, The Movie DataBase上面得到的用戶對電影的評分信息,詳細(xì)請看下面的介紹。

成都創(chuàng)新互聯(lián)主營安塞網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都app軟件開發(fā)公司,安塞h5小程序制作搭建,安塞網(wǎng)站營銷推廣歡迎安塞等地區(qū)企業(yè)咨詢

文件里面的內(nèi)容是幫助你如何通過網(wǎng)站id在對應(yīng)網(wǎng)站上找到對應(yīng)的電影鏈接的。

movieId, imdbId, tmdbId

表示這部電影在movielens上的id,可以通過鏈接 來得到。

表示這部電影在imdb上的id,可以通過鏈接

來得到。

movieId, title, genres

文件里包含了一部電影的id和標(biāo)題,以及該電影的類別

movieId, title, genres

每部電影的id

電影的標(biāo)題

電影的類別(詳細(xì)分類見readme.txt)

文件里面的內(nèi)容包含了每一個(gè)用戶對于每一部電影的評分。

數(shù)據(jù)排序的順序按照userId,movieId排列的。

文件里面的內(nèi)容包含了每一個(gè)用戶對于每一個(gè)電影的分類

數(shù)據(jù)排序的順序按照userId,movieId排列的。

=======

該數(shù)據(jù)集(ml-latest-small)描述了電影推薦服務(wù)[MovieLens]( )的5星評級和自由文本標(biāo)記活動(dòng)。它包含9742部電影的100836個(gè)評級和3683個(gè)標(biāo)簽應(yīng)用程序。這些數(shù)據(jù)由610位用戶在1996年3月29日到2018年9月24日之間創(chuàng)建。該數(shù)據(jù)集于2018年9月26日生成。

隨機(jī)選擇用戶以包含在內(nèi)。所有選定的用戶評分至少20部電影。不包括人口統(tǒng)計(jì)信息。每個(gè)用戶都由一個(gè)id表示,并且不提供其他信息。

數(shù)據(jù)包含在 links.csv , movies.csv , ratings.csv 和 tags.csv 文件中。有關(guān)所有這些文件的內(nèi)容和用法的更多詳細(xì)信息如下。

這是一個(gè)發(fā)展的數(shù)據(jù)集。因此,它可能會(huì)隨著時(shí)間的推移而發(fā)生變化,并不是共享研究結(jié)果的適當(dāng)數(shù)據(jù)集。

========

要確認(rèn)在出版物中使用數(shù)據(jù)集,請引用以下文件:

========================

數(shù)據(jù)集文件以[逗號分隔值]文件寫入,并帶有單個(gè)標(biāo)題行。包含逗號( , )的列使用雙引號(```)進(jìn)行轉(zhuǎn)義。這些文件編碼為UTF-8。如果電影標(biāo)題或標(biāo)簽值中的重音字符(例如Misérables,Les(1995))顯示不正確,確保讀取數(shù)據(jù)的任何程序(如文本編輯器,終端或腳本)都配置為UTF-8。

MovieLens用戶隨機(jī)選擇包含。他們的ID已經(jīng)匿名化了。用戶ID在 ratings.csv 和 tags.csv 之間是一致的(即,相同的id指的是兩個(gè)文件中的同一用戶)。

數(shù)據(jù)集中僅包含至少具有一個(gè)評級或標(biāo)記的電影。這些電影ID與MovieLens網(wǎng)站上使用的電影ID一致(例如,id 1 對應(yīng)于URL )。電影ID在 ratings.csv , tags.csv , movies.csv 和 links.csv 之間是一致的.

通過[pandas.read_csv]將各表轉(zhuǎn)化為pandas 的DataFrame對象

其中用到的參數(shù)為分隔符sep、頭文件header、列名定義names、解析器引擎engine

這里和書上相比多用了engine參數(shù),engine參數(shù)有C和Python,C引擎速度更快,而Python引擎目前功能更完整。

可用pandas.merge 將所有數(shù)據(jù)都合并到一個(gè)表中。merge有四種連接方式(默認(rèn)為inner),分別為

通過索引器查看第一行數(shù)據(jù),使用基于標(biāo)簽的索引.loc或基于位置的索引.iloc

可通過數(shù)據(jù)透視表( pivot_table )實(shí)現(xiàn)

該操作產(chǎn)生了另一個(gè)DataFrame,輸出內(nèi)容為rating列的數(shù)據(jù),行標(biāo)index為電影名稱,列標(biāo)為性別,aggfunc參數(shù)為函數(shù)或函數(shù)列表(默認(rèn)為numpy.mean),其中“columns”提供了一種額外的方法來分割數(shù)據(jù)。

by參數(shù)的作用是針對特定的列進(jìn)行排序(不能對行使用),ascending的作用是確定排序方式,默認(rèn)為升序

增加一列存放平均得分之差,并對其排序,得到分歧最大且女性觀眾更喜歡的電影

按照電影標(biāo)題將數(shù)據(jù)集分為不同的groups,并且用size( )函數(shù)得到每部電影的個(gè)數(shù)(即每部電影被評論的次數(shù)),按照從大到小排序,取最大的前20部電影列出如下

按照電影名稱分組,用agg函數(shù)通過一個(gè)字典{‘rating’: [np.size, np.mean]}來按照key即rating這一列聚合,查看每一部電影被評論過的次數(shù)和被打的平均分。取出至少被評論過100次的電影按照平均評分從大到小排序,取最大的10部電影。

pandas agg函數(shù)使用方法

DataFrame.agg( func , axis = 0 , * args , ** kwargs? )

func : 函數(shù),函數(shù)名稱,函數(shù)列表,字典{‘行名/列名’,‘函數(shù)名’}

使用指定軸上的一個(gè)或多個(gè)操作進(jìn)行聚合。

agg是一個(gè)聚合函數(shù),聚合函數(shù)操作始終是在軸(默認(rèn)是列軸,也可設(shè)置行軸)上執(zhí)行,不同于?numpy聚合函數(shù) (np.sum() //求和;np.prod() //所有元素相乘;np.mean() //平均值;np.std() //標(biāo)準(zhǔn)差;np.var() //方差;np.median() //中數(shù);np.power() //冪運(yùn)算;np.sqrt() //開方;np.min() //最小值;np.max() //最大值;np.argmin() //最小值的下標(biāo);np.argmax() //最大值的下標(biāo);np.inf //無窮大;np.exp(10) //以e為底的指數(shù);np.log(10) //對數(shù))

下面示例展示agg具體用法:

定義一個(gè)列表值:

在行上聚合這些函數(shù)

col1 ? ? ? col2 ? ? col3 ? ? ? col4

max? 1111.0? 2222.0? 3333.0? 4444.0

min? ? ? 1.0? ? 2.0? ? 3.0? ? 4.0

mean? 308.5? 617.0? 925.5? 1234.0

每列不同的聚合

col1????? col2 ? ? ? col3

max? ? NaN? 2222.0? ? NaN

min? ? 1.0? ? ?? 2.0? ?????? 3 .0

sum? 1234.0? ? NaN? 3702.0

注:當(dāng)某列沒有其他聚合函數(shù)時(shí),則用NaN填充。

好啦,就到這里了,謝謝

pandas中agg函數(shù)和apply函數(shù)的區(qū)別

apply()

和applymap()是DataFrame數(shù)據(jù)類型的函數(shù),map()是Series數(shù)據(jù)類型的函數(shù)。

apply()的操作對象DataFrame的一列或者一行數(shù)據(jù),

applymap()是element-wise的,作用于每個(gè)DataFrame的每個(gè)數(shù)據(jù)。

map()也是element-wise的,對Series中的每個(gè)數(shù)據(jù)調(diào)用一次函數(shù)。

* apply works on a row / column basis of a DataFrame, applymap

works element-wise on a DataFrame, and map works element-wise on a

Series.

數(shù)據(jù)蛙-Python進(jìn)階

這是漫長的一周,本周完成了Python的進(jìn)階模塊,主要是pandas、numpy、matplotlib、seaborn、pyecharts這些模塊的學(xué)習(xí)以及一個(gè)實(shí)際的案例:商品銷售情況分析,之前一直覺得課程難度不夠,但到這一周難度就大大提高了。尤其是案例練習(xí)中的RFM模型和用戶生命周期建立,看懂不難但是自己寫一直出錯(cuò),在不斷出錯(cuò)不斷嘗試中知識得到了積累,另外可視化部分沒有什么練習(xí)題,希望后面可以加上一些這方面的練習(xí),接下來分模塊來總結(jié)一下學(xué)習(xí)的內(nèi)容。

重新設(shè)置索引:df.set_index()

Series格式轉(zhuǎn)換為DataFrame:df.to_frame()

文件讀取:pd.read_csv(filepath, header = 0,skiprows=[1,2])?

使用位置做索引:df.loc[0]????????使用列表做索引:df.loc[[0,1,2]]

使用切片做索引:df.loc[0:4]????????使用bool類型索引:df[df['年齡']30]

loc 是基于索引值的,切片是左閉右閉的

iloc 是基于位置的,切片是左閉右開的

修改列索引:df.rename(columns={'姓名':'name', '年齡':'age'},inplace=True)

替換一個(gè)值:df.replace({'name':{'小明':'xiaoming'}},inplace=True)

對數(shù)據(jù)進(jìn)行排序:df.sort_values('age')

累加求和:df.cumsum(0)

刪除列:del df['player']?????????刪除行:df.drop(labels=0)?labels 是行列的名字

數(shù)據(jù)拼接:pd.concat([left,right],axis=1)

# 指定列進(jìn)行關(guān)聯(lián),默認(rèn)是 inner join ????result = pd.merge(left,right,on='key')

#多個(gè)關(guān)聯(lián)條件:result = pd.merge(left, right, on=['key1', 'key2'])

#左連接:result = pd.merge(left, right, how='left', on=['key1', 'key2'])

# 列名不一樣的關(guān)聯(lián):pd.merge(left,right,left_on = ['key1','key2'],right_on = ['key3','key4'])

#單個(gè)分組:groups = df.groupby('district')

# 作用多個(gè)聚合函數(shù):groups.agg([np.mean,np.sum,np.std])

# 針對具體列聚合 groups.age.agg([np.mean,np.sum,np.std])

# 不同列不同聚合函數(shù) groups.agg({"age":np.mean,"novip_buy_times":np.sum})

分組后該列值求和顯示:groups['vip_buy_times'].transform('sum')

通常用于求占比:transform(lambda x: x /sum(x))

# 填充指定值:np.full([3,4],1)

# 起始為10,5為步長,30為結(jié)尾取不到:np.arange(10, 30, 5)

#隨機(jī)矩陣:np.random.random((2,3))

# 平均劃分:np.linspace( 0, 2*pi, 100 )

# 類型及轉(zhuǎn)換:vector.astype('float')

# 多維變一維:matrix.ravel()

# 矩陣的擴(kuò)展:a = np.arange(0, 40, 10)? ? b = np.tile(a, (3, 5))? ? # 行變成3倍,列變成5倍

# 水平拼接:np.hstack((a,b))? 豎直拼接:np.vstack((a,b))

# 豎直分割:np.hsplit(a,3)? ? #水平分割:np.vsplit(a,3)

8. Select the data in rows [3, 4, 8] and in columns ['animal', 'age'].

A:df.loc[df.index[[3,4,8]],['animal','age']]

行采用位置,列采用普通索引,這里利用index函數(shù)將位置變化為具體的普通索引,再利用loc函數(shù)

19. The 'priority' column contains the values 'yes' and 'no'. Replace this column with a column of boolean values: 'yes' should be True and 'no' should be False

A1:df['priority'].replace(['yes','no'],[True,False],inplace=True) 用replace函數(shù)替換

A2:df['priority'] = df['priority'].map({'yes': True, 'no': False}) 用map函數(shù)替換

最大最小值的索引:df.idxmax、df.idxmin

找出最大最小的前N個(gè)數(shù):nlargest()和nsmallest()?

將原表分組 并設(shè)置分段區(qū)間 pd.cut(df['A'], np.arange(0, 101, 10))

resample函數(shù) 日期重采樣:s.resample('M').mean()

TimeGrouper 重組:s.groupby(pd.TimeGrouper('4M')).idxmax()

split 分割函數(shù):temp = df['From_To'].str.split('_', expand=True) True為DataFrame

兩個(gè)DataFrame拼接用join:df = df.join(temp)

import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif']=['SimHei'] #用來正常顯示中文標(biāo)簽

plt.rcParams['axes.unicode_minus']=False #用來正常顯示負(fù)號

%matplotlib inline 直接顯示

折線圖:plt.plot(x,y,color = 'r')

柱狀圖:plt.bar(x,y)? plt.barh(x,y) 多個(gè)bar x設(shè)置不同 堆積圖 bottom設(shè)置不同

散點(diǎn)圖:plt.scatter(x, y, c=colors, alpha=0.5, s = area)

直方圖:plt.hist(a,bins= 20) bin代表分隔的最小單位

plt.legend() 顯示圖例

for a,b in zip(X+W[i],data[i]):

plt.text(a,b,"%.0f"% b,ha="center",va= "bottom") 添加數(shù)據(jù)標(biāo)簽

plt.annotate('注釋文本',xy=(1, np.sin(1)),xytext=(2, 0.5), fontsize=16,arrowprops=dict(arrowstyle="-")) 添加注釋文本

plt.xlabel("Group") x軸標(biāo)題

plt.ylabel("Num") y軸標(biāo)題

fig, axes = plt.subplots(nrows=2, ncols=2,facecolor='darkslategray')? 繪制多個(gè)圖形

axes[0,0] axes[0,1] axes[1,0] axes[1,1]

pylab.rcParams['figure.figsize'] = (10, 6) # 調(diào)整圖片大小

動(dòng)態(tài)展示圖表

from pyecharts.charts import Bar

from pyecharts import options as opts

** pyecharts 繪圖的五個(gè)步驟:**

創(chuàng)建圖形對象:bar = Bar()

添加繪圖數(shù)據(jù):bar.add_xaxis(["襯衫", "毛衣", "領(lǐng)帶", "褲子", "風(fēng)衣", "高跟鞋", "襪子"])

? ? ???????????????? bar.add_yaxis("商家A", [114, 55, 27, 101, 125, 27, 105])

? ? ? ? ? ? ? ? ? ? ?bar.add_yaxis("商家B", [57, 134, 137, 129, 145, 60, 49])

配置系列參數(shù):對標(biāo)簽、線型等的一些設(shè)置

配置全局參數(shù):bar.set_global_opts(title_opts=opts.TitleOpts(title="銷售情況"))

渲染圖片:生成本地 HTML 文件 bar.render("mycharts.html")? bar.render()

notebook 渲染:bar.render_notebook()

bar = (Bar()

.add_xaxis(["襯衫", "毛衣", "領(lǐng)帶", "褲子", "風(fēng)衣", "高跟鞋", "襪子"])

.add_yaxis("商家A", [114, 55, 27, 101, 125, 27, 105])

.add_yaxis("商家B", [57, 134, 137, 129, 145, 60, 49])

.set_global_opts(title_opts=opts.TitleOpts(title="某商場銷售情況"))

)

bar.render_notebook()

柱狀圖:Bar()

條形圖:bar.reversal_axis() #翻轉(zhuǎn)XY軸,將柱狀圖轉(zhuǎn)換為條形圖

折線圖:from pyecharts.charts import Line? line=Line()

餅圖:from pyecharts.charts import Page, Pie????Pie()?

轉(zhuǎn)換日期類型:df['order_dt']=pd. to_datetime (df.order_dt,format="%Y%m%d")

將日期轉(zhuǎn)換為月為單位:df['month']=df.order_dt.values. astype('datetime64[M]') 所有日期顯示為當(dāng)月第一天

去除日期單元值:order_diff/ np.timedelta64(1,'D')

過濾部分極值:grouped_user.sum() .query('order_products100') .order_amount

數(shù)據(jù)透視表:rfm=df.pivot_table( index ='user_id', values =['order_products','order_amount'], aggfunc ={'order_amount':'sum','order_products':'sum'})

map() 方法是pandas.series.map()方法, 對DF中的元素級別的操作, 可以對df的某列或某多列

applymap(func) 也是DF的屬性, 對整個(gè)DF所有元素應(yīng)用func操作

purchase_r=pivoted_counts.applymap(lambda x: 1 if x1 else np.NaN if x==0 else 0)

apply(func) 是DF的屬性, 對DF中的行數(shù)據(jù)或列數(shù)據(jù)應(yīng)用func操作,也可用于Series

apply(lambda x:x.cumsum()/x.sum())? ? 累計(jì)占比

apply(lambda x:x/x.sum(),axis=0)? ? ?每一列中每行數(shù)據(jù)占比

下周開始進(jìn)入數(shù)據(jù)分析思維的課程,很期待后面的課程以及項(xiàng)目,加油!

Python分組

前言分組原理

核心:

1.不論分組鍵是數(shù)組、列表、字典、Series、函數(shù),只要其與待分組變量的軸長度一致都可以傳入groupby進(jìn)行分組。

2.默認(rèn)axis=0按行分組,可指定axis=1對列分組。

對數(shù)據(jù)進(jìn)行分組操作的過程可以概括為:split-apply-combine三步:

1.按照鍵值(key)或者分組變量將數(shù)據(jù)分組。

2.對于每組應(yīng)用我們的函數(shù),這一步非常靈活,可以是python自帶函數(shù),可以是我們自己編寫的函數(shù)。

3.將函數(shù)計(jì)算后的結(jié)果聚合。

1 分組模式及其對象

1.1 分組的一般模式

三個(gè)要素:分組依據(jù)、數(shù)據(jù)來源、操作及其返回結(jié)果

df.groupby(分組依據(jù))[數(shù)據(jù)來源].使用操作

1.2 分組依據(jù)的本質(zhì)

1.3Groupby 對象

通過 ngroups 屬性,可以訪問分為了多少組:

通過 groups 屬性,可以返回從 組名映射到 組索引列表的字典:

當(dāng) size 作為 DataFrame 的屬性時(shí),返回的是表長乘以表寬的大小,但在 groupby 對象上表示統(tǒng)計(jì)每個(gè)組的 元素個(gè)數(shù):

通過 get_group 方法可以直接獲取所在組對應(yīng)的行,此時(shí)必須知道組的具體名字:

1.4 分組的三大操作

分組的三大操作:聚合、變換和過濾

2.聚合函數(shù)

2.1內(nèi)置聚合函數(shù)

包括如下函數(shù): max/min/mean/median/count/all/any/idxmax/idxmin/mad/nunique/skew/quantile/sum/std/var/sem/size/prod

2.2agg 方法

【a】使用多個(gè)函數(shù)

當(dāng)使用多個(gè)聚合函數(shù)時(shí),需要用列表的形式把內(nèi)置聚合函數(shù)的對應(yīng)的字符串傳入,先前提到的所有字符串都是合法的。

【b】對特定的列使用特定的聚合函數(shù)

對于方法和列的特殊對應(yīng),可以通過構(gòu)造字典傳入 agg 中實(shí)現(xiàn),其中字典以列名為鍵,以聚合字符串或字符串列表為值。

【c】使用自定義函數(shù)

在 agg 中可以使用具體的自定義函數(shù),需要注意傳入函數(shù)的參數(shù)是之前數(shù)據(jù)源中的列,逐列進(jìn)行計(jì)算

【d】聚合結(jié)果重命名 如果想要對結(jié)果進(jìn)行重命名,只需要將上述函數(shù)的位置改寫成元組,元組的第一個(gè)元素為新的名字,第二個(gè)位置為原來的函數(shù),包括聚合字符串和自定義函數(shù)

3 變換和過濾

3.1 變換函數(shù)與 transform 方法

變 換 函 數(shù) 的 返 回 值 為 同 長 度 的 序 列, 最 常 用 的 內(nèi) 置 變 換 函 數(shù) 是 累 計(jì) 函 數(shù):cum- count/cumsum/cumprod/cummax/cummin ,它們的使用方式和聚合函數(shù)類似,只不過完成的是組內(nèi) 累計(jì)操作。

3.2 組索引與過濾

過濾在分組中是對于組的過濾,而索引是對于行的過濾

組過濾作為行過濾的推廣,指的是如果對一個(gè)組的全體所在行進(jìn)行統(tǒng)計(jì)的結(jié)果返回 True 則會(huì)被保留,F(xiàn)alse 則該組會(huì)被過濾,最后把所有未被過濾的組其對應(yīng)的所在行拼接起來作為 DataFrame 返回。

在 groupby 對象中,定義了 filter 方法進(jìn)行組的篩選,其中自定義函數(shù)的輸入?yún)?shù)為數(shù)據(jù)源構(gòu)成的 DataFrame 本身,在之前例子中定義的 groupby 對象中,傳入的就是 df[['Height', 'Weight']] ,因此所有表方法和屬性 都可以在自定義函數(shù)中相應(yīng)地使用,同時(shí)只需保證自定義函數(shù)的返回為布爾值即可。

4 跨列分組

4.1 apply 的引入

4.2 apply 的使用

在設(shè)計(jì)上,apply 的自定義函數(shù)傳入?yún)?shù)與 filter 完全一致,只不過后者只允許返回布爾值

【a】標(biāo)量情況:結(jié)果得到的是 Series ,索引與 agg 的結(jié)果一致

【b】Series 情況:得到的是 DataFrame ,行索引與標(biāo)量情況一致,列索引為 Series 的索引

【c】DataFrame 情況:得到的是 DataFrame ,行索引最內(nèi)層在每個(gè)組原先 agg 的結(jié)果索引上,再加一層返 回的 DataFrame 行索引,同時(shí)分組結(jié)果 DataFrame 的列索引和返回的 DataFrame 列索引一致


網(wǎng)頁題目:agg函數(shù)python,agg函數(shù)和map函數(shù)的區(qū)別
鏈接地址:http://weahome.cn/article/dsipcdj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部