Python实战项目——旅游数据分析(四)

由于有之前的项目,所以今天我们直接开始,不做需求分析,还不会需求分析的可以看我之前的文章。Python实战项目——用户消费行为数据分析(三)

导入库

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
plt.rcParams['font.sans-serif']=['SimHei']# 用来正常显示中文标签
from datetime import datetime

1.初识数据

df = pd.read_csv('kelu.csv')
df.info()
df.head()

在这里插入图片描述

  • 基本信息:门票价格101,数据来自16年~19年,8K+多数据量
df.describe()

在这里插入图片描述

  • 根据平均分92,和1/2分位得知,大多数用户评分在100,效果非常不错。
  • 16年~19年门票价格都是110

2.分析数据

a1.每天销量分析

df['time'] = pd.to_datetime(df['time'],format='%Y/%m/%d')
df.groupby('time')['rating'].count().plot(figsize=(12,4))

在这里插入图片描述

  • 整体来看每日销量呈现上升趋势,但是在18年5月份前后(2,3,4)出现一次较大的波动,销量急剧下滑,猜测:台风,疫情,运营推广不利
  • 16年9月~17年1月,销量非常低,每天平均2-3张门票,猜测:101观景台门票刚刚上线发售,观景台刚刚对游客进行开放

a2.每月销量分析

df['month'] = df['time'].values.astype('datetime64[M]')  #保留月份精度的日期
df.head()
df.groupby('month')['rating'].count().plot(figsize=(12,4))  #按照月份进度进行计数
plt.xlabel('月份')
plt.ylabel('销售数量')
plt.title('16~19年每月销量分析')

在这里插入图片描述
月份整体销量依然呈现上升趋势,但是在18年2,3,4月份月销量下滑明显。跟每天销量下降有关。猜测:台风,疫情,运营推广不利

a3.每个用户的购买量和消费金额分析

merge用法,相当于sql当中join:

df1 = pd.DataFrame({
    'name':['zhangsan','lisi'],
    'group':['A','B']
})
df2 =  pd.DataFrame({
    'name':['wangwu','lisi'],
    'score':[88,90],
    'group':['C','D']
})
pd.merge(left=df1,right=df2,on='name',how='inner',suffixes=['_1','_2'])

left:左表 right:右表 on:关联字段 how:inner(默认值,交集)|outer(并集)|left(只保留左侧)|right(只保留右侧)
#suffixes:如果两个表中有多个相同列,用suffixes给的值进行区分(默认值xy)
在这里插入图片描述

#按照游客分组,统计每个游客的购买次数
grouped_count_author = df.groupby('author')['frequency'].count().reset_index() 
#按照游客分组,统计每个游客的消费金额
grouped_sum_amount = df.groupby('author')['amount'].sum().reset_index()
user_purchase_retention = pd.merge(left=grouped_count_author,
                                  right=grouped_sum_amount,
                                  on='author',
                                  how='inner')
user_purchase_retention.tail(60)
user_purchase_retention.plot.scatter(x='frequency',y='amount',figsize=(12,4))
plt.title('用户的购买次数和消费金额关系图')
plt.xlabel('购物次数')
plt.ylabel('消费金额')

在这里插入图片描述
结论:斜率就是门票价格110,用户的消费金额和消费次数呈现线性关系

b1.用户购买门票数量分析

df.groupby('author')['frequency'].count().plot.hist(bins=50)  #影响柱子的宽度,宽度= (最大值-最小值)/bins
plt.xlim(1,17)
plt.xlabel('购买数量')
plt.ylabel('人数')
plt.title('用户购买门票数量直方图')

在这里插入图片描述

  • 绝大多数用户购买过1张门票,用户在7000人次左右
  • 少数人购买过2~4张门票,猜测:可能是台北周边用户

b2.用户购买门票2次及以上情况分析

df_frequency_2 = df.groupby('author').count().reset_index()
df_frequency_2.head()
df_frequency_2[df_frequency_2['frequency']>=2].groupby('author')['frequency'].sum().plot.hist(bins=50)
plt.xlabel('购买数量')
plt.ylabel('人数')
plt.title('购买门票在2次及以上的用户数量')

在这里插入图片描述
消费两次的用户在整体上占比较大,大于2次的用户占小部分,用户购买次数最多为8次

