直觉可靠吗?
在数据分析时, 直接往往是不可靠的, 因为数据是真实的, 没有经过任何人为处理, 而且并非二维的线性模型。
而且, 数据的复杂程度, 是难以用直觉处理的, 必须用科学的工具。
当前模型的分数为:
Score: 0.77511
还有很多的提升空间。根据以往写深度学习模型的经验, 一般是2/8法则, 20%的时间写一个能用的模型, 剩下80%的时间优化模型。
1 数据分析
https://www.youtube.com/watch?v=fS70iptz-XU
这个视频提供了很好的数据模型方法与解题思路。
train.csv文件, 就是一个数据表格, 用pandas和matplotlib.pyplot可以大大提高分析效率。
import pandas as pd
df = pd.read_csv('titanic/train.csv')
print(df.shape)
print(df.count())
(891, 12)
PassengerId 891
Survived 891
Pclass 891
Name 891
Sex 891
Age 714
SibSp 891
Parch 891
Ticket 891
Fare 891
Cabin 204
Embarked 889
dtype: int64
可以看到, 表格为891行, 12列, 部分数据没有填写, 需要做数据清洗。
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('titanic/train.csv')
fig = plt.figure(figsize=(8, 4)) # fig size = 8 * 4
df.Survived.value_counts().plot(kind='bar', alpha=0.5)
plt.show()
用value_counts()可以作图分析:
可见, 891名乘客中, 大约550人死亡, 350人存活。
也可用百分数:只需加入:normalize=True
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('titanic/train.csv')
fig = plt.figure(figsize=(8, 4)) # fig size = 8 * 4
df.Survived.value_counts(normalize=True).plot(kind='bar', alpha=0.5)
plt.show()
可见60%的死亡, 40%的存活。
记得电影中说道, 妇女和儿童优先上救生艇, 先看年龄
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('titanic/train.csv')
fig = plt.figure(figsize=(8, 4)) # fig size = 8 * 4
plt.subplot2grid((2,3), (0,0)) # sub1
df.Survived.value_counts(normalize=True).plot(kind='bar', alpha=0.5)
plt.title("Survived")
plt.subplot2grid((2,3), (0,1)) # sub2
plt.scatter(df.Survived, df.Age, alpha=0.1)
plt.title("Age wrt Survived")
plt.show()
可以看出, 电影是真实的, 死亡的大多为老年人, 存活的大多为年轻人。中年人的存活死亡几乎相同。
如果加入头等舱,2, 3等, 结果如下:
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('titanic/train.csv')
fig = plt.figure(figsize=(8, 4)) # fig size = 8 * 4
plt.subplot2grid((2,3), (0,0)) # sub1
df.Survived.value_counts(normalize=True).plot(kind='bar', alpha=0.5)
plt.title("Survived")
plt.subplot2grid((2,3), (0,1)) # sub2
plt.scatter(df.Survived, df.Age, alpha=0.1)
plt.title("Age wrt Survived")
plt.subplot2grid((2,3), (0,2)) # sub3
df.Pclass.value_counts(normalize=True).plot(kind='bar', alpha=0.5)
plt.title("Class")
plt.show()
可以看到, 富人和穷人的比例
如果加入曲线, 可以看到穷人和富人的分布
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('titanic/train.csv')
fig = plt.figure(figsize=(8, 4)) # fig size = 8 * 4
plt.subplot2grid((2,3), (0,0)) # sub1
df.Survived.value_counts(normalize=True).plot(kind='bar', alpha=0.5)
plt.title("Survived")
plt.subplot2grid((2,3), (0,1)) # sub2
plt.scatter(df.Survived, df.Age, alpha=0.1)
plt.title("Age wrt Survived")
plt.subplot2grid((2,3), (0,2)) # sub3
df.Pclass.value_counts(normalize=True).plot(kind='bar', alpha=0.5)
plt.title("Class")
plt.subplot2grid((2,3), (1,0), colspan=2)
for x in [1, 2, 3]:
df.Age[df.Pclass == x].plot(kind='kde') # kind density estimation
plt.title('Class wrt Age')# with regard to
plt.legend(("1st", "2nd", "3rd"))
plt.show()
群人几乎都是20岁左右, 富人大多为30-40岁。
昨天, 本以为死亡与乘客无关, 但通过作图发现, 多数为英国人, 少数为法国和爱尔兰人。
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('titanic/train.csv')
fig = plt.figure(figsize=(8, 4)) # fig size = 8 * 4
plt.subplot2grid((2,3), (0,0)) # sub1
df.Survived.value_counts(normalize=True).plot(kind='bar', alpha=0.5)
plt.title("Survived")
plt.subplot2grid((2,3), (0,1)) # sub2
plt.scatter(df.Survived, df.Age, alpha=0.1)
plt.title("Age wrt Survived")
plt.subplot2grid((2,3), (0,2)) # sub3
df.Pclass