今天要正式来实践资料清理,资料源是台中市政府资料开放平台的公有零售市场每日蔬果价格填报
连结在这
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
data = pd.read_csv("./GOLD_109.csv")
print(data)
非常混乱,一看就知道不清理会很难做事
访价日期 市场名称 丝瓜 花胡瓜 结球白菜 萝卜 胡萝卜 青葱 胡瓜 青江白菜 空心菜 甘蓝 香蕉 番石榴_珍珠 凤梨_开英 荔枝_黑叶 火龙果_红肉 芒果_爱文 木瓜 文旦 新世纪梨 柠檬 ... 花椰菜 洋葱 大蒜 吴郭鱼 虱目鱼 金目鲈 龙虎班 午仔鱼 白虾 文蛤 里肌肉 後腿肉 五花肉 牛腱_冷冻牛肉 腿肉_冷冻牛肉 腩肉_冷冻牛肉 鸡蛋 鸭蛋 肉鸡 土鸡 仿鸡 鸭_土番鸭
0 21/03/2020 沙鹿市场 25.0 20 25 20 18 50.0 30 25 25 30 0 0 0 0 0 0 0 0 0 0 ... 30 30.0 120 50 100 200 260 200 350 120 160 130 160 220 220 240 30 32 130 140 130 130
1 22/03/2020 第五市场 50.0 0 40 50 30 50.0 40 75 0 0 30 60 0 0 0 0 80 0 0 70 ... 0 0.0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 22/03/2020 大甲第二市场 35.0 38 25 28 28 30.0 30 20 0 20 0 0 0 0 0 0 55 0 0 50 ... 0 0.0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
3 22/03/2020 南屯市场 45.0 35 15 18 22 45.0 30 15 38 15 40 50 40 0 0 60 100 0 0 60 ... 0 0.0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
4 22/03/2020 东光市场 40.0 55 28 25 25 50.0 35 35 30 20 35 39 0 0 75 120 39 0 0 50 ... 0 0.0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
... ... ... ... ... ... .. ... ... .. ... ... .. .. ... ... ... ... ... ... .. ... .. ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .. .. ... ... ... ...
2007 04/10/2020 沙鹿市场 25.0 35 22 25 18 110.0 25 18 20 40 0 0 0 0 0 0 0 0 0 0 ... 40 25.0 190 65 130 190 0 165 310 100 135 125 145 0 0 0 33 42 0 130 120 135
2008 05/10/2020 建国市场 30.0 30 25 25 20 40.0 20 20 20 30 15 30 25 0 45 80 30 40 100 25 ... 60 25.0 80 64 96 80 144 190 220 120 120 80 120 180 150 180 33 50 80 72 75 72
2009 05/10/2020 清水第一市场 2.0 50 35 25 25 40.0 30 25 20 25 20 50 0 0 70 0 50 35 0 0 ... 50 25.0 220 55 80 100 0 170 200 90 135 110 125 200 220 250 39 45 90 110 110 90
2010 05/10/2020 沙鹿市场 25.0 35 22 25 18 100.0 25 20 20 40 0 0 0 0 0 0 0 0 0 0 ... 35 25.0 190 65 130 190 0 165 310 100 130 120 140 0 0 0 33 43 0 130 120 135
2011 05/10/2020 中义市场 28.0 55 30 25 30 80.0 35 40 30 45 15 34 0 0 40 65 34 39 0 20 ... 60 35.0 100 4 8 6 10 10 10 9 110 100 125 190 200 200 38 60 120 140 120 110
[2012 rows x 63 columns]
今天分析丰原第一市场的资料就好,这就需要使用到筛选资料的功能了
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
if __name__ == "__main__":
data = pd.read_csv("./GOLD_109.csv")
mask = data["市场名称"] == "丰原第一市场"
data = data[mask].copy()
访价日期 市场名称 丝瓜 花胡瓜 结球白菜 萝卜 ... 鸡蛋 鸭蛋 肉鸡 土鸡 仿鸡 鸭_土番鸭
27 24/03/2020 丰原第一市场 45.0 60 25 25 ... 38 56 80 100 100 340
40 25/03/2020 丰原第一市场 45.0 60 25 25 ... 38 56 80 100 100 340
52 26/03/2020 丰原第一市场 45.0 60 25 25 ... 38 56 80 100 100 340
63 27/03/2020 丰原第一市场 45.0 60 25 25 ... 38 56 80 100 100 340
77 28/03/2020 丰原第一市场 45.0 60 25 25 ... 38 56 80 100 100 340
... ... ... ... ... ... .. ... .. .. .. ... ... ...
1937 26/09/2020 丰原第一市场 35.0 60 45 40 ... 33 56 80 100 100 80
1949 27/09/2020 丰原第一市场 35.0 60 45 40 ... 33 56 80 100 100 80
1956 28/09/2020 丰原第一市场 35.0 60 45 40 ... 33 56 80 100 100 80
1968 29/09/2020 丰原第一市场 35.0 60 45 40 ... 33 56 80 100 100 80
1979 30/09/2020 丰原第一市场 35.0 60 45 40 ... 33 56 80 100 100 80
[188 rows x 63 columns]
资料量从原本的2012笔缩减为188笔,可以明显看出索引的部份仍然是原本2012笔时的索引,因此这时候必须重设索引,请记住
时间序列的索引,就是时间
因此这里要使用一个技巧,先把访价日期栏位的资料型态转为时间,再把这栏位设为索引
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
if __name__ == "__main__":
data = pd.read_csv("./GOLD_109.csv")
mask = data["市场名称"] == "丰原第一市场"
data = data[mask].copy()
#将访价日期栏位资料型态转为时间
data["访价日期"] = pd.to_datetime(data["访价日期"])
data = data.set_index("访价日期")
print(data.index.dtype) #datetime64[ns]
接着可以缩小一些资料,我们来挑选市价比较高的品项就好市价太低的直接不纳入分析目标,我们就以100为界,平均价格比200高的品项保留,其余删除
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
if __name__ == "__main__":
data = pd.read_csv("./GOLD_109.csv")
mask = data["市场名称"] == "丰原第一市场"
data = data[mask].copy()
data["访价日期"] = pd.to_datetime(data["访价日期"])
data = data.set_index("访价日期")
for i in data.columns[1:]:
if data[i].mean() < 200:
data = data.drop([i], axis = 1)
print(data)
市场名称 午仔鱼 白虾 腩肉_冷冻牛肉 鸭_土番鸭
访价日期
2020-03-24 丰原第一市场 380 200 240 340
2020-03-25 丰原第一市场 380 200 240 340
2020-03-26 丰原第一市场 380 200 240 340
2020-03-27 丰原第一市场 380 200 240 340
2020-03-28 丰原第一市场 380 200 240 340
... ... ... ... ... ...
2020-09-26 丰原第一市场 208 192 240 80
2020-09-27 丰原第一市场 208 192 240 80
2020-09-28 丰原第一市场 208 192 240 80
2020-09-29 丰原第一市场 208 192 240 80
2020-09-30 丰原第一市场 208 192 240 80
[188 rows x 5 columns]
异常检测,一张表要是有异常值的话,分析出来的数值可能也会是异常的,所以一定要去除异常值
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
if __name__ == "__main__":
data = pd.read_csv("./OK.csv")
mask = data["市场名称"] == "丰原第一市场"
data = data[mask].copy()
data["访价日期"] = pd.to_datetime(data["访价日期"])
data = data.set_index("访价日期")
for i in data.columns[1:]:
if data[i].mean() < 200:
data = data.drop([i], axis = 1)
data.to_csv("./OK.csv")
读取进来
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
if __name__ == "__main__":
data = pd.read_csv("./OK.csv")
data["访价日期"] = pd.to_datetime(data["访价日期"])
data = data.set_index("访价日期")
print(data)
我们直接看图
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
if __name__ == "__main__":
data = pd.read_csv("./OK.csv")
data["访价日期"] = pd.to_datetime(data["访价日期"])
data = data.set_index("访价日期")
for i in range(1, data.columns.shape[0]):
plt.subplot(2,2,i)
plt.title(data.columns[i])
plt.plot(data[data.columns[i]])
plt.show()
我们可以好直观的看出,这张图有三个主要毛病
首先先解决时间问题
我们发现有些月份日期居然相反了(标红字),我们观察这张表,时间大概是3月到9月,我这里一一去检查每笔资料,只要在月份的字元不是在03~09,就交换
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
if __name__ == "__main__":
data = pd.read_csv("./OK.csv")
month = ["03", "04", "05", "06", "07", "08", "09"]
for i in range(data.shape[0]):
if data["访价日期"][i].split("-")[1] not in month:
year = data["访价日期"][i].split("-")[0]
month = data["访价日期"][i].split("-")[2]
day = data["访价日期"][i].split("-")[1]
data["访价日期"][i] = year + "-" + month + "-" + day
data.to_csv("./OK1.csv", index = 0)
好多了,至少解决了同时间出现多值的情况了
<<: Day 13 : 优化 Zettelkasten 卡片盒笔记法,试试Evergreen Note (长青笔记)
嗨,今天来完成底下文章的部分,金嗨,内容越写越多,因为快要完赛了节奏没抓好XD,前面都是分开解析的,...
前言 在介绍JDK有哪些工具时,第二大列应该是『故障排查、分析、监控和管理工具』,但我想先从监控工具...
Globals 这里先提一下 key: overrides,当组件间相互传递的 key: props...
前言 发现无法轻易取得股票资讯,但换个念头,这应该是市场上所有的资料吧,剩下就是要进行筛检。不过今天...
线性回归是什麽? 讲人话就是利用以往蒐集的资料建立一个预测未来走势的模型,当输入新的值[自变数(in...