670 lines
23 KiB
Plaintext
670 lines
23 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 2,
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"start_time": "2023-05-04T16:38:46.118916Z",
|
||
"end_time": "2023-05-04T16:38:46.677858Z"
|
||
}
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"import os\n",
|
||
"\n",
|
||
"from IPython.core.interactiveshell import InteractiveShell #执行该代码可以使得当前nb支持多输出\n",
|
||
"InteractiveShell.ast_node_interactivity = \"all\" \n",
|
||
"import numpy as np\n",
|
||
"import pandas as pd \n",
|
||
"pd.options.display.max_rows = 8 "
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"**作业**\n",
|
||
"综合运用stack/unstack,pivot/melt"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 69,
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2023-05-04T00:55:08.244550Z",
|
||
"start_time": "2023-05-04T00:55:08.207092Z"
|
||
},
|
||
"scrolled": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"item realgdp infl unemp\n",
|
||
"date \n",
|
||
"1959-03-31 2710.3 0.0 5.8\n",
|
||
"1959-06-30 2778.8 2.3 5.1\n",
|
||
"1959-09-30 2775.5 2.7 5.3\n",
|
||
"1959-12-31 2785.2 0.3 5.6\n",
|
||
"... ... ... ...\n",
|
||
"2008-12-31 13141.9 -8.8 6.9\n",
|
||
"2009-03-31 12925.4 0.9 8.1\n",
|
||
"2009-06-30 12901.5 3.4 9.2\n",
|
||
"2009-09-30 12990.3 3.6 9.6\n",
|
||
"\n",
|
||
"[203 rows x 3 columns]\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"#有可能是版本问题,需要加入.strftime('%Y-%m-%d')\n",
|
||
"data = pd.read_csv('macrodata.csv')\n",
|
||
"#指定数据索引\n",
|
||
"data.index = pd.PeriodIndex(year=data.year, quarter=data.quarter,name='date').strftime('%Y-%m-%d')\n",
|
||
"data = data.reindex(columns=pd.Index(['realgdp', 'infl', 'unemp'], name='item'))\n",
|
||
"print(data)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"**作业1:**\n",
|
||
"data通过stack/melt获得ldata"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 70,
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2023-05-04T00:55:09.083067Z",
|
||
"start_time": "2023-05-04T00:55:09.040601Z"
|
||
},
|
||
"scrolled": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>date</th>\n",
|
||
" <th>item</th>\n",
|
||
" <th>value</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>1959-03-31</td>\n",
|
||
" <td>realgdp</td>\n",
|
||
" <td>2710.3</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>1959-03-31</td>\n",
|
||
" <td>infl</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>1959-03-31</td>\n",
|
||
" <td>unemp</td>\n",
|
||
" <td>5.8</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>1959-06-30</td>\n",
|
||
" <td>realgdp</td>\n",
|
||
" <td>2778.8</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>1959-06-30</td>\n",
|
||
" <td>infl</td>\n",
|
||
" <td>2.3</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" date item value\n",
|
||
"0 1959-03-31 realgdp 2710.3\n",
|
||
"1 1959-03-31 infl 0.0\n",
|
||
"2 1959-03-31 unemp 5.8\n",
|
||
"3 1959-06-30 realgdp 2778.8\n",
|
||
"4 1959-06-30 infl 2.3"
|
||
]
|
||
},
|
||
"execution_count": 70,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>date</th>\n",
|
||
" <th>item</th>\n",
|
||
" <th>value</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>1959-03-31</td>\n",
|
||
" <td>realgdp</td>\n",
|
||
" <td>2710.3</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>1959-06-30</td>\n",
|
||
" <td>realgdp</td>\n",
|
||
" <td>2778.8</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>1959-09-30</td>\n",
|
||
" <td>realgdp</td>\n",
|
||
" <td>2775.5</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>1959-12-31</td>\n",
|
||
" <td>realgdp</td>\n",
|
||
" <td>2785.2</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>1960-03-31</td>\n",
|
||
" <td>realgdp</td>\n",
|
||
" <td>2847.7</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" date item value\n",
|
||
"0 1959-03-31 realgdp 2710.3\n",
|
||
"1 1959-06-30 realgdp 2778.8\n",
|
||
"2 1959-09-30 realgdp 2775.5\n",
|
||
"3 1959-12-31 realgdp 2785.2\n",
|
||
"4 1960-03-31 realgdp 2847.7"
|
||
]
|
||
},
|
||
"execution_count": 70,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"#请输入data使用stack实现的代码(不得使用melt)\n",
|
||
"data = data.reset_index()#重置索引,将旧索引添加为列,并使用新的顺序索引\n",
|
||
"\n",
|
||
"ldata= data.set_index('date').stack().reset_index()\n",
|
||
"ldata.columns = ['date', 'item', 'value']\n",
|
||
"ldata.head()\n",
|
||
"\n",
|
||
"# 请输出data使用melt实现的代码(不得使用stack)\n",
|
||
"data = data.reset_index()\n",
|
||
"#id_vars指定不需要被重塑的列,value_vars指定要被转换为新行的列,var_name指定新的行中存储变量名称的列的名称\n",
|
||
"ldata = pd.melt(data, id_vars=['date'], value_vars=['realgdp', 'infl', 'unemp'], var_name='item', value_name='value')\n",
|
||
"ldata.head()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"**作业2**\n",
|
||
"\n",
|
||
"ldata通过pivot/unstack恢复data"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 71,
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2023-05-04T00:56:26.852233Z",
|
||
"start_time": "2023-05-04T00:56:26.823785Z"
|
||
},
|
||
"scrolled": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th>item</th>\n",
|
||
" <th>infl</th>\n",
|
||
" <th>realgdp</th>\n",
|
||
" <th>unemp</th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>date</th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>1959-03-31</th>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>2710.3</td>\n",
|
||
" <td>5.8</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1959-06-30</th>\n",
|
||
" <td>2.3</td>\n",
|
||
" <td>2778.8</td>\n",
|
||
" <td>5.1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1959-09-30</th>\n",
|
||
" <td>2.7</td>\n",
|
||
" <td>2775.5</td>\n",
|
||
" <td>5.3</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1959-12-31</th>\n",
|
||
" <td>0.3</td>\n",
|
||
" <td>2785.2</td>\n",
|
||
" <td>5.6</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1960-03-31</th>\n",
|
||
" <td>2.3</td>\n",
|
||
" <td>2847.7</td>\n",
|
||
" <td>5.2</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
"item infl realgdp unemp\n",
|
||
"date \n",
|
||
"1959-03-31 0.0 2710.3 5.8\n",
|
||
"1959-06-30 2.3 2778.8 5.1\n",
|
||
"1959-09-30 2.7 2775.5 5.3\n",
|
||
"1959-12-31 0.3 2785.2 5.6\n",
|
||
"1960-03-31 2.3 2847.7 5.2"
|
||
]
|
||
},
|
||
"execution_count": 71,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>infl</th>\n",
|
||
" <th>realgdp</th>\n",
|
||
" <th>unemp</th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>date</th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>1959-03-31</th>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>2710.3</td>\n",
|
||
" <td>5.8</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1959-06-30</th>\n",
|
||
" <td>2.3</td>\n",
|
||
" <td>2778.8</td>\n",
|
||
" <td>5.1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1959-09-30</th>\n",
|
||
" <td>2.7</td>\n",
|
||
" <td>2775.5</td>\n",
|
||
" <td>5.3</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1959-12-31</th>\n",
|
||
" <td>0.3</td>\n",
|
||
" <td>2785.2</td>\n",
|
||
" <td>5.6</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1960-03-31</th>\n",
|
||
" <td>2.3</td>\n",
|
||
" <td>2847.7</td>\n",
|
||
" <td>5.2</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" infl realgdp unemp\n",
|
||
"date \n",
|
||
"1959-03-31 0.0 2710.3 5.8\n",
|
||
"1959-06-30 2.3 2778.8 5.1\n",
|
||
"1959-09-30 2.7 2775.5 5.3\n",
|
||
"1959-12-31 0.3 2785.2 5.6\n",
|
||
"1960-03-31 2.3 2847.7 5.2"
|
||
]
|
||
},
|
||
"execution_count": 71,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"#请输入ldata使用pivot实现的代码(不得使用unstack)\n",
|
||
"pivoted = ldata.pivot(index='date', columns='item', values='value')\n",
|
||
"pivoted.head() #同data.head()\n",
|
||
"\n",
|
||
"#请输入ldata使用unstack实现的代码(不得使用pivot)\n",
|
||
"# 将date列转换为索引,并将item列转换为列标签\n",
|
||
"pivoted = ldata.set_index(['date', 'item'])['value'].unstack()\n",
|
||
"# 重命名列标签级别的名称\n",
|
||
"pivoted.columns.name = None\n",
|
||
"\n",
|
||
"pivoted.head() #同data.head() "
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"**作业3:**\n",
|
||
"\n",
|
||
"参照“经营数据分析.xlsx”,求解下列问题,使得输出与结果相同"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 9,
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"start_time": "2023-05-04T16:43:49.565864Z",
|
||
"end_time": "2023-05-04T16:43:49.608312Z"
|
||
}
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
" 方案 设备投资 单件成本 年销售量 销售单价 年收益\n",
|
||
"0 方案1 1500000 1700 8000 2900 8100000\n",
|
||
"1 方案2 2000000 1550 8000 2900 8800000\n",
|
||
"2 方案3 2500000 1400 8000 2900 9500000\n",
|
||
"年收益最高的方案是: 方案3\n",
|
||
" 方案 设备投资 单件成本 年销售量 销售单价 年收益 差值\n",
|
||
"0 方案1 1500000 1700 8000 2900 8100000 1960000090000\n",
|
||
"1 方案2 2000000 1550 8000 2900 8800000 740000022500\n",
|
||
"2 方案3 2500000 1400 8000 2900 9500000 1000000000000\n",
|
||
"差值最小的方案是: 方案2\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/plain": " 畅销 一般 滞销\n方案 \n方案1 12900000 8100000 300000\n方案2 14200000 8800000 25000\n方案3 15500000 9500000 -250000",
|
||
"text/html": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>畅销</th>\n <th>一般</th>\n <th>滞销</th>\n </tr>\n <tr>\n <th>方案</th>\n <th></th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>方案1</th>\n <td>12900000</td>\n <td>8100000</td>\n <td>300000</td>\n </tr>\n <tr>\n <th>方案2</th>\n <td>14200000</td>\n <td>8800000</td>\n <td>25000</td>\n </tr>\n <tr>\n <th>方案3</th>\n <td>15500000</td>\n <td>9500000</td>\n <td>-250000</td>\n </tr>\n </tbody>\n</table>\n</div>"
|
||
},
|
||
"execution_count": 9,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
},
|
||
{
|
||
"data": {
|
||
"text/plain": " 畅销 一般 滞销 折中\n方案 \n方案1 12900000 8100000 300000 8490000.0\n方案2 14200000 8800000 25000 9238750.0\n方案3 15500000 9500000 -250000 9987500.0",
|
||
"text/html": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>畅销</th>\n <th>一般</th>\n <th>滞销</th>\n <th>折中</th>\n </tr>\n <tr>\n <th>方案</th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>方案1</th>\n <td>12900000</td>\n <td>8100000</td>\n <td>300000</td>\n <td>8490000.0</td>\n </tr>\n <tr>\n <th>方案2</th>\n <td>14200000</td>\n <td>8800000</td>\n <td>25000</td>\n <td>9238750.0</td>\n </tr>\n <tr>\n <th>方案3</th>\n <td>15500000</td>\n <td>9500000</td>\n <td>-250000</td>\n <td>9987500.0</td>\n </tr>\n </tbody>\n</table>\n</div>"
|
||
},
|
||
"execution_count": 9,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"折中方案最佳方案是: 方案3\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/plain": " 畅销 一般 滞销 期望\n方案 \n方案1 12900000 8100000 300000 6630000.0\n方案2 14200000 8800000 25000 7146250.0\n方案3 15500000 9500000 -250000 7662500.0",
|
||
"text/html": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>畅销</th>\n <th>一般</th>\n <th>滞销</th>\n <th>期望</th>\n </tr>\n <tr>\n <th>方案</th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>方案1</th>\n <td>12900000</td>\n <td>8100000</td>\n <td>300000</td>\n <td>6630000.0</td>\n </tr>\n <tr>\n <th>方案2</th>\n <td>14200000</td>\n <td>8800000</td>\n <td>25000</td>\n <td>7146250.0</td>\n </tr>\n <tr>\n <th>方案3</th>\n <td>15500000</td>\n <td>9500000</td>\n <td>-250000</td>\n <td>7662500.0</td>\n </tr>\n </tbody>\n</table>\n</div>"
|
||
},
|
||
"execution_count": 9,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"期望值最佳方案是: 方案3\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"## 单目标求解\n",
|
||
"# 年收益=年销售量*(销售单价-单件成本)-设备投资\n",
|
||
"# 求年收益最佳方案?\n",
|
||
"df = pd.read_excel(\"经营数据分析.xlsx\")\n",
|
||
"# 计算年收益\n",
|
||
"df['年收益'] = df['年销售量'] * (df['销售单价'] - df['单件成本']) - df['设备投资']\n",
|
||
"# 按照年收益找最大值,取方案列\n",
|
||
"best_plan = df.loc[df['年收益'].idxmax(), '方案']\n",
|
||
"print(df)\n",
|
||
"print('年收益最高的方案是:', best_plan)\n",
|
||
"\n",
|
||
"\n",
|
||
"#\n",
|
||
"# ## 多目标求解 ----\n",
|
||
"# 期望值=[min(设备投资),min(单件成本),max(年销售量),max(销售单价),\n",
|
||
"# max(年收益)];\n",
|
||
"# 差值=每个方案中,各项数据与期望值的之差的平方和\n",
|
||
"# 求差值最佳方案?\n",
|
||
"df = pd.read_excel(\"经营数据分析.xlsx\")\n",
|
||
"# 计算年收益\n",
|
||
"df['年收益'] = df['年销售量'] * (df['销售单价'] - df['单件成本']) - df['设备投资']\n",
|
||
"# 计算期望值\n",
|
||
"expected_values = [df['设备投资'].min(), df['单件成本'].min(), df['年销售量'].max(), df['销售单价'].max(), df['年收益'].max()]\n",
|
||
"# 转换为Series以匹配 df\n",
|
||
"expected_values = pd.Series(expected_values, index=df.columns[1:])\n",
|
||
"\n",
|
||
"# 计算差值\n",
|
||
"df['差值'] = np.sum((df - expected_values) ** 2, axis=1)\n",
|
||
"# 选择差值最小的方案\n",
|
||
"best_plan = df.loc[df['差值'].idxmin(), '方案']\n",
|
||
"# 禁用科学计数法打印\n",
|
||
"pd.set_option('float_format','{:.0f}'.format)\n",
|
||
"print(df)\n",
|
||
"print('差值最小的方案是:', best_plan)\n",
|
||
"\n",
|
||
"\n",
|
||
"# 不确定性决策分析 ----\n",
|
||
"## 分析方法\n",
|
||
"# PLm=pd.DataFrame();# 损益矩阵 ProfitLoss matrix\n",
|
||
"# PLm['畅销']= 12000*(销售单价-单件成本)-设备投资;\n",
|
||
"# PLm['一般']= 8000*(销售单价-单件成本)-设备投资;\n",
|
||
"# PLm['滞销']= 1500*(销售单价-单件成本)-设备投资;\n",
|
||
"# #\n",
|
||
"# ## 分析原则----\n",
|
||
"# # 乐观原则\n",
|
||
"# lg=损益矩阵三种情况的最大值\n",
|
||
"#\n",
|
||
"# # 悲观原则\n",
|
||
"# bg=损益矩阵三种情况的最小值\n",
|
||
"#\n",
|
||
"# # 折中原则\n",
|
||
"# a=0.65 #65%的乐观概率\n",
|
||
"# 折中方案= a*lg + (1-a)*bg;\n",
|
||
"# 求折中最佳方案?\n",
|
||
"df = pd.read_excel(\"经营数据分析.xlsx\")\n",
|
||
"# 计算损益矩阵\n",
|
||
"PLm = pd.DataFrame()\n",
|
||
"PLm['畅销'] = 12000 * (df['销售单价'] - df['单件成本']) - df['设备投资']\n",
|
||
"PLm['一般'] = 8000 * (df['销售单价'] - df['单件成本']) - df['设备投资']\n",
|
||
"PLm['滞销'] = 1500 * (df['销售单价'] - df['单件成本']) - df['设备投资']\n",
|
||
"PLm.set_index(df['方案'])\n",
|
||
"pd.set_option('float_format', '{:.1f}'.format)\n",
|
||
"# 计算乐观、悲观和折中方案\n",
|
||
"mids = []\n",
|
||
"a = 0.65\n",
|
||
"for index, row in PLm.iterrows():#返回行索引和行的内容\n",
|
||
" mids.append(row.max() * a + (1-a) * row.min())\n",
|
||
"PLm['折中'] = mids\n",
|
||
"PLm['方案']=df['方案']\n",
|
||
"PLm.set_index('方案')\n",
|
||
"best_plan = df.loc[PLm['折中'].idxmax(), '方案']\n",
|
||
"print('折中方案最佳方案是:',best_plan)\n",
|
||
"\n",
|
||
"# # 概率性决策分析 ----\n",
|
||
"## 期望值法 ----\n",
|
||
"probE=[0.1,0.65,0.25]; #畅销、一般、滞销的概率\n",
|
||
"# 期望值=损益矩阵*probE\n",
|
||
"# 求期望值最佳方案?\n",
|
||
"df = pd.read_excel(\"经营数据分析.xlsx\")\n",
|
||
"# 刷新PLm\n",
|
||
"PLm = pd.DataFrame()\n",
|
||
"PLm['畅销'] = 12000 * (df['销售单价'] - df['单件成本']) - df['设备投资']\n",
|
||
"PLm['一般'] = 8000 * (df['销售单价'] - df['单件成本']) - df['设备投资']\n",
|
||
"PLm['滞销'] = 1500 * (df['销售单价'] - df['单件成本']) - df['设备投资']\n",
|
||
"\n",
|
||
"# 利用numpy的dot乘法求出期望值\n",
|
||
"expected_values = np.dot(PLm, probE)\n",
|
||
"PLm['期望'] = expected_values\n",
|
||
"# 设为保留一位小数\n",
|
||
"PLm['期望']=expected_values\n",
|
||
"PLm['方案']=df['方案']\n",
|
||
"PLm.set_index('方案')\n",
|
||
"best_plan = df.loc[PLm['期望'].idxmax(), '方案']\n",
|
||
"print('期望值最佳方案是:',best_plan)\n",
|
||
"\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
}
|
||
],
|
||
"metadata": {
|
||
"hide_input": false,
|
||
"kernelspec": {
|
||
"display_name": "Python 3 (ipykernel)",
|
||
"language": "python",
|
||
"name": "python3"
|
||
},
|
||
"language_info": {
|
||
"codemirror_mode": {
|
||
"name": "ipython",
|
||
"version": 3
|
||
},
|
||
"file_extension": ".py",
|
||
"mimetype": "text/x-python",
|
||
"name": "python",
|
||
"nbconvert_exporter": "python",
|
||
"pygments_lexer": "ipython3",
|
||
"version": "3.10.10"
|
||
},
|
||
"toc": {
|
||
"base_numbering": 1,
|
||
"nav_menu": {},
|
||
"number_sections": true,
|
||
"sideBar": true,
|
||
"skip_h1_title": false,
|
||
"title_cell": "Table of Contents",
|
||
"title_sidebar": "Contents",
|
||
"toc_cell": false,
|
||
"toc_position": {},
|
||
"toc_section_display": true,
|
||
"toc_window_display": false
|
||
}
|
||
},
|
||
"nbformat": 4,
|
||
"nbformat_minor": 1
|
||
}
|