php浮点怎么变整型,php标量是什么意思?
以下是有关PHP中变量的最重要知识。原文:codingdict.com/article/7820
PHP中的所有变量均以前导美元符号($)表示。
变量的值是最近赋值的值。
变量用=运算符分配,变量在左侧,表达式在右侧进行计算。
变量可以但不需要在赋值之前声明。
PHP中的变量没有内在类型 一个变量事先并不知道它是用来存储一个数字还是一串字符。
分配之前使用的变量具有默认值。
PHP在自动将类型从一个类型转换为另一个类型时做得很好。
PHP变量是类Perl的。
PHP总共有八种数据类型用于构建我们的变量 -
整数 是 整数 ,没有小数点,如4195。
双精度 是浮点数,如3.14159或49.1。
布尔 只有两个可能的值,无论是真或假。
NULL 是一个只有一个值的特殊类型:NULL。
字符串 是字符序列,如'PHP支持字符串操作'。
数组 是其他值的命名和索引集合。
对象 是程序员定义的类的实例,它可以打包特定于类的其他类型的值和函数。
资源 是持有PHP外部资源引用的特殊变量(如数据库连接)。
前五种是 简单类型 ,后两种(数组和对象)是复合的 复合类型可以打包任意类型的其他任意值,而简单类型则不能。
我们将在本章中仅解释简单的数据类型。数组和对象将分开解释。
即标量类型声明。标量类型声明有两个选项 原文:codingdict.com/article/7881
coercive 强制 强制是默认模式,不需要指定。
strict 严格 严格模式已经明确暗示。
功能参数的以下类型可以使用上述模式强制执行
intfloatboolstringinterfacesarraycallable可视化编程软件有哪些好的推荐?
python了解一下
全文超过6W子,只能贴出部分,全文可私信小编获取
目录准备工作一、关联(Correlation)关系图1、散点图(Scatter plot)2、边界气泡图(Bubble plot with Encircling)3、散点图添加趋势线(Scatter plot with linear regression line of best fit)4、分面散点图添加趋势线(Each regression line in its own column)5、抖动图(Jittering with stripplot)6、计数图(Counts Plot)7、边缘直方图(Marginal Histogram)8、边缘箱图(Marginal Boxplot)9、相关性热图(Correllogram)10、矩阵图 (Pairwise Plot)二、偏差 (Deviation)关系图11、发散型柱形图 (Diverging Bars)12、发散型文本图(Diverging Texts)-水平方向13、发散型文本图(Diverging Texts)-垂直方向14、发散型点图(Diverging Dot Plot)15、带Marker的发散型棒棒糖图 (Diverging Lollipop Chart with Markers)16、面积图(Area Chart)三、排序 (Ranking)关系图17、排序柱形图(Ordered Bar Chart)18、棒棒糖图(Lollipop Chart)19、点图 (Dot Plot)20、坡图(Slope Chart)21、哑铃图(Dumbbell Plot)四、分布(Distribution)关系图21、连续变量堆积直方图(Stacked Histogram for Continuous Variable)22、类别变量堆积直方图(Stacked Histogram for Categorical Variable)23、密度图(Density Plot)24、带直方图的密度图(Density Curves with Histogram)25、山峰叠峦图(Joy Plot)26、分布点图(Distributed Dot Plot)27、箱图(boxplot)28、箱图结合点图(Dot + Box Plot)29、小提琴图(Violin Plot)30、金字塔图(Population Pyramid)31、分类图(Categorical Plots)五、组成(Composition)关系图32、华夫饼图(Waffle Chart)33、饼图(Pie Chart)34、树状图(Treemap)35、柱状图(Bar Chart)六、变化(Change)关系图36、时间序列图(Time Series Plot)37、波峰和波谷添加注释的时间序列图(Time Series with Peaks and Troughs Annotated)38、自相关和部分自相关图(Autocorrelation (ACF) and Partial Autocorrelation (PACF) Plot)39、交叉相关图(Cross Correlation plot)40、时间序列分解图(Time Series Decomposition Plot)41、多重时间序列图(Multiple Time Series)42、双坐标系时间序列图(Plotting with different scales using secondary Y axis)43、带误差阴影的时间序列图(Time Series with Error Bands)44、堆积面积图(Stacked Area Chart)45、非堆积面积图(Area Chart UnStacked)46、日历热力图(Calendar Heat Map)47、季节图(Seasonal Plot)七、分组( Groups)关系图48、聚类树形图(Dendrogram)49、聚类图(Cluster Plot)50、安德鲁斯曲线(Andrews Curve)51、平行坐标图(Parallel Coordinates)
准备工作主要是导入绘图模块,设置绘图风格。
import numpy as npimport pandas as pdimport matplotlib as mplimport matplotlib.pyplot as pltimport seaborn as snsimport warningswarnings.filterwarnings(action='once')plt.style.use('seaborn-whitegrid')sns.set_style("whitegrid")print(mpl.__version__)print(sns.__version__)
34、树状图(Treemap)类似饼图的效果,面积大小反应变量大小。
!pip install squarify#安装依赖包import squarify# Import Datadf_raw = pd.read_csv("./datasets/mpg_ggplot2.csv")# Prepare Datadf = df_raw.groupby('class').size().reset_index(name='counts')labels = df.apply(lambda x: str(x[0]) + "\n (" + str(x[1]) + ")", axis=1)sizes = df['counts'].values.tolist()colors = [plt.cm.Set2(i / float(len(labels))) for i in range(len(labels))]# Draw Plotplt.figure(figsize=(10, 8), dpi=100)squarify.plot(sizes=sizes, label=labels, color=colors, alpha=.8)# Decorateplt.title('Treemap of Vechile Class')plt.axis('off')plt.show()
35、柱状图(Bar Chart)柱子高度表示变量大小。
import random# Import Datadf_raw = pd.read_csv("./datasets/mpg_ggplot2.csv")# Prepare Datadf = df_raw.groupby('manufacturer').size().reset_index(name='counts')n = df['manufacturer'].unique().__len__() + 1all_colors = list(plt.cm.colors.cnames.keys())random.seed(100)c = random.choices(all_colors, k=n)# Plot Barsplt.figure(figsize=(12, 8), dpi=80)plt.bar(df['manufacturer'], df['counts'], color=c, width=.5)for i, val in enumerate(df['counts'].values):plt.text(i,val,float(val),horizontalalignment='center',verticalalignment='bottom',fontdict={'fontweight': 500,'size': 12})# Decorationplt.gca().set_xticklabels(df['manufacturer'],rotation=60,horizontalalignment='right')plt.title("Number of Vehicles by Manaufacturers", fontsize=18)plt.ylabel('# Vehicles')plt.ylim(0, 45)plt.show()
更多关于柱状图:
「Python可视化|matplotlib12-垂直|水平|堆积条形图详解」六、变化(Change)关系图36、时间序列图(Time Series Plot)¶该图展示给定指标随时间的变化趋势。
# Import Datadf = pd.read_csv('./datasets/AirPassengers.csv')# Draw Plotplt.figure(figsize=(12, 8), dpi=80)plt.plot(df['date'], df['value'], color='#dc2624')# Decorationplt.ylim(50, 750)xtick_location = df.index.tolist()[::12]xtick_labels = [x[-4:] for x in df.date.tolist()[::12]]plt.xticks(ticks=xtick_location,labels=xtick_labels,rotation=0,fontsize=12,horizontalalignment='center',alpha=.7)plt.yticks(fontsize=12, alpha=.7)plt.title("Air Passengers Traffic (1949 1969)", fontsize=18)plt.grid(axis='both', alpha=.3)# Remove bordersplt.gca().spines["top"].set_alpha(0.0)plt.gca().spines["bottom"].set_alpha(0.3)plt.gca().spines["right"].set_alpha(0.0)plt.gca().spines["left"].set_alpha(0.3)plt.show()
37、波峰和波谷添加注释的时间序列图(Time Series with Peaks and Troughs Annotated)# Import Datadf = pd.read_csv('./datasets/AirPassengers.csv')# Get the Peaks and Troughsdata = df['value'].valuesdoublediff = np.diff(np.sign(np.diff(data)))peak_locations = np.where(doublediff == -2)[0] + 1doublediff2 = np.diff(np.sign(np.diff(-1 * data)))trough_locations = np.where(doublediff2 == -2)[0] + 1# Draw Plotplt.figure(figsize=(12, 8), dpi=80)plt.plot('date', 'value', data=df, color='tab:blue', label='Air Traffic')plt.scatter(df.date[peak_locations],df.value[peak_locations],marker=mpl.markers.CARETUPBASE,color='tab:green',s=100,label='Peaks')plt.scatter(df.date[trough_locations],df.value[trough_locations],marker=mpl.markers.CARETDOWNBASE,color='tab:red',s=100,label='Troughs')# Annotatefor t, p in zip(trough_locations[1::5], peak_locations[::3]):plt.text(df.date[p],df.value[p] + 15,df.date[p],horizontalalignment='center',color='darkgreen')plt.text(df.date[t],df.value[t] 35,df.date[t],horizontalalignment='center',color='darkred')# Decorationplt.ylim(50, 750)xtick_location = df.index.tolist()[::6]xtick_labels = df.date.tolist()[::6]plt.xticks(ticks=xtick_location,labels=xtick_labels,rotation=45,fontsize=12,alpha=.7)plt.title("Peak and Troughs of Air Passengers Traffic (1949 1969)",fontsize=18)plt.yticks(fontsize=12, alpha=.7)# Lighten bordersplt.gca().spines["top"].set_alpha(.0)plt.gca().spines["bottom"].set_alpha(.3)plt.gca().spines["right"].set_alpha(.0)plt.gca().spines["left"].set_alpha(.3)plt.legend(loc='upper left')plt.grid(axis='y', alpha=.3)plt.show()
38、自相关和部分自相关图(Autocorrelation (ACF) and Partial Autocorrelation (PACF) Plot)自相关,展示时间序列与其自身滞后的相关性。部分自相关,展示任何给定滞后相对于当前序列的自相关。
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf# Import Datadf = pd.read_csv('./datasets/AirPassengers.csv')# Draw Plotfig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 6), dpi=80)plot_acf(df.value.tolist(), ax=ax1, lags=50)plot_pacf(df.value.tolist(), ax=ax2, lags=20)# Decorate# lighten the bordersax1.spines["top"].set_alpha(.3)ax2.spines["top"].set_alpha(.3)ax1.spines["bottom"].set_alpha(.3)ax2.spines["bottom"].set_alpha(.3)ax1.spines["right"].set_alpha(.3)ax2.spines["right"].set_alpha(.3)ax1.spines["left"].set_alpha(.3)ax2.spines["left"].set_alpha(.3)# font size of tick labelsax1.tick_params(axis='both', labelsize=12)ax2.tick_params(axis='both', labelsize=12)plt.show()
39、交叉相关图(Cross Correlation plot)展示两个时间序列相互之间的滞后。
import statsmodels.tsa.stattools as stattools# Import Datadf = pd.read_csv('./datasets/mortality.csv')x = df['mdeaths']y = df['fdeaths']# Compute Cross Correlationsccs = stattools.ccf(x, y)[:100]nlags = len(ccs)# Compute the Significance level# ref: https://stats.stackexchange.com/questions/3115/cross-correlation-significance-in-r/3128#3128conf_level = 2 / np.sqrt(nlags)# Draw Plotplt.figure(figsize=(12, 7), dpi=80)plt.hlines(0, xmin=0, xmax=100, color='gray') # 0 axisplt.hlines(conf_level, xmin=0, xmax=100, color='gray')plt.hlines(-conf_level, xmin=0, xmax=100, color='gray')plt.bar(x=np.arange(len(ccs)), height=ccs, width=.3)# Decorationplt.title('$Cross\; Correlation\; Plot:\; mdeaths\; vs\; fdeaths,fontsize=18)plt.xlim(0, len(ccs))plt.show()
40、时间序列分解图(Time Series Decomposition Plot)¶该图将时间序列分解为趋势、季节和残差分量(trend, seasonal and residual components.)。
from statsmodels.tsa.seasonal import seasonal_decomposefrom dateutil.parser import parse# Import Datadf = pd.read_csv('./datasets/AirPassengers.csv')dates = pd.DatetimeIndex([parse(d).strftime('%Y-%m-01') for d in df['date']])df.set_index(dates, inplace=True)# Decomposeresult = seasonal_decompose(df['value'], model='multiplicative')# Plotplt.figure(figsize=(12, 7), dpi=80)#plt.rcParams.update({'figure.figsize': (10, 10)})result.plot().suptitle('Time Series Decomposition of Air Passengers')plt.show()
41、多重时间序列图(Multiple Time Series)# Import Datadf = pd.read_csv('./datasets/mortality.csv')# Define the upper limit, lower limit, interval of Y axis and colorsy_LL = 100y_UL = int(df.iloc[:, 1:].max().max() * 1.1)y_interval = 400mycolors = ['tab:red', 'tab:blue', 'tab:green', 'tab:orange']# Draw Plot and Annotatefig, ax = plt.subplots(1, 1, figsize=(10, 6), dpi=80)columns = df.columns[1:]for i, column in enumerate(columns):plt.plot(df.date.values, df[column].values, lw=1.5, color=mycolors[i])plt.text(df.shape[0] + 1,df[column].values[-1],column,fontsize=14,color=mycolors[i])# Draw Tick linesfor y in range(y_LL, y_UL, y_interval):plt.hlines(y,xmin=0,xmax=71,colors='black',alpha=0.3,linestyles="--",lw=0.5)# Decorationsplt.tick_params(axis="both",which="both",bottom=False,top=False,labelbottom=True,left=False,right=False,labelleft=True)# Lighten bordersplt.gca().spines["top"].set_alpha(.3)plt.gca().spines["bottom"].set_alpha(.3)plt.gca().spines["right"].set_alpha(.3)plt.gca().spines["left"].set_alpha(.3)plt.title('Number of Deaths from Lung Diseases in the UK (1974-1979)',fontsize=18)plt.yticks(range(y_LL, y_UL, y_interval),[str(y) for y in range(y_LL, y_UL, y_interval)],fontsize=12)plt.xticks(range(0, df.shape[0], 12),df.date.values[::12],horizontalalignment='left',rotation=45,fontsize=12)plt.ylim(y_LL, y_UL)plt.xlim(-2, 80)plt.show()
42、双坐标系时间序列图(Plotting with different scales using secondary Y axis)# Import Datadf = pd.read_csv("./datasets/economics.csv")x = df['date']y1 = df['psavert']y2 = df['unemploy']# Plot Line1 (Left Y Axis)fig, ax1 = plt.subplots(1, 1, figsize=(12, 6), dpi=100)ax1.plot(x, y1, color='tab:red')# Plot Line2 (Right Y Axis)ax2 = ax1.twinx() # instantiate a second axes that shares the same x-axisax2.plot(x, y2, color='tab:blue')# Decorations# ax1 (left Y axis)ax1.set_xlabel('Year', fontsize=18)ax1.tick_params(axis='x', rotation=70, labelsize=12)ax1.set_ylabel('Personal Savings Rate', color='#dc2624', fontsize=16)ax1.tick_params(axis='y', rotation=0, labelcolor='#dc2624')ax1.grid(alpha=.4)# ax2 (right Y axis)ax2.set_ylabel("# Unemployed (1000's)", color='#01a2d9', fontsize=16)ax2.tick_params(axis='y', labelcolor='#01a2d9')ax2.set_xticks(np.arange(0, len(x), 60))ax2.set_xticklabels(x[::60], rotation=90, fontdict={'fontsize': 10})ax2.set_title("Personal Savings Rate vs Unemployed: Plotting in Secondary Y Axis",fontsize=18)fig.tight_layout()plt.show()
43、带误差阴影的时间序列图(Time Series with Error Bands)from dateutil.parser import parsefrom scipy.stats import sem# Import Datadf_raw = pd.read_csv('./datasets/orders_45d.csv',parse_dates=['purchase_time', 'purchase_date'])# Prepare Data: Daily Mean and SE Bandsdf_mean = df_raw.groupby('purchase_date').quantity.mean()df_se = df_raw.groupby('purchase_date').quantity.apply(sem).mul(1.96)# Plotplt.figure(figsize=(10, 6), dpi=80)plt.ylabel("# Daily Orders", fontsize=12)x = [d.date().strftime('%Y-%m-%d') for d in df_mean.index]plt.plot(x, df_mean, color="#c72e29", lw=2)plt.fill_between(x, df_mean df_se, df_mean + df_se, color="#f8f2e4")# Decorations# Lighten bordersplt.gca().spines["top"].set_alpha(0)plt.gca().spines["bottom"].set_alpha(1)plt.gca().spines["right"].set_alpha(0)plt.gca().spines["left"].set_alpha(1)plt.xticks(x[::6], [str(d) for d in x[::6]], fontsize=12)plt.title("Daily Order Quantity of Brazilian Retail with Error Bands (95% confidence)",fontsize=14)# Axis limitss, e = plt.gca().get_xlim()plt.xlim(s, e 2)plt.ylim(4, 10)# Draw Horizontal Tick linesfor y in range(5, 10, 1):plt.hlines(y,xmin=s,xmax=e,colors='black',alpha=0.5,linestyles="--",lw=0.5)plt.show()
44、堆积面积图(Stacked Area Chart)# Import Datadf = pd.read_csv('./datasets/nightvisitors.csv')# Decide Colors mycolors = ['#dc2624', '#2b4750', '#45a0a2', '#e87a59', '#7dcaa9', '#649E7D', '#dc8018', '#C89F91'] # Draw Plot and Annotatefig, ax = plt.subplots(1,1,figsize=(12, 8), dpi= 80)columns = df.columns[1:]labs = columns.values.tolist()# Prepare datax = df['yearmon'].values.tolist()y0 = df[columns[0]].values.tolist()y1 = df[columns[1]].values.tolist()y2 = df[columns[2]].values.tolist()y3 = df[columns[3]].values.tolist()y4 = df[columns[4]].values.tolist()y5 = df[columns[5]].values.tolist()y6 = df[columns[6]].values.tolist()y7 = df[columns[7]].values.tolist()y = np.vstack([y0, y2, y4, y6, y7, y5, y1, y3])# Plot for each columnlabs = columns.values.tolist()ax = plt.gca()ax.stackplot(x, y, labels=labs, colors=mycolors, alpha=0.8)ax.tick_params(axis='x', rotation=45, labelsize=12)# Decorationsax.set_title('Night Visitors in Australian Regions', fontsize=18)ax.set(ylim=[0, 100000])ax.legend(fontsize=10, ncol=4)plt.xticks(x[::5], fontsize=10, horizontalalignment='center')plt.yticks(np.arange(10000, 100000, 20000), fontsize=10)plt.xlim(x[0], x[-1])# Lighten bordersplt.gca().spines["top"].set_alpha(0)plt.gca().spines["bottom"].set_alpha(.3)plt.gca().spines["right"].set_alpha(0)plt.gca().spines["left"].set_alpha(.3)plt.show()
45、非堆积面积图(Area Chart UnStacked)# Import Datadf = pd.read_csv("./datasets/economics.csv")# Prepare Datax = df['date'].values.tolist()y1 = df['psavert'].values.tolist()y2 = df['uempmed'].values.tolist()columns = ['psavert', 'uempmed']# Draw Plotfig, ax = plt.subplots(1, 1, figsize=(12, 6), dpi=80)ax.fill_between(x,y1=y1,y2=0,label=columns[1],alpha=0.5,color='#dc2624',linewidth=2)ax.fill_between(x,y1=y2,y2=0,label=columns[0],alpha=0.5,color='#649E7D',linewidth=2)# Decorationsax.set_title('Personal Savings Rate vs Median Duration of Unemployment',fontsize=18)ax.set(ylim=[0, 30])ax.legend(loc='best', fontsize=12)plt.xticks(x[::50], fontsize=10, horizontalalignment='center')plt.yticks(np.arange(2.5, 30.0, 2.5), fontsize=10)plt.xlim(-10, x[-1])plt.tick_params(axis='x', rotation=45, labelsize=12)# Draw Tick linesfor y in np.arange(2.5, 30.0, 2.5):plt.hlines(y,xmin=0,xmax=len(x),colors='black',alpha=0.3,linestyles="--",lw=0.5)# Lighten bordersplt.gca().spines["top"].set_alpha(0)plt.gca().spines["bottom"].set_alpha(.3)plt.gca().spines["right"].set_alpha(0)plt.gca().spines["left"].set_alpha(.3)plt.show()
46、日历热力图(Calendar Heat Map)很好地展示数据在假日的趋势。
!pip install calmap -i https://pypi.tuna.tsinghua.edu.cn/simple#安装依赖包import numpy as npnp.random.seed(sum(map(ord, 'calmap')))import pandas as pdimport calmapcalmap.calendarplot(events,monthticks=3,daylabels='MTWTFSS',dayticks=[0, 2, 4, 6],cmap='YlGn',fillcolor='grey',linewidth=0,fig_kws=dict(figsize=(8, 4)))
47、季节图(Seasonal Plot)该图比较某个指标在不同年份同一天/年/月/周等的时间序列的表现。
from dateutil.parser import parse# Import Datadf = pd.read_csv('./datasets/AirPassengers.csv')# Prepare datadf['year'] = [parse(d).year for d in df.date]df['month'] = [parse(d).strftime('%b') for d in df.date]years = df['year'].unique()# Draw Plotmycolors = ['#dc2624', '#2b4750', '#45a0a2', '#e87a59', '#7dcaa9', '#649E7D','#dc8018', '#C89F91', '#6c6d6c', '#4f6268', '#c7cccf', 'firebrick']plt.figure(figsize=(10, 6), dpi=80)for i, y in enumerate(years):plt.plot('month','value',data=df.loc[df.year == y, :],color=mycolors[i],label=y)plt.text(df.loc[df.year == y, :].shape[0] .9,df.loc[df.year == y, 'value'][-1:].values[0],y,fontsize=12,color=mycolors[i])# Decorationplt.ylim(50, 750)plt.xlim(-0.3, 11)plt.ylabel('$Air Traffic)plt.yticks(fontsize=11, alpha=.7)plt.xticks(fontsize=11, alpha=.7)plt.title("Monthly Seasonal Plot: Air Passengers Traffic (1949 1969)",fontsize=16)plt.grid(axis='y', alpha=.3)# Remove bordersplt.gca().spines["top"].set_alpha(0.0)plt.gca().spines["bottom"].set_alpha(0.5)plt.gca().spines["right"].set_alpha(0.0)plt.gca().spines["left"].set_alpha(0.5)# plt.legend(loc='upper right', ncol=2, fontsize=12)plt.show()
七、分组( Groups)关系图48、聚类树形图(Dendrogram)展示通过聚类形成的组内及组间相似性水平。
import scipy.cluster.hierarchy as shc# Import Datadf = pd.read_csv('./datasets/USArrests.csv')# Plotplt.figure(figsize=(12, 8), dpi=80)plt.title("USArrests Dendograms", fontsize=18)dend = shc.dendrogram(shc.linkage(df[['Murder', 'Assault', 'UrbanPop','Rape']],method='ward'),labels=df.State.values,color_threshold=200)plt.xticks(fontsize=12)plt.yticks(fontsize=12)plt.show()
49、聚类图(Cluster Plot)通过聚类计算距离,将同一类圈起来。
from sklearn.cluster import AgglomerativeClusteringfrom scipy.spatial import ConvexHull# Import Datadf = pd.read_csv('./datasets/USArrests.csv')# Agglomerative Clusteringcluster = AgglomerativeClustering(n_clusters=5,affinity='euclidean',linkage='ward')cluster.fit_predict(df[['Murder', 'Assault', 'UrbanPop', 'Rape']])# Plotplt.figure(figsize=(12, 8), dpi=80)plt.scatter(df.iloc[:, 0], df.iloc[:, 1], c=cluster.labels_, cmap='tab10')# Encircledef encircle(x, y, ax=None, **kw):if not ax: ax = plt.gca()p = np.c_[x, y]hull = ConvexHull(p)poly = plt.Polygon(p[hull.vertices, :], **kw)ax.add_patch(poly)# Draw polygon surrounding verticesencircle(df.loc[cluster.labels_ == 0, 'Murder'],df.loc[cluster.labels_ == 0, 'Assault'],ec="k",fc="#dc2624",linewidth=0)encircle(df.loc[cluster.labels_ == 1, 'Murder'],df.loc[cluster.labels_ == 1, 'Assault'],ec="k",fc="#2b4750",linewidth=0)encircle(df.loc[cluster.labels_ == 2, 'Murder'],df.loc[cluster.labels_ == 2, 'Assault'],ec="k",fc="#649E7D",linewidth=0)encircle(df.loc[cluster.labels_ == 3, 'Murder'],df.loc[cluster.labels_ == 3, 'Assault'],ec="k",fc="#C89F91",linewidth=0)encircle(df.loc[cluster.labels_ == 4, 'Murder'],df.loc[cluster.labels_ == 4, 'Assault'],ec="k",fc="#c7cccf",linewidth=0)# Decorationsplt.xlabel('Murder')plt.xticks(fontsize=12)plt.ylabel('Assault')plt.yticks(fontsize=12)plt.title('Agglomerative Clustering of USArrests (5 Groups)', fontsize=18)plt.show()
50、安德鲁斯曲线(Andrews Curve)展示是否存在基于给定分组的特征的固有分组。例如下图,如果数据集中的列不能帮助区分组(cyl),则行将不会被很好地分隔开。
from pandas.plotting import andrews_curves# Importdf = pd.read_csv("./datasets/mtcars.csv")df.drop(['cars', 'carname'], axis=1, inplace=True)# Plotplt.figure(figsize=(10, 6), dpi=80)andrews_curves(df, 'cyl', colormap='Set2_r')# Lighten bordersplt.gca().spines["top"].set_alpha(0)plt.gca().spines["bottom"].set_alpha(.3)plt.gca().spines["right"].set_alpha(0)plt.gca().spines["left"].set_alpha(.3)plt.title('Andrews Curves of mtcars', fontsize=18)plt.xlim(-3, 3)plt.grid(alpha=0.3)plt.xticks(fontsize=12)plt.yticks(fontsize=12)plt.show()
51、平行坐标图(Parallel Coordinates)展示某个特征是否有助于分组。如果一个特征隔离,分组受到影响,则该特征对该分组非常必要。
from pandas.plotting import parallel_coordinates# Import Datadf_final = pd.read_csv("./datasets/diamonds_filter.csv")# Plotplt.figure(figsize=(11, 7), dpi=80)parallel_coordinates(df_final, 'cut', colormap='Set2_r')# Lighten bordersplt.gca().spines["top"].set_alpha(0)plt.gca().spines["bottom"].set_alpha(.3)plt.gca().spines["right"].set_alpha(0)plt.gca().spines["left"].set_alpha(.3)plt.title('Parallel Coordinated of Diamonds', fontsize=18)plt.grid(alpha=0.3)plt.xticks(fontsize=12)plt.yticks(fontsize=12)plt.show()
如何从零开始学习Java?
Java语言是当今程序开发领域的重要工具之一,整个IT行业有大量的Java程序员在从事Web开发、大数据开发、Android开发、后端开发等岗位,因此从就业的角度来说,学习Java语言是个不错的选择。
学习Java语言可以从以下几个方面入手:
第一:理解Java语言中的“抽象”。Java语言是面向对象编程语言,具有较高的抽象层次,所以说学习Java的一个重点就是理解各种“抽象”概念,比如类(class)、接口(interface)、抽象类(abstract class)、枚举(enum)等概念。理解抽象的过程也是建立面向对象编程思想的过程,也就是考虑问题的方式方法。
第二:掌握Java语言的编程过程。Java语言的编程过程总的来说可以分为三个大的步骤,分别是类的定义、对象的创建和方法的调用,这是Java编程的“主线”。在掌握了Java编程这条主线之后,紧接着就要分别了解封装、继承、多态等概念的应用,进而逐步完成对Java开发过程的了解。
第三:重视实验和。学习Java编程一定要多动手做实验,通过实验一方面可以建立抽象概念的画面感,另一方面也可以通过实验培养自己的动手能力。另外,实验完成之后一定要及时的,这是完善编程思想的重要过程。
第四:注重交流。学习Java语言一定要多与其他程序员交流,交流的过程也是学习的过程,另外可以通过阅读优秀的代码来养成一个较好的编程习惯。
最后,在学习完Java的基本语法之后,要选择一个发展方向,不同的开发方向需要掌握的知识结构是不同的,因此需要制定不同的学习计划。通常情况下,如果没有明确的开发方向,可以选择Web开发方向。
Java程序员应该学习哪些技术呢?
学习是一个循序渐进的过程,是一件非常难得坚持的事情。如果真的想学Java,一定要下定决心!
这里我分享给你的Java学习线路图,希望对你有帮助,以下为2020年更新版本,黑马君在2020年更新了Java学习路线图,把2019年新技术,新课程囊括其中,也写了技术树,每个阶段需要学习的技术,跟着学学完你就是中高级程序员!
一、Java基础JavaSE基础是Java中级程序员的起点,是帮助你从小白到懂得编程的必经之路。
在Java基础板块中有6个子模块的学习:
基础语法,可帮助你建立基本的编程逻辑思维;面向对象,以对象方式去编写优美的Java程序;集合,后期开发中存储数据必备技术;IO,对磁盘文件进行读取和写入基础操作;多线程与并发,提高程序效率;异常,编写代码逻辑更加健全;网络编程,应用服务器学习基础,完成数据的远程传输。学习该阶段,可以完成一些简单的管理系统、坦克大战游戏、QQ通信等。配套学习视频:
Java教程|Java基础班-小白的福音(冯老师)
二、数据库数据库不仅仅是Java开发工程师的必学课程,也是其他语言都需要掌握的技能。用于对交互过程中客户的数据进行存储。
该板块包括关系型数据库和非关系型数据库。
例如:MySQL、oracle、redis、MongoDB等。数据库学习完毕后,可以将数据存储到数据库中,也可以通过SQL语句从数据库中查询数据,结合Java项目可以实现动态站点的数据的保存。
技术树
配套学习视频:
5天玩转MySQL
Sharding-JDBC从入门到精通
java进阶教程4天oracle快速入门
三、前端技术Javaweb阶段包括前端、数据库和动态网页。Javaweb是互联网项目的入门课程,是学习后面高进阶课程的基础。
首先,我们先看一下前端板块。该板块主要包括如下几个模块:
HTML5,网页制作标记语言;CSS,对HTML制作网页进行美化;JavaScript,嵌入在页面中的脚本语言,具备逻辑性;Vue,前端框架,简化了与服务器端交互的操作,用户良好的交互体验是必不可少的。学习前端技术后,可以完成类似京东、淘宝的前端工程的编写。
技术树
配套学习视频:
Ajax从入门到精通|黑马程序员
2018年Vue.js深入浅出教程
PHP HTML+CSS+JavaScript教程
零基础玩转微信小程序
四、动态网页技术动态网页是中级程序员服务器端编程的基础,是高级框架学习的必备课程,后期学习的框架、服务底层都是基于动态网页技术之上的。
该板块包括Javaweb核心技术、包括Servlet、Request、Response、Cookie和Session等,通过这些技术的学习可以完成动态站点开发,可更好的完成服务器端与客户的交互,让页面的数据“动”起来,做出小型的应用系统。
技术树
配套学习视频:
JavaWeb教程_JavaWeb入门教程|黑马程序员
servlet4.0新特性
五、编程强化编程强化是对解决实际问题方面做一个深入的了解和应用,是对JavaSE基础的加强,对后期自动以框架和对一些服务框架的底层理解做支撑。
编程强化板块主要包括如下几个模块:多线程高级、涉及线程内存、线程通信等;JVM优化,对JVM底层进行调优来提高项目执行效率;NIO,同步非阻塞IO来提高效率。
学习该阶段,可以对原有项目进行优化从而使程序更快更稳定。
技术树
配套学习视频:
Java多线程与并发库高级应用
java程序算法与实际运用--刘意老师
匠心之作java基础强化之JVM内存结构
匠心之作java基础强化之强转溢出&浮点数运算精讲
六、软件项目管理JavaSE基础是Java中级程序员的起点,是帮助你从小白到懂得编程的必经之路。
在Java基础板块中有6个子模块的学习:基础语法,可帮助你建立基本的编程逻辑思维;面向对象,以对象方式去编写优美的Java程序;集合,后期开发中存储数据必备技术;IO,对磁盘文件进行读取和写入基础操作;多线程与并发,提高程序效率;异常,编写代码逻辑更加健全;网络编程,应用服务器学习基础,完成数据的远程传输。
学习该阶段,可以完成一些简单的管理系统、坦克大战游戏、QQ通信等。
技术树
配套学习视频:
Maven教程_Maven视频教程|黑马程序员
Git零基础入门到实战详
七、热门技术框架使用Javaweb进行企业级开发是完全可以的,但是开发效率比较低,所以对常用的逻辑操作进行封装就形成了框架,因此框架是企业开发的入门技能。
热门框架板块主流框架有如下几个:Spring框架,占据统治地位,其生态系统涉及各个方面解决方案;MyBatis框架,使用ORM思想对数据库进行操作。
该板块学习后,就可以进行真实企业级项目开发了,做出的项目也会更加符合企业要求。
技术树
配套学习视频:
Java教程|Springmvc由浅入深教程
java进阶教程Mybatis由浅入深教程
JPA教程_JPA视频教程|黑马程序员
数据层全栈方案 SpringData 高级应用
八、分布式架构方案随着互联网的发展,业务的复杂性和用户的体验性都需要提高,所以分布式架构出现了。该板块主要讲解的是分布式架构的相关解决方案。
主要包括如下模块:Dubbo,高性能的 RPC 服务发布和调用框架;SpringBoot,简化Spring应用的初始搭建以及开发过程;Spring Cloud,一系列框架的有序集合,如服务发现注册、配置中心、负载均衡、断路器、数据监控等。
该板块的学习,可以具备大型互联网项目开发的必备技术和实际经验,为进入BATJ打下基础
技术树
配套学习视频:
java中级程序员教程快速入门Zookeeper+dubbo
两小时由浅入深搞定springboot
4天从浅入深精通SpringCloud 微服务架构
九、服务器中间件中间件板块是大型互联网项目中必备的。服务中间件可以帮助各子模块间实现互相访问,消息共享或统一访问等功能。其包括远程服务框架中间件,例如阿里(Apache)的RPC框架Dubbo等;消息队列中间件,例如:阿里巴巴开源分布式中间件RocketMQ、高吞吐量消息发布和流处理服务Kafka等。
学习服务中间件是中级JavaEE工程师必要技术,也是JavaEE架构师必须精通的技术。
技术树
配套学习视频:
MongoDB基础入门到高级进阶
REDIS高级应用:使用redis消息队列完成秒杀过期订单处理
十、服务器技术
不管是使用原生Javaweb进行开发,还是使用框架进行开发,项目最终需要对外发布才能供全世界的人访问到,而服务器板块就可以解决这个问题,所以服务器是项目发布的必要技术。该板块包括虚拟化和web应用服务器的学习,主要包括如下几个模块:Vmware,虚拟机软件;Linux,专门用于服务器的系统;Nginx,集群部署时反向代理服务器;Tomcat,项目发布时主要使用的服务器。
该板块学习后,我们就可以把开发好的项目发布到服务器中,然后供你的小伙伴远程访问了,超酷!
技术树
配套学习视频:
高可用的并发解决方案nginx+keepalived
Linux运维189讲系统教程
服务器tomcat(Java开发必会)
利刃出鞘-Tomcat核心原理解析
十一、容器技术
容器化技术是近两年超级火的一个专题,通过容器化技术可以对环境进行打包,方便移植,大大提高了开发效率。该板块包括容器化技术Docker和其平台管理引擎Kubernetes,其中,Docker 是一个开源的应用容器引擎,可以打包应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows 机器上,也可以实现虚拟化。而Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效。通过该板块的学习,你可以通过上述技术快速搭建环境,节省开发时间,提高开发效率。
技术树
配套学习视频:
深入解析docker容器化技术
十二、业务解决方案
虽然我们已经具备了基础技术和高阶技术,但是要想与企业开发相接轨,还需要对实际项目的业务解决方案进行探究。而此版块就是在实际业务场景中的真实解决方案集合,常用的业务解决方案有如下:搜索业务场景解决方案、日志收集与分析场景解决方案、工作流引擎场景解决方案、任务调度场景解决方案、地图开发平台场景解决方案、支付开放平台场景解决方案、图表可视化场景解决方案。通过分析实际业务来学习这个解决方案技术集,完全可以达到中级甚至高级工程师水平。
技术树
好了,学习线路图分享到这里
如何学习数据分析?
想要成为数据分析师,给大家分享一份初级的入门指南!
它包含Excel、数据可视化、数据分析思维、数据库、统计学、业务、以及Python。
这七part 的内容刚好涵盖了一位数据分析师需要掌握的基础体系,也是一位新人从零迈入数据大门的知识手册。
第一part:Excel
每一位数据分析师都脱离不开Excel。
它是日常工作中最常用的工具,如果不考虑性能和数据量,它可以应付绝大部分分析工作。虽然现在机器学习满地走,Excel依旧是无可争议的第一工具。
Excel的学习分为两个部分。
掌握各类功能强大的函数,函数是一种负责输入和输出的神秘盒子。把各类数据输入,经过计算和转换输出我们想要的结果。
在SQL,Python以及R中,函数依旧是主角。掌握Excel的函数有助于后续的学习,因为你几乎在编程中能找到名字一样或者相近的函数。
在「数据分析:常见的Excel函数全部涵盖在这里了」中,介绍了常用的Excel函数。
清洗处理类:trim、concatenate、replace、substitute、left/right/mid、len/lenb、find、search、text
关联匹配类:lookup、vlookup、index、match、row、column、offset
逻辑运算类:if、and、or、is系列
计算统计类:sum/sumif/sumifs、sumproduct、count/countif/countifs、max、min、rank、rand/randbetween、averagea、quartile、stdev、substotal、int/round
时间序列类:year、month、weekday、weeknum、day、date、now、today、datedif
搜索能力是掌握Excel的不二窍门,工作中的任何问题都是可以找到答案。
第二部分是Excel中的工具。
在「数据分析:Excel技巧大揭秘」教程,介绍了Excel最具性价比的几个技巧。包括数据透视表、格式转换、数组、条件格式、自定义下拉菜单等。正是这些工具,才让Excel在分析领域经久不衰。
在大数据量的处理上,微软提供了Power系列,它和Excel嵌套,能应付百万级别的数据处理,弥补了Excel的不足。
Excel需要反复练习,实战教程「数据分析:手把手教你Excel实战」,它通过网络上抓取的数据分析师薪资数据作为练习,各类函数的使用。
除了上述要点,下面是附加的知识点,铺平数据分析师以后的道路。
了解单元格格式,数据分析师会和各种数据类型打交道,包括各类timestamp,date,string,int,bigint,char,factor,float等。
了解数组,以及相关应用(excel的数组挺难用),Python和R也会涉及到 list,是核心概念之一。
了解函数,深入理解各种参数的作用。它会在学习Python中帮助到你。
了解中文编码,UTF8、GBK、ASCII,这是数据分析师的坑点之一。
第二part:数据可视化
数据分析界有一句经典名言,字不如表,表不如图。
数据可视化是分析的常用技巧之一,不少数据分析师的工作就是通过图表观察和监控数据。首先了解常用的图表:
Excel的图表可以100%绘制上面的图形,但这只是基础。
在「数据可视化:你想知道的经典图表全在这」中介绍了各类数据分析的经典图表,除了趋势图、直方图,还包括桑基图、空间图、热力图等额外的类型。
数据可视化不是图表的美化,而是呈现数据的逻辑之美,是揭示数据的内在关联。了解图表的维度和适用场景,比好看更重要。比如桑吉图就是我一直推崇的图表,它并不知名,但是它能清晰的揭露数据内在状态的变化和流向。案例是用户活跃状态的趋势。
Excel的图表操作很傻瓜化,其依旧能打造出一份功能强大的可视化报表。「数据可视化:教你打造升职加薪的报表」教给大家常用的Excel绘图技巧,包括配色选取,无用元素的剔除、辅助线的设立、复合图表等方法。
Excel图表的创造力是由人决定的,对数据的理解,观察和认知,以及对可视化的应用,这是一条很长的道路。
图表是单一的,当面板上绘制了多张图表,并且互相间有关联,我们常称之为Dashboard仪表盘。
上图就是用分析师薪资数据为数据源绘制的Dashboard,比单元格直观不少。我们常常把绘制这类Dashboard的工具叫做BI。
BI(商业智能)主要有两种用途。一种是利用BI制作自动化报表,数据类工作每天都会接触大量数据,并且需要整理汇总,这是一块很大的工作量。这部分工作完全可以交给BI自动化完成,从数据规整、建模到下载。
另外一种是使用其可视化功能进行分析,它提供比Excel更丰富的交互功能,操作简单,而且美观,如果大家每天作图需要两小时,BI能缩短大半。
在「数据可视化:手把手打造BI」教程中,以微软的PowerBI举例,教大家如何读取数据,规整和清洗数据,绘制图表以及建立Dashboard。最后的成果就是上文列举的分析师案例。
BI还有几个核心概念,包括OLAP,数据的联动,钻取,切片等,都是多维分析的技巧,也是分析的核心方法之一。
后续的进阶可视化,将和编程配合。因为编程能够提供更高效率和灵活的应用。而BI也是技术方向的工具,了解技术知识对应用大有帮助。
第三part:数据分析思维数据分析能力的高低,不以工具和技巧决定,而以分析思维决定。
在一场战争中,士兵装备再好的武装,进行再严苛的训练,若是冲锋的方向错了,那么迎接他们的唯有一败涂地。
分析思维决定一场「数据战争」中的冲锋方向。只有先养成正确的分析思维,才能使用好数据。
既然是思维,它就倾向于思考的方式,Excel函数学会了就是学会,分析则不同。大多数人的思维方式都依赖于生活和经验做出直觉性的判断,以「我觉得我认为」展开,好的数据分析首先要有结构化的思维。
麦肯锡是其中领域的佼佼者,创建了一系列分析框架和思维工具。最典型地莫过于金字塔思维。
这篇文章简述了该思维的应用,「快速掌握麦肯锡的分析思维」。你能学会结构化思考,MECE原则,假设先行,关键驱动等方法论。
除此以外,还有SMART、5W2H、SWOT、4P4C、六顶思考帽等,这些都是不同领域的框架。框架的经典在于,短时间内指导新人如何去思考,它未必是最好的,但一定是性价比最优的。数据分析思维,是分析思维的引申应用。再优秀的思考方式,都需要佐证和证明,数据就是派这个用处的,「不是我觉得,而是数据证明」。
现代管理学之父彼得·德鲁克说过一句很经典的话:如果你不能衡量它,那么你就不能有效增长它。如果把它应用在数据领域,就是:如果你不能用指标描述业务,那么你就无法有效增长它。每一位数据分析师都要有指标体系的概念,报表也好,BI也好,即使机器学习,也是围绕指标体系建立的。
下图就是一个典型的指标体系,描述了用户从关注产品、下载、乃至最后离开的整个环节。每一个环节,都有数据及指标以查询监控。
不同业务背景需要的指标体系不同,但有几个建立指标的通用准则。这篇文章深入介绍了「如何建立数据分析的思维框架」。你将区分什么是好指标、什么是坏指标、比率和比例、指标的结构、指标设立的维度等概念。
数据分析不是一个结果,而是一个过程。几乎所有的分析,最终目的都是增长业务。所以比分析思维更重要的是驱动思维落地,把它转化为成果。
数据分析思维是常年累月养成的习惯,一周时间很难训练出来,但这里有一个缩短时间的日常习惯。以生活中的问题出发做练习。
这家商场的人流量是多少?怎么预估?
上海地区的共享单车投放量是多少?怎么预估?
街边口的水果店,每天的销量和利润是多少?怎么预估?
这些开放性问题起源于咨询公司的训练方法,通过不断地练习,肯定能有效提高分析思维。另外就是刷各种CaseBook。
优秀的数据分析师会拷问别人的数据,而他本身的分析也经得起拷问。
第四part:数据库
Excel很容易遇到瓶颈,随着业务的发展,分析师接触的数据会越来越多。对大部分人的电脑,超过十万条数据,已经会影响性能。何况大数据时代就是不缺数据,这时候就需要学习数据库了。
即使非数据岗位,也有越来越多的产品和运营被要求使用SQL。
很多数据分析师戏称自己是跑SQL的,这间接说明SQL在数据分析中有多核心。从Excel到SQL绝对是处理效率的一大进步。
教程内容以MySQL为主,这是互联网行业的通用标准。其实语法差异不大的。
新手首先应该了解表的概念,表和Excel中的sheet类似。「写给新人的数据库指南」是一篇入门基础文章,包括表、ID索引、以及数据库的安装,数据导入等简单知识。
SQL的应用场景,均是围绕select展开。增删改、约束、索引、数据库范式均可以跳过。新手在「SQL,从入门到熟练」教程会学习到最常见的几个语法,select、where、group by、if、count/sum、having、order by、子查询以及各种常用函数。
数据还是分析师薪资数据,它可以和Excel实战篇结合看,不少原理都是相通的。
想要快速掌握,无非是大量的练习。大家可以在leetcode上做SQL相关的练习题,难度从简单到困难都有。「SQL,从熟练到掌握」教程中将会带领大家去刷一遍。
join对新手是一个很绕的概念,教程会从图例讲解,逐步提高难度。从一开始的join关联,到条件关联、空值匹配关联、子查询关联等。最后完成leetcode中的hard模式。
如果想要更进一步,可以学习row_number,substr,convert,contact等函数。不同数据平台的函数会有差异,例如Presto和phpMyAdmin。再想提高,就去了解Explain优化,了解SQL的工作原理,了解数据类型,了解IO。知道为什么union比or的效率快,这已经和不少程序员并驾齐驱。
第五part:统计学
很多数据分析师并不注重统计学基础。
比如产品的AB测试,如果相关人员不清楚置信度的含义和概念,那么好的效果能意味着好么?如果看待显著性?
比如运营一次活动,若不了解描述统计相关的概念,那么如何判别活动在数据上的效果?可别用平均数。
不了解统计学的数据分析师,往往是一个粗糙的分析师。如果你想要往机器学习发展,那么统计学更是需要掌握的基础。
统计知识会教大家以另一个角度看待数据。如果大家了解过《统计数据会撒谎》,那么就知道很多数据分析的决策并不牢靠。
在第一篇教程「解锁数据分析的正确姿势:描述统计」,会教给大家描述统计中的诸多变量,比如平均数、中位数、众数、分位数、标准差、方差。这些统计标准会让新手分析师从平均数这个不靠谱的泥潭中出来。
箱线图就是描述统计的大成者,好的分析师一定是惯用箱线图的常客。
第二篇「解锁数据分析的正确姿势:描述统计(2)」将会结合可视化,对数据的分布进行一个直观的概念讲解。很多特定的模型都有自有的数据分布图,掌握这些分布图对分析的益处不可同日而语。
直方图和箱线图一样,将会是长久伴随分析师的利器。
统计学的一大主要分支是概率论,概率是度量一件事发生的可能性,它是介于0到1之间的数值。很多事情,都可以用概率论解释,「概率论的入门指南」和「读了本文,你就懂了概率分布」都是对其的讲解。
包括贝叶斯公式、二项概率、泊松概率、正态分布等理论。理论不应用现实,那是无根之木,教程中会以运营活动最常见的抽奖概率为讲解,告诉大家怎么玩。
其实数据分析中,概率应用最广泛和最全面的知识点,就是假设检验,大名鼎鼎的AB测试就是基于它的。俗话说得好,再优秀的产品经理也跑不过一半AB测试。
何为假设检验?假设检验是对预设条件的估计,通过样本数据对假设的真伪进行判断。
产品改版了,用户究竟喜不喜欢?调研的评分下降了,这是用户的评价降低了,还是正常的数据波动呢?这些都是可以做假设检验的。它可以说是两面两篇文章的回顾和应用。
「数据分析必须懂的假设检验」依旧以互联网场景讲解各种统计技巧的应用。假设检验并不难,通过Excel的几个函数就能完成。它的难点在于诸多知识点和业务的结合使用,实际公式不需要掌握的多透彻,了解背后的意义更重要。
统计学是一个很广阔的领域,包括方差分析,时间序列等,都有各自不同的应用。大家若感兴趣,可以去阅读各类教材,没错,教材是学习统计学最优的方式。我这类文章堪堪算入门罢了。
第六part:业务
对于数据分析师来说,业务的了解比数据方法论更重要。举个例子,一家O2O配送公司发现在重庆地区,外卖员的送货效率低于其他城市,导致用户的好评率降低。总部的数据分析师建立了各个指标去分析原因,都没有找出来问题。后来在访谈中发觉,因为重庆是山城,路面高低落差比较夸张,很多外卖人员的小电瓶上不了坡…所以导致送货效率慢。这个案例中,我们只知道送货员的送货水平距离,根本不知道垂直距离。这是数据的局限,也是只会看数据的分析师和接地气分析师的最大差异。业务形态千千万万,数据分析师往往难窥一二。我的公众号业务部分也涉及了不少,大家可以通过这几篇文章了解。
一篇文章读懂活跃数据;深入浅出,用户生命周期的运营;获取新增用户,运营都应该知道的事;运营的商业逻辑:CAC和CLV;从零开始,构建数据化运营体系;读懂用户运营体系:用户分层和分群,这些都是互联网运营相关的内容,或多或少涉及了不少业务方面的概念,数据分析人员可以选择性的挑选部分内容。了解业务的数据分析师在职场发展上会更加顺利。
而在「最用心的运营数据指标解读」中,我尝试了几个泛互联网领域的指标和业务模型,它们都是通用的框架。
产品运营模型:以移动端APP为主体,围绕AARRR准则搭建起数据框架。包括Acquisition用户获取、Activation用户活跃、Retention用户留存、Revenue营收、Refer传播,以及细分指标。
市场营销模型:以传统的市场营销方法论为基底,围绕用户的生命周期建立框架。包括用户生命周期,生命周期价值、用户忠诚指数、用户流失指数、用户RFM价值等。
流量模型:从早期的网站分析发展而来,以互联网的流量为核心。包括浏览量曝光率、病毒传播周期、用户分享率、停留时间、退出率跳出率等。
电商和消费模型:以商品的交易、零售、购买搭建而起。包括GMV、客单价、复购率、回购率、退货率、购物篮大小、进销存,也包含SKU、SPU等商品概念。
用户行为模型:通过用户在产品功能上的使用,获得精细的人群维度,以此作为分析模型。包括用户偏好、用户兴趣、用户响应率、用户画像、用户分层,还包含点赞评论浏览收藏等功能的相关指标。
除了上述的几个常见模型,数据分析还有其他分支。比如SEO/SEM,虽然可以归类到流量模型,但它并不简单。比如财务分析,商业的各种成本支出也需要专人负责。
在业务知识外,业务层面的沟通也很重要。业务线足够长的时候,沟通往往成为老大难的问题。
业务学习没有捷径,哪怕掌握了诸多模型,不同行业间的业务壁垒会是分析师们的门槛。金融的各类专有领域知识,电子商务不同产品的特性,这些都会影响到分析报告的质量。
在早期,新人最好选择一到两个领域深入了解其业务,然后以此拓展边界。
第七part:Python/R
第七周是最后的学习环节。
是否具备编程能力,是初级数据分析和高级数据分析的风水岭。数据挖掘、BI、爬虫、可视化报表都需要用到编程。掌握一门优秀的编程语言,可以让数据分析师升职加薪,迎娶白富美。数据分析领域最热门的两大语言是R和Python。R的优点是统计学家编写的,缺点也是统计学家编写。涉及各类统计函数和工具的调用,R无疑有优势。但是大数据量的处理力有不逮,学习曲线比较陡峭。
Python则是万能的胶水语言,适用性强,可以将分析的过程脚本化。Pandas、Numpy、SKLearn等包也是非常丰富。
这里的教程以Python为主。
「开始Python的新手教程」将会教大家搭建数据分析环境,Anaconda是功能强大的数据科学工具。Python建议安装Python3+版本,不要选择Python2了。
Python的语法相当简洁,大家print出第一个hello world顶多半小时。就像在Excel上进行运算一样方便。
「开始Python的数据结构」介绍给大家Python的三类数据结构,列表list,元组tuple,以及字典dict。万变不离其宗,掌握这三种数据结构以及相对应的函数,足够应付80%的分析场景。函数式编程为Python一大特色,Python自身就提供不少丰富的函数。很多都和Excel的函数相通,掌握起来非常迅速。另外还有控制流,for、while、if,通常配合函数组合使用。
「了解和掌握Python的函数」教大家如何自定义函数,丰富的函数虽然能偷懒,但是不少场景下,还是需要自己动手撸一个。
能够调第三方包解决,就使用第三方的函数。如果是一个频繁使用的场景,而第三方依靠不了,就自己编一个函数。如果是临时性的场景,写得粗糙点也无所谓。毕竟分析师的代码能力不要求工程师那么严格,所以Python的学习尽量以应用为主,不用像分析师那么严格。
包、模块和类的概念属于进阶知识,不学也不要紧。
「Python的数据分析: numpy和pandas入门」介绍了数据分析师赖以生存的两个包,numpy和pandas,其他Python知识可以不扎实,这两个最好认真掌握。它是往后很多技能树的前置要求。
array,series,dataframe是numpy和pandas的三个数据结构,掌握它们,便算是入门了。后续的两篇教程都是实战。
「用pandas进行数据分析实战」以分析师的薪资作为实战数据。Excel、BI、SQL,一路走来,大家想必对它无比熟悉,这也是最后一次使用它了。教程通过Pandas的各类功能,绘制出一副词云图。
最后一篇教程,将结合以往的知识点,包括业务指标,可视化,描述统计学等内容。「用Python分析用户消费行为」,完成它,不说登堂入室,但也是一位合格的数据分析师了。
它使用某网站的用户消费数据,计算各类常见指标:用户的客单价、人均购买量、回购率、复购率、留存率、平均生命周期等,真正做到融会贯通。用一份数据报告作为毕业作品,也是七周系列最好的结业证书了。
对于没有技术基础的同学,第七part最吃力,但已经完成到这一步,不妨让自己咬咬牙学习下去。
最后
如果能够看完到这里的同学,相信你是对数据分析真正感兴趣的。