当前位置: 首页 > news >正文

胶州网站建设效果wordpress 多站 列表

胶州网站建设效果,wordpress 多站 列表,企业推广平台,莲花网站建设题目来源#xff1a;和鲸社区的题目推荐#xff1a; 刷题源链接#xff08;用于直接fork运行 https://www.heywhale.com/mw/project/6527b5560259478972ea87ed 刷题准备 请依次运行这部分的代码#xff08;下方4个代码块#xff09;#xff0c;完成刷题前的数据准备 …题目来源和鲸社区的题目推荐 刷题源链接用于直接fork运行 https://www.heywhale.com/mw/project/6527b5560259478972ea87ed 刷题准备 请依次运行这部分的代码下方4个代码块完成刷题前的数据准备 数据准备 链接https://pan.baidu.com/s/1F7iyHys1edRaOTR0LzxiYQ?pwdm1ve 提取码m1ve –来自百度网盘超级会员V4的分享 导包及读取数据 import pandas as pd# 如遇到OSerror可以稍等十几秒等待数据加载完成即可读取df pd.read_csv(./data/order.csv) df.head()订单日期年份订单数量产品ID客户ID交易类型销售区域ID销售大区国家区域产品类别产品型号名称产品名称产品成本利润单价销售金额02016/1/12016152814432BA14西南区中国大中华区配件Rawlings Heart of THE Hide-11.5棒球手套500.01199.01699.01699.012016/1/22016152818741BA14西南区中国大中华区配件Rawlings Heart of THE Hide-11.5棒球手套500.01199.01699.01699.022016/1/22016152827988BA14西南区中国大中华区配件Rawlings Heart of THE Hide-11.5棒球手套500.01199.01699.01699.032016/1/52016152825710BA14西南区中国大中华区配件Rawlings Heart of THE Hide-11.5棒球手套500.01199.01699.01699.042016/1/62016152814999BA14西南区中国大中华区配件Rawlings Heart of THE Hide-11.5棒球手套500.01199.01699.01699.0 数据预处理 # 删除重复值 # df.drop_duplicates(inplaceTrue) df.drop_duplicates(inplace True)# 查看数据信息 df.info()class pandas.core.frame.DataFrame Int64Index: 60391 entries, 0 to 60397 Data columns (total 17 columns):# Column Non-Null Count Dtype --- ------ -------------- ----- 0 订单日期 60391 non-null object 1 年份 60391 non-null int64 2 订单数量 60391 non-null int64 3 产品ID 60391 non-null int64 4 客户ID 60391 non-null object 5 交易类型 60391 non-null int64 6 销售区域ID 60391 non-null int64 7 销售大区 60391 non-null object 8 国家 60391 non-null object 9 区域 60391 non-null object 10 产品类别 60391 non-null object 11 产品型号名称 60391 non-null object 12 产品名称 60391 non-null object 13 产品成本 60391 non-null float6414 利润 60391 non-null float6415 单价 60391 non-null float6416 销售金额 60391 non-null float64 dtypes: float64(4), int64(5), object(8) memory usage: 8.3 MB数据集中无缺失值因此不需要进行缺失值处理 开始刷题 任务1 主管想了解 2013-2016 年各年份的总销售额情况需要你统计各年份的销售金额并依据年份降序输出各年的总销售额。 # 你的代码# 观察年份 df[年份].unique() # array([2016, 2015, 2014, 2013]) # 直接根据年份根据销售金额统计总销售额 gmv_by_year df.groupby(by [年份])[销售金额].sum().reset_index().sort_values(by [年份],ascending False) gmv_by_year年份销售金额3201622390338.422201516063868.3612014182951.8502013106308.27 任务2 主管想了解在 2013-2016 年各月份的订单数量都有多少 需要你新增一列数据记录每笔订单的购买年份及月份信息其值需从订单日期中拆分出来之后再统计各月份的订单数量并输出订单数量最多的月份同时并分析订单数量的时间变化趋势。 思考订单数量是否可以直接使用sum()方法直接统计 回答订单数量只有1意味着是每一单一行数据sum()会漏掉空值如果存在的空值的话单纯计数使用size()会更好一些。 df[订单数量].unique()array([1], dtypeint64)# 你的代码# 抽取月份信息 df[月份] pd.to_datetime(df[订单日期]).dt.strftime(%m) # 分年分月汇总数据 gmv_by_month df.groupby(by [年份,月份])[销售金额].size().reset_index().sort_values(by [年份],ascending False) gmv_by_month.columns [年份,月份,订单数量] gmv_by_month.head()年份月份订单数量362016072209352016065544342016055515332016045088322016034706 # 使用idxmax()找到订单数量最多的行 max_order_index gmv_by_month[订单数量].idxmax() # 根据上一步找到的索引使用loc定位这一行 max_order_row gmv_by_month.loc[max_order_index] # 输出结果 print(f订单数量最多的年月为{max_order_row[年份]}-{max_order_row[月份]}订单数量为{max_order_row[订单数量]})订单数量最多的年月为2016-06订单数量为5544​ 任务3* 主管想了解 2016 年各个国家的订单数量、销售额及利润详情 需要你统计在 2016年间各国的订单数量、销售额及利润并依据年份输出结果。 # 你的代码 # 指定年份分国家的订单数量汇总销售额求和利润求和 country_2016 df[df[年份]2016].groupby(by [国家])[订单数量,销售金额,利润].sum().reset_index() country_2016C:\Users\chengyuanting\AppData\Local\Temp\ipykernel_14224\3368580504.py:3: FutureWarning: Indexing with multiple keys (implicitly converted to a tuple of keys) will be deprecated, use a list instead.country_2016 df[df[年份]2016].groupby(by [国家])[订单数量,销售金额,利润].sum().reset_index()国家订单数量销售金额利润0中国116318127428.303525236.481中国台湾35792361700.11969703.642中国澳门67574361739.641783523.753中国香港30611976666.78803100.024新加坡29752083231.41838558.785韩国42603479572.181538321.46 任务4* 主管想了解在 2013-2016 年间哪些产品所带来的利润最高 需要你统计不同产品(产品名称)的订单数量并根据该产品所属类别(产品类别)分别输出不同类别产品订单数量最多的前 3 种产品。 # 你的代码 # 根据产品类别产品名称分组汇总订单数量。根据订单数量降序取前三 goods_grouped df.groupby(by [产品类别,产品名称])[订单数量].sum().reset_index() goods_grouped产品类别产品名称订单数量0服装击打手套14301服装帽子21902服装捕手护具5623服装棒球服33324服装皮带10195服装袜子5686球垒球21677球硬式棒球80688球软式棒球49709配件三角网架212110配件垒垫90811配件头盔643912配件打击T座24913配件棒球手套1732714配件球棒与球棒袋798015配件球网32816配件装备包733 # 接着获取每个产品类别的前三订单数量的产品# 已产品类别继续分组直接在分组的结果上应用nlargest() goods_top3 goods_grouped.groupby(by [产品类别]).apply(lambda x:x.nlargest(3,订单数量)).reset_index(drop True) goods_top3产品类别产品名称订单数量0服装棒球服33321服装帽子21902服装击打手套14303球硬式棒球80684球软式棒球49705球垒球21676配件棒球手套173277配件球棒与球棒袋79808配件头盔6439 说明 1apply函数中的x在此处代表dataframe的每个分组 2nlargest()使用方法举例 df.nlargest(3, 订单数量) df[订单数量].nlargest(3) 任务5 方法一直接写逻辑重点理解apply的用法 主管想了解在面向中国的订单中各月份的订单数量以及利润是怎样的情况 需要你统计面向中国的各月份订单数量及利润并同时输出这个订单数量和利润的同比增长及环比增长。 # 你的代码 # 筛选中国的数据按月汇总订单数量及利润 china_describe df[df[国家]中国].groupby(by [年份,月份])[订单数量,利润].sum().reset_index() china_describe.head() # 观察数据C:\Users\chengyuanting\AppData\Local\Temp\ipykernel_14224\3318811943.py:3: FutureWarning: Indexing with multiple keys (implicitly converted to a tuple of keys) will be deprecated, use a list instead.china_describe df[df[国家]中国].groupby(by [年份,月份])[订单数量,利润].sum().reset_index()年份月份订单数量利润0201307411710.01201308431890.02201309502160.03201310562380.04201311602640.0 china_describe年份月份订单数量利润0201307411710.001201308431890.002201309502160.003201310562380.004201311602640.005201312913930.006201401672810.007201402341300.008201403733170.009201404763220.0010201405933850.0011201406823580.0012201407961857.0013201408981942.001420140950976.001520141048927.0016201411581200.0017201412861800.0018201501611220.0019201502621215.0020201503511050.0021201504721418.0022201505932017.0023201506861802.002420150744090558.85252015081369461863.99262015091309396373.18272015101504509619.29282015111543528140.77292015121921568262.25302016011580486949.53312016021653506787.84322016031686491470.15332016041800541664.95342016052104598067.76352016061988569919.5836201607820330376.67 df[:1][订单数量]0 1 Name: 订单数量, dtype: int64df[:1][订单数量].valuesarray([1], dtypeint64)df[:1][订单数量].values[0]1# 计算上述两个维度的同比增长以及环比增长 def calculate_yoy(row, column_name):它需要当前行和列名称作为参数并查找去年同月的数据。如果找到了去年的数据它将计算增长率否则返回 None。last_year china_describe[(china_describe[年份] row[年份] - 1) (china_describe[月份] row[月份])]if last_year.empty:return Nonereturn (row[column_name] - last_year[column_name].values[0]) / last_year[column_name].values[0] * 100def calculate_mom(row, column_name):last_month_year row[年份]if row[月份] 01:last_month_month 12last_month_year - 1else:last_month_month str(int(row[月份]) - 1).zfill(2) # zfill() 方法返回指定长度的字符串原字符串右对齐前面填充0。last_month china_describe[(china_describe[年份] last_month_year) (china_describe[月份] last_month_month)]if last_month.empty:return Nonereturn (row[column_name] - last_month[column_name].values[0]) / last_month[column_name].values[0] * 100china_describe[订单数量同比] china_describe.apply(lambda row: calculate_yoy(row, 订单数量), axis1) china_describe[订单数量环比] china_describe.apply(lambda row: calculate_mom(row, 订单数量), axis1) china_describe[利润同比] china_describe.apply(lambda row: calculate_yoy(row, 利润), axis1) china_describe[利润环比] china_describe.apply(lambda row: calculate_mom(row, 利润), axis1) china_describe年份月份订单数量利润订单数量同比订单数量环比利润同比利润环比0201307411710.00NaNNaNNaNNaN1201308431890.00NaN4.878049NaN10.5263162201309502160.00NaN16.279070NaN14.2857143201310562380.00NaN12.000000NaN10.1851854201311602640.00NaN7.142857NaN10.9243705201312913930.00NaN51.666667NaN48.8636366201401672810.00NaN-26.373626NaN-28.4987287201402341300.00NaN-49.253731NaN-53.7366558201403733170.00NaN114.705882NaN143.8461549201404763220.00NaN4.109589NaN1.57728710201405933850.00NaN22.368421NaN19.56521711201406823580.00NaN-11.827957NaN-7.01298712201407961857.00134.14634117.0731718.596491-48.12849213201408981942.00127.9069772.0833332.7513234.5772751420140950976.000.000000-48.979592-54.814815-49.7425331520141048927.00-14.285714-4.000000-61.050420-5.02049216201411581200.00-3.33333320.833333-54.54545529.44983817201412861800.00-5.49450548.275862-54.19847350.00000018201501611220.00-8.955224-29.069767-56.583630-32.22222219201502621215.0082.3529411.639344-6.538462-0.40983620201503511050.00-30.136986-17.741935-66.876972-13.58024721201504721418.00-5.26315841.176471-55.96273335.04761922201505932017.000.00000029.166667-47.61039042.24259523201506861802.004.878049-7.526882-49.664804-10.6593952420150744090558.85358.333333411.6279074776.6208944925.463374252015081369461863.991296.938776211.13636423682.903708410.015299262015091309396373.182518.000000-4.38276140512.006148-14.179674272015101504509619.293033.33333314.89686854875.11219028.570578282015111543528140.772560.3448282.59308543911.7308333.634376292015121921568262.252133.72093024.49773231470.1250007.596740302016011580486949.532490.163934-17.75117139813.895902-14.309013312016021653506787.842566.1290324.62025341610.9333334.073997322016031686491470.153205.8823531.99637046706.680952-3.022505332016041800541664.952400.0000006.76156638099.22073310.213194342016052104598067.762162.36559116.88888929551.35151210.412859352016061988569919.582211.627907-5.51330831527.057714-4.70652036201607820330376.6786.363636-58.752515264.819860-42.031002 提问为什么上述计算中取值要使用.values[0]取值呢 回答# 因为使用apply对每一行数据进行计算得到的去年数据也是一行不能使用df[column_name][index]这种方式取值。 索引过程示例 df[:1][订单数量] output: 0 1 Name: 订单数量, dtype: int64 df[:1][订单数量].values # output : array([1]) df[:1][订单数量].values[0] # output : 1 ;正确的取值方式 提问apply函数应用在DataFrame的行或列中也可以应用到单独一个Series的每个元素中我如何判断此处是针对行还是列还是行的某个值 回答当您在 pandas 中使用 apply 函数是否应用于行还是列主要取决于参数 axis 的值。 axis0 或者不指定 axis函数会应用于每一列即针对列进行操作。axis1函数会应用于每一行即针对行进行操作。 在我们之前的代码中 df[订单数量同比] df.apply(lambda row: calculate_yoy_corrected(row, 订单数量), axis1) 我们指定了 axis1这意味着 apply 函数将 lambda 函数应用于数据帧的每一行。lambda 函数会将整行数据即当前行的所有列值作为参数传递给 calculate_yoy_corrected 函数这就是为什么我们可以在 calculate_yoy_corrected 函数内部访问行的 ‘年份’ 和 ‘月份’ 列的值。 如果您将 apply 函数应用于一个 Series那么该函数会应用于 Series 的每个元素。例如 df[年份].apply(lambda x: x 1) 上述代码会将每个 ‘年份’ 值加 1。 总之要确定 apply 是应用于行还是列您可以查看 axis 参数的值。如果 apply 是直接应用于一个 Series那么它会应用于该 Series 的每个元素。 提问2lambda函数在处理数据的时候一行一行读取但是计算是根据整体的数据计算的吗因为涉及环比同比计算不可能只根据一行数据计算 您是对的。当 apply 函数与 lambda 函数一起使用并设置为 axis1 时lambda 函数确实会逐行处理数据。但是当我们在 lambda 函数内部调用其他函数如 calculate_yoy 或 calculate_mom时那些函数可以访问并使用整个数据框 df 来进行计算。 例如在我们的 calculate_mom 函数中 last_month df[(df[年份] last_month_year) (df[月份] last_month_month)] 这里我们使用整个 df 数据框来查找上个月的数据尽管 apply 函数正在处理当前行。 因此虽然 lambda 函数逐行处理数据但它内部调用的函数可以使用整个数据框进行计算。这正是我们能够计算环比和同比的原因因为这些计算需要查看其他月份的数据。 任务5 方法二简便方法推荐 需要注意的是时间需要升序排列这样计算出来的才是正确的 # 筛选中国的数据按月汇总订单数量及利润 china_describe2 df[df[国家]中国].groupby(by [年份,月份])[订单数量,利润].sum().reset_index() china_describe2.head() # 观察数据C:\Users\chengyuanting\AppData\Local\Temp\ipykernel_14224\3967723160.py:2: FutureWarning: Indexing with multiple keys (implicitly converted to a tuple of keys) will be deprecated, use a list instead.china_describe2 df[df[国家]中国].groupby(by [年份,月份])[订单数量,利润].sum().reset_index()年份月份订单数量利润0201307411710.01201308431890.02201309502160.03201310562380.04201311602640.0 china_describe2[订单数量环比] china_describe2[订单数量].pct_change().fillna(0)*100 china_describe2[利润环比] china_describe2[利润].pct_change().fillna(0)*100 china_describe2[订单数量同比] china_describe2.groupby(by [月份])[订单数量].pct_change().fillna(0)*100 china_describe2[利润同比] china_describe2.groupby(by [月份])[利润].pct_change().fillna(0)*100 china_describe2年份月份订单数量利润订单数量环比利润环比订单数量同比利润同比0201307411710.000.0000000.0000000.0000000.0000001201308431890.004.87804910.5263160.0000000.0000002201309502160.0016.27907014.2857140.0000000.0000003201310562380.0012.00000010.1851850.0000000.0000004201311602640.007.14285710.9243700.0000000.0000005201312913930.0051.66666748.8636360.0000000.0000006201401672810.00-26.373626-28.4987280.0000000.0000007201402341300.00-49.253731-53.7366550.0000000.0000008201403733170.00114.705882143.8461540.0000000.0000009201404763220.004.1095891.5772870.0000000.00000010201405933850.0022.36842119.5652170.0000000.00000011201406823580.00-11.827957-7.0129870.0000000.00000012201407961857.0017.073171-48.128492134.1463418.59649113201408981942.002.0833334.577275127.9069772.7513231420140950976.00-48.979592-49.7425330.000000-54.8148151520141048927.00-4.000000-5.020492-14.285714-61.05042016201411581200.0020.83333329.449838-3.333333-54.54545517201412861800.0048.27586250.000000-5.494505-54.19847318201501611220.00-29.069767-32.222222-8.955224-56.58363019201502621215.001.639344-0.40983682.352941-6.53846220201503511050.00-17.741935-13.580247-30.136986-66.87697221201504721418.0041.17647135.047619-5.263158-55.96273322201505932017.0029.16666742.2425950.000000-47.61039023201506861802.00-7.526882-10.6593954.878049-49.6648042420150744090558.85411.6279074925.463374358.3333334776.620894252015081369461863.99211.136364410.0152991296.93877623682.903708262015091309396373.18-4.382761-14.1796742518.00000040512.006148272015101504509619.2914.89686828.5705783033.33333354875.112190282015111543528140.772.5930853.6343762560.34482843911.730833292015121921568262.2524.4977327.5967402133.72093031470.125000302016011580486949.53-17.751171-14.3090132490.16393439813.895902312016021653506787.844.6202534.0739972566.12903241610.933333322016031686491470.151.996370-3.0225053205.88235346706.680952332016041800541664.956.76156610.2131942400.00000038099.220733342016052104598067.7616.88888910.4128592162.36559129551.351512352016061988569919.58-5.513308-4.7065202211.62790731527.05771436201607820330376.67-58.752515-42.03100286.363636264.819860 提问计算同比使用了groupby这样经过分组计算的数据和直接计算的数据放一起不会造成对应不上的麻烦吗 回答伟大的观察! 当您将’ groupby() ‘与’ pct_change() ‘等操作结合使用时结果数据仍然保留其原始顺序和索引并且该操作应用于每个组。因此即使在分组并应用’ pct_change() 方法之后数据的顺序仍然保持不变并且结果与原始数据正确地对齐。 在前面的代码中: df[订单数量_YoY ] df.groupby(“月份”)(“订单数量的].pct_change () .fillna (0) * 100 事情是这样的: 数据按“月”进行分组。在每个月份组中’ pct_change() 方法计算同比变化。结果保留了原始DataFrame的顺序和索引。计算同比变化分配给新列”订单数量_YoY”。 因此数据中没有不匹配或不对齐。计算值与DataFrame中的原始行正确对齐。 提问如果分组后跟着聚合函数比如sum也会不变吗或者说.fillna函数很重要即使使用了聚合函数因为会被填充数字也不会担心顺序对不上的情况 回答你的问题涉及到熊猫行为的几个细微差别。让我们来分析一下: ** ’ groupby() ‘后面跟着转换(如’ pct_change() )* 当您使用’ groupby() ‘和’ pct_change() 等转换函数时生成的Series或DataFrame将保持与原始序列相同的形状和索引。这确保了转换后的数据与原始数据保持一致。 ** ’ groupby() ‘后面跟着聚合(如’ sum() )* 当您使用’ groupby() ‘后面跟着’ sum() ‘这样的聚合函数时生成的Series或DataFrame通常更小(除非使用’ as_indexFalse )因为它将数据聚合到组中。这意味着如果没有进一步处理结果数据可能不会直接与原始数据对齐。 ** ’ .fillna() 的作用:** ’ .fillna() ‘方法用于处理缺失值(nan)。在前面的代码中它的主要作用是在计算’ pct_change() 时处理由每组中的第一个值产生的nan。它不会直接影响数据的形状或对齐方式。然而重要的是要使用它来确保丢失的值得到适当的处理。 总结: -对于像’ pct_change() ‘这样的转换数据在’ groupby() ‘之后保持其形状确保对齐。 -对于像’ sum() 这样的聚合数据可能不会保持其原始形状从而导致潜在的不对齐。 ’ .fillna() 方法对于处理nan是必不可少的但它本身并不影响数据对齐。 如果您不确定如何转换数据那么在每一步检查结果或使用较小的数据子集来测试和理解转换总是一个很好的做法。 任务5 方法三方法二的进一步优化推荐方法 计算同比增长率和环比增长率,使用pct_change这个函数可以用来计算百分比变化率当periods1计算的是环比增长率当periods12计算的是同比增长率 # 筛选中国的数据按月汇总订单数量及利润 china_describe3 df[df[国家]中国].groupby(by [年份,月份])[订单数量,利润].sum().reset_index() china_describe3.head() # 观察数据 # 计算同环比 china_describe3[订单数量环比] china_describe3[订单数量].pct_change()*100 china_describe3[利润环比] china_describe3[利润].pct_change()*100 china_describe3[订单数量同比] china_describe3[订单数量].pct_change(periods 12)*100 china_describe3[利润同比] china_describe3[利润].pct_change(periods 12)*100 china_describe3C:\Users\chengyuanting\AppData\Local\Temp\ipykernel_14224\2071208107.py:2: FutureWarning: Indexing with multiple keys (implicitly converted to a tuple of keys) will be deprecated, use a list instead.china_describe3 df[df[国家]中国].groupby(by [年份,月份])[订单数量,利润].sum().reset_index()年份月份订单数量利润订单数量环比利润环比订单数量同比利润同比0201307411710.00NaNNaNNaNNaN1201308431890.004.87804910.526316NaNNaN2201309502160.0016.27907014.285714NaNNaN3201310562380.0012.00000010.185185NaNNaN4201311602640.007.14285710.924370NaNNaN5201312913930.0051.66666748.863636NaNNaN6201401672810.00-26.373626-28.498728NaNNaN7201402341300.00-49.253731-53.736655NaNNaN8201403733170.00114.705882143.846154NaNNaN9201404763220.004.1095891.577287NaNNaN10201405933850.0022.36842119.565217NaNNaN11201406823580.00-11.827957-7.012987NaNNaN12201407961857.0017.073171-48.128492134.1463418.59649113201408981942.002.0833334.577275127.9069772.7513231420140950976.00-48.979592-49.7425330.000000-54.8148151520141048927.00-4.000000-5.020492-14.285714-61.05042016201411581200.0020.83333329.449838-3.333333-54.54545517201412861800.0048.27586250.000000-5.494505-54.19847318201501611220.00-29.069767-32.222222-8.955224-56.58363019201502621215.001.639344-0.40983682.352941-6.53846220201503511050.00-17.741935-13.580247-30.136986-66.87697221201504721418.0041.17647135.047619-5.263158-55.96273322201505932017.0029.16666742.2425950.000000-47.61039023201506861802.00-7.526882-10.6593954.878049-49.6648042420150744090558.85411.6279074925.463374358.3333334776.620894252015081369461863.99211.136364410.0152991296.93877623682.903708262015091309396373.18-4.382761-14.1796742518.00000040512.006148272015101504509619.2914.89686828.5705783033.33333354875.112190282015111543528140.772.5930853.6343762560.34482843911.730833292015121921568262.2524.4977327.5967402133.72093031470.125000302016011580486949.53-17.751171-14.3090132490.16393439813.895902312016021653506787.844.6202534.0739972566.12903241610.933333322016031686491470.151.996370-3.0225053205.88235346706.680952332016041800541664.956.76156610.2131942400.00000038099.220733342016052104598067.7616.88888910.4128592162.36559129551.351512352016061988569919.58-5.513308-4.7065202211.62790731527.05771436201607820330376.67-58.752515-42.03100286.363636264.819860 任务6 主管想了解面向 中国 的订单中哪个销售大区在 2016 年的订单数量以及利润最高 需要你统计输出其结果同时主管还想知道不同销售大区的订单数量最多的产品、最少的产品分别是哪几类(产品类型)需要你统计并输出其结果。 # 你的代码 # 输出中国地区各销售大区2016年的订单数量以及最高利润 china_bigarea_2016 df[(df[国家]中国) (df[年份]2016)].groupby(by [销售大区])[订单数量,利润].sum().reset_index() print(china_bigarea_2016,\n) print(f中国2016年{china_bigarea_2016[销售大区][china_bigarea_2016[订单数量].idxmax()]}的订单数量最高订单数量为{china_bigarea_2016[订单数量][china_bigarea_2016[订单数量].idxmax()]};\n{china_bigarea_2016[销售大区][china_bigarea_2016[利润].idxmax()]}的利润最高利润为:{china_bigarea_2016[利润][china_bigarea_2016[利润].idxmax()]},\n)# 不同销售大区订单数量最多/最少的产品类型是哪些 china_bigarea_2016_2 df[(df[国家]中国) (df[年份]2016)].groupby(by [销售大区,产品类别])[订单数量].sum().reset_index() # print(china_bigarea_2016_2,\n) # 不同销售大区订单数量最多的产品类型 china_bigarea_2016_2_max china_bigarea_2016_2.groupby(by [销售大区]).apply(lambda x:x.nlargest(1,订单数量)).reset_index(drop True) print(china_bigarea_2016_2_max,\n) # 不同销售大区订单数量最少的产品类型 china_bigarea_2016_2_min china_bigarea_2016_2.groupby(by [销售大区]).apply(lambda x:x.nsmallest(1,订单数量)).reset_index(drop True) print(china_bigarea_2016_2_min,\n)销售大区 订单数量 利润 0 东北区 15 6529.89 1 东南区 30 7592.59 2 中部 10 4207.80 3 西北区 4952 1583580.11 4 西南区 6624 1923326.09 中国2016年西南区的订单数量最高订单数量为6624; 西南区的利润最高利润为:1923326.09 销售大区 产品类别 订单数量 0 东北区 配件 11 1 东南区 配件 20 2 中部 配件 8 3 西北区 配件 3316 4 西南区 配件 4273 销售大区 产品类别 订单数量 0 东北区 球 1 1 东南区 球 4 2 中部 服装 2 3 西北区 球 750 4 西南区 服装 1139 ​ C:\Users\chengyuanting\AppData\Local\Temp\ipykernel_14224\973851953.py:3: FutureWarning: Indexing with multiple keys (implicitly converted to a tuple of keys) will be deprecated, use a list instead.china_bigarea_2016 df[(df[国家]中国) (df[年份]2016)].groupby(by [销售大区])[订单数量,利润].sum().reset_index()任务7 主管想了解在所有订单中服装类(产品类别)产品的整体订单数量月变化趋势如何需要你统计并依据年份输出各月份的订单数量。 # 你的代码 # 获取服装品类的数据 cloth_cat_by_month df[df[产品类别]服装].groupby(by [年份,月份])[订单数量].sum().reset_index() cloth_cat_by_month年份月份订单数量0201507179120150864222015096843201510689420151167752015128376201601776720160277282016037729201604838102016058481120160695112201607436 # 绘图观察数据变化趋势 import pandas as pd import matplotlib.pyplot as pltplt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False# Convert 年份 and 月份 to a single datetime column cloth_cat_by_month[年月] pd.to_datetime(cloth_cat_by_month[年份].astype(str) - cloth_cat_by_month[月份].astype(str) )# Plot plt.figure(figsize(12, 6)) plt.plot(cloth_cat_by_month[年月], cloth_cat_by_month[订单数量], markero, linestyle-)# Adding data labels for idx, row in cloth_cat_by_month.iterrows():plt.annotate(row[订单数量], (row[年月], row[订单数量]), textcoordsoffset points, xytext(0,5), hacenter)plt.title(服装订单数量随时间变化趋势) plt.xlabel(年月) plt.ylabel(订单数量) plt.grid(True) plt.tight_layout() # 自动调整子图的位置在某些情况下如果不使用tight_layout(), 图形元素可能会重叠或被剪裁。 plt.show() ​ ​ 任务8 基于任务7的输出结果主管需要你统计在各年份订单数量最低的月份里在 服装类(产品类别)的产品中哪些产品(产品名称)的订单是最少的 # 你的代码# 获取服装名称的数据 cloth_goods_by_month df[df[产品类别]服装].groupby(by [年份,月份,产品名称])[订单数量].sum().reset_index() # 获取7月数据因为7月订单数量最低 cloth_goods_by_month_7 cloth_goods_by_month[cloth_goods_by_month[月份]07] # 获取订单数量最低的产品名称 cloth_goods_by_month_7.groupby(by [年份,月份]).apply(lambda x : x.nsmallest(1,订单数量)).reset_index(drop True)年份月份产品名称订单数量0201507皮带51201607袜子25 # 任务8补充如果绘图数据展示不好分辨还是需要判断订单数量最小的年月 # 筛选数据 cloth_goods_by_month_2 df[df[产品类别]服装].groupby(by [年份,月份])[订单数量].sum().reset_index() # 找按年分组订单数量最小的索引 cloth_min_index cloth_goods_by_month_2.groupby(by [年份])[订单数量].idxmin() # 输出结果 cloth_min cloth_goods_by_month_2.loc[cloth_min_index] cloth_min年份月份订单数量020150717912201607436 任务9 主管想知道在面向 中国 的 大中华区域 的订单中不同用户的购物特点是怎样的 需要你先依据 客户ID 统计每位客户的购物次数及购物花费总金额并在此基础计算每位客户的平均购物花费。 # 你的代码 # 该区域数据 dzh_of_china df[(df[国家]中国) (df[区域]大中华区)] # 统计购物次数以及花费总金额 dzh_of_china_describe dzh_of_china.groupby(by [客户ID])[订单数量,销售金额].sum().reset_index() dzh_of_china_describe # 该区域客户总数 dzh_kehu_counts len(dzh_of_china_describe) # 每位客户的平均花费 dzh_of_china_describe[平均购物花销] dzh_of_china_describe[销售金额]/ dzh_of_china_describe[订单数量] dzh_of_china_describeC:\Users\chengyuanting\AppData\Local\Temp\ipykernel_14224\4058715340.py:5: FutureWarning: Indexing with multiple keys (implicitly converted to a tuple of keys) will be deprecated, use a list instead.dzh_of_china_describe dzh_of_china.groupby(by [客户ID])[订单数量,销售金额].sum().reset_index()客户ID订单数量销售金额平均购物花销013033BA56965.901393.180000113034BA53986.80797.360000213035BA64026.70671.116667313036BA3442.99147.663333413037BA33902.991300.996667...............781431370BA21418.90709.450000781531371BA1129.00129.000000781631373BA1129.00129.000000781731374BA31458.80486.266667781831375BA1129.00129.000000 7819 rows × 4 columns 任务10 根据任务9所计算的结果主管想更加直观的了解不同客户的购物特点 需要你新增两列分别对客户购物次数以及平均购物花费进行分组划分针对购物次数可以划分为高、中、低等共三种频次 针对平均购物花费可将其划分为 高、中、低三种消费等级 之后再将两列结果进行合并经过排列组合形成如 高高、高中等共九种用户购物特征 最后再统计不同特征的用户最喜欢购买的产品(产品类别)是哪些并将结果输出。 任务10 方法一均等分箱 # 定义箱子 bins_order [0,dzh_of_china_describe[订单数量].quantile(0.33),dzh_of_china_describe[订单数量].quantile(0.66),dzh_of_china_describe[订单数量].max()1] labels_order [低,中,高]bins_cost [0,dzh_of_china_describe[平均购物花销].quantile(0.33),dzh_of_china_describe[平均购物花销].quantile(0.66),dzh_of_china_describe[平均购物花销].max()1] labels_cost [低,中,高]# 为消费频次等级和购物等级两列 dzh_of_china_describe[购物频次] pd.cut(dzh_of_china_describe[订单数量],bins bins_order,labels labels_order,right False) dzh_of_china_describe[消费等级] pd.cut(dzh_of_china_describe[平均购物花销],bins bins_cost,labels labels_cost,right False)# 合并两种购物特征 dzh_of_china_describe[购物特征] dzh_of_china_describe[购物频次].astype(str) dzh_of_china_describe[消费等级].astype(str)# 将购物特征合并到大众华区的数据上 merged_df pd.merge(dzh_of_china,dzh_of_china_describe[[客户ID,购物特征]],on 客户ID)# 输出偏好产品 # favorite_products merged_df.groupby(by [购物特征])[产品类别].apply(lambda x : x.value_counts().nlargest(1)) favorite_products merged_df.groupby(by [购物特征])[产品类别].apply(lambda x : x.value_counts().idxmax()) favorite_products购物特征 中中 配件 中低 球 中高 配件 低中 配件 低低 球 低高 配件 高中 配件 高低 球 高高 配件 Name: 产品类别, dtype: objectcut函数的right参数决定了区间的闭合方式。 如果 rightTrue默认值则每个区间的右边是闭合的也就是说区间会是这样的形式[a, b]、[b, c]、[c, d] 等。如果 rightFalse则每个区间的左边是闭合的也就是说区间会是这样的形式(a, b]、(b, c]、(c, d] 等。 具体例子 考虑一个简单的数据集[1, 2, 3, 4, 5]和一个区间边界[1, 3, 5]。 使用 rightTrue数据将被分箱为[1, 3] 和 [3, 5]。此时数字3将属于第二个箱子。使用 rightFalse数据将被分箱为(1, 3] 和 (3, 5]。此时数字3将属于第一个箱子。 因此right参数的值会影响数据点如何被分配到不同的箱子中。 任务10 方法二聚类分箱 dzh_of_china_describe2 dzh_of_china_describe[[客户ID,订单数量,销售金额,平均购物花销]].copy() dzh_of_china_2 dzh_of_china.copy()from sklearn.cluster import KMeans# Using K-means for clustering binning on 订单数量 kmeans_order KMeans(n_clusters3, random_state0).fit(dzh_of_china_describe2[[订单数量]]) dzh_of_china_describe2[购物频次_cluster] kmeans_order.labels_# Map the cluster labels to the desired labels: 低, 中, 高 order_centers kmeans_order.cluster_centers_.flatten() order_label_map {i: 低 if center min(order_centers) else 高 if center max(order_centers) else 中 for i, center in enumerate(order_centers)} dzh_of_china_describe2[购物频次] dzh_of_china_describe2[购物频次_cluster].map(order_label_map)# Drop the cluster label column dzh_of_china_describe2.drop(购物频次_cluster, axis1, inplaceTrue)dzh_of_china_describe2 C:\Users\chengyuanting\AppData\Roaming\Python\Python39\site-packages\sklearn\cluster\_kmeans.py:1416: FutureWarning: The default value of n_init will change from 10 to auto in 1.4. Set the value of n_init explicitly to suppress the warningsuper()._check_params_vs_input(X, default_n_init10)客户ID订单数量销售金额平均购物花销购物频次013033BA56965.901393.180000高113034BA53986.80797.360000高213035BA64026.70671.116667高313036BA3442.99147.663333中413037BA33902.991300.996667中..................781431370BA21418.90709.450000低781531371BA1129.00129.000000低781631373BA1129.00129.000000低781731374BA31458.80486.266667中781831375BA1129.00129.000000低 7819 rows × 5 columns # Using K-means for clustering binning on 平均购物花销 kmeans_cost KMeans(n_clusters3, random_state0).fit(dzh_of_china_describe2[[平均购物花销]]) dzh_of_china_describe2[消费等级_cluster] kmeans_cost.labels_# Map the cluster labels to the desired labels: 低, 中, 高 cost_centers kmeans_cost.cluster_centers_.flatten() cost_label_map {i: 低 if center min(cost_centers) else 高 if center max(cost_centers) else 中 for i, center in enumerate(cost_centers)} dzh_of_china_describe2[消费等级] dzh_of_china_describe2[消费等级_cluster].map(cost_label_map)# Drop the cluster label column dzh_of_china_describe2.drop(消费等级_cluster, axis1, inplaceTrue)dzh_of_china_describe2C:\Users\chengyuanting\AppData\Roaming\Python\Python39\site-packages\sklearn\cluster\_kmeans.py:1416: FutureWarning: The default value of n_init will change from 10 to auto in 1.4. Set the value of n_init explicitly to suppress the warningsuper()._check_params_vs_input(X, default_n_init10)客户ID订单数量销售金额平均购物花销购物频次消费等级013033BA56965.901393.180000高中113034BA53986.80797.360000高中213035BA64026.70671.116667高中313036BA3442.99147.663333中低413037BA33902.991300.996667中中.....................781431370BA21418.90709.450000低中781531371BA1129.00129.000000低低781631373BA1129.00129.000000低低781731374BA31458.80486.266667中低781831375BA1129.00129.000000低低 7819 rows × 6 columns # 合并两种购物特征 dzh_of_china_describe2[购物特征] dzh_of_china_describe2[购物频次].astype(str) dzh_of_china_describe2[消费等级].astype(str)# 将购物特征合并到大众华区的数据上 merged_df2 pd.merge(dzh_of_china,dzh_of_china_describe2[[客户ID,购物特征]],on 客户ID)# 输出偏好产品 # favorite_products2 merged_df2.groupby(by [购物特征])[产品类别].apply(lambda x : x.value_counts().nlargest(1)) favorite_products2 merged_df2.groupby(by [购物特征])[产品类别].apply(lambda x : x.value_counts().idxmax()) favorite_products2购物特征 中中 配件 中低 配件 中高 配件 低中 配件 低低 配件 低高 配件 高中 配件 高低 配件 高高 配件 Name: 产品类别, dtype: object提问上述聚类分箱时是怎么保证高的数据不会打错高中低标签呢 回答 当我们使用K-means聚类进行分箱时算法会为我们的数据找到三个中心假设我们选择了3个簇。这三个中心分别代表了数据的三个“平均”或“典型”值。为了将这三个中心与“低”、“中”和“高”标签正确地匹配起来我们执行了以下操作 获取这三个中心的值。找到这三个值中的最小值、最大值和中间值。将最小值映射到“低”将最大值映射到“高”将中间值映射到“中”。 通过这种方式我们确保了正确地标记了每个数据点的标签。 这是上述代码的相关部分用于映射簇标签到我们的“低”、“中”和“高”标签 order_centers kmeans_order.cluster_centers_.flatten() order_label_map {i: 低 if center min(order_centers) else 高 if center max(order_centers) else 中 for i, center in enumerate(order_centers)} df[购物频次] df[购物频次_cluster].map(order_label_map) 在这里order_centers是我们得到的三个中心的值然后我们使用字典推导式为每个中心创建一个映射最后使用map函数应用这个映射到数据框中的簇标签上。
http://www.pierceye.com/news/605104/