b3.查看购买2次及以上的具体人数

df_frequency_2[df_frequency_2['frequency']>=2].groupby('frequency')['author'].count()

在这里插入图片描述
出去购买一次的顾客,可以看出购买2次有402人,购买3次的99人,以此类推得知大多数据倾向于购买2~5

b4.购买次数在1~5次之间的用户占比分析

1.按照用户进行分组 2.取出购买次数 3.过滤出1~5次用户 4.绘制饼图


df_frequency_gte_1 = df.groupby('author')['frequency'].count().reset_index()
#过滤出<=5次的用户
values = list(df_frequency_gte_1[df_frequency_gte_1['frequency']<=5].groupby('frequency')['frequency'].count())
print(values)
plt.pie(values,labels=['购买1次','购买2次','购买3次','购买4次','购买5次'],autopct='%1.1f%%')
plt.title('购买次数在1~5次之间的人数占比')
plt.legend()

在这里插入图片描述
可以看出购买一次的占比83%,其次逐渐递减。并且递减比较明显,购买3.4.5的占比相近,人数都很少。

b5.购买次数在2~5次之间的用户占比分析

#过滤出>=2次并且<=5次的用户
df_frequency_gte_2 = df_frequency_2[df_frequency_2['frequency']>=2].reset_index()
values = list(df_frequency_gte_2[df_frequency_gte_2['frequency']<=5].groupby('frequency')['frequency'].count())
print(values)
plt.pie(values,labels=['购买2次','购买3次','购买4次','购买5次'],autopct='%1.1f%%')
plt.title('购买次数在2~5次之间的人数占比')
plt.legend()

在这里插入图片描述
在2~5次之间,购买2.3次用户占比最大,综合占据了80%

c1.复购率分析

复购率:在某一时间窗口内(多指一个月)内消费次数在两次及以上的用户在总消费用户的占比


df.head()
pivot_count = df.pivot_table(index='author',
                            columns='month',
                            values='frequency',
                            aggfunc='count').fillna(0)
pivot_count.head()
#三种情况:
#消费次数>1,为复购用户,用1表示
#消费次数=1,为非复购用户,用0表示
#消费次数=0, 未消费用户,用na表示
#applymap:df,处理每一个元素
#apply:df,处理每一行或者每一列数据
#map:Serise,处理每一个元素
pivot_count = pivot_count.applymap(lambda x: 1 if x>1 else np.NAN  if x==0 else 0)
# pivot_count[pivot_count['2016-09-01']==1]
(pivot_count.sum()/pivot_count.count()).plot()
plt.xlabel('时间(月)')
plt.ylabel('百分比(%)')
plt.title('16~19年每月用户复购率')

在这里插入图片描述
16年9月份复购率最高达到了7.5%,然后开始下降,趋于平稳在1.2%

c2.复购用户人数

