代码#绘制图形分析满减优惠和形式和折扣率优惠形式 import matplotlib . pyplot as plt import re indexOne = data1['discount_rate']. astype (str). apply ( lambda x : re . findall ( '\d +:\ d +', x )!=[])#满减优惠形式的索引 indexTwo =data1('discount_rate'). astype ( str ). apply ( lambda x : re . findall ( '\d +\.\ d +', x )!=[])#折扣率优惠形式的索引 dfOne =data1.loc[indexOne,:]#取出满减优惠形式的数据 dTwo =data1.loc[indexTwo ,:]#取出折扣率优惠形式的数据 #在满减优惠形式的数据中,15天内优惠券被使用的数目 numberOne = sum (( dfOne ('date')- dfOne[ 'date_received ']). dt . days <=15) #在满减优惠形式的数据中,15天内优惠券未被使用的数目 numberTwo = len ( dfOne )- numberOne #在折扣率优惠形式的数据中,15天内优惠券被使用的数目 numberThree = sum (( dfTwo['date']- dfTwo[' date_received ']. dt . days <=15) #在折扣率优惠形式的数据中,15天内优惠券未被使用的数目 numberFour = len( dfTwo )- numberThree #绘制图形报错解决
时间: 2023-11-22 20:55:04 浏览: 109
在你的代码中,绘制图形的部分似乎没有出现。可以尝试添加以下代码来绘制图形:
```python
labels = ['15天内使用', '15天内未使用']
sizes1 = [numberOne, numberTwo]
sizes2 = [numberThree, numberFour]
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 5))
ax1.pie(sizes1, labels=labels, autopct='%1.1f%%')
ax1.set_title('满减优惠使用情况')
ax2.pie(sizes2, labels=labels, autopct='%1.1f%%')
ax2.set_title('折扣率优惠使用情况')
plt.show()
```
这样就可以生成一个包含两个子图的饼状图,分别展示满减优惠和折扣率优惠的使用情况。如果还有其他的报错,请提供更多信息以便我能够帮助你解决。
相关问题
代码import matplotlib.pyplot as plt import re indexOne = data1['discount_rate'].astype(str).apply(lambda x: re.findall('\d+:\d+', x)!=[]) #满减优惠形式的索引 indexTwo = data1['discount_rate'].astype(str).apply(lambda x: re.findall('\d+\.\d+', x)!=[]) #折扣率优惠形式的索引 dfOne = data1.loc[indexOne,:] #取出满减优惠形式的数据 dfTwo = data1.loc[indexTwo,:] #取出折扣率优惠形式的数据 #在满减优惠形式的数据中,15天内优惠券被使用的数目 numberOne = sum((dfOne['date'] - dfOne['date_received']).dt.days <= 15) #在满减优惠形式的数据中,15天内优惠券未被使用的数目 numberTwo = len(dfOne) - numberOne #在折扣率优惠形式的数据中,15天内优惠券被使用的数目 numberThree = sum((dfTwo['date'] - dfTwo['date_received']).dt.days <= 15) #在折扣率优惠形式的数据中,15天内优惠券未被使用的数目 numberFour = len(dfTwo) - numberThree #绘制图形 plt.figure(figsize=(6,3)) plt.rcParams['font.sans-serif'] = 'Simhei' plt.subplot(1,2,1) plt.pie((numberOne, numberTwo), autopct='%.1f%%', pctdistance=1.4) plt.legend(['优惠券15天内被使用','优惠券15天内未被使用'], fontsize=7, loc=(0.15,0.91)) #添加图例 plt.title('满减优惠形式', fontsize=15, y=1.05) #添加标题 plt.subplot(1,2,2) plt.pie([numberThree, numberFour], autopct='%.1f%%', pctdistance=1.4) plt.legend(["优惠券15天内被使用","优惠券15天内未被使用"], fontsize=7, loc=(0.15,0.91)) #添加图例 plt.title('折扣率优惠形式', fontsize=15, y=1.05) #添加标题 plt.show()报错unsupported operand type(s) for -: 'NaTType' and 'str'解决
这个错误提示是因为在计算时间差时,出现了空值(NaN)和字符串相减的情况。可以先将这些空值替换成一个非空值,比如用当前日期来填充空值,代码如下:
```
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import re
data1 = pd.read_csv('data.csv')
data1['date_received'] = pd.to_datetime(data1['date_received'], format='%Y%m%d')
data1['date'] = pd.to_datetime(data1['date'], format='%Y%m%d')
data1['date_received'] = data1['date_received'].fillna(pd.to_datetime('today'))
data1['date'] = data1['date'].fillna(pd.to_datetime('today'))
indexOne = data1['discount_rate'].astype(str).apply(lambda x: re.findall('\d+:\d+', x)!=[]) #满减优惠形式的索引
indexTwo = data1['discount_rate'].astype(str).apply(lambda x: re.findall('\d+\.\d+', x)!=[]) #折扣率优惠形式的索引
dfOne = data1.loc[indexOne,:] #取出满减优惠形式的数据
dfTwo = data1.loc[indexTwo,:] #取出折扣率优惠形式的数据
#在满减优惠形式的数据中,15天内优惠券被使用的数目
numberOne = sum((dfOne['date'] - dfOne['date_received']).dt.days <= 15)
#在满减优惠形式的数据中,15天内优惠券未被使用的数目
numberTwo = len(dfOne) - numberOne
#在折扣率优惠形式的数据中,15天内优惠券被使用的数目
numberThree = sum((dfTwo['date'] - dfTwo['date_received']).dt.days <= 15)
#在折扣率优惠形式的数据中,15天内优惠券未被使用的数目
numberFour = len(dfTwo) - numberThree
#绘制图形
plt.figure(figsize=(6,3))
plt.rcParams['font.sans-serif'] = 'Simhei'
plt.subplot(1,2,1)
plt.pie((numberOne, numberTwo), autopct='%.1f%%', pctdistance=1.4)
plt.legend(['优惠券15天内被使用','优惠券15天内未被使用'], fontsize=7, loc=(0.15,0.91)) #添加图例
plt.title('满减优惠形式', fontsize=15, y=1.05) #添加标题
plt.subplot(1,2,2)
plt.pie([numberThree, numberFour], autopct='%.1f%%', pctdistance=1.4)
plt.legend(["优惠券15天内被使用","优惠券15天内未被使用"], fontsize=7, loc=(0.15,0.91)) #添加图例
plt.title('折扣率优惠形式', fontsize=15, y=1.05) #添加标题
plt.show()
```
这样修改后,空值就被替换掉了,就可以正常运行代码了。
air_data数据集进行航空公司客户价值分析的详细代码
航空公司客户价值分析通常使用RFM模型进行,即根据客户的最近一次购买时间(Recency)、购买频率(Frequency)和消费金额(Monetary)三个指标来进行客户分类和价值评估。下面是使用air_data数据集进行航空公司客户价值分析的详细代码:
1. 导入必要的库和数据集
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# 导入数据集
air_data = pd.read_csv('air_data.csv', encoding='gb18030')
```
2. 数据预处理
```python
# 删除票价为空的数据
air_data = air_data[air_data['SUM_YR_1'].notnull() & air_data['SUM_YR_2'].notnull()]
# 删除票价为0、平均折扣率不在0-1之间、总飞行公里数为0的数据
index1 = air_data['SUM_YR_1'] != 0
index2 = air_data['SUM_YR_2'] != 0
index3 = (air_data['avg_discount'] >= 0) & (air_data['avg_discount'] <= 1)
index4 = air_data['SEG_KM_SUM'] != 0
air_data = air_data[index1 | index2 & index3 & index4]
# 删除不需要的列
air_data = air_data[['LOAD_TIME', 'FFP_DATE', 'LAST_TO_END', 'FLIGHT_COUNT', 'SEG_KM_SUM', 'avg_discount']]
```
3. 计算RFM指标
```python
# 计算最近一次购买时间
air_data['LOAD_TIME'] = pd.to_datetime(air_data['LOAD_TIME'])
air_data['FFP_DATE'] = pd.to_datetime(air_data['FFP_DATE'])
recency = (air_data['LOAD_TIME'] - air_data['FFP_DATE']) / np.timedelta64(1, 'D')
air_data['recency'] = recency.astype(int)
# 计算购买频率和消费金额
frequency = air_data['FLIGHT_COUNT']
monetary = air_data['SEG_KM_SUM'] * air_data['avg_discount']
# 将RFM指标转换为数据框
rfm = pd.DataFrame({'recency': recency, 'frequency': frequency, 'monetary': monetary})
```
4. RFM指标标准化
```python
# 标准化RFM指标
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
rfm_std = scaler.fit_transform(rfm)
# 将标准化后的数据转换为数据框
rfm_std = pd.DataFrame(rfm_std, columns=['recency', 'frequency', 'monetary'])
```
5. K-Means聚类
```python
# 使用K-Means聚类
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=5, random_state=2021)
kmeans.fit(rfm_std)
# 将聚类结果添加到数据框中
rfm['label'] = kmeans.labels_
```
6. 可视化聚类结果
```python
# 绘制散点图
sns.scatterplot(x='frequency', y='monetary', hue='label', data=rfm)
plt.xlabel('Frequency')
plt.ylabel('Monetary')
plt.show()
sns.scatterplot(x='recency', y='monetary', hue='label', data=rfm)
plt.xlabel('Recency')
plt.ylabel('Monetary')
plt.show()
sns.scatterplot(x='recency', y='frequency', hue='label', data=rfm)
plt.xlabel('Recency')
plt.ylabel('Frequency')
plt.show()
```
7. 分析聚类结果
根据上述可视化结果,可以对每个聚类标签进行分析,如下:
- 标签0:Recency较大、Frequency和Monetary较小,属于低价值客户,应该采取激励措施提高其购买频率和消费金额。
- 标签1:Recency和Frequency较小、Monetary较大,属于高价值但不活跃的客户,应该通过精准营销措施激活其购买欲望。
- 标签2:Recency、Frequency和Monetary均较小,属于一般价值客户,可以通过优惠券等措施提高其忠诚度。
- 标签3:Recency、Frequency和Monetary均较大,属于高价值且活跃的忠诚客户,应该维护好这部分客户的忠诚度,提供更加个性化的服务。
- 标签4:Recency较小、Frequency和Monetary较大,属于高价值且频繁的客户,可以通过VIP服务等措施提高其忠诚度。
以上就是使用RFM模型进行航空公司客户价值分析的详细代码。
阅读全文