using system;
using system.collections.generic;
using system.componentmodel;
using system.data;
using system.drawing;
using system.linq;
using system.text;
using system.windows.forms;
using system.data.sqlclient;
namespace multicurve
private void form1_load(object sender, eventargs e)
}private void createimage(int id)
dr.close(); //關閉sqldatareader物件
//畫的邊框線
g.drawrectangle(new pen(color.blue), 0, 0, image.width - 1, image.height - 1);
pen mypen = new pen(brush, 1); //建立畫筆
pen mypen2 = new pen(color.red, 2); //建立畫筆
int x = 60;
for (int i = 0; i < 12; i++)
pen mypen1 = new pen(color.blue, 2); //建立畫筆
g.drawline(mypen1, x - 480, 80, x - 480, 340); //繪製線條
int y = 106;
for (int i = 0; i < 9; i++)
g.drawline(mypen1, 60, y, 540, y);
//x軸
string n = ; //繪製月份
x = 35;
for (int i = 0; i < 12; i++)
//y軸
string m = ; //繪製人數
y = 100;
for (int i = 0; i < 9; i++)
int count1 = new int[12];
int count2 = new int[12];
string numchr = new string[12];
string cmdtxt2 = "select * from tb_curve where years=" + id + ""; //宣告sql語句
sqlcommand com1 = new sqlcommand(cmdtxt2, con); //建立sqlcommand物件
sqldataadapter da = new sqldataadapter(); //建立sqldataadapter物件
da.selectcommand = com1;
dataset ds = new dataset(); //建立dataset物件
da.fill(ds); //fill方法填充dataset
int j = 0;
for (int i = 0; i < 12; i++)
for (j = 0; j < 12; j++)
for (int k = 0; k < 12; k++)
//顯示折線效果
solidbrush mybrush = new solidbrush(color.red); //建立solidbrush物件
point points1 = new point[12];
points1[0].x = 60; points1[0].y = 340 - count1[0];
points1[1].x = 100; points1[1].y = 340 - count1[1];
points1[2].x = 140; points1[2].y = 340 - count1[2];
points1[3].x = 180; points1[3].y = 340 - count1[3];
points1[4].x = 220; points1[4].y = 340 - count1[4];
points1[5].x = 260; points1[5].y = 340 - count1[5];
points1[6].x = 300; points1[6].y = 340 - count1[6];
points1[7].x = 340; points1[7].y = 340 - count1[7];
points1[8].x = 380; points1[8].y = 340 - count1[8];
points1[9].x = 420; points1[9].y = 340 - count1[9];
points1[10].x = 460; points1[10].y = 340 - count1[10];
points1[11].x = 500; points1[11].y = 340 - count1[11];
g.drawlines(mypen2, points1); //繪製折線
pen mypen3 = new pen(color.black, 2); //建立畫筆
point points2 = new point[12];
points2[0].x = 60; points2[0].y = 340 - count2[0];
points2[1].x = 100; points2[1].y = 340 - count2[1];
points2[2].x = 140; points2[2].y = 340 - count2[2];
points2[3].x = 180; points2[3].y = 340 - count2[3];
points2[4].x = 220; points2[4].y = 340 - count2[4];
points2[5].x = 260; points2[5].y = 340 - count2[5];
points2[6].x = 300; points2[6].y = 340 - count2[6];
points2[7].x = 340; points2[7].y = 340 - count2[7];
points2[8].x = 380; points2[8].y = 340 - count2[8];
points2[9].x = 420; points2[9].y = 340 - count2[9];
points2[10].x = 460; points2[10].y = 340 - count2[10];
points2[11].x = 500; points2[11].y = 340 - count2[11];
g.drawlines(mypen3, points2); //繪製折線
//繪製標識
g.drawrectangle(new pen(brushes.red), 150, 370, 250, 50); //繪製範圍框
g.fillrectangle(brushes.red, 250, 380, 20, 10); //繪製小矩形
g.drawstring("試用員工人數", font2, brushes.red, 270, 380); //繪製試用員工人數
g.fillrectangle(brushes.black, 250, 400, 20, 10); //繪製小矩形
g.drawstring("正式員工人數", font2, brushes.black, 270, 400); //繪製正式員工人數
this.panel1.backgroundimage = image; //顯示繪製的影象
資料分析 留存率曲線擬合
留存率,在資料分析中,我認為是乙個比較好用的指標,因為比較穩定,不會很容易受外界因素的干擾,大幅波動。例如活動,推廣等。可以用來做使用者的分類,做使用者規模 我們看到的留存曲線通常是這樣的 這裡介紹幾種留存率曲線擬合的方法 1.用excel 擬合 擬合樣本,1日 12日留存率,畫好曲線圖後,為曲線圖...
資料分析 資料分析概述
了解業務 了解資料 確認業務和資料 預期分析和管理 資料分析方式01.了解資料資料 1.測量標度型別 屬性本源並不是數字或者符號,通過測量標度將數值或者符號和物件的屬性建立關聯。屬性的型別 測量尺度 nominal 標稱 等於或者不等於 一對一的變換 ordinal 序數 大於或者小於 單調函式的變...
資料分析 資料分析的誤區
在資料分析的過程中,我們難免會走一些彎路,但有些彎路是可以避免的,下面我將介紹幾個資料分析過程中常見的誤區 我們一定都聽說過二戰中的乙個經典示例 軍方為了提高戰鬥機飛行員的生還率,打算在飛機上增加裝甲的厚度,但不能在所有部位加厚,這樣會喪失戰機的靈活性,於是軍方請了統計學家來研究,這些專家在一開始就...