pivot_count.sum().plot()
plt.xlabel('时间/月')
plt.ylabel('复购人数')
plt.title('16~19年每月的复购人数折线图'

在这里插入图片描述

  • 整体来看,复购人数长线上升趋势
  • 但是在18年2.3.4.10和19年2月份,复购人数下降较为明显,出现异常信号,需要和业务部门具体分析情况

c3.回购率分析

回购率:在某一个时间窗口内消费过的用户,在下一个时间窗口仍旧消费的占比。
举个例子:当前月消费用户人数1000人,其中200人在下一个月仍旧进行了消费,回购率200/1000=20%

pivot_purchase = df.pivot_table(index='author',
                columns='month',
               values='frequency',
               aggfunc='count'
              ).fillna(0)
pivot_purchase.head()
len(pivot_purchase.columns)

在这里插入图片描述

def purchase_return(data): #data:代表的是每一名游客的所有月份消费记录
    status = [] #存储每一个月回购状态
    for i in range(30):#遍历每一个月(最后一个月除外)
        ####本月消费
        if data[i] == 1:
            if data[i+1] ==1:#下个月有消费,是回购用户,1
                status.append(1)
            else:#na|未消费
                status.append(0) #非回购用户,0
        else: ####本月未消费
            status.append(np.NaN)
    status.append(np.NaN)
    return pd.Series(status,pivot_purchase.columns)
pivot_purchase_return = pivot_purchase.apply(purchase_return,axis=1)  #用户回购状态
(pivot_purchase_return.sum()/pivot_purchase_return.count()).plot()
plt.title('16年~19年每月的回购率')
plt.xlabel('月份')
plt.ylabel('回购率%')

在这里插入图片描述

  • 回购率最高在18年6月份,达到4%
  • 整体来看,回购率呈现微弱上升趋势
  • 出现了几次较大下滑,分别是17年6月份,18年1月份,18年8月份,19年1月份

c4.回购人数分析

pivot_purchase_return.sum().plot()
plt.title('16年~19年每月的回购人数')
plt.xlabel('月份')
plt.ylabel('回购人数')
print(pivot_purchase_return.sum())

在这里插入图片描述

  • 整体呈现上升趋势,回购人数最多时在18年11月份,人数未17人
  • 其中有几次回购人数下降较为明显,主要在分别是17年6月份,18年1月份,18年8月份,19年1月份

c5.每个月分层用户占比情况

活跃用户|不活跃用户|回流用户|新用户


def active_status(data): #data:每一行数据(共31列)
    status = [] #存储用户31个月的状态(new|active|unactive|return|unreg)
    for i in range(31):
        #判断本月没有消费==0
        if data[i] ==0:
            if len(status)==0: #前几个月没有任何记录(也就是97年1月==0)
                status.append('unreg')  
            else:#之前的月份有记录(判断上一个月状态)
                if status[i-1] =='unreg':#一直没有消费过
                    status.append('unreg')
                else:#上个月的状态可能是:new|active|unative|reuturn
                    status.append('unactive')
        else:#本月有消费==1
            if len(status)==0:
                status.append('new') #第一次消费
            else:#之前的月份有记录(判断上一个月状态)
                if status[i-1]=='unactive':
                    status.append('return') #前几个月不活跃,现在又回来消费了,回流用户
                elif  status[i-1]=='unreg':
                    status.append('new') #第一次消费
                else:#new|active
                    status.append('active') #活跃用户
            
    return pd.Series(status,pivot_purchase.columns) #值:status,列名:18个月份
pivot_purchase_status  =pivot_purchase.apply(active_status,axis=1)
pivot_status_count =pivot_purchase_status.replace('unreg',np.NaN).apply(pd.value_counts)
pivot_status_count.T.plot.area()

在这里插入图片描述

  • 可以看出,红色(不活跃用户)占据网站用户的主体
  • 橙色(新用户)从17年的1月~19年1月,呈现上升趋势;但是在18年4月份左右,新用户的量突然急剧下降,异常信号;
  • 以后,新用户又开始逐渐上涨,回复稳定状态
  • 绿色(回流用户),一直维持稳定稳定状态,但是在18年2~4月份,出现异常下降情况,异常信号;

c6.每月不同用户的占比

return_rate = pivot_status_count.apply(lambda x:x/x.sum())
return_rate.T.plot()

在这里插入图片描述

  • 在17年1月份过后,网站用户主体由不活跃用户组成,新用户占比开始逐渐下降,并且趋于稳定,稳定在10%左右
  • 活跃用户和会用户,一直很稳定,并且占比较小
  • 16年9月前后,新用户和不活跃用户,发生较大的变化,猜测:活动或者节假日造成…

c7.每月活跃用户的占比

return_rate.T['active'].plot(figsize=(12,6))
plt.xlabel('时间(月)')
plt.ylabel('百分比')
plt.title('每月活跃用户的占比分析')

在这里插入图片描述

  • 在17年1月份活跃用户占比较高,在0.5%,但是在1-2月份,急剧下降,猜测:春节的影响,或者温度
  • 结合历年1~2月份销量来看,都会出现一定比例的下降,再次验证我们的猜测:春节的影响
  • 在18年2月和5月出现异常,门票销量下降,猜测:雨水或者台风影响

c8.每月回流用户占比

return_rate.T['return'].plot(figsize=(12,6))
plt.xlabel('时间(月)')
plt.ylabel('百分比')
plt.title('每月回流用户的占比分析')

在这里插入图片描述

  • 整体来看,回流用户比例上升趋势,但是波动较大
  • 在17年1月和6月,18年4月,19年2月,回流用户比例都出现了较大幅度下降,表现为异常信号
  • 不论是回流用户还是活跃用户,在以上几个月份中都表现出下降趋势。
np.mean(return_rate.T['return'])  #回流用户平均值在0.73%左右
  • 在17年9月份以后,仅有两个异常点在平均值以下
  • 在17年9月份以前,所有数据都显示出回流用户比例低于平均值,猜测:景点开放不久,很多游客尚未发现本景点;本景点在该平台上线不久

d1.用户的生命周期

#计算方式:每一个用户最后一个购买商品的时间——用户第一次购买商品的时间,转换成天数,即为生命周期

time_min = df.groupby('author')['time'].min()
time_max = df.groupby('author')['time'].max()
life_time = (time_max-time_min).reset_index()
life_time.describe()

在这里插入图片描述

  • 通过原样本8757条和count=7722得知,存在一个用户多次消费的情况
  • 平均生命周期天数23天,通过25% 50% 75%分位数得知,绝大多用户生命周期为0天
  • 最大生命周期为864天

d2.用户生命周期直方图

#讲日期类型转成数值类型
life_time['life_time'] = life_time['time']/np.timedelta64(1,'D')
life_time['life_time'].plot.hist(bins = 100,figsize=(12,6))
plt.xlabel('天数')
plt.ylabel('人数')
plt.title('所有用户的生命周期直方图')
print(life_time[life_time['life_time']==0])

在这里插入图片描述

  • 生命周期为0的用户(仅仅在一天内有过消费,之后再没消费过),存在7130个用户
  • 由于总用户数为7722,其余592人属于优质的忠诚客户

d3.生命周期大于0天的用户,直方图

life_time[life_time['life_time']>0]['life_time'].plot.hist(bins = 100,figsize=(12,6))
plt.xlabel('天数')
plt.ylabel('人数')
plt.title('生命周期在0天以上的用户分布直方图')
life_time[life_time['life_time']>0]['life_time'].mean()

在这里插入图片描述

  • 去掉生命周期为0的用户,可知
  • 用户平均生命周期为300天,生命周期在100天的用户量达到了最大值17人
  • 生命周期在100~350天来看,用户量呈现缓慢下降的趋势
  • 350~800天左右来看,用户量下降速度明显,存在一定用户流失,而忠诚用户越来越少

d4.各时间段的用户留存率

#pd.cut()函数
np.random.seed(666)  #保证每次运行程序产生的随机数都是相同的。
score_list = np.random.randint(25,100,size=3)
print(score_list)
bins = [0,59,70,80,100]   #指定多个区间
score_cut = pd.cut(score_list,bins)
score_cut

在这里插入图片描述

  • 留存率:1-90天有多少留存用户。求出用户的留存天数,比如留存天数==89,属于190天内的留存用户
  • 留存天数计算方式:用户每一次的消费时间分别减去用户第一次消费时间
  • left:左表,right:右表,how:连接方式,on:连接字段,suffixes:针对相同列名,指定不同的后缀
user_purchase_retention = pd.merge(left=df,right=time_min.reset_index(),how='inner',on='author',suffixes=('','_min'))

#计算留存天数
user_purchase_retention['time_diff'] = user_purchase_retention['time']-user_purchase_retention['time_min']
#将time_diff转成数值
user_purchase_retention['time_diff'] = user_purchase_retention['time_diff'].apply(lambda x:x/np.timedelta64(1,'D'))

#生成时间跨度(3个月,即90天),判断属于哪个区间
bin = [i*90 for i in range(11)]
user_purchase_retention['time_diff_bin'] = pd.cut(user_purchase_retention['time_diff'],bin)

#统计每个游客,在不同的时间段内的消费频率和值(便于稍后判断该用户在某个区间内是不是留存用户)
pivot_retention =  user_purchase_retention.groupby(['author','time_diff_bin'])['frequency'].sum().unstack()

#判断是否是留存用户(1:留存,0:未留存)
pivot_retention_trans = pivot_retention.fillna(0).applymap(lambda x:1 if x>0 else 0)
#留存率
print(pivot_retention_trans.sum()/pivot_retention_trans.count())
(pivot_retention_trans.sum()/pivot_retention_trans.count()).plot.bar()
plt.xlabel('时间跨度(天)')
plt.ylabel('留存率')
plt.title('各时间段内的用户留存率')

在这里插入图片描述

  • 如图,每个周期是3个月,第一个周期的留存率在2.2%,前三个周期的递减速度在0.3%左右。
  • 在第四五个周期的时候趋于平稳,稳定在留存率1.5%左右
  • 从第五个周期开始,留存率明显下降,下降到几乎0%,在第四五周期(1年)的时候,需要采取方法将用户留住进行再次消费。
  • 如果在跨度为1年的时候,不召回用户,则就会面临大量用户流失的风险。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/44095.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Canal深入调研

Canal深入调研 1.canal的设计 1.1 Canal的设计理念 canal的组件化设计非常好&#xff0c;有点类似于tomcat的设计。使用组合设计&#xff0c;依赖倒置&#xff0c;面向接口的设计。 说明&#xff1a; ​ server代表一个canal运行实例&#xff0c;对应于一个jvm ​ instance…

elasticsearch操作(命令方式)

说明&#xff1a;elasticsearch是目前最流行的搜索引擎&#xff0c;功能强大&#xff0c;非常受欢迎。特点是倒排索引&#xff0c;在海量数据的模糊查找领域&#xff0c;效率非常高。elasticsearch的安装和使用参考&#xff1a;http://t.csdn.cn/yJdZb。 本文介绍在es的索引库…

ajax/axios访问后端测试方法

文章目录 1、浏览器执行javascript方法GET请求POST请求 2、Postman测试工具GET请求POST请求 3、idea IDE提供的httpclient4、Apache JMeter 1、浏览器执行javascript方法 GET请求 http://localhost:6060/admin/get/123 POST请求 技巧&#xff1a;打开谷歌浏览器&#xff0c…

隧道安全监测解决方案

隧道安全监测 解决方案 一、监测目的 通过监控量测&#xff0c;实现信息化施工&#xff0c;不仅能及时掌握隧道实际的地质情况&#xff0c;掌握隧道围岩、支护衬砌结构的受力特征和变形情况&#xff0c;据此可以尽早发现塌方、大变形等灾害征兆&#xff0c;及时采取措施&…

使用ffmpeg合并视频遇到的坑

下面以Linux环境介绍为主 1.ffmpeg可执行命令不同的环境是不同的&#xff0c;Linux在执行命令前还需要授权。 2.合并视频命令&#xff1a; 主要命令: {} -f concat -auto_convert 0 -safe 0 -i {} -y -c:v copy 坑一&#xff1a;其中第一个花括号替换的是可执行命令所在的…

elementui全局给select option添加title属性

场景 有天边上的同事问了我一个问题&#xff0c;示例如下&#xff0c;有个数据特别长&#xff0c;导致下拉部分被横向撑大。希望在全局对所有的option进行处理&#xff0c;按照select的宽度&#xff0c;超出隐藏。 处理 方式一 第一眼看过去直接修改源码好了&#xff0c;修…

权智A133P 安卓10移植SPI转串WK2124驱动

硬件连接示意图 主控CPU通过SPI总线与WK2XXX芯相连接。WK2XXX控制4个UART的数据收发。 其中重要的参数有CS片选线和IRQ中断引脚。 LInux串口驱动框架 当WK2XXX驱动在内核注册成功后&#xff0c;会在/dev目录下面生成ttysWK0,ttysWK1,ttysWK2,ttysWK3节点。上层通过open,read,w…

精通正则表达式 - 打造高效正则表达式

目录 一、典型示例 1. 稍加修改——先迈最好使的腿 2. 效率 vs 准确性 3. 继续前进——限制匹配优先的作用范围 4. “指数级”匹配 二、全面考察回溯 1. 传统 NFA 的匹配过程 2. POSIX NFA 需要更多处理 3. 无法匹配时必须进行的工作 4. 看清楚一点 5. 多选结构的代…

Spring Boot日志:SLF4J和Logback

日志的分类 SpringBoot中的日志库分为两种&#xff1a; 实现库&#xff1a;提供具体的日志实现&#xff0c;例如日志级别的控制、打印格式、输出目标等。外观库&#xff1a;自身不提供日志实现&#xff0c;而是对其他日志库进行封装&#xff0c;从而方便使用。基于外观模式实…

Redis实战案例24-关注推送

1. Feed流实现方案 拉模式主要缺点&#xff0c;延迟问题&#xff0c;极端情况某个用户关注了成千上万的up主&#xff0c;每位up主又发布了十几条博客&#xff0c;此时拉模式的延迟就会很高&#xff1b; 推模式缺点也很明显&#xff0c;内存消耗太大&#xff0c;假设up主是千万级…

网络安全 Day20-计算机网络基础知识05(网络原理)

计算机网络基础知识05&#xff08;网络原理&#xff09; 1. OSI 模型2. VMware虚拟机NAT模式下上网原理3. 不能上网故障排查 1. OSI 模型 OSI 7层网络通信原理模型 OSI 国际网互联 OSI 数据包封装解封装过程 北京局域网主机A到深圳局域网主机B数据工作流程 2. VMware虚拟机N…

《零基础入门学习Python》第066讲:GUI的终极选择:Tkinter3

今天我们一起来学习三个组件&#xff1a;Checkbutton、Radiobutton 和 LabelFrame。 同样&#xff0c;我们还是通过案例来讲解。 一、Checkbutton Checkbutton&#xff08;多选框&#xff09;。大家都知道什么叫做“翻牌子”&#xff0c;今天的第一个例子就是来写一个翻牌子…

巅峰极客2023 hellosql

随便输一个payload&#xff0c;有waf 这题只有两个回显&#xff0c;分别是太酷啦和nonono&#xff0c;不显示报错、登录成功等各种信息&#xff0c;目前只能想到用时间盲注。 抓包fuzz&#xff0c;194都是被过滤的 不止这些&#xff0c;手工测出来if、sleep、benchmark、*、rp…

opencv-20 深入理解HSV 色彩空间(通过指定,标记颜色等来拓展ROI区域)

RGB 色彩空间是一种被广泛接受的色彩空间&#xff0c;但是该色彩空间过于抽象&#xff0c;我们不能够直接通过其值感知具体的色彩。 我们更习惯使用直观的方式来感知颜色&#xff0c;HSV 色彩空间提供了这样 的方式。 通过 HSV色彩空间&#xff0c;我们能够更加方便地通过色调、…

Keil系列教程08_Configuration(二)

1写在前面 本文接着上一篇文章《Keil系列教程07_Configuration&#xff08;一&#xff09;》讲述的工程目标选项的后三项配置&#xff1a;Shortcut Keys快捷键、Text Completion代码完形、Other其他。 这后面三部分内容在该系列教程其它也会牵涉&#xff0c;也是一些常用、重要…

idea中常用的快捷键

快捷键: 1.快速生成main方法 main/psvm public static void main(String[] args) {} 2.快速复制当前行的代码: ctrld 3.快速捕获异常: altctrlt 4.快速打印结果: sout/soutv System.out.println(s); System.out.println("s " s); 5.自动生成对象的返回值…

tinkerCAD案例:8.Cylinder Earrings 圆筒耳环

tinkerCAD案例&#xff1a;8.Cylinder Earrings 圆筒耳环 In this lesson you will learn how to create earrings using cylinder shapes. So let’s get started! 在本课中&#xff0c;您将学习如何使用圆柱形制作耳环。所以让我们开始吧&#xff01; 说明 Drag a Cylinder …

el-Cascader 中div上绑定keyDown事件

keydown&#xff0c;keyup&#xff0c;keypress 事件默认是给页面上可以聚焦的元素绑定键盘事件&#xff0c;例如input输入框&#xff0c;点击输入框即代表聚焦在该元素上。那么想要给div或者其他不能聚焦的元素上使用键盘事件怎么处理呢&#xff1f;这里用到tabindex属性。 …

SWF格式视频怎么转换成AVI格式?简单的转换方法分享

当你想要在不同的设备上播放视频时&#xff0c;将SWF格式视频转换成AVI格式是非常有用的。因为SWF格式通常只能在特定的软件或网页上播放&#xff0c;而AVI格式则可以在更广泛的设备上播放&#xff0c;包括智能手机&#xff0c;平板电脑和电视机等。那么我们怎么将SWF转换成AVI…

关于Nginx的 location 配置各种情况转换后的样子记录

Nginx location 配置要代理的地址测试URL代理后的URL举例编号/test01http://127.0.0.1:8080/test01/abc/test/test01/abc/test01/test02http://127.0.0.1:8080//test02/abc/test//abc/test02/test03/http://127.0.0.1:8080/test03/abc/test/test03/abc/test03/test04/http://12…