相关文章:

  • 微信微网站是什么案例天津室内设计培训
  • 如何做网站网页广州海珠网站开发设计
  • 做技术网站赚钱集团网站建设新闻
  • 建立门户网站的意义自己搞个网站需要多少钱
  • 佛山网站优化好华为邮箱注册
  • 哈尔滨网站建设公司名字如何做网络营销推广员
  • 做详情页到那个网站找模特素材怎么黑进网站后台
  • 郑州seo建站深圳专业软件网站建设
  • 廊坊网站搜索优化互联网站账户e服务平台
  • 昆明建设网站wordpress设置中改网站
  • 无锡专业网站制作的公司移动互联网开发技术有哪些
  • 济南市城市建设集团网站wordpress user role editor
  • linux 配置网站域名做资金盘 互助盘的网站
  • 网站开发工程师培训定制网站开发app费用
  • 给菠菜网站做外包免费做思维导图的网站
  • 网站建设服务哪家好如何做属于自己的网站
  • 正规的佛山网站建设公司网站空间怎么续费
  • 网站建设需要照片吗网站策划网站建设企业
  • 网站标签的作用北京医疗网站建设公司
  • 西部数码成品网站商务网站建设调研
  • 服装行业网站模板网页无法访问公司内网
  • 如何建设一个不备案的网站互联网的意思
  • 承德网站开发应聘软件开发工程师简历
  • 创意手机网站做go分析和kegg分析网站
  • 房地产开发建设网站wordpress多站点cdn
  • 医疗室内设计网站推荐wordpress htaccess
  • 织梦 图片网站源码uml电子商务网站建设文档
  • 商用图片的网站开发一款交友软件多少钱
  • 15年做哪些网站能致富单位做网站有哪些
  • 免费模板建站现在装宽带要多少钱